Skip to content

Commit a91fc5c

Browse files
committed
feat(Algebra/Order/Field/Defs): generalize lemmas (#24377)
... from linear ordered semifields to (commutative) groups with zero.
1 parent cb4d0ad commit a91fc5c

File tree

2 files changed

+74
-69
lines changed

2 files changed

+74
-69
lines changed

Mathlib/Algebra/Order/Field/Defs.lean

Lines changed: 0 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@ A linear ordered (semi)field is a (semi)field equipped with a linear order such
2323
-- Guard against import creep.
2424
assert_not_exists MonoidHom
2525

26-
variable {K : Type*}
27-
2826
set_option linter.deprecated false in
2927
/-- A linear ordered semifield is a field with a linear order respecting the operations. -/
3028
@[deprecated "Use `[Semifield K] [LinearOrder K] [IsStrictOrderedRing K]` instead."
@@ -38,69 +36,3 @@ set_option linter.deprecated false in
3836
structure LinearOrderedField (K : Type*) extends LinearOrderedCommRing K, Field K
3937

4038
attribute [nolint docBlame] LinearOrderedSemifield.toSemifield LinearOrderedField.toField
41-
42-
variable [Semifield K] [LinearOrder K] {a b c : K}
43-
44-
/-- Equality holds when `a ≠ 0`. See `mul_inv_cancel`. -/
45-
lemma mul_inv_le_one [ZeroLEOneClass K] : a * a⁻¹ ≤ 1 := by
46-
obtain rfl | ha := eq_or_ne a 0 <;> simp [*]
47-
48-
/-- Equality holds when `a ≠ 0`. See `inv_mul_cancel`. -/
49-
lemma inv_mul_le_one [ZeroLEOneClass K] : a⁻¹ * a ≤ 1 := by
50-
obtain rfl | ha := eq_or_ne a 0 <;> simp [*]
51-
52-
/-- Equality holds when `a ≠ 0`. See `mul_inv_cancel_left`. -/
53-
lemma mul_inv_left_le (hb : 0 ≤ b) : a * (a⁻¹ * b) ≤ b := by
54-
obtain rfl | ha := eq_or_ne a 0 <;> simp [*]
55-
56-
/-- Equality holds when `a ≠ 0`. See `mul_inv_cancel_left`. -/
57-
lemma le_mul_inv_left (hb : b ≤ 0) : b ≤ a * (a⁻¹ * b) := by
58-
obtain rfl | ha := eq_or_ne a 0 <;> simp [*]
59-
60-
/-- Equality holds when `a ≠ 0`. See `inv_mul_cancel_left`. -/
61-
lemma inv_mul_left_le (hb : 0 ≤ b) : a⁻¹ * (a * b) ≤ b := by
62-
obtain rfl | ha := eq_or_ne a 0 <;> simp [*]
63-
64-
/-- Equality holds when `a ≠ 0`. See `inv_mul_cancel_left`. -/
65-
lemma le_inv_mul_left (hb : b ≤ 0) : b ≤ a⁻¹ * (a * b) := by
66-
obtain rfl | ha := eq_or_ne a 0 <;> simp [*]
67-
68-
/-- Equality holds when `b ≠ 0`. See `mul_inv_cancel_right`. -/
69-
lemma mul_inv_right_le (ha : 0 ≤ a) : a * b * b⁻¹ ≤ a := by
70-
obtain rfl | hb := eq_or_ne b 0 <;> simp [*]
71-
72-
/-- Equality holds when `b ≠ 0`. See `mul_inv_cancel_right`. -/
73-
lemma le_mul_inv_right (ha : a ≤ 0) : a ≤ a * b * b⁻¹ := by
74-
obtain rfl | hb := eq_or_ne b 0 <;> simp [*]
75-
76-
/-- Equality holds when `b ≠ 0`. See `inv_mul_cancel_right`. -/
77-
lemma inv_mul_right_le (ha : 0 ≤ a) : a * b⁻¹ * b ≤ a := by
78-
obtain rfl | hb := eq_or_ne b 0 <;> simp [*]
79-
80-
/-- Equality holds when `b ≠ 0`. See `inv_mul_cancel_right`. -/
81-
lemma le_inv_mul_right (ha : a ≤ 0) : a ≤ a * b⁻¹ * b := by
82-
obtain rfl | hb := eq_or_ne b 0 <;> simp [*]
83-
84-
/-- Equality holds when `c ≠ 0`. See `mul_div_mul_left`. -/
85-
lemma mul_div_mul_left_le (h : 0 ≤ a / b) : c * a / (c * b) ≤ a / b := by
86-
obtain rfl | hc := eq_or_ne c 0
87-
· simpa
88-
· rw [mul_div_mul_left _ _ hc]
89-
90-
/-- Equality holds when `c ≠ 0`. See `mul_div_mul_left`. -/
91-
lemma le_mul_div_mul_left (h : a / b ≤ 0) : a / b ≤ c * a / (c * b) := by
92-
obtain rfl | hc := eq_or_ne c 0
93-
· simpa
94-
· rw [mul_div_mul_left _ _ hc]
95-
96-
/-- Equality holds when `c ≠ 0`. See `mul_div_mul_right`. -/
97-
lemma mul_div_mul_right_le (h : 0 ≤ a / b) : a * c / (b * c) ≤ a / b := by
98-
obtain rfl | hc := eq_or_ne c 0
99-
· simpa
100-
· rw [mul_div_mul_right _ _ hc]
101-
102-
/-- Equality holds when `c ≠ 0`. See `mul_div_mul_right`. -/
103-
lemma le_mul_div_mul_right (h : a / b ≤ 0) : a / b ≤ a * c / (b * c) := by
104-
obtain rfl | hc := eq_or_ne c 0
105-
· simpa
106-
· rw [mul_div_mul_right _ _ hc]

Mathlib/Algebra/Order/GroupWithZero/Unbundled/Basic.lean

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -716,11 +716,66 @@ section GroupWithZero
716716
variable [GroupWithZero G₀]
717717

718718
section Preorder
719-
variable [Preorder G₀] [ZeroLEOneClass G₀]
719+
variable [Preorder G₀] {a b c : G₀}
720+
721+
/-- Equality holds when `a ≠ 0`. See `mul_inv_cancel_left`. -/
722+
lemma mul_inv_left_le (hb : 0 ≤ b) : a * (a⁻¹ * b) ≤ b := by
723+
obtain rfl | ha := eq_or_ne a 0 <;> simp [*]
724+
725+
/-- Equality holds when `a ≠ 0`. See `mul_inv_cancel_left`. -/
726+
lemma le_mul_inv_left (hb : b ≤ 0) : b ≤ a * (a⁻¹ * b) := by
727+
obtain rfl | ha := eq_or_ne a 0 <;> simp [*]
728+
729+
/-- Equality holds when `a ≠ 0`. See `inv_mul_cancel_left`. -/
730+
lemma inv_mul_left_le (hb : 0 ≤ b) : a⁻¹ * (a * b) ≤ b := by
731+
obtain rfl | ha := eq_or_ne a 0 <;> simp [*]
732+
733+
/-- Equality holds when `a ≠ 0`. See `inv_mul_cancel_left`. -/
734+
lemma le_inv_mul_left (hb : b ≤ 0) : b ≤ a⁻¹ * (a * b) := by
735+
obtain rfl | ha := eq_or_ne a 0 <;> simp [*]
736+
737+
/-- Equality holds when `b ≠ 0`. See `mul_inv_cancel_right`. -/
738+
lemma mul_inv_right_le (ha : 0 ≤ a) : a * b * b⁻¹ ≤ a := by
739+
obtain rfl | hb := eq_or_ne b 0 <;> simp [*]
740+
741+
/-- Equality holds when `b ≠ 0`. See `mul_inv_cancel_right`. -/
742+
lemma le_mul_inv_right (ha : a ≤ 0) : a ≤ a * b * b⁻¹ := by
743+
obtain rfl | hb := eq_or_ne b 0 <;> simp [*]
744+
745+
/-- Equality holds when `b ≠ 0`. See `inv_mul_cancel_right`. -/
746+
lemma inv_mul_right_le (ha : 0 ≤ a) : a * b⁻¹ * b ≤ a := by
747+
obtain rfl | hb := eq_or_ne b 0 <;> simp [*]
748+
749+
/-- Equality holds when `b ≠ 0`. See `inv_mul_cancel_right`. -/
750+
lemma le_inv_mul_right (ha : a ≤ 0) : a ≤ a * b⁻¹ * b := by
751+
obtain rfl | hb := eq_or_ne b 0 <;> simp [*]
752+
753+
/-- Equality holds when `c ≠ 0`. See `mul_div_mul_right`. -/
754+
lemma mul_div_mul_right_le (h : 0 ≤ a / b) : a * c / (b * c) ≤ a / b := by
755+
obtain rfl | hc := eq_or_ne c 0
756+
· simpa
757+
· rw [mul_div_mul_right _ _ hc]
758+
759+
/-- Equality holds when `c ≠ 0`. See `mul_div_mul_right`. -/
760+
lemma le_mul_div_mul_right (h : a / b ≤ 0) : a / b ≤ a * c / (b * c) := by
761+
obtain rfl | hc := eq_or_ne c 0
762+
· simpa
763+
· rw [mul_div_mul_right _ _ hc]
764+
765+
end Preorder
766+
767+
section Preorder
768+
variable [Preorder G₀] [ZeroLEOneClass G₀] {a b c : G₀}
720769

721770
/-- See `div_self` for the version with equality when `a ≠ 0`. -/
722771
lemma div_self_le_one (a : G₀) : a / a ≤ 1 := by obtain rfl | ha := eq_or_ne a 0 <;> simp [*]
723772

773+
/-- Equality holds when `a ≠ 0`. See `mul_inv_cancel`. -/
774+
lemma mul_inv_le_one : a * a⁻¹ ≤ 1 := by simpa only [div_eq_mul_inv] using div_self_le_one a
775+
776+
/-- Equality holds when `a ≠ 0`. See `inv_mul_cancel`. -/
777+
lemma inv_mul_le_one : a⁻¹ * a ≤ 1 := by obtain rfl | ha := eq_or_ne a 0 <;> simp [*]
778+
724779
end Preorder
725780

726781
section PartialOrder
@@ -1236,6 +1291,24 @@ variable [MulPosStrictMono G₀]
12361291
end GroupWithZero.LinearOrder
12371292

12381293
section CommGroupWithZero
1294+
1295+
section Preorder
1296+
variable [CommGroupWithZero G₀] [Preorder G₀] {a b c : G₀}
1297+
1298+
/-- Equality holds when `c ≠ 0`. See `mul_div_mul_left`. -/
1299+
lemma mul_div_mul_left_le (h : 0 ≤ a / b) : c * a / (c * b) ≤ a / b := by
1300+
obtain rfl | hc := eq_or_ne c 0
1301+
· simpa
1302+
· rw [mul_div_mul_left _ _ hc]
1303+
1304+
/-- Equality holds when `c ≠ 0`. See `mul_div_mul_left`. -/
1305+
lemma le_mul_div_mul_left (h : a / b ≤ 0) : a / b ≤ c * a / (c * b) := by
1306+
obtain rfl | hc := eq_or_ne c 0
1307+
· simpa
1308+
· rw [mul_div_mul_left _ _ hc]
1309+
1310+
end Preorder
1311+
12391312
variable [CommGroupWithZero G₀] [PartialOrder G₀] [PosMulReflectLT G₀] {a b c d : G₀}
12401313

12411314
attribute [local instance] PosMulReflectLT.toPosMulStrictMono PosMulMono.toMulPosMono

0 commit comments

Comments
 (0)