In this rather technical section, we describe the programming interface
to the abelian extension module. Most of the internal representation is
available as attributes and may be used to extend the package.
The cyclotomic extensions are stored and are available via an attribute. This
attribute is a read-only attribute.
We will demonstrate this with the Hilbert class field of Q(Sqrt( - 1001)):
> Zx<x> := PolynomialRing(Integers());
> k := NumberField(x^2+1001);
> g, m :=ClassGroup(k); g;
Abelian Group isomorphic to Z/2 + Z/2 + Z/10
Defined on 3 generators
Relations:
2*$.1 = 0
2*$.2 = 0
10*$.3 = 0
> K := HilbertClassField(k);
Number Field with defining polynomial [ $.1^2 - 2*k.1 + 136,
$.1^2 - 4*k.1 - 47, $.1^2 + 2*k.1 - 136, $.1^5 + 37210*$.1^3
+ (-2104500*k.1 + 61148840)*$.1^2 + (-292068000*k.1 +
14636593760)*$.1 + 305212632000*k.1 - 1779009360128] over k
> o := MaximalOrder(k);
> c := o`CyclotomicExtensions;
> #c;
2
Since there are two non-isomorphic direct cyclic factors of prime
power order in the class group of k, we have two cyclotomic extensions
stored in o. One has order 2 and the other has order 5:
> c[1]`p2n;
2
> c[2]`p2n;
5
Since the order 2 extension is essentially trivial, we will discuss
the other extension in detail.
> c[2]`Abs;
Maximal Order of Equation Order with defining polynomial x^8 +
4*x^7 + 4016*x^6 + 12034*x^5 + 6032056*x^4 + 12044060*x^3 +
4016040045*x^2 + 4010020020*x + 1000000005005 over Z
> c[2]`Rel;
Maximal Equation Order with defining polynomial x^4 + x^3 + x^2 +
x + [1, 0] over o
The relative extension is generated by a root of the 5th-cyclotomic
polynomial of degree 4, so there are no common subfields. The
corresponding absolute extension has degree 8. As one can see,
the class group (at least a conditional class group) is known:
> c[2]`Abs:Maximal;
F[1]
|
F[2]
/
/
Q
F [ 1] Given by transformation matrix
F [ 2] x^8 + 4*x^7 + 4016*x^6 + 12034*x^5 + 6032056*x^4 +
12044060*x^3 + 4016040045*x^2 + 4010020020*x + 1000000005005
Discriminant: 4016024016004000000
Index: 4100090871676479535981/1
Class Number 12800
Class Group Structure C2 * C4 * C20 * C80
Signature: [0, 4]
We will illustrate the
Aut entries by showing their effect
on ζ
5. Since the maps operate between the number fields rather than
the orders, we will coerce the results back into the orders for
clarity. The only difference between
Rel and
Abs is that
Rel implements the automorphism in the relative extension.
> Oa := c[2]`Abs;
> z := c[2]`Zeta; z;
[0, 1, 0, 0, 0, 0, 0, 0]
> Oa!c[2]`Aut[1]`Abs(z);
[0, 0, 1, 0, 0, 0, 0, 0]
> z^c[2]`Aut[1]`r;
[0, 0, 1, 0, 0, 0, 0, 0]
The
Order entry gives the order of the automorphism:
> c[2]`Aut[1]`Order;
4
> Oa!c[2]`Aut[1]`Abs(z);
[0, 0, 1, 0, 0, 0, 0, 0]
> Oa!(c[2]`Aut[1]`Abs($1));
[-1, -1, -1, -1, 0, 0, 0, 0]
> Oa!(c[2]`Aut[1]`Abs($1));
[0, 0, 0, 1, 0, 0, 0, 0]
> Oa!(c[2]`Aut[1]`Abs($1));
[0, 1, 0, 0, 0, 0, 0, 0]
As a by--product one can see the optimized representation:
the first four basis elements are clearly 1, ζ
5,
ζ
52, ζ
53 which are the T
2 shortest integral elements
in m.
Abelian extensions have several attributes. Most of them are only useful in
programming.
This read-only attribute contains a record for each cyclic factor of prime
power degree that occurs in the abelian extension. In order to describe
the contents we have to fix some definitions.
Let o be the base ring of the abelian extension A. Then O
will be the maximal order of the cyclotomic extension o[ζl] as
an extensions of Z. The algorithm for the computation of defining
extensions will firstly compute a generator a∈O such that
O(a1/l) equals A(ζl). This element will be a certain S-unit
of O.
The components are
- Basis
- : a matrix B containing order elements. This represents
a "multiplicative basis" for the generator a and all the S-units that
are used.
- GenRaw
- : the exponent vector G defining a, i.e.
a = ∏i (B1, i)Gi, 1.
- UnitsRaw
- : a matrix U defining a basis for the group
of S-units, i.e.
uj = ∏i (B1, i)Uj, i.
- S
- : a list containing the prime ideals of S
- Gen
- : a as an element of Oa
- GenAut
- : the image of a generator for the class field
(an image of Class-Field.2) in the field of fractions of O
under a generator for the
cyclic group corresponding to this component.
- GenInv
- : 1/a as an element of the field of fractions of Oa
- O
- : the big Kummer extension Oa(a1/l)
- ClassField
- : an equation order for the cyclic extension
corresponding to this component. This will be an extension of o.
- Artin
- : the Artin map on the big Kummer extension
o[ζl](US1/l) where the automorphisms are represented as elements
in some abelian group of type Cl#S.
A`NormGroup : FldAb -> Rec
These two attributes give access to the ideal group used to define A,
and they have the same structure. DefiningGroup is the group used to
create A in the first place whereas NormGroup contains the
group defined modulo the conductor. The user needs to call the function
Conductor in order to define this component.
These attributes are read-only.
The records contain the following components:
- Map
- : the map as passed into the AbelianExtension
constructor, respectively, an equivalent map.
- m0
- : the "finite" part of the modulus underlying Map
- m_inf
- : the "infinite" part of the modulus underlying Map
- RcgMap
- : if present, contains the map returned from the call
to RayClassGroup with m0 and m_inf.
- GrpMap
- : if present, the "rest" of Map, i.e.
Map = RcgMap
GrpMap.
Stores the result of a call to IsAbelian with parameter
All := true.
Stores the result of a call to IsNormal with parameter
All := true.
Stores the result of a call to IsCentral with parameter
All := true.
To illustrate the preceding examples we will investigate the 3-part of
the ray class field modulo 36 over Z[Sqrt( - 10)]:
> Zx<x> := PolynomialRing(Integers());
> o := MaximalOrder(x^2+10);
> r, mr := RayClassGroup(36*o);
> q, mq := quo<r| [r.i*3 : i in [1..Ngens(r)]]>;
> A := AbelianExtension(Inverse(mq)*mr); A;
FldAb, defined by (<[36, 0]>, [])
of structure: Z/3 + Z/3
At this stage, the only attribute that is assigned is
DefiningGroup.
> la := GetAttributes(FldAb);
> [ <assigned A"i, i> : i in la];
[ <false, Components>, <true, DefiningGroup>, <false, IsAbelian>,
<false, IsCentral>, <false, IsNormal>, <false, NormGroup> ]
So let us have a closer look at
DefiningGroup:
> d := A`DefiningGroup;
> d;
rec<recformat<Map, m0, m_inf, RcgMap, GrpMap> | Map := Mapping
from: GrpAb: q to Set of ideals of o
Composition of Mapping from: GrpAb: q to GrpAb: r and
Mapping from: GrpAb: r to Set of ideals of o, m0 := Principal
Ideal of o
Generator:
[36, 0], m_inf := [], RcgMap := Mapping from: GrpAb: r to Set
of ideals of o, GrpMap := Mapping from: GrpAb: q to GrpAb: r>
As one can see,
Map is the original map used to define A.
Note that this is the composition of
RcgMap and
GrpMap, the first being
equivalent to
mr, the second to
mq.
Furthermore, the defining modulus is now available in
m0
and
m_inf.
After having set up A, we now need to transform it into a number field
in order for the Components to be assigned:
> K := NumberField(A);
> K;
Number Field with defining polynomial [ $.1^3 - 3*$.1 - 6*$.1 -
11, $.1^3 - 3*$.1 - 6*$.1 + 11] over its ground field
> c := A`Components;
> #c;
2
We will focus on the first component only.
> B := c[1]`Basis;
> a := &* [ B[1][i] ^ c[1]`GenRaw[i][1] : i in [1..Ncols(B)]];
> a;
-11/1*$.2 + 4/1*$.3 + 2/1*$.4
> c[1]`Gen;
[0, -11, 4, 2]
> c[1]`Gen eq a;
true
> c[1]`GenInv * a eq 1;
true
> c[2]`GenInv * a eq 1;
false
In S we need all primes dividing the degree 9 of our extension,
all primes dividing the modulus 36 and enough primes to generate the
3-part of the class group. Since the class group can be generated
by the prime ideal over 2, this leaves us with only two prime ideals in
S. Since k is imaginary quadratic, the base field k[ζ
3] is
totally complex of degree 4 which implies unit rank 1.
So the free rank of our S-unit group will be 3, and since we have
to take care of the torsion unit,
GenRaw will have 4
columns.
> #c[1]`S;
2
> UnitRank(o);
1
> Ncols(c[1]`UnitsRaw);
4
> U := c[1]`UnitsRaw;
> u := [ &* [B[1][i] ^ U[i][j] : i in [1..Ncols(B)]] : j in [1..4]];
Now u
1 should be a fundamental unit for Oa, u
2 and u
3 are S-units
and u
4 is the torsion unit, since we adjoin the 3rd-roots of unity,
this will be a 6th root of unity.
> Oa := Parent(B[1][1]);
> Oa!u[1];
[0, -11, 4, 2]
> IsUnit($1);
true
> Decomposition(u[2]);
[
<Prime Ideal of Oa
Two element generators:
[3, 0, 0, 0]
[-9, 0, 1, 2], 1>
]
> u[4]^6 eq 1;
Now O should be an extension of Oa:
> c[1]`O:Maximal;
F[1]
/
/
E2[1]
/
/
E1[1]
/
/
Q
F [ 1] x^3 + [[0, -4], [11, -2]]
E 2[ 1] x^2 + x + [1, 0]
E 1[ 1] x^2 + 10
Index : <[[1, 0], [0, 0]]>
The class field K we are seeking is a subfield of O:
> c[1]`ClassField;
Equation Order with defining polynomial x^3 + [-3, 0]*x + [-11,
-6] over o
> g := c[1]`ClassField.2;
> c[1]`O!g;
[[[0, 0], [0, 0]], [[1, 0], [0, 0]], [[11, 2], [11, -2]]]
Note that the absolute term of the defining polynomial is a.
Since
GenAut is an image of g, its minimal polynomial
should be the same as that of g:
> MinimalPolynomial(g);
$.1^3 - 3/1*o.1*$.1 - 11/1*o.1 - 6/1*o.2
> Evaluate($1, c[1]`GenAut);
0
[Next][Prev] [Right] [Left] [Up] [Index] [Root]