Module docstring
{"# Lemmas about subtraction in an unbundled canonically ordered monoids
","#### Lemmas that assume that an element is AddLECancellable. ","### Lemmas where addition is order-reflecting. "}
{"# Lemmas about subtraction in an unbundled canonically ordered monoids
","#### Lemmas that assume that an element is AddLECancellable. ","### Lemmas where addition is order-reflecting. "}
add_tsub_cancel_of_le
theorem
(h : a ≤ b) : a + (b - a) = b
@[simp]
theorem add_tsub_cancel_of_le (h : a ≤ b) : a + (b - a) = b := by
refine le_antisymm ?_ le_add_tsub
obtain ⟨c, rfl⟩ := exists_add_of_le h
exact add_le_add_left add_tsub_le_left a
tsub_add_cancel_of_le
theorem
(h : a ≤ b) : b - a + a = b
theorem tsub_add_cancel_of_le (h : a ≤ b) : b - a + a = b := by
rw [add_comm]
exact add_tsub_cancel_of_le h
add_le_of_le_tsub_right_of_le
theorem
(h : b ≤ c) (h2 : a ≤ c - b) : a + b ≤ c
theorem add_le_of_le_tsub_right_of_le (h : b ≤ c) (h2 : a ≤ c - b) : a + b ≤ c :=
(add_le_add_right h2 b).trans_eq <| tsub_add_cancel_of_le h
add_le_of_le_tsub_left_of_le
theorem
(h : a ≤ c) (h2 : b ≤ c - a) : a + b ≤ c
theorem add_le_of_le_tsub_left_of_le (h : a ≤ c) (h2 : b ≤ c - a) : a + b ≤ c :=
(add_le_add_left h2 a).trans_eq <| add_tsub_cancel_of_le h
tsub_le_tsub_iff_right
theorem
(h : c ≤ b) : a - c ≤ b - c ↔ a ≤ b
theorem tsub_le_tsub_iff_right (h : c ≤ b) : a - c ≤ b - c ↔ a ≤ b := by
rw [tsub_le_iff_right, tsub_add_cancel_of_le h]
tsub_left_inj
theorem
(h1 : c ≤ a) (h2 : c ≤ b) : a - c = b - c ↔ a = b
theorem tsub_left_inj (h1 : c ≤ a) (h2 : c ≤ b) : a - c = b - c ↔ a = b := by
simp_rw [le_antisymm_iff, tsub_le_tsub_iff_right h1, tsub_le_tsub_iff_right h2]
tsub_inj_left
theorem
(h₁ : a ≤ b) (h₂ : a ≤ c) : b - a = c - a → b = c
theorem tsub_inj_left (h₁ : a ≤ b) (h₂ : a ≤ c) : b - a = c - a → b = c :=
(tsub_left_inj h₁ h₂).1
lt_of_tsub_lt_tsub_right_of_le
theorem
(h : c ≤ b) (h2 : a - c < b - c) : a < b
/-- See `lt_of_tsub_lt_tsub_right` for a stronger statement in a linear order. -/
theorem lt_of_tsub_lt_tsub_right_of_le (h : c ≤ b) (h2 : a - c < b - c) : a < b := by
refine ((tsub_le_tsub_iff_right h).mp h2.le).lt_of_ne ?_
rintro rfl
exact h2.false
tsub_add_tsub_cancel
theorem
(hab : b ≤ a) (hcb : c ≤ b) : a - b + (b - c) = a - c
theorem tsub_add_tsub_cancel (hab : b ≤ a) (hcb : c ≤ b) : a - b + (b - c) = a - c := by
convert tsub_add_cancel_of_le (tsub_le_tsub_right hab c) using 2
rw [tsub_tsub, add_tsub_cancel_of_le hcb]
tsub_tsub_tsub_cancel_right
theorem
(h : c ≤ b) : a - c - (b - c) = a - b
theorem tsub_tsub_tsub_cancel_right (h : c ≤ b) : a - c - (b - c) = a - b := by
rw [tsub_tsub, add_tsub_cancel_of_le h]
AddLECancellable.tsub_eq_iff_eq_add_of_le
theorem
(hb : AddLECancellable b) (h : b ≤ a) : a - b = c ↔ a = c + b
protected theorem tsub_eq_iff_eq_add_of_le (hb : AddLECancellable b) (h : b ≤ a) :
a - b = c ↔ a = c + b := by rw [eq_comm, hb.eq_tsub_iff_add_eq_of_le h, eq_comm]
AddLECancellable.add_tsub_assoc_of_le
theorem
(hc : AddLECancellable c) (h : c ≤ b) (a : α) : a + b - c = a + (b - c)
protected theorem add_tsub_assoc_of_le (hc : AddLECancellable c) (h : c ≤ b) (a : α) :
a + b - c = a + (b - c) := by
conv_lhs => rw [← add_tsub_cancel_of_le h, add_comm c, ← add_assoc, hc.add_tsub_cancel_right]
AddLECancellable.tsub_add_eq_add_tsub
theorem
(hb : AddLECancellable b) (h : b ≤ a) : a - b + c = a + c - b
protected theorem tsub_add_eq_add_tsub (hb : AddLECancellable b) (h : b ≤ a) :
a - b + c = a + c - b := by rw [add_comm a, hb.add_tsub_assoc_of_le h, add_comm]
AddLECancellable.tsub_tsub_assoc
theorem
(hbc : AddLECancellable (b - c)) (h₁ : b ≤ a) (h₂ : c ≤ b) : a - (b - c) = a - b + c
protected theorem tsub_tsub_assoc (hbc : AddLECancellable (b - c)) (h₁ : b ≤ a) (h₂ : c ≤ b) :
a - (b - c) = a - b + c :=
hbc.tsub_eq_of_eq_add <| by rw [add_assoc, add_tsub_cancel_of_le h₂, tsub_add_cancel_of_le h₁]
AddLECancellable.tsub_add_tsub_comm
theorem
(hb : AddLECancellable b) (hd : AddLECancellable d) (hba : b ≤ a) (hdc : d ≤ c) : a - b + (c - d) = a + c - (b + d)
protected theorem tsub_add_tsub_comm (hb : AddLECancellable b) (hd : AddLECancellable d)
(hba : b ≤ a) (hdc : d ≤ c) : a - b + (c - d) = a + c - (b + d) := by
rw [hb.tsub_add_eq_add_tsub hba, ← hd.add_tsub_assoc_of_le hdc, tsub_tsub, add_comm d]
AddLECancellable.le_tsub_iff_left
theorem
(ha : AddLECancellable a) (h : a ≤ c) : b ≤ c - a ↔ a + b ≤ c
protected theorem le_tsub_iff_left (ha : AddLECancellable a) (h : a ≤ c) : b ≤ c - a ↔ a + b ≤ c :=
⟨add_le_of_le_tsub_left_of_le h, ha.le_tsub_of_add_le_left⟩
AddLECancellable.le_tsub_iff_right
theorem
(ha : AddLECancellable a) (h : a ≤ c) : b ≤ c - a ↔ b + a ≤ c
protected theorem le_tsub_iff_right (ha : AddLECancellable a) (h : a ≤ c) :
b ≤ c - a ↔ b + a ≤ c := by
rw [add_comm]
exact ha.le_tsub_iff_left h
AddLECancellable.tsub_lt_iff_left
theorem
(hb : AddLECancellable b) (hba : b ≤ a) : a - b < c ↔ a < b + c
protected theorem tsub_lt_iff_left (hb : AddLECancellable b) (hba : b ≤ a) :
a - b < c ↔ a < b + c := by
refine ⟨hb.lt_add_of_tsub_lt_left, ?_⟩
intro h; refine (tsub_le_iff_left.mpr h.le).lt_of_ne ?_
rintro rfl; exact h.ne' (add_tsub_cancel_of_le hba)
AddLECancellable.tsub_lt_iff_right
theorem
(hb : AddLECancellable b) (hba : b ≤ a) : a - b < c ↔ a < c + b
protected theorem tsub_lt_iff_right (hb : AddLECancellable b) (hba : b ≤ a) :
a - b < c ↔ a < c + b := by
rw [add_comm]
exact hb.tsub_lt_iff_left hba
AddLECancellable.tsub_lt_iff_tsub_lt
theorem
(hb : AddLECancellable b) (hc : AddLECancellable c) (h₁ : b ≤ a) (h₂ : c ≤ a) : a - b < c ↔ a - c < b
protected theorem tsub_lt_iff_tsub_lt (hb : AddLECancellable b) (hc : AddLECancellable c)
(h₁ : b ≤ a) (h₂ : c ≤ a) : a - b < c ↔ a - c < b := by
rw [hb.tsub_lt_iff_left h₁, hc.tsub_lt_iff_right h₂]
AddLECancellable.le_tsub_iff_le_tsub
theorem
(ha : AddLECancellable a) (hc : AddLECancellable c) (h₁ : a ≤ b) (h₂ : c ≤ b) : a ≤ b - c ↔ c ≤ b - a
protected theorem le_tsub_iff_le_tsub (ha : AddLECancellable a) (hc : AddLECancellable c)
(h₁ : a ≤ b) (h₂ : c ≤ b) : a ≤ b - c ↔ c ≤ b - a := by
rw [ha.le_tsub_iff_left h₁, hc.le_tsub_iff_right h₂]
AddLECancellable.lt_tsub_iff_right_of_le
theorem
(hc : AddLECancellable c) (h : c ≤ b) : a < b - c ↔ a + c < b
protected theorem lt_tsub_iff_right_of_le (hc : AddLECancellable c) (h : c ≤ b) :
a < b - c ↔ a + c < b := by
refine ⟨fun h' => (add_le_of_le_tsub_right_of_le h h'.le).lt_of_ne ?_, hc.lt_tsub_of_add_lt_right⟩
rintro rfl
exact h'.ne' hc.add_tsub_cancel_right
AddLECancellable.lt_tsub_iff_left_of_le
theorem
(hc : AddLECancellable c) (h : c ≤ b) : a < b - c ↔ c + a < b
protected theorem lt_tsub_iff_left_of_le (hc : AddLECancellable c) (h : c ≤ b) :
a < b - c ↔ c + a < b := by
rw [add_comm]
exact hc.lt_tsub_iff_right_of_le h
AddLECancellable.tsub_inj_right
theorem
(hab : AddLECancellable (a - b)) (h₁ : b ≤ a) (h₂ : c ≤ a) (h₃ : a - b = a - c) : b = c
protected theorem tsub_inj_right (hab : AddLECancellable (a - b)) (h₁ : b ≤ a) (h₂ : c ≤ a)
(h₃ : a - b = a - c) : b = c := by
rw [← hab.inj]
rw [tsub_add_cancel_of_le h₁, h₃, tsub_add_cancel_of_le h₂]
AddLECancellable.lt_of_tsub_lt_tsub_left_of_le
theorem
[AddLeftReflectLT α] (hb : AddLECancellable b) (hca : c ≤ a) (h : a - b < a - c) : c < b
protected theorem lt_of_tsub_lt_tsub_left_of_le [AddLeftReflectLT α]
(hb : AddLECancellable b) (hca : c ≤ a) (h : a - b < a - c) : c < b := by
conv_lhs at h => rw [← tsub_add_cancel_of_le hca]
exact lt_of_add_lt_add_left (hb.lt_add_of_tsub_lt_right h)
AddLECancellable.tsub_lt_tsub_left_of_le
theorem
(hab : AddLECancellable (a - b)) (h₁ : b ≤ a) (h : c < b) : a - b < a - c
protected theorem tsub_lt_tsub_left_of_le (hab : AddLECancellable (a - b)) (h₁ : b ≤ a)
(h : c < b) : a - b < a - c :=
(tsub_le_tsub_left h.le _).lt_of_ne fun h' => h.ne' <| hab.tsub_inj_right h₁ (h.le.trans h₁) h'
AddLECancellable.tsub_lt_tsub_right_of_le
theorem
(hc : AddLECancellable c) (h : c ≤ a) (h2 : a < b) : a - c < b - c
protected theorem tsub_lt_tsub_right_of_le (hc : AddLECancellable c) (h : c ≤ a) (h2 : a < b) :
a - c < b - c := by
apply hc.lt_tsub_of_add_lt_left
rwa [add_tsub_cancel_of_le h]
AddLECancellable.tsub_lt_tsub_iff_left_of_le_of_le
theorem
[AddLeftReflectLT α] (hb : AddLECancellable b) (hab : AddLECancellable (a - b)) (h₁ : b ≤ a) (h₂ : c ≤ a) :
a - b < a - c ↔ c < b
protected theorem tsub_lt_tsub_iff_left_of_le_of_le [AddLeftReflectLT α]
(hb : AddLECancellable b) (hab : AddLECancellable (a - b)) (h₁ : b ≤ a) (h₂ : c ≤ a) :
a - b < a - c ↔ c < b :=
⟨hb.lt_of_tsub_lt_tsub_left_of_le h₂, hab.tsub_lt_tsub_left_of_le h₁⟩
AddLECancellable.add_add_tsub_cancel
theorem
(hc : AddLECancellable c) (hcb : c ≤ b) : a + c + (b - c) = a + b
@[simp]
protected lemma add_add_tsub_cancel (hc : AddLECancellable c) (hcb : c ≤ b) :
a + c + (b - c) = a + b := by
rw [← hc.add_tsub_assoc_of_le hcb, add_right_comm, hc.add_tsub_cancel_right]
AddLECancellable.add_tsub_tsub_cancel
theorem
(hac : AddLECancellable (a - c)) (h : c ≤ a) : a + b - (a - c) = b + c
@[simp]
protected theorem add_tsub_tsub_cancel (hac : AddLECancellable (a - c)) (h : c ≤ a) :
a + b - (a - c) = b + c :=
hac.tsub_eq_of_eq_add <| by rw [add_assoc, add_tsub_cancel_of_le h, add_comm]
AddLECancellable.tsub_tsub_cancel_of_le
theorem
(hba : AddLECancellable (b - a)) (h : a ≤ b) : b - (b - a) = a
protected theorem tsub_tsub_cancel_of_le (hba : AddLECancellable (b - a)) (h : a ≤ b) :
b - (b - a) = a :=
hba.tsub_eq_of_eq_add (add_tsub_cancel_of_le h).symm
AddLECancellable.tsub_tsub_tsub_cancel_left
theorem
(hab : AddLECancellable (a - b)) (h : b ≤ a) : a - c - (a - b) = b - c
protected theorem tsub_tsub_tsub_cancel_left (hab : AddLECancellable (a - b)) (h : b ≤ a) :
a - c - (a - b) = b - c := by rw [tsub_right_comm, hab.tsub_tsub_cancel_of_le h]
tsub_eq_iff_eq_add_of_le
theorem
(h : b ≤ a) : a - b = c ↔ a = c + b
theorem tsub_eq_iff_eq_add_of_le (h : b ≤ a) : a - b = c ↔ a = c + b :=
Contravariant.AddLECancellable.tsub_eq_iff_eq_add_of_le h
add_tsub_assoc_of_le
theorem
(h : c ≤ b) (a : α) : a + b - c = a + (b - c)
/-- See `add_tsub_le_assoc` for an inequality. -/
theorem add_tsub_assoc_of_le (h : c ≤ b) (a : α) : a + b - c = a + (b - c) :=
Contravariant.AddLECancellable.add_tsub_assoc_of_le h a
tsub_add_eq_add_tsub
theorem
(h : b ≤ a) : a - b + c = a + c - b
theorem tsub_add_eq_add_tsub (h : b ≤ a) : a - b + c = a + c - b :=
Contravariant.AddLECancellable.tsub_add_eq_add_tsub h
tsub_tsub_assoc
theorem
(h₁ : b ≤ a) (h₂ : c ≤ b) : a - (b - c) = a - b + c
theorem tsub_tsub_assoc (h₁ : b ≤ a) (h₂ : c ≤ b) : a - (b - c) = a - b + c :=
Contravariant.AddLECancellable.tsub_tsub_assoc h₁ h₂
tsub_add_tsub_comm
theorem
(hba : b ≤ a) (hdc : d ≤ c) : a - b + (c - d) = a + c - (b + d)
theorem tsub_add_tsub_comm (hba : b ≤ a) (hdc : d ≤ c) : a - b + (c - d) = a + c - (b + d) :=
Contravariant.AddLECancellable.tsub_add_tsub_comm Contravariant.AddLECancellable hba hdc
le_tsub_iff_left
theorem
(h : a ≤ c) : b ≤ c - a ↔ a + b ≤ c
theorem le_tsub_iff_left (h : a ≤ c) : b ≤ c - a ↔ a + b ≤ c :=
Contravariant.AddLECancellable.le_tsub_iff_left h
le_tsub_iff_right
theorem
(h : a ≤ c) : b ≤ c - a ↔ b + a ≤ c
theorem le_tsub_iff_right (h : a ≤ c) : b ≤ c - a ↔ b + a ≤ c :=
Contravariant.AddLECancellable.le_tsub_iff_right h
tsub_lt_iff_left
theorem
(hbc : b ≤ a) : a - b < c ↔ a < b + c
theorem tsub_lt_iff_left (hbc : b ≤ a) : a - b < c ↔ a < b + c :=
Contravariant.AddLECancellable.tsub_lt_iff_left hbc
tsub_lt_iff_right
theorem
(hbc : b ≤ a) : a - b < c ↔ a < c + b
theorem tsub_lt_iff_right (hbc : b ≤ a) : a - b < c ↔ a < c + b :=
Contravariant.AddLECancellable.tsub_lt_iff_right hbc
tsub_lt_iff_tsub_lt
theorem
(h₁ : b ≤ a) (h₂ : c ≤ a) : a - b < c ↔ a - c < b
theorem tsub_lt_iff_tsub_lt (h₁ : b ≤ a) (h₂ : c ≤ a) : a - b < c ↔ a - c < b :=
Contravariant.AddLECancellable.tsub_lt_iff_tsub_lt Contravariant.AddLECancellable h₁ h₂
le_tsub_iff_le_tsub
theorem
(h₁ : a ≤ b) (h₂ : c ≤ b) : a ≤ b - c ↔ c ≤ b - a
theorem le_tsub_iff_le_tsub (h₁ : a ≤ b) (h₂ : c ≤ b) : a ≤ b - c ↔ c ≤ b - a :=
Contravariant.AddLECancellable.le_tsub_iff_le_tsub Contravariant.AddLECancellable h₁ h₂
lt_tsub_iff_right_of_le
theorem
(h : c ≤ b) : a < b - c ↔ a + c < b
/-- See `lt_tsub_iff_right` for a stronger statement in a linear order. -/
theorem lt_tsub_iff_right_of_le (h : c ≤ b) : a < b - c ↔ a + c < b :=
Contravariant.AddLECancellable.lt_tsub_iff_right_of_le h
lt_tsub_iff_left_of_le
theorem
(h : c ≤ b) : a < b - c ↔ c + a < b
/-- See `lt_tsub_iff_left` for a stronger statement in a linear order. -/
theorem lt_tsub_iff_left_of_le (h : c ≤ b) : a < b - c ↔ c + a < b :=
Contravariant.AddLECancellable.lt_tsub_iff_left_of_le h
lt_of_tsub_lt_tsub_left_of_le
theorem
[AddLeftReflectLT α] (hca : c ≤ a) (h : a - b < a - c) : c < b
/-- See `lt_of_tsub_lt_tsub_left` for a stronger statement in a linear order. -/
theorem lt_of_tsub_lt_tsub_left_of_le [AddLeftReflectLT α] (hca : c ≤ a)
(h : a - b < a - c) : c < b :=
Contravariant.AddLECancellable.lt_of_tsub_lt_tsub_left_of_le hca h
tsub_lt_tsub_left_of_le
theorem
: b ≤ a → c < b → a - b < a - c
theorem tsub_lt_tsub_left_of_le : b ≤ a → c < b → a - b < a - c :=
Contravariant.AddLECancellable.tsub_lt_tsub_left_of_le
tsub_lt_tsub_right_of_le
theorem
(h : c ≤ a) (h2 : a < b) : a - c < b - c
theorem tsub_lt_tsub_right_of_le (h : c ≤ a) (h2 : a < b) : a - c < b - c :=
Contravariant.AddLECancellable.tsub_lt_tsub_right_of_le h h2
tsub_inj_right
theorem
(h₁ : b ≤ a) (h₂ : c ≤ a) (h₃ : a - b = a - c) : b = c
theorem tsub_inj_right (h₁ : b ≤ a) (h₂ : c ≤ a) (h₃ : a - b = a - c) : b = c :=
Contravariant.AddLECancellable.tsub_inj_right h₁ h₂ h₃
tsub_lt_tsub_iff_left_of_le_of_le
theorem
[AddLeftReflectLT α] (h₁ : b ≤ a) (h₂ : c ≤ a) : a - b < a - c ↔ c < b
/-- See `tsub_lt_tsub_iff_left_of_le` for a stronger statement in a linear order. -/
theorem tsub_lt_tsub_iff_left_of_le_of_le [AddLeftReflectLT α] (h₁ : b ≤ a)
(h₂ : c ≤ a) : a - b < a - c ↔ c < b :=
Contravariant.AddLECancellable.tsub_lt_tsub_iff_left_of_le_of_le Contravariant.AddLECancellable h₁
h₂
add_add_tsub_cancel
theorem
(hcb : c ≤ b) : a + c + (b - c) = a + b
@[simp]
lemma add_add_tsub_cancel (hcb : c ≤ b) : a + c + (b - c) = a + b :=
Contravariant.AddLECancellable.add_add_tsub_cancel hcb
add_tsub_tsub_cancel
theorem
(h : c ≤ a) : a + b - (a - c) = b + c
@[simp]
theorem add_tsub_tsub_cancel (h : c ≤ a) : a + b - (a - c) = b + c :=
Contravariant.AddLECancellable.add_tsub_tsub_cancel h
tsub_tsub_cancel_of_le
theorem
(h : a ≤ b) : b - (b - a) = a
/-- See `tsub_tsub_le` for an inequality. -/
theorem tsub_tsub_cancel_of_le (h : a ≤ b) : b - (b - a) = a :=
Contravariant.AddLECancellable.tsub_tsub_cancel_of_le h
tsub_tsub_tsub_cancel_left
theorem
(h : b ≤ a) : a - c - (a - b) = b - c
theorem tsub_tsub_tsub_cancel_left (h : b ≤ a) : a - c - (a - b) = b - c :=
Contravariant.AddLECancellable.tsub_tsub_tsub_cancel_left h
tsub_tsub_eq_add_tsub_of_le
theorem
(h : c ≤ b) : a - (b - c) = a + c - b
/-- The `tsub` version of `sub_sub_eq_add_sub`. -/
theorem tsub_tsub_eq_add_tsub_of_le
(h : c ≤ b) : a - (b - c) = a + c - b := by
obtain ⟨d, rfl⟩ := exists_add_of_le h
rw [add_tsub_cancel_left c, add_comm a c, add_tsub_add_eq_tsub_left]