> 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
> 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...