Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 9ff7458

Browse files
feat(algebra/group_power/basic): add abs_add_eq_add_abs_iff (#6593)
I've added ``` lemma abs_add_eq_add_abs_iff {α : Type*} [linear_ordered_add_comm_group α] (a b : α) : abs (a + b) = abs a + abs b ↔ (0 ≤ a ∧ 0 ≤ b ∨ a ≤ 0 ∧ b ≤ 0) ``` from `lean-liquid`. For some reasons I am not able to use `wlog hle : a ≤ b using [a b, b a]` at the beginning of the proof, Lean says `unknown identifier 'wlog'` and if I try to import `tactic.wlog` I have tons of errors.
1 parent 8e246cb commit 9ff7458

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

src/algebra/group_power/lemmas.lean

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,57 @@ calc n •ℤ a = n •ℤ a + 0 : (add_zero _).symm
182182
... < n •ℤ a + (m - n) •ℤ a : add_lt_add_left (gsmul_pos ha (sub_pos.mpr h)) _
183183
... = m •ℤ a : by { rw [← add_gsmul], simp }
184184

185+
lemma abs_nsmul {α : Type*} [linear_ordered_add_comm_group α] (n : ℕ) (a : α) :
186+
abs (n •ℕ a) = n •ℕ abs a :=
187+
begin
188+
cases le_total a 0 with hneg hpos,
189+
{ rw [abs_of_nonpos hneg, ← abs_neg, ← neg_nsmul, abs_of_nonneg],
190+
exact nsmul_nonneg (neg_nonneg.mpr hneg) n },
191+
{ rw [abs_of_nonneg hpos, abs_of_nonneg],
192+
exact nsmul_nonneg hpos n }
193+
end
194+
195+
lemma abs_gsmul {α : Type*} [linear_ordered_add_comm_group α] (n : ℤ) (a : α) :
196+
abs (n •ℤ a) = (abs n) •ℤ abs a :=
197+
begin
198+
by_cases n0 : 0 ≤ n,
199+
{ lift n to ℕ using n0,
200+
simp only [abs_nsmul, coe_nat_abs, gsmul_coe_nat] },
201+
{ lift (- n) to ℕ using int.le_of_lt (neg_pos.mpr (not_le.mp n0)) with m h,
202+
rw [← abs_neg (n •ℤ a), ← neg_gsmul, ← abs_neg n, ← h],
203+
convert abs_nsmul m _,
204+
simp only [coe_nat_abs, gsmul_coe_nat] },
205+
end
206+
207+
lemma abs_add_eq_add_abs_le {α : Type*} [linear_ordered_add_comm_group α] {a b : α} (hle : a ≤ b) :
208+
abs (a + b) = abs a + abs b ↔ (0 ≤ a ∧ 0 ≤ b ∨ a ≤ 0 ∧ b ≤ 0) :=
209+
begin
210+
by_cases a0 : 0 ≤ a; by_cases b0 : 0 ≤ b,
211+
{ simp [a0, b0, abs_of_nonneg, add_nonneg a0 b0] },
212+
{ exact (lt_irrefl (0 : α) (a0.trans_lt (hle.trans_lt (not_le.mp b0)))).elim },
213+
any_goals { simp [(not_le.mp a0).le, (not_le.mp b0).le, abs_of_nonpos, add_nonpos, add_comm] },
214+
obtain F := (not_le.mp a0),
215+
have : (abs (a + b) = -a + b ↔ b ≤ 0) ↔ (abs (a + b) =
216+
abs a + abs b ↔ 0 ≤ a ∧ 0 ≤ b ∨ a ≤ 0 ∧ b ≤ 0),
217+
{ simp [a0, b0, abs_of_neg, abs_of_nonneg, F, F.le] },
218+
refine this.mp ⟨λ h, _, λ h, by simp only [le_antisymm h b0, abs_of_neg F, add_zero]⟩,
219+
by_cases ba : a + b ≤ 0,
220+
{ refine le_of_eq (eq_zero_of_neg_eq _),
221+
rwa [abs_of_nonpos ba, neg_add_rev, add_comm, add_right_inj] at h },
222+
{ refine (lt_irrefl (0 : α) _).elim,
223+
rw [abs_of_pos (not_le.mp ba), add_left_inj] at h,
224+
rwa eq_zero_of_neg_eq h.symm at F }
225+
end
226+
227+
lemma abs_add_eq_add_abs_iff {α : Type*} [linear_ordered_add_comm_group α] (a b : α) :
228+
abs (a + b) = abs a + abs b ↔ (0 ≤ a ∧ 0 ≤ b ∨ a ≤ 0 ∧ b ≤ 0) :=
229+
begin
230+
by_cases ab : a ≤ b,
231+
{ exact abs_add_eq_add_abs_le ab },
232+
{ rw [add_comm a, add_comm (abs _), abs_add_eq_add_abs_le ((not_le.mp ab).le), and.comm,
233+
@and.comm (b ≤ 0 ) _] }
234+
end
235+
185236
end ordered_add_comm_group
186237

187238
section linear_ordered_add_comm_group

0 commit comments

Comments
 (0)