Theorem: NNReal.inner_le_Lp_mul_Lp_of_norm_le_one
File: Mathlib/Analysis/MeanInequalities.lean

tactic: have hp_ne_zero : Real.toNNReal p ≠ 0 := (zero_lt_one.trans hpq.toNNReal.one_lt).ne.symm
state_before: ι : Type u
s : Finset ι
f g : ι → ℝ≥0
p q : ℝ
hpq : p.IsConjExponent q
hf : ∑ i ∈ s, f i ^ p ≤ 1
hg : ∑ i ∈ s, g i ^ q ≤ 1
⊢ ∑ i ∈ s, f i * g i ≤ 1
state_after: ι : Type u
s : Finset ι
f g : ι → ℝ≥0
p q : ℝ
hpq : p.IsConjExponent q
hf : ∑ i ∈ s, f i ^ p ≤ 1
hg : ∑ i ∈ s, g i ^ q ≤ 1
hp_ne_zero : p.toNNReal ≠ 0
⊢ ∑ i ∈ s, f i * g i ≤ 1

tactic: have hq_ne_zero : Real.toNNReal q ≠ 0 := (zero_lt_one.trans hpq.toNNReal.symm.one_lt).ne.symm
state_before: ι : Type u
s : Finset ι
f g : ι → ℝ≥0
p q : ℝ
hpq : p.IsConjExponent q
hf : ∑ i ∈ s, f i ^ p ≤ 1
hg : ∑ i ∈ s, g i ^ q ≤ 1
hp_ne_zero : p.toNNReal ≠ 0
⊢ ∑ i ∈ s, f i * g i ≤ 1
state_after: ι : Type u
s : Finset ι
f g : ι → ℝ≥0
p q : ℝ
hpq : p.IsConjExponent q
hf : ∑ i ∈ s, f i ^ p ≤ 1
hg : ∑ i ∈ s, g i ^ q ≤ 1
hp_ne_zero : p.toNNReal ≠ 0
hq_ne_zero : q.toNNReal ≠ 0
⊢ ∑ i ∈ s, f i * g i ≤ 1

tactic: rw [sum_add_distrib, sum_div, sum_div]
state_before: ι : Type u
s : Finset ι
f g : ι → ℝ≥0
p q : ℝ
hpq : p.IsConjExponent q
hf : ∑ i ∈ s, f i ^ p ≤ 1
hg : ∑ i ∈ s, g i ^ q ≤ 1
hp_ne_zero : p.toNNReal ≠ 0
hq_ne_zero : q.toNNReal ≠ 0
⊢ ∑ i ∈ s, (f i ^ p / p.toNNReal + g i ^ q / q.toNNReal) =
    (∑ i ∈ s, f i ^ p) / p.toNNReal + (∑ i ∈ s, g i ^ q) / q.toNNReal
state_after: no goals

tactic: refine add_le_add ?_ ?_
state_before: ι : Type u
s : Finset ι
f g : ι → ℝ≥0
p q : ℝ
hpq : p.IsConjExponent q
hf : ∑ i ∈ s, f i ^ p ≤ 1
hg : ∑ i ∈ s, g i ^ q ≤ 1
hp_ne_zero : p.toNNReal ≠ 0
hq_ne_zero : q.toNNReal ≠ 0
⊢ (∑ i ∈ s, f i ^ p) / p.toNNReal + (∑ i ∈ s, g i ^ q) / q.toNNReal ≤ 1 / p.toNNReal + 1 / q.toNNReal
state_after: case refine_1
ι : Type u
s : Finset ι
f g : ι → ℝ≥0
p q : ℝ
hpq : p.IsConjExponent q
hf : ∑ i ∈ s, f i ^ p ≤ 1
hg : ∑ i ∈ s, g i ^ q ≤ 1
hp_ne_zero : p.toNNReal ≠ 0
hq_ne_zero : q.toNNReal ≠ 0
⊢ (∑ i ∈ s, f i ^ p) / p.toNNReal ≤ 1 / p.toNNReal

case refine_2
ι : Type u
s : Finset ι
f g : ι → ℝ≥0
p q : ℝ
hpq : p.IsConjExponent q
hf : ∑ i ∈ s, f i ^ p ≤ 1
hg : ∑ i ∈ s, g i ^ q ≤ 1
hp_ne_zero : p.toNNReal ≠ 0
hq_ne_zero : q.toNNReal ≠ 0
⊢ (∑ i ∈ s, g i ^ q) / q.toNNReal ≤ 1 / q.toNNReal

tactic: rwa [div_le_iff hp_ne_zero, div_mul_cancel₀ _ hp_ne_zero]
state_before: case refine_1
ι : Type u
s : Finset ι
f g : ι → ℝ≥0
p q : ℝ
hpq : p.IsConjExponent q
hf : ∑ i ∈ s, f i ^ p ≤ 1
hg : ∑ i ∈ s, g i ^ q ≤ 1
hp_ne_zero : p.toNNReal ≠ 0
hq_ne_zero : q.toNNReal ≠ 0
⊢ (∑ i ∈ s, f i ^ p) / p.toNNReal ≤ 1 / p.toNNReal
state_after: no goals

tactic: rwa [div_le_iff hq_ne_zero, div_mul_cancel₀ _ hq_ne_zero]
state_before: case refine_2
ι : Type u
s : Finset ι
f g : ι → ℝ≥0
p q : ℝ
hpq : p.IsConjExponent q
hf : ∑ i ∈ s, f i ^ p ≤ 1
hg : ∑ i ∈ s, g i ^ q ≤ 1
hp_ne_zero : p.toNNReal ≠ 0
hq_ne_zero : q.toNNReal ≠ 0
⊢ (∑ i ∈ s, g i ^ q) / q.toNNReal ≤ 1 / q.toNNReal
state_after: no goals

tactic: simp_rw [one_div, hpq.toNNReal.inv_add_inv_conj]
state_before: ι : Type u
s : Finset ι
f g : ι → ℝ≥0
p q : ℝ
hpq : p.IsConjExponent q
hf : ∑ i ∈ s, f i ^ p ≤ 1
hg : ∑ i ∈ s, g i ^ q ≤ 1
hp_ne_zero : p.toNNReal ≠ 0
hq_ne_zero : q.toNNReal ≠ 0
⊢ 1 / p.toNNReal + 1 / q.toNNReal = 1
state_after: no goals