# Introduction to Rings

- [Overview](overview.md)

- [The World of Rings](world.md)

  - [New Rings from Existing Ones](world.md#new-rings-from-existing-ones)

- [Coercion](coercion.md)

  - [Automatic Coercion](coercion.md#automatic-coercion)

  - [Forced Coercion](coercion.md#forced-coercion)

- [Generic Ring Functions](generic.md)

  - [Related Structures](generic.md#related-structures)

    - [`Parent(R): Rng → Pow`](generic.md#function-parent-rng)

    - [`Category(R): Rng → Cat`](generic.md#function-category-rng)

    - [`Type(R): Rng → Cat`](generic.md#function-type-rng)

    - [`PrimeField(F): Fld → Fld`](generic.md#function-primefield-fld)

    - [`PrimeRing(R): Rng → Rng`](generic.md#function-primering-rng)

    - [`Centre(R): Rng → Rng`](generic.md#function-centre-rng)

    - [`Center(R): Rng → Rng`](generic.md#function-center-rng)

  - [Numerical Invariants](generic.md#numerical-invariants)

    - [`Characteristic(R): Rng → RngIntElt`](generic.md#function-characteristic-rng)

    - [`# R: Rng → RngIntElt`](generic.md#operation-operation-rng-rngintelt)

  - [Predicates and Boolean Operations](generic.md#predicates-and-boolean-operations)

    - [`IsCommutative(R): Rng → BoolElt`](generic.md#function-iscommutative-rng)

    - [`IsUnitary(R): Rng → BoolElt`](generic.md#function-isunitary-rng)

    - [`IsFinite(R): Rng → BoolElt`](generic.md#function-isfinite-rng)

    - [`IsOrdered(R): Rng → BoolElt`](generic.md#function-isordered-rng)

    - [`IsField(R): Rng → BoolElt`](generic.md#function-isfield-rng)

    - [`IsDivisionRing(R): Rng → BoolElt`](generic.md#function-isdivisionring-rng)

    - [`IsEuclideanDomain(R): Rng → BoolElt`](generic.md#function-iseuclideandomain-rng)

    - [`IsEuclideanRing(R): Rng → BoolElt`](generic.md#function-iseuclideanring-rng)

    - [`IsMagmaEuclideanRing(R): Rng → BoolElt`](generic.md#function-ismagmaeuclideanring-rng)

    - [`IsPID(R): Rng → BoolElt`](generic.md#function-ispid-rng)

    - [`IsPrincipalIdealDomain(R): Rng → BoolElt`](generic.md#function-isprincipalidealdomain-rng)

    - [`IsPIR(R): Rng → BoolElt`](generic.md#function-ispir-rng)

    - [`IsPrincipalIdealRing(R): Rng → BoolElt`](generic.md#function-isprincipalidealring-rng)

    - [`IsUFD(R): Rng → BoolElt`](generic.md#function-isufd-rng)

    - [`IsUniqueFactorizationDomain(R): Rng → BoolElt`](generic.md#function-isuniquefactorizationdomain-rng)

    - [`IsDomain(R): Rng → BoolElt`](generic.md#function-isdomain-rng)

    - [`IsIntegralDomain(R): Rng → BoolElt`](generic.md#function-isintegraldomain-rng)

    - [`HasGCD(R): Rng → BoolElt`](generic.md#function-hasgcd-rng)

    - [`R eq S: Rng, Rng → Rng`](generic.md#operation-op-eq-rng-rng)

    - [`R ne S: Rng, Rng → Rng`](generic.md#operation-op-ne-rng-rng)

- [Generic Element Functions](element.md)

  - [Parent and Category](element.md#parent-and-category)

    - [`Parent(r): RngElt → Rng`](element.md#function-parent-rngelt)

    - [`Category(r): RngElt → Cat`](element.md#function-category-rngelt)

    - [`Type(r): RngElt → Cat`](element.md#function-type-rngelt)

  - [Creation of Elements](element.md#creation-of-elements)

    - [`Zero(R): Rng → RngElt`](element.md#function-zero-rng)

    - [`One(R): Rng → RngElt`](element.md#function-one-rng)

    - [`Id(R): Rng → RngElt`](element.md#function-id-rng)

    - [`R ! a: Rng, RngElt → RngElt`](element.md#operation-op-rng-rngelt)

    - [`Random(R): Rng → RngElt`](element.md#function-random-rng)

    - [`Representative(R): Rng → RngElt`](element.md#function-representative-rng)

    - [`Rep(R): Rng → RngElt`](element.md#function-rep-rng)

  - [Arithmetic Operations](element.md#arithmetic-operations)

    - [`+ a: RngElt → RngElt`](element.md#operation-operation-rngelt-rngelt)

    - [`- a: RngElt → RngElt`](element.md#operation-operation-rngelt-rngelt-2)

    - [`a + b: RngElt, RngElt → RngElt`](element.md#operation-op-plus-rngelt-rngelt)

    - [`a - b: RngElt, RngElt → RngElt`](element.md#operation-op-minus-rngelt-rngelt)

    - [`a * b: RngElt, RngElt → RngElt`](element.md#operation-op-times-rngelt-rngelt)

    - [`a ^ k: RngElt, RngIntElt → RngElt`](element.md#operation-op-pow-rngelt-rngintelt)

    - [`a / b: RngElt, RngElt → RngElt`](element.md#operation-op-div-rngelt-rngelt)

    - [`a +:= b: RngElt, RngElt → RngElt`](element.md#operation-operation-rngelt-rngelt-rngelt)

    - [`a -:= b: RngElt, RngElt → RngElt`](element.md#operation-operation-rngelt-rngelt-rngelt-2)

    - [`a *:= b: RngElt, RngElt → RngElt`](element.md#operation-operation-rngelt-rngelt-rngelt-3)

    - [`a /:= b: RngElt, RngElt → RngElt`](element.md#operation-operation-rngelt-rngelt-rngelt-4)

    - [`a ^:= k: RngElt, RngIntElt → RngElt`](element.md#operation-operation-rngelt-rngintelt-rngelt)

  - [Equality and Membership](element.md#equality-and-membership)

    - [`a eq b: RngElt, RngElt → BoolElt`](element.md#operation-op-eq-rngelt-rngelt)

    - [`a ne b: RngElt, RngElt → BoolElt`](element.md#operation-op-ne-rngelt-rngelt)

    - [`R eq S: Rng, Rng → BoolElt`](element.md#operation-op-eq-rng-rng-2)

    - [`R ne S: Rng, Rng → BoolElt`](element.md#operation-op-ne-rng-rng-2)

    - [`a in R: RngElt, Rng → BoolElt`](element.md#operation-op-in-rngelt-rng)

    - [`a notin R: RngElt, Rng → BoolElt`](element.md#operation-op-notin-rngelt-rng)

  - [Predicates on Ring Elements](element.md#predicates-on-ring-elements)

    - [`IsZero(a): RngElt → BoolElt`](element.md#function-iszero-rngelt)

    - [`IsOne(a): RngElt → BoolElt`](element.md#function-isone-rngelt)

    - [`IsMinusOne(a): RngElt → BoolElt`](element.md#function-isminusone-rngelt)

    - [`IsUnit(a): RngElt → BoolElt`](element.md#function-isunit-rngelt)

    - [`IsIdempotent(x): RngElt → BoolElt`](element.md#function-isidempotent-rngelt)

    - [`IsNilpotent(x): RngElt → BoolElt`](element.md#function-isnilpotent-rngelt)

    - [`IsZeroDivisor(x): RngElt → BoolElt`](element.md#function-iszerodivisor-rngelt)

    - [`IsIrreducible(x): RngElt → BoolElt`](element.md#function-isirreducible-rngelt)

    - [`IsPrime(x): RngElt → BoolElt`](element.md#function-isprime-rngelt)

  - [Comparison of Ring Elements](element.md#comparison-of-ring-elements)

    - [`a gt b: RngElt, RngElt → BoolElt`](element.md#operation-op-gt-rngelt-rngelt)

    - [`a ge b: RngElt, RngElt → BoolElt`](element.md#operation-op-ge-rngelt-rngelt)

    - [`a lt b: RngElt, RngElt → BoolElt`](element.md#operation-op-lt-rngelt-rngelt)

    - [`a le b: RngElt, RngElt → BoolElt`](element.md#operation-op-le-rngelt-rngelt)

    - [`Maximum(a, b): RngElt, RngElt → RngElt`](element.md#function-maximum-rngelt-rngelt)

    - [`Maximum(Q): [RngIntElt] → RngElt`](element.md#function-maximum-rngintelt)

    - [`Minimum(a, b): RngElt, RngElt → RngElt`](element.md#function-minimum-rngelt-rngelt)

    - [`Minimum(Q): [RngIntElt] → RngElt`](element.md#function-minimum-rngintelt)

- [Ideals and Quotient Rings](ideal-quotient.md)

  - [Defining Ideals and Quotient Rings](ideal-quotient.md#defining-ideals-and-quotient-rings)

    - [`ideal< R | a₁, ..., aᵣ >: Rng, RngElt, ..., RngElt → RngIdl`](ideal-quotient.md#constructor-constructor-ideal-rng-rngelt-rngelt-rngidl)

    - [`quo< R | aᵣ, ..., aᵣ >: Rng, RngElt, ..., RngElt → Rng`](ideal-quotient.md#constructor-constructor-quo-rng-rngelt-rngelt-rng)

    - [`R / I: Rng, RngIdl → Rng`](ideal-quotient.md#operation-op-div-rng-rngidl)

    - [`PowerIdeal(R): Rng → PowIdl`](ideal-quotient.md#function-powerideal-rng)

  - [Arithmetic Operations on Ideals](ideal-quotient.md#arithmetic-operations-on-ideals)

    - [`I + J: RngIdl, RngIdl → RngIdl`](ideal-quotient.md#operation-op-plus-rngidl-rngidl)

    - [`I * J: RngIdl, RngIdl → RngIdl`](ideal-quotient.md#operation-op-times-rngidl-rngidl)

    - [`I meet J: RngIdl, RngIdl → RngIdl`](ideal-quotient.md#operation-op-meet-rngidl-rngidl)

  - [Boolean Operators on Ideals](ideal-quotient.md#boolean-operators-on-ideals)

    - [`a in I: RngElt, RngIdl → BoolElt`](ideal-quotient.md#operation-op-in-rngelt-rngidl)

    - [`a notin I: RngElt, RngIdl → BoolElt`](ideal-quotient.md#operation-op-notin-rngelt-rngidl)

    - [`I eq J: RngIdl, RngIdl → BoolElt`](ideal-quotient.md#operation-op-eq-rngidl-rngidl)

    - [`I ne J: RngIdl, RngIdl → BoolElt`](ideal-quotient.md#operation-op-ne-rngidl-rngidl)

    - [`I subset J: RngIdl, RngIdl → BoolElt`](ideal-quotient.md#operation-op-subset-rngidl-rngidl)

    - [`I notsubset J: RngIdl, RngIdl → BoolElt`](ideal-quotient.md#operation-operation-notsubset-rngidl-rngidl-boolelt)

- [Other Ring Constructions](creation-other.md)

  - [Residue Class Fields](creation-other.md#residue-class-fields)

    - [`ResidueClassField(I): Rng → Fld, Map`](creation-other.md#function-residueclassfield-rng)

  - [Localization](creation-other.md#localization)

    - [`loc< R | a₁, ..., aᵣ >: Rng, RngElt, ..., RngElt → Rng, Map`](creation-other.md#constructor-constructor-loc-rng-rngelt-rngelt-rng-map)

    - [`Localization(R, P): Rng, Rng → Rng, Map`](creation-other.md#function-localization-rng-rng)

  - [Completion](creation-other.md#completion)

    - [`comp< R | a₁, ..., aᵣ >: Rng, RngElt, ..., RngElt → Rng, Map`](creation-other.md#constructor-constructor-comp-rng-rngelt-rngelt-rng-map)

    - [`Completion(R, P): Rng, Rng → Rng, Map`](creation-other.md#function-completion-rng-rng)

  - [Transcendental Extension](creation-other.md#transcendental-extension)

    - [`ext< R | >: Rng → RngUPol`](creation-other.md#constructor-constructor-ext-rng-rngupol)

    - [`ext< R, n | >: Rng, RngIntElt → RngMPol`](creation-other.md#constructor-constructor-ext-rng-rngintelt-rngmpol)
