/- Copyright (c) 2021 Floris van Doorn. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Floris van Doorn ! This file was ported from Lean 3 source module algebra.order.sub.defs ! leanprover-community/mathlib commit de29c328903507bb7aff506af9135f4bdaf1849c ! Please do not edit these lines, except to modify the commit id ! if you have ported upstream changes. -/ import Mathlib.Algebra.CovariantAndContravariant import Mathlib.Algebra.Group.Basic import Mathlib.Algebra.Order.Monoid.Lemmas import Mathlib.Order.Lattice /-! # Ordered Subtraction This file proves lemmas relating (truncated) subtraction with an order. We provide a class `OrderedSub` stating that `a - b ≤ c ↔ a ≤ c + b`. The subtraction discussed here could both be normal subtraction in an additive group or truncated subtraction on a canonically ordered monoid (`ℕ`, `Multiset`, `PartENat`, `ENNReal`, ...) ## Implementation details `OrderedSub` is a mixin type-class, so that we can use the results in this file even in cases where we don't have a `CanonicallyOrderedAddMonoid` instance (even though that is our main focus). Conversely, this means we can use `CanonicallyOrderedAddMonoid` without necessarily having to define a subtraction. The results in this file are ordered by the type-class assumption needed to prove it. This means that similar results might not be close to each other. Furthermore, we don't prove implications if a bi-implication can be proven under the same assumptions. Lemmas using this class are named using `tsub` instead of `sub` (short for "truncated subtraction"). This is to avoid naming conflicts with similar lemmas about ordered groups. We provide a second version of most results that require `[ContravariantClass α α (+) (≤)]`. In the second version we replace this type-class assumption by explicit `AddLECancellable` assumptions. TODO: maybe we should make a multiplicative version of this, so that we can replace some identical lemmas about subtraction/division in `Ordered[Add]CommGroup` with these. TODO: generalize `Nat.le_of_le_of_sub_le_sub_right`, `Nat.sub_le_sub_right_iff`, `Nat.mul_self_sub_mul_self_eq` -/ variable {αα: Type ?u.29977β :β: Type ?u.7101Type _} /-- `OrderedSub α` means that `α` has a subtraction characterized by `a - b ≤ c ↔ a ≤ c + b`. In other words, `a - b` is the least `c` such that `a ≤ b + c`. This is satisfied both by the subtraction in additive ordered groups and by truncated subtraction in canonically ordered monoids on many specific types. -/ class OrderedSub (Type _: Type (?u.5+1)α :α: Type ?u.14Type _) [LEType _: Type (?u.14+1)α] [Addα: Type ?u.14α] [Subα: Type ?u.14α] :α: Type ?u.14Prop where /-- `a - b` provides a lower bound on `c` such that `a ≤ c + b`. -/ tsub_le_iff_right : ∀Prop: Typeaa: αbb: αc :c: αα,α: Type ?u.14a -a: αb ≤b: αc ↔c: αa ≤a: αc +c: αb #align has_ordered_sub OrderedSub section Add variable [Preorderb: αα] [Addα: Type ?u.176α] [Subα: Type ?u.176α] [OrderedSubα: Type ?u.128α] {α: Type ?u.176aa: αbb: αcc: αd :d: αα} @[simp] theoremα: Type ?u.128tsub_le_iff_right :a -a: αb ≤b: αc ↔c: αa ≤a: αc +c: αb := OrderedSub.tsub_le_iff_rightb: αaa: αbb: αc #align tsub_le_iff_right tsub_le_iff_right /-- See `add_tsub_cancel_right` for the equality if `ContravariantClass α α (+) (≤)`. -/ theorem add_tsub_le_right :c: αa +a: αb -b: αb ≤b: αa := tsub_le_iff_right.mpr le_rfl #align add_tsub_le_right add_tsub_le_right theorem le_tsub_add :a: αb ≤b: αb -b: αa +a: αa := tsub_le_iff_right.mp le_rfl #align le_tsub_add le_tsub_add end Add /-! ### Preorder -/ section OrderedAddCommSemigroup section Preorder variable [Preordera: αα] section AddCommSemigroup variable [AddCommSemigroupα: Type ?u.12332α] [Subα: Type ?u.4451α] [OrderedSubα: Type ?u.1813α] {α: Type ?u.2409aa: αbb: αcc: αd :d: αα} theorem tsub_le_iff_left :α: Type ?u.879a -a: αb ≤b: αc ↔c: αa ≤a: αb +b: αc :=c: αGoals accomplished! 🐙#align tsub_le_iff_leftGoals accomplished! 🐙tsub_le_iff_left theorem le_add_tsub :tsub_le_iff_left: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α}, a - b ≤ c ↔ a ≤ b + ca ≤a: αb + (b: αa -a: αb) :=b: αtsub_le_iff_left.mp le_rfl #align le_add_tsubtsub_le_iff_left: ∀ {α : Type ?u.2314} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α}, a - b ≤ c ↔ a ≤ b + cle_add_tsub /-- See `add_tsub_cancel_left` for the equality if `ContravariantClass α α (+) (≤)`. -/ theorem add_tsub_le_left :le_add_tsub: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b : α}, a ≤ b + (a - b)a +a: αb -b: αa ≤a: αb :=b: αtsub_le_iff_left.mpr le_rfl #align add_tsub_le_lefttsub_le_iff_left: ∀ {α : Type ?u.2910} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α}, a - b ≤ c ↔ a ≤ b + cadd_tsub_le_left theoremadd_tsub_le_left: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b : α}, a + b - a ≤ btsub_le_tsub_right (tsub_le_tsub_right: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b : α}, a ≤ b → ∀ (c : α), a - c ≤ b - ch :h: a ≤ ba ≤a: αb) (b: αc :c: αα) :α: Type ?u.3005a -a: αc ≤c: αb -b: αc :=c: αtsub_le_iff_left.mpr <|tsub_le_iff_left: ∀ {α : Type ?u.3270} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α}, a - b ≤ c ↔ a ≤ b + ch.transh: a ≤ ble_add_tsub #align tsub_le_tsub_rightle_add_tsub: ∀ {α : Type ?u.3333} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b : α}, a ≤ b + (a - b)tsub_le_tsub_right theoremtsub_le_tsub_right: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b : α}, a ≤ b → ∀ (c : α), a - c ≤ b - ctsub_le_iff_tsub_le :tsub_le_iff_tsub_le: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α}, a - b ≤ c ↔ a - c ≤ ba -a: αb ≤b: αc ↔c: αa -a: αc ≤c: αb :=b: αGoals accomplished! 🐙#align tsub_le_iff_tsub_leGoals accomplished! 🐙tsub_le_iff_tsub_le /-- See `tsub_tsub_cancel_of_le` for the equality. -/ theorem tsub_tsub_le :tsub_le_iff_tsub_le: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α}, a - b ≤ c ↔ a - c ≤ bb - (b: αb -b: αa) ≤a: αa := tsub_le_iff_right.mpra: αle_add_tsub #align tsub_tsub_lele_add_tsub: ∀ {α : Type ?u.4255} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b : α}, a ≤ b + (a - b)tsub_tsub_le section Cov variable [CovariantClasstsub_tsub_le: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b : α}, b - (b - a) ≤ aαα: Type ?u.4892αα: Type ?u.4451(· + ·)(· + ·): α → α → α(· ≤ ·)] theorem(· ≤ ·): α → α → Proptsub_le_tsub_left (tsub_le_tsub_left: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b : α} [inst_4 : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1], a ≤ b → ∀ (c : α), c - b ≤ c - ah :h: a ≤ ba ≤a: αb) (b: αc :c: αα) :α: Type ?u.4892c -c: αb ≤b: αc -c: αa :=a: αtsub_le_iff_left.mpr <|tsub_le_iff_left: ∀ {α : Type ?u.5417} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α}, a - b ≤ c ↔ a ≤ b + cle_add_tsub.trans <| add_le_add_rightle_add_tsub: ∀ {α : Type ?u.5467} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b : α}, a ≤ b + (a - b)hh: a ≤ b_ #align tsub_le_tsub_left_: ?m.5541tsub_le_tsub_left theoremtsub_le_tsub_left: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b : α} [inst_4 : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1], a ≤ b → ∀ (c : α), c - b ≤ c - atsub_le_tsub (tsub_le_tsub: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c d : α} [inst_4 : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1], a ≤ b → c ≤ d → a - d ≤ b - chab :hab: a ≤ ba ≤a: αb) (b: αhcd :hcd: c ≤ dc ≤c: αd) :d: αa -a: αd ≤d: αb -b: αc := (c: αtsub_le_tsub_righttsub_le_tsub_right: ∀ {α : Type ?u.6333} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b : α}, a ≤ b → ∀ (c : α), a - c ≤ b - chabhab: a ≤ b_).trans <|_: ?m.6334tsub_le_tsub_lefttsub_le_tsub_left: ∀ {α : Type ?u.6390} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b : α} [inst_4 : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1], a ≤ b → ∀ (c : α), c - b ≤ c - ahcdhcd: c ≤ d_ #align tsub_le_tsub_: ?m.6391tsub_le_tsub theoremtsub_le_tsub: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c d : α} [inst_4 : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1], a ≤ b → c ≤ d → a - d ≤ b - cantitone_const_tsub : Antitone funantitone_const_tsub: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {c : α} [inst_4 : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1], Antitone fun x => c - xx =>x: ?m.6904c -c: αx := funx: ?m.6904__: ?m.6951__: ?m.6954hxy =>hxy: ?m.6957tsub_le_tsub rfl.letsub_le_tsub: ∀ {α : Type ?u.6959} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c d : α} [inst_4 : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1], a ≤ b → c ≤ d → a - d ≤ b - chxy #align antitone_const_tsubhxy: ?m.6957antitone_const_tsub /-- See `add_tsub_assoc_of_le` for the equality. -/ theorem add_tsub_le_assoc :antitone_const_tsub: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {c : α} [inst_4 : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1], Antitone fun x => c - xa +a: αb -b: αc ≤c: αa + (a: αb -b: αc) :=c: αGoals accomplished! 🐙α: Type u_1
β: Type ?u.7101
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.7101
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.7101
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.7101
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.7101
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.7101
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.7101
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1#align add_tsub_le_assocGoals accomplished! 🐙add_tsub_le_assoc /-- See `tsub_add_eq_add_tsub` for the equality. -/ theorem add_tsub_le_tsub_add :add_tsub_le_assoc: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α} [inst_4 : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1], a + b - c ≤ a + (b - c)a +a: αb -b: αc ≤c: αa -a: αc +c: αb :=b: αGoals accomplished! 🐙α: Type u_1
β: Type ?u.8408
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.8408
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.8408
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.8408
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.8408
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.8408
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.8408
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1#align add_tsub_le_tsub_addGoals accomplished! 🐙add_tsub_le_tsub_add theoremadd_tsub_le_tsub_add: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α} [inst_4 : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1], a + b - c ≤ a - c + badd_le_add_add_tsub :add_le_add_add_tsub: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α} [inst_4 : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1], a + b ≤ a + c + (b - c)a +a: αb ≤b: αa +a: αc + (c: αb -b: αc) :=c: αGoals accomplished! 🐙α: Type u_1
β: Type ?u.9485
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.9485
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.9485
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.9485
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.9485
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1#align add_le_add_add_tsubGoals accomplished! 🐙add_le_add_add_tsub theorem le_tsub_add_add :add_le_add_add_tsub: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α} [inst_4 : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1], a + b ≤ a + c + (b - c)a +a: αb ≤b: αa -a: αc + (c: αb +b: αc) :=c: αGoals accomplished! 🐙α: Type u_1
β: Type ?u.11136
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.11136
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.11136
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.11136
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.11136
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.11136
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.11136
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1#align le_tsub_add_addGoals accomplished! 🐙le_tsub_add_add theoremle_tsub_add_add: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α} [inst_4 : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1], a + b ≤ a - c + (b + c)tsub_le_tsub_add_tsub :tsub_le_tsub_add_tsub: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α} [inst_4 : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1], a - c ≤ a - b + (b - c)a -a: αc ≤c: αa -a: αb + (b: αb -b: αc) :=c: αGoals accomplished! 🐙α: Type u_1
β: Type ?u.12335
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.12335
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.12335
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.12335
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.12335
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.12335
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.12335
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.12335
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.12335
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1#align tsub_le_tsub_add_tsubGoals accomplished! 🐙tsub_le_tsub_add_tsub theoremtsub_le_tsub_add_tsub: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α} [inst_4 : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1], a - c ≤ a - b + (b - c)tsub_tsub_tsub_le_tsub :tsub_tsub_tsub_le_tsub: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α} [inst_4 : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1], c - a - (c - b) ≤ b - ac -c: αa - (a: αc -c: αb) ≤b: αb -b: αa :=a: αGoals accomplished! 🐙α: Type u_1
β: Type ?u.13993
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.13993
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.13993
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.13993
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.13993
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.13993
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.13993
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.13993
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.13993
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1#align tsub_tsub_tsub_le_tsubGoals accomplished! 🐙tsub_tsub_tsub_le_tsub theoremtsub_tsub_tsub_le_tsub: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α} [inst_4 : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1], c - a - (c - b) ≤ b - atsub_tsub_le_tsub_add {tsub_tsub_le_tsub_add: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] [inst_4 : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1] {a b c : α}, a - (b - c) ≤ a - b + caa: αbb: αc :c: αα} :α: Type ?u.15083a - (a: αb -b: αc) ≤c: αa -a: αb +b: αc := tsub_le_iff_right.2 <| calcc: αa ≤a: αa -a: αb +b: αb := le_tsub_addb: α_ ≤_: ?m✝a -a: αb + (b: αc + (c: αb -b: αc)) := add_le_add_leftc: αle_add_tsuble_add_tsub: ∀ {α : Type ?u.16717} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b : α}, a ≤ b + (a - b)__: ?m.16711_ =_: ?m✝a -a: αb +b: αc + (c: αb -b: αc) := (add_assocc: α__: ?m.17181__: ?m.17181_).symm #align tsub_tsub_le_tsub_add_: ?m.17181tsub_tsub_le_tsub_add /-- See `tsub_add_tsub_comm` for the equality. -/ theorem add_tsub_add_le_tsub_add_tsub :tsub_tsub_le_tsub_add: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] [inst_4 : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1] {a b c : α}, a - (b - c) ≤ a - b + ca +a: αb - (b: αc +c: αd) ≤d: αa -a: αc + (c: αb -b: αd) :=d: αGoals accomplished! 🐙#align add_tsub_add_le_tsub_add_tsubGoals accomplished! 🐙add_tsub_add_le_tsub_add_tsub /-- See `add_tsub_add_eq_tsub_left` for the equality. -/ theoremadd_tsub_add_le_tsub_add_tsub: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c d : α} [inst_4 : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1], a + b - (c + d) ≤ a - c + (b - d)add_tsub_add_le_tsub_left :add_tsub_add_le_tsub_left: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α} [inst_4 : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1], a + b - (a + c) ≤ b - ca +a: αb - (b: αa +a: αc) ≤c: αb -b: αc :=c: αGoals accomplished! 🐙α: Type u_1
β: Type ?u.19397
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.19397
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.19397
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.19397
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.19397
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.19397
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.19397
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1#align add_tsub_add_le_tsub_leftGoals accomplished! 🐙add_tsub_add_le_tsub_left /-- See `add_tsub_add_eq_tsub_right` for the equality. -/ theorem add_tsub_add_le_tsub_right :add_tsub_add_le_tsub_left: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α} [inst_4 : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1], a + b - (a + c) ≤ b - ca +a: αc - (c: αb +b: αc) ≤c: αa -a: αb :=b: αGoals accomplished! 🐙α: Type u_1
β: Type ?u.21029
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.21029
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.21029
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.21029
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.21029
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.21029
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1α: Type u_1
β: Type ?u.21029
inst✝⁴: Preorder α
inst✝³: AddCommSemigroup α
inst✝²: Sub α
inst✝¹: OrderedSub α
a, b, c, d: α
inst✝: CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1#align add_tsub_add_le_tsub_rightGoals accomplished! 🐙add_tsub_add_le_tsub_right end Cov /-! #### Lemmas that assume that an element is `AddLECancellable` -/ namespace AddLECancellable protected theoremadd_tsub_add_le_tsub_right: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α} [inst_4 : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1], a + c - (b + c) ≤ a - ble_add_tsub_swap (le_add_tsub_swap: AddLECancellable b → a ≤ b + a - bhb : AddLECancellablehb: AddLECancellable bb) :b: αa ≤a: αb +b: αa -a: αb :=b: αhbhb: AddLECancellable ble_add_tsub #align add_le_cancellable.le_add_tsub_swaple_add_tsub: ∀ {α : Type ?u.23009} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b : α}, a ≤ b + (a - b)AddLECancellable.le_add_tsub_swap protected theoremAddLECancellable.le_add_tsub_swap: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b : α}, AddLECancellable b → a ≤ b + a - ble_add_tsub (le_add_tsub: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b : α}, AddLECancellable b → a ≤ a + b - bhb : AddLECancellablehb: AddLECancellable bb) :b: αa ≤a: αa +a: αb -b: αb :=b: αGoals accomplished! 🐙α: Type u_1
β: Type ?u.23086
inst✝³: Preorder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: α
hb: AddLECancellable bα: Type u_1
β: Type ?u.23086
inst✝³: Preorder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: α
hb: AddLECancellable bα: Type u_1
β: Type ?u.23086
inst✝³: Preorder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: α
hb: AddLECancellable bα: Type u_1
β: Type ?u.23086
inst✝³: Preorder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: α
hb: AddLECancellable bα: Type u_1
β: Type ?u.23086
inst✝³: Preorder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: α
hb: AddLECancellable b#align add_le_cancellable.le_add_tsubGoals accomplished! 🐙AddLECancellable.le_add_tsub protected theoremAddLECancellable.le_add_tsub: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b : α}, AddLECancellable b → a ≤ a + b - ble_tsub_of_add_le_left (le_tsub_of_add_le_left: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α}, AddLECancellable a → a + b ≤ c → b ≤ c - aha : AddLECancellableha: AddLECancellable aa) (h :a: αa +a: αb ≤b: αc) :c: αb ≤b: αc -c: αa :=a: αha <| h.transha: AddLECancellable ale_add_tsub #align add_le_cancellable.le_tsub_of_add_le_leftle_add_tsub: ∀ {α : Type ?u.24471} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b : α}, a ≤ b + (a - b)AddLECancellable.le_tsub_of_add_le_left protected theoremAddLECancellable.le_tsub_of_add_le_left: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α}, AddLECancellable a → a + b ≤ c → b ≤ c - ale_tsub_of_add_le_right (le_tsub_of_add_le_right: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α}, AddLECancellable b → a + b ≤ c → a ≤ c - bhb : AddLECancellablehb: AddLECancellable bb) (h :b: αa +a: αb ≤b: αc) :c: αa ≤a: αc -c: αb :=b: αhb.hb: AddLECancellable ble_tsub_of_add_le_left <|le_tsub_of_add_le_left: ∀ {α : Type ?u.25176} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α}, AddLECancellable a → a + b ≤ c → b ≤ c - aGoals accomplished! 🐙α: Type u_1
β: Type ?u.24546
inst✝³: Preorder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: α
hb: AddLECancellable b
h: a + b ≤ cα: Type u_1
β: Type ?u.24546
inst✝³: Preorder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: α
hb: AddLECancellable b
h: a + b ≤ cα: Type u_1
β: Type ?u.24546
inst✝³: Preorder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: α
hb: AddLECancellable b
h: a + b ≤ c#align add_le_cancellable.le_tsub_of_add_le_rightα: Type u_1
β: Type ?u.24546
inst✝³: Preorder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: α
hb: AddLECancellable b
h: a + b ≤ cAddLECancellable.le_tsub_of_add_le_right end AddLECancellable /-! ### Lemmas where addition is order-reflecting -/ section Contra variable [ContravariantClassAddLECancellable.le_tsub_of_add_le_right: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α}, AddLECancellable b → a + b ≤ c → a ≤ c - bαα: Type ?u.25743αα: Type ?u.25302(· + ·)(· + ·): α → α → α(· ≤ ·)] theorem le_add_tsub_swap :(· ≤ ·): α → α → Propa ≤a: αb +b: αa -a: αb :=b: αContravariant.AddLECancellable.Contravariant.AddLECancellable: ∀ {α : Type ?u.26504} [inst : Add α] [inst_1 : LE α] [inst_2 : ContravariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1] {a : α}, AddLECancellable ale_add_tsub_swap #align le_add_tsub_swaple_add_tsub_swap: ∀ {α : Type ?u.26537} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b : α}, AddLECancellable b → a ≤ b + a - ble_add_tsub_swap theoremle_add_tsub_swap: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b : α} [inst_4 : ContravariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1], a ≤ b + a - ble_add_tsub' :le_add_tsub': ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b : α} [inst_4 : ContravariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1], a ≤ a + b - ba ≤a: αa +a: αb -b: αb :=b: αContravariant.AddLECancellable.Contravariant.AddLECancellable: ∀ {α : Type ?u.27555} [inst : Add α] [inst_1 : LE α] [inst_2 : ContravariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1] {a : α}, AddLECancellable ale_add_tsub #align le_add_tsub'le_add_tsub: ∀ {α : Type ?u.27588} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b : α}, AddLECancellable b → a ≤ a + b - ble_add_tsub' theoremle_add_tsub': ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b : α} [inst_4 : ContravariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1], a ≤ a + b - ble_tsub_of_add_le_left (h :le_tsub_of_add_le_left: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α} [inst_4 : ContravariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1], a + b ≤ c → b ≤ c - aa +a: αb ≤b: αc) :c: αb ≤b: αc -c: αa :=a: αContravariant.AddLECancellable.Contravariant.AddLECancellable: ∀ {α : Type ?u.28613} [inst : Add α] [inst_1 : LE α] [inst_2 : ContravariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1] {a : α}, AddLECancellable ale_tsub_of_add_le_left h #align le_tsub_of_add_le_leftle_tsub_of_add_le_left: ∀ {α : Type ?u.28646} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α}, AddLECancellable a → a + b ≤ c → b ≤ c - ale_tsub_of_add_le_left theorem le_tsub_of_add_le_right (h :le_tsub_of_add_le_left: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α} [inst_4 : ContravariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1], a + b ≤ c → b ≤ c - aa +a: αb ≤b: αc) :c: αa ≤a: αc -c: αb :=b: αContravariant.AddLECancellable.Contravariant.AddLECancellable: ∀ {α : Type ?u.29679} [inst : Add α] [inst_1 : LE α] [inst_2 : ContravariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1] {a : α}, AddLECancellable ale_tsub_of_add_le_right h #align le_tsub_of_add_le_rightle_tsub_of_add_le_right: ∀ {α : Type ?u.29712} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α}, AddLECancellable b → a + b ≤ c → a ≤ c - ble_tsub_of_add_le_right end Contra end AddCommSemigroup variable [AddCommMonoidle_tsub_of_add_le_right: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α} [inst_4 : ContravariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1], a + b ≤ c → a ≤ c - bα] [Subα: Type ?u.30121α] [OrderedSubα: Type ?u.30121α] {α: Type ?u.30121aa: αbb: αcc: αd :d: αα} theoremα: Type ?u.29977tsub_nonpos :tsub_nonpos: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommMonoid α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b : α}, a - b ≤ 0 ↔ a ≤ ba -a: αb ≤b: α0 ↔0: ?m.30270a ≤a: αb :=b: αGoals accomplished! 🐙α: Type u_1
β: Type ?u.30124
inst✝³: Preorder α
inst✝²: AddCommMonoid α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: αα: Type u_1
β: Type ?u.30124
inst✝³: Preorder α
inst✝²: AddCommMonoid α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: αα: Type u_1
β: Type ?u.30124
inst✝³: Preorder α
inst✝²: AddCommMonoid α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: αα: Type u_1
β: Type ?u.30124
inst✝³: Preorder α
inst✝²: AddCommMonoid α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: αα: Type u_1
β: Type ?u.30124
inst✝³: Preorder α
inst✝²: AddCommMonoid α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: α#align tsub_nonposGoals accomplished! 🐙tsub_nonpos aliastsub_nonpos: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommMonoid α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b : α}, a - b ≤ 0 ↔ a ≤ btsub_nonpos ↔ _tsub_nonpos: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommMonoid α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b : α}, a - b ≤ 0 ↔ a ≤ btsub_nonpos_of_le #align tsub_nonpos_of_letsub_nonpos_of_le: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommMonoid α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b : α}, a ≤ b → a - b ≤ 0tsub_nonpos_of_le end Preorder /-! ### Partial order -/ variable [PartialOrdertsub_nonpos_of_le: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : AddCommMonoid α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b : α}, a ≤ b → a - b ≤ 0α] [AddCommSemigroupα: Type ?u.47125α] [Subα: Type ?u.40618α] [OrderedSubα: Type ?u.30853α] {α: Type ?u.31041aa: αbb: αcc: αd :d: αα} theoremα: Type ?u.36059tsub_tsub (tsub_tsub: ∀ {α : Type u_1} [inst : PartialOrder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst : OrderedSub α] (b a c : α), b - a - c = b - (a + c)bb: αaa: αc :c: αα) :α: Type ?u.31041b -b: αa -a: αc =c: αb - (b: αa +a: αc) :=c: αGoals accomplished! 🐙α: Type u_1
β: Type ?u.31044
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a✝, b✝, c✝, d, b, a, c: αα: Type u_1
β: Type ?u.31044
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a✝, b✝, c✝, d, b, a, c: α
aα: Type u_1
β: Type ?u.31044
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a✝, b✝, c✝, d, b, a, c: α
aα: Type u_1
β: Type ?u.31044
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a✝, b✝, c✝, d, b, a, c: αα: Type u_1
β: Type ?u.31044
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a✝, b✝, c✝, d, b, a, c: α
aα: Type u_1
β: Type ?u.31044
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a✝, b✝, c✝, d, b, a, c: α
aα: Type u_1
β: Type ?u.31044
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a✝, b✝, c✝, d, b, a, c: α
aα: Type u_1
β: Type ?u.31044
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a✝, b✝, c✝, d, b, a, c: α
aα: Type u_1
β: Type ?u.31044
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a✝, b✝, c✝, d, b, a, c: α
aα: Type u_1
β: Type ?u.31044
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a✝, b✝, c✝, d, b, a, c: α
aα: Type u_1
β: Type ?u.31044
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a✝, b✝, c✝, d, b, a, c: α
aα: Type u_1
β: Type ?u.31044
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a✝, b✝, c✝, d, b, a, c: α
aα: Type u_1
β: Type ?u.31044
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a✝, b✝, c✝, d, b, a, c: α
aα: Type u_1
β: Type ?u.31044
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a✝, b✝, c✝, d, b, a, c: α
aα: Type u_1
β: Type ?u.31044
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a✝, b✝, c✝, d, b, a, c: α
aGoals accomplished! 🐙α: Type u_1
β: Type ?u.31044
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a✝, b✝, c✝, d, b, a, c: αα: Type u_1
β: Type ?u.31044
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a✝, b✝, c✝, d, b, a, c: α
aα: Type u_1
β: Type ?u.31044
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a✝, b✝, c✝, d, b, a, c: α
aα: Type u_1
β: Type ?u.31044
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a✝, b✝, c✝, d, b, a, c: α
aα: Type u_1
β: Type ?u.31044
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a✝, b✝, c✝, d, b, a, c: α
aα: Type u_1
β: Type ?u.31044
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a✝, b✝, c✝, d, b, a, c: α
aα: Type u_1
β: Type ?u.31044
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a✝, b✝, c✝, d, b, a, c: α
aα: Type u_1
β: Type ?u.31044
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a✝, b✝, c✝, d, b, a, c: α
aα: Type u_1
β: Type ?u.31044
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a✝, b✝, c✝, d, b, a, c: α
aα: Type u_1
β: Type ?u.31044
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a✝, b✝, c✝, d, b, a, c: α
aα: Type u_1
β: Type ?u.31044
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a✝, b✝, c✝, d, b, a, c: α
a#align tsub_tsubGoals accomplished! 🐙tsub_tsub theorem tsub_add_eq_tsub_tsub (tsub_tsub: ∀ {α : Type u_1} [inst : PartialOrder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst : OrderedSub α] (b a c : α), b - a - c = b - (a + c)aa: αbb: αc :c: αα) :α: Type ?u.32593a - (a: αb +b: αc) =c: αa -a: αb -b: αc := (c: αtsub_tsubtsub_tsub: ∀ {α : Type ?u.33143} [inst : PartialOrder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst : OrderedSub α] (b a c : α), b - a - c = b - (a + c)__: ?m.33144__: ?m.33144_).symm #align tsub_add_eq_tsub_tsub_: ?m.33144tsub_add_eq_tsub_tsub theoremtsub_add_eq_tsub_tsub: ∀ {α : Type u_1} [inst : PartialOrder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst : OrderedSub α] (a b c : α), a - (b + c) = a - b - ctsub_add_eq_tsub_tsub_swap (tsub_add_eq_tsub_tsub_swap: ∀ {α : Type u_1} [inst : PartialOrder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst : OrderedSub α] (a b c : α), a - (b + c) = a - c - baa: αbb: αc :c: αα) :α: Type ?u.33250a - (a: αb +b: αc) =c: αa -a: αc -c: αb :=b: αGoals accomplished! 🐙α: Type u_1
β: Type ?u.33253
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a✝, b✝, c✝, d, a, b, c: αα: Type u_1
β: Type ?u.33253
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a✝, b✝, c✝, d, a, b, c: αα: Type u_1
β: Type ?u.33253
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a✝, b✝, c✝, d, a, b, c: αα: Type u_1
β: Type ?u.33253
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a✝, b✝, c✝, d, a, b, c: αα: Type u_1
β: Type ?u.33253
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a✝, b✝, c✝, d, a, b, c: α#align tsub_add_eq_tsub_tsub_swapGoals accomplished! 🐙tsub_add_eq_tsub_tsub_swap theoremtsub_add_eq_tsub_tsub_swap: ∀ {α : Type u_1} [inst : PartialOrder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst : OrderedSub α] (a b c : α), a - (b + c) = a - c - btsub_right_comm :tsub_right_comm: ∀ {α : Type u_1} [inst : PartialOrder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst : OrderedSub α] {a b c : α}, a - b - c = a - c - ba -a: αb -b: αc =c: αa -a: αc -c: αb :=b: αGoals accomplished! 🐙α: Type u_1
β: Type ?u.33907
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: αα: Type u_1
β: Type ?u.33907
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: αα: Type u_1
β: Type ?u.33907
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: αα: Type u_1
β: Type ?u.33907
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: αα: Type u_1
β: Type ?u.33907
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: α#align tsub_right_commGoals accomplished! 🐙tsub_right_comm /-! ### Lemmas that assume that an element is `AddLECancellable`. -/ namespace AddLECancellable protected theoremtsub_right_comm: ∀ {α : Type u_1} [inst : PartialOrder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst : OrderedSub α] {a b c : α}, a - b - c = a - c - btsub_eq_of_eq_add (tsub_eq_of_eq_add: ∀ {α : Type u_1} [inst : PartialOrder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α}, AddLECancellable b → a = c + b → a - b = chb : AddLECancellablehb: AddLECancellable bb) (h :b: αa =a: αc +c: αb) :b: αa -a: αb =b: αc :=c: αle_antisymm (tsub_le_iff_right.mpr h.le) <|le_antisymm: ∀ {α : Type ?u.34993} [inst : PartialOrder α] {a b : α}, a ≤ b → b ≤ a → a = bGoals accomplished! 🐙α: Type u_1
β: Type ?u.34353
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: α
hb: AddLECancellable b
h: a = c + bα: Type u_1
β: Type ?u.34353
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: α
hb: AddLECancellable b
h: a = c + bα: Type u_1
β: Type ?u.34353
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: α
hb: AddLECancellable b
h: a = c + bα: Type u_1
β: Type ?u.34353
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: α
hb: AddLECancellable b
h: a = c + bα: Type u_1
β: Type ?u.34353
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: α
hb: AddLECancellable b
h: a = c + b#align add_le_cancellable.tsub_eq_of_eq_addGoals accomplished! 🐙AddLECancellable.tsub_eq_of_eq_add protected theoremAddLECancellable.tsub_eq_of_eq_add: ∀ {α : Type u_1} [inst : PartialOrder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α}, AddLECancellable b → a = c + b → a - b = ceq_tsub_of_add_eq (eq_tsub_of_add_eq: ∀ {α : Type u_1} [inst : PartialOrder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α}, AddLECancellable c → a + c = b → a = b - chc : AddLECancellablehc: AddLECancellable cc) (h :c: αa +a: αc =c: αb) :b: αa =a: αb -b: αc := (c: αhc.hc: AddLECancellable ctsub_eq_of_eq_add h.symm).symm #align add_le_cancellable.eq_tsub_of_add_eqtsub_eq_of_eq_add: ∀ {α : Type ?u.35977} [inst : PartialOrder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α}, AddLECancellable b → a = c + b → a - b = cAddLECancellable.eq_tsub_of_add_eq protected theoremAddLECancellable.eq_tsub_of_add_eq: ∀ {α : Type u_1} [inst : PartialOrder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α}, AddLECancellable c → a + c = b → a = b - ctsub_eq_of_eq_add_rev (tsub_eq_of_eq_add_rev: ∀ {α : Type u_1} [inst : PartialOrder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α}, AddLECancellable b → a = b + c → a - b = chb : AddLECancellablehb: AddLECancellable bb) (h :b: αa =a: αb +b: αc) :c: αa -a: αb =b: αc :=c: αhb.hb: AddLECancellable btsub_eq_of_eq_add <|tsub_eq_of_eq_add: ∀ {α : Type ?u.36702} [inst : PartialOrder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α}, AddLECancellable b → a = c + b → a - b = cGoals accomplished! 🐙α: Type u_1
β: Type ?u.36062
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: α
hb: AddLECancellable b
h: a = b + cα: Type u_1
β: Type ?u.36062
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: α
hb: AddLECancellable b
h: a = b + cα: Type u_1
β: Type ?u.36062
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: α
hb: AddLECancellable b
h: a = b + cα: Type u_1
β: Type ?u.36062
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: α
hb: AddLECancellable b
h: a = b + cα: Type u_1
β: Type ?u.36062
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: α
hb: AddLECancellable b
h: a = b + c#align add_le_cancellable.tsub_eq_of_eq_add_revGoals accomplished! 🐙AddLECancellable.tsub_eq_of_eq_add_rev @[simp] protected theoremAddLECancellable.tsub_eq_of_eq_add_rev: ∀ {α : Type u_1} [inst : PartialOrder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α}, AddLECancellable b → a = b + c → a - b = cadd_tsub_cancel_right (add_tsub_cancel_right: ∀ {α : Type u_1} [inst : PartialOrder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b : α}, AddLECancellable b → a + b - b = ahb : AddLECancellablehb: AddLECancellable bb) :b: αa +a: αb -b: αb =b: αa :=a: αhb.hb: AddLECancellable btsub_eq_of_eq_add <|tsub_eq_of_eq_add: ∀ {α : Type ?u.37440} [inst : PartialOrder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α}, AddLECancellable b → a = c + b → a - b = cGoals accomplished! 🐙α: Type u_1
β: Type ?u.36805
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: α
hb: AddLECancellable bα: Type u_1
β: Type ?u.36805
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: α
hb: AddLECancellable bα: Type u_1
β: Type ?u.36805
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: α
hb: AddLECancellable b#align add_le_cancellable.add_tsub_cancel_rightGoals accomplished! 🐙AddLECancellable.add_tsub_cancel_right @[simp] protected theoremAddLECancellable.add_tsub_cancel_right: ∀ {α : Type u_1} [inst : PartialOrder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b : α}, AddLECancellable b → a + b - b = aadd_tsub_cancel_left (add_tsub_cancel_left: ∀ {α : Type u_1} [inst : PartialOrder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b : α}, AddLECancellable a → a + b - a = bha : AddLECancellableha: AddLECancellable aa) :a: αa +a: αb -b: αa =a: αb :=b: αha.ha: AddLECancellable atsub_eq_of_eq_add <|tsub_eq_of_eq_add: ∀ {α : Type ?u.38200} [inst : PartialOrder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α}, AddLECancellable b → a = c + b → a - b = cadd_commadd_comm: ∀ {G : Type ?u.38255} [inst : AddCommSemigroup G] (a b : G), a + b = b + aaa: αb #align add_le_cancellable.add_tsub_cancel_leftb: αAddLECancellable.add_tsub_cancel_left protected theoremAddLECancellable.add_tsub_cancel_left: ∀ {α : Type u_1} [inst : PartialOrder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b : α}, AddLECancellable a → a + b - a = blt_add_of_tsub_lt_left (lt_add_of_tsub_lt_left: ∀ {α : Type u_1} [inst : PartialOrder α] [inst_1 : AddCommSemigroup α] [inst_2 : Sub α] [inst_3 : OrderedSub α] {a b c : α}, AddLECancellable b → a - b < c → a < b + chb : AddLECancellablehb: AddLECancellable bb) (h :b: αa -a: αb <b: αc) :c: αa <a: αb +b: αc :=c: αGoals accomplished! 🐙α: Type u_1
β: Type ?u.38298
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: α
hb: AddLECancellable b
h: a - b < cα: Type u_1
β: Type ?u.38298
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: α
hb: AddLECancellable b
h: a - b < cα: Type u_1
β: Type ?u.38298
inst✝³: PartialOrder α
inst✝²: AddCommSemigroup α
inst✝¹: Sub α
inst✝: OrderedSub α
a, b, c, d: α
hb: AddLECancellable b
h: a - b < c