Documentation

Mathlib.Algebra.Order.Archimedean.Class

Archimedean classes of a linearly ordered group #

This file defines archimedean classes of a given linearly ordered group. Archimedean classes measure to what extent the group fails to be Archimedean. For additive group, elements a and b in the same class are "equivalent" in the sense that there exist two natural numbers m and n such that |a| ≤ m • |b| and |b| ≤ n • |a|. An element a in a higher class than b is "infinitesimal" to b in the sense that n • |a| < |b| for all natural number n.

Main definitions #

Main statements #

The following theorems state that an ordered commutative group is (mul-)archimedean if and only if all non-identity elements belong to the same (Mul-)ArchimedeanClass:

Implementation notes #

Archimedean classes are equipped with a linear order, where elements with smaller absolute value are placed in a higher classes by convention. Ordering backwards this way simplifies formalization of theorems such as the Hahn embedding theorem.

To naturally derive this order, we first define it on the underlying group via the type synonym (Mul-)ArchimedeanOrder, and define (Mul-)ArchimedeanClass as Antisymmetrization of the order.

def MulArchimedeanOrder (M : Type u_1) :
Type u_1

Type synonym to equip a ordered group with a new Preorder defined by the infinitesimal order of elements. a is said less than b if b is infinitesimal comparing to a, or more precisely, ∀ n, |b|ₘ ^ n < |a|ₘ. If a and b are neither infinitesimal to each other, they are equivalent in this order.

Equations
    Instances For
      def ArchimedeanOrder (M : Type u_1) :
      Type u_1

      Type synonym to equip a ordered group with a new Preorder defined by the infinitesimal order of elements. a is said less than b if b is infinitesimal comparing to a, or more precisely, ∀ n, n • |b| < |a|. If a and b are neither infinitesimal to each other, they are equivalent in this order.

      Equations
        Instances For

          Create a MulArchimedeanOrder element from the underlying type.

          Equations
            Instances For

              Create a ArchimedeanOrder element from the underlying type.

              Equations
                Instances For

                  Retrieve the underlying value from a MulArchimedeanOrder element.

                  Equations
                    Instances For

                      Retrieve the underlying value from a ArchimedeanOrder element.

                      Equations
                        Instances For
                          @[simp]
                          @[simp]
                          @[simp]
                          theorem MulArchimedeanOrder.of_val {M : Type u_1} (a : MulArchimedeanOrder M) :
                          of (val a) = a
                          @[simp]
                          theorem ArchimedeanOrder.of_val {M : Type u_1} (a : ArchimedeanOrder M) :
                          of (val a) = a
                          @[simp]
                          theorem MulArchimedeanOrder.val_of {M : Type u_1} (a : M) :
                          val (of a) = a
                          @[simp]
                          theorem ArchimedeanOrder.val_of {M : Type u_1} (a : M) :
                          val (of a) = a
                          Equations
                            Equations
                              Equations
                                Equations
                                  theorem MulArchimedeanOrder.le_def {M : Type u_1} [Group M] [Lattice M] {a b : MulArchimedeanOrder M} :
                                  a b ∃ (n : ), mabs (val b) mabs (val a) ^ n
                                  theorem ArchimedeanOrder.le_def {M : Type u_1} [AddGroup M] [Lattice M] {a b : ArchimedeanOrder M} :
                                  a b ∃ (n : ), |val b| n |val a|
                                  theorem MulArchimedeanOrder.lt_def {M : Type u_1} [Group M] [Lattice M] {a b : MulArchimedeanOrder M} :
                                  a < b ∀ (n : ), mabs (val b) ^ n < mabs (val a)
                                  theorem ArchimedeanOrder.lt_def {M : Type u_1} [AddGroup M] [Lattice M] {a b : ArchimedeanOrder M} :
                                  a < b ∀ (n : ), n |val b| < |val a|

                                  An OrderMonoidHom can be made to an OrderHom between their MulArchimedeanOrder.

                                  Equations
                                    Instances For

                                      An OrderAddMonoidHom can be made to an OrderHom between their ArchimedeanOrder.

                                      Equations
                                        Instances For

                                          MulArchimedeanClass is the antisymmetrization of MulArchimedeanOrder.

                                          Equations
                                            Instances For

                                              ArchimedeanClass is the antisymmetrization of ArchimedeanOrder.

                                              Equations
                                                Instances For

                                                  The archimedean class of a given element.

                                                  Equations
                                                    Instances For

                                                      The archimedean class of a given element.

                                                      Equations
                                                        Instances For
                                                          theorem MulArchimedeanClass.ind {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] {motive : MulArchimedeanClass MProp} (mk : ∀ (a : M), motive (mk a)) (x : MulArchimedeanClass M) :
                                                          motive x

                                                          An induction principle for MulArchimedeanClass.

                                                          theorem ArchimedeanClass.ind {M : Type u_1} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M] {motive : ArchimedeanClass MProp} (mk : ∀ (a : M), motive (mk a)) (x : ArchimedeanClass M) :
                                                          motive x

                                                          An induction principle for ArchimedeanClass

                                                          theorem MulArchimedeanClass.mk_eq_mk {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] {a b : M} :
                                                          mk a = mk b (∃ (m : ), mabs b mabs a ^ m) ∃ (n : ), mabs a mabs b ^ n
                                                          theorem ArchimedeanClass.mk_eq_mk {M : Type u_1} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M] {a b : M} :
                                                          mk a = mk b (∃ (m : ), |b| m |a|) ∃ (n : ), |a| n |b|
                                                          def MulArchimedeanClass.lift {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] {α : Type u_2} (f : Mα) (h : ∀ (a b : M), mk a = mk bf a = f b) :

                                                          Lift a M → α function to MulArchimedeanClass M → α.

                                                          Equations
                                                            Instances For
                                                              def ArchimedeanClass.lift {M : Type u_1} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M] {α : Type u_2} (f : Mα) (h : ∀ (a b : M), mk a = mk bf a = f b) :

                                                              Lift a M → α function to ArchimedeanClass M → α.

                                                              Equations
                                                                Instances For
                                                                  @[simp]
                                                                  theorem MulArchimedeanClass.lift_mk {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] {α : Type u_2} (f : Mα) (h : ∀ (a b : M), mk a = mk bf a = f b) (a : M) :
                                                                  lift f h (mk a) = f a
                                                                  @[simp]
                                                                  theorem ArchimedeanClass.lift_mk {M : Type u_1} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M] {α : Type u_2} (f : Mα) (h : ∀ (a b : M), mk a = mk bf a = f b) (a : M) :
                                                                  lift f h (mk a) = f a
                                                                  noncomputable def MulArchimedeanClass.out {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] (A : MulArchimedeanClass M) :
                                                                  M

                                                                  Choose a representative element from a given archimedean class.

                                                                  Equations
                                                                    Instances For
                                                                      noncomputable def ArchimedeanClass.out {M : Type u_1} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M] (A : ArchimedeanClass M) :
                                                                      M

                                                                      Choose a representative element from a given archimedean class.

                                                                      Equations
                                                                        Instances For
                                                                          @[simp]
                                                                          theorem MulArchimedeanClass.mk_inv {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] (a : M) :
                                                                          @[simp]
                                                                          theorem ArchimedeanClass.mk_neg {M : Type u_1} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M] (a : M) :
                                                                          mk (-a) = mk a
                                                                          theorem MulArchimedeanClass.mk_div_comm {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] (a b : M) :
                                                                          mk (a / b) = mk (b / a)
                                                                          theorem ArchimedeanClass.mk_sub_comm {M : Type u_1} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M] (a b : M) :
                                                                          mk (a - b) = mk (b - a)
                                                                          @[simp]
                                                                          theorem MulArchimedeanClass.mk_mabs {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] (a : M) :
                                                                          mk (mabs a) = mk a
                                                                          @[simp]
                                                                          theorem ArchimedeanClass.mk_abs {M : Type u_1} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M] (a : M) :
                                                                          mk |a| = mk a
                                                                          theorem MulArchimedeanClass.mk_le_mk {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] {a b : M} :
                                                                          mk a mk b ∃ (n : ), mabs b mabs a ^ n
                                                                          theorem ArchimedeanClass.mk_le_mk {M : Type u_1} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M] {a b : M} :
                                                                          mk a mk b ∃ (n : ), |b| n |a|
                                                                          theorem MulArchimedeanClass.mk_lt_mk {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] {a b : M} :
                                                                          mk a < mk b ∀ (n : ), mabs b ^ n < mabs a
                                                                          theorem ArchimedeanClass.mk_lt_mk {M : Type u_1} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M] {a b : M} :
                                                                          mk a < mk b ∀ (n : ), n |b| < |a|

                                                                          1 is in its own class (see MulArchimedeanClass.mk_eq_top_iff), which is also the largest class.

                                                                          Equations

                                                                            0 is in its own class (see ArchimedeanClass.mk_eq_top_iff), which is also the largest class.

                                                                            Equations
                                                                              @[simp]
                                                                              @[simp]
                                                                              theorem MulArchimedeanClass.min_le_mk_mul {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] (a b : M) :
                                                                              min (mk a) (mk b) mk (a * b)
                                                                              theorem ArchimedeanClass.min_le_mk_add {M : Type u_1} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M] (a b : M) :
                                                                              min (mk a) (mk b) mk (a + b)
                                                                              theorem MulArchimedeanClass.mk_left_le_mk_mul {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] {a b : M} (hab : mk a mk b) :
                                                                              mk a mk (a * b)
                                                                              theorem ArchimedeanClass.mk_left_le_mk_add {M : Type u_1} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M] {a b : M} (hab : mk a mk b) :
                                                                              mk a mk (a + b)
                                                                              theorem MulArchimedeanClass.mk_right_le_mk_mul {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] {a b : M} (hba : mk b mk a) :
                                                                              mk b mk (a * b)
                                                                              theorem ArchimedeanClass.mk_right_le_mk_add {M : Type u_1} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M] {a b : M} (hba : mk b mk a) :
                                                                              mk b mk (a + b)
                                                                              theorem MulArchimedeanClass.mk_mul_eq_mk_left {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] {a b : M} (h : mk a < mk b) :
                                                                              mk (a * b) = mk a
                                                                              theorem ArchimedeanClass.mk_add_eq_mk_left {M : Type u_1} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M] {a b : M} (h : mk a < mk b) :
                                                                              mk (a + b) = mk a
                                                                              theorem MulArchimedeanClass.mk_mul_eq_mk_right {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] {a b : M} (h : mk b < mk a) :
                                                                              mk (a * b) = mk b
                                                                              theorem ArchimedeanClass.mk_add_eq_mk_right {M : Type u_1} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M] {a b : M} (h : mk b < mk a) :
                                                                              mk (a + b) = mk b
                                                                              theorem MulArchimedeanClass.mk_prod {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] {ι : Type u_2} [LinearOrder ι] {s : Finset ι} (hnonempty : s.Nonempty) {a : ιM} :
                                                                              StrictMonoOn (mk a) smk (∏ is, a i) = mk (a (s.min' hnonempty))

                                                                              The product over a set of an elements in distinct classes is in the lowest class.

                                                                              theorem ArchimedeanClass.mk_sum {M : Type u_1} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M] {ι : Type u_2} [LinearOrder ι] {s : Finset ι} (hnonempty : s.Nonempty) {a : ιM} :
                                                                              StrictMonoOn (mk a) smk (∑ is, a i) = mk (a (s.min' hnonempty))

                                                                              The sum over a set of an elements in distinct classes is in the lowest class.

                                                                              theorem MulArchimedeanClass.lt_of_mk_lt_mk_of_one_le {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] {a b : M} (h : mk a < mk b) (hpos : 1 a) :
                                                                              b < a
                                                                              theorem ArchimedeanClass.lt_of_mk_lt_mk_of_nonneg {M : Type u_1} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M] {a b : M} (h : mk a < mk b) (hpos : 0 a) :
                                                                              b < a
                                                                              theorem MulArchimedeanClass.lt_of_mk_lt_mk_of_le_one {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] {a b : M} (h : mk a < mk b) (hneg : a 1) :
                                                                              a < b
                                                                              theorem ArchimedeanClass.lt_of_mk_lt_mk_of_nonpos {M : Type u_1} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M] {a b : M} (h : mk a < mk b) (hneg : a 0) :
                                                                              a < b
                                                                              theorem MulArchimedeanClass.one_lt_of_one_lt_of_mk_lt {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] {a b : M} (ha : 1 < a) (hab : mk a < mk (b / a)) :
                                                                              1 < b
                                                                              theorem ArchimedeanClass.pos_of_pos_of_mk_lt {M : Type u_1} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M] {a b : M} (ha : 0 < a) (hab : mk a < mk (b - a)) :
                                                                              0 < b
                                                                              theorem MulArchimedeanClass.mulArchimedean_of_mk_eq_mk {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] (h : ∀ (a : M), a 1∀ (b : M), b 1mk a = mk b) :
                                                                              theorem ArchimedeanClass.archimedean_of_mk_eq_mk {M : Type u_1} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M] (h : ∀ (a : M), a 0∀ (b : M), b 0mk a = mk b) :
                                                                              theorem MulArchimedeanClass.mk_eq_mk_of_mulArchimedean {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] {a b : M} [MulArchimedean M] (ha : a 1) (hb : b 1) :
                                                                              mk a = mk b
                                                                              theorem ArchimedeanClass.mk_eq_mk_of_archimedean {M : Type u_1} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M] {a b : M} [Archimedean M] (ha : a 0) (hb : b 0) :
                                                                              mk a = mk b

                                                                              An OrderMonoidHom can be lifted to an OrderHom over archimedean classes.

                                                                              Equations
                                                                                Instances For

                                                                                  An OrderAddMonoidHom can be lifted to an OrderHom over archimedean classes.

                                                                                  Equations
                                                                                    Instances For
                                                                                      @[simp]
                                                                                      theorem MulArchimedeanClass.orderHom_mk {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] {N : Type u_2} [CommGroup N] [LinearOrder N] [IsOrderedMonoid N] (f : M →*o N) (a : M) :
                                                                                      (orderHom f) (mk a) = mk (f a)
                                                                                      @[simp]
                                                                                      theorem ArchimedeanClass.orderHom_mk {M : Type u_1} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M] {N : Type u_2} [AddCommGroup N] [LinearOrder N] [IsOrderedAddMonoid N] (f : M →+o N) (a : M) :
                                                                                      (orderHom f) (mk a) = mk (f a)
                                                                                      theorem MulArchimedeanClass.map_mk_eq {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] {a b : M} {N : Type u_2} [CommGroup N] [LinearOrder N] [IsOrderedMonoid N] (f : M →*o N) (h : mk a = mk b) :
                                                                                      mk (f a) = mk (f b)
                                                                                      theorem ArchimedeanClass.map_mk_eq {M : Type u_1} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M] {a b : M} {N : Type u_2} [AddCommGroup N] [LinearOrder N] [IsOrderedAddMonoid N] (f : M →+o N) (h : mk a = mk b) :
                                                                                      mk (f a) = mk (f b)
                                                                                      theorem MulArchimedeanClass.map_mk_le {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] {a b : M} {N : Type u_2} [CommGroup N] [LinearOrder N] [IsOrderedMonoid N] (f : M →*o N) (h : mk a mk b) :
                                                                                      mk (f a) mk (f b)
                                                                                      theorem ArchimedeanClass.map_mk_le {M : Type u_1} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M] {a b : M} {N : Type u_2} [AddCommGroup N] [LinearOrder N] [IsOrderedAddMonoid N] (f : M →+o N) (h : mk a mk b) :
                                                                                      mk (f a) mk (f b)
                                                                                      noncomputable def MulArchimedeanClass.liftOrderHom {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] {α : Type u_2} [PartialOrder α] (f : Mα) (h : ∀ (a b : M), mk a mk bf a f b) :

                                                                                      Lift a function M → α that's monotone along archimedean classes to a monotone function MulArchimedeanClass M →o α.

                                                                                      Equations
                                                                                        Instances For
                                                                                          noncomputable def ArchimedeanClass.liftOrderHom {M : Type u_1} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M] {α : Type u_2} [PartialOrder α] (f : Mα) (h : ∀ (a b : M), mk a mk bf a f b) :

                                                                                          Lift a function M → α that's monotone along archimedean classes to a monotone function ArchimedeanClass M →o α.

                                                                                          Equations
                                                                                            Instances For
                                                                                              @[simp]
                                                                                              theorem MulArchimedeanClass.liftOrderHom_mk {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] {α : Type u_2} [PartialOrder α] (f : Mα) (h : ∀ (a b : M), mk a mk bf a f b) (a : M) :
                                                                                              (liftOrderHom f h) (mk a) = f a
                                                                                              @[simp]
                                                                                              theorem ArchimedeanClass.liftOrderHom_mk {M : Type u_1} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M] {α : Type u_2} [PartialOrder α] (f : Mα) (h : ∀ (a b : M), mk a mk bf a f b) (a : M) :
                                                                                              (liftOrderHom f h) (mk a) = f a