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.

@[irreducible]
def toPrincipalIdeal (R : Type u_3) (K : Type u_4) [CommRing R] [Field K] [Algebra R K] [IsFractionRing R K] :

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

Equations
    Instances For
      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' := }
      @[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]
      instance PrincipalIdeals.normal {R : Type u_1} {K : Type u_2} [CommRing R] [Field K] [Algebra R K] [IsFractionRing R 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 RProp} (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.

                      noncomputable def ClassGroup.equiv {R : Type u_1} (K : Type u_2) [CommRing R] [Field K] [Algebra R K] [IsFractionRing R K] [IsDomain R] :

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

                      Equations
                        Instances For
                          @[simp]
                          @[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))) :
                                  @[simp]
                                  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.

                                      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.