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 M is the quotient of the group M by multiplicative archimedean equivalence, where two elements a and b are in the same class iff (∃ m : ℕ, |b|ₘ ≤ |a|ₘ ^ m) ∧ (∃ n : ℕ, |a|ₘ ≤ |b|ₘ ^ n).

                  Equations
                  Instances For

                    ArchimedeanClass M is the quotient of the additive group M by additive archimedean equivalence, where two elements a and b are in the same class iff (∃ m : ℕ, |b| ≤ m • |a|) ∧ (∃ n : ℕ, |a| ≤ n • |b|).

                    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.forall {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] {p : MulArchimedeanClass MProp} :
                          (∀ (A : MulArchimedeanClass M), p A) ∀ (a : M), p (mk a)
                          theorem ArchimedeanClass.forall {M : Type u_1} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M] {p : ArchimedeanClass MProp} :
                          (∀ (A : ArchimedeanClass M), p A) ∀ (a : M), p (mk a)
                          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
                              def MulArchimedeanClass.lift₂ {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] {α : Type u_2} (f : MMα) (h : ∀ (a₁ b₁ a₂ b₂ : M), mk a₁ = mk b₁mk a₂ = mk b₂f a₁ a₂ = f b₁ b₂) :

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

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

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

                                Equations
                                Instances For
                                  @[simp]
                                  theorem MulArchimedeanClass.lift₂_mk {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] {α : Type u_2} (f : MMα) (h : ∀ (a₁ b₁ a₂ b₂ : M), mk a₁ = mk b₁mk a₂ = mk b₂f a₁ a₂ = f b₁ b₂) (a b : M) :
                                  lift₂ f h (mk a) (mk b) = f a b
                                  @[simp]
                                  theorem ArchimedeanClass.lift₂_mk {M : Type u_1} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M] {α : Type u_2} (f : MMα) (h : ∀ (a₁ b₁ a₂ b₂ : M), mk a₁ = mk b₁mk a₂ = mk b₂f a₁ a₂ = f b₁ b₂) (a b : M) :
                                  lift₂ f h (mk a) (mk b) = f a 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]
                                      @[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)
                                      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

                                          Given a UpperSet of MulArchimedeanClass, all group elements belonging to these classes form a subsemigroup. This is not yet a subgroup because it doesn't contain the identity if s = ⊤.

                                          Equations
                                          Instances For

                                            Given a UpperSet of ArchimedeanClass, all group elements belonging to these classes form a subsemigroup. This is not yet a subgroup because it doesn't contain the identity if s = ⊤.

                                            Equations
                                            Instances For

                                              Make MulArchimedeanClass.subsemigroup a subgroup by assigning s = ⊤ with a junk value ⊥.

                                              Equations
                                              Instances For

                                                Make ArchimedeanClass.subsemigroup a subgroup by assigning s = ⊤ with a junk value ⊥.

                                                Equations
                                                Instances For
                                                  @[reducible, inline]

                                                  An open ball defined by MulArchimedeanClass.subgroup of UpperSet.Ioi c. For c = ⊤, we assign the junk value .

                                                  Equations
                                                  Instances For
                                                    @[reducible, inline]

                                                    An open ball defined by ArchimedeanClass.addSubgroup of UpperSet.Ioi c. For c = ⊤, we assign the junk value .

                                                    Equations
                                                    Instances For
                                                      @[reducible, inline]

                                                      A closed ball defined by MulArchimedeanClass.subgroup of UpperSet.Ici c.

                                                      Equations
                                                      Instances For
                                                        @[reducible, inline]

                                                        FiniteMulArchimedeanClass M is the quotient of the non-one elements of the group M by multiplicative archimedean equivalence, where two elements a and b are in the same class iff (∃ m : ℕ, |b|ₘ ≤ |a|ₘ ^ m) ∧ (∃ n : ℕ, |a|ₘ ≤ |b|ₘ ^ n).

                                                        It is defined as the subtype of non-top elements of MulArchimedeanClass M (⊤ : MulArchimedeanClass M is the archimedean class of 1).

                                                        This is useful since the family of non-top archimedean classes is linearly independent.

                                                        Equations
                                                        Instances For
                                                          @[reducible, inline]

                                                          FiniteArchimedeanClass M is the quotient of the non-zero elements of the additive group M by additive archimedean equivalence, where two elements a and b are in the same class iff (∃ m : ℕ, |b| ≤ m • |a|) ∧ (∃ n : ℕ, |a| ≤ n • |b|).

                                                          It is defined as the subtype of non-top elements of ArchimedeanClass M (⊤ : ArchimedeanClass M is the archimedean class of 0).

                                                          This is useful since the family of non-top archimedean classes is linearly independent.

                                                          Equations
                                                          Instances For

                                                            Create a FiniteArchimedeanClass from a non-zero element.

                                                            Equations
                                                            Instances For
                                                              @[simp]
                                                              theorem FiniteMulArchimedeanClass.val_mk {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] {a : M} (h : a 1) :
                                                              @[simp]
                                                              theorem FiniteArchimedeanClass.val_mk {M : Type u_1} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M] {a : M} (h : a 0) :
                                                              theorem FiniteMulArchimedeanClass.mk_le_mk {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] {a : M} (ha : a 1) {b : M} (hb : b 1) :
                                                              theorem FiniteArchimedeanClass.mk_le_mk {M : Type u_1} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M] {a : M} (ha : a 0) {b : M} (hb : b 0) :
                                                              theorem FiniteMulArchimedeanClass.mk_lt_mk {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] {a : M} (ha : a 1) {b : M} (hb : b 1) :
                                                              theorem FiniteArchimedeanClass.mk_lt_mk {M : Type u_1} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M] {a : M} (ha : a 0) {b : M} (hb : b 0) :
                                                              theorem FiniteMulArchimedeanClass.ind {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] {motive : FiniteMulArchimedeanClass MProp} (mk : ∀ (a : M) (ha : a 1), motive (mk a ha)) (x : FiniteMulArchimedeanClass M) :
                                                              motive x

                                                              An induction principle for FiniteMulArchimedeanClass.

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

                                                              An induction principle for FiniteArchimedeanClass.

                                                              def FiniteMulArchimedeanClass.lift {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] {α : Type u_2} (f : { a : M // a 1 }α) (h : ∀ (a b : { a : M // a 1 }), mk a = mk b f a = f b) :

                                                              Lift a f : {a : M // a ≠ 1} → α function to FiniteMulArchimedeanClass M → α.

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

                                                                Lift a f : {a : M // a ≠ 0} → α function to FiniteArchimedeanClass M → α.

                                                                Equations
                                                                Instances For
                                                                  @[simp]
                                                                  theorem FiniteMulArchimedeanClass.lift_mk {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] {α : Type u_2} (f : { a : M // a 1 }α) (h : ∀ (a b : { a : M // a 1 }), mk a = mk b f a = f b) {a : M} (ha : a 1) :
                                                                  lift f h (mk a ha) = f a, ha
                                                                  @[simp]
                                                                  theorem FiniteArchimedeanClass.lift_mk {M : Type u_1} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M] {α : Type u_2} (f : { a : M // a 0 }α) (h : ∀ (a b : { a : M // a 0 }), mk a = mk b f a = f b) {a : M} (ha : a 0) :
                                                                  lift f h (mk a ha) = f a, ha
                                                                  noncomputable def FiniteMulArchimedeanClass.liftOrderHom {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] {α : Type u_2} [PartialOrder α] (f : { a : M // a 1 }α) (h : ∀ (a b : { a : M // a 1 }), mk a mk b f a f b) :

                                                                  Lift a function {a : M // a ≠ 1} → α that's monotone along archimedean classes to a monotone function FiniteMulArchimedeanClass M →o α.

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

                                                                    Lift a function {a : M // a ≠ 1} → α that's monotone along archimedean classes to a monotone function FiniteArchimedeanClass M₁ →o α.

                                                                    Equations
                                                                    Instances For
                                                                      @[simp]
                                                                      theorem FiniteMulArchimedeanClass.liftOrderHom_mk {M : Type u_1} [CommGroup M] [LinearOrder M] [IsOrderedMonoid M] {α : Type u_2} [PartialOrder α] (f : { a : M // a 1 }α) (h : ∀ (a b : { a : M // a 1 }), mk a mk b f a f b) {a : M} (ha : a 1) :
                                                                      (liftOrderHom f h) (mk a ha) = f a, ha
                                                                      @[simp]
                                                                      theorem FiniteArchimedeanClass.liftOrderHom_mk {M : Type u_1} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M] {α : Type u_2} [PartialOrder α] (f : { a : M // a 0 }α) (h : ∀ (a b : { a : M // a 0 }), mk a mk b f a f b) {a : M} (ha : a 0) :
                                                                      (liftOrderHom f h) (mk a ha) = f a, ha

                                                                      Adding top to the type of finite classes yields the type of all classes.

                                                                      Equations
                                                                      Instances For

                                                                        Adding top to the type of finite classes yields the type of all classes.

                                                                        Equations
                                                                        Instances For