Documentation

Mathlib.GroupTheory.DivisibleHull

Divisible Hull of an abelian group #

This file constructs the divisible hull of an AddCommMonoid as a -module localized at ℕ+ (implemented using nonZeroDivisors), which is a ℚ≥0-module.

Furthermore, we show that

Despite the name, this file doesn't implement a DivisibleBy instance on DivisibleHull. This should be implemented on LocalizedModule in a more general setting (TODO: implement this). This file mainly focuses on the specialization to and the linear order property introduced by it.

Main declarations #

@[reducible, inline]
abbrev DivisibleHull (M : Type u_1) [AddCommMonoid M] :
Type u_1

The divisible hull of a AddCommMonoid (as a ℕ-module) is the localized module by ℕ+ (implemented using nonZeroDivisors), thus a ℕ-divisble group, or a ℚ≥0-module.

Equations
Instances For
    def DivisibleHull.mk {M : Type u_1} [AddCommMonoid M] (m : M) (s : ℕ+) :

    Create an element m / s.

    Equations
    Instances For
      @[reducible, inline]
      abbrev DivisibleHull.coe {M : Type u_1} [AddCommMonoid M] (m : M) :

      Define coercion as m ↦ m / 1.

      Equations
      Instances For

        Coercion from M to DivisibleHull M defined as m ↦ m / 1.

        Equations
        @[simp]
        theorem DivisibleHull.mk_zero {M : Type u_1} [AddCommMonoid M] (s : ℕ+) :
        mk 0 s = 0
        theorem DivisibleHull.ind {M : Type u_1} [AddCommMonoid M] {motive : DivisibleHull MProp} (mk : ∀ (num : M) (den : ℕ+), motive (mk num den)) (x : DivisibleHull M) :
        motive x
        theorem DivisibleHull.mk_eq_mk {M : Type u_1} [AddCommMonoid M] {m m' : M} {s s' : ℕ+} :
        mk m s = mk m' s' ∃ (u : ℕ+), u s' m = u s m'
        def DivisibleHull.liftOn {M : Type u_1} [AddCommMonoid M] {α : Type u_2} (x : DivisibleHull M) (f : Mℕ+α) (h : ∀ (m m' : M) (s s' : ℕ+), mk m s = mk m' s'f m s = f m' s') :
        α

        If f : M → ℕ+ → α respects the equivalence on localization, lift it to a function DivisibleHull M → α.

        Equations
        Instances For
          @[simp]
          theorem DivisibleHull.liftOn_mk {M : Type u_1} [AddCommMonoid M] {α : Type u_2} (m : M) (s : ℕ+) (f : Mℕ+α) (h : ∀ (m m' : M) (s s' : ℕ+), mk m s = mk m' s'f m s = f m' s') :
          (mk m s).liftOn f h = f m s
          def DivisibleHull.liftOn₂ {M : Type u_1} [AddCommMonoid M] {α : Type u_2} (x y : DivisibleHull M) (f : Mℕ+Mℕ+α) (h : ∀ (m n m' n' : M) (s t s' t' : ℕ+), mk m s = mk m' s'mk n t = mk n' t'f m s n t = f m' s' n' t') :
          α

          If f : M → ℕ+ → M → ℕ+ → α respects the equivalence on localization, lift it to a function DivisibleHull M → DivisibleHull M → α.

          Equations
          Instances For
            @[simp]
            theorem DivisibleHull.liftOn₂_mk {M : Type u_1} [AddCommMonoid M] {α : Type u_2} (m m' : M) (s s' : ℕ+) (f : Mℕ+Mℕ+α) (h : ∀ (m n m' n' : M) (s t s' t' : ℕ+), mk m s = mk m' s'mk n t = mk n' t'f m s n t = f m' s' n' t') :
            (mk m s).liftOn₂ (mk m' s') f h = f m s m' s'
            theorem DivisibleHull.mk_add_mk {M : Type u_1} [AddCommMonoid M] {m1 m2 : M} {s1 s2 : ℕ+} :
            mk m1 s1 + mk m2 s2 = mk (s2 m1 + s1 m2) (s1 * s2)
            theorem DivisibleHull.mk_add_mk_left {M : Type u_1} [AddCommMonoid M] {m1 m2 : M} {s : ℕ+} :
            mk m1 s + mk m2 s = mk (m1 + m2) s
            @[simp]
            theorem DivisibleHull.coe_add {M : Type u_1} [AddCommMonoid M] {m1 m2 : M} :
            ↑(m1 + m2) = m1 + m2

            Coercion from M to DivisibleHull M as an AddMonoidHom.

            Equations
            Instances For
              @[simp]
              theorem DivisibleHull.coeAddMonoidHom_apply (M : Type u_1) [AddCommMonoid M] (m : M) :
              (coeAddMonoidHom M) m = m
              theorem DivisibleHull.nsmul_mk {M : Type u_1} [AddCommMonoid M] (a : ) (m : M) (s : ℕ+) :
              a mk m s = mk (a m) s
              theorem DivisibleHull.nnqsmul_mk {M : Type u_1} [AddCommMonoid M] (a : ℚ≥0) (m : M) (s : ℕ+) :
              a mk m s = mk (a.num m) (a.den, * s)
              theorem DivisibleHull.mk_eq_mk_iff_smul_eq_smul {M : Type u_1} [AddCommMonoid M] [IsAddTorsionFree M] {m m' : M} {s s' : ℕ+} :
              mk m s = mk m' s' s' m = s m'
              @[simp]
              theorem DivisibleHull.coe_inj {M : Type u_1} [AddCommMonoid M] [IsAddTorsionFree M] {m m' : M} :
              m = m' m = m'
              theorem DivisibleHull.neg_mk {M : Type u_2} [AddCommGroup M] (m : M) (s : ℕ+) :
              -mk m s = mk (-m) s
              noncomputable instance DivisibleHull.instSMulRat {M : Type u_2} [AddCommGroup M] :
              Equations
              theorem DivisibleHull.qsmul_def {M : Type u_2} [AddCommGroup M] (a : ) (x : DivisibleHull M) :
              a x = (SignType.sign a) (have this := |a|, ; this) x
              theorem DivisibleHull.zero_qsmul {M : Type u_2} [AddCommGroup M] (x : DivisibleHull M) :
              0 x = 0
              theorem DivisibleHull.qsmul_of_nonneg {M : Type u_2} [AddCommGroup M] {a : } (h : 0 a) (x : DivisibleHull M) :
              a x = (have this := a, h; this) x
              theorem DivisibleHull.qsmul_of_nonpos {M : Type u_2} [AddCommGroup M] {a : } (h : a 0) (x : DivisibleHull M) :
              a x = -((have this := -a, ; this) x)
              theorem DivisibleHull.qsmul_mk {M : Type u_2} [AddCommGroup M] (a : ) (m : M) (s : ℕ+) :
              a mk m s = mk (a.num m) (a.den, * s)
              noncomputable instance DivisibleHull.instModuleRat {M : Type u_2} [AddCommGroup M] :
              Equations
              theorem DivisibleHull.zsmul_mk {M : Type u_2} [AddCommGroup M] (a : ) (m : M) (s : ℕ+) :
              a mk m s = mk (a m) s
              Equations
              @[simp]
              theorem DivisibleHull.mk_le_mk {M : Type u_2} [AddCommMonoid M] [LinearOrder M] [IsOrderedCancelAddMonoid M] {m m' : M} {s s' : ℕ+} :
              mk m s mk m' s' s' m s m'
              Equations
              • One or more equations did not get rendered due to their size.
              @[simp]
              theorem DivisibleHull.mk_lt_mk {M : Type u_2} [AddCommMonoid M] [LinearOrder M] [IsOrderedCancelAddMonoid M] {m m' : M} {s s' : ℕ+} :
              mk m s < mk m' s' s' m < s m'

              ArchimedeanClass.mk of an element from DivisibleHull only depends on the numerator.