@@ -5,28 +5,27 @@ Authors: Mario Carneiro
55-/
66module
77
8+ public import Mathlib.Algebra.Field.Defs
9+ public import Mathlib.Algebra.Order.Archimedean.Defs
810public import Mathlib.Algebra.Order.Floor.Semiring
9- public import Mathlib.Algebra.Order.Monoid.Units
10- public import Mathlib.Algebra.Order.Ring.Pow
11- public import Mathlib.Data.Int.LeastGreatest
11+ public import Mathlib.Order.Directed
1212public import Mathlib.Data.Rat.Floor
13+
1314import Mathlib.Algebra.Order.Group.Basic
15+ import Mathlib.Algebra.Order.Monoid.Units
16+ import Mathlib.Algebra.Order.Ring.Pow
17+ import Mathlib.Data.Int.LeastGreatest
1418
1519/-!
16- # Archimedean groups and fields.
20+ # Archimedean groups and fields
1721
18- This file defines the archimedean property for ordered groups and proves several results connected
19- to this notion. Being archimedean means that for all elements `x` and `y>0` there exists a natural
20- number `n` such that `x ≤ n • y`.
22+ This file proves several results connected to the notion of Archimedean groups. Being Archimedean
23+ means that for all elements `x` and `y > 0` there exists a natural number `n` such that `x ≤ n • y`.
2124
2225## Main definitions
2326
24- * `Archimedean` is a typeclass for an ordered additive commutative monoid to have the archimedean
25- property.
26- * `MulArchimedean` is a typeclass for an ordered commutative monoid to have the "mul-archimedean
27- property" where for `x` and `y > 1`, there exists a natural number `n` such that `x ≤ y ^ n`.
28- * `Archimedean.floorRing` defines a floor function on an archimedean linearly ordered ring making
29- it into a `floorRing`.
27+ * `Archimedean.floorRing` defines a floor function on an archimedean linearly ordered ring making it
28+ into a `floorRing`.
3029
3130 ## Main statements
3231
@@ -41,25 +40,6 @@ open Int Set
4140
4241variable {G M R K : Type *}
4342
44- /-- An ordered additive commutative monoid is called `Archimedean` if for any two elements `x`, `y`
45- such that `0 < y`, there exists a natural number `n` such that `x ≤ n • y`. -/
46- class Archimedean (M) [AddCommMonoid M] [PartialOrder M] : Prop where
47- /-- For any two elements `x`, `y` such that `0 < y`, there exists a natural number `n`
48- such that `x ≤ n • y`. -/
49- arch : ∀ (x : M) {y : M}, 0 < y → ∃ n : ℕ, x ≤ n • y
50-
51- section MulArchimedean
52-
53- /-- An ordered commutative monoid is called `MulArchimedean` if for any two elements `x`, `y`
54- such that `1 < y`, there exists a natural number `n` such that `x ≤ y ^ n`. -/
55- @ [to_additive Archimedean]
56- class MulArchimedean (M) [CommMonoid M] [PartialOrder M] : Prop where
57- /-- For any two elements `x`, `y` such that `1 < y`, there exists a natural number `n`
58- such that `x ≤ y ^ n`. -/
59- arch : ∀ (x : M) {y : M}, 1 < y → ∃ n : ℕ, x ≤ y ^ n
60-
61- end MulArchimedean
62-
6343@[to_additive]
6444lemma MulArchimedean.comap [CommMonoid G] [LinearOrder G] [CommMonoid M] [PartialOrder M]
6545 [MulArchimedean M] (f : G →* M) (hf : StrictMono f) :
@@ -85,13 +65,7 @@ instance Multiplicative.instMulArchimedean [AddCommGroup G] [PartialOrder G] [Ar
8565 MulArchimedean (Multiplicative G) :=
8666 ⟨fun x _ hy ↦ Archimedean.arch x.toAdd hy⟩
8767
88- @[to_additive]
89- theorem exists_lt_pow [CommMonoid M] [PartialOrder M] [MulArchimedean M] [MulLeftStrictMono M]
90- {a : M} (ha : 1 < a) (b : M) : ∃ n : ℕ, b < a ^ n :=
91- let ⟨k, hk⟩ := MulArchimedean.arch b ha
92- ⟨k + 1 , hk.trans_lt <| pow_lt_pow_right' ha k.lt_succ_self⟩
93-
94- section LinearOrderedCommGroup
68+ section IsOrderedMonoid
9569
9670variable [CommGroup G] [LinearOrder G] [IsOrderedMonoid G] [MulArchimedean G]
9771
@@ -152,21 +126,12 @@ theorem existsUnique_sub_zpow_mem_Ioc {a : G} (ha : 1 < a) (b c : G) :
152126 simpa only [Equiv.neg_apply, zpow_neg, div_inv_eq_mul] using
153127 existsUnique_add_zpow_mem_Ioc ha b c
154128
155- @[to_additive]
156- theorem exists_pow_lt {a : G} (ha : a < 1 ) (b : G) : ∃ n : ℕ, a ^ n < b :=
157- (exists_lt_pow (one_lt_inv'.mpr ha) b⁻¹).imp <| by simp
158-
159- end LinearOrderedCommGroup
129+ end IsOrderedMonoid
160130
161131section OrderedSemiring
162132
163133variable [Semiring R] [PartialOrder R] [IsOrderedRing R] [Archimedean R]
164134
165- theorem exists_nat_ge (x : R) :
166- ∃ n : ℕ, x ≤ n := by
167- nontriviality R
168- exact (Archimedean.arch x one_pos).imp fun n h => by rwa [← nsmul_one]
169-
170135instance (priority := 100 ) : IsDirectedOrder R :=
171136 ⟨fun x y ↦
172137 let ⟨m, hm⟩ := exists_nat_ge x; let ⟨n, hn⟩ := exists_nat_ge y
@@ -178,9 +143,6 @@ end OrderedSemiring
178143section StrictOrderedSemiring
179144variable [Semiring R] [PartialOrder R] [IsStrictOrderedRing R] [Archimedean R] {y : R}
180145
181- lemma exists_nat_gt (x : R) : ∃ n : ℕ, x < n :=
182- (exists_lt_nsmul zero_lt_one x).imp fun n hn ↦ by rwa [← nsmul_one]
183-
184146theorem add_one_pow_unbounded_of_pos (x : R) (hy : 0 < y) : ∃ n : ℕ, x < (y + 1 ) ^ n :=
185147 have : 0 ≤ 1 + y := add_nonneg zero_le_one hy.le
186148 (Archimedean.arch x hy).imp fun n h ↦
@@ -204,11 +166,6 @@ section OrderedRing
204166
205167variable [Ring R] [PartialOrder R] [IsOrderedRing R] [Archimedean R]
206168
207- theorem exists_int_ge (x : R) : ∃ n : ℤ, x ≤ n := let ⟨n, h⟩ := exists_nat_ge x; ⟨n, mod_cast h⟩
208-
209- theorem exists_int_le (x : R) : ∃ n : ℤ, n ≤ x :=
210- let ⟨n, h⟩ := exists_int_ge (-x); ⟨-n, by simpa [neg_le] using h⟩
211-
212169instance (priority := 100 ) : IsCodirectedOrder R where
213170 directed a b :=
214171 let ⟨m, hm⟩ := exists_int_le a; let ⟨n, hn⟩ := exists_int_le b
@@ -220,14 +177,6 @@ end OrderedRing
220177section StrictOrderedRing
221178variable [Ring R] [PartialOrder R] [IsStrictOrderedRing R] [Archimedean R]
222179
223- theorem exists_int_gt (x : R) : ∃ n : ℤ, x < n :=
224- let ⟨n, h⟩ := exists_nat_gt x
225- ⟨n, by rwa [Int.cast_natCast]⟩
226-
227- theorem exists_int_lt (x : R) : ∃ n : ℤ, (n : R) < x :=
228- let ⟨n, h⟩ := exists_int_gt (-x)
229- ⟨-n, by rw [Int.cast_neg]; exact neg_lt.1 h⟩
230-
231180/-- See `exists_floor'` for a more general version which only assumes the element is bounded by
232181two integers. -/
233182theorem exists_floor (x : R) : ∃ fl : ℤ, ∀ z : ℤ, z ≤ fl ↔ (z : R) ≤ x := by
0 commit comments