Example 3.1: [ Running Magma V2.21 ] > K := QuadraticField(-21); > ClassGroup(K); Abelian Group isomorphic to Z/2 + Z/2 Defined on 2 generators Relations: 2*$.1 = 0 2*$.2 = 0 > f := HilbertClassPolynomial(-4*21*3^2); > Temp := NumberField(f); > Temp := OptimizedRepresentation(Temp); > f := MinimalPolynomial(Temp.1); > H1 := ext < K | f>; > S := Subfields(H1); > Kt := S[9][1]; // unique subfield of degree 3/K in this case > R := PolynomialRing(Integers()); > Kt := OptimizedRepresentation(NumberField(R ! MinimalPolynomial(K1.1))); > R ! MinimalPolynomial(Kt.1); x^3 - 6*x - 12 > // in paper > f := WeberClassPolynomial(-4*21*3^4); // use smaller modular function > Temp := NumberField(f); > Temp := Subfields(Temp,9)[1][1]; > Temp := OptimizedRepresentation(Temp); > R ! MinimalPolynomial(Temp.1); // in paper > OK := MaximalOrder(K); > MinimalPolynomial(OK.2); x^2 + 21 > alpha := 1+OK.2; > P3 := Decomposition(OK,3)[1][1]; > Oloc,locmap := Completion(OK,P3); > Oloc := ChangePrecision(Oloc,5); > (Oloc ! locmap(alpha))^3; -8 > // alpha^3 is congruent 1 mod 9, locally > H := ext < K | MinimalPolynomial(Temp.1)>; > H := AbelianExtension(H); > A := ArtinMap(H); > sigma := A(alpha); > s := Automorphisms(NumberField(H)) ! sigma; > K1 := FixedField(NumberField(H),[s]); // find smaller polynomial > Temp := NumberField(AbsoluteMinimalPolynomial(K1.1)); > Temp := Subfields(Temp,3)[1][1]; > Temp := OptimizedRepresentation(Temp); > f := R ! MinimalPolynomial(Temp.1); > assert IsIsomorphic(ext< K | f>, K1); > f; x^3 + 9*x - 12 > // in paper ------------------------------------------------------- Example 3.2: [ Running Magma V2.21 ] > K := QuadraticField(-87); > O := MaximalOrder(K); > ClassGroup(O); Abelian Group isomorphic to Z/6 Defined on 1 generator Relations: 6*$.1 = 0 > O1 := sub < O | 3>; > PicardGroup(O1); Abelian Group isomorphic to Z/18 Defined on 1 generator Relations: 18*$.1 = 0 Mapping from: Abelian Group isomorphic to Z/18 Defined on 1 generator Relations: 18*$.1 = 0 to Set of ideals of O1 given by a rule [no inverse] > f := WeberClassPolynomial(-87); > Temp := NumberField(f); > Temp := Subfields(Temp,3)[1][1]; > Temp := OptimizedRepresentation(Temp); > R ! MinimalPolynomial(Temp.1); x^3 - x^2 + 2*x + 1 > // in paper > f := WeberClassPolynomial(-87*3^2); > Temp := NumberField(f); > Temp := Subfields(Temp,9)[1][1]; > Temp := OptimizedRepresentation(Temp); > R ! MinimalPolynomial(Temp.1); x^9 + 3*x^8 + 6*x^7 + 14*x^6 + 9*x^5 + 21*x^4 + 6*x^3 + 12*x^2 + 3 > // in paper > K := QuadraticField(-771); > O := MaximalOrder(K); > ClassGroup(O); Abelian Group isomorphic to Z/6 Defined on 1 generator Relations: 6*$.1 = 0 > O1 := sub < O | 3>; > PicardGroup(O1); Abelian Group isomorphic to Z/3 + Z/6 Defined on 2 generators Relations: 3*$.1 = 0 6*$.2 = 0 Mapping from: Abelian Group isomorphic to Z/3 + Z/6 Defined on 2 generators Relations: 3*$.1 = 0 6*$.2 = 0 to Set of ideals of O1 given by a rule [no inverse] > ------------------------------------------ Example 3.3: [ Running Magma V2.21 ] > K := QuadraticField(-6789); > O := MaximalOrder(K); > O1 := sub < O | 3>; > C,c := ClassGroup(O); > TT := Subgroups(C); > Sgrp := []; > for k in TT do for> if k`order eq 24 then for|if> Sgrp[#Sgrp+1] := k; for|if> end if; for> end for; > #Sgrp; 4 > S1 := Sgrp[1]`subgroup; > S2 := Sgrp[2]`subgroup; > S3 := Sgrp[3]`subgroup; > S4 := Sgrp[4]`subgroup; > P5 := Decomposition(O,5)[1][1]; > P7 := Decomposition(O,7)[1][1]; > P11 := Decomposition(O,11)[1][1]; > P97 := Decomposition(O,97)[1][1]; > Inverse(c)(P5) in S2; true > Inverse(c)(P7) in S3; true > Inverse(c)(P11) in S4; true > Inverse(c)(P97) in S1; true > O1P5 := Decomposition(O1,5)[1][1]; > O1P7 := Decomposition(O1,7)[1][1]; > O1P11 := Decomposition(O1,11)[1][1]; > O1P97 := Decomposition(O1,97)[1][1]; > IsPrincipal(P11^6) and IsPrincipal(O1P11^6); true > P,p := PicardGroup(O1); > I := p(6*P.3); > IsPrincipal(ideal < O | I>); true > // in paper > for l in [1..3] do for> IsPrincipal(O1P5^(6*l)); for> end for; false false true > for l in [1..3] do for> IsPrincipal((I*O1P5)^(6*l)); for> end for; false false true > for l in [1..3] do for> IsPrincipal((I^2*O1P5)^(6*l)); for> end for; false false true > // same for O1P7, O1P97 > f := WeberClassPolynomial(-4*6789); > Temp := NumberField(f); > S := Subfields(Temp,3); > #S; 4 > T1 := OptimizedRepresentation(S[1][1]); > T2 := OptimizedRepresentation(S[2][1]); > T3 := OptimizedRepresentation(S[3][1]); > T4 := OptimizedRepresentation(S[4][1]); > L1 := AbelianExtension(ext < K | MinimalPolynomial(T1.1)>); > L2 := AbelianExtension(ext < K | MinimalPolynomial(T2.1)>); > L3 := AbelianExtension(ext < K | MinimalPolynomial(T3.1)>); > L4 := AbelianExtension(ext < K | MinimalPolynomial(T4.1)>); > a1 := ArtinMap(L1); > a2 := ArtinMap(L2); > a3 := ArtinMap(L3); > a4 := ArtinMap(L4); > P11 := Decomposition(O,11)[1][1]; > NumberField(L1).1 eq a1(P11)(NumberField(L1).1); false > NumberField(L2).1 eq a2(P11)(NumberField(L2).1); false > NumberField(L3).1 eq a3(P11)(NumberField(L3).1); true > NumberField(L4).1 eq a4(P11)(NumberField(L4).1); false > R ! MinimalPolynomial(T3.1); x^3 - x^2 + 8*x + 124 > // in paper -------------------------------- Example 6.9: [ Running Magma V2.21 ] > L := CyclotomicField(9); > zeta := L.1; > R := PolynomialRing(Integers()); > k2 := 3*((1-zeta^4)*(1-zeta^-4)/((1-zeta)*(1-zeta^-1)))^3; > R ! MinimalPolynomial(k2); x^3 - 1710*x^2 + 513*x - 27 > K := QuadraticField(-3); > R := PolynomialRing(K); > f := x^27-1710*x^18+513*x^9-27; > L := ext < K | f>; > H := AbelianExtension(L); > OK := MaximalOrder(K); > L := NumberField(H); > Generators(L); { L.2, L.1 } > P11 := Decomposition(OK,11)[1][1]; > f11 := FrobeniusAutomorphism(H,P11); > f11(f11(f11(L.1)))-L.1; 0 > f11(f11(f11(L.2)))-L.2; 0 > eta := L.1+f11(L.1)+f11(f11(L.1)); > eta; 0 > eta := L.2+f11(L.2)+f11(f11(L.2)); > Degree(MinimalPolynomial(eta)); 9 > f := MinimalPolynomial(eta); x^9 - 59049*x^3 + 4251528*K.1 > // in paper > // to verify: > Temp := NumberField(f); > R := PolynomialRing(Temp); > #Roots(R ! HilbertClassPolynomial(-3*3^6)); 9 Example 6.10: [ Running Magma V2.21 ] > K := QuadraticField(-87); > R := PolynomialRing(Integers()); > f := x^2-727*x+1; // kappa_2 pol > f1 := x^6-727*x^3+1; > L1 := NumberField(f1); > f2 := x^2+3; > L2 := NumberField(f2); > L := CompositeFields(L1,L2)[1]; > for k in [1..#S] do; IsIsomorphic(S[1][1],S[k][1]); end for; true Mapping from: Number Field with defining polynomial $.1^6 - 24*$.1^5 + 222*$.1^4 - 992*$.1^3 + 2193*$.1^2 - 2184*$.1 + 14270959 over the Rational Field to Number Field with defining polynomial $.1^6 - 24*$.1^5 + 222*$.1^4 - 992*$.1^3 + 2193*$.1^2 - 2184*$.1 + 14270959 over the Rational Field false false false false false false > // replacing S[1][1] by e.g. S[2][1] will yield more isomorphisms > K1 := S[1][1]; > K1 := OptimizedRepresentation(M); > R ! MinimalPolynomial(K1.1); x^6 - 3*x^5 + 13*x^4 - 21*x^3 + 43*x^2 - 33*x + 9 > // in paper