An element of a class group is stored as a pair consisting of both an explicit ideal in that ideal class, and a list of exponents giving that ideal class in terms of the generators of the parent class group. These can be accessed with the ideal() and exponents() methods respectively.
EXAMPLES:
sage: K.<a> = NumberField(x^2 + 23)
sage: I = K.class_group().gen(); I
Fractional ideal class (2, 1/2*a - 1/2)
sage: I.ideal()
Fractional ideal (2, 1/2*a - 1/2)
sage: I.exponents()
(1,)
sage: I.ideal() * I.ideal()
Fractional ideal (4, 1/2*a + 3/2)
sage: (I.ideal() * I.ideal()).reduce_equiv()
Fractional ideal (2, 1/2*a + 1/2)
sage: J = I * I; J # class group multiplication is automatically reduced
Fractional ideal class (2, 1/2*a + 1/2)
sage: J.ideal()
Fractional ideal (2, 1/2*a + 1/2)
sage: J.exponents()
(2,)
sage: I * I.ideal() # ideal classes coerce to their representative ideal
Fractional ideal (4, 1/2*a + 3/2)
sage: O = K.OK(); O
Maximal Order in Number Field in a with defining polynomial x^2 + 23
sage: O*(2, 1/2*a + 1/2)
Fractional ideal (2, 1/2*a + 1/2)
sage: (O*(2, 1/2*a + 1/2)).is_principal()
False
sage: (O*(2, 1/2*a + 1/2))^3
Fractional ideal (1/2*a - 3/2)
Bases: sage.groups.abelian_gps.values.AbelianGroupWithValues_class
The class group of a number field.
EXAMPLES:
sage: K.<a> = NumberField(x^2 + 23)
sage: G = K.class_group(); G
Class group of order 3 with structure C3 of Number Field in a with defining polynomial x^2 + 23
sage: G.category()
Category of groups
Note the distinction between abstract generators, their ideal, and exponents:
sage: C = NumberField(x^2 + 120071, 'a').class_group(); C
Class group of order 500 with structure C250 x C2
of Number Field in a with defining polynomial x^2 + 120071
sage: c = C.gen(0)
sage: c # random
Fractional ideal class (5, 1/2*a + 3/2)
sage: c.ideal() # random
Fractional ideal (5, 1/2*a + 3/2)
sage: c.ideal() is c.value() # alias
True
sage: c.exponents()
(1, 0)
alias of FractionalIdealClass
Return generating ideals for the (S-)class group.
This is an alias for gens_values().
OUTPUT:
A tuple of ideals, one for each abstract Abelian group generator.
EXAMPLES:
sage: K.<a> = NumberField(x^4 + 23)
sage: K.class_group().gens() # random gens (platform dependent)
[Fractional ideal class (2, 1/2*a^2 - a + 3/2)]
sage: C = NumberField(x^2 + x + 23899, 'a').class_group(); C
Class group of order 68 with structure C34 x C2 of Number Field
in a with defining polynomial x^2 + x + 23899
sage: C.gens()
(Fractional ideal class (7, a + 5), Fractional ideal class (5, a + 3))
sage: C.ngens()
2
Return the number field that this (S-)class group is attached to.
EXAMPLES:
sage: C = NumberField(x^2 + 23, 'w').class_group(); C
Class group of order 3 with structure C3 of Number Field in w with defining polynomial x^2 + 23
sage: C.number_field()
Number Field in w with defining polynomial x^2 + 23
sage: K.<a> = QuadraticField(-14)
sage: CS = K.S_class_group(K.primes_above(2))
sage: CS.number_field()
Number Field in a with defining polynomial x^2 + 14
Bases: sage.groups.abelian_gps.values.AbelianGroupWithValuesElement
A fractional ideal class in a number field.
EXAMPLES:
sage: G = NumberField(x^2 + 23,'a').class_group(); G
Class group of order 3 with structure C3 of Number Field in a with defining polynomial x^2 + 23
sage: I = G.0; I
Fractional ideal class (2, 1/2*a - 1/2)
sage: I.ideal()
Fractional ideal (2, 1/2*a - 1/2)
EXAMPLES::
sage: K.<w>=QuadraticField(-23)
sage: OK=K.ring_of_integers()
sage: C=OK.class_group()
sage: P2a,P2b=[P for P,e in (2*OK).factor()]
sage: c = C(P2a); c
Fractional ideal class (2, 1/2*w - 1/2)
sage: c.gens()
(2, 1/2*w - 1/2)
Return generators for a representative ideal in this (S-)ideal class.
EXAMPLES:
sage: K.<w>=QuadraticField(-23)
sage: OK = K.ring_of_integers()
sage: C = OK.class_group()
sage: P2a,P2b=[P for P,e in (2*OK).factor()]
sage: c = C(P2a); c
Fractional ideal class (2, 1/2*w - 1/2)
sage: c.gens()
(2, 1/2*w - 1/2)
Return a representative ideal in this ideal class.
EXAMPLE:
sage: K.<w>=QuadraticField(-23)
sage: OK=K.ring_of_integers()
sage: C=OK.class_group()
sage: P2a,P2b=[P for P,e in (2*OK).factor()]
sage: c=C(P2a); c
Fractional ideal class (2, 1/2*w - 1/2)
sage: c.ideal()
Fractional ideal (2, 1/2*w - 1/2)
Return the multiplicative inverse of this ideal class.
EXAMPLE:
sage: K.<a> = NumberField(x^3 - 3*x + 8); G = K.class_group()
sage: G(2, a).inverse()
Fractional ideal class (2, a^2 + 2*a - 1)
sage: ~G(2, a)
Fractional ideal class (2, a^2 + 2*a - 1)
Returns True iff this ideal class is the trivial (principal) class
EXAMPLES:
sage: K.<w>=QuadraticField(-23)
sage: OK=K.ring_of_integers()
sage: C=OK.class_group()
sage: P2a,P2b=[P for P,e in (2*OK).factor()]
sage: c=C(P2a)
sage: c.is_principal()
False
sage: (c^2).is_principal()
False
sage: (c^3).is_principal()
True
Return representative for this ideal class that has been reduced using PARI’s idealred.
EXAMPLES:
sage: k.<a> = NumberField(x^2 + 20072); G = k.class_group(); G
Class group of order 76 with structure C38 x C2
of Number Field in a with defining polynomial x^2 + 20072
sage: I = (G.0)^11; I
Fractional ideal class (41, 1/2*a + 5)
sage: J = G(I.ideal()^5); J
Fractional ideal class (115856201, 1/2*a + 40407883)
sage: J.reduce()
Fractional ideal class (57, 1/2*a + 44)
sage: J == I^5
True
Bases: sage.rings.number_field.class_group.ClassGroup
The S-class group of a number field.
EXAMPLES:
sage: K.<a> = QuadraticField(-14)
sage: S = K.primes_above(2)
sage: K.S_class_group(S).gens() # random gens (platform dependent)
(Fractional S-ideal class (3, a + 2),)
sage: K.<a> = QuadraticField(-974)
sage: CS = K.S_class_group(K.primes_above(2)); CS
S-class group of order 18 with structure C6 x C3
of Number Field in a with defining polynomial x^2 + 974
sage: CS.gen(0) # random
Fractional S-ideal class (3, a + 2)
sage: CS.gen(1) # random
Fractional S-ideal class (31, a + 24)
alias of SFractionalIdealClass
Return the set (or rather tuple) of primes used to define this class group.
EXAMPLES:
sage: K.<a> = QuadraticField(-14)
sage: I = K.ideal(2,a)
sage: S = (I,)
sage: CS = K.S_class_group(S);CS
S-class group of order 2 with structure C2 of Number Field in a with defining polynomial x^2 + 14
sage: T = tuple([])
sage: CT = K.S_class_group(T);CT
S-class group of order 4 with structure C4 of Number Field in a with defining polynomial x^2 + 14
sage: CS.S()
(Fractional ideal (2, a),)
sage: CT.S()
()
Bases: sage.rings.number_field.class_group.FractionalIdealClass
An S-fractional ideal class in a number field for a tuple of primes S.
EXAMPLES:
sage: K.<a> = QuadraticField(-14) sage: I = K.ideal(2,a) sage: S = (I,) sage: CS = K.S_class_group(S) sage: J = K.ideal(7,a) sage: G = K.ideal(3,a+1) sage: CS(I) Trivial S-ideal class sage: CS(J) Trivial S-ideal class sage: CS(G) Fractional S-ideal class (3, a + 1)EXAMPLES:
sage: K.<a> = QuadraticField(-14) sage: I = K.ideal(2,a) sage: S = (I,) sage: CS = K.S_class_group(S) sage: J = K.ideal(7,a) sage: G = K.ideal(3,a+1) sage: CS(I).ideal() Fractional ideal (2, a) sage: CS(J).ideal() Fractional ideal (7, a) sage: CS(G).ideal() Fractional ideal (3, a + 1)EXAMPLES:
sage: K.<a> = QuadraticField(-14) sage: I = K.ideal(2,a) sage: S = (I,) sage: CS = K.S_class_group(S) sage: G = K.ideal(3,a+1) sage: CS(G).inverse() Fractional S-ideal class (3, a + 2)
TESTS:
sage: K.<a> = QuadraticField(-14)
sage: I = K.ideal(2,a)
sage: S = (I,)
sage: CS = K.S_class_group(S)
sage: J = K.ideal(7,a)
sage: G = K.ideal(3,a+1)
sage: CS(I).order()
1
sage: CS(J).order()
1
sage: CS(G).order()
2