Documentation

Mathlib.RingTheory.ClassGroup.Basic

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
  • One or more equations did not get rendered due to their size.
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
      @[instance_reducible]
      noncomputable instance instCommGroupClassGroup (R : Type u_1) [CommRing R] [IsDomain R] :
      Equations
      • One or more equations did not get rendered due to their size.
      @[instance_reducible]
      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
      • One or more equations did not get rendered due to their size.
      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 (FractionRing R)) I = (mk (FractionRing R)) 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 (FractionRing R)) 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 K) 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
          • One or more equations did not get rendered due to their size.
          Instances For
            @[simp]
            theorem ClassGroup.equiv_mk {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)ˣ) :
            @[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))) :
                (mk K) ((FractionalIdeal.mk0 K) I) = mk0 I

                ClassGroup.mk0 factors through the canonical quotient projection on (FractionalIdeal R⁰ (FractionRing 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 K) I = 1 (↑I).IsPrincipal

                  A fractional ideal is principal if a power coprime to the class number is principal.

                  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.

                  An ideal is principal if a power coprime to the class number 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}
                  @[instance_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.

                  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.

                  noncomputable def ClassGroup.mulEquiv {R : Type u_1} [CommRing R] [IsDomain R] {R' : Type u_3} [CommRing R'] [IsDomain R'] (g : R ≃+* R') :

                  A ring isomorphism R ≃+* R' induces an isomorphism on their class groups.

                  Equations
                  • One or more equations did not get rendered due to their size.
                  Instances For