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

tactic: by_cases hF_zero : ∑ i ∈ s, f i ^ p = 0
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 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
⊢ ∑ 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: 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
⊢ ∑ 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 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)
⊢ ∑ 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: refine inner_le_Lp_mul_Lp_of_norm_le_one s f' g' hpq (le_of_eq ?_) (le_of_eq ?_)
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: exact inner_le_Lp_mul_Lp_of_norm_eq_zero s f g hpq hF_zero
state_before: 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)
state_after: no goals

tactic: calc
  ∑ i ∈ s, f i * g i = ∑ i ∈ s, g i * f i := by
    congr with i
    rw [mul_comm]
  _ ≤ (∑ i ∈ s, g i ^ q) ^ (1 / q) * (∑ i ∈ s, f i ^ p) ^ (1 / p) :=
    (inner_le_Lp_mul_Lp_of_norm_eq_zero s g f hpq.symm hG_zero)
  _ = (∑ i ∈ s, f i ^ p) ^ (1 / p) * (∑ i ∈ s, g i ^ q) ^ (1 / q) := mul_comm _ _
state_before: 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)
state_after: no goals

tactic: congr with i
state_before: ι : 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, g i * f i
state_after: case e_f.h.a
ι : 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 : ι
⊢ ↑(f i * g i) = ↑(g i * f i)

tactic: rw [mul_comm]
state_before: case e_f.h.a
ι : 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 : ι
⊢ ↑(f i * g i) = ↑(g i * f i)
state_after: no goals

tactic: simp_rw [f', g', div_mul_div_comm, ← sum_div] at this
state_before: ι : 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)
this : ∑ i ∈ s, f' i * g' i ≤ 1
⊢ ∑ i ∈ s, f i * g i ≤ (∑ i ∈ s, f i ^ p) ^ (1 / p) * (∑ i ∈ s, g i ^ q) ^ (1 / q)
state_after: ι : 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)
this : (∑ i ∈ s, f i * g i) / ((∑ i ∈ s, f i ^ p) ^ (1 / p) * (∑ i ∈ s, g i ^ q) ^ (1 / q)) ≤ 1
⊢ ∑ i ∈ s, f i * g i ≤ (∑ i ∈ s, f i ^ p) ^ (1 / p) * (∑ i ∈ s, g i ^ q) ^ (1 / q)

tactic: rwa [div_le_iff, one_mul] at this
state_before: ι : 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)
this : (∑ i ∈ s, f i * g i) / ((∑ i ∈ s, f i ^ p) ^ (1 / p) * (∑ i ∈ s, g i ^ q) ^ (1 / q)) ≤ 1
⊢ ∑ i ∈ s, f i * g i ≤ (∑ i ∈ s, f i ^ p) ^ (1 / p) * (∑ i ∈ s, g i ^ q) ^ (1 / q)
state_after: ι : 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)
this : (∑ i ∈ s, f i * g i) / ((∑ i ∈ s, f i ^ p) ^ (1 / p) * (∑ i ∈ s, g i ^ q) ^ (1 / q)) ≤ 1
⊢ (∑ i ∈ s, f i ^ p) ^ (1 / p) * (∑ i ∈ s, g i ^ q) ^ (1 / q) ≠ 0

tactic: refine mul_ne_zero ?_ ?_
state_before: ι : 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)
this : (∑ i ∈ s, f i * g i) / ((∑ i ∈ s, f i ^ p) ^ (1 / p) * (∑ i ∈ s, g i ^ q) ^ (1 / q)) ≤ 1
⊢ (∑ i ∈ s, f i ^ p) ^ (1 / p) * (∑ i ∈ s, g i ^ q) ^ (1 / q) ≠ 0
state_after: case 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)
this : (∑ i ∈ s, f i * g i) / ((∑ i ∈ s, f i ^ p) ^ (1 / p) * (∑ i ∈ s, g i ^ q) ^ (1 / q)) ≤ 1
⊢ (∑ i ∈ s, f i ^ p) ^ (1 / p) ≠ 0

case 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)
this : (∑ i ∈ s, f i * g i) / ((∑ i ∈ s, f i ^ p) ^ (1 / p) * (∑ i ∈ s, g i ^ q) ^ (1 / q)) ≤ 1
⊢ (∑ i ∈ s, g i ^ q) ^ (1 / q) ≠ 0

tactic: rw [Ne, rpow_eq_zero_iff, not_and_or]
state_before: case 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)
this : (∑ i ∈ s, f i * g i) / ((∑ i ∈ s, f i ^ p) ^ (1 / p) * (∑ i ∈ s, g i ^ q) ^ (1 / q)) ≤ 1
⊢ (∑ i ∈ s, f i ^ p) ^ (1 / p) ≠ 0
state_after: case 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)
this : (∑ i ∈ s, f i * g i) / ((∑ i ∈ s, f i ^ p) ^ (1 / p) * (∑ i ∈ s, g i ^ q) ^ (1 / q)) ≤ 1
⊢ ¬∑ i ∈ s, f i ^ p = 0 ∨ ¬1 / p ≠ 0

tactic: exact Or.inl hF_zero
state_before: case 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)
this : (∑ i ∈ s, f i * g i) / ((∑ i ∈ s, f i ^ p) ^ (1 / p) * (∑ i ∈ s, g i ^ q) ^ (1 / q)) ≤ 1
⊢ ¬∑ i ∈ s, f i ^ p = 0 ∨ ¬1 / p ≠ 0
state_after: no goals

tactic: rw [Ne, rpow_eq_zero_iff, not_and_or]
state_before: case 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)
this : (∑ i ∈ s, f i * g i) / ((∑ i ∈ s, f i ^ p) ^ (1 / p) * (∑ i ∈ s, g i ^ q) ^ (1 / q)) ≤ 1
⊢ (∑ i ∈ s, g i ^ q) ^ (1 / q) ≠ 0
state_after: case 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)
this : (∑ i ∈ s, f i * g i) / ((∑ i ∈ s, f i ^ p) ^ (1 / p) * (∑ i ∈ s, g i ^ q) ^ (1 / q)) ≤ 1
⊢ ¬∑ i ∈ s, g i ^ q = 0 ∨ ¬1 / q ≠ 0

tactic: exact Or.inl hG_zero
state_before: case 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)
this : (∑ i ∈ s, f i * g i) / ((∑ i ∈ s, f i ^ p) ^ (1 / p) * (∑ i ∈ s, g i ^ q) ^ (1 / q)) ≤ 1
⊢ ¬∑ i ∈ s, g i ^ q = 0 ∨ ¬1 / q ≠ 0
state_after: no goals

tactic: simp_rw [f', div_rpow, ← sum_div, ← rpow_mul, one_div, inv_mul_cancel hpq.ne_zero, rpow_one,
  div_self hF_zero]
state_before: 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
state_after: no goals

tactic: simp_rw [g', div_rpow, ← sum_div, ← rpow_mul, one_div, inv_mul_cancel hpq.symm.ne_zero,
  rpow_one, div_self hG_zero]
state_before: 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
state_after: no goals