# Class Field Theory

- [Introduction](introduction.md)

  - [Overview](introduction.md#overview)

  - [Magma](introduction.md#magma)

    - [`Example: hilbert`](introduction.md#example-ex-546938)

- [Creation](creation.md)

  - [Ray Class Groups](creation.md#ray-class-groups)

    - [`RayClassGroup(I): RngOrdIdl → GrpAb, Map`](creation.md#function-fldab-rayclassgroup)

    - [`RayClassGroup(I, T): RngOrdIdl, SeqEnum[RngIntElt] → GrpAb, Map`](creation.md#function-rayclassgroup-rngordidl-seqenum-rngintelt)

    - [`RayClassGroup(D): DivNumElt → GrpAb, Map`](creation.md#function-rayclassgroup-divnumelt)

    - [`RayClassGroup(P): PlcNumElt → GrpAb, Map`](creation.md#function-rayclassgroup-plcnumelt)

    - [`Example: Ideal Ray`](creation.md#example-ex-0ba809)

    - [`RayResidueRing(I): RngOrdIdl → GrpAb, Map`](creation.md#function-rayresiduering-rngordidl)

    - [`RayResidueRing(I, T): RngOrdIdl, SeqEnum[RngIntElt] → GrpAb, Map`](creation.md#function-rayresiduering-rngordidl-seqenum-rngintelt)

    - [`RayResidueRing(D): DivNumElt → GrpAb, Map`](creation.md#function-rayresiduering-divnumelt)

    - [`RayResidueRing(P): PlcNumElt → GrpAb, Map`](creation.md#function-rayresiduering-plcnumelt)

  - [Selmer Groups](creation.md#selmer-groups)

    - [`pSelmerGroup(p, S): RngIntElt, { RngOrdIdl } → GrpAb, Map`](creation.md#function-fldab-pselmergroup)

    - [`Example: Selmer Group`](creation.md#example-ex-2ae671)

  - [Maps](creation.md#maps)

    - [`InducedMap(m1, m2, h, c): Map, Map, Map, RngIntElt → Map`](creation.md#function-inducedmap-map-map-map-rngintelt)

    - [`InducedAutomorphism(r, h, c): Map, Map, RngIntElt → Map`](creation.md#function-inducedautomorphism-map-map-rngintelt)

    - [`Example: induced Map`](creation.md#example-ex-110f86)

  - [Abelian Extensions](creation.md#abelian-extensions)

    - [`RayClassField(m): Map → FldAb`](creation.md#function-rayclassfield-map)

    - [`AbelianExtension(m): Map → FldAb`](creation.md#function-fldab-abelianextension-map)

    - [`RayClassField(m, I, T): Map, RngOrdIdl, [RngIntElt] → FldAb`](creation.md#function-rayclassfield-map-rngordidl-rngintelt)

    - [`AbelianExtension(m, I, T): Map, RngOrdIdl, [RngIntElt] → FldAb`](creation.md#function-fldab-abelianextension)

    - [`RayClassField(m, I): Map, RngOrdIdl → FldAb`](creation.md#function-rayclassfield-map-rngordidl)

    - [`AbelianExtension(m, I): Map, RngOrdIdl → FldAb`](creation.md#function-abelianextension-map-rngordidl)

    - [`AbelianExtension(I): RngOrdIdl → FldAb`](creation.md#function-abelianextension-rngordidl)

    - [`RayClassField(D): DivNumElt → FldAb`](creation.md#function-rayclassfield-divnumelt)

    - [`RayClassField(P): PlcNumElt → FldAb`](creation.md#function-rayclassfield-plcnumelt)

    - [`AbelianpExtension(m, p): Map, RngIntElt → FldAb`](creation.md#function-abelianpextension-map-rngintelt)

    - [`Example: Class Field`](creation.md#example-ex-cfc4e4)

    - [`AbelianExtension(I, P): RngOrdIdl, [RngIntElt] → FldAb`](creation.md#function-abelianextension-rngordidl-rngintelt)

    - [`HilbertClassField(K): FldAlg → FldAb`](creation.md#function-hilbertclassfield-fldalg)

    - [`MaximalAbelianSubfield(M): RngOrd → FldAb`](creation.md#function-maximalabeliansubfield-rngord)

    - [`MaximalAbelianSubfield(F): FldOrd → FldAb`](creation.md#function-maximalabeliansubfield-fldord)

    - [`MaximalAbelianSubfield(K): FldNum → FldAb`](creation.md#function-maximalabeliansubfield-fldnum)

    - [`AbelianExtension(K): FldAlg → FldAb`](creation.md#function-abelianextension-fldalg)

    - [`AbelianExtension(M): RngOrd → FldAb`](creation.md#function-abelianextension-rngord)

    - [`Example: Hilbert Class Field`](creation.md#example-ex-1fc01e)

  - [Binary Operations](creation.md#binary-operations)

    - [`A eq B: FldAb, FldAb → BoolElt`](creation.md#operation-op-eq-fldab-fldab)

    - [`A subset B: FldAb, FldAb → BoolElt`](creation.md#operation-op-subset-fldab-fldab)

    - [`A * B: FldAb, FldAb → FldAb`](creation.md#operation-op-times-fldab-fldab)

    - [`A meet B: FldAb, FldAb → FldAb`](creation.md#operation-op-meet-fldab-fldab)

- [Galois Module Structure](galois-module-structure.md)

  - [Predicates](galois-module-structure.md#predicates)

    - [`IsAbelian(A): FldAb → BoolElt`](galois-module-structure.md#function-fldab-isabelian)

    - [`IsNormal(A): FldAb → BoolElt`](galois-module-structure.md#function-fldab-isnormal)

    - [`IsCentral(A): FldAb → BoolElt`](galois-module-structure.md#function-fldab-iscentral)

  - [Constructions](galois-module-structure.md#constructions)

    - [`GenusField(A): FldAb → FldAb`](galois-module-structure.md#function-genusfield-fldab)

    - [`H2_G_A(A): FldAb → ModTupRng`](galois-module-structure.md#function-h2-g-a-fldab)

    - [`NormalSubfields(A): FldAb → []`](galois-module-structure.md#function-normalsubfields-fldab)

    - [`AbelianSubfield(A, U): FldAb, GrpAb → FldAb`](galois-module-structure.md#function-abeliansubfield-fldab-grpab)

    - [`FixedField(A, U): FldAb, GrpAb → FldAb`](galois-module-structure.md#function-fixedfield-fldab-grpab)

    - [`CohomologyModule(A): FldAb → ModGrp, Map, Map, Map`](galois-module-structure.md#function-fldab-cohomologymodule)

- [Conversion to Number Fields](conversion.md)

  - [`EquationOrder(A): FldAb → RngOrd`](conversion.md#function-equationorder-fldab)

  - [`NumberField(A): FldAb → FldNum`](conversion.md#function-numberfield-fldab)

  - [`MaximalOrder(A): FldAb → RngOrd`](conversion.md#function-maximalorder-fldab)

  - [`Components(A): FldAb → [RngOrd]`](conversion.md#function-fldab-components)

  - [`Generators(A): FldAb → [ ], [ ], [ ]`](conversion.md#function-generators-fldab)

  - [Character Theory](conversion.md#character-theory)

    - [`AbelianExtension(psi): GrpHecke → FldAb`](conversion.md#function-abelianextension-grphecke)

    - [`AbelianExtension(psi): GrpHeckeElt → FldAb`](conversion.md#function-abelianextension-grpheckeelt)

    - [`AbelianExtension(chi): GrpDrchNFElt → FldAb`](conversion.md#function-abelianextension-grpdrchnfelt)

    - [`AbelianExtension(chi): GrpDrchElt → FldAb`](conversion.md#function-abelianextension-grpdrchelt)

    - [`HeckeCharacterGroup(L): FldNum → GrpHecke`](conversion.md#function-heckecharactergroup-fldnum)

    - [`HeckeCharacterGroup(A): FldAb → GrpHecke`](conversion.md#function-heckecharactergroup-fldab)

    - [`Example: Classfield Characters`](conversion.md#example-ex-d88d5d)

- [Invariants](invariants.md)

  - [`Discriminant(A): FldAb → RngOrdIdl, [RngIntElt]`](invariants.md#function-discriminant-fldab)

  - [`AbsoluteDiscriminant(A): FldAb → RngIntElt`](invariants.md#function-absolutediscriminant-fldab)

  - [`Conductor(A): FldAb → RngOrdIdl, [RngIntElt]`](invariants.md#function-fldab-conductor)

  - [`Degree(A): FldAb → RngIntElt`](invariants.md#function-degree-fldab)

  - [`AbsoluteDegree(A): FldAb → RngIntElt`](invariants.md#function-absolutedegree-fldab)

  - [`CoefficientRing(A): FldAb → Fld`](invariants.md#function-coefficientring-fldab)

  - [`CoefficientField(A): FldAb → Fld`](invariants.md#function-coefficientfield-fldab)

  - [`BaseField(A): FldAb → Fld`](invariants.md#function-basefield-fldab)

  - [`BaseRing(A): FldAb → Rng`](invariants.md#function-basering-fldab)

  - [`CoefficientRing(A): FldAb → Rng`](invariants.md#function-coefficientring-fldab-2)

  - [`NormGroup(A): FldAb → Map, RngOrdIdl, [RngIntElt]`](invariants.md#function-normgroup-fldab)

  - [`DecompositionField(p, A): RngOrdIdl, FldAb → FldAb`](invariants.md#function-decompositionfield-rngordidl-fldab)

  - [`DecompositionField(p, A): PlcNumElt, FldAb → FldAb`](invariants.md#function-decompositionfield-plcnumelt-fldab)

  - [`DecompositionGroup(p, A): RngIntElt, FldAb → GrpAb`](invariants.md#function-decompositiongroup-rngintelt-fldab)

  - [`DecompositionGroup(p, A): RngOrdIdl, FldAb → GrpAb`](invariants.md#function-decompositiongroup-rngordidl-fldab)

  - [`DecompositionGroup(p, A): PlcNumElt, FldAb → GrpAb`](invariants.md#function-decompositiongroup-plcnumelt-fldab)

  - [`DecompositionType(A, p): FldAb, RngOrdIdl → [Tpl]`](invariants.md#function-decompositiontype-fldab-rngordidl)

  - [`DecompositionType(A, p): FldAb, PlcNumElt → [Tpl]`](invariants.md#function-decompositiontype-fldab-plcnumelt)

  - [`DecompositionType(A, p): FldAb, RngIntElt → [Tpl]`](invariants.md#function-decompositiontype-fldab-rngintelt)

  - [`DecompositionTypeFrequency(A, l): FldAb, [ ] → Mset`](invariants.md#function-decompositiontypefrequency-fldab)

  - [`DecompositionTypeFrequency(A, a, b): FldAb, RngIntElt, RngIntElt → Mset`](invariants.md#function-decompositiontypefrequency-fldab-rngintelt-rngintelt)

- [Automorphisms](automorphisms.md)

  - [`ArtinMap(A): FldAb → Map`](automorphisms.md#function-artinmap-fldab)

  - [`FrobeniusAutomorphism(A, p): FldAb, RngOrdIdl → Map`](automorphisms.md#function-frobeniusautomorphism-fldab-rngordidl)

  - [`AutomorphismGroup(A): FldAb → GrpFP, [Map], Map`](automorphisms.md#function-fldab-automorphismgroup)

  - [`ProbableAutomorphismGroup(A): FldAb → GrpFP, SeqEnum`](automorphisms.md#function-probableautomorphismgroup-fldab)

  - [`ImproveAutomorphismGroup(F, E): FldAb, SeqEnum → GrpFP, SeqEnum`](automorphisms.md#function-fldab-improveautomorphismgroup)

  - [`Example: Probable Automorphism Group`](automorphisms.md#example-ex-b351e9)

  - [`AbsoluteGaloisGroup(A): FldAb → GrpPerm, SeqEnum, GaloisData`](automorphisms.md#function-absolutegaloisgroup-fldab)

  - [`TwoCocycle(A): FldAb → UserProgram`](automorphisms.md#function-twococycle-fldab)

- [Norm Equations](norm-equations.md)

  - [`IsLocalNorm(A, x, p): FldAb, RngOrdElt, RngOrdIdl → BoolElt`](norm-equations.md#function-islocalnorm-fldab-rngordelt-rngordidl)

  - [`IsLocalNorm(A, x, p): FldAb, RngIntElt, RngInt → BoolElt`](norm-equations.md#function-islocalnorm-fldab-rngintelt-rngint)

  - [`IsLocalNorm(A, x, i): FldAb, RngOrdElt, RngIntElt → BoolElt`](norm-equations.md#function-islocalnorm-fldab-rngordelt-rngintelt)

  - [`IsLocalNorm(A, x, p): FldAb, RngOrdElt, PlcNumElt → BoolElt`](norm-equations.md#function-islocalnorm-fldab-rngordelt-plcnumelt)

  - [`IsLocalNorm(A, x): FldAb, RngOrdElt → BoolElt`](norm-equations.md#function-islocalnorm-fldab-rngordelt)

  - [`Knot(A): FldAb → GrpAb`](norm-equations.md#function-knot-fldab)

  - [`NormEquation(A, x): FldAb, RngOrdElt → BoolElt, [RngOrdElt]`](norm-equations.md#function-normequation-fldab-rngordelt)

  - [`IsNorm(A, x): FldAb, RngOrdElt → BoolElt`](norm-equations.md#function-isnorm-fldab-rngordelt)

  - [`Example: Norm Equation`](norm-equations.md#example-ex-56eb0a)

- [Attributes](attributes.md)

  - [Orders](attributes.md#orders)

    - [`o`CyclotomicExtensions: RngOrd → [Rec]`](attributes.md#attribute-attribute-o-cyclotomicextensions-rngord-rec)

    - [`Example: Cyclotomic Extension`](attributes.md#example-ex-44588f)

  - [Abelian Extensions](attributes.md#abelian-extensions)

    - [`A`Components: FldAb → [Rec]`](attributes.md#attribute-attribute-a-components-fldab-rec)

    - [`A`DefiningGroup: FldAb → Rec`](attributes.md#attribute-attribute-a-defininggroup-fldab-rec)

    - [`A`NormGroup: FldAb → Rec`](attributes.md#attribute-attribute-a-normgroup-fldab-rec)

    - [`A`IsAbelian: FldAb → Bool`](attributes.md#attribute-attribute-a-isabelian-fldab-bool)

    - [`A`IsNormal: FldAb → Bool`](attributes.md#attribute-attribute-a-isnormal-fldab-bool)

    - [`A`IsCentral: FldAb → Bool`](attributes.md#attribute-attribute-a-iscentral-fldab-bool)

    - [`Example: Abelian Extension Attributes`](attributes.md#example-ex-63b1eb)

- [Group Theoretic Functions](group-theory.md)

  - [Generic Groups](group-theory.md#generic-groups)

    - [`GenericGroup(X): [] → GrpFp, Map`](group-theory.md#function-genericgroup)

    - [`AddGenerator(G, x): GrpFP, . → BoolElt, GrpFP, Map`](group-theory.md#function-addgenerator-grpfp)

    - [`FindGenerators(G): GrpFP → []`](group-theory.md#function-findgenerators-grpfp)
