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

Equations
    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หฃ) :
      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.

      Equations
        Instances For
          noncomputable instance instCommGroupClassGroup (R : Type u_1) [CommRing R] [IsDomain R] :
          Equations
            noncomputable instance instInhabitedClassGroup (R : Type u_1) [CommRing R] [IsDomain R] :
            Equations

              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).

              Equations
                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.

                  Equations
                    Instances For
                      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.

                      Equations
                        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.

                          Equations
                            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.

                              Equations
                                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

                                  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.

                                  Equations
                                    Instances For
                                      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

                                      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_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}

                                      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.

                                      Equations

                                        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.