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

Proof steps:
state_before: ι : Type u
s : Finset ι
f g : ι → ℝ≥0
p q : ℝ
hpq : p.IsConjExponent q
⊢ ∑ i ∈ s, f i * g i ≤ (∑ i ∈ s, f i ^ p) ^ (1 / p) * (∑ i ∈ s, g i ^ q) ^ (1 / q)
state_after: case pos
ι : Type u
s : Finset ι
f g : ι → ℝ≥0
p q : ℝ
hpq : p.IsConjExponent q
hF_zero : ∑ i ∈ s, f i ^ p = 0
⊢ ∑ i ∈ s, f i * g i ≤ (∑ i ∈ s, f i ^ p) ^ (1 / p) * (∑ i ∈ s, g i ^ q) ^ (1 / q)

case neg
ι : Type u
s : Finset ι
f g : ι → ℝ≥0
p q : ℝ
hpq : p.IsConjExponent q
hF_zero : ¬∑ i ∈ s, f i ^ p = 0
⊢ ∑ i ∈ s, f i * g i ≤ (∑ i ∈ s, f i ^ p) ^ (1 / p) * (∑ i ∈ s, g i ^ q) ^ (1 / q)
tactic: by_cases hF_zero : ∑ i ∈ s, f i ^ p = 0
state_before: case neg
ι : Type u
s : Finset ι
f g : ι → ℝ≥0
p q : ℝ
hpq : p.IsConjExponent q
hF_zero : ¬∑ i ∈ s, f i ^ p = 0
⊢ ∑ i ∈ s, f i * g i ≤ (∑ i ∈ s, f i ^ p) ^ (1 / p) * (∑ i ∈ s, g i ^ q) ^ (1 / q)
state_after: case pos
ι : Type u
s : Finset ι
f g : ι → ℝ≥0
p q : ℝ
hpq : p.IsConjExponent q
hF_zero : ¬∑ i ∈ s, f i ^ p = 0
hG_zero : ∑ i ∈ s, g i ^ q = 0
⊢ ∑ i ∈ s, f i * g i ≤ (∑ i ∈ s, f i ^ p) ^ (1 / p) * (∑ i ∈ s, g i ^ q) ^ (1 / q)

case neg
ι : Type u
s : Finset ι
f g : ι → ℝ≥0
p q : ℝ
hpq : p.IsConjExponent q
hF_zero : ¬∑ i ∈ s, f i ^ p = 0
hG_zero : ¬∑ i ∈ s, g i ^ q = 0
⊢ ∑ i ∈ s, f i * g i ≤ (∑ i ∈ s, f i ^ p) ^ (1 / p) * (∑ i ∈ s, g i ^ q) ^ (1 / q)
tactic: by_cases hG_zero : ∑ i ∈ s, g i ^ q = 0
state_before: case neg
ι : Type u
s : Finset ι
f g : ι → ℝ≥0
p q : ℝ
hpq : p.IsConjExponent q
hF_zero : ¬∑ i ∈ s, f i ^ p = 0
hG_zero : ¬∑ i ∈ s, g i ^ q = 0
⊢ ∑ i ∈ s, f i * g i ≤ (∑ i ∈ s, f i ^ p) ^ (1 / p) * (∑ i ∈ s, g i ^ q) ^ (1 / q)
state_after: case neg
ι : Type u
s : Finset ι
f g : ι → ℝ≥0
p q : ℝ
hpq : p.IsConjExponent q
hF_zero : ¬∑ i ∈ s, f i ^ p = 0
hG_zero : ¬∑ i ∈ s, g i ^ q = 0
f' : ι → ℝ≥0 := fun i => f i / (∑ i ∈ s, f i ^ p) ^ (1 / p)
⊢ ∑ i ∈ s, f i * g i ≤ (∑ i ∈ s, f i ^ p) ^ (1 / p) * (∑ i ∈ s, g i ^ q) ^ (1 / q)
tactic: let f' i := f i / (∑ i ∈ s, f i ^ p) ^ (1 / p)
state_before: case neg
ι : Type u
s : Finset ι
f g : ι → ℝ≥0
p q : ℝ
hpq : p.IsConjExponent q
hF_zero : ¬∑ i ∈ s, f i ^ p = 0
hG_zero : ¬∑ i ∈ s, g i ^ q = 0
f' : ι → ℝ≥0 := fun i => f i / (∑ i ∈ s, f i ^ p) ^ (1 / p)
⊢ ∑ i ∈ s, f i * g i ≤ (∑ i ∈ s, f i ^ p) ^ (1 / p) * (∑ i ∈ s, g i ^ q) ^ (1 / q)
state_after: case neg
ι : Type u
s : Finset ι
f g : ι → ℝ≥0
p q : ℝ
hpq : p.IsConjExponent q
hF_zero : ¬∑ i ∈ s, f i ^ p = 0
hG_zero : ¬∑ i ∈ s, g i ^ q = 0
f' : ι → ℝ≥0 := fun i => f i / (∑ i ∈ s, f i ^ p) ^ (1 / p)
g' : ι → ℝ≥0 := fun i => g i / (∑ i ∈ s, g i ^ q) ^ (1 / q)
⊢ ∑ i ∈ s, f i * g i ≤ (∑ i ∈ s, f i ^ p) ^ (1 / p) * (∑ i ∈ s, g i ^ q) ^ (1 / q)
tactic: let g' i := g i / (∑ i ∈ s, g i ^ q) ^ (1 / q)
state_before: case neg
ι : Type u
s : Finset ι
f g : ι → ℝ≥0
p q : ℝ
hpq : p.IsConjExponent q
hF_zero : ¬∑ i ∈ s, f i ^ p = 0
hG_zero : ¬∑ i ∈ s, g i ^ q = 0
f' : ι → ℝ≥0 := fun i => f i / (∑ i ∈ s, f i ^ p) ^ (1 / p)
g' : ι → ℝ≥0 := fun i => g i / (∑ i ∈ s, g i ^ q) ^ (1 / q)
⊢ ∑ i ∈ s, f' i * g' i ≤ 1
state_after: case neg.refine_1
ι : Type u
s : Finset ι
f g : ι → ℝ≥0
p q : ℝ
hpq : p.IsConjExponent q
hF_zero : ¬∑ i ∈ s, f i ^ p = 0
hG_zero : ¬∑ i ∈ s, g i ^ q = 0
f' : ι → ℝ≥0 := fun i => f i / (∑ i ∈ s, f i ^ p) ^ (1 / p)
g' : ι → ℝ≥0 := fun i => g i / (∑ i ∈ s, g i ^ q) ^ (1 / q)
⊢ ∑ i ∈ s, f' i ^ p = 1

case neg.refine_2
ι : Type u
s : Finset ι
f g : ι → ℝ≥0
p q : ℝ
hpq : p.IsConjExponent q
hF_zero : ¬∑ i ∈ s, f i ^ p = 0
hG_zero : ¬∑ i ∈ s, g i ^ q = 0
f' : ι → ℝ≥0 := fun i => f i / (∑ i ∈ s, f i ^ p) ^ (1 / p)
g' : ι → ℝ≥0 := fun i => g i / (∑ i ∈ s, g i ^ q) ^ (1 / q)
⊢ ∑ i ∈ s, g' i ^ q = 1
tactic: refine inner_le_Lp_mul_Lp_of_norm_le_one s f' g' hpq (le_of_eq ?_) (le_of_eq ?_)