Documentation

Mathlib.RingTheory.ClassGroup

The ideal class group #

This file defines the ideal class group ClassGroup R of fractional ideals of R inside its field of fractions.

Main definitions #

Main results #

Implementation details #

The definition of ClassGroup R involves FractionRing R. However, the API should be completely identical no matter the choice of field of fractions for R.

theorem toPrincipalIdeal_def (R : Type u_3) (K : Type u_4) [CommRing R] [Field K] [Algebra R K] [IsFractionRing R K] :
toPrincipalIdeal R K = { toFun := fun (x : Kหฃ) => { val := FractionalIdeal.spanSingleton (nonZeroDivisors R) โ†‘x, inv := FractionalIdeal.spanSingleton (nonZeroDivisors R) (โ†‘x)โปยน, val_inv := โ‹ฏ, inv_val := โ‹ฏ }, map_one' := โ‹ฏ, map_mul' := โ‹ฏ }
@[irreducible]

toPrincipalIdeal R K x sends x โ‰  0 : K to the fractional R-ideal generated by x

Instances For
    @[simp]
    theorem coe_toPrincipalIdeal {R : Type u_1} {K : Type u_2} [CommRing R] [Field K] [Algebra R K] [IsFractionRing R K] (x : Kหฃ) :
    @[simp]
    theorem toPrincipalIdeal_eq_iff {R : Type u_1} {K : Type u_2} [CommRing R] [Field K] [Algebra R K] [IsFractionRing R K] {I : (FractionalIdeal (nonZeroDivisors R) K)หฃ} {x : Kหฃ} :
    (toPrincipalIdeal R K) x = I โ†” FractionalIdeal.spanSingleton (nonZeroDivisors R) โ†‘x = โ†‘I
    theorem mem_principal_ideals_iff {R : Type u_1} {K : Type u_2} [CommRing R] [Field K] [Algebra R K] [IsFractionRing R K] {I : (FractionalIdeal (nonZeroDivisors R) K)หฃ} :
    I โˆˆ (toPrincipalIdeal R K).range โ†” โˆƒ (x : K), FractionalIdeal.spanSingleton (nonZeroDivisors R) x = โ†‘I
    def ClassGroup (R : Type u_1) [CommRing R] [IsDomain R] :
    Type u_1

    The ideal class group of R is the group of invertible fractional ideals modulo the principal ideals.

    Instances For
      @[implicit_reducible]
      noncomputable instance instCommGroupClassGroup (R : Type u_1) [CommRing R] [IsDomain R] :
      @[implicit_reducible]
      noncomputable instance instInhabitedClassGroup (R : Type u_1) [CommRing R] [IsDomain R] :
      Inhabited (ClassGroup R)

      The class group of R is isomorphic to the group of invertible R-submodules in Frac(R) modulo the principal submodules (invertible submodules are automatically fractional ideals).

      Instances For
        noncomputable def ClassGroup.mk {R : Type u_1} {K : Type u_2} [CommRing R] [Field K] [Algebra R K] [IsFractionRing R K] [IsDomain R] :

        Send a nonzero fractional ideal to the corresponding class in the class group.

        Instances For
          theorem ClassGroup.mk_eq_mk {R : Type u_1} [CommRing R] [IsDomain R] {I J : (FractionalIdeal (nonZeroDivisors R) (FractionRing R))หฃ} :
          mk I = mk J โ†” โˆƒ (x : (FractionRing R)หฃ), I * (toPrincipalIdeal R (FractionRing R)) x = J
          theorem ClassGroup.mk_eq_mk_of_coe_ideal {R : Type u_1} [CommRing R] [IsDomain R] {I J : (FractionalIdeal (nonZeroDivisors R) (FractionRing R))หฃ} {I' J' : Ideal R} (hI : โ†‘I = โ†‘I') (hJ : โ†‘J = โ†‘J') :
          mk I = mk J โ†” โˆƒ (x : R) (y : R), x โ‰  0 โˆง y โ‰  0 โˆง Ideal.span {x} * I' = Ideal.span {y} * J'
          theorem ClassGroup.mk_eq_one_of_coe_ideal {R : Type u_1} [CommRing R] [IsDomain R] {I : (FractionalIdeal (nonZeroDivisors R) (FractionRing R))หฃ} {I' : Ideal R} (hI : โ†‘I = โ†‘I') :
          mk I = 1 โ†” โˆƒ (x : R), x โ‰  0 โˆง I' = Ideal.span {x}
          theorem ClassGroup.induction {R : Type u_1} (K : Type u_2) [CommRing R] [Field K] [Algebra R K] [IsFractionRing R K] [IsDomain R] {P : ClassGroup R โ†’ Prop} (h : โˆ€ (I : (FractionalIdeal (nonZeroDivisors R) K)หฃ), P (mk I)) (x : ClassGroup R) :
          P x

          Induction principle for the class group: to show something holds for all x : ClassGroup R, we can choose a fraction field K and show it holds for the equivalence class of each I : FractionalIdeal Rโฐ K.

          The definition of the class group does not depend on the choice of field of fractions.

          Instances For
            @[simp]
            theorem ClassGroup.mk_canonicalEquiv {R : Type u_1} (K : Type u_2) [CommRing R] [Field K] [Algebra R K] [IsFractionRing R K] [IsDomain R] (K' : Type u_3) [Field K'] [Algebra R K'] [IsFractionRing R K'] (I : (FractionalIdeal (nonZeroDivisors R) K)หฃ) :
            noncomputable def FractionalIdeal.mk0 {R : Type u_1} (K : Type u_2) [CommRing R] [Field K] [Algebra R K] [IsFractionRing R K] [IsDomain R] [IsDedekindDomain R] :

            Send a nonzero integral ideal to an invertible fractional ideal.

            Instances For
              @[simp]
              theorem FractionalIdeal.coe_mk0 {R : Type u_1} (K : Type u_2) [CommRing R] [Field K] [Algebra R K] [IsFractionRing R K] [IsDomain R] [IsDedekindDomain R] (I : โ†ฅ(nonZeroDivisors (Ideal R))) :
              โ†‘((mk0 K) I) = โ†‘โ†‘I
              theorem FractionalIdeal.canonicalEquiv_mk0 {R : Type u_1} (K : Type u_2) [CommRing R] [Field K] [Algebra R K] [IsFractionRing R K] [IsDomain R] [IsDedekindDomain R] (K' : Type u_3) [Field K'] [Algebra R K'] [IsFractionRing R K'] (I : โ†ฅ(nonZeroDivisors (Ideal R))) :
              (canonicalEquiv (nonZeroDivisors R) K K') โ†‘((mk0 K) I) = โ†‘((mk0 K') I)
              @[simp]
              theorem FractionalIdeal.map_canonicalEquiv_mk0 {R : Type u_1} (K : Type u_2) [CommRing R] [Field K] [Algebra R K] [IsFractionRing R K] [IsDomain R] [IsDedekindDomain R] (K' : Type u_3) [Field K'] [Algebra R K'] [IsFractionRing R K'] (I : โ†ฅ(nonZeroDivisors (Ideal R))) :
              (Units.map โ†‘(canonicalEquiv (nonZeroDivisors R) K K')) ((mk0 K) I) = (mk0 K') I
              noncomputable def ClassGroup.mk0 {R : Type u_1} [CommRing R] [IsDomain R] [IsDedekindDomain R] :

              Send a nonzero ideal to the corresponding class in the class group.

              Instances For
                @[simp]
                theorem ClassGroup.mk_mk0 {R : Type u_1} (K : Type u_2) [CommRing R] [Field K] [Algebra R K] [IsFractionRing R K] [IsDomain R] [IsDedekindDomain R] (I : โ†ฅ(nonZeroDivisors (Ideal R))) :
                theorem ClassGroup.mk0_eq_mk0_iff_exists_fraction_ring {R : Type u_1} (K : Type u_2) [CommRing R] [Field K] [Algebra R K] [IsFractionRing R K] [IsDomain R] [IsDedekindDomain R] {I J : โ†ฅ(nonZeroDivisors (Ideal R))} :
                mk0 I = mk0 J โ†” โˆƒ (x : K) (_ : x โ‰  0), FractionalIdeal.spanSingleton (nonZeroDivisors R) x * โ†‘โ†‘I = โ†‘โ†‘J
                theorem ClassGroup.mk0_eq_mk0_iff {R : Type u_1} [CommRing R] [IsDomain R] [IsDedekindDomain R] {I J : โ†ฅ(nonZeroDivisors (Ideal R))} :
                mk0 I = mk0 J โ†” โˆƒ (x : R) (y : R) (_ : x โ‰  0) (_ : y โ‰  0), Ideal.span {x} * โ†‘I = Ideal.span {y} * โ†‘J
                theorem FractionalIdeal.isUnit_num {R : Type u_1} [CommRing R] [IsDomain R] {I : FractionalIdeal (nonZeroDivisors R) (FractionRing R)} :
                IsUnit โ†‘I.num โ†” IsUnit I

                A fractional ideal is a unit iff its integral numerator num is a unit.

                noncomputable def ClassGroup.integralRep {R : Type u_1} [CommRing R] (I : FractionalIdeal (nonZeroDivisors R) (FractionRing R)) :

                Maps a nonzero fractional ideal to an integral representative in the class group.

                Instances For
                  theorem ClassGroup.mk0_surjective {R : Type u_1} [CommRing R] [IsDomain R] [IsDedekindDomain R] :
                  Function.Surjective โ‡‘mk0
                  theorem ClassGroup.mk_eq_one_iff {R : Type u_1} {K : Type u_2} [CommRing R] [Field K] [Algebra R K] [IsFractionRing R K] [IsDomain R] {I : (FractionalIdeal (nonZeroDivisors R) K)หฃ} :
                  mk I = 1 โ†” (โ†‘โ†‘I).IsPrincipal
                  theorem ClassGroup.isPrincipal_coeSubmodule_of_isUnit {R : Type u_1} {K : Type u_2} [CommRing R] [Field K] [Algebra R K] [IsFractionRing R K] [IsDomain R] [Subsingleton (ClassGroup R)] (I : FractionalIdeal (nonZeroDivisors R) K) (hI : IsUnit I) :
                  (โ†‘I).IsPrincipal

                  If the class group is trivial, any unit fractional ideal is principal.

                  theorem ClassGroup.isPrincipal_of_isUnit_coeIdeal {R : Type u_1} {K : Type u_2} [CommRing R] [Field K] [Algebra R K] [IsFractionRing R K] [IsDomain R] [Subsingleton (ClassGroup R)] (I : Ideal R) (hI : IsUnit โ†‘I) :

                  If the class group is trivial, any integral ideal that is a unit as a fractional ideal is principal.

                  theorem ClassGroup.mk0_eq_one_iff {R : Type u_1} [CommRing R] [IsDomain R] [IsDedekindDomain R] {I : Ideal R} (hI : I โˆˆ nonZeroDivisors (Ideal R)) :
                  mk0 โŸจI, hIโŸฉ = 1 โ†” Submodule.IsPrincipal I
                  theorem ClassGroup.mk0_eq_mk0_inv_iff {R : Type u_1} [CommRing R] [IsDomain R] [IsDedekindDomain R] {I J : โ†ฅ(nonZeroDivisors (Ideal R))} :
                  mk0 I = (mk0 J)โปยน โ†” โˆƒ (x : R), x โ‰  0 โˆง โ†‘I * โ†‘J = Ideal.span {x}
                  @[implicit_reducible]

                  The class group of principal ideal domain is finite (in fact a singleton).

                  See ClassGroup.fintypeOfAdmissibleOfFinite for a finiteness proof that works for rings of integers of global fields.

                  The class number of a principal ideal domain is 1.

                  The class number is 1 iff the ring of integers is a principal ideal domain.