[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝³ : Monoid M
inst✝² : Preorder M
inst✝¹ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x : M
inst✝ : CovariantClass M M (swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a b : M
hab : a ≤ b
⊢ a ^ 0 ≤ b ^ 0
[PROOFSTEP]
simp
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝³ : Monoid M
inst✝² : Preorder M
inst✝¹ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x : M
inst✝ : CovariantClass M M (swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a b : M
hab : a ≤ b
k : ℕ
⊢ a ^ (k + 1) ≤ b ^ (k + 1)
[PROOFSTEP]
rw [pow_succ, pow_succ]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝³ : Monoid M
inst✝² : Preorder M
inst✝¹ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x : M
inst✝ : CovariantClass M M (swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a b : M
hab : a ≤ b
k : ℕ
⊢ a * a ^ k ≤ b * b ^ k
[PROOFSTEP]
exact mul_le_mul' hab (pow_le_pow_of_le_left' hab k)
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝² : Monoid M
inst✝¹ : Preorder M
inst✝ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x a : M
H : 1 ≤ a
⊢ 1 ≤ a ^ 0
[PROOFSTEP]
simp
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝² : Monoid M
inst✝¹ : Preorder M
inst✝ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x a : M
H : 1 ≤ a
k : ℕ
⊢ 1 ≤ a ^ (k + 1)
[PROOFSTEP]
rw [pow_succ]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝² : Monoid M
inst✝¹ : Preorder M
inst✝ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x a : M
H : 1 ≤ a
k : ℕ
⊢ 1 ≤ a * a ^ k
[PROOFSTEP]
exact one_le_mul H (one_le_pow_of_one_le' H k)
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝² : Monoid M
inst✝¹ : Preorder M
inst✝ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x a : M
n m : ℕ
ha : 1 ≤ a
h : n ≤ m
k : ℕ
hk : n + k = m
⊢ a ^ n * a ^ k = a ^ m
[PROOFSTEP]
rw [← hk, pow_add]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝² : Monoid M
inst✝¹ : Preorder M
inst✝ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x a : M
ha : 1 < a
k : ℕ
hk : k ≠ 0
⊢ 1 < a ^ k
[PROOFSTEP]
rcases Nat.exists_eq_succ_of_ne_zero hk with ⟨l, rfl⟩
[GOAL]
case intro
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝² : Monoid M
inst✝¹ : Preorder M
inst✝ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x a : M
ha : 1 < a
l : ℕ
hk : Nat.succ l ≠ 0
⊢ 1 < a ^ Nat.succ l
[PROOFSTEP]
clear hk
[GOAL]
case intro
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝² : Monoid M
inst✝¹ : Preorder M
inst✝ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x a : M
ha : 1 < a
l : ℕ
⊢ 1 < a ^ Nat.succ l
[PROOFSTEP]
induction' l with l IH
[GOAL]
case intro.zero
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝² : Monoid M
inst✝¹ : Preorder M
inst✝ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x a : M
ha : 1 < a
⊢ 1 < a ^ Nat.succ Nat.zero
[PROOFSTEP]
rw [pow_succ]
[GOAL]
case intro.zero
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝² : Monoid M
inst✝¹ : Preorder M
inst✝ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x a : M
ha : 1 < a
⊢ 1 < a * a ^ Nat.zero
[PROOFSTEP]
simpa using ha
[GOAL]
case intro.succ
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝² : Monoid M
inst✝¹ : Preorder M
inst✝ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x a : M
ha : 1 < a
l : ℕ
IH : 1 < a ^ Nat.succ l
⊢ 1 < a ^ Nat.succ (Nat.succ l)
[PROOFSTEP]
rw [pow_succ]
[GOAL]
case intro.succ
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝² : Monoid M
inst✝¹ : Preorder M
inst✝ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x a : M
ha : 1 < a
l : ℕ
IH : 1 < a ^ Nat.succ l
⊢ 1 < a * a ^ (l + 1)
[PROOFSTEP]
exact one_lt_mul'' ha IH
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝³ : Monoid M
inst✝² : Preorder M
inst✝¹ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x : M
inst✝ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x < x_1
a : M
n m : ℕ
ha : 1 < a
h : n < m
⊢ a ^ n < a ^ m
[PROOFSTEP]
rcases Nat.le.dest h with ⟨k, rfl⟩
[GOAL]
case intro
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝³ : Monoid M
inst✝² : Preorder M
inst✝¹ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x : M
inst✝ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x < x_1
a : M
n : ℕ
ha : 1 < a
k : ℕ
h : n < Nat.succ n + k
⊢ a ^ n < a ^ (Nat.succ n + k)
[PROOFSTEP]
clear h
[GOAL]
case intro
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝³ : Monoid M
inst✝² : Preorder M
inst✝¹ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x : M
inst✝ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x < x_1
a : M
n : ℕ
ha : 1 < a
k : ℕ
⊢ a ^ n < a ^ (Nat.succ n + k)
[PROOFSTEP]
rw [pow_add, pow_succ', mul_assoc, ← pow_succ]
[GOAL]
case intro
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝³ : Monoid M
inst✝² : Preorder M
inst✝¹ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x : M
inst✝ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x < x_1
a : M
n : ℕ
ha : 1 < a
k : ℕ
⊢ a ^ n < a ^ n * a ^ (k + 1)
[PROOFSTEP]
exact lt_mul_of_one_lt_right' _ (one_lt_pow' ha k.succ_ne_zero)
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝² : Monoid M
inst✝¹ : Preorder M
inst✝ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x : M
hx : 1 ≤ x
n : ℕ
⊢ 1 ≤ x ^ (n + 1)
[PROOFSTEP]
rw [pow_succ]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝² : Monoid M
inst✝¹ : Preorder M
inst✝ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x : M
hx : 1 ≤ x
n : ℕ
⊢ 1 ≤ x * x ^ n
[PROOFSTEP]
exact Left.one_le_mul hx <| Left.one_le_pow_of_le hx
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝² : Monoid M
inst✝¹ : Preorder M
inst✝ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x : M
hx : x ≤ 1
n : ℕ
⊢ x ^ (n + 1) ≤ 1
[PROOFSTEP]
rw [pow_succ]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝² : Monoid M
inst✝¹ : Preorder M
inst✝ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x : M
hx : x ≤ 1
n : ℕ
⊢ x * x ^ n ≤ 1
[PROOFSTEP]
exact Left.mul_le_one hx <| Left.pow_le_one_of_le hx
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝² : Monoid M
inst✝¹ : Preorder M
inst✝ : CovariantClass M M (swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x : M
hx : 1 ≤ x
n : ℕ
⊢ 1 ≤ x ^ (n + 1)
[PROOFSTEP]
rw [pow_succ]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝² : Monoid M
inst✝¹ : Preorder M
inst✝ : CovariantClass M M (swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x : M
hx : 1 ≤ x
n : ℕ
⊢ 1 ≤ x * x ^ n
[PROOFSTEP]
exact Right.one_le_mul hx <| Right.one_le_pow_of_le hx
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝² : Monoid M
inst✝¹ : Preorder M
inst✝ : CovariantClass M M (swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x : M
hx : x ≤ 1
n : ℕ
⊢ x ^ (n + 1) ≤ 1
[PROOFSTEP]
rw [pow_succ]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝² : Monoid M
inst✝¹ : Preorder M
inst✝ : CovariantClass M M (swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x : M
hx : x ≤ 1
n : ℕ
⊢ x * x ^ n ≤ 1
[PROOFSTEP]
exact Right.mul_le_one hx <| Right.pow_le_one_of_le hx
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝⁴ : Monoid M
inst✝³ : Preorder M
inst✝² : Preorder β
inst✝¹ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass M M (swap fun x x_1 => x * x_1) fun x x_1 => x < x_1
f : β → M
hf : StrictMono f
x✝ : 1 ≠ 0
⊢ StrictMono fun a => f a ^ 1
[PROOFSTEP]
simpa
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝⁴ : Monoid M
inst✝³ : Preorder M
inst✝² : Preorder β
inst✝¹ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass M M (swap fun x x_1 => x * x_1) fun x x_1 => x < x_1
f : β → M
hf : StrictMono f
n : ℕ
x✝ : Nat.succ (Nat.succ n) ≠ 0
⊢ StrictMono fun a => f a ^ Nat.succ (Nat.succ n)
[PROOFSTEP]
simp_rw [pow_succ _ (n + 1)]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝⁴ : Monoid M
inst✝³ : Preorder M
inst✝² : Preorder β
inst✝¹ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass M M (swap fun x x_1 => x * x_1) fun x x_1 => x < x_1
f : β → M
hf : StrictMono f
n : ℕ
x✝ : Nat.succ (Nat.succ n) ≠ 0
⊢ StrictMono fun a => f a * f a ^ (n + 1)
[PROOFSTEP]
exact hf.mul' (StrictMono.pow_right' hf n.succ_ne_zero)
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝⁴ : Monoid M
inst✝³ : Preorder M
inst✝² : Preorder β
inst✝¹ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
inst✝ : CovariantClass M M (swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
f : β → M
hf : Monotone f
⊢ Monotone fun a => f a ^ 0
[PROOFSTEP]
simpa using monotone_const
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝⁴ : Monoid M
inst✝³ : Preorder M
inst✝² : Preorder β
inst✝¹ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
inst✝ : CovariantClass M M (swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
f : β → M
hf : Monotone f
n : ℕ
⊢ Monotone fun a => f a ^ (n + 1)
[PROOFSTEP]
simp_rw [pow_succ]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝⁴ : Monoid M
inst✝³ : Preorder M
inst✝² : Preorder β
inst✝¹ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
inst✝ : CovariantClass M M (swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
f : β → M
hf : Monotone f
n : ℕ
⊢ Monotone fun a => f a * f a ^ n
[PROOFSTEP]
exact hf.mul' (Monotone.pow_right hf _)
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝² : Monoid M
inst✝¹ : Preorder M
inst✝ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x < x_1
n✝ : ℕ
x : M
hn : 0 < n✝
h : x < 1
n : ℕ
x✝ : Nat.succ 0 ≤ n
ih : x ^ n < 1
⊢ x ^ (n + 1) < 1
[PROOFSTEP]
rw [pow_succ]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝² : Monoid M
inst✝¹ : Preorder M
inst✝ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x < x_1
n✝ : ℕ
x : M
hn : 0 < n✝
h : x < 1
n : ℕ
x✝ : Nat.succ 0 ≤ n
ih : x ^ n < 1
⊢ x * x ^ n < 1
[PROOFSTEP]
exact mul_lt_one h ih
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝² : Monoid M
inst✝¹ : Preorder M
inst✝ : CovariantClass M M (swap fun x x_1 => x * x_1) fun x x_1 => x < x_1
n✝ : ℕ
x : M
hn : 0 < n✝
h : x < 1
n : ℕ
x✝ : Nat.succ 0 ≤ n
ih : x ^ n < 1
⊢ x ^ (n + 1) < 1
[PROOFSTEP]
rw [pow_succ]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝² : Monoid M
inst✝¹ : Preorder M
inst✝ : CovariantClass M M (swap fun x x_1 => x * x_1) fun x x_1 => x < x_1
n✝ : ℕ
x : M
hn : 0 < n✝
h : x < 1
n : ℕ
x✝ : Nat.succ 0 ≤ n
ih : x ^ n < 1
⊢ x * x ^ n < 1
[PROOFSTEP]
exact Right.mul_lt_one h ih
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝² : Monoid M
inst✝¹ : LinearOrder M
inst✝ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x : M
n : ℕ
hn : n ≠ 0
⊢ x ^ n = 1 ↔ x = 1
[PROOFSTEP]
simp only [le_antisymm_iff]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝² : Monoid M
inst✝¹ : LinearOrder M
inst✝ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x : M
n : ℕ
hn : n ≠ 0
⊢ x ^ n ≤ 1 ∧ 1 ≤ x ^ n ↔ x ≤ 1 ∧ 1 ≤ x
[PROOFSTEP]
rw [pow_le_one_iff hn, one_le_pow_iff hn]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝³ : Monoid M
inst✝² : LinearOrder M
inst✝¹ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
inst✝ : CovariantClass M M (swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a b c d : M
h : a * b < c * d
⊢ min a b ^ 2 < max c d ^ 2
[PROOFSTEP]
simp_rw [pow_two]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝³ : Monoid M
inst✝² : LinearOrder M
inst✝¹ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
inst✝ : CovariantClass M M (swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a b c d : M
h : a * b < c * d
⊢ min a b * min a b < max c d * max c d
[PROOFSTEP]
exact (mul_le_mul' inf_le_left inf_le_right).trans_lt (h.trans_le <| mul_le_mul' le_sup_left le_sup_right)
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝³ : Monoid M
inst✝² : LinearOrder M
inst✝¹ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
inst✝ : CovariantClass M M (swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a b c : M
h : a * b < c ^ 2
⊢ min a b < c
[PROOFSTEP]
simpa using min_lt_max_of_mul_lt_mul (h.trans_eq <| pow_two _)
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝³ : Monoid M
inst✝² : LinearOrder M
inst✝¹ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
inst✝ : CovariantClass M M (swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a b c : M
h : a ^ 2 < b * c
⊢ a < max b c
[PROOFSTEP]
simpa using min_lt_max_of_mul_lt_mul ((pow_two _).symm.trans_lt h)
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝³ : Monoid M
inst✝² : LinearOrder M
inst✝¹ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass M M (swap fun x x_1 => x * x_1) fun x x_1 => x < x_1
a b c : M
h : a * b ≤ c ^ 2
⊢ min a b ≤ c
[PROOFSTEP]
simpa using min_le_max_of_mul_le_mul (h.trans_eq <| pow_two _)
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝³ : Monoid M
inst✝² : LinearOrder M
inst✝¹ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass M M (swap fun x x_1 => x * x_1) fun x x_1 => x < x_1
a b c : M
h : a ^ 2 ≤ b * c
⊢ a ≤ max b c
[PROOFSTEP]
simpa using min_le_max_of_mul_le_mul ((pow_two _).symm.trans_le h)
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝² : DivInvMonoid G
inst✝¹ : Preorder G
inst✝ : CovariantClass G G (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x : G
H : 1 ≤ x
n : ℤ
hn : 0 ≤ n
⊢ 1 ≤ x ^ n
[PROOFSTEP]
lift n to ℕ using hn
[GOAL]
case intro
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝² : DivInvMonoid G
inst✝¹ : Preorder G
inst✝ : CovariantClass G G (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x : G
H : 1 ≤ x
n : ℕ
⊢ 1 ≤ x ^ ↑n
[PROOFSTEP]
rw [zpow_ofNat]
[GOAL]
case intro
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝² : DivInvMonoid G
inst✝¹ : Preorder G
inst✝ : CovariantClass G G (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x : G
H : 1 ≤ x
n : ℕ
⊢ 1 ≤ x ^ n
[PROOFSTEP]
apply one_le_pow_of_one_le' H
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a x y : R
n✝ m n : ℕ
⊢ 0 ^ (n + 1) ≤ 1
[PROOFSTEP]
rw [zero_pow n.succ_pos]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a x y : R
n✝ m n : ℕ
⊢ 0 ≤ 1
[PROOFSTEP]
exact zero_le_one
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a x y : R
n m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
hn : n ≠ 0
⊢ x ^ n + y ^ n ≤ (x + y) ^ n
[PROOFSTEP]
rcases Nat.exists_eq_succ_of_ne_zero hn with ⟨k, rfl⟩
[GOAL]
case intro
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
k : ℕ
hn : Nat.succ k ≠ 0
⊢ x ^ Nat.succ k + y ^ Nat.succ k ≤ (x + y) ^ Nat.succ k
[PROOFSTEP]
induction' k with k ih
[GOAL]
case intro.zero
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
k : ℕ
hn✝ : Nat.succ k ≠ 0
hn : Nat.succ Nat.zero ≠ 0
⊢ x ^ Nat.succ Nat.zero + y ^ Nat.succ Nat.zero ≤ (x + y) ^ Nat.succ Nat.zero
[PROOFSTEP]
have eqn : Nat.succ Nat.zero = 1 := rfl
[GOAL]
case intro.zero
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
k : ℕ
hn✝ : Nat.succ k ≠ 0
hn : Nat.succ Nat.zero ≠ 0
eqn : Nat.succ Nat.zero = 1
⊢ x ^ Nat.succ Nat.zero + y ^ Nat.succ Nat.zero ≤ (x + y) ^ Nat.succ Nat.zero
[PROOFSTEP]
rw [eqn]
[GOAL]
case intro.zero
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
k : ℕ
hn✝ : Nat.succ k ≠ 0
hn : Nat.succ Nat.zero ≠ 0
eqn : Nat.succ Nat.zero = 1
⊢ x ^ 1 + y ^ 1 ≤ (x + y) ^ 1
[PROOFSTEP]
simp only [pow_one, le_refl]
[GOAL]
case intro.succ
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
k✝ : ℕ
hn✝ : Nat.succ k✝ ≠ 0
k : ℕ
ih : Nat.succ k ≠ 0 → x ^ Nat.succ k + y ^ Nat.succ k ≤ (x + y) ^ Nat.succ k
hn : Nat.succ (Nat.succ k) ≠ 0
⊢ x ^ Nat.succ (Nat.succ k) + y ^ Nat.succ (Nat.succ k) ≤ (x + y) ^ Nat.succ (Nat.succ k)
[PROOFSTEP]
let n := k.succ
[GOAL]
case intro.succ
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
k✝ : ℕ
hn✝ : Nat.succ k✝ ≠ 0
k : ℕ
ih : Nat.succ k ≠ 0 → x ^ Nat.succ k + y ^ Nat.succ k ≤ (x + y) ^ Nat.succ k
hn : Nat.succ (Nat.succ k) ≠ 0
n : ℕ := Nat.succ k
⊢ x ^ Nat.succ (Nat.succ k) + y ^ Nat.succ (Nat.succ k) ≤ (x + y) ^ Nat.succ (Nat.succ k)
[PROOFSTEP]
have h1 := add_nonneg (mul_nonneg hx (pow_nonneg hy n)) (mul_nonneg hy (pow_nonneg hx n))
[GOAL]
case intro.succ
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
k✝ : ℕ
hn✝ : Nat.succ k✝ ≠ 0
k : ℕ
ih : Nat.succ k ≠ 0 → x ^ Nat.succ k + y ^ Nat.succ k ≤ (x + y) ^ Nat.succ k
hn : Nat.succ (Nat.succ k) ≠ 0
n : ℕ := Nat.succ k
h1 : 0 ≤ x * y ^ n + y * x ^ n
⊢ x ^ Nat.succ (Nat.succ k) + y ^ Nat.succ (Nat.succ k) ≤ (x + y) ^ Nat.succ (Nat.succ k)
[PROOFSTEP]
have h2 := add_nonneg hx hy
[GOAL]
case intro.succ
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
k✝ : ℕ
hn✝ : Nat.succ k✝ ≠ 0
k : ℕ
ih : Nat.succ k ≠ 0 → x ^ Nat.succ k + y ^ Nat.succ k ≤ (x + y) ^ Nat.succ k
hn : Nat.succ (Nat.succ k) ≠ 0
n : ℕ := Nat.succ k
h1 : 0 ≤ x * y ^ n + y * x ^ n
h2 : 0 ≤ x + y
⊢ x ^ Nat.succ (Nat.succ k) + y ^ Nat.succ (Nat.succ k) ≤ (x + y) ^ Nat.succ (Nat.succ k)
[PROOFSTEP]
calc
  x ^ n.succ + y ^ n.succ ≤ x * x ^ n + y * y ^ n + (x * y ^ n + y * x ^ n) :=
    by
    rw [pow_succ _ n, pow_succ _ n]
    exact le_add_of_nonneg_right h1
  _ = (x + y) * (x ^ n + y ^ n) := by
    rw [add_mul, mul_add, mul_add, add_comm (y * x ^ n), ← add_assoc, ← add_assoc, add_assoc (x * x ^ n) (x * y ^ n),
      add_comm (x * y ^ n) (y * y ^ n), ← add_assoc]
  _ ≤ (x + y) ^ n.succ := by
    rw [pow_succ _ n]
    exact mul_le_mul_of_nonneg_left (ih (Nat.succ_ne_zero k)) h2
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
k✝ : ℕ
hn✝ : Nat.succ k✝ ≠ 0
k : ℕ
ih : Nat.succ k ≠ 0 → x ^ Nat.succ k + y ^ Nat.succ k ≤ (x + y) ^ Nat.succ k
hn : Nat.succ (Nat.succ k) ≠ 0
n : ℕ := Nat.succ k
h1 : 0 ≤ x * y ^ n + y * x ^ n
h2 : 0 ≤ x + y
⊢ x ^ Nat.succ n + y ^ Nat.succ n ≤ x * x ^ n + y * y ^ n + (x * y ^ n + y * x ^ n)
[PROOFSTEP]
rw [pow_succ _ n, pow_succ _ n]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
k✝ : ℕ
hn✝ : Nat.succ k✝ ≠ 0
k : ℕ
ih : Nat.succ k ≠ 0 → x ^ Nat.succ k + y ^ Nat.succ k ≤ (x + y) ^ Nat.succ k
hn : Nat.succ (Nat.succ k) ≠ 0
n : ℕ := Nat.succ k
h1 : 0 ≤ x * y ^ n + y * x ^ n
h2 : 0 ≤ x + y
⊢ x * x ^ n + y * y ^ n ≤ x * x ^ n + y * y ^ n + (x * y ^ n + y * x ^ n)
[PROOFSTEP]
exact le_add_of_nonneg_right h1
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
k✝ : ℕ
hn✝ : Nat.succ k✝ ≠ 0
k : ℕ
ih : Nat.succ k ≠ 0 → x ^ Nat.succ k + y ^ Nat.succ k ≤ (x + y) ^ Nat.succ k
hn : Nat.succ (Nat.succ k) ≠ 0
n : ℕ := Nat.succ k
h1 : 0 ≤ x * y ^ n + y * x ^ n
h2 : 0 ≤ x + y
⊢ x * x ^ n + y * y ^ n + (x * y ^ n + y * x ^ n) = (x + y) * (x ^ n + y ^ n)
[PROOFSTEP]
rw [add_mul, mul_add, mul_add, add_comm (y * x ^ n), ← add_assoc, ← add_assoc, add_assoc (x * x ^ n) (x * y ^ n),
  add_comm (x * y ^ n) (y * y ^ n), ← add_assoc]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
k✝ : ℕ
hn✝ : Nat.succ k✝ ≠ 0
k : ℕ
ih : Nat.succ k ≠ 0 → x ^ Nat.succ k + y ^ Nat.succ k ≤ (x + y) ^ Nat.succ k
hn : Nat.succ (Nat.succ k) ≠ 0
n : ℕ := Nat.succ k
h1 : 0 ≤ x * y ^ n + y * x ^ n
h2 : 0 ≤ x + y
⊢ (x + y) * (x ^ n + y ^ n) ≤ (x + y) ^ Nat.succ n
[PROOFSTEP]
rw [pow_succ _ n]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
k✝ : ℕ
hn✝ : Nat.succ k✝ ≠ 0
k : ℕ
ih : Nat.succ k ≠ 0 → x ^ Nat.succ k + y ^ Nat.succ k ≤ (x + y) ^ Nat.succ k
hn : Nat.succ (Nat.succ k) ≠ 0
n : ℕ := Nat.succ k
h1 : 0 ≤ x * y ^ n + y * x ^ n
h2 : 0 ≤ x + y
⊢ (x + y) * (x ^ n + y ^ n) ≤ (x + y) * (x + y) ^ n
[PROOFSTEP]
exact mul_le_mul_of_nonneg_left (ih (Nat.succ_ne_zero k)) h2
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a x y : R
n✝ m : ℕ
h₀ : 0 ≤ a
h₁ : a < 1
n : ℕ
x✝ : n + 1 ≠ 0
⊢ a ^ (n + 1) < 1
[PROOFSTEP]
rw [pow_succ]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a x y : R
n✝ m : ℕ
h₀ : 0 ≤ a
h₁ : a < 1
n : ℕ
x✝ : n + 1 ≠ 0
⊢ a * a ^ n < 1
[PROOFSTEP]
exact mul_lt_one_of_nonneg_of_lt_one_left h₀ h₁ (pow_le_one _ h₀ h₁.le)
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a x y : R
n m : ℕ
H : 1 ≤ a
⊢ 1 ≤ a ^ 0
[PROOFSTEP]
rw [pow_zero]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a x y : R
n✝ m : ℕ
H : 1 ≤ a
n : ℕ
⊢ 1 ≤ a ^ (n + 1)
[PROOFSTEP]
rw [pow_succ]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a x y : R
n✝ m : ℕ
H : 1 ≤ a
n : ℕ
⊢ 1 ≤ a * a ^ n
[PROOFSTEP]
simpa only [mul_one] using mul_le_mul H (one_le_pow_of_one_le H n) zero_le_one (le_trans zero_le_one H)
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a x y : R
n✝ m : ℕ
h : 1 ≤ a
n : ℕ
⊢ a ^ n ≤ a ^ (n + 1)
[PROOFSTEP]
rw [pow_succ]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a x y : R
n✝ m : ℕ
h : 1 ≤ a
n : ℕ
⊢ a ^ n ≤ a * a ^ n
[PROOFSTEP]
exact le_mul_of_one_le_left (pow_nonneg (zero_le_one.trans h) _) h
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a✝ x y : R
n m : ℕ
a b : R
ha : 0 ≤ a
hab : a ≤ b
⊢ ∀ (i : ℕ), a ^ i ≤ b ^ i
[PROOFSTEP]
intro i
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a✝ x y : R
n m : ℕ
a b : R
ha : 0 ≤ a
hab : a ≤ b
i : ℕ
⊢ a ^ i ≤ b ^ i
[PROOFSTEP]
induction i with
| zero => simp
| succ k ih =>
  rw [pow_succ, pow_succ]
  apply mul_le_mul hab
  apply ih
  apply pow_nonneg ha
  apply le_trans ha hab
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a✝ x y : R
n m : ℕ
a b : R
ha : 0 ≤ a
hab : a ≤ b
i : ℕ
⊢ a ^ i ≤ b ^ i
[PROOFSTEP]
induction i with
| zero => simp
| succ k ih =>
  rw [pow_succ, pow_succ]
  apply mul_le_mul hab
  apply ih
  apply pow_nonneg ha
  apply le_trans ha hab
[GOAL]
case zero
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a✝ x y : R
n m : ℕ
a b : R
ha : 0 ≤ a
hab : a ≤ b
⊢ a ^ Nat.zero ≤ b ^ Nat.zero
[PROOFSTEP]

| zero => simp
[GOAL]
case zero
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a✝ x y : R
n m : ℕ
a b : R
ha : 0 ≤ a
hab : a ≤ b
⊢ a ^ Nat.zero ≤ b ^ Nat.zero
[PROOFSTEP]
simp
[GOAL]
case succ
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a✝ x y : R
n m : ℕ
a b : R
ha : 0 ≤ a
hab : a ≤ b
k : ℕ
ih : a ^ k ≤ b ^ k
⊢ a ^ Nat.succ k ≤ b ^ Nat.succ k
[PROOFSTEP]

| succ k ih =>
  rw [pow_succ, pow_succ]
  apply mul_le_mul hab
  apply ih
  apply pow_nonneg ha
  apply le_trans ha hab
[GOAL]
case succ
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a✝ x y : R
n m : ℕ
a b : R
ha : 0 ≤ a
hab : a ≤ b
k : ℕ
ih : a ^ k ≤ b ^ k
⊢ a ^ Nat.succ k ≤ b ^ Nat.succ k
[PROOFSTEP]
rw [pow_succ, pow_succ]
[GOAL]
case succ
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a✝ x y : R
n m : ℕ
a b : R
ha : 0 ≤ a
hab : a ≤ b
k : ℕ
ih : a ^ k ≤ b ^ k
⊢ a * a ^ k ≤ b * b ^ k
[PROOFSTEP]
apply mul_le_mul hab
[GOAL]
case succ.h₂
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a✝ x y : R
n m : ℕ
a b : R
ha : 0 ≤ a
hab : a ≤ b
k : ℕ
ih : a ^ k ≤ b ^ k
⊢ a ^ k ≤ b ^ k
case succ.c0
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a✝ x y : R
n m : ℕ
a b : R
ha : 0 ≤ a
hab : a ≤ b
k : ℕ
ih : a ^ k ≤ b ^ k
⊢ 0 ≤ a ^ k
case succ.b0
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a✝ x y : R
n m : ℕ
a b : R
ha : 0 ≤ a
hab : a ≤ b
k : ℕ
ih : a ^ k ≤ b ^ k
⊢ 0 ≤ b
[PROOFSTEP]
apply ih
[GOAL]
case succ.c0
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a✝ x y : R
n m : ℕ
a b : R
ha : 0 ≤ a
hab : a ≤ b
k : ℕ
ih : a ^ k ≤ b ^ k
⊢ 0 ≤ a ^ k
case succ.b0
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a✝ x y : R
n m : ℕ
a b : R
ha : 0 ≤ a
hab : a ≤ b
k : ℕ
ih : a ^ k ≤ b ^ k
⊢ 0 ≤ b
[PROOFSTEP]
apply pow_nonneg ha
[GOAL]
case succ.b0
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a✝ x y : R
n m : ℕ
a b : R
ha : 0 ≤ a
hab : a ≤ b
k : ℕ
ih : a ^ k ≤ b ^ k
⊢ 0 ≤ b
[PROOFSTEP]
apply le_trans ha hab
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a x y : R
n✝ m : ℕ
ha : 1 < a
n : ℕ
x✝ : n + 1 ≠ 0
⊢ 1 < a ^ (n + 1)
[PROOFSTEP]
rw [pow_succ]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : OrderedSemiring R
a x y : R
n✝ m : ℕ
ha : 1 < a
n : ℕ
x✝ : n + 1 ≠ 0
⊢ 1 < a * a ^ n
[PROOFSTEP]
exact one_lt_mul_of_lt_of_le ha (one_le_pow_of_one_le ha.le _)
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : StrictOrderedSemiring R
a x y : R
n m : ℕ
h : x < y
hx : 0 ≤ x
hn : 0 < 0
⊢ x ^ 0 < y ^ 0
[PROOFSTEP]
contradiction
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : StrictOrderedSemiring R
a x y : R
n✝ m : ℕ
h : x < y
hx : 0 ≤ x
n : ℕ
x✝ : 0 < n + 1
⊢ x ^ (n + 1) < y ^ (n + 1)
[PROOFSTEP]
simpa only [pow_succ'] using mul_lt_mul_of_le_of_le' (pow_le_pow_of_le_left hx h.le _) h (pow_pos (hx.trans_lt h) _) hx
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : StrictOrderedSemiring R
a x y : R
n✝ m : ℕ
h : 1 < a
this : 0 < a
n : ℕ
⊢ a ^ n < a ^ (n + 1)
[PROOFSTEP]
simpa only [one_mul, pow_succ] using mul_lt_mul h (le_refl (a ^ n)) (pow_pos this _) this.le
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : StrictOrderedSemiring R
a x y : R
n✝ m : ℕ
h₀ : 0 < a
h₁ : a < 1
n : ℕ
⊢ a ^ (n + 1) < a ^ n
[PROOFSTEP]
simpa only [pow_succ, one_mul] using mul_lt_mul h₁ le_rfl (pow_pos h₀ n) zero_le_one
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : StrictOrderedSemiring R
a x y : R
n m : ℕ
ha : 0 < a
⊢ 0 < a ^ 2
[PROOFSTEP]
rw [sq]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : StrictOrderedSemiring R
a x y : R
n m : ℕ
ha : 0 < a
⊢ 0 < a * a
[PROOFSTEP]
exact mul_pos ha ha
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : StrictOrderedRing R
a : R
ha : a < 0
n : ℕ
⊢ 0 < a ^ bit0 n
[PROOFSTEP]
rw [pow_bit0']
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : StrictOrderedRing R
a : R
ha : a < 0
n : ℕ
⊢ 0 < (a * a) ^ n
[PROOFSTEP]
exact pow_pos (mul_pos_of_neg_of_neg ha ha) _
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : StrictOrderedRing R
a : R
ha : a < 0
n : ℕ
⊢ a ^ bit1 n < 0
[PROOFSTEP]
rw [bit1, pow_succ]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : StrictOrderedRing R
a : R
ha : a < 0
n : ℕ
⊢ a * a ^ bit0 n < 0
[PROOFSTEP]
exact mul_neg_of_neg_of_pos ha (pow_bit0_pos_of_neg ha n)
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedSemiring R
a✝ b a : R
ha : 0 ≤ a
n : ℕ
hn : n ≠ 0
⊢ a ^ n ≤ 1 ↔ a ≤ 1
[PROOFSTEP]
refine' ⟨_, pow_le_one n ha⟩
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedSemiring R
a✝ b a : R
ha : 0 ≤ a
n : ℕ
hn : n ≠ 0
⊢ a ^ n ≤ 1 → a ≤ 1
[PROOFSTEP]
rw [← not_lt, ← not_lt]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedSemiring R
a✝ b a : R
ha : 0 ≤ a
n : ℕ
hn : n ≠ 0
⊢ ¬1 < a ^ n → ¬1 < a
[PROOFSTEP]
exact mt fun h => one_lt_pow h hn
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedSemiring R
a✝ b a : R
ha : 0 ≤ a
n : ℕ
hn : n ≠ 0
⊢ 1 ≤ a ^ n ↔ 1 ≤ a
[PROOFSTEP]
refine' ⟨_, fun h => one_le_pow_of_one_le h n⟩
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedSemiring R
a✝ b a : R
ha : 0 ≤ a
n : ℕ
hn : n ≠ 0
⊢ 1 ≤ a ^ n → 1 ≤ a
[PROOFSTEP]
rw [← not_lt, ← not_lt]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedSemiring R
a✝ b a : R
ha : 0 ≤ a
n : ℕ
hn : n ≠ 0
⊢ ¬a ^ n < 1 → ¬a < 1
[PROOFSTEP]
exact mt fun h => pow_lt_one ha h hn
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedSemiring R
a✝ b✝ a b : R
ha : 0 ≤ a
hb : 0 ≤ b
⊢ 0 < 2
[PROOFSTEP]
decide
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedSemiring R
a b : R
hb : 0 ≤ b
⊢ a * a < b * b → a < b
[PROOFSTEP]
simp_rw [← sq]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedSemiring R
a b : R
hb : 0 ≤ b
⊢ a ^ 2 < b ^ 2 → a < b
[PROOFSTEP]
exact lt_of_pow_lt_pow _ hb
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedRing R
n : ℕ
⊢ |(-1) ^ n| = 1
[PROOFSTEP]
rw [← pow_abs, abs_neg, abs_one, one_pow]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedRing R
a : R
n : ℕ
h : 0 < n
⊢ |a ^ n| = 1 ↔ |a| = 1
[PROOFSTEP]
convert pow_left_inj (abs_nonneg a) zero_le_one h
[GOAL]
case h.e'_1.h.e'_2
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedRing R
a : R
n : ℕ
h : 0 < n
⊢ |a ^ n| = |a| ^ n
case h.e'_1.h.e'_3
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedRing R
a : R
n : ℕ
h : 0 < n
⊢ 1 = 1 ^ n
[PROOFSTEP]
exacts [(pow_abs _ _).symm, (one_pow _).symm]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedRing R
a : R
n : ℕ
⊢ 0 ≤ a ^ bit0 n
[PROOFSTEP]
rw [pow_bit0]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedRing R
a : R
n : ℕ
⊢ 0 ≤ a ^ n * a ^ n
[PROOFSTEP]
exact mul_self_nonneg _
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedRing R
a : R
n : ℕ
hn : n ≠ 0
⊢ 0 < a ^ bit0 n ↔ a ≠ 0
[PROOFSTEP]
refine' ⟨fun h => _, fun h => pow_bit0_pos h n⟩
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedRing R
a : R
n : ℕ
hn : n ≠ 0
h : 0 < a ^ bit0 n
⊢ a ≠ 0
[PROOFSTEP]
rintro rfl
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedRing R
n : ℕ
hn : n ≠ 0
h : 0 < 0 ^ bit0 n
⊢ False
[PROOFSTEP]
rw [zero_pow (Nat.zero_lt_bit0 hn)] at h 
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedRing R
n : ℕ
hn : n ≠ 0
h : 0 < 0
⊢ False
[PROOFSTEP]
exact lt_irrefl _ h
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedRing R
x✝ y x : R
⊢ |x| ^ 2 = x ^ 2
[PROOFSTEP]
simpa only [sq] using abs_mul_abs_self x
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedRing R
x✝ y x : R
⊢ |x ^ 2| = x ^ 2
[PROOFSTEP]
simpa only [sq] using abs_mul_self x
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedRing R
x y : R
⊢ x ^ 2 < y ^ 2 ↔ |x| < |y|
[PROOFSTEP]
simpa only [sq_abs] using (@strictMonoOn_pow R _ _ two_pos).lt_iff_lt (abs_nonneg x) (abs_nonneg y)
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedRing R
x y : R
⊢ x ^ 2 ≤ y ^ 2 ↔ |x| ≤ |y|
[PROOFSTEP]
simpa only [sq_abs] using (@strictMonoOn_pow R _ _ two_pos).le_iff_le (abs_nonneg x) (abs_nonneg y)
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedRing R
x y : R
h : x ^ 2 < y ^ 2
hy : 0 ≤ y
⊢ |x| < y
[PROOFSTEP]
rwa [← abs_of_nonneg hy, ← sq_lt_sq]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedRing R
x y : R
h : x ^ 2 ≤ y ^ 2
hy : 0 ≤ y
⊢ |x| ≤ y
[PROOFSTEP]
rwa [← abs_of_nonneg hy, ← sq_le_sq]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedRing R
x✝ y✝ x y : R
⊢ x ^ 2 = y ^ 2 ↔ |x| = |y|
[PROOFSTEP]
simp only [le_antisymm_iff, sq_le_sq]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedRing R
x✝ y x : R
⊢ x ^ 2 ≤ 1 ↔ |x| ≤ 1
[PROOFSTEP]
simpa only [one_pow, abs_one] using @sq_le_sq _ _ x 1
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedRing R
x✝ y x : R
⊢ x ^ 2 < 1 ↔ |x| < 1
[PROOFSTEP]
simpa only [one_pow, abs_one] using @sq_lt_sq _ _ x 1
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedRing R
x✝ y x : R
⊢ 1 ≤ x ^ 2 ↔ 1 ≤ |x|
[PROOFSTEP]
simpa only [one_pow, abs_one] using @sq_le_sq _ _ 1 x
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedRing R
x✝ y x : R
⊢ 1 < x ^ 2 ↔ 1 < |x|
[PROOFSTEP]
simpa only [one_pow, abs_one] using @sq_lt_sq _ _ 1 x
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝¹ : LinearOrderedCommMonoidWithZero M
inst✝ : NoZeroDivisors M
a : M
n : ℕ
hn : 0 < n
⊢ 0 < a ^ n ↔ 0 < a
[PROOFSTEP]
simp_rw [zero_lt_iff, pow_ne_zero_iff hn]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedCommGroupWithZero M
a : M
m n : ℕ
ha : 1 < a
⊢ a ^ n < a ^ Nat.succ n
[PROOFSTEP]
rw [← one_mul (a ^ n), pow_succ]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedCommGroupWithZero M
a : M
m n : ℕ
ha : 1 < a
⊢ 1 * a ^ n < a * a ^ n
[PROOFSTEP]
exact mul_lt_right₀ _ ha (pow_ne_zero _ (zero_lt_one.trans ha).ne')
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedCommGroupWithZero M
a : M
m n : ℕ
ha : 1 < a
hmn : m < n
⊢ a ^ m < a ^ n
[PROOFSTEP]
induction' hmn with n _ ih
[GOAL]
case refl
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedCommGroupWithZero M
a : M
m n : ℕ
ha : 1 < a
⊢ a ^ m < a ^ Nat.succ m
case step
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝ : LinearOrderedCommGroupWithZero M
a : M
m n✝ : ℕ
ha : 1 < a
n : ℕ
a✝ : Nat.le (Nat.succ m) n
ih : a ^ m < a ^ n
⊢ a ^ m < a ^ Nat.succ n
[PROOFSTEP]
exacts [pow_lt_pow_succ ha, lt_trans ih (pow_lt_pow_succ ha)]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝³ : Ring R
inst✝² : Monoid M
inst✝¹ : LinearOrder M
inst✝ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
f : R →* M
⊢ ↑f (-1) ^ Nat.succ 1 = 1
[PROOFSTEP]
rw [← map_pow, neg_one_sq, map_one]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝³ : Ring R
inst✝² : Monoid M
inst✝¹ : LinearOrder M
inst✝ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
f : R →* M
x : R
⊢ ↑f (-x) = ↑f x
[PROOFSTEP]
rw [← neg_one_mul, map_mul, map_neg_one, one_mul]
[GOAL]
β : Type u_1
A : Type u_2
G : Type u_3
M : Type u_4
R : Type u_5
inst✝³ : Ring R
inst✝² : Monoid M
inst✝¹ : LinearOrder M
inst✝ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
f : R →* M
x y : R
⊢ ↑f (x - y) = ↑f (y - x)
[PROOFSTEP]
rw [← map_neg, neg_sub]
