@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
4
4
Authors: Robert Lewis, Leonardo de Moura, Mario Carneiro, Floris van Doorn
5
5
-/
6
6
import Mathlib.Algebra.Field.Defs
7
+ import Mathlib.Algebra.GroupWithZero.Units.Basic
7
8
import Mathlib.Algebra.Order.Ring.Defs
8
9
9
10
#align_import algebra.order.field.defs from "leanprover-community/mathlib" @"655994e298904d7e5bbd1e18c95defd7b543eb94"
@@ -20,14 +21,10 @@ A linear ordered (semi)field is a (semi)field equipped with a linear order such
20
21
21
22
* `LinearOrderedSemifield`: Typeclass for linear order semifields.
22
23
* `LinearOrderedField`: Typeclass for linear ordered fields.
23
-
24
- ## Implementation details
25
-
26
- For olean caching reasons, this file is separate to the main file,
27
- `Mathlib.Algebra.Order.Field.Basic`. The lemmata are instead located there.
28
-
29
24
-/
30
25
26
+ -- Guard against import creep.
27
+ assert_not_exists MonoidHom
31
28
32
29
variable {α : Type *}
33
30
@@ -45,5 +42,62 @@ instance (priority := 100) LinearOrderedField.toLinearOrderedSemifield [LinearOr
45
42
{ LinearOrderedRing.toLinearOrderedSemiring, ‹LinearOrderedField α› with }
46
43
#align linear_ordered_field.to_linear_ordered_semifield LinearOrderedField.toLinearOrderedSemifield
47
44
48
- -- Guard against import creep.
49
- assert_not_exists MonoidHom
45
+ variable [LinearOrderedSemifield α] {a b : α}
46
+
47
+ @[simp] lemma inv_pos : 0 < a⁻¹ ↔ 0 < a :=
48
+ suffices ∀ a : α, 0 < a → 0 < a⁻¹ from ⟨fun h ↦ inv_inv a ▸ this _ h, this a⟩
49
+ fun a ha ↦ flip lt_of_mul_lt_mul_left ha.le <| by simp [ne_of_gt ha, zero_lt_one]
50
+ #align inv_pos inv_pos
51
+
52
+ alias ⟨_, inv_pos_of_pos⟩ := inv_pos
53
+ #align inv_pos_of_pos inv_pos_of_pos
54
+
55
+ @[simp] lemma inv_nonneg : 0 ≤ a⁻¹ ↔ 0 ≤ a := by simp only [le_iff_eq_or_lt, inv_pos, zero_eq_inv]
56
+ #align inv_nonneg inv_nonneg
57
+
58
+ alias ⟨_, inv_nonneg_of_nonneg⟩ := inv_nonneg
59
+ #align inv_nonneg_of_nonneg inv_nonneg_of_nonneg
60
+
61
+ @[simp] lemma inv_lt_zero : a⁻¹ < 0 ↔ a < 0 := by simp only [← not_le, inv_nonneg]
62
+ #align inv_lt_zero inv_lt_zero
63
+
64
+ @[simp] lemma inv_nonpos : a⁻¹ ≤ 0 ↔ a ≤ 0 := by simp only [← not_lt, inv_pos]
65
+ #align inv_nonpos inv_nonpos
66
+
67
+ lemma one_div_pos : 0 < 1 / a ↔ 0 < a := inv_eq_one_div a ▸ inv_pos
68
+ #align one_div_pos one_div_pos
69
+
70
+ lemma one_div_neg : 1 / a < 0 ↔ a < 0 := inv_eq_one_div a ▸ inv_lt_zero
71
+ #align one_div_neg one_div_neg
72
+
73
+ lemma one_div_nonneg : 0 ≤ 1 / a ↔ 0 ≤ a := inv_eq_one_div a ▸ inv_nonneg
74
+ #align one_div_nonneg one_div_nonneg
75
+
76
+ lemma one_div_nonpos : 1 / a ≤ 0 ↔ a ≤ 0 := inv_eq_one_div a ▸ inv_nonpos
77
+ #align one_div_nonpos one_div_nonpos
78
+
79
+ lemma div_pos (ha : 0 < a) (hb : 0 < b) : 0 < a / b := by
80
+ rw [div_eq_mul_inv]; exact mul_pos ha (inv_pos.2 hb)
81
+ #align div_pos div_pos
82
+
83
+ lemma div_nonneg (ha : 0 ≤ a) (hb : 0 ≤ b) : 0 ≤ a / b := by
84
+ rw [div_eq_mul_inv]; exact mul_nonneg ha (inv_nonneg.2 hb)
85
+ #align div_nonneg div_nonneg
86
+
87
+ lemma div_nonpos_of_nonpos_of_nonneg (ha : a ≤ 0 ) (hb : 0 ≤ b) : a / b ≤ 0 := by
88
+ rw [div_eq_mul_inv]; exact mul_nonpos_of_nonpos_of_nonneg ha (inv_nonneg.2 hb)
89
+ #align div_nonpos_of_nonpos_of_nonneg div_nonpos_of_nonpos_of_nonneg
90
+
91
+ lemma div_nonpos_of_nonneg_of_nonpos (ha : 0 ≤ a) (hb : b ≤ 0 ) : a / b ≤ 0 := by
92
+ rw [div_eq_mul_inv]; exact mul_nonpos_of_nonneg_of_nonpos ha (inv_nonpos.2 hb)
93
+ #align div_nonpos_of_nonneg_of_nonpos div_nonpos_of_nonneg_of_nonpos
94
+
95
+ lemma zpow_nonneg (ha : 0 ≤ a) : ∀ n : ℤ, 0 ≤ a ^ n
96
+ | (n : ℕ) => by rw [zpow_coe_nat]; exact pow_nonneg ha _
97
+ | -(n + 1 : ℕ) => by rw [zpow_neg, inv_nonneg, zpow_coe_nat]; exact pow_nonneg ha _
98
+ #align zpow_nonneg zpow_nonneg
99
+
100
+ lemma zpow_pos_of_pos (ha : 0 < a) : ∀ n : ℤ, 0 < a ^ n
101
+ | (n : ℕ) => by rw [zpow_coe_nat]; exact pow_pos ha _
102
+ | -(n + 1 : ℕ) => by rw [zpow_neg, inv_pos, zpow_coe_nat]; exact pow_pos ha _
103
+ #align zpow_pos_of_pos zpow_pos_of_pos
0 commit comments