mathlib documentation

algebra.ordered_group

Ordered monoids and groups

This file develops the basics of ordered monoids and groups.

Implementation details

Unfortunately, the number of ' appended to lemmas in this file may differ between the multiplicative and the additive version of a lemma. The reason is that we did not want to change existing names in the library.

@[instance]

@[instance]

@[class]
structure ordered_comm_monoid (α : Type u_1) :
Type u_1
  • mul : α → α → α
  • mul_assoc : ∀ (a b c_1 : α), (a * b) * c_1 = a * b * c_1
  • one : α
  • one_mul : ∀ (a : α), 1 * a = a
  • mul_one : ∀ (a : α), a * 1 = a
  • mul_comm : ∀ (a b : α), a * b = b * a
  • le : α → α → Prop
  • lt : α → α → Prop
  • le_refl : ∀ (a : α), a ≤ a
  • le_trans : ∀ (a b c_1 : α), a ≤ b → b ≤ c_1 → a ≤ c_1
  • lt_iff_le_not_le : (∀ (a b : α), a < b ↔ a ≤ b ∧ ¬b ≤ a) . "order_laws_tac"
  • le_antisymm : ∀ (a b : α), a ≤ b → b ≤ a → a = b
  • mul_le_mul_left : ∀ (a b : α), a ≤ b → ∀ (c_1 : α), c_1 * a ≤ c_1 * b
  • lt_of_mul_lt_mul_left : ∀ (a b c_1 : α), a * b < a * c_1 → b < c_1

An ordered commutative monoid is a commutative monoid with a partial order such that

  • a ≤ b → c * a ≤ c * b (multiplication is monotone)
  • a * b < a * c → b < c.
Instances
@[class]
structure ordered_add_comm_monoid (α : Type u_1) :
Type u_1
  • add : α → α → α
  • add_assoc : ∀ (a b c_1 : α), a + b + c_1 = a + (b + c_1)
  • zero : α
  • zero_add : ∀ (a : α), 0 + a = a
  • add_zero : ∀ (a : α), a + 0 = a
  • add_comm : ∀ (a b : α), a + b = b + a
  • le : α → α → Prop
  • lt : α → α → Prop
  • le_refl : ∀ (a : α), a ≤ a
  • le_trans : ∀ (a b c_1 : α), a ≤ b → b ≤ c_1 → a ≤ c_1
  • lt_iff_le_not_le : (∀ (a b : α), a < b ↔ a ≤ b ∧ ¬b ≤ a) . "order_laws_tac"
  • le_antisymm : ∀ (a b : α), a ≤ b → b ≤ a → a = b
  • add_le_add_left : ∀ (a b : α), a ≤ b → ∀ (c_1 : α), c_1 + a ≤ c_1 + b
  • lt_of_add_lt_add_left : ∀ (a b c_1 : α), a + b < a + c_1 → b < c_1

An ordered (additive) commutative monoid is a commutative monoid with a partial order such that

  • a ≤ b → c + a ≤ c + b (addition is monotone)
  • a + b < a + c → b < c.
Instances
theorem mul_le_mul_left' {α : Type u} [ordered_comm_monoid α] {a b : α} (h : a ≤ b) (c : α) :
c * a ≤ c * b

theorem add_le_add_left {α : Type u} [ordered_add_comm_monoid α] {a b : α} (h : a ≤ b) (c : α) :
c + a ≤ c + b

theorem add_le_add_right {α : Type u} [ordered_add_comm_monoid α] {a b : α} (h : a ≤ b) (c : α) :
a + c ≤ b + c

theorem mul_le_mul_right' {α : Type u} [ordered_comm_monoid α] {a b : α} (h : a ≤ b) (c : α) :
a * c ≤ b * c

theorem lt_of_add_lt_add_left {α : Type u} [ordered_add_comm_monoid α] {a b c : α} (a_1 : a + b < a + c) :
b < c

theorem lt_of_mul_lt_mul_left' {α : Type u} [ordered_comm_monoid α] {a b c : α} (a_1 : a * b < a * c) :
b < c

theorem add_le_add {α : Type u} [ordered_add_comm_monoid α] {a b c d : α} (h₁ : a ≤ b) (h₂ : c ≤ d) :
a + c ≤ b + d

theorem mul_le_mul' {α : Type u} [ordered_comm_monoid α] {a b c d : α} (h₁ : a ≤ b) (h₂ : c ≤ d) :
a * c ≤ b * d

theorem mul_le_mul_three {α : Type u} [ordered_comm_monoid α] {a b c d e f : α} (h₁ : a ≤ d) (h₂ : b ≤ e) (h₃ : c ≤ f) :
(a * b) * c ≤ (d * e) * f

theorem add_le_add_three {α : Type u} [ordered_add_comm_monoid α] {a b c d e f : α} (h₁ : a ≤ d) (h₂ : b ≤ e) (h₃ : c ≤ f) :
a + b + c ≤ d + e + f

theorem le_add_of_nonneg_right {α : Type u} [ordered_add_comm_monoid α] {a b : α} (h : 0 ≤ b) :
a ≤ a + b

theorem le_mul_of_one_le_right' {α : Type u} [ordered_comm_monoid α] {a b : α} (h : 1 ≤ b) :
a ≤ a * b

theorem le_mul_of_one_le_left' {α : Type u} [ordered_comm_monoid α] {a b : α} (h : 1 ≤ b) :
a ≤ b * a

theorem le_add_of_nonneg_left {α : Type u} [ordered_add_comm_monoid α] {a b : α} (h : 0 ≤ b) :
a ≤ b + a

theorem lt_of_add_lt_add_right {α : Type u} [ordered_add_comm_monoid α] {a b c : α} (h : a + b < c + b) :
a < c

theorem lt_of_mul_lt_mul_right' {α : Type u} [ordered_comm_monoid α] {a b c : α} (h : a * b < c * b) :
a < c

theorem le_add_of_nonneg_of_le {α : Type u} [ordered_add_comm_monoid α] {a b c : α} (ha : 0 ≤ a) (hbc : b ≤ c) :
b ≤ a + c

theorem le_mul_of_one_le_of_le {α : Type u} [ordered_comm_monoid α] {a b c : α} (ha : 1 ≤ a) (hbc : b ≤ c) :
b ≤ a * c

theorem le_add_of_le_of_nonneg {α : Type u} [ordered_add_comm_monoid α] {a b c : α} (hbc : b ≤ c) (ha : 0 ≤ a) :
b ≤ c + a

theorem le_mul_of_le_of_one_le {α : Type u} [ordered_comm_monoid α] {a b c : α} (hbc : b ≤ c) (ha : 1 ≤ a) :
b ≤ c * a

theorem one_le_mul {α : Type u} [ordered_comm_monoid α] {a b : α} (ha : 1 ≤ a) (hb : 1 ≤ b) :
1 ≤ a * b

theorem add_nonneg {α : Type u} [ordered_add_comm_monoid α] {a b : α} (ha : 0 ≤ a) (hb : 0 ≤ b) :
0 ≤ a + b

theorem one_lt_mul_of_lt_of_le' {α : Type u} [ordered_comm_monoid α] {a b : α} (ha : 1 < a) (hb : 1 ≤ b) :
1 < a * b

theorem add_pos_of_pos_of_nonneg {α : Type u} [ordered_add_comm_monoid α] {a b : α} (ha : 0 < a) (hb : 0 ≤ b) :
0 < a + b

theorem add_pos_of_nonneg_of_pos {α : Type u} [ordered_add_comm_monoid α] {a b : α} (ha : 0 ≤ a) (hb : 0 < b) :
0 < a + b

theorem one_lt_mul_of_le_of_lt' {α : Type u} [ordered_comm_monoid α] {a b : α} (ha : 1 ≤ a) (hb : 1 < b) :
1 < a * b

theorem one_lt_mul' {α : Type u} [ordered_comm_monoid α] {a b : α} (ha : 1 < a) (hb : 1 < b) :
1 < a * b

theorem add_pos {α : Type u} [ordered_add_comm_monoid α] {a b : α} (ha : 0 < a) (hb : 0 < b) :
0 < a + b

theorem add_nonpos {α : Type u} [ordered_add_comm_monoid α] {a b : α} (ha : a ≤ 0) (hb : b ≤ 0) :
a + b ≤ 0

theorem mul_le_one' {α : Type u} [ordered_comm_monoid α] {a b : α} (ha : a ≤ 1) (hb : b ≤ 1) :
a * b ≤ 1

theorem mul_le_of_le_one_of_le' {α : Type u} [ordered_comm_monoid α] {a b c : α} (ha : a ≤ 1) (hbc : b ≤ c) :
a * b ≤ c

theorem add_le_of_nonpos_of_le' {α : Type u} [ordered_add_comm_monoid α] {a b c : α} (ha : a ≤ 0) (hbc : b ≤ c) :
a + b ≤ c

theorem add_le_of_le_of_nonpos' {α : Type u} [ordered_add_comm_monoid α] {a b c : α} (hbc : b ≤ c) (ha : a ≤ 0) :
b + a ≤ c

theorem mul_le_of_le_of_le_one' {α : Type u} [ordered_comm_monoid α] {a b c : α} (hbc : b ≤ c) (ha : a ≤ 1) :
b * a ≤ c

theorem add_neg_of_neg_of_nonpos' {α : Type u} [ordered_add_comm_monoid α] {a b : α} (ha : a < 0) (hb : b ≤ 0) :
a + b < 0

theorem mul_lt_one_of_lt_one_of_le_one' {α : Type u} [ordered_comm_monoid α] {a b : α} (ha : a < 1) (hb : b ≤ 1) :
a * b < 1

theorem mul_lt_one_of_le_one_of_lt_one' {α : Type u} [ordered_comm_monoid α] {a b : α} (ha : a ≤ 1) (hb : b < 1) :
a * b < 1

theorem add_neg_of_nonpos_of_neg' {α : Type u} [ordered_add_comm_monoid α] {a b : α} (ha : a ≤ 0) (hb : b < 0) :
a + b < 0

theorem mul_lt_one' {α : Type u} [ordered_comm_monoid α] {a b : α} (ha : a < 1) (hb : b < 1) :
a * b < 1

theorem add_neg' {α : Type u} [ordered_add_comm_monoid α] {a b : α} (ha : a < 0) (hb : b < 0) :
a + b < 0

theorem lt_mul_of_one_le_of_lt' {α : Type u} [ordered_comm_monoid α] {a b c : α} (ha : 1 ≤ a) (hbc : b < c) :
b < a * c

theorem lt_add_of_nonneg_of_lt' {α : Type u} [ordered_add_comm_monoid α] {a b c : α} (ha : 0 ≤ a) (hbc : b < c) :
b < a + c

theorem lt_mul_of_lt_of_one_le' {α : Type u} [ordered_comm_monoid α] {a b c : α} (hbc : b < c) (ha : 1 ≤ a) :
b < c * a

theorem lt_add_of_lt_of_nonneg' {α : Type u} [ordered_add_comm_monoid α] {a b c : α} (hbc : b < c) (ha : 0 ≤ a) :
b < c + a

theorem lt_add_of_pos_of_lt' {α : Type u} [ordered_add_comm_monoid α] {a b c : α} (ha : 0 < a) (hbc : b < c) :
b < a + c

theorem lt_mul_of_one_lt_of_lt' {α : Type u} [ordered_comm_monoid α] {a b c : α} (ha : 1 < a) (hbc : b < c) :
b < a * c

theorem lt_add_of_lt_of_pos' {α : Type u} [ordered_add_comm_monoid α] {a b c : α} (hbc : b < c) (ha : 0 < a) :
b < c + a

theorem lt_mul_of_lt_of_one_lt' {α : Type u} [ordered_comm_monoid α] {a b c : α} (hbc : b < c) (ha : 1 < a) :
b < c * a

theorem add_lt_of_nonpos_of_lt' {α : Type u} [ordered_add_comm_monoid α] {a b c : α} (ha : a ≤ 0) (hbc : b < c) :
a + b < c

theorem mul_lt_of_le_one_of_lt' {α : Type u} [ordered_comm_monoid α] {a b c : α} (ha : a ≤ 1) (hbc : b < c) :
a * b < c

theorem mul_lt_of_lt_of_le_one' {α : Type u} [ordered_comm_monoid α] {a b c : α} (hbc : b < c) (ha : a ≤ 1) :
b * a < c

theorem add_lt_of_lt_of_nonpos' {α : Type u} [ordered_add_comm_monoid α] {a b c : α} (hbc : b < c) (ha : a ≤ 0) :
b + a < c

theorem mul_lt_of_lt_one_of_lt' {α : Type u} [ordered_comm_monoid α] {a b c : α} (ha : a < 1) (hbc : b < c) :
a * b < c

theorem add_lt_of_neg_of_lt' {α : Type u} [ordered_add_comm_monoid α] {a b c : α} (ha : a < 0) (hbc : b < c) :
a + b < c

theorem mul_lt_of_lt_of_lt_one' {α : Type u} [ordered_comm_monoid α] {a b c : α} (hbc : b < c) (ha : a < 1) :
b * a < c

theorem add_lt_of_lt_of_neg' {α : Type u} [ordered_add_comm_monoid α] {a b c : α} (hbc : b < c) (ha : a < 0) :
b + a < c

theorem add_eq_zero_iff' {α : Type u} [ordered_add_comm_monoid α] {a b : α} (ha : 0 ≤ a) (hb : 0 ≤ b) :
a + b = 0 ↔ a = 0 ∧ b = 0

theorem mul_eq_one_iff' {α : Type u} [ordered_comm_monoid α] {a b : α} (ha : 1 ≤ a) (hb : 1 ≤ b) :
a * b = 1 ↔ a = 1 ∧ b = 1

theorem monotone.mul' {α : Type u} [ordered_comm_monoid α] {β : Type u_1} [preorder β] {f g : β → α} (hf : monotone f) (hg : monotone g) :
monotone (λ (x : β), (f x) * g x)

theorem monotone.add {α : Type u} [ordered_add_comm_monoid α] {β : Type u_1} [preorder β] {f g : β → α} (hf : monotone f) (hg : monotone g) :
monotone (λ (x : β), f x + g x)

theorem monotone.add_const {α : Type u} [ordered_add_comm_monoid α] {β : Type u_1} [preorder β] {f : β → α} (hf : monotone f) (a : α) :
monotone (λ (x : β), f x + a)

theorem monotone.mul_const' {α : Type u} [ordered_comm_monoid α] {β : Type u_1} [preorder β] {f : β → α} (hf : monotone f) (a : α) :
monotone (λ (x : β), (f x) * a)

theorem monotone.const_add {α : Type u} [ordered_add_comm_monoid α] {β : Type u_1} [preorder β] {f : β → α} (hf : monotone f) (a : α) :
monotone (λ (x : β), a + f x)

theorem monotone.const_mul' {α : Type u} [ordered_comm_monoid α] {β : Type u_1} [preorder β] {f : β → α} (hf : monotone f) (a : α) :
monotone (λ (x : β), a * f x)

theorem bit0_pos {α : Type u} [ordered_add_comm_monoid α] {a : α} (h : 0 < a) :
0 < bit0 a

@[instance]
def add_units.preorder {α : Type u} [add_monoid α] [preorder α] :

@[instance]
def units.preorder {α : Type u} [monoid α] [preorder α] :

Equations
@[simp]
theorem add_units.coe_le_coe {α : Type u} [add_monoid α] [preorder α] {a b : add_units α} :
↑a ≤ ↑b ↔ a ≤ b

@[simp]
theorem units.coe_le_coe {α : Type u} [monoid α] [preorder α] {a b : units α} :
↑a ≤ ↑b ↔ a ≤ b

@[simp]
theorem add_units.coe_lt_coe {α : Type u} [add_monoid α] [preorder α] {a b : add_units α} :
↑a < ↑b ↔ a < b

@[simp]
theorem units.coe_lt_coe {α : Type u} [monoid α] [preorder α] {a b : units α} :
↑a < ↑b ↔ a < b

@[instance]

@[instance]

@[simp]
theorem add_units.max_coe {α : Type u} [add_monoid α] [decidable_linear_order α] {a b : add_units α} :
↑(max a b) = max ↑a ↑b

@[simp]
theorem units.max_coe {α : Type u} [monoid α] [decidable_linear_order α] {a b : units α} :
↑(max a b) = max ↑a ↑b

@[simp]
theorem units.min_coe {α : Type u} [monoid α] [decidable_linear_order α] {a b : units α} :
↑(min a b) = min ↑a ↑b

@[simp]
theorem add_units.min_coe {α : Type u} [add_monoid α] [decidable_linear_order α] {a b : add_units α} :
↑(min a b) = min ↑a ↑b

@[instance]
def with_zero.preorder {α : Type u} [preorder α] :

Equations
theorem with_zero.zero_le {α : Type u} [partial_order α] (a : with_zero α) :
0 ≤ a

theorem with_zero.zero_lt_coe {α : Type u} [partial_order α] (a : α) :
0 < ↑a

@[simp]
theorem with_zero.coe_lt_coe {α : Type u} [partial_order α] {a b : α} :
↑a < ↑b ↔ a < b

@[simp]
theorem with_zero.coe_le_coe {α : Type u} [partial_order α] {a b : α} :
↑a ≤ ↑b ↔ a ≤ b

@[instance]
def with_zero.lattice {α : Type u} [lattice α] :

Equations
theorem with_zero.mul_le_mul_left {α : Type u} [ordered_comm_monoid α] (a b : with_zero α) (a_1 : a ≤ b) (c : with_zero α) :
c * a ≤ c * b

theorem with_zero.lt_of_mul_lt_mul_left {α : Type u} [ordered_comm_monoid α] (a b c : with_zero α) (a_1 : a * b < a * c) :
b < c

@[instance]
def with_top.has_one {α : Type u} [has_one α] :

Equations
@[instance]
def with_top.has_zero {α : Type u} [has_zero α] :

@[simp]
theorem with_top.coe_one {α : Type u} [has_one α] :
↑1 = 1

@[simp]
theorem with_top.coe_zero {α : Type u} [has_zero α] :
↑0 = 0

@[simp]
theorem with_top.coe_eq_zero {α : Type u} [has_zero α] {a : α} :
↑a = 0 ↔ a = 0

@[simp]
theorem with_top.coe_eq_one {α : Type u} [has_one α] {a : α} :
↑a = 1 ↔ a = 1

@[simp]
theorem with_top.zero_eq_coe {α : Type u} [has_zero α] {a : α} :
0 = ↑a ↔ a = 0

@[simp]
theorem with_top.one_eq_coe {α : Type u} [has_one α] {a : α} :
1 = ↑a ↔ a = 1

@[simp]
theorem with_top.top_ne_one {α : Type u} [has_one α] :

@[simp]
theorem with_top.top_ne_zero {α : Type u} [has_zero α] :

@[simp]
theorem with_top.zero_ne_top {α : Type u} [has_zero α] :

@[simp]
theorem with_top.one_ne_top {α : Type u} [has_one α] :

@[instance]
def with_top.has_add {α : Type u} [has_add α] :

Equations
theorem with_top.coe_add {α : Type u} [has_add α] {a b : α} :
↑(a + b) = ↑a + ↑b

theorem with_top.coe_bit0 {α : Type u} [has_add α] {a : α} :

theorem with_top.coe_bit1 {α : Type u} [has_add α] [has_one α] {a : α} :

@[instance]
def with_top.add_monoid {α : Type u} [add_monoid α] :

Equations
@[simp]
theorem with_top.zero_lt_top {α : Type u} [ordered_add_comm_monoid α] :
0 < ⊤

@[simp]
theorem with_top.zero_lt_coe {α : Type u} [ordered_add_comm_monoid α] (a : α) :
0 < ↑a ↔ 0 < a

@[simp]
theorem with_top.add_top {α : Type u} [ordered_add_comm_monoid α] {a : with_top α} :

@[simp]
theorem with_top.top_add {α : Type u} [ordered_add_comm_monoid α] {a : with_top α} :

theorem with_top.add_eq_top {α : Type u} [ordered_add_comm_monoid α] (a b : with_top α) :
a + b = ⊤ ↔ a = ⊤ ∨ b = ⊤

theorem with_top.add_lt_top {α : Type u} [ordered_add_comm_monoid α] (a b : with_top α) :
a + b < ⊤ ↔ a < ⊤ ∧ b < ⊤

@[instance]
def with_bot.has_zero {α : Type u} [has_zero α] :

Equations
@[instance]
def with_bot.has_one {α : Type u} [has_one α] :

Equations
@[instance]
def with_bot.add_monoid {α : Type u} [add_monoid α] :

Equations
theorem with_bot.coe_zero {α : Type u} [has_zero α] :
↑0 = 0

theorem with_bot.coe_one {α : Type u} [has_one α] :
↑1 = 1

theorem with_bot.coe_eq_zero {α : Type u_1} [add_monoid α] {a : α} :
↑a = 0 ↔ a = 0

theorem with_bot.coe_add {α : Type u} [add_semigroup α] (a b : α) :
↑(a + b) = ↑a + ↑b

theorem with_bot.coe_bit0 {α : Type u} [add_semigroup α] {a : α} :

theorem with_bot.coe_bit1 {α : Type u} [add_semigroup α] [has_one α] {a : α} :

@[simp]
theorem with_bot.bot_add {α : Type u} [ordered_add_comm_monoid α] (a : with_bot α) :

@[simp]
theorem with_bot.add_bot {α : Type u} [ordered_add_comm_monoid α] (a : with_bot α) :

@[class]
structure canonically_ordered_add_monoid (α : Type u_1) :
Type u_1
  • add : α → α → α
  • add_assoc : ∀ (a b c_1 : α), a + b + c_1 = a + (b + c_1)
  • zero : α
  • zero_add : ∀ (a : α), 0 + a = a
  • add_zero : ∀ (a : α), a + 0 = a
  • add_comm : ∀ (a b : α), a + b = b + a
  • le : α → α → Prop
  • lt : α → α → Prop
  • le_refl : ∀ (a : α), a ≤ a
  • le_trans : ∀ (a b c_1 : α), a ≤ b → b ≤ c_1 → a ≤ c_1
  • lt_iff_le_not_le : (∀ (a b : α), a < b ↔ a ≤ b ∧ ¬b ≤ a) . "order_laws_tac"
  • le_antisymm : ∀ (a b : α), a ≤ b → b ≤ a → a = b
  • add_le_add_left : ∀ (a b : α), a ≤ b → ∀ (c_1 : α), c_1 + a ≤ c_1 + b
  • lt_of_add_lt_add_left : ∀ (a b c_1 : α), a + b < a + c_1 → b < c_1
  • bot : α
  • bot_le : ∀ (a : α), ⊥ ≤ a
  • le_iff_exists_add : ∀ (a b : α), a ≤ b ↔ ∃ (c_1 : α), b = a + c_1

A canonically ordered additive monoid is an ordered commutative additive monoid in which the ordering coincides with the divisibility relation, which is to say, a ≤ b iff there exists c with b = a + c. This is satisfied by the natural numbers, for example, but not the integers or other ordered groups.

Instances
theorem le_iff_exists_add {α : Type u} [canonically_ordered_add_monoid α] {a b : α} :
a ≤ b ↔ ∃ (c : α), b = a + c

@[simp]
theorem zero_le {α : Type u} [canonically_ordered_add_monoid α] (a : α) :
0 ≤ a

@[simp]
theorem bot_eq_zero {α : Type u} [canonically_ordered_add_monoid α] :
⊥ = 0

@[simp]
theorem add_eq_zero_iff {α : Type u} [canonically_ordered_add_monoid α] {a b : α} :
a + b = 0 ↔ a = 0 ∧ b = 0

@[simp]
theorem le_zero_iff_eq {α : Type u} [canonically_ordered_add_monoid α] {a : α} :
a ≤ 0 ↔ a = 0

theorem zero_lt_iff_ne_zero {α : Type u} [canonically_ordered_add_monoid α] {a : α} :
0 < a ↔ a ≠ 0

theorem exists_pos_add_of_lt {α : Type u} [canonically_ordered_add_monoid α] {a b : α} (h : a < b) :
∃ (c : α) (H : c > 0), a + c = b

theorem le_add_left {α : Type u} [canonically_ordered_add_monoid α] {a b c : α} (h : a ≤ c) :
a ≤ b + c

theorem le_add_right {α : Type u} [canonically_ordered_add_monoid α] {a b c : α} (h : a ≤ b) :
a ≤ b + c

@[class]
structure canonically_linear_ordered_add_monoid (α : Type u_1) :
Type u_1
  • add : α → α → α
  • add_assoc : ∀ (a b c_1 : α), a + b + c_1 = a + (b + c_1)
  • zero : α
  • zero_add : ∀ (a : α), 0 + a = a
  • add_zero : ∀ (a : α), a + 0 = a
  • add_comm : ∀ (a b : α), a + b = b + a
  • le : α → α → Prop
  • lt : α → α → Prop
  • le_refl : ∀ (a : α), a ≤ a
  • le_trans : ∀ (a b c_1 : α), a ≤ b → b ≤ c_1 → a ≤ c_1
  • lt_iff_le_not_le : (∀ (a b : α), a < b ↔ a ≤ b ∧ ¬b ≤ a) . "order_laws_tac"
  • le_antisymm : ∀ (a b : α), a ≤ b → b ≤ a → a = b
  • add_le_add_left : ∀ (a b : α), a ≤ b → ∀ (c_1 : α), c_1 + a ≤ c_1 + b
  • lt_of_add_lt_add_left : ∀ (a b c_1 : α), a + b < a + c_1 → b < c_1
  • bot : α
  • bot_le : ∀ (a : α), ⊥ ≤ a
  • le_iff_exists_add : ∀ (a b : α), a ≤ b ↔ ∃ (c_1 : α), b = a + c_1
  • le_total : ∀ (a b : α), a ≤ b ∨ b ≤ a
  • decidable_le : decidable_rel has_le.le
  • decidable_eq : decidable_eq α
  • decidable_lt : decidable_rel has_lt.lt

A canonically linear-ordered additive monoid is a canonically ordered additive monoid whose ordering is a decidable linear order.

@[class]
structure ordered_cancel_add_comm_monoid (α : Type u) :
Type u
  • add : α → α → α
  • add_assoc : ∀ (a b c_1 : α), a + b + c_1 = a + (b + c_1)
  • zero : α
  • zero_add : ∀ (a : α), 0 + a = a
  • add_zero : ∀ (a : α), a + 0 = a
  • add_comm : ∀ (a b : α), a + b = b + a
  • add_left_cancel : ∀ (a b c_1 : α), a + b = a + c_1 → b = c_1
  • add_right_cancel : ∀ (a b c_1 : α), a + b = c_1 + b → a = c_1
  • le : α → α → Prop
  • lt : α → α → Prop
  • le_refl : ∀ (a : α), a ≤ a
  • le_trans : ∀ (a b c_1 : α), a ≤ b → b ≤ c_1 → a ≤ c_1
  • lt_iff_le_not_le : (∀ (a b : α), a < b ↔ a ≤ b ∧ ¬b ≤ a) . "order_laws_tac"
  • le_antisymm : ∀ (a b : α), a ≤ b → b ≤ a → a = b
  • add_le_add_left : ∀ (a b : α), a ≤ b → ∀ (c_1 : α), c_1 + a ≤ c_1 + b
  • le_of_add_le_add_left : ∀ (a b c_1 : α), a + b ≤ a + c_1 → b ≤ c_1

An ordered cancellative additive commutative monoid is an additive commutative monoid with a partial order, in which addition is cancellative and strictly monotone.

Instances
@[class]
structure ordered_cancel_comm_monoid (α : Type u) :
Type u
  • mul : α → α → α
  • mul_assoc : ∀ (a b c_1 : α), (a * b) * c_1 = a * b * c_1
  • one : α
  • one_mul : ∀ (a : α), 1 * a = a
  • mul_one : ∀ (a : α), a * 1 = a
  • mul_comm : ∀ (a b : α), a * b = b * a
  • mul_left_cancel : ∀ (a b c_1 : α), a * b = a * c_1 → b = c_1
  • mul_right_cancel : ∀ (a b c_1 : α), a * b = c_1 * b → a = c_1
  • le : α → α → Prop
  • lt : α → α → Prop
  • le_refl : ∀ (a : α), a ≤ a
  • le_trans : ∀ (a b c_1 : α), a ≤ b → b ≤ c_1 → a ≤ c_1
  • lt_iff_le_not_le : (∀ (a b : α), a < b ↔ a ≤ b ∧ ¬b ≤ a) . "order_laws_tac"
  • le_antisymm : ∀ (a b : α), a ≤ b → b ≤ a → a = b
  • mul_le_mul_left : ∀ (a b : α), a ≤ b → ∀ (c_1 : α), c_1 * a ≤ c_1 * b
  • le_of_mul_le_mul_left : ∀ (a b c_1 : α), a * b ≤ a * c_1 → b ≤ c_1

An ordered cancellative commutative monoid is a commutative monoid with a partial order, in which multiplication is cancellative and strictly monotone.

Instances
theorem le_of_mul_le_mul_left' {α : Type u} [ordered_cancel_comm_monoid α] {a b c : α} (a_1 : a * b ≤ a * c) :
b ≤ c

theorem le_of_add_le_add_left {α : Type u} [ordered_cancel_add_comm_monoid α] {a b c : α} (a_1 : a + b ≤ a + c) :
b ≤ c

theorem add_lt_add_left {α : Type u} [ordered_cancel_add_comm_monoid α] {a b : α} (h : a < b) (c : α) :
c + a < c + b

theorem mul_lt_mul_left' {α : Type u} [ordered_cancel_comm_monoid α] {a b : α} (h : a < b) (c : α) :
c * a < c * b

theorem mul_lt_mul_right' {α : Type u} [ordered_cancel_comm_monoid α] {a b : α} (h : a < b) (c : α) :
a * c < b * c

theorem add_lt_add_right {α : Type u} [ordered_cancel_add_comm_monoid α] {a b : α} (h : a < b) (c : α) :
a + c < b + c

theorem mul_lt_mul''' {α : Type u} [ordered_cancel_comm_monoid α] {a b c d : α} (h₁ : a < b) (h₂ : c < d) :
a * c < b * d

theorem add_lt_add {α : Type u} [ordered_cancel_add_comm_monoid α] {a b c d : α} (h₁ : a < b) (h₂ : c < d) :
a + c < b + d

theorem mul_lt_mul_of_le_of_lt {α : Type u} [ordered_cancel_comm_monoid α] {a b c d : α} (h₁ : a ≤ b) (h₂ : c < d) :
a * c < b * d

theorem add_lt_add_of_le_of_lt {α : Type u} [ordered_cancel_add_comm_monoid α] {a b c d : α} (h₁ : a ≤ b) (h₂ : c < d) :
a + c < b + d

theorem add_lt_add_of_lt_of_le {α : Type u} [ordered_cancel_add_comm_monoid α] {a b c d : α} (h₁ : a < b) (h₂ : c ≤ d) :
a + c < b + d

theorem mul_lt_mul_of_lt_of_le {α : Type u} [ordered_cancel_comm_monoid α] {a b c d : α} (h₁ : a < b) (h₂ : c ≤ d) :
a * c < b * d

theorem lt_add_of_pos_right {α : Type u} [ordered_cancel_add_comm_monoid α] (a : α) {b : α} (h : 0 < b) :
a < a + b

theorem lt_mul_of_one_lt_right' {α : Type u} [ordered_cancel_comm_monoid α] (a : α) {b : α} (h : 1 < b) :
a < a * b

theorem lt_add_of_pos_left {α : Type u} [ordered_cancel_add_comm_monoid α] (a : α) {b : α} (h : 0 < b) :
a < b + a

theorem lt_mul_of_one_lt_left' {α : Type u} [ordered_cancel_comm_monoid α] (a : α) {b : α} (h : 1 < b) :
a < b * a

theorem le_of_mul_le_mul_right' {α : Type u} [ordered_cancel_comm_monoid α] {a b c : α} (h : a * b ≤ c * b) :
a ≤ c

theorem le_of_add_le_add_right {α : Type u} [ordered_cancel_add_comm_monoid α] {a b c : α} (h : a + b ≤ c + b) :
a ≤ c

theorem mul_lt_one {α : Type u} [ordered_cancel_comm_monoid α] {a b : α} (ha : a < 1) (hb : b < 1) :
a * b < 1

theorem add_neg {α : Type u} [ordered_cancel_add_comm_monoid α] {a b : α} (ha : a < 0) (hb : b < 0) :
a + b < 0

theorem add_neg_of_neg_of_nonpos {α : Type u} [ordered_cancel_add_comm_monoid α] {a b : α} (ha : a < 0) (hb : b ≤ 0) :
a + b < 0

theorem mul_lt_one_of_lt_one_of_le_one {α : Type u} [ordered_cancel_comm_monoid α] {a b : α} (ha : a < 1) (hb : b ≤ 1) :
a * b < 1

theorem mul_lt_one_of_le_one_of_lt_one {α : Type u} [ordered_cancel_comm_monoid α] {a b : α} (ha : a ≤ 1) (hb : b < 1) :
a * b < 1

theorem add_neg_of_nonpos_of_neg {α : Type u} [ordered_cancel_add_comm_monoid α] {a b : α} (ha : a ≤ 0) (hb : b < 0) :
a + b < 0

theorem lt_add_of_pos_of_le {α : Type u} [ordered_cancel_add_comm_monoid α] {a b c : α} (ha : 0 < a) (hbc : b ≤ c) :
b < a + c

theorem lt_mul_of_one_lt_of_le {α : Type u} [ordered_cancel_comm_monoid α] {a b c : α} (ha : 1 < a) (hbc : b ≤ c) :
b < a * c

theorem lt_add_of_le_of_pos {α : Type u} [ordered_cancel_add_comm_monoid α] {a b c : α} (hbc : b ≤ c) (ha : 0 < a) :
b < c + a

theorem lt_mul_of_le_of_one_lt {α : Type u} [ordered_cancel_comm_monoid α] {a b c : α} (hbc : b ≤ c) (ha : 1 < a) :
b < c * a

theorem add_le_of_nonpos_of_le {α : Type u} [ordered_cancel_add_comm_monoid α] {a b c : α} (ha : a ≤ 0) (hbc : b ≤ c) :
a + b ≤ c

theorem mul_le_of_le_one_of_le {α : Type u} [ordered_cancel_comm_monoid α] {a b c : α} (ha : a ≤ 1) (hbc : b ≤ c) :
a * b ≤ c

theorem mul_le_of_le_of_le_one {α : Type u} [ordered_cancel_comm_monoid α] {a b c : α} (hbc : b ≤ c) (ha : a ≤ 1) :
b * a ≤ c

theorem add_le_of_le_of_nonpos {α : Type u} [ordered_cancel_add_comm_monoid α] {a b c : α} (hbc : b ≤ c) (ha : a ≤ 0) :
b + a ≤ c

theorem mul_lt_of_lt_one_of_le {α : Type u} [ordered_cancel_comm_monoid α] {a b c : α} (ha : a < 1) (hbc : b ≤ c) :
a * b < c

theorem add_lt_of_neg_of_le {α : Type u} [ordered_cancel_add_comm_monoid α] {a b c : α} (ha : a < 0) (hbc : b ≤ c) :
a + b < c

theorem add_lt_of_le_of_neg {α : Type u} [ordered_cancel_add_comm_monoid α] {a b c : α} (hbc : b ≤ c) (ha : a < 0) :
b + a < c

theorem mul_lt_of_le_of_lt_one {α : Type u} [ordered_cancel_comm_monoid α] {a b c : α} (hbc : b ≤ c) (ha : a < 1) :
b * a < c

theorem lt_mul_of_one_le_of_lt {α : Type u} [ordered_cancel_comm_monoid α] {a b c : α} (ha : 1 ≤ a) (hbc : b < c) :
b < a * c

theorem lt_add_of_nonneg_of_lt {α : Type u} [ordered_cancel_add_comm_monoid α] {a b c : α} (ha : 0 ≤ a) (hbc : b < c) :
b < a + c

theorem lt_mul_of_lt_of_one_le {α : Type u} [ordered_cancel_comm_monoid α] {a b c : α} (hbc : b < c) (ha : 1 ≤ a) :
b < c * a

theorem lt_add_of_lt_of_nonneg {α : Type u} [ordered_cancel_add_comm_monoid α] {a b c : α} (hbc : b < c) (ha : 0 ≤ a) :
b < c + a

theorem lt_mul_of_one_lt_of_lt {α : Type u} [ordered_cancel_comm_monoid α] {a b c : α} (ha : 1 < a) (hbc : b < c) :
b < a * c

theorem lt_add_of_pos_of_lt {α : Type u} [ordered_cancel_add_comm_monoid α] {a b c : α} (ha : 0 < a) (hbc : b < c) :
b < a + c

theorem lt_mul_of_lt_of_one_lt {α : Type u} [ordered_cancel_comm_monoid α] {a b c : α} (hbc : b < c) (ha : 1 < a) :
b < c * a

theorem lt_add_of_lt_of_pos {α : Type u} [ordered_cancel_add_comm_monoid α] {a b c : α} (hbc : b < c) (ha : 0 < a) :
b < c + a

theorem mul_lt_of_le_one_of_lt {α : Type u} [ordered_cancel_comm_monoid α] {a b c : α} (ha : a ≤ 1) (hbc : b < c) :
a * b < c

theorem add_lt_of_nonpos_of_lt {α : Type u} [ordered_cancel_add_comm_monoid α] {a b c : α} (ha : a ≤ 0) (hbc : b < c) :
a + b < c

theorem add_lt_of_lt_of_nonpos {α : Type u} [ordered_cancel_add_comm_monoid α] {a b c : α} (hbc : b < c) (ha : a ≤ 0) :
b + a < c

theorem mul_lt_of_lt_of_le_one {α : Type u} [ordered_cancel_comm_monoid α] {a b c : α} (hbc : b < c) (ha : a ≤ 1) :
b * a < c

theorem add_lt_of_neg_of_lt {α : Type u} [ordered_cancel_add_comm_monoid α] {a b c : α} (ha : a < 0) (hbc : b < c) :
a + b < c

theorem mul_lt_of_lt_one_of_lt {α : Type u} [ordered_cancel_comm_monoid α] {a b c : α} (ha : a < 1) (hbc : b < c) :
a * b < c

theorem mul_lt_of_lt_of_lt_one {α : Type u} [ordered_cancel_comm_monoid α] {a b c : α} (hbc : b < c) (ha : a < 1) :
b * a < c

theorem add_lt_of_lt_of_neg {α : Type u} [ordered_cancel_add_comm_monoid α] {a b c : α} (hbc : b < c) (ha : a < 0) :
b + a < c

@[simp]
theorem mul_le_mul_iff_left {α : Type u} [ordered_cancel_comm_monoid α] (a : α) {b c : α} :
a * b ≤ a * c ↔ b ≤ c

@[simp]
theorem add_le_add_iff_left {α : Type u} [ordered_cancel_add_comm_monoid α] (a : α) {b c : α} :
a + b ≤ a + c ↔ b ≤ c

@[simp]
theorem mul_le_mul_iff_right {α : Type u} [ordered_cancel_comm_monoid α] {a b : α} (c : α) :
a * c ≤ b * c ↔ a ≤ b

@[simp]
theorem add_le_add_iff_right {α : Type u} [ordered_cancel_add_comm_monoid α] {a b : α} (c : α) :
a + c ≤ b + c ↔ a ≤ b

@[simp]
theorem mul_lt_mul_iff_left {α : Type u} [ordered_cancel_comm_monoid α] (a : α) {b c : α} :
a * b < a * c ↔ b < c

@[simp]
theorem add_lt_add_iff_left {α : Type u} [ordered_cancel_add_comm_monoid α] (a : α) {b c : α} :
a + b < a + c ↔ b < c

@[simp]
theorem mul_lt_mul_iff_right {α : Type u} [ordered_cancel_comm_monoid α] {a b : α} (c : α) :
a * c < b * c ↔ a < b

@[simp]
theorem add_lt_add_iff_right {α : Type u} [ordered_cancel_add_comm_monoid α] {a b : α} (c : α) :
a + c < b + c ↔ a < b

@[simp]
theorem le_add_iff_nonneg_right {α : Type u} [ordered_cancel_add_comm_monoid α] (a : α) {b : α} :
a ≤ a + b ↔ 0 ≤ b

@[simp]
theorem le_mul_iff_one_le_right' {α : Type u} [ordered_cancel_comm_monoid α] (a : α) {b : α} :
a ≤ a * b ↔ 1 ≤ b

@[simp]
theorem le_add_iff_nonneg_left {α : Type u} [ordered_cancel_add_comm_monoid α] (a : α) {b : α} :
a ≤ b + a ↔ 0 ≤ b

@[simp]
theorem le_mul_iff_one_le_left' {α : Type u} [ordered_cancel_comm_monoid α] (a : α) {b : α} :
a ≤ b * a ↔ 1 ≤ b

@[simp]
theorem lt_add_iff_pos_right {α : Type u} [ordered_cancel_add_comm_monoid α] (a : α) {b : α} :
a < a + b ↔ 0 < b

@[simp]
theorem lt_mul_iff_one_lt_right' {α : Type u} [ordered_cancel_comm_monoid α] (a : α) {b : α} :
a < a * b ↔ 1 < b

@[simp]
theorem lt_add_iff_pos_left {α : Type u} [ordered_cancel_add_comm_monoid α] (a : α) {b : α} :
a < b + a ↔ 0 < b

@[simp]
theorem lt_mul_iff_one_lt_left' {α : Type u} [ordered_cancel_comm_monoid α] (a : α) {b : α} :
a < b * a ↔ 1 < b

@[simp]
theorem add_le_iff_nonpos_left {α : Type u} [ordered_cancel_add_comm_monoid α] {a b : α} :
a + b ≤ b ↔ a ≤ 0

@[simp]
theorem mul_le_iff_le_one_left' {α : Type u} [ordered_cancel_comm_monoid α] {a b : α} :
a * b ≤ b ↔ a ≤ 1

@[simp]
theorem add_le_iff_nonpos_right {α : Type u} [ordered_cancel_add_comm_monoid α] {a b : α} :
a + b ≤ a ↔ b ≤ 0

@[simp]
theorem mul_le_iff_le_one_right' {α : Type u} [ordered_cancel_comm_monoid α] {a b : α} :
a * b ≤ a ↔ b ≤ 1

@[simp]
theorem add_lt_iff_neg_right {α : Type u} [ordered_cancel_add_comm_monoid α] {a b : α} :
a + b < b ↔ a < 0

@[simp]
theorem mul_lt_iff_lt_one_right' {α : Type u} [ordered_cancel_comm_monoid α] {a b : α} :
a * b < b ↔ a < 1

@[simp]
theorem add_lt_iff_neg_left {α : Type u} [ordered_cancel_add_comm_monoid α] {a b : α} :
a + b < a ↔ b < 0

@[simp]
theorem mul_lt_iff_lt_one_left' {α : Type u} [ordered_cancel_comm_monoid α] {a b : α} :
a * b < a ↔ b < 1

theorem mul_eq_one_iff_eq_one_of_one_le {α : Type u} [ordered_cancel_comm_monoid α] {a b : α} (ha : 1 ≤ a) (hb : 1 ≤ b) :
a * b = 1 ↔ a = 1 ∧ b = 1

theorem add_eq_zero_iff_eq_zero_of_nonneg {α : Type u} [ordered_cancel_add_comm_monoid α] {a b : α} (ha : 0 ≤ a) (hb : 0 ≤ b) :
a + b = 0 ↔ a = 0 ∧ b = 0

theorem monotone.mul_strict_mono' {α : Type u} [ordered_cancel_comm_monoid α] {β : Type u_1} [preorder β] {f g : β → α} (hf : monotone f) (hg : strict_mono g) :
strict_mono (λ (x : β), (f x) * g x)

theorem monotone.add_strict_mono {α : Type u} [ordered_cancel_add_comm_monoid α] {β : Type u_1} [preorder β] {f g : β → α} (hf : monotone f) (hg : strict_mono g) :
strict_mono (λ (x : β), f x + g x)

theorem strict_mono.add_monotone {α : Type u} [ordered_cancel_add_comm_monoid α] {β : Type u_1} [preorder β] {f g : β → α} (hf : strict_mono f) (hg : monotone g) :
strict_mono (λ (x : β), f x + g x)

theorem strict_mono.mul_monotone' {α : Type u} [ordered_cancel_comm_monoid α] {β : Type u_1} [preorder β] {f g : β → α} (hf : strict_mono f) (hg : monotone g) :
strict_mono (λ (x : β), (f x) * g x)

theorem strict_mono.add_const {α : Type u} [ordered_cancel_add_comm_monoid α] {β : Type u_1} [preorder β] {f : β → α} (hf : strict_mono f) (c : α) :
strict_mono (λ (x : β), f x + c)

theorem strict_mono.mul_const' {α : Type u} [ordered_cancel_comm_monoid α] {β : Type u_1} [preorder β] {f : β → α} (hf : strict_mono f) (c : α) :
strict_mono (λ (x : β), (f x) * c)

theorem strict_mono.const_add {α : Type u} [ordered_cancel_add_comm_monoid α] {β : Type u_1} [preorder β] {f : β → α} (hf : strict_mono f) (c : α) :
strict_mono (λ (x : β), c + f x)

theorem strict_mono.const_mul' {α : Type u} [ordered_cancel_comm_monoid α] {β : Type u_1} [preorder β] {f : β → α} (hf : strict_mono f) (c : α) :
strict_mono (λ (x : β), c * f x)

theorem with_top.add_lt_add_iff_left {α : Type u} [ordered_cancel_add_comm_monoid α] {a b c : with_top α} (a_1 : a < ⊤) :
a + c < a + b ↔ c < b

theorem with_top.add_lt_add_iff_right {α : Type u} [ordered_cancel_add_comm_monoid α] {a b c : with_top α} (a_1 : a < ⊤) :
c + a < b + a ↔ c < b

@[class]
structure ordered_add_comm_group (α : Type u) :
Type u
  • add : α → α → α
  • add_assoc : ∀ (a b c_1 : α), a + b + c_1 = a + (b + c_1)
  • zero : α
  • zero_add : ∀ (a : α), 0 + a = a
  • add_zero : ∀ (a : α), a + 0 = a
  • neg : α → α
  • add_left_neg : ∀ (a : α), -a + a = 0
  • add_comm : ∀ (a b : α), a + b = b + a
  • le : α → α → Prop
  • lt : α → α → Prop
  • le_refl : ∀ (a : α), a ≤ a
  • le_trans : ∀ (a b c_1 : α), a ≤ b → b ≤ c_1 → a ≤ c_1
  • lt_iff_le_not_le : (∀ (a b : α), a < b ↔ a ≤ b ∧ ¬b ≤ a) . "order_laws_tac"
  • le_antisymm : ∀ (a b : α), a ≤ b → b ≤ a → a = b
  • add_le_add_left : ∀ (a b : α), a ≤ b → ∀ (c_1 : α), c_1 + a ≤ c_1 + b

An ordered additive commutative group is an additive commutative group with a partial order in which addition is strictly monotone.

Instances
@[instance]

@[class]
structure ordered_comm_group (α : Type u) :
Type u
  • mul : α → α → α
  • mul_assoc : ∀ (a b c_1 : α), (a * b) * c_1 = a * b * c_1
  • one : α
  • one_mul : ∀ (a : α), 1 * a = a
  • mul_one : ∀ (a : α), a * 1 = a
  • inv : α → α
  • mul_left_inv : ∀ (a : α), a⁻¹ * a = 1
  • mul_comm : ∀ (a b : α), a * b = b * a
  • le : α → α → Prop
  • lt : α → α → Prop
  • le_refl : ∀ (a : α), a ≤ a
  • le_trans : ∀ (a b c_1 : α), a ≤ b → b ≤ c_1 → a ≤ c_1
  • lt_iff_le_not_le : (∀ (a b : α), a < b ↔ a ≤ b ∧ ¬b ≤ a) . "order_laws_tac"
  • le_antisymm : ∀ (a b : α), a ≤ b → b ≤ a → a = b
  • mul_le_mul_left : ∀ (a b : α), a ≤ b → ∀ (c_1 : α), c_1 * a ≤ c_1 * b

An ordered commutative group is an commutative group with a partial order in which multiplication is strictly monotone.

Instances
@[instance]

@[instance]

The units of an ordered commutative monoid form an ordered commutative group.

Equations
theorem ordered_comm_group.mul_lt_mul_left' {α : Type u} [ordered_comm_group α] (a b : α) (h : a < b) (c : α) :
c * a < c * b

theorem ordered_add_comm_group.add_lt_add_left {α : Type u} [ordered_add_comm_group α] (a b : α) (h : a < b) (c : α) :
c + a < c + b

theorem ordered_add_comm_group.le_of_add_le_add_left {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : a + b ≤ a + c) :
b ≤ c

theorem ordered_comm_group.le_of_mul_le_mul_left {α : Type u} [ordered_comm_group α] {a b c : α} (h : a * b ≤ a * c) :
b ≤ c

theorem ordered_comm_group.lt_of_mul_lt_mul_left {α : Type u} [ordered_comm_group α] {a b c : α} (h : a * b < a * c) :
b < c

theorem ordered_add_comm_group.lt_of_add_lt_add_left {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : a + b < a + c) :
b < c

theorem neg_le_neg {α : Type u} [ordered_add_comm_group α] {a b : α} (h : a ≤ b) :
-b ≤ -a

theorem inv_le_inv' {α : Type u} [ordered_comm_group α] {a b : α} (h : a ≤ b) :

theorem le_of_neg_le_neg {α : Type u} [ordered_add_comm_group α] {a b : α} (h : -b ≤ -a) :
a ≤ b

theorem le_of_inv_le_inv {α : Type u} [ordered_comm_group α] {a b : α} (h : b⁻¹ ≤ a⁻¹) :
a ≤ b

theorem one_le_of_inv_le_one {α : Type u} [ordered_comm_group α] {a : α} (h : a⁻¹ ≤ 1) :
1 ≤ a

theorem nonneg_of_neg_nonpos {α : Type u} [ordered_add_comm_group α] {a : α} (h : -a ≤ 0) :
0 ≤ a

theorem inv_le_one_of_one_le {α : Type u} [ordered_comm_group α] {a : α} (h : 1 ≤ a) :

theorem neg_nonpos_of_nonneg {α : Type u} [ordered_add_comm_group α] {a : α} (h : 0 ≤ a) :
-a ≤ 0

theorem le_one_of_one_le_inv {α : Type u} [ordered_comm_group α] {a : α} (h : 1 ≤ a⁻¹) :
a ≤ 1

theorem nonpos_of_neg_nonneg {α : Type u} [ordered_add_comm_group α] {a : α} (h : 0 ≤ -a) :
a ≤ 0

theorem one_le_inv_of_le_one {α : Type u} [ordered_comm_group α] {a : α} (h : a ≤ 1) :

theorem neg_nonneg_of_nonpos {α : Type u} [ordered_add_comm_group α] {a : α} (h : a ≤ 0) :
0 ≤ -a

theorem neg_lt_neg {α : Type u} [ordered_add_comm_group α] {a b : α} (h : a < b) :
-b < -a

theorem inv_lt_inv' {α : Type u} [ordered_comm_group α] {a b : α} (h : a < b) :

theorem lt_of_inv_lt_inv {α : Type u} [ordered_comm_group α] {a b : α} (h : b⁻¹ < a⁻¹) :
a < b

theorem lt_of_neg_lt_neg {α : Type u} [ordered_add_comm_group α] {a b : α} (h : -b < -a) :
a < b

theorem pos_of_neg_neg {α : Type u} [ordered_add_comm_group α] {a : α} (h : -a < 0) :
0 < a

theorem one_lt_of_inv_inv {α : Type u} [ordered_comm_group α] {a : α} (h : a⁻¹ < 1) :
1 < a

theorem inv_inv_of_one_lt {α : Type u} [ordered_comm_group α] {a : α} (h : 1 < a) :
a⁻¹ < 1

theorem neg_neg_of_pos {α : Type u} [ordered_add_comm_group α] {a : α} (h : 0 < a) :
-a < 0

theorem neg_of_neg_pos {α : Type u} [ordered_add_comm_group α] {a : α} (h : 0 < -a) :
a < 0

theorem inv_of_one_lt_inv {α : Type u} [ordered_comm_group α] {a : α} (h : 1 < a⁻¹) :
a < 1

theorem one_lt_inv_of_inv {α : Type u} [ordered_comm_group α] {a : α} (h : a < 1) :
1 < a⁻¹

theorem neg_pos_of_neg {α : Type u} [ordered_add_comm_group α] {a : α} (h : a < 0) :
0 < -a

theorem le_neg_of_le_neg {α : Type u} [ordered_add_comm_group α] {a b : α} (h : a ≤ -b) :
b ≤ -a

theorem le_inv_of_le_inv {α : Type u} [ordered_comm_group α] {a b : α} (h : a ≤ b⁻¹) :

theorem inv_le_of_inv_le {α : Type u} [ordered_comm_group α] {a b : α} (h : a⁻¹ ≤ b) :

theorem neg_le_of_neg_le {α : Type u} [ordered_add_comm_group α] {a b : α} (h : -a ≤ b) :
-b ≤ a

theorem lt_neg_of_lt_neg {α : Type u} [ordered_add_comm_group α] {a b : α} (h : a < -b) :
b < -a

theorem lt_inv_of_lt_inv {α : Type u} [ordered_comm_group α] {a b : α} (h : a < b⁻¹) :
b < a⁻¹

theorem inv_lt_of_inv_lt {α : Type u} [ordered_comm_group α] {a b : α} (h : a⁻¹ < b) :
b⁻¹ < a

theorem neg_lt_of_neg_lt {α : Type u} [ordered_add_comm_group α] {a b : α} (h : -a < b) :
-b < a

theorem add_le_of_le_neg_add {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : b ≤ -a + c) :
a + b ≤ c

theorem mul_le_of_le_inv_mul {α : Type u} [ordered_comm_group α] {a b c : α} (h : b ≤ a⁻¹ * c) :
a * b ≤ c

theorem le_inv_mul_of_mul_le {α : Type u} [ordered_comm_group α] {a b c : α} (h : a * b ≤ c) :
b ≤ a⁻¹ * c

theorem le_neg_add_of_add_le {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : a + b ≤ c) :
b ≤ -a + c

theorem le_mul_of_inv_mul_le {α : Type u} [ordered_comm_group α] {a b c : α} (h : b⁻¹ * a ≤ c) :
a ≤ b * c

theorem le_add_of_neg_add_le {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : -b + a ≤ c) :
a ≤ b + c

theorem neg_add_le_of_le_add {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : a ≤ b + c) :
-b + a ≤ c

theorem inv_mul_le_of_le_mul {α : Type u} [ordered_comm_group α] {a b c : α} (h : a ≤ b * c) :
b⁻¹ * a ≤ c

theorem le_mul_of_inv_mul_le_left {α : Type u} [ordered_comm_group α] {a b c : α} (h : b⁻¹ * a ≤ c) :
a ≤ b * c

theorem le_add_of_neg_add_le_left {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : -b + a ≤ c) :
a ≤ b + c

theorem neg_add_le_left_of_le_add {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : a ≤ b + c) :
-b + a ≤ c

theorem inv_mul_le_left_of_le_mul {α : Type u} [ordered_comm_group α] {a b c : α} (h : a ≤ b * c) :
b⁻¹ * a ≤ c

theorem le_mul_of_inv_mul_le_right {α : Type u} [ordered_comm_group α] {a b c : α} (h : c⁻¹ * a ≤ b) :
a ≤ b * c

theorem le_add_of_neg_add_le_right {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : -c + a ≤ b) :
a ≤ b + c

theorem neg_add_le_right_of_le_add {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : a ≤ b + c) :
-c + a ≤ b

theorem inv_mul_le_right_of_le_mul {α : Type u} [ordered_comm_group α] {a b c : α} (h : a ≤ b * c) :
c⁻¹ * a ≤ b

theorem add_lt_of_lt_neg_add {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : b < -a + c) :
a + b < c

theorem mul_lt_of_lt_inv_mul {α : Type u} [ordered_comm_group α] {a b c : α} (h : b < a⁻¹ * c) :
a * b < c

theorem lt_inv_mul_of_mul_lt {α : Type u} [ordered_comm_group α] {a b c : α} (h : a * b < c) :
b < a⁻¹ * c

theorem lt_neg_add_of_add_lt {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : a + b < c) :
b < -a + c

theorem lt_add_of_neg_add_lt {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : -b + a < c) :
a < b + c

theorem lt_mul_of_inv_mul_lt {α : Type u} [ordered_comm_group α] {a b c : α} (h : b⁻¹ * a < c) :
a < b * c

theorem neg_add_lt_of_lt_add {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : a < b + c) :
-b + a < c

theorem inv_mul_lt_of_lt_mul {α : Type u} [ordered_comm_group α] {a b c : α} (h : a < b * c) :
b⁻¹ * a < c

theorem lt_add_of_neg_add_lt_left {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : -b + a < c) :
a < b + c

theorem lt_mul_of_inv_mul_lt_left {α : Type u} [ordered_comm_group α] {a b c : α} (h : b⁻¹ * a < c) :
a < b * c

theorem inv_mul_lt_left_of_lt_mul {α : Type u} [ordered_comm_group α] {a b c : α} (h : a < b * c) :
b⁻¹ * a < c

theorem neg_add_lt_left_of_lt_add {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : a < b + c) :
-b + a < c

theorem lt_add_of_neg_add_lt_right {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : -c + a < b) :
a < b + c

theorem lt_mul_of_inv_mul_lt_right {α : Type u} [ordered_comm_group α] {a b c : α} (h : c⁻¹ * a < b) :
a < b * c

theorem inv_mul_lt_right_of_lt_mul {α : Type u} [ordered_comm_group α] {a b c : α} (h : a < b * c) :
c⁻¹ * a < b

theorem neg_add_lt_right_of_lt_add {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : a < b + c) :
-c + a < b

@[simp]
theorem inv_lt_one_iff_one_lt {α : Type u} [ordered_comm_group α] {a : α} :
a⁻¹ < 1 ↔ 1 < a

@[simp]
theorem neg_neg_iff_pos {α : Type u} [ordered_add_comm_group α] {a : α} :
-a < 0 ↔ 0 < a

@[simp]
theorem neg_le_neg_iff {α : Type u} [ordered_add_comm_group α] {a b : α} :
-a ≤ -b ↔ b ≤ a

@[simp]
theorem inv_le_inv_iff {α : Type u} [ordered_comm_group α] {a b : α} :

theorem neg_le {α : Type u} [ordered_add_comm_group α] {a b : α} :
-a ≤ b ↔ -b ≤ a

theorem inv_le' {α : Type u} [ordered_comm_group α] {a b : α} :

theorem le_neg {α : Type u} [ordered_add_comm_group α] {a b : α} :
a ≤ -b ↔ b ≤ -a

theorem le_inv' {α : Type u} [ordered_comm_group α] {a b : α} :

theorem inv_le_iff_one_le_mul {α : Type u} [ordered_comm_group α] {a b : α} :
a⁻¹ ≤ b ↔ 1 ≤ a * b

theorem neg_le_iff_add_nonneg {α : Type u} [ordered_add_comm_group α] {a b : α} :
-a ≤ b ↔ 0 ≤ a + b

theorem le_neg_iff_add_nonpos {α : Type u} [ordered_add_comm_group α] {a b : α} :
a ≤ -b ↔ a + b ≤ 0

theorem le_inv_iff_mul_le_one {α : Type u} [ordered_comm_group α] {a b : α} :
a ≤ b⁻¹ ↔ a * b ≤ 1

@[simp]
theorem neg_nonpos {α : Type u} [ordered_add_comm_group α] {a : α} :
-a ≤ 0 ↔ 0 ≤ a

@[simp]
theorem inv_le_one' {α : Type u} [ordered_comm_group α] {a : α} :
a⁻¹ ≤ 1 ↔ 1 ≤ a

@[simp]
theorem one_le_inv' {α : Type u} [ordered_comm_group α] {a : α} :
1 ≤ a⁻¹ ↔ a ≤ 1

@[simp]
theorem neg_nonneg {α : Type u} [ordered_add_comm_group α] {a : α} :
0 ≤ -a ↔ a ≤ 0

theorem inv_le_self {α : Type u} [ordered_comm_group α] {a : α} (h : 1 ≤ a) :

theorem neg_le_self {α : Type u} [ordered_add_comm_group α] {a : α} (h : 0 ≤ a) :
-a ≤ a

theorem self_le_inv {α : Type u} [ordered_comm_group α] {a : α} (h : a ≤ 1) :

theorem self_le_neg {α : Type u} [ordered_add_comm_group α] {a : α} (h : a ≤ 0) :
a ≤ -a

@[simp]
theorem inv_lt_inv_iff {α : Type u} [ordered_comm_group α] {a b : α} :
a⁻¹ < b⁻¹ ↔ b < a

@[simp]
theorem neg_lt_neg_iff {α : Type u} [ordered_add_comm_group α] {a b : α} :
-a < -b ↔ b < a

theorem inv_lt_one' {α : Type u} [ordered_comm_group α] {a : α} :
a⁻¹ < 1 ↔ 1 < a

theorem neg_lt_zero {α : Type u} [ordered_add_comm_group α] {a : α} :
-a < 0 ↔ 0 < a

theorem neg_pos {α : Type u} [ordered_add_comm_group α] {a : α} :
0 < -a ↔ a < 0

theorem one_lt_inv' {α : Type u} [ordered_comm_group α] {a : α} :
1 < a⁻¹ ↔ a < 1

theorem neg_lt {α : Type u} [ordered_add_comm_group α] {a b : α} :
-a < b ↔ -b < a

theorem inv_lt' {α : Type u} [ordered_comm_group α] {a b : α} :
a⁻¹ < b ↔ b⁻¹ < a

theorem lt_inv' {α : Type u} [ordered_comm_group α] {a b : α} :
a < b⁻¹ ↔ b < a⁻¹

theorem lt_neg {α : Type u} [ordered_add_comm_group α] {a b : α} :
a < -b ↔ b < -a

theorem le_neg_add_iff_add_le {α : Type u} [ordered_add_comm_group α] {a b c : α} :
b ≤ -a + c ↔ a + b ≤ c

theorem le_inv_mul_iff_mul_le {α : Type u} [ordered_comm_group α] {a b c : α} :
b ≤ a⁻¹ * c ↔ a * b ≤ c

@[simp]
theorem inv_mul_le_iff_le_mul {α : Type u} [ordered_comm_group α] {a b c : α} :
b⁻¹ * a ≤ c ↔ a ≤ b * c

@[simp]
theorem neg_add_le_iff_le_add {α : Type u} [ordered_add_comm_group α] {a b c : α} :
-b + a ≤ c ↔ a ≤ b + c

theorem mul_inv_le_iff_le_mul {α : Type u} [ordered_comm_group α] {a b c : α} :
a * c⁻¹ ≤ b ↔ a ≤ b * c

theorem add_neg_le_iff_le_add {α : Type u} [ordered_add_comm_group α] {a b c : α} :
a + -c ≤ b ↔ a ≤ b + c

@[simp]
theorem mul_inv_le_iff_le_mul' {α : Type u} [ordered_comm_group α] {a b c : α} :
a * b⁻¹ ≤ c ↔ a ≤ b * c

@[simp]
theorem add_neg_le_iff_le_add' {α : Type u} [ordered_add_comm_group α] {a b c : α} :
a + -b ≤ c ↔ a ≤ b + c

theorem inv_mul_le_iff_le_mul' {α : Type u} [ordered_comm_group α] {a b c : α} :
c⁻¹ * a ≤ b ↔ a ≤ b * c

theorem neg_add_le_iff_le_add' {α : Type u} [ordered_add_comm_group α] {a b c : α} :
-c + a ≤ b ↔ a ≤ b + c

@[simp]
theorem lt_inv_mul_iff_mul_lt {α : Type u} [ordered_comm_group α] {a b c : α} :
b < a⁻¹ * c ↔ a * b < c

@[simp]
theorem lt_neg_add_iff_add_lt {α : Type u} [ordered_add_comm_group α] {a b c : α} :
b < -a + c ↔ a + b < c

@[simp]
theorem inv_mul_lt_iff_lt_mul {α : Type u} [ordered_comm_group α] {a b c : α} :
b⁻¹ * a < c ↔ a < b * c

@[simp]
theorem neg_add_lt_iff_lt_add {α : Type u} [ordered_add_comm_group α] {a b c : α} :
-b + a < c ↔ a < b + c

theorem neg_add_lt_iff_lt_add_right {α : Type u} [ordered_add_comm_group α] {a b c : α} :
-c + a < b ↔ a < b + c

theorem inv_mul_lt_iff_lt_mul_right {α : Type u} [ordered_comm_group α] {a b c : α} :
c⁻¹ * a < b ↔ a < b * c

theorem sub_le_sub_iff {α : Type u} [ordered_add_comm_group α] (a b c d : α) :
a + -b ≤ c + -d ↔ a + d ≤ c + b

theorem div_le_div_iff' {α : Type u} [ordered_comm_group α] (a b c d : α) :
a * b⁻¹ ≤ c * d⁻¹ ↔ a * d ≤ c * b

theorem sub_nonneg_of_le {α : Type u} [ordered_add_comm_group α] {a b : α} (h : b ≤ a) :
0 ≤ a - b

theorem le_of_sub_nonneg {α : Type u} [ordered_add_comm_group α] {a b : α} (h : 0 ≤ a - b) :
b ≤ a

theorem sub_nonpos_of_le {α : Type u} [ordered_add_comm_group α] {a b : α} (h : a ≤ b) :
a - b ≤ 0

theorem le_of_sub_nonpos {α : Type u} [ordered_add_comm_group α] {a b : α} (h : a - b ≤ 0) :
a ≤ b

theorem sub_pos_of_lt {α : Type u} [ordered_add_comm_group α] {a b : α} (h : b < a) :
0 < a - b

theorem lt_of_sub_pos {α : Type u} [ordered_add_comm_group α] {a b : α} (h : 0 < a - b) :
b < a

theorem sub_neg_of_lt {α : Type u} [ordered_add_comm_group α] {a b : α} (h : a < b) :
a - b < 0

theorem lt_of_sub_neg {α : Type u} [ordered_add_comm_group α] {a b : α} (h : a - b < 0) :
a < b

theorem add_le_of_le_sub_left {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : b ≤ c - a) :
a + b ≤ c

theorem le_sub_left_of_add_le {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : a + b ≤ c) :
b ≤ c - a

theorem add_le_of_le_sub_right {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : a ≤ c - b) :
a + b ≤ c

theorem le_sub_right_of_add_le {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : a + b ≤ c) :
a ≤ c - b

theorem le_add_of_sub_left_le {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : a - b ≤ c) :
a ≤ b + c

theorem sub_left_le_of_le_add {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : a ≤ b + c) :
a - b ≤ c

theorem le_add_of_sub_right_le {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : a - c ≤ b) :
a ≤ b + c

theorem sub_right_le_of_le_add {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : a ≤ b + c) :
a - c ≤ b

theorem le_add_of_neg_le_sub_left {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : -a ≤ b - c) :
c ≤ a + b

theorem neg_le_sub_left_of_le_add {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : c ≤ a + b) :
-a ≤ b - c

theorem le_add_of_neg_le_sub_right {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : -b ≤ a - c) :
c ≤ a + b

theorem neg_le_sub_right_of_le_add {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : c ≤ a + b) :
-b ≤ a - c

theorem sub_le_of_sub_le {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : a - b ≤ c) :
a - c ≤ b

theorem sub_le_sub_left {α : Type u} [ordered_add_comm_group α] {a b : α} (h : a ≤ b) (c : α) :
c - b ≤ c - a

theorem sub_le_sub_right {α : Type u} [ordered_add_comm_group α] {a b : α} (h : a ≤ b) (c : α) :
a - c ≤ b - c

theorem sub_le_sub {α : Type u} [ordered_add_comm_group α] {a b c d : α} (hab : a ≤ b) (hcd : c ≤ d) :
a - d ≤ b - c

theorem add_lt_of_lt_sub_left {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : b < c - a) :
a + b < c

theorem lt_sub_left_of_add_lt {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : a + b < c) :
b < c - a

theorem add_lt_of_lt_sub_right {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : a < c - b) :
a + b < c

theorem lt_sub_right_of_add_lt {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : a + b < c) :
a < c - b

theorem lt_add_of_sub_left_lt {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : a - b < c) :
a < b + c

theorem sub_left_lt_of_lt_add {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : a < b + c) :
a - b < c

theorem lt_add_of_sub_right_lt {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : a - c < b) :
a < b + c

theorem sub_right_lt_of_lt_add {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : a < b + c) :
a - c < b

theorem lt_add_of_neg_lt_sub_left {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : -a < b - c) :
c < a + b

theorem neg_lt_sub_left_of_lt_add {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : c < a + b) :
-a < b - c

theorem lt_add_of_neg_lt_sub_right {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : -b < a - c) :
c < a + b

theorem neg_lt_sub_right_of_lt_add {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : c < a + b) :
-b < a - c

theorem sub_lt_of_sub_lt {α : Type u} [ordered_add_comm_group α] {a b c : α} (h : a - b < c) :
a - c < b

theorem sub_lt_sub_left {α : Type u} [ordered_add_comm_group α] {a b : α} (h : a < b) (c : α) :
c - b < c - a

theorem sub_lt_sub_right {α : Type u} [ordered_add_comm_group α] {a b : α} (h : a < b) (c : α) :
a - c < b - c

theorem sub_lt_sub {α : Type u} [ordered_add_comm_group α] {a b c d : α} (hab : a < b) (hcd : c < d) :
a - d < b - c

theorem sub_lt_sub_of_le_of_lt {α : Type u} [ordered_add_comm_group α] {a b c d : α} (hab : a ≤ b) (hcd : c < d) :
a - d < b - c

theorem sub_lt_sub_of_lt_of_le {α : Type u} [ordered_add_comm_group α] {a b c d : α} (hab : a < b) (hcd : c ≤ d) :
a - d < b - c

theorem sub_le_self {α : Type u} [ordered_add_comm_group α] (a : α) {b : α} (h : 0 ≤ b) :
a - b ≤ a

theorem sub_lt_self {α : Type u} [ordered_add_comm_group α] (a : α) {b : α} (h : 0 < b) :
a - b < a

@[simp]
theorem sub_le_sub_iff_left {α : Type u} [ordered_add_comm_group α] (a : α) {b c : α} :
a - b ≤ a - c ↔ c ≤ b

@[simp]
theorem sub_le_sub_iff_right {α : Type u} [ordered_add_comm_group α] {a b : α} (c : α) :
a - c ≤ b - c ↔ a ≤ b

@[simp]
theorem sub_lt_sub_iff_left {α : Type u} [ordered_add_comm_group α] (a : α) {b c : α} :
a - b < a - c ↔ c < b

@[simp]
theorem sub_lt_sub_iff_right {α : Type u} [ordered_add_comm_group α] {a b : α} (c : α) :
a - c < b - c ↔ a < b

@[simp]
theorem sub_nonneg {α : Type u} [ordered_add_comm_group α] {a b : α} :
0 ≤ a - b ↔ b ≤ a

@[simp]
theorem sub_nonpos {α : Type u} [ordered_add_comm_group α] {a b : α} :
a - b ≤ 0 ↔ a ≤ b

@[simp]
theorem sub_pos {α : Type u} [ordered_add_comm_group α] {a b : α} :
0 < a - b ↔ b < a

@[simp]
theorem sub_lt_zero {α : Type u} [ordered_add_comm_group α] {a b : α} :
a - b < 0 ↔ a < b

theorem le_sub_iff_add_le' {α : Type u} [ordered_add_comm_group α] {a b c : α} :
b ≤ c - a ↔ a + b ≤ c

theorem le_sub_iff_add_le {α : Type u} [ordered_add_comm_group α] {a b c : α} :
a ≤ c - b ↔ a + b ≤ c

theorem sub_le_iff_le_add' {α : Type u} [ordered_add_comm_group α] {a b c : α} :
a - b ≤ c ↔ a ≤ b + c

theorem sub_le_iff_le_add {α : Type u} [ordered_add_comm_group α] {a b c : α} :
a - c ≤ b ↔ a ≤ b + c

@[simp]
theorem neg_le_sub_iff_le_add {α : Type u} [ordered_add_comm_group α] {a b c : α} :
-b ≤ a - c ↔ c ≤ a + b

theorem neg_le_sub_iff_le_add' {α : Type u} [ordered_add_comm_group α] {a b c : α} :
-a ≤ b - c ↔ c ≤ a + b

theorem sub_le {α : Type u} [ordered_add_comm_group α] {a b c : α} :
a - b ≤ c ↔ a - c ≤ b

theorem le_sub {α : Type u} [ordered_add_comm_group α] {a b c : α} :
a ≤ b - c ↔ c ≤ b - a

theorem lt_sub_iff_add_lt' {α : Type u} [ordered_add_comm_group α] {a b c : α} :
b < c - a ↔ a + b < c

theorem lt_sub_iff_add_lt {α : Type u} [ordered_add_comm_group α] {a b c : α} :
a < c - b ↔ a + b < c

theorem sub_lt_iff_lt_add' {α : Type u} [ordered_add_comm_group α] {a b c : α} :
a - b < c ↔ a < b + c

theorem sub_lt_iff_lt_add {α : Type u} [ordered_add_comm_group α] {a b c : α} :
a - c < b ↔ a < b + c

@[simp]
theorem neg_lt_sub_iff_lt_add {α : Type u} [ordered_add_comm_group α] {a b c : α} :
-b < a - c ↔ c < a + b

theorem neg_lt_sub_iff_lt_add' {α : Type u} [ordered_add_comm_group α] {a b c : α} :
-a < b - c ↔ c < a + b

theorem sub_lt {α : Type u} [ordered_add_comm_group α] {a b c : α} :
a - b < c ↔ a - c < b

theorem lt_sub {α : Type u} [ordered_add_comm_group α] {a b c : α} :
a < b - c ↔ c < b - a

theorem sub_le_self_iff {α : Type u} [ordered_add_comm_group α] (a : α) {b : α} :
a - b ≤ a ↔ 0 ≤ b

theorem sub_lt_self_iff {α : Type u} [ordered_add_comm_group α] (a : α) {b : α} :
a - b < a ↔ 0 < b

def ordered_comm_group.mk' {α : Type u} [comm_group α] [partial_order α] (mul_le_mul_left : ∀ (a b : α), a ≤ b → ∀ (c : α), c * a ≤ c * b) :

Alternative constructor for ordered commutative groups, that avoids the field mul_lt_mul_left.

Equations
def ordered_add_comm_group.mk' {α : Type u} [add_comm_group α] [partial_order α] (mul_le_mul_left : ∀ (a b : α), a ≤ b → ∀ (c : α), c + a ≤ c + b) :

Alternative constructor for ordered commutative groups, that avoids the field mul_lt_mul_left.

@[class]
structure decidable_linear_ordered_cancel_add_comm_monoid (α : Type u) :
Type u
  • add : α → α → α
  • add_assoc : ∀ (a b c_1 : α), a + b + c_1 = a + (b + c_1)
  • zero : α
  • zero_add : ∀ (a : α), 0 + a = a
  • add_zero : ∀ (a : α), a + 0 = a
  • add_comm : ∀ (a b : α), a + b = b + a
  • add_left_cancel : ∀ (a b c_1 : α), a + b = a + c_1 → b = c_1
  • add_right_cancel : ∀ (a b c_1 : α), a + b = c_1 + b → a = c_1
  • le : α → α → Prop
  • lt : α → α → Prop
  • le_refl : ∀ (a : α), a ≤ a
  • le_trans : ∀ (a b c_1 : α), a ≤ b → b ≤ c_1 → a ≤ c_1
  • lt_iff_le_not_le : (∀ (a b : α), a < b ↔ a ≤ b ∧ ¬b ≤ a) . "order_laws_tac"
  • le_antisymm : ∀ (a b : α), a ≤ b → b ≤ a → a = b
  • add_le_add_left : ∀ (a b : α), a ≤ b → ∀ (c_1 : α), c_1 + a ≤ c_1 + b
  • le_of_add_le_add_left : ∀ (a b c_1 : α), a + b ≤ a + c_1 → b ≤ c_1
  • le_total : ∀ (a b : α), a ≤ b ∨ b ≤ a
  • decidable_le : decidable_rel has_le.le
  • decidable_eq : decidable_eq α
  • decidable_lt : decidable_rel has_lt.lt

A decidable linearly ordered cancellative additive commutative monoid is an additive commutative monoid with a decidable linear order in which addition is cancellative and strictly monotone.

Instances
theorem min_add_add_left {α : Type u} [decidable_linear_ordered_cancel_add_comm_monoid α] (a b c : α) :
min (a + b) (a + c) = a + min b c

theorem min_add_add_right {α : Type u} [decidable_linear_ordered_cancel_add_comm_monoid α] (a b c : α) :
min (a + c) (b + c) = min a b + c

theorem max_add_add_left {α : Type u} [decidable_linear_ordered_cancel_add_comm_monoid α] (a b c : α) :
max (a + b) (a + c) = a + max b c

theorem max_add_add_right {α : Type u} [decidable_linear_ordered_cancel_add_comm_monoid α] (a b c : α) :
max (a + c) (b + c) = max a b + c

@[class]
structure decidable_linear_ordered_add_comm_group (α : Type u) :
Type u
  • add : α → α → α
  • add_assoc : ∀ (a b c_1 : α), a + b + c_1 = a + (b + c_1)
  • zero : α
  • zero_add : ∀ (a : α), 0 + a = a
  • add_zero : ∀ (a : α), a + 0 = a
  • neg : α → α
  • add_left_neg : ∀ (a : α), -a + a = 0
  • add_comm : ∀ (a b : α), a + b = b + a
  • le : α → α → Prop
  • lt : α → α → Prop
  • le_refl : ∀ (a : α), a ≤ a
  • le_trans : ∀ (a b c_1 : α), a ≤ b → b ≤ c_1 → a ≤ c_1
  • lt_iff_le_not_le : (∀ (a b : α), a < b ↔ a ≤ b ∧ ¬b ≤ a) . "order_laws_tac"
  • le_antisymm : ∀ (a b : α), a ≤ b → b ≤ a → a = b
  • le_total : ∀ (a b : α), a ≤ b ∨ b ≤ a
  • decidable_le : decidable_rel has_le.le
  • decidable_eq : decidable_eq α
  • decidable_lt : decidable_rel has_lt.lt
  • add_le_add_left : ∀ (a b : α), a ≤ b → ∀ (c_1 : α), c_1 + a ≤ c_1 + b

A decidable linearly ordered additive commutative group is an additive commutative group with a decidable linear order in which addition is strictly monotone.

Instances
theorem decidable_linear_ordered_add_comm_group.add_lt_add_left {α : Type u} [decidable_linear_ordered_add_comm_group α] (a b : α) (h : a < b) (c : α) :
c + a < c + b

theorem max_neg_neg {α : Type u} [decidable_linear_ordered_add_comm_group α] (a b : α) :
max (-a) (-b) = -min a b

theorem min_eq_neg_max_neg_neg {α : Type u} [decidable_linear_ordered_add_comm_group α] (a b : α) :
min a b = -max (-a) (-b)

theorem min_neg_neg {α : Type u} [decidable_linear_ordered_add_comm_group α] (a b : α) :
min (-a) (-b) = -max a b

theorem max_eq_neg_min_neg_neg {α : Type u} [decidable_linear_ordered_add_comm_group α] (a b : α) :
max a b = -min (-a) (-b)

def abs {α : Type u} [decidable_linear_ordered_add_comm_group α] (a : α) :
α

abs a is the absolute value of a.

Equations
theorem abs_of_nonneg {α : Type u} [decidable_linear_ordered_add_comm_group α] {a : α} (h : 0 ≤ a) :
abs a = a

theorem abs_of_pos {α : Type u} [decidable_linear_ordered_add_comm_group α] {a : α} (h : 0 < a) :
abs a = a

theorem abs_of_nonpos {α : Type u} [decidable_linear_ordered_add_comm_group α] {a : α} (h : a ≤ 0) :
abs a = -a

theorem abs_of_neg {α : Type u} [decidable_linear_ordered_add_comm_group α] {a : α} (h : a < 0) :
abs a = -a

@[simp]
theorem abs_zero {α : Type u} [decidable_linear_ordered_add_comm_group α] :
abs 0 = 0

@[simp]
theorem abs_neg {α : Type u} [decidable_linear_ordered_add_comm_group α] (a : α) :
abs (-a) = abs a

theorem abs_pos_of_pos {α : Type u} [decidable_linear_ordered_add_comm_group α] {a : α} (h : 0 < a) :
0 < abs a

theorem abs_pos_of_neg {α : Type u} [decidable_linear_ordered_add_comm_group α] {a : α} (h : a < 0) :
0 < abs a

theorem abs_sub {α : Type u} [decidable_linear_ordered_add_comm_group α] (a b : α) :
abs (a - b) = abs (b - a)

theorem ne_zero_of_abs_ne_zero {α : Type u} [decidable_linear_ordered_add_comm_group α] {a : α} (h : abs a ≠ 0) :
a ≠ 0

theorem eq_zero_of_neg_eq {α : Type u} [decidable_linear_ordered_add_comm_group α] {a : α} (h : -a = a) :
a = 0

theorem abs_nonneg {α : Type u} [decidable_linear_ordered_add_comm_group α] (a : α) :
0 ≤ abs a

theorem abs_abs {α : Type u} [decidable_linear_ordered_add_comm_group α] (a : α) :
abs (abs a) = abs a

theorem le_abs_self {α : Type u} [decidable_linear_ordered_add_comm_group α] (a : α) :
a ≤ abs a

theorem neg_le_abs_self {α : Type u} [decidable_linear_ordered_add_comm_group α] (a : α) :
-a ≤ abs a

theorem eq_zero_of_abs_eq_zero {α : Type u} [decidable_linear_ordered_add_comm_group α] {a : α} (h : abs a = 0) :
a = 0

theorem eq_of_abs_sub_eq_zero {α : Type u} [decidable_linear_ordered_add_comm_group α] {a b : α} (h : abs (a - b) = 0) :
a = b

theorem abs_pos_of_ne_zero {α : Type u} [decidable_linear_ordered_add_comm_group α] {a : α} (h : a ≠ 0) :
0 < abs a

theorem abs_by_cases {α : Type u} [decidable_linear_ordered_add_comm_group α] (P : α → Prop) {a : α} (h1 : P a) (h2 : P (-a)) :
P (abs a)

theorem abs_le_of_le_of_neg_le {α : Type u} [decidable_linear_ordered_add_comm_group α] {a b : α} (h1 : a ≤ b) (h2 : -a ≤ b) :
abs a ≤ b

theorem abs_lt_of_lt_of_neg_lt {α : Type u} [decidable_linear_ordered_add_comm_group α] {a b : α} (h1 : a < b) (h2 : -a < b) :
abs a < b

theorem abs_add_le_abs_add_abs {α : Type u} [decidable_linear_ordered_add_comm_group α] (a b : α) :
abs (a + b) ≤ abs a + abs b

theorem abs_sub_abs_le_abs_sub {α : Type u} [decidable_linear_ordered_add_comm_group α] (a b : α) :
abs a - abs b ≤ abs (a - b)

theorem abs_sub_le {α : Type u} [decidable_linear_ordered_add_comm_group α] (a b c : α) :
abs (a - c) ≤ abs (a - b) + abs (b - c)

theorem abs_add_three {α : Type u} [decidable_linear_ordered_add_comm_group α] (a b c : α) :
abs (a + b + c) ≤ abs a + abs b + abs c

theorem dist_bdd_within_interval {α : Type u} [decidable_linear_ordered_add_comm_group α] {a b lb ub : α} (hal : lb ≤ a) (hau : a ≤ ub) (hbl : lb ≤ b) (hbu : b ≤ ub) :
abs (a - b) ≤ ub - lb

@[class]
structure nonneg_add_comm_group (α : Type u_1) :
Type u_1

This is not so much a new structure as a construction mechanism for ordered groups, by specifying only the "positive cone" of the group.

Instances

A nonneg_add_comm_group is a decidable_linear_ordered_add_comm_group if nonneg is total and decidable.

Equations
@[instance]
def multiplicative.preorder {α : Type u} [preorder α] :

Equations
@[instance]
def additive.preorder {α : Type u} [preorder α] :

Equations
@[instance]

Equations
@[instance]
def additive.linear_order {α : Type u} [linear_order α] :

Equations