> RingOfIntegers(K); Maximal Equation Order with defining polynomial x^3 - 2 over ZZ > RingOfIntegers(L); Maximal Equation Order with defining polynomial x^2 + [0, -1, 0] over its ground orderSometimes the ring of integers of isn't just . First a simple example, then a more complicated one:
> K<a> := NumberField(2*x^2-3); // doesn't have to be monic > 2*a^2 - 3; 0 > K; Number Field with defining polynomial x^2 - 3/2 over the Rational Field > O := RingOfIntegers(K); > O; Maximal Order of Equation Order with defining polynomial 2*x^2 - 3 over ZZ > Basis(O); [ O.1, O.2 ] > [K!x : x in Basis(O)]; [ 1, 2*a // this is Sqrt(3) ]Here's are some more examples:
> procedure ints(f) // (procedures don't return anything; functions do) K<a> := NumberField(f); O := MaximalOrder(K); print [K!z : z in Basis(O)]; end procedure; > ints(x^2-5); [ 1, 1/2*(a + 1) ] > ints(x^2+5); [ 1, a ] > ints(x^3-17); [ 1, a, 1/3*(a^2 + 2*a + 1) ] > ints(CyclotomicPolynomial(7)); [ 1, a, a^2, a^3, a^4, a^5 ] > ints(x^5+&+[Random(10)*x^i : i in [0..4]]); // RANDOM [ 1, a, a^2, a^3, a^4 ] > ints(x^5+&+[Random(10)*x^i : i in [0..4]]); // RANDOM [ 1, a, a^2, 1/2*(a^3 + a), 1/16*(a^4 + 7*a^3 + 11*a^2 + 7*a + 14) ]Lets find out how high of a degree can easily deal with.
> d := 10; time ints(x^10+&+[Random(10)*x^i : i in [0..d-1]]); [ 1, a, a^2, a^3, a^4, a^5, a^6, a^7, a^8, a^9 ] Time: 0.030 > d := 15; time ints(x^10+&+[Random(10)*x^i : i in [0..d-1]]); [ 1, 7*a, 7*a^2 + 4*a, 7*a^3 + 4*a^2 + 4*a, 7*a^4 + 4*a^3 + 4*a^2 + a, 7*a^5 + 4*a^4 + 4*a^3 + a^2 + a, 7*a^6 + 4*a^5 + 4*a^4 + a^3 + a^2 + 4*a, 7*a^7 + 4*a^6 + 4*a^5 + a^4 + a^3 + 4*a^2, 7*a^8 + 4*a^7 + 4*a^6 + a^5 + a^4 + 4*a^3 + 4*a, 7*a^9 + 4*a^8 + 4*a^7 + a^6 + a^5 + 4*a^4 + 4*a^2 + 5*a, 7*a^10 + 4*a^9 + 4*a^8 + a^7 + a^6 + 4*a^5 + 4*a^3 + 5*a^2 + 4*a, ... ] Time: 0.480 > d := 20; time ints(x^10+&+[Random(10)*x^i : i in [0..d-1]]); [ 1, 2*a, 4*a^2, 8*a^3, 8*a^4 + 2*a^2 + a, 8*a^5 + 2*a^3 + 3*a^2, ...] Time: 3.940 > d := 25; time ints(x^10+&+[Random(10)*x^i : i in [0..d-1]]); ... I stopped it after a few minutes...
We can also define orders in rings of integers.
> R<x> := PolynomialRing(RationalField()); > K<a> := NumberField(x^3-2); > O := Order([2*a]); > O; Transformation of Order over Equation Order with defining polynomial x^3 - 2 over ZZ Transformation Matrix: [1 0 0] [0 2 0] [0 0 4] > OK := MaximalOrder(K); > Index(OK,O); 8 > Discriminant(O); -6912 > Discriminant(OK); -108 > 6912/108; 64 // perfect square...