# Class Field Theory for Global Function Fields

Global function fields admit a class field theory in the same way as number fields do (Chapter [Class Field Theory](../ClassFieldTheory/index-class-field-theory.md#fldab-main)). From a computational point of view the main difference is the use of divisors rather than ideals and the availability in general of analytical methods; see Section [Analytic Theory](drinfeld.md#fldfunab-drinfeld).

Class field theory deals with the abelian extensions of a given field. In the number field case, all abelian extensions can be parameterized using more general class groups, in the case of global function fields, the same will be achieved using the divisor class group and extensions of it.

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

  - [`RayResidueRing(D): DivFunElt → GrpAb, Map`](class-groups.md#function-rayresiduering-divfunelt)

  - [`RayClassGroup(D): DivFunElt → GrpAb, Map`](class-groups.md#function-fldfunab-rayclassgroup)

  - [`RayClassGroupDiscLog(y, D): DivFunElt, DivFunElt → GrpAbElt`](class-groups.md#function-rayclassgroupdisclog-divfunelt-divfunelt)

  - [`RayClassGroupDiscLog(y, D): PlcFunElt, DivFunElt → GrpAbElt`](class-groups.md#function-rayclassgroupdisclog-plcfunelt-divfunelt)

  - [`Example: Classfield Structures`](class-groups.md#example-ex-d6bc20)

- [Creation of Class Fields](fields.md)

  - [`AbelianExtension(D, U): DivFunElt, GrpAb → FldFunAb`](fields.md#function-fldfunab-abelianextension)

  - [`MaximalAbelianSubfield(K): FldFunG → FldFunAb`](fields.md#function-maximalabeliansubfield-fldfung)

  - [`HilbertClassField(K, p): FldFun, PlcFunElt → FldFunAb`](fields.md#function-hilbertclassfield-fldfun-plcfunelt)

  - [`FunctionField(A): FldFunAb → FldFun`](fields.md#function-functionfield-fldfunab)

  - [`MaximalOrderFinite(A): FldFunAb → RngFunOrd`](fields.md#function-maximalorderfinite-fldfunab)

  - [`MaximalOrderInfinite(A): FldFunAb → RngFunOrd`](fields.md#function-maximalorderinfinite-fldfunab)

  - [`Example: classfields`](fields.md#example-ex-df5eee)

  - [`Example: classfields2`](fields.md#example-ex-5a3adf)

- [Properties of Class Fields](properties.md)

  - [`Conductor(m): DivFunElt → DivFunElt`](properties.md#function-conductor-divfunelt)

  - [`Conductor(m, U): DivFunElt, GrpAb → DivFunElt`](properties.md#function-conductor-divfunelt-grpab)

  - [`Conductor(A): FldFunAb → DivFunElt`](properties.md#function-conductor-fldfunab)

  - [`DiscriminantDivisor(m, U): DivFunElt, GrpAb → DivFunElt`](properties.md#function-discriminantdivisor-divfunelt-grpab)

  - [`DiscriminantDivisor(A): FldFunAb → DivFunElt`](properties.md#function-discriminantdivisor-fldfunab)

  - [`DegreeOfExactConstantField(m): DivFunElt → RngIntElt`](properties.md#function-degreeofexactconstantfield-divfunelt)

  - [`DegreeOfExactConstantField(m, U): DivFunElt, GrpAb → RngIntElt`](properties.md#function-degreeofexactconstantfield-divfunelt-grpab)

  - [`DegreeOfExactConstantField(A): FldFunAb → RngIntElt`](properties.md#function-degreeofexactconstantfield-fldfunab)

  - [`Genus(m, U): DivFunElt, GrpAb → RngIntElt`](properties.md#function-genus-divfunelt-grpab)

  - [`Genus(A): FldFunAb → RngIntElt`](properties.md#function-genus-fldfunab)

  - [`DecompositionType(m, U, p): DivFunElt, GrpAb, PlcFunElt → [<f,e>]`](properties.md#function-decompositiontype-divfunelt-grpab-plcfunelt)

  - [`DecompositionType(A, p): FldFunAb, PlcFunElt → [<f,e>]`](properties.md#function-decompositiontype-fldfunab-plcfunelt)

  - [`NumberOfPlacesOfDegreeOne(m, U): DivFunElt, GrpAb → RngIntElt`](properties.md#function-numberofplacesofdegreeone-divfunelt-grpab)

  - [`NumberOfPlacesOfDegreeOne(A): FldFunAb → RngIntElt`](properties.md#function-numberofplacesofdegreeone-fldfunab)

  - [`Degree(A): FldFunAb → RngIntElt`](properties.md#function-degree-fldfunab)

  - [`BaseField(A): FldFunAb → FldFunG`](properties.md#function-basefield-fldfunab)

  - [`A eq B: FldFunAb, FldFunAb → BoolElt`](properties.md#operation-op-eq-fldfunab-fldfunab)

  - [`A subset B: FldFunAb, FldFunAb → BoolElt`](properties.md#operation-op-subset-fldfunab-fldfunab)

  - [`A meet B: FldFunAb, FldFunAb → FldFunAb`](properties.md#operation-op-meet-fldfunab-fldfunab)

  - [`A * B: FldFunAb, FldFunAb → FldFunAb`](properties.md#operation-op-times-fldfunab-fldfunab)

- [The Ring of Witt Vectors of Finite Length](witt-rings.md)

  - [`WittRing(F, n): Fld, RngIntElt → RngWitt`](witt-rings.md#function-wittring-fld-rngintelt)

  - [`W ! a: RngWitt, . → RngWittElt`](witt-rings.md#operation-op-rngwitt)

  - [`BaseRing(W): RngWitt → Fld`](witt-rings.md#function-basering-rngwitt)

  - [`BaseField(W): RngWitt → Fld`](witt-rings.md#function-basefield-rngwitt)

  - [`Length(W): RngWitt → RngIntElt`](witt-rings.md#function-length-rngwitt)

  - [`Eltseq(a): RngWittElt → [FldElt]`](witt-rings.md#function-eltseq-rngwittelt)

  - [`One(W): RngWitt → RngWittElt`](witt-rings.md#function-one-rngwitt)

  - [`Zero(W): RngWitt → RngWittElt`](witt-rings.md#function-zero-rngwitt)

  - [`W . 1: RngWitt, RngIntElt → RngWittElt`](witt-rings.md#operation-operation-rngwitt-rngintelt-rngwittelt)

  - [`x in W: ., RngWitt → BoolElt`](witt-rings.md#operation-op-in-rngwitt)

  - [`a eq b: RngWittElt, RngWittElt → BoolElt`](witt-rings.md#operation-op-eq-rngwittelt-rngwittelt)

  - [`a eq b: RngWitt, RngWitt → BoolElt`](witt-rings.md#operation-op-eq-rngwitt-rngwitt)

  - [`a - b: RngWittElt, RngIntElt → RngWittElt`](witt-rings.md#operation-op-minus-rngwittelt-rngintelt)

  - [`a - b: RngIntElt, RngWittElt → RngWittElt`](witt-rings.md#operation-op-minus-rngintelt-rngwittelt)

  - [`a - b: RngWittElt, RngWittElt → RngWittElt`](witt-rings.md#operation-op-minus-rngwittelt-rngwittelt)

  - [`- a: RngWittElt → RngWittElt`](witt-rings.md#operation-operation-rngwittelt-rngwittelt)

  - [`a + b: RngWittElt, RngIntElt → RngWittElt`](witt-rings.md#operation-op-plus-rngwittelt-rngintelt)

  - [`a + b: RngIntElt, RngWittElt → RngWittElt`](witt-rings.md#operation-op-plus-rngintelt-rngwittelt)

  - [`a + b: RngWittElt, RngWittElt → RngWittElt`](witt-rings.md#operation-op-plus-rngwittelt-rngwittelt)

  - [`a * b: RngWittElt, RngIntElt → RngWittElt`](witt-rings.md#operation-op-times-rngwittelt-rngintelt)

  - [`a * b: RngIntElt, RngWittElt → RngWittElt`](witt-rings.md#operation-op-times-rngintelt-rngwittelt)

  - [`a * b: RngWittElt, RngWittElt → RngWittElt`](witt-rings.md#operation-op-times-rngwittelt-rngwittelt)

  - [`a ^ n: RngWittElt, RngIntElt → RngWittElt`](witt-rings.md#operation-op-pow-rngwittelt-rngintelt)

  - [`FrobeniusMap(W): RngWitt → Map`](witt-rings.md#function-frobeniusmap-rngwitt)

  - [`FrobeniusImage(e): RngWittElt → RngWittElt`](witt-rings.md#function-frobeniusimage-rngwittelt)

  - [`VerschiebungMap(W): RngWitt → Map`](witt-rings.md#function-verschiebungmap-rngwitt)

  - [`VerschiebungImage(e): RngWittElt → RngWittElt`](witt-rings.md#function-verschiebungimage-rngwittelt)

  - [`Random(W): RngWitt → RngWittElt`](witt-rings.md#function-random-rngwitt)

  - [`Random(W, n): RngWitt, RngIntElt → RngWittElt`](witt-rings.md#function-random-rngwitt-rngintelt)

  - [`TeichmuellerSystem(R): Any → [RngLocElt]`](witt-rings.md#function-teichmuellersystem-any)

  - [`TeichmuellerSystem(R): Rng → [RngLocElt]`](witt-rings.md#function-teichmuellersystem-rng)

  - [`LocalRing(W): RngWitt → RngLoc, Map`](witt-rings.md#function-localring-rngwitt)

  - [`ArtinSchreierMap(W): RngWitt → Map`](witt-rings.md#function-artinschreiermap-rngwitt)

  - [`ArtinSchreierImage(e): RngWittElt → RngWittElt`](witt-rings.md#function-artinschreierimage-rngwittelt)

  - [`FunctionField(e): RngWittElt → FldFun, Map`](witt-rings.md#function-functionfield-rngwittelt)

  - [`MaximalOrderFinite(u): RngWittElt → RngFunOrd`](witt-rings.md#function-maximalorderfinite-rngwittelt)

  - [`MaximalOrderInfinite(u): RngWittElt → RngFunOrd`](witt-rings.md#function-maximalorderinfinite-rngwittelt)

  - [`SMaximalOrder(u, S): RngWittElt, [PlcFunElt] → RngFunOrd`](witt-rings.md#function-smaximalorder-rngwittelt-plcfunelt)

  - [`MaximalOrders(u): RngWittElt → RngFunOrd, RngFunOrd`](witt-rings.md#function-maximalorders-rngwittelt)

- [The Ring of Twisted Polynomials](twisted-polynomials.md)

  - [Creation of Twisted Polynomial Rings](twisted-polynomials.md#creation-of-twisted-polynomial-rings)

    - [`TwistedPolynomials(R): Rng → RngUPolTwst`](twisted-polynomials.md#function-twistedpolynomials-rng)

  - [Operations with the Ring of Twisted Polynomials](twisted-polynomials.md#operations-with-the-ring-of-twisted-polynomials)

    - [`One(R): RngUPolTwst → RngUPolTwstElt`](twisted-polynomials.md#function-one-rngupoltwst)

    - [`Zero(R): RngUPolTwst → RngUPolTwstElt`](twisted-polynomials.md#function-zero-rngupoltwst)

    - [`R eq S: RngUPolTwst, RngUPolTwst → BoolElt`](twisted-polynomials.md#operation-op-eq-rngupoltwst-rngupoltwst)

    - [`BaseRing(R): RngUPolTwst → Rng`](twisted-polynomials.md#function-basering-rngupoltwst)

    - [`R . i: RngUPolTwst, RngIntElt → RngUPolTwstElt`](twisted-polynomials.md#operation-operation-rngupoltwst-rngintelt-rngupoltwstelt)

  - [Creation of Twisted Polynomials](twisted-polynomials.md#creation-of-twisted-polynomials)

    - [`AdditivePolynomialFromRoots(x, P): RngElt, PlcFunElt → RngUPolTwstElt`](twisted-polynomials.md#function-additivepolynomialfromroots-rngelt-plcfunelt)

    - [`Random(F, n): RngUPolTwst, RngIntElt → RngUPolTwstElt`](twisted-polynomials.md#function-random-rngupoltwst-rngintelt)

    - [`Example: Additive Polynomial`](twisted-polynomials.md#example-ex-f3126f)

  - [Operations with Twisted Polynomials](twisted-polynomials.md#operations-with-twisted-polynomials)

    - [`A + B: RngIntElt, RngUPolTwstElt → RngUPolTwstElt`](twisted-polynomials.md#operation-op-plus-rngintelt-rngupoltwstelt)

    - [`A + B: RngUPolTwstElt, RngIntElt → RngUPolTwstElt`](twisted-polynomials.md#operation-op-plus-rngupoltwstelt-rngintelt)

    - [`A + B: RngUPolTwstElt, RngUPolTwstElt → RngUPolTwstElt`](twisted-polynomials.md#operation-op-plus-rngupoltwstelt-rngupoltwstelt)

    - [`A - B: RngIntElt, RngUPolTwstElt → RngUPolTwstElt`](twisted-polynomials.md#operation-op-minus-rngintelt-rngupoltwstelt)

    - [`A - B: RngUPolTwstElt, RngIntElt → RngUPolTwstElt`](twisted-polynomials.md#operation-op-minus-rngupoltwstelt-rngintelt)

    - [`A - B: RngUPolTwstElt, RngUPolTwstElt → RngUPolTwstElt`](twisted-polynomials.md#operation-op-minus-rngupoltwstelt-rngupoltwstelt)

    - [`- A: RngUPolTwstElt → RngUPolTwstElt`](twisted-polynomials.md#operation-operation-rngupoltwstelt-rngupoltwstelt)

    - [`A * B: RngUPolTwstElt, RngUPolTwstElt → RngUPolTwstElt`](twisted-polynomials.md#operation-op-times-rngupoltwstelt-rngupoltwstelt)

    - [`A ^ n: RngUPolTwstElt, RngIntElt → RngUPolTwstElt`](twisted-polynomials.md#operation-op-pow-rngupoltwstelt-rngintelt)

    - [`A eq B: RngUPolTwstElt, RngUPolTwstElt → BoolElt`](twisted-polynomials.md#operation-op-eq-rngupoltwstelt-rngupoltwstelt)

    - [`IsZero(A): RngUPolTwstElt → BoolElt`](twisted-polynomials.md#function-iszero-rngupoltwstelt)

    - [`LeadingCoefficient(F): RngUPolTwstElt → RngElt`](twisted-polynomials.md#function-leadingcoefficient-rngupoltwstelt)

    - [`ConstantCoefficient(F): RngUPolTwstElt → RngElt`](twisted-polynomials.md#function-constantcoefficient-rngupoltwstelt)

    - [`Degree(F): RngUPolTwstElt → RngIntElt`](twisted-polynomials.md#function-degree-rngupoltwstelt)

    - [`Quotrem(F, G): RngUPolTwstElt, RngUPolTwstElt → RngUPolTwstElt, RngUPolTwstElt`](twisted-polynomials.md#function-quotrem-rngupoltwstelt-rngupoltwstelt)

    - [`GCD(F, G): RngUPolTwstElt, RngUPolTwstElt → RngUPolTwstElt`](twisted-polynomials.md#function-gcd-rngupoltwstelt-rngupoltwstelt)

    - [`BaseRing(F): RngUPolTwstElt → Rng`](twisted-polynomials.md#function-basering-rngupoltwstelt)

    - [`Polynomial(G): RngUPolTwstElt → RngUPolElt`](twisted-polynomials.md#function-polynomial-rngupoltwstelt)

    - [`SpecialEvaluate(F, x): RngUPolTwstElt, RngElt → RngElt`](twisted-polynomials.md#function-specialevaluate-rngupoltwstelt-rngelt)

    - [`SpecialEvaluate(F, x): RngUPolElt, Any → RngElt`](twisted-polynomials.md#function-specialevaluate-rngupolelt-any)

    - [`Eltseq(F): RngUPolTwstElt → [RngElt]`](twisted-polynomials.md#function-eltseq-rngupoltwstelt)

- [Analytic Theory](drinfeld.md)

  - [`CarlitzModule(R, x): RngUPolTwst, RngUPolElt → RngUPolTwstElt`](drinfeld.md#function-carlitzmodule-rngupoltwst-rngupolelt)

  - [`CarlitzModule(R, x): RngUPolTwst, FldFunRatUElt → RngUPolTwstElt`](drinfeld.md#function-carlitzmodule-rngupoltwst-fldfunratuelt)

  - [`Example: Carlitz Module`](drinfeld.md#example-ex-15c3a6)

  - [`AnalyticDrinfeldModule(F, p): FldFun, PlcFunElt → RngUPolTwstElt`](drinfeld.md#function-analyticdrinfeldmodule-fldfun-plcfunelt)

  - [`Extend(D, x, p): RngUPolTwstElt, RngElt, PlcFunElt → RngUPolTwstElt`](drinfeld.md#function-extend-rngupoltwstelt-rngelt-plcfunelt)

  - [`Example: drinfeld`](drinfeld.md#example-ex-cecb57)

  - [`Exp(x, p): RngElt, PlcFunElt → RngUPolTwstElt`](drinfeld.md#function-fldfunab-exp)

  - [`AnalyticModule(x, p): RngElt, PlcFunElt → RngElt`](drinfeld.md#function-analyticmodule-rngelt-plcfunelt)

  - [`CanNormalize(F): RngUPolTwstElt → BoolElt, RngUPolTwstElt, RngElt`](drinfeld.md#function-cannormalize-rngupoltwstelt)

  - [`CanSignNormalize(F): RngUPolTwstElt → BoolElt, RngUPolTwstElt, RngElt`](drinfeld.md#function-cansignnormalize-rngupoltwstelt)

  - [`AlgebraicToAnalytic(F, p): RngUPolTwstElt, PlcFunElt → RngUPolTwstElt`](drinfeld.md#function-algebraictoanalytic-rngupoltwstelt-plcfunelt)

- [Related Functions](related.md)

  - [`StrongApproximation(m, S): DivFunElt, [<PlcFunElt, FldFunElt>] → FldFunElt`](related.md#function-strongapproximation-divfunelt-plcfunelt-fldfunelt)

  - [`StrongApproximation(S, Z, V): [PlcFunElt], [FldFunGElt], [RngIntElt] → FldFunElt`](related.md#function-strongapproximation-plcfunelt-fldfungelt-rngintelt)

  - [`ChineseRemainderTheorem(S, Z, V): [PlcFunElt], [FldFunGElt], [RngIntElt] → FldFunElt`](related.md#function-chineseremaindertheorem-plcfunelt-fldfungelt-rngintelt)

  - [`CRT(S, Z, V): [PlcFunElt], [FldFunGElt], [RngIntElt] → FldFunElt`](related.md#function-crt-plcfunelt-fldfungelt-rngintelt)

  - [`Example: Strong Approximation`](related.md#example-ex-8bc2d0)

  - [`NonSpecialDivisor(m): DivFunElt → DivFunElt, RngIntElt`](related.md#function-nonspecialdivisor-divfunelt)

  - [`NormGroup(F): FldFun → DivFunElt, GrpAb`](related.md#function-normgroup-fldfun)

  - [`Sign(a, p): FldFunElt, PlcFunElt → RngElt`](related.md#function-sign-fldfunelt-plcfunelt)

  - [`ChangeModel(F, p): FldFun, PlcFunElt → FldFun`](related.md#function-changemodel-fldfun-plcfunelt)

  - [`ArtinSchreierReduction(u, P): FldFunGElt, PlcFunElt → RngIntElt, FldFunElt`](related.md#function-artinschreierreduction-fldfungelt-plcfunelt)

- [Enumeration of Places](place-enumeration.md)

  - [`PlaceEnumInit(K): FldFun → PlcEnum`](place-enumeration.md#function-placeenuminit-fldfun)

  - [`PlaceEnumInit(P): PlcFunElt → PlcEnum`](place-enumeration.md#function-placeenuminit-plcfunelt)

  - [`PlaceEnumInit(K, Pos): FldFun, [RngIntElt]) → PlcEnum`](place-enumeration.md#function-placeenuminit-fldfun-rngintelt)

  - [`PlaceEnumCopy(R): PlcEnum → PlcEnum`](place-enumeration.md#function-placeenumcopy-plcenum)

  - [`PlaceEnumPosition(R): PlcEnum → [RngIntElt]`](place-enumeration.md#function-fldfunab-placeenumposition)

  - [`PlaceEnumNext(R): PlcEnum → PlcFunElt`](place-enumeration.md#function-placeenumnext-plcenum)

  - [`PlaceEnumCurrent(R): PlcEnum → PlcFunElt`](place-enumeration.md#function-placeenumcurrent-plcenum)
