Skip to content

Commit 0f69f39

Browse files
committed
feat(Algebra): more lemmas about units in ordered monoid (leanprover-community#28317)
1 parent 89ea483 commit 0f69f39

1 file changed

Lines changed: 89 additions & 17 deletions

File tree

Mathlib/Algebra/Order/Monoid/Unbundled/Units.lean

Lines changed: 89 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,26 +13,98 @@ import Mathlib.Algebra.Order.Monoid.Unbundled.Basic
1313

1414
variable {M : Type*} [Monoid M] [LE M]
1515

16-
theorem Units.mulLECancellable_val [MulLeftMono M] (a : Mˣ) :
17-
MulLECancellable (↑a : M) := fun _ _ h ↦ by
18-
simpa using mul_le_mul_left' h ↑a⁻¹
16+
namespace Units
1917

20-
theorem Units.mul_le_mul_left [MulLeftMono M] (a : Mˣ) {b c : M} :
21-
a * b ≤ a * c ↔ b ≤ c :=
22-
a.mulLECancellable_val.mul_le_mul_iff_left
18+
section MulLeftMono
19+
variable [MulLeftMono M] (u : Mˣ) {a b : M}
2320

24-
theorem IsUnit.mulLECancellable [MulLeftMono M] {a : M} (ha : IsUnit a) :
25-
MulLECancellable a :=
21+
theorem mulLECancellable_val : MulLECancellable (↑u : M) := fun _ _ h ↦ by
22+
simpa using mul_le_mul_left' h ↑u⁻¹
23+
24+
private theorem mul_le_mul_iff_left : u * a ≤ u * b ↔ a ≤ b :=
25+
u.mulLECancellable_val.mul_le_mul_iff_left
26+
27+
theorem inv_mul_le_iff : u⁻¹ * a ≤ b ↔ a ≤ u * b := by
28+
rw [← u.mul_le_mul_iff_left, mul_inv_cancel_left]
29+
30+
theorem le_inv_mul_iff : a ≤ u⁻¹ * b ↔ u * a ≤ b := by
31+
rw [← u.mul_le_mul_iff_left, mul_inv_cancel_left]
32+
33+
@[simp] theorem one_le_inv : (1 : M) ≤ u⁻¹ ↔ (u : M) ≤ 1 := by
34+
rw [← u.mul_le_mul_iff_left, mul_one, mul_inv]
35+
36+
@[simp] theorem inv_le_one : u⁻¹ ≤ (1 : M) ↔ (1 : M) ≤ u := by
37+
rw [← u.mul_le_mul_iff_left, mul_one, mul_inv]
38+
39+
theorem one_le_inv_mul : 1 ≤ u⁻¹ * a ↔ u ≤ a := by
40+
rw [u.le_inv_mul_iff, mul_one]
41+
42+
theorem inv_mul_le_one : u⁻¹ * a ≤ 1 ↔ a ≤ u := by
43+
rw [u.inv_mul_le_iff, mul_one]
44+
45+
alias ⟨le_mul_of_inv_mul_le, inv_mul_le_of_le_mul⟩ := inv_mul_le_iff
46+
alias ⟨mul_le_of_le_inv_mul, le_inv_mul_of_mul_le⟩ := le_inv_mul_iff
47+
alias ⟨le_of_one_le_inv, one_le_inv_of_le⟩ := one_le_inv
48+
alias ⟨le_of_inv_le_one, inv_le_one_of_le⟩ := inv_le_one
49+
alias ⟨le_of_one_le_inv_mul, one_le_inv_mul_of_le⟩ := one_le_inv_mul
50+
alias ⟨le_of_inv_mul_le_one, inv_mul_le_one_of_le⟩ := inv_mul_le_one
51+
52+
end MulLeftMono
53+
54+
section MulRightMono
55+
variable [MulRightMono M] {a b : M} (u : Mˣ)
56+
57+
private theorem mul_le_mul_iff_right : a * u ≤ b * u ↔ a ≤ b :=
58+
⟨(by simpa using mul_le_mul_right' · ↑u⁻¹), (mul_le_mul_right' · _)⟩
59+
60+
theorem mul_inv_le_iff : a * u⁻¹ ≤ b ↔ a ≤ b * u := by
61+
rw [← u.mul_le_mul_iff_right, u.inv_mul_cancel_right]
62+
63+
theorem le_mul_inv_iff : a ≤ b * u⁻¹ ↔ a * u ≤ b := by
64+
rw [← u.mul_le_mul_iff_right, inv_mul_cancel_right]
65+
66+
theorem one_le_mul_inv : 1 ≤ a * u⁻¹ ↔ u ≤ a := by
67+
rw [u.le_mul_inv_iff, one_mul]
68+
69+
theorem mul_inv_le_one : a * u⁻¹ ≤ 1 ↔ a ≤ u := by
70+
rw [u.mul_inv_le_iff, one_mul]
71+
72+
alias ⟨le_mul_of_mul_inv_le, mul_inv_le_of_le_mul⟩ := mul_inv_le_iff
73+
alias ⟨mul_le_of_le_mul_inv, le_mul_inv_of_mul_le⟩ := le_mul_inv_iff
74+
alias ⟨le_of_one_le_mul_inv, one_le_mul_inv_of_le⟩ := one_le_mul_inv
75+
alias ⟨le_of_mul_inv_le_one, mul_inv_le_one_of_le⟩ := mul_inv_le_one
76+
77+
end MulRightMono
78+
79+
end Units
80+
81+
namespace IsUnit
82+
83+
section MulLeftMono
84+
variable [MulLeftMono M] {a b c : M} (ha : IsUnit a)
85+
86+
include ha
87+
88+
theorem mulLECancellable : MulLECancellable a :=
2689
ha.unit.mulLECancellable_val
2790

28-
theorem IsUnit.mul_le_mul_left [MulLeftMono M] {a b c : M} (ha : IsUnit a) :
29-
a * b ≤ a * c ↔ b ≤ c :=
30-
ha.unit.mul_le_mul_left
91+
theorem mul_le_mul_left : a * b ≤ a * c ↔ b ≤ c :=
92+
ha.unit.mul_le_mul_iff_left
93+
94+
alias ⟨le_of_mul_le_mul_left, _⟩ := mul_le_mul_left
95+
96+
end MulLeftMono
97+
98+
section MulRightMono
99+
variable [MulRightMono M] {a b c : M} (hc : IsUnit c)
100+
101+
include hc
102+
103+
theorem mul_le_mul_right : a * c ≤ b * c ↔ a ≤ b :=
104+
hc.unit.mul_le_mul_iff_right
105+
106+
alias ⟨le_of_mul_le_mul_right, _⟩ := mul_le_mul_right
31107

32-
theorem Units.mul_le_mul_right [MulRightMono M] (a : Mˣ) {b c : M} :
33-
b * a ≤ c * a ↔ b ≤ c :=
34-
⟨(by simpa using mul_le_mul_right' · ↑a⁻¹), (mul_le_mul_right' · _)⟩
108+
end MulRightMono
35109

36-
theorem IsUnit.mul_le_mul_right [MulRightMono M] {a b c : M} (ha : IsUnit a) :
37-
b * a ≤ c * a ↔ b ≤ c :=
38-
ha.unit.mul_le_mul_right
110+
end IsUnit

0 commit comments

Comments
 (0)