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 #
ArchimedeanClass
is the archimedean class for additive linearly ordered group.MulArchimedeanClass
is the archimedean class for multiplicative linearly ordered group.ArchimedeanClass.orderHom
andMulArchimedeanClass.orderHom
areOrderHom
over archimedean classes lifted from ordered group homomorphisms.ArchimedeanClass.ballAddSubgroup
andMulArchimedeanClass.ballSubgroup
are subgroups formed by an open interval of archimedean classesArchimedeanClass.closedBallAddSubgroup
andMulArchimedeanClass.closedBallSubgroup
are subgroups formed by a closed interval of archimedean classes.
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
:
ArchimedeanClass.archimedean_of_mk_eq_mk
/MulArchimedeanClass.mulArchimedean_of_mk_eq_mk
ArchimedeanClass.mk_eq_mk_of_archimedean
/MulArchimedeanClass.mk_eq_mk_of_mulArchimedean
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.
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
- MulArchimedeanOrder M = M
Instances For
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
- ArchimedeanOrder M = M
Instances For
Equations
- MulArchimedeanOrder.instLE = { le := fun (a b : MulArchimedeanOrder M) => ∃ (n : ℕ), mabs (MulArchimedeanOrder.val b) ≤ mabs (MulArchimedeanOrder.val a) ^ n }
Equations
- ArchimedeanOrder.instLE = { le := fun (a b : ArchimedeanOrder M) => ∃ (n : ℕ), |ArchimedeanOrder.val b| ≤ n • |ArchimedeanOrder.val a| }
Equations
- MulArchimedeanOrder.instLT = { lt := fun (a b : MulArchimedeanOrder M) => ∀ (n : ℕ), mabs (MulArchimedeanOrder.val b) ^ n < mabs (MulArchimedeanOrder.val a) }
Equations
- ArchimedeanOrder.instLT = { lt := fun (a b : ArchimedeanOrder M) => ∀ (n : ℕ), n • |ArchimedeanOrder.val b| < |ArchimedeanOrder.val a| }
Equations
- MulArchimedeanOrder.instPreorder = { toLE := MulArchimedeanOrder.instLE, toLT := MulArchimedeanOrder.instLT, le_refl := ⋯, le_trans := ⋯, lt_iff_le_not_ge := ⋯ }
Equations
- ArchimedeanOrder.instPreorder = { toLE := ArchimedeanOrder.instLE, toLT := ArchimedeanOrder.instLT, le_refl := ⋯, le_trans := ⋯, lt_iff_le_not_ge := ⋯ }
An OrderMonoidHom
can be made to an OrderHom
between their MulArchimedeanOrder
.
Equations
- MulArchimedeanOrder.orderHom f = { toFun := fun (a : MulArchimedeanOrder M) => MulArchimedeanOrder.of (f (MulArchimedeanOrder.val a)), monotone' := ⋯ }
Instances For
An OrderAddMonoidHom
can be made to an OrderHom
between their
ArchimedeanOrder
.
Equations
- ArchimedeanOrder.orderHom f = { toFun := fun (a : ArchimedeanOrder M) => ArchimedeanOrder.of (f (ArchimedeanOrder.val a)), monotone' := ⋯ }
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
- MulArchimedeanClass M = Antisymmetrization (MulArchimedeanOrder M) fun (x1 x2 : MulArchimedeanOrder M) => x1 ≤ x2
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
- ArchimedeanClass M = Antisymmetrization (ArchimedeanOrder M) fun (x1 x2 : ArchimedeanOrder M) => x1 ≤ x2
Instances For
The archimedean class of a given element.
Equations
- MulArchimedeanClass.mk a = toAntisymmetrization (fun (x1 x2 : MulArchimedeanOrder M) => x1 ≤ x2) (MulArchimedeanOrder.of a)
Instances For
The archimedean class of a given element.
Equations
- ArchimedeanClass.mk a = toAntisymmetrization (fun (x1 x2 : ArchimedeanOrder M) => x1 ≤ x2) (ArchimedeanOrder.of a)
Instances For
An induction principle for MulArchimedeanClass
.
An induction principle for ArchimedeanClass
Lift a M → α
function to MulArchimedeanClass M → α
.
Equations
- MulArchimedeanClass.lift f h = Quotient.lift f ⋯
Instances For
Lift a M → α
function to ArchimedeanClass M → α
.
Equations
- ArchimedeanClass.lift f h = Quotient.lift f ⋯
Instances For
Lift a M → M → α
function to MulArchimedeanClass M → MulArchimedeanClass M → α
.
Equations
- MulArchimedeanClass.lift₂ f h = Quotient.lift₂ f ⋯
Instances For
Lift a M → M → α
function to ArchimedeanClass M → ArchimedeanClass M → α
.
Equations
- ArchimedeanClass.lift₂ f h = Quotient.lift₂ f ⋯
Instances For
Choose a representative element from a given archimedean class.
Equations
Instances For
Choose a representative element from a given archimedean class.
Equations
- A.out = ArchimedeanOrder.val (Quotient.out A)
Instances For
Equations
1 is in its own class (see MulArchimedeanClass.mk_eq_top_iff
),
which is also the largest class.
Equations
- MulArchimedeanClass.instOrderTop = { top := MulArchimedeanClass.mk 1, le_top := ⋯ }
0 is in its own class (see ArchimedeanClass.mk_eq_top_iff
),
which is also the largest class.
Equations
- ArchimedeanClass.instOrderTop = { top := ArchimedeanClass.mk 0, le_top := ⋯ }
The product over a set of an elements in distinct classes is in the lowest class.
The sum over a set of an elements in distinct classes is in the lowest class.
An OrderMonoidHom
can be lifted to an OrderHom
over archimedean classes.
Instances For
An OrderAddMonoidHom
can be lifted to an OrderHom
over archimedean classes.
Equations
Instances For
Lift a function M → α
that's monotone along archimedean classes to a
monotone function MulArchimedeanClass M →o α
.
Equations
- MulArchimedeanClass.liftOrderHom f h = { toFun := MulArchimedeanClass.lift f ⋯, monotone' := ⋯ }
Instances For
Lift a function M → α
that's monotone along archimedean classes to a
monotone function ArchimedeanClass M →o α
.
Equations
- ArchimedeanClass.liftOrderHom f h = { toFun := ArchimedeanClass.lift f ⋯, monotone' := ⋯ }
Instances For
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
- MulArchimedeanClass.subsemigroup s = { carrier := MulArchimedeanClass.mk ⁻¹' ↑s, mul_mem' := ⋯ }
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
- ArchimedeanClass.subsemigroup s = { carrier := ArchimedeanClass.mk ⁻¹' ↑s, add_mem' := ⋯ }
Instances For
Make MulArchimedeanClass.subsemigroup
a subgroup by assigning
s = ⊤ with a junk value ⊥.
Equations
- MulArchimedeanClass.subgroup s = if hs : s = ⊤ then ⊥ else let __src := MulArchimedeanClass.subsemigroup s; { toSubsemigroup := __src, one_mem' := ⋯, inv_mem' := ⋯ }
Instances For
Make ArchimedeanClass.subsemigroup
a subgroup by assigning
s = ⊤ with a junk value ⊥.
Equations
- ArchimedeanClass.addSubgroup s = if hs : s = ⊤ then ⊥ else let __src := ArchimedeanClass.subsemigroup s; { toAddSubsemigroup := __src, zero_mem' := ⋯, neg_mem' := ⋯ }
Instances For
An open ball defined by MulArchimedeanClass.subgroup
of UpperSet.Ioi c
.
For c = ⊤
, we assign the junk value ⊥
.
Equations
Instances For
An open ball defined by ArchimedeanClass.addSubgroup
of UpperSet.Ioi c
.
For c = ⊤
, we assign the junk value ⊥
.
Equations
Instances For
A closed ball defined by MulArchimedeanClass.subgroup
of UpperSet.Ici c
.
Equations
Instances For
A closed ball defined by ArchimedeanClass.addSubgroup
of UpperSet.Ici c
.
Equations
Instances For
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
- FiniteMulArchimedeanClass M = { A : MulArchimedeanClass M // A ≠ ⊤ }
Instances For
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
- FiniteArchimedeanClass M = { A : ArchimedeanClass M // A ≠ ⊤ }
Instances For
Create a FiniteMulArchimedeanClass
from a non-one element.
Equations
Instances For
Create a FiniteArchimedeanClass
from a non-zero element.
Equations
Instances For
An induction principle for FiniteMulArchimedeanClass
.
An induction principle for FiniteArchimedeanClass
.
Lift a f : {a : M // a ≠ 1} → α
function to FiniteMulArchimedeanClass M → α
.
Equations
- FiniteMulArchimedeanClass.lift f h ⟨A, hA⟩ = (MulArchimedeanClass.lift (fun (b : M) => if h : b = 1 then ⊤ else ↑(f ⟨b, h⟩)) ⋯ A).untop ⋯
Instances For
Lift a f : {a : M // a ≠ 0} → α
function to FiniteArchimedeanClass M → α
.
Equations
- FiniteArchimedeanClass.lift f h ⟨A, hA⟩ = (ArchimedeanClass.lift (fun (b : M) => if h : b = 0 then ⊤ else ↑(f ⟨b, h⟩)) ⋯ A).untop ⋯
Instances For
Lift a function {a : M // a ≠ 1} → α
that's monotone along archimedean classes to a
monotone function FiniteMulArchimedeanClass M →o α
.
Equations
- FiniteMulArchimedeanClass.liftOrderHom f h = { toFun := FiniteMulArchimedeanClass.lift f ⋯, monotone' := ⋯ }
Instances For
Lift a function {a : M // a ≠ 1} → α
that's monotone along archimedean
classes to a monotone function FiniteArchimedeanClass M₁ →o α
.
Equations
- FiniteArchimedeanClass.liftOrderHom f h = { toFun := FiniteArchimedeanClass.lift f ⋯, monotone' := ⋯ }
Instances For
Adding top to the type of finite classes yields the type of all classes.
Instances For
Adding top to the type of finite classes yields the type of all classes.