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
              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|
              Equations
              Equations

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