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 an AddCommMonoid (as a ℕ-module) is the localized module by ℕ+ (implemented using nonZeroDivisors), thus a ℕ-divisible 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
          Equations
            @[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
                                  @[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'
                                  @[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.

                                  The Archimedean classes of DivisibleHull M are the same as those of M.

                                  Equations
                                    Instances For