Theorem: ENNReal.young_inequality
File: Mathlib/Analysis/MeanInequalities.lean

tactic: by_cases h : a = ⊤ ∨ b = ⊤
state_before: ι : Type u
s : Finset ι
a b : ℝ≥0∞
p q : ℝ
hpq : p.IsConjExponent q
⊢ a * b ≤ a ^ p / ENNReal.ofReal p + b ^ q / ENNReal.ofReal q
state_after: case pos
ι : Type u
s : Finset ι
a b : ℝ≥0∞
p q : ℝ
hpq : p.IsConjExponent q
h : a = ⊤ ∨ b = ⊤
⊢ a * b ≤ a ^ p / ENNReal.ofReal p + b ^ q / ENNReal.ofReal q

case neg
ι : Type u
s : Finset ι
a b : ℝ≥0∞
p q : ℝ
hpq : p.IsConjExponent q
h : ¬(a = ⊤ ∨ b = ⊤)
⊢ a * b ≤ a ^ p / ENNReal.ofReal p + b ^ q / ENNReal.ofReal q

tactic: push_neg at h
state_before: case neg
ι : Type u
s : Finset ι
a b : ℝ≥0∞
p q : ℝ
hpq : p.IsConjExponent q
h : ¬(a = ⊤ ∨ b = ⊤)
⊢ a * b ≤ a ^ p / ENNReal.ofReal p + b ^ q / ENNReal.ofReal q
state_after: case neg
ι : Type u
s : Finset ι
a b : ℝ≥0∞
p q : ℝ
hpq : p.IsConjExponent q
h : a ≠ ⊤ ∧ b ≠ ⊤
⊢ a * b ≤ a ^ p / ENNReal.ofReal p + b ^ q / ENNReal.ofReal q

tactic: rw [← coe_toNNReal h.left, ← coe_toNNReal h.right, ← coe_mul, coe_rpow_of_nonneg _ hpq.nonneg,
  coe_rpow_of_nonneg _ hpq.symm.nonneg, ENNReal.ofReal, ENNReal.ofReal, ←
  @coe_div (Real.toNNReal p) _ (by simp [hpq.pos]), ←
  @coe_div (Real.toNNReal q) _ (by simp [hpq.symm.pos]), ← coe_add, coe_le_coe]
state_before: case neg
ι : Type u
s : Finset ι
a b : ℝ≥0∞
p q : ℝ
hpq : p.IsConjExponent q
h : a ≠ ⊤ ∧ b ≠ ⊤
⊢ a * b ≤ a ^ p / ENNReal.ofReal p + b ^ q / ENNReal.ofReal q
state_after: case neg
ι : Type u
s : Finset ι
a b : ℝ≥0∞
p q : ℝ
hpq : p.IsConjExponent q
h : a ≠ ⊤ ∧ b ≠ ⊤
⊢ a.toNNReal * b.toNNReal ≤ a.toNNReal ^ p / p.toNNReal + b.toNNReal ^ q / q.toNNReal

tactic: exact NNReal.young_inequality_real a.toNNReal b.toNNReal hpq
state_before: case neg
ι : Type u
s : Finset ι
a b : ℝ≥0∞
p q : ℝ
hpq : p.IsConjExponent q
h : a ≠ ⊤ ∧ b ≠ ⊤
⊢ a.toNNReal * b.toNNReal ≤ a.toNNReal ^ p / p.toNNReal + b.toNNReal ^ q / q.toNNReal
state_after: no goals

tactic: refine le_trans le_top (le_of_eq ?_)
state_before: case pos
ι : Type u
s : Finset ι
a b : ℝ≥0∞
p q : ℝ
hpq : p.IsConjExponent q
h : a = ⊤ ∨ b = ⊤
⊢ a * b ≤ a ^ p / ENNReal.ofReal p + b ^ q / ENNReal.ofReal q
state_after: case pos
ι : Type u
s : Finset ι
a b : ℝ≥0∞
p q : ℝ
hpq : p.IsConjExponent q
h : a = ⊤ ∨ b = ⊤
⊢ ⊤ = a ^ p / ENNReal.ofReal p + b ^ q / ENNReal.ofReal q

tactic: repeat rw [div_eq_mul_inv]
state_before: case pos
ι : Type u
s : Finset ι
a b : ℝ≥0∞
p q : ℝ
hpq : p.IsConjExponent q
h : a = ⊤ ∨ b = ⊤
⊢ ⊤ = a ^ p / ENNReal.ofReal p + b ^ q / ENNReal.ofReal q
state_after: case pos
ι : Type u
s : Finset ι
a b : ℝ≥0∞
p q : ℝ
hpq : p.IsConjExponent q
h : a = ⊤ ∨ b = ⊤
⊢ ⊤ = a ^ p * (ENNReal.ofReal p)⁻¹ + b ^ q * (ENNReal.ofReal q)⁻¹

tactic: cases' h with h h <;> rw [h] <;> simp [h, hpq.pos, hpq.symm.pos]
state_before: case pos
ι : Type u
s : Finset ι
a b : ℝ≥0∞
p q : ℝ
hpq : p.IsConjExponent q
h : a = ⊤ ∨ b = ⊤
⊢ ⊤ = a ^ p * (ENNReal.ofReal p)⁻¹ + b ^ q * (ENNReal.ofReal q)⁻¹
state_after: no goals

tactic: rw [div_eq_mul_inv]
state_before: case pos
ι : Type u
s : Finset ι
a b : ℝ≥0∞
p q : ℝ
hpq : p.IsConjExponent q
h : a = ⊤ ∨ b = ⊤
⊢ ⊤ = a ^ p * (ENNReal.ofReal p)⁻¹ + b ^ q / ENNReal.ofReal q
state_after: case pos
ι : Type u
s : Finset ι
a b : ℝ≥0∞
p q : ℝ
hpq : p.IsConjExponent q
h : a = ⊤ ∨ b = ⊤
⊢ ⊤ = a ^ p * (ENNReal.ofReal p)⁻¹ + b ^ q * (ENNReal.ofReal q)⁻¹

tactic: simp [hpq.pos]
state_before: ι : Type u
s : Finset ι
a b : ℝ≥0∞
p q : ℝ
hpq : p.IsConjExponent q
h : a ≠ ⊤ ∧ b ≠ ⊤
⊢ p.toNNReal ≠ 0
state_after: no goals

tactic: simp [hpq.symm.pos]
state_before: ι : Type u
s : Finset ι
a b : ℝ≥0∞
p q : ℝ
hpq : p.IsConjExponent q
h : a ≠ ⊤ ∧ b ≠ ⊤
⊢ q.toNNReal ≠ 0
state_after: no goals