Theorem: pow_add_pow_le
File: Mathlib/Algebra/GroupPower/Order.lean

tactic: rcases Nat.exists_eq_succ_of_ne_zero hn with ⟨k, rfl⟩
state_before: β : Type ?u.204204
A : Type ?u.204207
G : Type ?u.204210
M : Type ?u.204213
R : Type u_1
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

tactic: induction' k with k ih
state_before: case intro
β : Type ?u.204204
A : Type ?u.204207
G : Type ?u.204210
M : Type ?u.204213
R : Type u_1
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

tactic: . have eqn : Nat.succ Nat.zero = 1 := rfl
  rw [eqn]
  simp only [pow_one, le_refl]
state_before: case intro.zero
β : Type ?u.204204
A : Type ?u.204207
G : Type ?u.204210
M : Type ?u.204213
R : Type u_1
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

case intro.succ
β : Type ?u.204204
A : Type ?u.204207
G : Type ?u.204210
M : Type ?u.204213
R : Type u_1
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)

tactic: . let n := k.succ
  have h1 := add_nonneg (mul_nonneg hx (pow_nonneg hy n)) (mul_nonneg hy (pow_nonneg hx n))
  have h2 := add_nonneg hx hy
  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.204204
A : Type ?u.204207
G : Type ?u.204210
M : Type ?u.204213
R : Type u_1
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)

tactic: have eqn : Nat.succ Nat.zero = 1 := rfl
state_before: case intro.zero
β : Type ?u.204204
A : Type ?u.204207
G : Type ?u.204210
M : Type ?u.204213
R : Type u_1
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

tactic: rw [eqn]
state_before: case intro.zero
β : Type ?u.204204
A : Type ?u.204207
G : Type ?u.204210
M : Type ?u.204213
R : Type u_1
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

tactic: simp only [pow_one, le_refl]
state_before: case intro.zero
β : Type ?u.204204
A : Type ?u.204207
G : Type ?u.204210
M : Type ?u.204213
R : Type u_1
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

tactic: let n := k.succ
state_before: case intro.succ
β : Type ?u.204204
A : Type ?u.204207
G : Type ?u.204210
M : Type ?u.204213
R : Type u_1
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)

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.204204
A : Type ?u.204207
G : Type ?u.204210
M : Type ?u.204213
R : Type u_1
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)

tactic: have h2 := add_nonneg hx hy
state_before: case intro.succ
β : Type ?u.204204
A : Type ?u.204207
G : Type ?u.204210
M : Type ?u.204213
R : Type u_1
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)

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.204204
A : Type ?u.204207
G : Type ?u.204210
M : Type ?u.204213
R : Type u_1
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)

tactic: rw [pow_succ _ n, pow_succ _ n]
state_before: β : Type ?u.204204
A : Type ?u.204207
G : Type ?u.204210
M : Type ?u.204213
R : Type u_1
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)

tactic: exact le_add_of_nonneg_right h1
state_before: β : Type ?u.204204
A : Type ?u.204207
G : Type ?u.204210
M : Type ?u.204213
R : Type u_1
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)

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.204204
A : Type ?u.204207
G : Type ?u.204210
M : Type ?u.204213
R : Type u_1
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)

tactic: rw [pow_succ _ n]
state_before: β : Type ?u.204204
A : Type ?u.204207
G : Type ?u.204210
M : Type ?u.204213
R : Type u_1
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

tactic: exact mul_le_mul_of_nonneg_left (ih (Nat.succ_ne_zero k)) h2
state_before: β : Type ?u.204204
A : Type ?u.204207
G : Type ?u.204210
M : Type ?u.204213
R : Type u_1
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