Theorem: lp.tsum_mul_le_mul_norm
File: Mathlib/Analysis/NormedSpace/lpSpace.lean

tactic: have hf₁ : ∀ i, 0 ≤ ‖f i‖ := fun i => norm_nonneg _
state_before: α : Type u_1
E : α → Type u_2
p✝ q✝ : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
p q : ℝ≥0∞
hpq : Real.IsConjugateExponent (ENNReal.toReal p) (ENNReal.toReal q)
f : { x // x ∈ lp E p }
g : { x // x ∈ lp E q }
⊢ (Summable fun i => ‖↑f i‖ * ‖↑g i‖) ∧ (∑' (i : α), ‖↑f i‖ * ‖↑g i‖) ≤ ‖f‖ * ‖g‖

tactic: have hg₁ : ∀ i, 0 ≤ ‖g i‖ := fun i => norm_nonneg _
state_before: α : Type u_1
E : α → Type u_2
p✝ q✝ : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
p q : ℝ≥0∞
hpq : Real.IsConjugateExponent (ENNReal.toReal p) (ENNReal.toReal q)
f : { x // x ∈ lp E p }
g : { x // x ∈ lp E q }
hf₁ : ∀ (i : α), 0 ≤ ‖↑f i‖
⊢ (Summable fun i => ‖↑f i‖ * ‖↑g i‖) ∧ (∑' (i : α), ‖↑f i‖ * ‖↑g i‖) ≤ ‖f‖ * ‖g‖

tactic: have hf₂ := lp.hasSum_norm hpq.pos f
state_before: α : Type u_1
E : α → Type u_2
p✝ q✝ : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
p q : ℝ≥0∞
hpq : Real.IsConjugateExponent (ENNReal.toReal p) (ENNReal.toReal q)
f : { x // x ∈ lp E p }
g : { x // x ∈ lp E q }
hf₁ : ∀ (i : α), 0 ≤ ‖↑f i‖
hg₁ : ∀ (i : α), 0 ≤ ‖↑g i‖
⊢ (Summable fun i => ‖↑f i‖ * ‖↑g i‖) ∧ (∑' (i : α), ‖↑f i‖ * ‖↑g i‖) ≤ ‖f‖ * ‖g‖

tactic: have hg₂ := lp.hasSum_norm hpq.symm.pos g
state_before: α : Type u_1
E : α → Type u_2
p✝ q✝ : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
p q : ℝ≥0∞
hpq : Real.IsConjugateExponent (ENNReal.toReal p) (ENNReal.toReal q)
f : { x // x ∈ lp E p }
g : { x // x ∈ lp E q }
hf₁ : ∀ (i : α), 0 ≤ ‖↑f i‖
hg₁ : ∀ (i : α), 0 ≤ ‖↑g i‖
hf₂ : HasSum (fun i => ‖↑f i‖ ^ ENNReal.toReal p) (‖f‖ ^ ENNReal.toReal p)
⊢ (Summable fun i => ‖↑f i‖ * ‖↑g i‖) ∧ (∑' (i : α), ‖↑f i‖ * ‖↑g i‖) ≤ ‖f‖ * ‖g‖

tactic: obtain ⟨C, -, hC', hC⟩ :=
  Real.inner_le_Lp_mul_Lq_hasSum_of_nonneg hpq (norm_nonneg' _) (norm_nonneg' _) hf₁ hg₁ hf₂ hg₂
state_before: α : Type u_1
E : α → Type u_2
p✝ q✝ : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
p q : ℝ≥0∞
hpq : Real.IsConjugateExponent (ENNReal.toReal p) (ENNReal.toReal q)
f : { x // x ∈ lp E p }
g : { x // x ∈ lp E q }
hf₁ : ∀ (i : α), 0 ≤ ‖↑f i‖
hg₁ : ∀ (i : α), 0 ≤ ‖↑g i‖
hf₂ : HasSum (fun i => ‖↑f i‖ ^ ENNReal.toReal p) (‖f‖ ^ ENNReal.toReal p)
hg₂ : HasSum (fun i => ‖↑g i‖ ^ ENNReal.toReal q) (‖g‖ ^ ENNReal.toReal q)
⊢ (Summable fun i => ‖↑f i‖ * ‖↑g i‖) ∧ (∑' (i : α), ‖↑f i‖ * ‖↑g i‖) ≤ ‖f‖ * ‖g‖

tactic: rw [← hC.tsum_eq] at hC'
state_before: case intro.intro.intro
α : Type u_1
E : α → Type u_2
p✝ q✝ : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
p q : ℝ≥0∞
hpq : Real.IsConjugateExponent (ENNReal.toReal p) (ENNReal.toReal q)
f : { x // x ∈ lp E p }
g : { x // x ∈ lp E q }
hf₁ : ∀ (i : α), 0 ≤ ‖↑f i‖
hg₁ : ∀ (i : α), 0 ≤ ‖↑g i‖
hf₂ : HasSum (fun i => ‖↑f i‖ ^ ENNReal.toReal p) (‖f‖ ^ ENNReal.toReal p)
hg₂ : HasSum (fun i => ‖↑g i‖ ^ ENNReal.toReal q) (‖g‖ ^ ENNReal.toReal q)
C : ℝ
hC' : C ≤ ‖f‖ * ‖g‖
hC : HasSum (fun i => ‖↑f i‖ * ‖↑g i‖) C
⊢ (Summable fun i => ‖↑f i‖ * ‖↑g i‖) ∧ (∑' (i : α), ‖↑f i‖ * ‖↑g i‖) ≤ ‖f‖ * ‖g‖

tactic: exact ⟨hC.summable, hC'⟩
state_before: case intro.intro.intro
α : Type u_1
E : α → Type u_2
p✝ q✝ : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
p q : ℝ≥0∞
hpq : Real.IsConjugateExponent (ENNReal.toReal p) (ENNReal.toReal q)
f : { x // x ∈ lp E p }
g : { x // x ∈ lp E q }
hf₁ : ∀ (i : α), 0 ≤ ‖↑f i‖
hg₁ : ∀ (i : α), 0 ≤ ‖↑g i‖
hf₂ : HasSum (fun i => ‖↑f i‖ ^ ENNReal.toReal p) (‖f‖ ^ ENNReal.toReal p)
hg₂ : HasSum (fun i => ‖↑g i‖ ^ ENNReal.toReal q) (‖g‖ ^ ENNReal.toReal q)
C : ℝ
hC' : (∑' (b : α), ‖↑f b‖ * ‖↑g b‖) ≤ ‖f‖ * ‖g‖
hC : HasSum (fun i => ‖↑f i‖ * ‖↑g i‖) C
⊢ (Summable fun i => ‖↑f i‖ * ‖↑g i‖) ∧ (∑' (i : α), ‖↑f i‖ * ‖↑g i‖) ≤ ‖f‖ * ‖g‖