Theorem: pow_add_pow_le
File: Mathlib/Algebra/Order/Ring/Basic.lean

tactic: rcases Nat.exists_eq_succ_of_ne_zero hn with ⟨k, rfl⟩
state_before: α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : OrderedSemiring R
a b x y : R
n m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
hn : n ≠ 0
⊢ x ^ n + y ^ n ≤ (x + y) ^ n
state_after: case intro
α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : OrderedSemiring R
a b x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
k : ℕ
hn : k.succ ≠ 0
⊢ x ^ k.succ + y ^ k.succ ≤ (x + y) ^ k.succ

tactic: induction' k with k ih
state_before: case intro
α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : OrderedSemiring R
a b x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
k : ℕ
hn : k.succ ≠ 0
⊢ x ^ k.succ + y ^ k.succ ≤ (x + y) ^ k.succ
state_after: case intro.zero
α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : OrderedSemiring R
a b x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
hn : Nat.succ 0 ≠ 0
⊢ x ^ Nat.succ 0 + y ^ Nat.succ 0 ≤ (x + y) ^ Nat.succ 0

case intro.succ
α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : OrderedSemiring R
a b x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
k : ℕ
ih : k.succ ≠ 0 → x ^ k.succ + y ^ k.succ ≤ (x + y) ^ k.succ
hn : (k + 1).succ ≠ 0
⊢ x ^ (k + 1).succ + y ^ (k + 1).succ ≤ (x + y) ^ (k + 1).succ

tactic: have eqn : Nat.succ Nat.zero = 1 := rfl
state_before: case intro.zero
α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : OrderedSemiring R
a b x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
hn : Nat.succ 0 ≠ 0
⊢ x ^ Nat.succ 0 + y ^ Nat.succ 0 ≤ (x + y) ^ Nat.succ 0
state_after: case intro.zero
α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : OrderedSemiring R
a b x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
hn : Nat.succ 0 ≠ 0
eqn : Nat.zero.succ = 1
⊢ x ^ Nat.succ 0 + y ^ Nat.succ 0 ≤ (x + y) ^ Nat.succ 0

tactic: rw [eqn]
state_before: case intro.zero
α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : OrderedSemiring R
a b x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
hn : Nat.succ 0 ≠ 0
eqn : Nat.zero.succ = 1
⊢ x ^ Nat.succ 0 + y ^ Nat.succ 0 ≤ (x + y) ^ Nat.succ 0
state_after: case intro.zero
α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : OrderedSemiring R
a b x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
hn : Nat.succ 0 ≠ 0
eqn : Nat.zero.succ = 1
⊢ x ^ 1 + y ^ 1 ≤ (x + y) ^ 1

tactic: simp only [pow_one, le_refl]
state_before: case intro.zero
α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : OrderedSemiring R
a b x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
hn : Nat.succ 0 ≠ 0
eqn : Nat.zero.succ = 1
⊢ x ^ 1 + y ^ 1 ≤ (x + y) ^ 1
state_after: no goals

tactic: let n := k.succ
state_before: case intro.succ
α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : OrderedSemiring R
a b x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
k : ℕ
ih : k.succ ≠ 0 → x ^ k.succ + y ^ k.succ ≤ (x + y) ^ k.succ
hn : (k + 1).succ ≠ 0
⊢ x ^ (k + 1).succ + y ^ (k + 1).succ ≤ (x + y) ^ (k + 1).succ
state_after: case intro.succ
α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : OrderedSemiring R
a b x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
k : ℕ
ih : k.succ ≠ 0 → x ^ k.succ + y ^ k.succ ≤ (x + y) ^ k.succ
hn : (k + 1).succ ≠ 0
n : ℕ := k.succ
⊢ x ^ (k + 1).succ + y ^ (k + 1).succ ≤ (x + y) ^ (k + 1).succ

tactic: have h1 := add_nonneg (mul_nonneg hx (pow_nonneg hy n)) (mul_nonneg hy (pow_nonneg hx n))
state_before: case intro.succ
α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : OrderedSemiring R
a b x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
k : ℕ
ih : k.succ ≠ 0 → x ^ k.succ + y ^ k.succ ≤ (x + y) ^ k.succ
hn : (k + 1).succ ≠ 0
n : ℕ := k.succ
⊢ x ^ (k + 1).succ + y ^ (k + 1).succ ≤ (x + y) ^ (k + 1).succ
state_after: case intro.succ
α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : OrderedSemiring R
a b x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
k : ℕ
ih : k.succ ≠ 0 → x ^ k.succ + y ^ k.succ ≤ (x + y) ^ k.succ
hn : (k + 1).succ ≠ 0
n : ℕ := k.succ
h1 : 0 ≤ x * y ^ n + y * x ^ n
⊢ x ^ (k + 1).succ + y ^ (k + 1).succ ≤ (x + y) ^ (k + 1).succ

tactic: have h2 := add_nonneg hx hy
state_before: case intro.succ
α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : OrderedSemiring R
a b x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
k : ℕ
ih : k.succ ≠ 0 → x ^ k.succ + y ^ k.succ ≤ (x + y) ^ k.succ
hn : (k + 1).succ ≠ 0
n : ℕ := k.succ
h1 : 0 ≤ x * y ^ n + y * x ^ n
⊢ x ^ (k + 1).succ + y ^ (k + 1).succ ≤ (x + y) ^ (k + 1).succ
state_after: case intro.succ
α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : OrderedSemiring R
a b x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
k : ℕ
ih : k.succ ≠ 0 → x ^ k.succ + y ^ k.succ ≤ (x + y) ^ k.succ
hn : (k + 1).succ ≠ 0
n : ℕ := k.succ
h1 : 0 ≤ x * y ^ n + y * x ^ n
h2 : 0 ≤ x + y
⊢ x ^ (k + 1).succ + y ^ (k + 1).succ ≤ (x + y) ^ (k + 1).succ

tactic: 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
state_before: case intro.succ
α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : OrderedSemiring R
a b x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
k : ℕ
ih : k.succ ≠ 0 → x ^ k.succ + y ^ k.succ ≤ (x + y) ^ k.succ
hn : (k + 1).succ ≠ 0
n : ℕ := k.succ
h1 : 0 ≤ x * y ^ n + y * x ^ n
h2 : 0 ≤ x + y
⊢ x ^ (k + 1).succ + y ^ (k + 1).succ ≤ (x + y) ^ (k + 1).succ
state_after: no goals

tactic: rw [pow_succ' _ n, pow_succ' _ n]
state_before: α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : OrderedSemiring R
a b x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
k : ℕ
ih : k.succ ≠ 0 → x ^ k.succ + y ^ k.succ ≤ (x + y) ^ k.succ
hn : (k + 1).succ ≠ 0
n : ℕ := k.succ
h1 : 0 ≤ x * y ^ n + y * x ^ n
h2 : 0 ≤ x + y
⊢ x ^ n.succ + y ^ n.succ ≤ x * x ^ n + y * y ^ n + (x * y ^ n + y * x ^ n)
state_after: α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : OrderedSemiring R
a b x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
k : ℕ
ih : k.succ ≠ 0 → x ^ k.succ + y ^ k.succ ≤ (x + y) ^ k.succ
hn : (k + 1).succ ≠ 0
n : ℕ := k.succ
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)

tactic: exact le_add_of_nonneg_right h1
state_before: α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : OrderedSemiring R
a b x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
k : ℕ
ih : k.succ ≠ 0 → x ^ k.succ + y ^ k.succ ≤ (x + y) ^ k.succ
hn : (k + 1).succ ≠ 0
n : ℕ := k.succ
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)
state_after: no goals

tactic: 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]
state_before: α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : OrderedSemiring R
a b x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
k : ℕ
ih : k.succ ≠ 0 → x ^ k.succ + y ^ k.succ ≤ (x + y) ^ k.succ
hn : (k + 1).succ ≠ 0
n : ℕ := k.succ
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)
state_after: no goals

tactic: rw [pow_succ' _ n]
state_before: α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : OrderedSemiring R
a b x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
k : ℕ
ih : k.succ ≠ 0 → x ^ k.succ + y ^ k.succ ≤ (x + y) ^ k.succ
hn : (k + 1).succ ≠ 0
n : ℕ := k.succ
h1 : 0 ≤ x * y ^ n + y * x ^ n
h2 : 0 ≤ x + y
⊢ (x + y) * (x ^ n + y ^ n) ≤ (x + y) ^ n.succ
state_after: α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : OrderedSemiring R
a b x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
k : ℕ
ih : k.succ ≠ 0 → x ^ k.succ + y ^ k.succ ≤ (x + y) ^ k.succ
hn : (k + 1).succ ≠ 0
n : ℕ := k.succ
h1 : 0 ≤ x * y ^ n + y * x ^ n
h2 : 0 ≤ x + y
⊢ (x + y) * (x ^ n + y ^ n) ≤ (x + y) * (x + y) ^ n

tactic: exact mul_le_mul_of_nonneg_left (ih (Nat.succ_ne_zero k)) h2
state_before: α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : OrderedSemiring R
a b x y : R
m : ℕ
hx : 0 ≤ x
hy : 0 ≤ y
k : ℕ
ih : k.succ ≠ 0 → x ^ k.succ + y ^ k.succ ≤ (x + y) ^ k.succ
hn : (k + 1).succ ≠ 0
n : ℕ := k.succ
h1 : 0 ≤ x * y ^ n + y * x ^ n
h2 : 0 ≤ x + y
⊢ (x + y) * (x ^ n + y ^ n) ≤ (x + y) * (x + y) ^ n
state_after: no goals