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
          @[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
                            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.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