[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : (i : α) → E i
⊢ Memℓp f 0 ↔ Set.Finite {i | f i ≠ 0}
[PROOFSTEP]
dsimp [Memℓp]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : (i : α) → E i
⊢ (if 0 = 0 then Set.Finite {i | ¬f i = 0}
    else if 0 = ⊤ then BddAbove (Set.range fun i => ‖f i‖) else Summable fun i => ‖f i‖ ^ 0) ↔
    Set.Finite {i | ¬f i = 0}
[PROOFSTEP]
rw [if_pos rfl]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : (i : α) → E i
⊢ Memℓp f ⊤ ↔ BddAbove (Set.range fun i => ‖f i‖)
[PROOFSTEP]
dsimp [Memℓp]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : (i : α) → E i
⊢ (if ⊤ = 0 then Set.Finite {i | ¬f i = 0}
    else if ⊤ = ⊤ then BddAbove (Set.range fun i => ‖f i‖) else Summable fun i => ‖f i‖ ^ 0) ↔
    BddAbove (Set.range fun i => ‖f i‖)
[PROOFSTEP]
rw [if_neg ENNReal.top_ne_zero, if_pos rfl]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : 0 < ENNReal.toReal p
f : (i : α) → E i
⊢ Memℓp f p ↔ Summable fun i => ‖f i‖ ^ ENNReal.toReal p
[PROOFSTEP]
rw [ENNReal.toReal_pos_iff] at hp 
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : 0 < p ∧ p < ⊤
f : (i : α) → E i
⊢ Memℓp f p ↔ Summable fun i => ‖f i‖ ^ ENNReal.toReal p
[PROOFSTEP]
dsimp [Memℓp]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : 0 < p ∧ p < ⊤
f : (i : α) → E i
⊢ (if p = 0 then Set.Finite {i | ¬f i = 0}
    else if p = ⊤ then BddAbove (Set.range fun i => ‖f i‖) else Summable fun i => ‖f i‖ ^ ENNReal.toReal p) ↔
    Summable fun i => ‖f i‖ ^ ENNReal.toReal p
[PROOFSTEP]
rw [if_neg hp.1.ne', if_neg hp.2.ne]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : (i : α) → E i
hf : Summable fun i => ‖f i‖ ^ ENNReal.toReal p
⊢ Memℓp f p
[PROOFSTEP]
rcases p.trichotomy with (rfl | rfl | hp)
[GOAL]
case inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : (i : α) → E i
hf : Summable fun i => ‖f i‖ ^ ENNReal.toReal 0
⊢ Memℓp f 0
[PROOFSTEP]
apply memℓp_zero
[GOAL]
case inl.hf
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : (i : α) → E i
hf : Summable fun i => ‖f i‖ ^ ENNReal.toReal 0
⊢ Set.Finite {i | f i ≠ 0}
[PROOFSTEP]
have H : Summable fun _ : α => (1 : ℝ) := by simpa using hf
[GOAL]
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : (i : α) → E i
hf : Summable fun i => ‖f i‖ ^ ENNReal.toReal 0
⊢ Summable fun x => 1
[PROOFSTEP]
simpa using hf
[GOAL]
case inl.hf
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : (i : α) → E i
hf : Summable fun i => ‖f i‖ ^ ENNReal.toReal 0
H : Summable fun x => 1
⊢ Set.Finite {i | f i ≠ 0}
[PROOFSTEP]
exact (Set.Finite.of_summable_const (by norm_num) H).subset (Set.subset_univ _)
[GOAL]
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : (i : α) → E i
hf : Summable fun i => ‖f i‖ ^ ENNReal.toReal 0
H : Summable fun x => 1
⊢ 0 < 1
[PROOFSTEP]
norm_num
[GOAL]
case inr.inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : (i : α) → E i
hf : Summable fun i => ‖f i‖ ^ ENNReal.toReal ⊤
⊢ Memℓp f ⊤
[PROOFSTEP]
apply memℓp_infty
[GOAL]
case inr.inl.hf
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : (i : α) → E i
hf : Summable fun i => ‖f i‖ ^ ENNReal.toReal ⊤
⊢ BddAbove (Set.range fun i => ‖f i‖)
[PROOFSTEP]
have H : Summable fun _ : α => (1 : ℝ) := by simpa using hf
[GOAL]
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : (i : α) → E i
hf : Summable fun i => ‖f i‖ ^ ENNReal.toReal ⊤
⊢ Summable fun x => 1
[PROOFSTEP]
simpa using hf
[GOAL]
case inr.inl.hf
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : (i : α) → E i
hf : Summable fun i => ‖f i‖ ^ ENNReal.toReal ⊤
H : Summable fun x => 1
⊢ BddAbove (Set.range fun i => ‖f i‖)
[PROOFSTEP]
simpa using ((Set.Finite.of_summable_const (by norm_num) H).image fun i => ‖f i‖).bddAbove
[GOAL]
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : (i : α) → E i
hf : Summable fun i => ‖f i‖ ^ ENNReal.toReal ⊤
H : Summable fun x => 1
⊢ 0 < 1
[PROOFSTEP]
norm_num
[GOAL]
case inr.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : (i : α) → E i
hf : Summable fun i => ‖f i‖ ^ ENNReal.toReal p
hp : 0 < ENNReal.toReal p
⊢ Memℓp f p
[PROOFSTEP]
exact (memℓp_gen_iff hp).2 hf
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
C : ℝ
f : (i : α) → E i
hf : ∀ (s : Finset α), ∑ i in s, ‖f i‖ ^ ENNReal.toReal p ≤ C
⊢ Memℓp f p
[PROOFSTEP]
apply memℓp_gen
[GOAL]
case hf
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
C : ℝ
f : (i : α) → E i
hf : ∀ (s : Finset α), ∑ i in s, ‖f i‖ ^ ENNReal.toReal p ≤ C
⊢ Summable fun i => ‖f i‖ ^ ENNReal.toReal p
[PROOFSTEP]
use⨆ s : Finset α, ∑ i in s, ‖f i‖ ^ p.toReal
[GOAL]
case h
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
C : ℝ
f : (i : α) → E i
hf : ∀ (s : Finset α), ∑ i in s, ‖f i‖ ^ ENNReal.toReal p ≤ C
⊢ HasSum (fun i => ‖f i‖ ^ ENNReal.toReal p) (⨆ (s : Finset α), ∑ i in s, ‖f i‖ ^ ENNReal.toReal p)
[PROOFSTEP]
apply hasSum_of_isLUB_of_nonneg
[GOAL]
case h.h
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
C : ℝ
f : (i : α) → E i
hf : ∀ (s : Finset α), ∑ i in s, ‖f i‖ ^ ENNReal.toReal p ≤ C
⊢ ∀ (i : α), 0 ≤ ‖f i‖ ^ ENNReal.toReal p
[PROOFSTEP]
intro b
[GOAL]
case h.h
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
C : ℝ
f : (i : α) → E i
hf : ∀ (s : Finset α), ∑ i in s, ‖f i‖ ^ ENNReal.toReal p ≤ C
b : α
⊢ 0 ≤ ‖f b‖ ^ ENNReal.toReal p
[PROOFSTEP]
exact Real.rpow_nonneg_of_nonneg (norm_nonneg _) _
[GOAL]
case h.hf
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
C : ℝ
f : (i : α) → E i
hf : ∀ (s : Finset α), ∑ i in s, ‖f i‖ ^ ENNReal.toReal p ≤ C
⊢ IsLUB (Set.range fun s => ∑ i in s, ‖f i‖ ^ ENNReal.toReal p) (⨆ (s : Finset α), ∑ i in s, ‖f i‖ ^ ENNReal.toReal p)
[PROOFSTEP]
apply isLUB_ciSup
[GOAL]
case h.hf.H
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
C : ℝ
f : (i : α) → E i
hf : ∀ (s : Finset α), ∑ i in s, ‖f i‖ ^ ENNReal.toReal p ≤ C
⊢ BddAbove (Set.range fun s => ∑ i in s, ‖f i‖ ^ ENNReal.toReal p)
[PROOFSTEP]
use C
[GOAL]
case h
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
C : ℝ
f : (i : α) → E i
hf : ∀ (s : Finset α), ∑ i in s, ‖f i‖ ^ ENNReal.toReal p ≤ C
⊢ C ∈ upperBounds (Set.range fun s => ∑ i in s, ‖f i‖ ^ ENNReal.toReal p)
[PROOFSTEP]
rintro - ⟨s, rfl⟩
[GOAL]
case h.intro
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
C : ℝ
f : (i : α) → E i
hf : ∀ (s : Finset α), ∑ i in s, ‖f i‖ ^ ENNReal.toReal p ≤ C
s : Finset α
⊢ (fun s => ∑ i in s, ‖f i‖ ^ ENNReal.toReal p) s ≤ C
[PROOFSTEP]
exact hf s
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
⊢ Memℓp 0 p
[PROOFSTEP]
rcases p.trichotomy with (rfl | rfl | hp)
[GOAL]
case inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
⊢ Memℓp 0 0
[PROOFSTEP]
apply memℓp_zero
[GOAL]
case inl.hf
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
⊢ Set.Finite {i | OfNat.ofNat 0 i ≠ 0}
[PROOFSTEP]
simp
[GOAL]
case inr.inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
⊢ Memℓp 0 ⊤
[PROOFSTEP]
apply memℓp_infty
[GOAL]
case inr.inl.hf
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
⊢ BddAbove (Set.range fun i => ‖OfNat.ofNat 0 i‖)
[PROOFSTEP]
simp only [norm_zero, Pi.zero_apply]
[GOAL]
case inr.inl.hf
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
⊢ BddAbove (Set.range fun i => 0)
[PROOFSTEP]
exact bddAbove_singleton.mono Set.range_const_subset
[GOAL]
case inr.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : 0 < ENNReal.toReal p
⊢ Memℓp 0 p
[PROOFSTEP]
apply memℓp_gen
[GOAL]
case inr.inr.hf
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : 0 < ENNReal.toReal p
⊢ Summable fun i => ‖OfNat.ofNat 0 i‖ ^ ENNReal.toReal p
[PROOFSTEP]
simp [Real.zero_rpow hp.ne', summable_zero]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : (i : α) → E i
hf : Memℓp f p
⊢ Memℓp (-f) p
[PROOFSTEP]
rcases p.trichotomy with (rfl | rfl | hp)
[GOAL]
case inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : (i : α) → E i
hf : Memℓp f 0
⊢ Memℓp (-f) 0
[PROOFSTEP]
apply memℓp_zero
[GOAL]
case inl.hf
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : (i : α) → E i
hf : Memℓp f 0
⊢ Set.Finite {i | (-f) i ≠ 0}
[PROOFSTEP]
simp [hf.finite_dsupport]
[GOAL]
case inr.inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : (i : α) → E i
hf : Memℓp f ⊤
⊢ Memℓp (-f) ⊤
[PROOFSTEP]
apply memℓp_infty
[GOAL]
case inr.inl.hf
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : (i : α) → E i
hf : Memℓp f ⊤
⊢ BddAbove (Set.range fun i => ‖(-f) i‖)
[PROOFSTEP]
simpa using hf.bddAbove
[GOAL]
case inr.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : (i : α) → E i
hf : Memℓp f p
hp : 0 < ENNReal.toReal p
⊢ Memℓp (-f) p
[PROOFSTEP]
apply memℓp_gen
[GOAL]
case inr.inr.hf
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : (i : α) → E i
hf : Memℓp f p
hp : 0 < ENNReal.toReal p
⊢ Summable fun i => ‖(-f) i‖ ^ ENNReal.toReal p
[PROOFSTEP]
simpa using hf.summable hp
[GOAL]
α : Type u_1
E : α → Type u_2
p✝ q✝ : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
p q : ℝ≥0∞
f : (i : α) → E i
hfq : Memℓp f q
hpq : q ≤ p
⊢ Memℓp f p
[PROOFSTEP]
rcases ENNReal.trichotomy₂ hpq with (⟨rfl, rfl⟩ | ⟨rfl, rfl⟩ | ⟨rfl, hp⟩ | ⟨rfl, rfl⟩ | ⟨hq, rfl⟩ | ⟨hq, _, hpq'⟩)
[GOAL]
case inl.intro
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : (i : α) → E i
hfq : Memℓp f 0
hpq : 0 ≤ 0
⊢ Memℓp f 0
[PROOFSTEP]
exact hfq
[GOAL]
case inr.inl.intro
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : (i : α) → E i
hfq : Memℓp f 0
hpq : 0 ≤ ⊤
⊢ Memℓp f ⊤
[PROOFSTEP]
apply memℓp_infty
[GOAL]
case inr.inl.intro.hf
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : (i : α) → E i
hfq : Memℓp f 0
hpq : 0 ≤ ⊤
⊢ BddAbove (Set.range fun i => ‖f i‖)
[PROOFSTEP]
obtain ⟨C, hC⟩ := (hfq.finite_dsupport.image fun i => ‖f i‖).bddAbove
[GOAL]
case inr.inl.intro.hf.intro
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : (i : α) → E i
hfq : Memℓp f 0
hpq : 0 ≤ ⊤
C : ℝ
hC : C ∈ upperBounds ((fun i => ‖f i‖) '' {i | f i ≠ 0})
⊢ BddAbove (Set.range fun i => ‖f i‖)
[PROOFSTEP]
use max 0 C
[GOAL]
case h
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : (i : α) → E i
hfq : Memℓp f 0
hpq : 0 ≤ ⊤
C : ℝ
hC : C ∈ upperBounds ((fun i => ‖f i‖) '' {i | f i ≠ 0})
⊢ max 0 C ∈ upperBounds (Set.range fun i => ‖f i‖)
[PROOFSTEP]
rintro x ⟨i, rfl⟩
[GOAL]
case h.intro
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : (i : α) → E i
hfq : Memℓp f 0
hpq : 0 ≤ ⊤
C : ℝ
hC : C ∈ upperBounds ((fun i => ‖f i‖) '' {i | f i ≠ 0})
i : α
⊢ (fun i => ‖f i‖) i ≤ max 0 C
[PROOFSTEP]
by_cases hi : f i = 0
[GOAL]
case pos
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : (i : α) → E i
hfq : Memℓp f 0
hpq : 0 ≤ ⊤
C : ℝ
hC : C ∈ upperBounds ((fun i => ‖f i‖) '' {i | f i ≠ 0})
i : α
hi : f i = 0
⊢ (fun i => ‖f i‖) i ≤ max 0 C
[PROOFSTEP]
simp [hi]
[GOAL]
case neg
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : (i : α) → E i
hfq : Memℓp f 0
hpq : 0 ≤ ⊤
C : ℝ
hC : C ∈ upperBounds ((fun i => ‖f i‖) '' {i | f i ≠ 0})
i : α
hi : ¬f i = 0
⊢ (fun i => ‖f i‖) i ≤ max 0 C
[PROOFSTEP]
exact (hC ⟨i, hi, rfl⟩).trans (le_max_right _ _)
[GOAL]
case inr.inr.inl.intro
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
p : ℝ≥0∞
f : (i : α) → E i
hp : 0 < ENNReal.toReal p
hfq : Memℓp f 0
hpq : 0 ≤ p
⊢ Memℓp f p
[PROOFSTEP]
apply memℓp_gen
[GOAL]
case inr.inr.inl.intro.hf
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
p : ℝ≥0∞
f : (i : α) → E i
hp : 0 < ENNReal.toReal p
hfq : Memℓp f 0
hpq : 0 ≤ p
⊢ Summable fun i => ‖f i‖ ^ ENNReal.toReal p
[PROOFSTEP]
have : ∀ (i) (_ : i ∉ hfq.finite_dsupport.toFinset), ‖f i‖ ^ p.toReal = 0 :=
  by
  intro i hi
  have : f i = 0 := by simpa using hi
  simp [this, Real.zero_rpow hp.ne']
[GOAL]
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
p : ℝ≥0∞
f : (i : α) → E i
hp : 0 < ENNReal.toReal p
hfq : Memℓp f 0
hpq : 0 ≤ p
⊢ ∀ (i : α), ¬i ∈ Set.Finite.toFinset (_ : Set.Finite {i | f i ≠ 0}) → ‖f i‖ ^ ENNReal.toReal p = 0
[PROOFSTEP]
intro i hi
[GOAL]
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
p : ℝ≥0∞
f : (i : α) → E i
hp : 0 < ENNReal.toReal p
hfq : Memℓp f 0
hpq : 0 ≤ p
i : α
hi : ¬i ∈ Set.Finite.toFinset (_ : Set.Finite {i | f i ≠ 0})
⊢ ‖f i‖ ^ ENNReal.toReal p = 0
[PROOFSTEP]
have : f i = 0 := by simpa using hi
[GOAL]
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
p : ℝ≥0∞
f : (i : α) → E i
hp : 0 < ENNReal.toReal p
hfq : Memℓp f 0
hpq : 0 ≤ p
i : α
hi : ¬i ∈ Set.Finite.toFinset (_ : Set.Finite {i | f i ≠ 0})
⊢ f i = 0
[PROOFSTEP]
simpa using hi
[GOAL]
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
p : ℝ≥0∞
f : (i : α) → E i
hp : 0 < ENNReal.toReal p
hfq : Memℓp f 0
hpq : 0 ≤ p
i : α
hi : ¬i ∈ Set.Finite.toFinset (_ : Set.Finite {i | f i ≠ 0})
this : f i = 0
⊢ ‖f i‖ ^ ENNReal.toReal p = 0
[PROOFSTEP]
simp [this, Real.zero_rpow hp.ne']
[GOAL]
case inr.inr.inl.intro.hf
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
p : ℝ≥0∞
f : (i : α) → E i
hp : 0 < ENNReal.toReal p
hfq : Memℓp f 0
hpq : 0 ≤ p
this : ∀ (i : α), ¬i ∈ Set.Finite.toFinset (_ : Set.Finite {i | f i ≠ 0}) → ‖f i‖ ^ ENNReal.toReal p = 0
⊢ Summable fun i => ‖f i‖ ^ ENNReal.toReal p
[PROOFSTEP]
exact summable_of_ne_finset_zero this
[GOAL]
case inr.inr.inr.inl.intro
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : (i : α) → E i
hfq : Memℓp f ⊤
hpq : ⊤ ≤ ⊤
⊢ Memℓp f ⊤
[PROOFSTEP]
exact hfq
[GOAL]
case inr.inr.inr.inr.inl.intro
α : Type u_1
E : α → Type u_2
p q✝ : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
q : ℝ≥0∞
f : (i : α) → E i
hfq : Memℓp f q
hq : 0 < ENNReal.toReal q
hpq : q ≤ ⊤
⊢ Memℓp f ⊤
[PROOFSTEP]
apply memℓp_infty
[GOAL]
case inr.inr.inr.inr.inl.intro.hf
α : Type u_1
E : α → Type u_2
p q✝ : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
q : ℝ≥0∞
f : (i : α) → E i
hfq : Memℓp f q
hq : 0 < ENNReal.toReal q
hpq : q ≤ ⊤
⊢ BddAbove (Set.range fun i => ‖f i‖)
[PROOFSTEP]
obtain ⟨A, hA⟩ := (hfq.summable hq).tendsto_cofinite_zero.bddAbove_range_of_cofinite
[GOAL]
case inr.inr.inr.inr.inl.intro.hf.intro
α : Type u_1
E : α → Type u_2
p q✝ : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
q : ℝ≥0∞
f : (i : α) → E i
hfq : Memℓp f q
hq : 0 < ENNReal.toReal q
hpq : q ≤ ⊤
A : ℝ
hA : A ∈ upperBounds (Set.range fun i => ‖f i‖ ^ ENNReal.toReal q)
⊢ BddAbove (Set.range fun i => ‖f i‖)
[PROOFSTEP]
use A ^ q.toReal⁻¹
[GOAL]
case h
α : Type u_1
E : α → Type u_2
p q✝ : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
q : ℝ≥0∞
f : (i : α) → E i
hfq : Memℓp f q
hq : 0 < ENNReal.toReal q
hpq : q ≤ ⊤
A : ℝ
hA : A ∈ upperBounds (Set.range fun i => ‖f i‖ ^ ENNReal.toReal q)
⊢ A ^ (ENNReal.toReal q)⁻¹ ∈ upperBounds (Set.range fun i => ‖f i‖)
[PROOFSTEP]
rintro x ⟨i, rfl⟩
[GOAL]
case h.intro
α : Type u_1
E : α → Type u_2
p q✝ : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
q : ℝ≥0∞
f : (i : α) → E i
hfq : Memℓp f q
hq : 0 < ENNReal.toReal q
hpq : q ≤ ⊤
A : ℝ
hA : A ∈ upperBounds (Set.range fun i => ‖f i‖ ^ ENNReal.toReal q)
i : α
⊢ (fun i => ‖f i‖) i ≤ A ^ (ENNReal.toReal q)⁻¹
[PROOFSTEP]
have : 0 ≤ ‖f i‖ ^ q.toReal := Real.rpow_nonneg_of_nonneg (norm_nonneg _) _
[GOAL]
case h.intro
α : Type u_1
E : α → Type u_2
p q✝ : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
q : ℝ≥0∞
f : (i : α) → E i
hfq : Memℓp f q
hq : 0 < ENNReal.toReal q
hpq : q ≤ ⊤
A : ℝ
hA : A ∈ upperBounds (Set.range fun i => ‖f i‖ ^ ENNReal.toReal q)
i : α
this : 0 ≤ ‖f i‖ ^ ENNReal.toReal q
⊢ (fun i => ‖f i‖) i ≤ A ^ (ENNReal.toReal q)⁻¹
[PROOFSTEP]
simpa [← Real.rpow_mul, mul_inv_cancel hq.ne'] using Real.rpow_le_rpow this (hA ⟨i, rfl⟩) (inv_nonneg.mpr hq.le)
[GOAL]
case inr.inr.inr.inr.inr.intro.intro
α : Type u_1
E : α → Type u_2
p✝ q✝ : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
p q : ℝ≥0∞
f : (i : α) → E i
hfq : Memℓp f q
hpq : q ≤ p
hq : 0 < ENNReal.toReal q
left✝ : 0 < ENNReal.toReal p
hpq' : ENNReal.toReal q ≤ ENNReal.toReal p
⊢ Memℓp f p
[PROOFSTEP]
apply memℓp_gen
[GOAL]
case inr.inr.inr.inr.inr.intro.intro.hf
α : Type u_1
E : α → Type u_2
p✝ q✝ : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
p q : ℝ≥0∞
f : (i : α) → E i
hfq : Memℓp f q
hpq : q ≤ p
hq : 0 < ENNReal.toReal q
left✝ : 0 < ENNReal.toReal p
hpq' : ENNReal.toReal q ≤ ENNReal.toReal p
⊢ Summable fun i => ‖f i‖ ^ ENNReal.toReal p
[PROOFSTEP]
have hf' := hfq.summable hq
[GOAL]
case inr.inr.inr.inr.inr.intro.intro.hf
α : Type u_1
E : α → Type u_2
p✝ q✝ : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
p q : ℝ≥0∞
f : (i : α) → E i
hfq : Memℓp f q
hpq : q ≤ p
hq : 0 < ENNReal.toReal q
left✝ : 0 < ENNReal.toReal p
hpq' : ENNReal.toReal q ≤ ENNReal.toReal p
hf' : Summable fun i => ‖f i‖ ^ ENNReal.toReal q
⊢ Summable fun i => ‖f i‖ ^ ENNReal.toReal p
[PROOFSTEP]
refine' summable_of_norm_bounded_eventually _ hf' (@Set.Finite.subset _ {i | 1 ≤ ‖f i‖} _ _ _)
[GOAL]
case inr.inr.inr.inr.inr.intro.intro.hf.refine'_1
α : Type u_1
E : α → Type u_2
p✝ q✝ : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
p q : ℝ≥0∞
f : (i : α) → E i
hfq : Memℓp f q
hpq : q ≤ p
hq : 0 < ENNReal.toReal q
left✝ : 0 < ENNReal.toReal p
hpq' : ENNReal.toReal q ≤ ENNReal.toReal p
hf' : Summable fun i => ‖f i‖ ^ ENNReal.toReal q
⊢ Set.Finite {i | 1 ≤ ‖f i‖}
[PROOFSTEP]
have H : {x : α | 1 ≤ ‖f x‖ ^ q.toReal}.Finite := by
  simpa using eventually_lt_of_tendsto_lt (by norm_num) hf'.tendsto_cofinite_zero
[GOAL]
α : Type u_1
E : α → Type u_2
p✝ q✝ : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
p q : ℝ≥0∞
f : (i : α) → E i
hfq : Memℓp f q
hpq : q ≤ p
hq : 0 < ENNReal.toReal q
left✝ : 0 < ENNReal.toReal p
hpq' : ENNReal.toReal q ≤ ENNReal.toReal p
hf' : Summable fun i => ‖f i‖ ^ ENNReal.toReal q
⊢ Set.Finite {x | 1 ≤ ‖f x‖ ^ ENNReal.toReal q}
[PROOFSTEP]
simpa using eventually_lt_of_tendsto_lt (by norm_num) hf'.tendsto_cofinite_zero
[GOAL]
α : Type u_1
E : α → Type u_2
p✝ q✝ : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
p q : ℝ≥0∞
f : (i : α) → E i
hfq : Memℓp f q
hpq : q ≤ p
hq : 0 < ENNReal.toReal q
left✝ : 0 < ENNReal.toReal p
hpq' : ENNReal.toReal q ≤ ENNReal.toReal p
hf' : Summable fun i => ‖f i‖ ^ ENNReal.toReal q
⊢ 0 < 1
[PROOFSTEP]
norm_num
[GOAL]
case inr.inr.inr.inr.inr.intro.intro.hf.refine'_1
α : Type u_1
E : α → Type u_2
p✝ q✝ : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
p q : ℝ≥0∞
f : (i : α) → E i
hfq : Memℓp f q
hpq : q ≤ p
hq : 0 < ENNReal.toReal q
left✝ : 0 < ENNReal.toReal p
hpq' : ENNReal.toReal q ≤ ENNReal.toReal p
hf' : Summable fun i => ‖f i‖ ^ ENNReal.toReal q
H : Set.Finite {x | 1 ≤ ‖f x‖ ^ ENNReal.toReal q}
⊢ Set.Finite {i | 1 ≤ ‖f i‖}
[PROOFSTEP]
exact H.subset fun i hi => Real.one_le_rpow hi hq.le
[GOAL]
case inr.inr.inr.inr.inr.intro.intro.hf.refine'_2
α : Type u_1
E : α → Type u_2
p✝ q✝ : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
p q : ℝ≥0∞
f : (i : α) → E i
hfq : Memℓp f q
hpq : q ≤ p
hq : 0 < ENNReal.toReal q
left✝ : 0 < ENNReal.toReal p
hpq' : ENNReal.toReal q ≤ ENNReal.toReal p
hf' : Summable fun i => ‖f i‖ ^ ENNReal.toReal q
⊢ {x | (fun i => ‖‖f i‖ ^ ENNReal.toReal p‖ ≤ ‖f i‖ ^ ENNReal.toReal q) x}ᶜ ⊆ {i | 1 ≤ ‖f i‖}
[PROOFSTEP]
show ∀ i, ¬|‖f i‖ ^ p.toReal| ≤ ‖f i‖ ^ q.toReal → 1 ≤ ‖f i‖
[GOAL]
case inr.inr.inr.inr.inr.intro.intro.hf.refine'_2
α : Type u_1
E : α → Type u_2
p✝ q✝ : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
p q : ℝ≥0∞
f : (i : α) → E i
hfq : Memℓp f q
hpq : q ≤ p
hq : 0 < ENNReal.toReal q
left✝ : 0 < ENNReal.toReal p
hpq' : ENNReal.toReal q ≤ ENNReal.toReal p
hf' : Summable fun i => ‖f i‖ ^ ENNReal.toReal q
⊢ ∀ (i : α), ¬|‖f i‖ ^ ENNReal.toReal p| ≤ ‖f i‖ ^ ENNReal.toReal q → 1 ≤ ‖f i‖
[PROOFSTEP]
intro i hi
[GOAL]
case inr.inr.inr.inr.inr.intro.intro.hf.refine'_2
α : Type u_1
E : α → Type u_2
p✝ q✝ : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
p q : ℝ≥0∞
f : (i : α) → E i
hfq : Memℓp f q
hpq : q ≤ p
hq : 0 < ENNReal.toReal q
left✝ : 0 < ENNReal.toReal p
hpq' : ENNReal.toReal q ≤ ENNReal.toReal p
hf' : Summable fun i => ‖f i‖ ^ ENNReal.toReal q
i : α
hi : ¬|‖f i‖ ^ ENNReal.toReal p| ≤ ‖f i‖ ^ ENNReal.toReal q
⊢ 1 ≤ ‖f i‖
[PROOFSTEP]
have : 0 ≤ ‖f i‖ ^ p.toReal := Real.rpow_nonneg_of_nonneg (norm_nonneg _) p.toReal
[GOAL]
case inr.inr.inr.inr.inr.intro.intro.hf.refine'_2
α : Type u_1
E : α → Type u_2
p✝ q✝ : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
p q : ℝ≥0∞
f : (i : α) → E i
hfq : Memℓp f q
hpq : q ≤ p
hq : 0 < ENNReal.toReal q
left✝ : 0 < ENNReal.toReal p
hpq' : ENNReal.toReal q ≤ ENNReal.toReal p
hf' : Summable fun i => ‖f i‖ ^ ENNReal.toReal q
i : α
hi : ¬|‖f i‖ ^ ENNReal.toReal p| ≤ ‖f i‖ ^ ENNReal.toReal q
this : 0 ≤ ‖f i‖ ^ ENNReal.toReal p
⊢ 1 ≤ ‖f i‖
[PROOFSTEP]
simp only [abs_of_nonneg, this] at hi 
[GOAL]
case inr.inr.inr.inr.inr.intro.intro.hf.refine'_2
α : Type u_1
E : α → Type u_2
p✝ q✝ : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
p q : ℝ≥0∞
f : (i : α) → E i
hfq : Memℓp f q
hpq : q ≤ p
hq : 0 < ENNReal.toReal q
left✝ : 0 < ENNReal.toReal p
hpq' : ENNReal.toReal q ≤ ENNReal.toReal p
hf' : Summable fun i => ‖f i‖ ^ ENNReal.toReal q
i : α
this : 0 ≤ ‖f i‖ ^ ENNReal.toReal p
hi : ¬‖f i‖ ^ ENNReal.toReal p ≤ ‖f i‖ ^ ENNReal.toReal q
⊢ 1 ≤ ‖f i‖
[PROOFSTEP]
contrapose! hi
[GOAL]
case inr.inr.inr.inr.inr.intro.intro.hf.refine'_2
α : Type u_1
E : α → Type u_2
p✝ q✝ : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
p q : ℝ≥0∞
f : (i : α) → E i
hfq : Memℓp f q
hpq : q ≤ p
hq : 0 < ENNReal.toReal q
left✝ : 0 < ENNReal.toReal p
hpq' : ENNReal.toReal q ≤ ENNReal.toReal p
hf' : Summable fun i => ‖f i‖ ^ ENNReal.toReal q
i : α
this : 0 ≤ ‖f i‖ ^ ENNReal.toReal p
hi : ‖f i‖ < 1
⊢ ‖f i‖ ^ ENNReal.toReal p ≤ ‖f i‖ ^ ENNReal.toReal q
[PROOFSTEP]
exact Real.rpow_le_rpow_of_exponent_ge' (norm_nonneg _) hi.le hq.le hpq'
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f g : (i : α) → E i
hf : Memℓp f p
hg : Memℓp g p
⊢ Memℓp (f + g) p
[PROOFSTEP]
rcases p.trichotomy with (rfl | rfl | hp)
[GOAL]
case inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f g : (i : α) → E i
hf : Memℓp f 0
hg : Memℓp g 0
⊢ Memℓp (f + g) 0
[PROOFSTEP]
apply memℓp_zero
[GOAL]
case inl.hf
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f g : (i : α) → E i
hf : Memℓp f 0
hg : Memℓp g 0
⊢ Set.Finite {i | (f + g) i ≠ 0}
[PROOFSTEP]
refine' (hf.finite_dsupport.union hg.finite_dsupport).subset fun i => _
[GOAL]
case inl.hf
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f g : (i : α) → E i
hf : Memℓp f 0
hg : Memℓp g 0
i : α
⊢ i ∈ {i | (f + g) i ≠ 0} → i ∈ {i | f i ≠ 0} ∪ {i | g i ≠ 0}
[PROOFSTEP]
simp only [Pi.add_apply, Ne.def, Set.mem_union, Set.mem_setOf_eq]
[GOAL]
case inl.hf
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f g : (i : α) → E i
hf : Memℓp f 0
hg : Memℓp g 0
i : α
⊢ ¬f i + g i = 0 → ¬f i = 0 ∨ ¬g i = 0
[PROOFSTEP]
contrapose!
[GOAL]
case inl.hf
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f g : (i : α) → E i
hf : Memℓp f 0
hg : Memℓp g 0
i : α
⊢ f i = 0 ∧ g i = 0 → f i + g i = 0
[PROOFSTEP]
rintro ⟨hf', hg'⟩
[GOAL]
case inl.hf.intro
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f g : (i : α) → E i
hf : Memℓp f 0
hg : Memℓp g 0
i : α
hf' : f i = 0
hg' : g i = 0
⊢ f i + g i = 0
[PROOFSTEP]
simp [hf', hg']
[GOAL]
case inr.inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f g : (i : α) → E i
hf : Memℓp f ⊤
hg : Memℓp g ⊤
⊢ Memℓp (f + g) ⊤
[PROOFSTEP]
apply memℓp_infty
[GOAL]
case inr.inl.hf
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f g : (i : α) → E i
hf : Memℓp f ⊤
hg : Memℓp g ⊤
⊢ BddAbove (Set.range fun i => ‖(f + g) i‖)
[PROOFSTEP]
obtain ⟨A, hA⟩ := hf.bddAbove
[GOAL]
case inr.inl.hf.intro
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f g : (i : α) → E i
hf : Memℓp f ⊤
hg : Memℓp g ⊤
A : ℝ
hA : A ∈ upperBounds (Set.range fun i => ‖f i‖)
⊢ BddAbove (Set.range fun i => ‖(f + g) i‖)
[PROOFSTEP]
obtain ⟨B, hB⟩ := hg.bddAbove
[GOAL]
case inr.inl.hf.intro.intro
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f g : (i : α) → E i
hf : Memℓp f ⊤
hg : Memℓp g ⊤
A : ℝ
hA : A ∈ upperBounds (Set.range fun i => ‖f i‖)
B : ℝ
hB : B ∈ upperBounds (Set.range fun i => ‖g i‖)
⊢ BddAbove (Set.range fun i => ‖(f + g) i‖)
[PROOFSTEP]
refine' ⟨A + B, _⟩
[GOAL]
case inr.inl.hf.intro.intro
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f g : (i : α) → E i
hf : Memℓp f ⊤
hg : Memℓp g ⊤
A : ℝ
hA : A ∈ upperBounds (Set.range fun i => ‖f i‖)
B : ℝ
hB : B ∈ upperBounds (Set.range fun i => ‖g i‖)
⊢ A + B ∈ upperBounds (Set.range fun i => ‖(f + g) i‖)
[PROOFSTEP]
rintro a ⟨i, rfl⟩
[GOAL]
case inr.inl.hf.intro.intro.intro
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f g : (i : α) → E i
hf : Memℓp f ⊤
hg : Memℓp g ⊤
A : ℝ
hA : A ∈ upperBounds (Set.range fun i => ‖f i‖)
B : ℝ
hB : B ∈ upperBounds (Set.range fun i => ‖g i‖)
i : α
⊢ (fun i => ‖(f + g) i‖) i ≤ A + B
[PROOFSTEP]
exact le_trans (norm_add_le _ _) (add_le_add (hA ⟨i, rfl⟩) (hB ⟨i, rfl⟩))
[GOAL]
case inr.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f g : (i : α) → E i
hf : Memℓp f p
hg : Memℓp g p
hp : 0 < ENNReal.toReal p
⊢ Memℓp (f + g) p
[PROOFSTEP]
apply memℓp_gen
[GOAL]
case inr.inr.hf
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f g : (i : α) → E i
hf : Memℓp f p
hg : Memℓp g p
hp : 0 < ENNReal.toReal p
⊢ Summable fun i => ‖(f + g) i‖ ^ ENNReal.toReal p
[PROOFSTEP]
let C : ℝ := if p.toReal < 1 then 1 else (2 : ℝ) ^ (p.toReal - 1)
[GOAL]
case inr.inr.hf
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f g : (i : α) → E i
hf : Memℓp f p
hg : Memℓp g p
hp : 0 < ENNReal.toReal p
C : ℝ := if ENNReal.toReal p < 1 then 1 else 2 ^ (ENNReal.toReal p - 1)
⊢ Summable fun i => ‖(f + g) i‖ ^ ENNReal.toReal p
[PROOFSTEP]
refine' summable_of_nonneg_of_le _ (fun i => _) (((hf.summable hp).add (hg.summable hp)).mul_left C)
[GOAL]
case inr.inr.hf.refine'_1
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f g : (i : α) → E i
hf : Memℓp f p
hg : Memℓp g p
hp : 0 < ENNReal.toReal p
C : ℝ := if ENNReal.toReal p < 1 then 1 else 2 ^ (ENNReal.toReal p - 1)
⊢ ∀ (b : α), 0 ≤ ‖(f + g) b‖ ^ ENNReal.toReal p
[PROOFSTEP]
exact fun b => Real.rpow_nonneg_of_nonneg (norm_nonneg (f b + g b)) p.toReal
[GOAL]
case inr.inr.hf.refine'_2
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f g : (i : α) → E i
hf : Memℓp f p
hg : Memℓp g p
hp : 0 < ENNReal.toReal p
C : ℝ := if ENNReal.toReal p < 1 then 1 else 2 ^ (ENNReal.toReal p - 1)
i : α
⊢ ‖(f + g) i‖ ^ ENNReal.toReal p ≤ C * (‖f i‖ ^ ENNReal.toReal p + ‖g i‖ ^ ENNReal.toReal p)
[PROOFSTEP]
refine' (Real.rpow_le_rpow (norm_nonneg _) (norm_add_le _ _) hp.le).trans _
[GOAL]
case inr.inr.hf.refine'_2
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f g : (i : α) → E i
hf : Memℓp f p
hg : Memℓp g p
hp : 0 < ENNReal.toReal p
C : ℝ := if ENNReal.toReal p < 1 then 1 else 2 ^ (ENNReal.toReal p - 1)
i : α
⊢ (‖f i‖ + ‖g i‖) ^ ENNReal.toReal p ≤ C * (‖f i‖ ^ ENNReal.toReal p + ‖g i‖ ^ ENNReal.toReal p)
[PROOFSTEP]
dsimp only
[GOAL]
case inr.inr.hf.refine'_2
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f g : (i : α) → E i
hf : Memℓp f p
hg : Memℓp g p
hp : 0 < ENNReal.toReal p
C : ℝ := if ENNReal.toReal p < 1 then 1 else 2 ^ (ENNReal.toReal p - 1)
i : α
⊢ (‖f i‖ + ‖g i‖) ^ ENNReal.toReal p ≤
    (if ENNReal.toReal p < 1 then 1 else 2 ^ (ENNReal.toReal p - 1)) *
      (‖f i‖ ^ ENNReal.toReal p + ‖g i‖ ^ ENNReal.toReal p)
[PROOFSTEP]
split_ifs with h
[GOAL]
case pos
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f g : (i : α) → E i
hf : Memℓp f p
hg : Memℓp g p
hp : 0 < ENNReal.toReal p
C : ℝ := if ENNReal.toReal p < 1 then 1 else 2 ^ (ENNReal.toReal p - 1)
i : α
h : ENNReal.toReal p < 1
⊢ (‖f i‖ + ‖g i‖) ^ ENNReal.toReal p ≤ 1 * (‖f i‖ ^ ENNReal.toReal p + ‖g i‖ ^ ENNReal.toReal p)
[PROOFSTEP]
simpa using NNReal.coe_le_coe.2 (NNReal.rpow_add_le_add_rpow ‖f i‖₊ ‖g i‖₊ hp.le h.le)
[GOAL]
case neg
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f g : (i : α) → E i
hf : Memℓp f p
hg : Memℓp g p
hp : 0 < ENNReal.toReal p
C : ℝ := if ENNReal.toReal p < 1 then 1 else 2 ^ (ENNReal.toReal p - 1)
i : α
h : ¬ENNReal.toReal p < 1
⊢ (‖f i‖ + ‖g i‖) ^ ENNReal.toReal p ≤
    2 ^ (ENNReal.toReal p - 1) * (‖f i‖ ^ ENNReal.toReal p + ‖g i‖ ^ ENNReal.toReal p)
[PROOFSTEP]
let F : Fin 2 → ℝ≥0 := ![‖f i‖₊, ‖g i‖₊]
[GOAL]
case neg
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f g : (i : α) → E i
hf : Memℓp f p
hg : Memℓp g p
hp : 0 < ENNReal.toReal p
C : ℝ := if ENNReal.toReal p < 1 then 1 else 2 ^ (ENNReal.toReal p - 1)
i : α
h : ¬ENNReal.toReal p < 1
F : Fin 2 → ℝ≥0 := ![‖f i‖₊, ‖g i‖₊]
⊢ (‖f i‖ + ‖g i‖) ^ ENNReal.toReal p ≤
    2 ^ (ENNReal.toReal p - 1) * (‖f i‖ ^ ENNReal.toReal p + ‖g i‖ ^ ENNReal.toReal p)
[PROOFSTEP]
simp only [not_lt] at h 
[GOAL]
case neg
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f g : (i : α) → E i
hf : Memℓp f p
hg : Memℓp g p
hp : 0 < ENNReal.toReal p
C : ℝ := if ENNReal.toReal p < 1 then 1 else 2 ^ (ENNReal.toReal p - 1)
i : α
F : Fin 2 → ℝ≥0 := ![‖f i‖₊, ‖g i‖₊]
h : 1 ≤ ENNReal.toReal p
⊢ (‖f i‖ + ‖g i‖) ^ ENNReal.toReal p ≤
    2 ^ (ENNReal.toReal p - 1) * (‖f i‖ ^ ENNReal.toReal p + ‖g i‖ ^ ENNReal.toReal p)
[PROOFSTEP]
simpa [Fin.sum_univ_succ] using Real.rpow_sum_le_const_mul_sum_rpow_of_nonneg Finset.univ h fun i _ => (F i).coe_nonneg
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f g : (i : α) → E i
hf : Memℓp f p
hg : Memℓp g p
⊢ Memℓp (f - g) p
[PROOFSTEP]
rw [sub_eq_add_neg]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f g : (i : α) → E i
hf : Memℓp f p
hg : Memℓp g p
⊢ Memℓp (f + -g) p
[PROOFSTEP]
exact hf.add hg.neg
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
s : Finset ι
f : ι → (i : α) → E i
hf : ∀ (i : ι), i ∈ s → Memℓp (f i) p
⊢ Memℓp (fun a => ∑ i in s, f i a) p
[PROOFSTEP]
haveI : DecidableEq ι := Classical.decEq _
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
s : Finset ι
f : ι → (i : α) → E i
hf : ∀ (i : ι), i ∈ s → Memℓp (f i) p
this : DecidableEq ι
⊢ Memℓp (fun a => ∑ i in s, f i a) p
[PROOFSTEP]
revert hf
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
s : Finset ι
f : ι → (i : α) → E i
this : DecidableEq ι
⊢ (∀ (i : ι), i ∈ s → Memℓp (f i) p) → Memℓp (fun a => ∑ i in s, f i a) p
[PROOFSTEP]
refine' Finset.induction_on s _ _
[GOAL]
case refine'_1
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
s : Finset ι
f : ι → (i : α) → E i
this : DecidableEq ι
⊢ (∀ (i : ι), i ∈ ∅ → Memℓp (f i) p) → Memℓp (fun a => ∑ i in ∅, f i a) p
[PROOFSTEP]
simp only [zero_mem_ℓp', Finset.sum_empty, imp_true_iff]
[GOAL]
case refine'_2
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
s : Finset ι
f : ι → (i : α) → E i
this : DecidableEq ι
⊢ ∀ ⦃a : ι⦄ {s : Finset ι},
    ¬a ∈ s →
      ((∀ (i : ι), i ∈ s → Memℓp (f i) p) → Memℓp (fun a => ∑ i in s, f i a) p) →
        (∀ (i : ι), i ∈ insert a s → Memℓp (f i) p) → Memℓp (fun a_3 => ∑ i in insert a s, f i a_3) p
[PROOFSTEP]
intro i s his ih hf
[GOAL]
case refine'_2
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
s✝ : Finset ι
f : ι → (i : α) → E i
this : DecidableEq ι
i : ι
s : Finset ι
his : ¬i ∈ s
ih : (∀ (i : ι), i ∈ s → Memℓp (f i) p) → Memℓp (fun a => ∑ i in s, f i a) p
hf : ∀ (i_1 : ι), i_1 ∈ insert i s → Memℓp (f i_1) p
⊢ Memℓp (fun a => ∑ i in insert i s, f i a) p
[PROOFSTEP]
simp only [his, Finset.sum_insert, not_false_iff]
[GOAL]
case refine'_2
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
s✝ : Finset ι
f : ι → (i : α) → E i
this : DecidableEq ι
i : ι
s : Finset ι
his : ¬i ∈ s
ih : (∀ (i : ι), i ∈ s → Memℓp (f i) p) → Memℓp (fun a => ∑ i in s, f i a) p
hf : ∀ (i_1 : ι), i_1 ∈ insert i s → Memℓp (f i_1) p
⊢ Memℓp (fun a => f i a + ∑ i in s, f i a) p
[PROOFSTEP]
exact (hf i (s.mem_insert_self i)).add (ih fun j hj => hf j (Finset.mem_insert_of_mem hj))
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝³ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝² : NormedRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
f : (i : α) → E i
hf : Memℓp f p
c : 𝕜
⊢ Memℓp (c • f) p
[PROOFSTEP]
rcases p.trichotomy with (rfl | rfl | hp)
[GOAL]
case inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝³ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝² : NormedRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
f : (i : α) → E i
c : 𝕜
hf : Memℓp f 0
⊢ Memℓp (c • f) 0
[PROOFSTEP]
apply memℓp_zero
[GOAL]
case inl.hf
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝³ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝² : NormedRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
f : (i : α) → E i
c : 𝕜
hf : Memℓp f 0
⊢ Set.Finite {i | (c • f) i ≠ 0}
[PROOFSTEP]
refine' hf.finite_dsupport.subset fun i => (_ : ¬c • f i = 0 → ¬f i = 0)
[GOAL]
case inl.hf
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝³ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝² : NormedRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
f : (i : α) → E i
c : 𝕜
hf : Memℓp f 0
i : α
⊢ ¬c • f i = 0 → ¬f i = 0
[PROOFSTEP]
exact not_imp_not.mpr fun hf' => hf'.symm ▸ smul_zero c
[GOAL]
case inr.inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝³ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝² : NormedRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
f : (i : α) → E i
c : 𝕜
hf : Memℓp f ⊤
⊢ Memℓp (c • f) ⊤
[PROOFSTEP]
obtain ⟨A, hA⟩ := hf.bddAbove
[GOAL]
case inr.inl.intro
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝³ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝² : NormedRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
f : (i : α) → E i
c : 𝕜
hf : Memℓp f ⊤
A : ℝ
hA : A ∈ upperBounds (Set.range fun i => ‖f i‖)
⊢ Memℓp (c • f) ⊤
[PROOFSTEP]
refine' memℓp_infty ⟨‖c‖ * A, _⟩
[GOAL]
case inr.inl.intro
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝³ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝² : NormedRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
f : (i : α) → E i
c : 𝕜
hf : Memℓp f ⊤
A : ℝ
hA : A ∈ upperBounds (Set.range fun i => ‖f i‖)
⊢ ‖c‖ * A ∈ upperBounds (Set.range fun i => ‖(c • f) i‖)
[PROOFSTEP]
rintro a ⟨i, rfl⟩
[GOAL]
case inr.inl.intro.intro
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝³ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝² : NormedRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
f : (i : α) → E i
c : 𝕜
hf : Memℓp f ⊤
A : ℝ
hA : A ∈ upperBounds (Set.range fun i => ‖f i‖)
i : α
⊢ (fun i => ‖(c • f) i‖) i ≤ ‖c‖ * A
[PROOFSTEP]
refine' (norm_smul_le _ _).trans _
[GOAL]
case inr.inl.intro.intro
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝³ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝² : NormedRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
f : (i : α) → E i
c : 𝕜
hf : Memℓp f ⊤
A : ℝ
hA : A ∈ upperBounds (Set.range fun i => ‖f i‖)
i : α
⊢ ‖c‖ * ‖f i‖ ≤ ‖c‖ * A
[PROOFSTEP]
exact mul_le_mul_of_nonneg_left (hA ⟨i, rfl⟩) (norm_nonneg c)
[GOAL]
case inr.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝³ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝² : NormedRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
f : (i : α) → E i
hf : Memℓp f p
c : 𝕜
hp : 0 < ENNReal.toReal p
⊢ Memℓp (c • f) p
[PROOFSTEP]
apply memℓp_gen
[GOAL]
case inr.inr.hf
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝³ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝² : NormedRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
f : (i : α) → E i
hf : Memℓp f p
c : 𝕜
hp : 0 < ENNReal.toReal p
⊢ Summable fun i => ‖(c • f) i‖ ^ ENNReal.toReal p
[PROOFSTEP]
have := (hf.summable hp).mul_left (↑(‖c‖₊ ^ p.toReal) : ℝ)
[GOAL]
case inr.inr.hf
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝³ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝² : NormedRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
f : (i : α) → E i
hf : Memℓp f p
c : 𝕜
hp : 0 < ENNReal.toReal p
this : Summable fun i => ↑(‖c‖₊ ^ ENNReal.toReal p) * ‖f i‖ ^ ENNReal.toReal p
⊢ Summable fun i => ‖(c • f) i‖ ^ ENNReal.toReal p
[PROOFSTEP]
simp_rw [← coe_nnnorm, ← NNReal.coe_rpow, ← NNReal.coe_mul, NNReal.summable_coe, ← NNReal.mul_rpow] at this ⊢
[GOAL]
case inr.inr.hf
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝³ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝² : NormedRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
f : (i : α) → E i
hf : Memℓp f p
c : 𝕜
hp : 0 < ENNReal.toReal p
this : Summable fun a => (‖c‖₊ * ‖f a‖₊) ^ ENNReal.toReal p
⊢ Summable fun a => ‖(c • f) a‖₊ ^ ENNReal.toReal p
[PROOFSTEP]
refine' NNReal.summable_of_le _ this
[GOAL]
case inr.inr.hf
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝³ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝² : NormedRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
f : (i : α) → E i
hf : Memℓp f p
c : 𝕜
hp : 0 < ENNReal.toReal p
this : Summable fun a => (‖c‖₊ * ‖f a‖₊) ^ ENNReal.toReal p
⊢ ∀ (b : α), ‖(c • f) b‖₊ ^ ENNReal.toReal p ≤ (‖c‖₊ * ‖f b‖₊) ^ ENNReal.toReal p
[PROOFSTEP]
intro i
[GOAL]
case inr.inr.hf
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝³ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝² : NormedRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
f : (i : α) → E i
hf : Memℓp f p
c : 𝕜
hp : 0 < ENNReal.toReal p
this : Summable fun a => (‖c‖₊ * ‖f a‖₊) ^ ENNReal.toReal p
i : α
⊢ ‖(c • f) i‖₊ ^ ENNReal.toReal p ≤ (‖c‖₊ * ‖f i‖₊) ^ ENNReal.toReal p
[PROOFSTEP]
exact NNReal.rpow_le_rpow (nnnorm_smul_le _ _) ENNReal.toReal_nonneg
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝³ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝² : NormedRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
f : α → 𝕜
hf : Memℓp f p
c : 𝕜
i : α
⊢ BoundedSMul 𝕜 ((fun x => 𝕜) i)
[PROOFSTEP]
infer_instance
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
⊢ AddCommGroup (PreLp E)
[PROOFSTEP]
unfold PreLp
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
⊢ AddCommGroup ((i : α) → E i)
[PROOFSTEP]
infer_instance
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
f : ι → { x // x ∈ lp E p }
s : Finset ι
⊢ ↑(∑ i in s, f i) = ∑ i in s, ↑(f i)
[PROOFSTEP]
simp
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E p }
hp : p = 0
⊢ ℝ
[PROOFSTEP]
subst hp
[GOAL]
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E 0 }
⊢ ℝ
[PROOFSTEP]
exact ((lp.memℓp f).finite_dsupport.toFinset.card : ℝ)
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E ⊤ }
⊢ ‖f‖ = ⨆ (i : α), ‖↑f i‖
[PROOFSTEP]
dsimp [norm]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E ⊤ }
⊢ (if hp : ⊤ = 0 then
      Eq.rec (motive := fun x x_1 => { x_2 // x_2 ∈ lp E x } → ℝ)
        (fun f => ↑(Finset.card (Set.Finite.toFinset (_ : Set.Finite {i | ↑f i ≠ 0})))) (_ : 0 = ⊤) f
    else if ⊤ = ⊤ then ⨆ (i : α), ‖↑f i‖ else (∑' (i : α), ‖↑f i‖ ^ 0) ^ (1 / 0)) =
    ⨆ (i : α), ‖↑f i‖
[PROOFSTEP]
rw [dif_neg ENNReal.top_ne_zero, if_pos rfl]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
inst✝ : Nonempty α
f : { x // x ∈ lp E ⊤ }
⊢ IsLUB (Set.range fun i => ‖↑f i‖) ‖f‖
[PROOFSTEP]
rw [lp.norm_eq_ciSup]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
inst✝ : Nonempty α
f : { x // x ∈ lp E ⊤ }
⊢ IsLUB (Set.range fun i => ‖↑f i‖) (⨆ (i : α), ‖↑f i‖)
[PROOFSTEP]
exact isLUB_ciSup (lp.memℓp f)
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : 0 < ENNReal.toReal p
f : { x // x ∈ lp E p }
⊢ ‖f‖ = (∑' (i : α), ‖↑f i‖ ^ ENNReal.toReal p) ^ (1 / ENNReal.toReal p)
[PROOFSTEP]
dsimp [norm]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : 0 < ENNReal.toReal p
f : { x // x ∈ lp E p }
⊢ (if hp : p = 0 then
      Eq.rec (motive := fun x x_1 => { x_2 // x_2 ∈ lp E x } → ℝ)
        (fun f => ↑(Finset.card (Set.Finite.toFinset (_ : Set.Finite {i | ↑f i ≠ 0})))) (_ : 0 = p) f
    else if p = ⊤ then ⨆ (i : α), ‖↑f i‖ else (∑' (i : α), ‖↑f i‖ ^ ENNReal.toReal p) ^ (1 / ENNReal.toReal p)) =
    (∑' (i : α), ‖↑f i‖ ^ ENNReal.toReal p) ^ (1 / ENNReal.toReal p)
[PROOFSTEP]
rw [ENNReal.toReal_pos_iff] at hp 
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : 0 < p ∧ p < ⊤
f : { x // x ∈ lp E p }
⊢ (if hp : p = 0 then
      Eq.rec (motive := fun x x_1 => { x_2 // x_2 ∈ lp E x } → ℝ)
        (fun f => ↑(Finset.card (Set.Finite.toFinset (_ : Set.Finite {i | ↑f i ≠ 0})))) (_ : 0 = p) f
    else if p = ⊤ then ⨆ (i : α), ‖↑f i‖ else (∑' (i : α), ‖↑f i‖ ^ ENNReal.toReal p) ^ (1 / ENNReal.toReal p)) =
    (∑' (i : α), ‖↑f i‖ ^ ENNReal.toReal p) ^ (1 / ENNReal.toReal p)
[PROOFSTEP]
rw [dif_neg hp.1.ne', if_neg hp.2.ne]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : 0 < ENNReal.toReal p
f : { x // x ∈ lp E p }
⊢ ‖f‖ ^ ENNReal.toReal p = ∑' (i : α), ‖↑f i‖ ^ ENNReal.toReal p
[PROOFSTEP]
rw [norm_eq_tsum_rpow hp, ← Real.rpow_mul]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : 0 < ENNReal.toReal p
f : { x // x ∈ lp E p }
⊢ (∑' (i : α), ‖↑f i‖ ^ ENNReal.toReal p) ^ (1 / ENNReal.toReal p * ENNReal.toReal p) =
    ∑' (i : α), ‖↑f i‖ ^ ENNReal.toReal p
[PROOFSTEP]
field_simp [hp.ne']
[GOAL]
case hx
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : 0 < ENNReal.toReal p
f : { x // x ∈ lp E p }
⊢ 0 ≤ ∑' (i : α), ‖↑f i‖ ^ ENNReal.toReal p
[PROOFSTEP]
apply tsum_nonneg
[GOAL]
case hx.h
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : 0 < ENNReal.toReal p
f : { x // x ∈ lp E p }
⊢ ∀ (i : α), 0 ≤ ‖↑f i‖ ^ ENNReal.toReal p
[PROOFSTEP]
intro i
[GOAL]
case hx.h
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : 0 < ENNReal.toReal p
f : { x // x ∈ lp E p }
i : α
⊢ 0 ≤ ‖↑f i‖ ^ ENNReal.toReal p
[PROOFSTEP]
calc
  (0 : ℝ) = (0 : ℝ) ^ p.toReal := by rw [Real.zero_rpow hp.ne']
  _ ≤ _ := Real.rpow_le_rpow rfl.le (norm_nonneg (f i)) hp.le
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : 0 < ENNReal.toReal p
f : { x // x ∈ lp E p }
i : α
⊢ 0 = 0 ^ ENNReal.toReal p
[PROOFSTEP]
rw [Real.zero_rpow hp.ne']
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : 0 < ENNReal.toReal p
f : { x // x ∈ lp E p }
⊢ HasSum (fun i => ‖↑f i‖ ^ ENNReal.toReal p) (‖f‖ ^ ENNReal.toReal p)
[PROOFSTEP]
rw [norm_rpow_eq_tsum hp]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : 0 < ENNReal.toReal p
f : { x // x ∈ lp E p }
⊢ HasSum (fun i => ‖↑f i‖ ^ ENNReal.toReal p) (∑' (i : α), ‖↑f i‖ ^ ENNReal.toReal p)
[PROOFSTEP]
exact ((lp.memℓp f).summable hp).hasSum
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E p }
⊢ 0 ≤ ‖f‖
[PROOFSTEP]
rcases p.trichotomy with (rfl | rfl | hp)
[GOAL]
case inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E 0 }
⊢ 0 ≤ ‖f‖
[PROOFSTEP]
simp [lp.norm_eq_card_dsupport f]
[GOAL]
case inr.inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E ⊤ }
⊢ 0 ≤ ‖f‖
[PROOFSTEP]
cases' isEmpty_or_nonempty α with _i _i
[GOAL]
case inr.inl.inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E ⊤ }
_i : IsEmpty α
⊢ 0 ≤ ‖f‖
[PROOFSTEP]
rw [lp.norm_eq_ciSup]
[GOAL]
case inr.inl.inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E ⊤ }
_i : IsEmpty α
⊢ 0 ≤ ⨆ (i : α), ‖↑f i‖
[PROOFSTEP]
simp [Real.ciSup_empty]
[GOAL]
case inr.inl.inr
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E ⊤ }
_i : Nonempty α
⊢ 0 ≤ ‖f‖
[PROOFSTEP]
inhabit α
[GOAL]
case inr.inl.inr
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E ⊤ }
_i : Nonempty α
inhabited_h : Inhabited α
⊢ 0 ≤ ‖f‖
[PROOFSTEP]
exact (norm_nonneg (f default)).trans ((lp.isLUB_norm f).1 ⟨default, rfl⟩)
[GOAL]
case inr.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E p }
hp : 0 < ENNReal.toReal p
⊢ 0 ≤ ‖f‖
[PROOFSTEP]
rw [lp.norm_eq_tsum_rpow hp f]
[GOAL]
case inr.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E p }
hp : 0 < ENNReal.toReal p
⊢ 0 ≤ (∑' (i : α), ‖↑f i‖ ^ ENNReal.toReal p) ^ (1 / ENNReal.toReal p)
[PROOFSTEP]
refine' Real.rpow_nonneg_of_nonneg (tsum_nonneg _) _
[GOAL]
case inr.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E p }
hp : 0 < ENNReal.toReal p
⊢ ∀ (i : α), 0 ≤ ‖↑f i‖ ^ ENNReal.toReal p
[PROOFSTEP]
exact fun i => Real.rpow_nonneg_of_nonneg (norm_nonneg _) _
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
⊢ ‖0‖ = 0
[PROOFSTEP]
rcases p.trichotomy with (rfl | rfl | hp)
[GOAL]
case inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
⊢ ‖0‖ = 0
[PROOFSTEP]
simp [lp.norm_eq_card_dsupport]
[GOAL]
case inr.inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
⊢ ‖0‖ = 0
[PROOFSTEP]
simp [lp.norm_eq_ciSup]
[GOAL]
case inr.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : 0 < ENNReal.toReal p
⊢ ‖0‖ = 0
[PROOFSTEP]
rw [lp.norm_eq_tsum_rpow hp]
[GOAL]
case inr.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : 0 < ENNReal.toReal p
⊢ (∑' (i : α), ‖↑0 i‖ ^ ENNReal.toReal p) ^ (1 / ENNReal.toReal p) = 0
[PROOFSTEP]
have hp' : 1 / p.toReal ≠ 0 := one_div_ne_zero hp.ne'
[GOAL]
case inr.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : 0 < ENNReal.toReal p
hp' : 1 / ENNReal.toReal p ≠ 0
⊢ (∑' (i : α), ‖↑0 i‖ ^ ENNReal.toReal p) ^ (1 / ENNReal.toReal p) = 0
[PROOFSTEP]
simpa [Real.zero_rpow hp.ne'] using Real.zero_rpow hp'
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E p }
⊢ ‖f‖ = 0 ↔ f = 0
[PROOFSTEP]
refine' ⟨fun h => _, by rintro rfl; exact norm_zero⟩
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E p }
⊢ f = 0 → ‖f‖ = 0
[PROOFSTEP]
rintro rfl
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
⊢ ‖0‖ = 0
[PROOFSTEP]
exact norm_zero
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E p }
h : ‖f‖ = 0
⊢ f = 0
[PROOFSTEP]
rcases p.trichotomy with (rfl | rfl | hp)
[GOAL]
case inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E 0 }
h : ‖f‖ = 0
⊢ f = 0
[PROOFSTEP]
ext i
[GOAL]
case inl.h.h
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E 0 }
h : ‖f‖ = 0
i : α
⊢ ↑f i = ↑0 i
[PROOFSTEP]
have : {i : α | ¬f i = 0} = ∅ := by simpa [lp.norm_eq_card_dsupport f] using h
[GOAL]
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E 0 }
h : ‖f‖ = 0
i : α
⊢ {i | ¬↑f i = 0} = ∅
[PROOFSTEP]
simpa [lp.norm_eq_card_dsupport f] using h
[GOAL]
case inl.h.h
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E 0 }
h : ‖f‖ = 0
i : α
this : {i | ¬↑f i = 0} = ∅
⊢ ↑f i = ↑0 i
[PROOFSTEP]
have : (¬f i = 0) = False := congr_fun this i
[GOAL]
case inl.h.h
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E 0 }
h : ‖f‖ = 0
i : α
this✝ : {i | ¬↑f i = 0} = ∅
this : (¬↑f i = 0) = False
⊢ ↑f i = ↑0 i
[PROOFSTEP]
tauto
[GOAL]
case inr.inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E ⊤ }
h : ‖f‖ = 0
⊢ f = 0
[PROOFSTEP]
cases' isEmpty_or_nonempty α with _i _i
[GOAL]
case inr.inl.inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E ⊤ }
h : ‖f‖ = 0
_i : IsEmpty α
⊢ f = 0
[PROOFSTEP]
simp
[GOAL]
case inr.inl.inr
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E ⊤ }
h : ‖f‖ = 0
_i : Nonempty α
⊢ f = 0
[PROOFSTEP]
have H : IsLUB (Set.range fun i => ‖f i‖) 0 := by simpa [h] using lp.isLUB_norm f
[GOAL]
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E ⊤ }
h : ‖f‖ = 0
_i : Nonempty α
⊢ IsLUB (Set.range fun i => ‖↑f i‖) 0
[PROOFSTEP]
simpa [h] using lp.isLUB_norm f
[GOAL]
case inr.inl.inr
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E ⊤ }
h : ‖f‖ = 0
_i : Nonempty α
H : IsLUB (Set.range fun i => ‖↑f i‖) 0
⊢ f = 0
[PROOFSTEP]
ext i
[GOAL]
case inr.inl.inr.h.h
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E ⊤ }
h : ‖f‖ = 0
_i : Nonempty α
H : IsLUB (Set.range fun i => ‖↑f i‖) 0
i : α
⊢ ↑f i = ↑0 i
[PROOFSTEP]
have : ‖f i‖ = 0 := le_antisymm (H.1 ⟨i, rfl⟩) (norm_nonneg _)
[GOAL]
case inr.inl.inr.h.h
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E ⊤ }
h : ‖f‖ = 0
_i : Nonempty α
H : IsLUB (Set.range fun i => ‖↑f i‖) 0
i : α
this : ‖↑f i‖ = 0
⊢ ↑f i = ↑0 i
[PROOFSTEP]
simpa using this
[GOAL]
case inr.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E p }
h : ‖f‖ = 0
hp : 0 < ENNReal.toReal p
⊢ f = 0
[PROOFSTEP]
have hf : HasSum (fun i : α => ‖f i‖ ^ p.toReal) 0 :=
  by
  have := lp.hasSum_norm hp f
  rwa [h, Real.zero_rpow hp.ne'] at this 
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E p }
h : ‖f‖ = 0
hp : 0 < ENNReal.toReal p
⊢ HasSum (fun i => ‖↑f i‖ ^ ENNReal.toReal p) 0
[PROOFSTEP]
have := lp.hasSum_norm hp f
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E p }
h : ‖f‖ = 0
hp : 0 < ENNReal.toReal p
this : HasSum (fun i => ‖↑f i‖ ^ ENNReal.toReal p) (‖f‖ ^ ENNReal.toReal p)
⊢ HasSum (fun i => ‖↑f i‖ ^ ENNReal.toReal p) 0
[PROOFSTEP]
rwa [h, Real.zero_rpow hp.ne'] at this 
[GOAL]
case inr.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E p }
h : ‖f‖ = 0
hp : 0 < ENNReal.toReal p
hf : HasSum (fun i => ‖↑f i‖ ^ ENNReal.toReal p) 0
⊢ f = 0
[PROOFSTEP]
have : ∀ i, 0 ≤ ‖f i‖ ^ p.toReal := fun i => Real.rpow_nonneg_of_nonneg (norm_nonneg _) _
[GOAL]
case inr.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E p }
h : ‖f‖ = 0
hp : 0 < ENNReal.toReal p
hf : HasSum (fun i => ‖↑f i‖ ^ ENNReal.toReal p) 0
this : ∀ (i : α), 0 ≤ ‖↑f i‖ ^ ENNReal.toReal p
⊢ f = 0
[PROOFSTEP]
rw [hasSum_zero_iff_of_nonneg this] at hf 
[GOAL]
case inr.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E p }
h : ‖f‖ = 0
hp : 0 < ENNReal.toReal p
hf : (fun i => ‖↑f i‖ ^ ENNReal.toReal p) = 0
this : ∀ (i : α), 0 ≤ ‖↑f i‖ ^ ENNReal.toReal p
⊢ f = 0
[PROOFSTEP]
ext i
[GOAL]
case inr.inr.h.h
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E p }
h : ‖f‖ = 0
hp : 0 < ENNReal.toReal p
hf : (fun i => ‖↑f i‖ ^ ENNReal.toReal p) = 0
this : ∀ (i : α), 0 ≤ ‖↑f i‖ ^ ENNReal.toReal p
i : α
⊢ ↑f i = ↑0 i
[PROOFSTEP]
have : f i = 0 ∧ p.toReal ≠ 0 := by simpa [Real.rpow_eq_zero_iff_of_nonneg (norm_nonneg (f i))] using congr_fun hf i
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E p }
h : ‖f‖ = 0
hp : 0 < ENNReal.toReal p
hf : (fun i => ‖↑f i‖ ^ ENNReal.toReal p) = 0
this : ∀ (i : α), 0 ≤ ‖↑f i‖ ^ ENNReal.toReal p
i : α
⊢ ↑f i = 0 ∧ ENNReal.toReal p ≠ 0
[PROOFSTEP]
simpa [Real.rpow_eq_zero_iff_of_nonneg (norm_nonneg (f i))] using congr_fun hf i
[GOAL]
case inr.inr.h.h
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E p }
h : ‖f‖ = 0
hp : 0 < ENNReal.toReal p
hf : (fun i => ‖↑f i‖ ^ ENNReal.toReal p) = 0
this✝ : ∀ (i : α), 0 ≤ ‖↑f i‖ ^ ENNReal.toReal p
i : α
this : ↑f i = 0 ∧ ENNReal.toReal p ≠ 0
⊢ ↑f i = ↑0 i
[PROOFSTEP]
exact this.1
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E p }
⊢ f = 0 ↔ ↑f = 0
[PROOFSTEP]
rw [lp.ext_iff, coeFn_zero]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E p }
⊢ ‖-f‖ = ‖f‖
[PROOFSTEP]
rcases p.trichotomy with (rfl | rfl | hp)
[GOAL]
case inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E 0 }
⊢ ‖-f‖ = ‖f‖
[PROOFSTEP]
simp only [norm_eq_card_dsupport, coeFn_neg, Pi.neg_apply, ne_eq, neg_eq_zero]
[GOAL]
case inr.inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E ⊤ }
⊢ ‖-f‖ = ‖f‖
[PROOFSTEP]
cases isEmpty_or_nonempty α
[GOAL]
case inr.inl.inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E ⊤ }
h✝ : IsEmpty α
⊢ ‖-f‖ = ‖f‖
[PROOFSTEP]
simp only [lp.eq_zero' f, neg_zero, norm_zero]
[GOAL]
case inr.inl.inr
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E ⊤ }
h✝ : Nonempty α
⊢ ‖-f‖ = ‖f‖
[PROOFSTEP]
apply (lp.isLUB_norm (-f)).unique
[GOAL]
case inr.inl.inr
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E ⊤ }
h✝ : Nonempty α
⊢ IsLUB (Set.range fun i => ‖↑(-f) i‖) ‖f‖
[PROOFSTEP]
simpa only [coeFn_neg, Pi.neg_apply, norm_neg] using lp.isLUB_norm f
[GOAL]
case inr.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E p }
hp : 0 < ENNReal.toReal p
⊢ ‖-f‖ = ‖f‖
[PROOFSTEP]
suffices ‖-f‖ ^ p.toReal = ‖f‖ ^ p.toReal by exact Real.rpow_left_injOn hp.ne' (norm_nonneg' _) (norm_nonneg' _) this
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E p }
hp : 0 < ENNReal.toReal p
this : ‖-f‖ ^ ENNReal.toReal p = ‖f‖ ^ ENNReal.toReal p
⊢ ‖-f‖ = ‖f‖
[PROOFSTEP]
exact Real.rpow_left_injOn hp.ne' (norm_nonneg' _) (norm_nonneg' _) this
[GOAL]
case inr.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E p }
hp : 0 < ENNReal.toReal p
⊢ ‖-f‖ ^ ENNReal.toReal p = ‖f‖ ^ ENNReal.toReal p
[PROOFSTEP]
apply (lp.hasSum_norm hp (-f)).unique
[GOAL]
case inr.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E p }
hp : 0 < ENNReal.toReal p
⊢ HasSum (fun i => ‖↑(-f) i‖ ^ ENNReal.toReal p) (‖f‖ ^ ENNReal.toReal p)
[PROOFSTEP]
simpa only [coeFn_neg, Pi.neg_apply, _root_.norm_neg] using lp.hasSum_norm hp f
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : Fact (1 ≤ p)
f g : { x // x ∈ lp E p }
⊢ ‖f + g‖ ≤ ‖f‖ + ‖g‖
[PROOFSTEP]
rcases p.dichotomy with (rfl | hp')
[GOAL]
case inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : Fact (1 ≤ ⊤)
f g : { x // x ∈ lp E ⊤ }
⊢ ‖f + g‖ ≤ ‖f‖ + ‖g‖
[PROOFSTEP]
cases isEmpty_or_nonempty α
[GOAL]
case inl.inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : Fact (1 ≤ ⊤)
f g : { x // x ∈ lp E ⊤ }
h✝ : IsEmpty α
⊢ ‖f + g‖ ≤ ‖f‖ + ‖g‖
[PROOFSTEP]
rw [lp.eq_zero' f]
[GOAL]
case inl.inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : Fact (1 ≤ ⊤)
f g : { x // x ∈ lp E ⊤ }
h✝ : IsEmpty α
⊢ ‖0 + g‖ ≤ ‖0‖ + ‖g‖
[PROOFSTEP]
simp only [zero_add, norm_zero, le_refl]
  -- porting note: just `simp` was slow
[GOAL]
case inl.inr
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : Fact (1 ≤ ⊤)
f g : { x // x ∈ lp E ⊤ }
h✝ : Nonempty α
⊢ ‖f + g‖ ≤ ‖f‖ + ‖g‖
[PROOFSTEP]
refine' (lp.isLUB_norm (f + g)).2 _
[GOAL]
case inl.inr
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : Fact (1 ≤ ⊤)
f g : { x // x ∈ lp E ⊤ }
h✝ : Nonempty α
⊢ ‖f‖ + ‖g‖ ∈ upperBounds (Set.range fun i => ‖↑(f + g) i‖)
[PROOFSTEP]
rintro x ⟨i, rfl⟩
[GOAL]
case inl.inr.intro
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : Fact (1 ≤ ⊤)
f g : { x // x ∈ lp E ⊤ }
h✝ : Nonempty α
i : α
⊢ (fun i => ‖↑(f + g) i‖) i ≤ ‖f‖ + ‖g‖
[PROOFSTEP]
refine' le_trans _ (add_mem_upperBounds_add (lp.isLUB_norm f).1 (lp.isLUB_norm g).1 ⟨_, _, ⟨i, rfl⟩, ⟨i, rfl⟩, rfl⟩)
[GOAL]
case inl.inr.intro
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : Fact (1 ≤ ⊤)
f g : { x // x ∈ lp E ⊤ }
h✝ : Nonempty α
i : α
⊢ (fun i => ‖↑(f + g) i‖) i ≤ (fun x x_1 => x + x_1) ((fun i => ‖↑f i‖) i) ((fun i => ‖↑g i‖) i)
[PROOFSTEP]
exact norm_add_le (f i) (g i)
[GOAL]
case inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : Fact (1 ≤ p)
f g : { x // x ∈ lp E p }
hp' : 1 ≤ ENNReal.toReal p
⊢ ‖f + g‖ ≤ ‖f‖ + ‖g‖
[PROOFSTEP]
have hp'' : 0 < p.toReal := zero_lt_one.trans_le hp'
[GOAL]
case inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : Fact (1 ≤ p)
f g : { x // x ∈ lp E p }
hp' : 1 ≤ ENNReal.toReal p
hp'' : 0 < ENNReal.toReal p
⊢ ‖f + g‖ ≤ ‖f‖ + ‖g‖
[PROOFSTEP]
have hf₁ : ∀ i, 0 ≤ ‖f i‖ := fun i => norm_nonneg _
[GOAL]
case inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : Fact (1 ≤ p)
f g : { x // x ∈ lp E p }
hp' : 1 ≤ ENNReal.toReal p
hp'' : 0 < ENNReal.toReal p
hf₁ : ∀ (i : α), 0 ≤ ‖↑f i‖
⊢ ‖f + g‖ ≤ ‖f‖ + ‖g‖
[PROOFSTEP]
have hg₁ : ∀ i, 0 ≤ ‖g i‖ := fun i => norm_nonneg _
[GOAL]
case inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : Fact (1 ≤ p)
f g : { x // x ∈ lp E p }
hp' : 1 ≤ ENNReal.toReal p
hp'' : 0 < ENNReal.toReal p
hf₁ : ∀ (i : α), 0 ≤ ‖↑f i‖
hg₁ : ∀ (i : α), 0 ≤ ‖↑g i‖
⊢ ‖f + g‖ ≤ ‖f‖ + ‖g‖
[PROOFSTEP]
have hf₂ := lp.hasSum_norm hp'' f
[GOAL]
case inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : Fact (1 ≤ p)
f g : { x // x ∈ lp E p }
hp' : 1 ≤ ENNReal.toReal p
hp'' : 0 < ENNReal.toReal p
hf₁ : ∀ (i : α), 0 ≤ ‖↑f i‖
hg₁ : ∀ (i : α), 0 ≤ ‖↑g i‖
hf₂ : HasSum (fun i => ‖↑f i‖ ^ ENNReal.toReal p) (‖f‖ ^ ENNReal.toReal p)
⊢ ‖f + g‖ ≤ ‖f‖ + ‖g‖
[PROOFSTEP]
have hg₂ := lp.hasSum_norm hp'' g
[GOAL]
case inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : Fact (1 ≤ p)
f g : { x // x ∈ lp E p }
hp' : 1 ≤ ENNReal.toReal p
hp'' : 0 < ENNReal.toReal p
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 p) (‖g‖ ^ ENNReal.toReal p)
⊢ ‖f + g‖ ≤ ‖f‖ + ‖g‖
[PROOFSTEP]
obtain ⟨C, hC₁, hC₂, hCfg⟩ := Real.Lp_add_le_hasSum_of_nonneg hp' hf₁ hg₁ (norm_nonneg' _) (norm_nonneg' _) hf₂ hg₂
[GOAL]
case inr.intro.intro.intro
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : Fact (1 ≤ p)
f g : { x // x ∈ lp E p }
hp' : 1 ≤ ENNReal.toReal p
hp'' : 0 < ENNReal.toReal p
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 p) (‖g‖ ^ ENNReal.toReal p)
C : ℝ
hC₁ : 0 ≤ C
hC₂ : C ≤ ‖f‖ + ‖g‖
hCfg : HasSum (fun i => (‖↑f i‖ + ‖↑g i‖) ^ ENNReal.toReal p) (C ^ ENNReal.toReal p)
⊢ ‖f + g‖ ≤ ‖f‖ + ‖g‖
[PROOFSTEP]
refine' le_trans _ hC₂
[GOAL]
case inr.intro.intro.intro
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : Fact (1 ≤ p)
f g : { x // x ∈ lp E p }
hp' : 1 ≤ ENNReal.toReal p
hp'' : 0 < ENNReal.toReal p
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 p) (‖g‖ ^ ENNReal.toReal p)
C : ℝ
hC₁ : 0 ≤ C
hC₂ : C ≤ ‖f‖ + ‖g‖
hCfg : HasSum (fun i => (‖↑f i‖ + ‖↑g i‖) ^ ENNReal.toReal p) (C ^ ENNReal.toReal p)
⊢ ‖f + g‖ ≤ C
[PROOFSTEP]
rw [← Real.rpow_le_rpow_iff (norm_nonneg' (f + g)) hC₁ hp'']
[GOAL]
case inr.intro.intro.intro
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : Fact (1 ≤ p)
f g : { x // x ∈ lp E p }
hp' : 1 ≤ ENNReal.toReal p
hp'' : 0 < ENNReal.toReal p
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 p) (‖g‖ ^ ENNReal.toReal p)
C : ℝ
hC₁ : 0 ≤ C
hC₂ : C ≤ ‖f‖ + ‖g‖
hCfg : HasSum (fun i => (‖↑f i‖ + ‖↑g i‖) ^ ENNReal.toReal p) (C ^ ENNReal.toReal p)
⊢ ‖f + g‖ ^ ENNReal.toReal p ≤ C ^ ENNReal.toReal p
[PROOFSTEP]
refine' hasSum_le _ (lp.hasSum_norm hp'' (f + g)) hCfg
[GOAL]
case inr.intro.intro.intro
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : Fact (1 ≤ p)
f g : { x // x ∈ lp E p }
hp' : 1 ≤ ENNReal.toReal p
hp'' : 0 < ENNReal.toReal p
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 p) (‖g‖ ^ ENNReal.toReal p)
C : ℝ
hC₁ : 0 ≤ C
hC₂ : C ≤ ‖f‖ + ‖g‖
hCfg : HasSum (fun i => (‖↑f i‖ + ‖↑g i‖) ^ ENNReal.toReal p) (C ^ ENNReal.toReal p)
⊢ ∀ (i : α), ‖↑(f + g) i‖ ^ ENNReal.toReal p ≤ (‖↑f i‖ + ‖↑g i‖) ^ ENNReal.toReal p
[PROOFSTEP]
intro i
[GOAL]
case inr.intro.intro.intro
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : Fact (1 ≤ p)
f g : { x // x ∈ lp E p }
hp' : 1 ≤ ENNReal.toReal p
hp'' : 0 < ENNReal.toReal p
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 p) (‖g‖ ^ ENNReal.toReal p)
C : ℝ
hC₁ : 0 ≤ C
hC₂ : C ≤ ‖f‖ + ‖g‖
hCfg : HasSum (fun i => (‖↑f i‖ + ‖↑g i‖) ^ ENNReal.toReal p) (C ^ ENNReal.toReal p)
i : α
⊢ ‖↑(f + g) i‖ ^ ENNReal.toReal p ≤ (‖↑f i‖ + ‖↑g i‖) ^ ENNReal.toReal p
[PROOFSTEP]
exact Real.rpow_le_rpow (norm_nonneg _) (norm_add_le _ _) hp''.le
[GOAL]
α : 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‖
[PROOFSTEP]
have hf₁ : ∀ i, 0 ≤ ‖f i‖ := fun i => norm_nonneg _
[GOAL]
α : 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‖
[PROOFSTEP]
have hg₁ : ∀ i, 0 ≤ ‖g i‖ := fun i => norm_nonneg _
[GOAL]
α : 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‖
[PROOFSTEP]
have hf₂ := lp.hasSum_norm hpq.pos f
[GOAL]
α : 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‖
[PROOFSTEP]
have hg₂ := lp.hasSum_norm hpq.symm.pos g
[GOAL]
α : 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‖
[PROOFSTEP]
obtain ⟨C, -, hC', hC⟩ := Real.inner_le_Lp_mul_Lq_hasSum_of_nonneg hpq (norm_nonneg' _) (norm_nonneg' _) hf₁ hg₁ hf₂ hg₂
[GOAL]
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‖
[PROOFSTEP]
rw [← hC.tsum_eq] at hC' 
[GOAL]
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‖
[PROOFSTEP]
exact ⟨hC.summable, hC'⟩
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : p ≠ 0
f : { x // x ∈ lp E p }
i : α
⊢ ‖↑f i‖ ≤ ‖f‖
[PROOFSTEP]
rcases eq_or_ne p ∞ with (rfl | hp')
[GOAL]
case inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
i : α
hp : ⊤ ≠ 0
f : { x // x ∈ lp E ⊤ }
⊢ ‖↑f i‖ ≤ ‖f‖
[PROOFSTEP]
haveI : Nonempty α := ⟨i⟩
[GOAL]
case inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
i : α
hp : ⊤ ≠ 0
f : { x // x ∈ lp E ⊤ }
this : Nonempty α
⊢ ‖↑f i‖ ≤ ‖f‖
[PROOFSTEP]
exact (isLUB_norm f).1 ⟨i, rfl⟩
[GOAL]
case inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : p ≠ 0
f : { x // x ∈ lp E p }
i : α
hp' : p ≠ ⊤
⊢ ‖↑f i‖ ≤ ‖f‖
[PROOFSTEP]
have hp'' : 0 < p.toReal := ENNReal.toReal_pos hp hp'
[GOAL]
case inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : p ≠ 0
f : { x // x ∈ lp E p }
i : α
hp' : p ≠ ⊤
hp'' : 0 < ENNReal.toReal p
⊢ ‖↑f i‖ ≤ ‖f‖
[PROOFSTEP]
have : ∀ i, 0 ≤ ‖f i‖ ^ p.toReal := fun i => Real.rpow_nonneg_of_nonneg (norm_nonneg _) _
[GOAL]
case inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : p ≠ 0
f : { x // x ∈ lp E p }
i : α
hp' : p ≠ ⊤
hp'' : 0 < ENNReal.toReal p
this : ∀ (i : α), 0 ≤ ‖↑f i‖ ^ ENNReal.toReal p
⊢ ‖↑f i‖ ≤ ‖f‖
[PROOFSTEP]
rw [← Real.rpow_le_rpow_iff (norm_nonneg _) (norm_nonneg' _) hp'']
[GOAL]
case inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : p ≠ 0
f : { x // x ∈ lp E p }
i : α
hp' : p ≠ ⊤
hp'' : 0 < ENNReal.toReal p
this : ∀ (i : α), 0 ≤ ‖↑f i‖ ^ ENNReal.toReal p
⊢ ‖↑f i‖ ^ ENNReal.toReal p ≤ ‖f‖ ^ ENNReal.toReal p
[PROOFSTEP]
convert le_hasSum (hasSum_norm hp'' f) i fun i _ => this i
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : 0 < ENNReal.toReal p
f : { x // x ∈ lp E p }
s : Finset α
⊢ ∑ i in s, ‖↑f i‖ ^ ENNReal.toReal p ≤ ‖f‖ ^ ENNReal.toReal p
[PROOFSTEP]
rw [lp.norm_rpow_eq_tsum hp f]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : 0 < ENNReal.toReal p
f : { x // x ∈ lp E p }
s : Finset α
⊢ ∑ i in s, ‖↑f i‖ ^ ENNReal.toReal p ≤ ∑' (i : α), ‖↑f i‖ ^ ENNReal.toReal p
[PROOFSTEP]
have : ∀ i, 0 ≤ ‖f i‖ ^ p.toReal := fun i => Real.rpow_nonneg_of_nonneg (norm_nonneg _) _
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : 0 < ENNReal.toReal p
f : { x // x ∈ lp E p }
s : Finset α
this : ∀ (i : α), 0 ≤ ‖↑f i‖ ^ ENNReal.toReal p
⊢ ∑ i in s, ‖↑f i‖ ^ ENNReal.toReal p ≤ ∑' (i : α), ‖↑f i‖ ^ ENNReal.toReal p
[PROOFSTEP]
refine' sum_le_tsum _ (fun i _ => this i) _
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : 0 < ENNReal.toReal p
f : { x // x ∈ lp E p }
s : Finset α
this : ∀ (i : α), 0 ≤ ‖↑f i‖ ^ ENNReal.toReal p
⊢ Summable fun i => ‖↑f i‖ ^ ENNReal.toReal p
[PROOFSTEP]
exact (lp.memℓp f).summable hp
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
inst✝ : Nonempty α
f : { x // x ∈ lp E ⊤ }
C : ℝ
hCf : ∀ (i : α), ‖↑f i‖ ≤ C
⊢ ‖f‖ ≤ C
[PROOFSTEP]
refine' (isLUB_norm f).2 _
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
inst✝ : Nonempty α
f : { x // x ∈ lp E ⊤ }
C : ℝ
hCf : ∀ (i : α), ‖↑f i‖ ≤ C
⊢ C ∈ upperBounds (Set.range fun i => ‖↑f i‖)
[PROOFSTEP]
rintro - ⟨i, rfl⟩
[GOAL]
case intro
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
inst✝ : Nonempty α
f : { x // x ∈ lp E ⊤ }
C : ℝ
hCf : ∀ (i : α), ‖↑f i‖ ≤ C
i : α
⊢ (fun i => ‖↑f i‖) i ≤ C
[PROOFSTEP]
exact hCf i
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E ⊤ }
C : ℝ
hC : 0 ≤ C
hCf : ∀ (i : α), ‖↑f i‖ ≤ C
⊢ ‖f‖ ≤ C
[PROOFSTEP]
cases isEmpty_or_nonempty α
[GOAL]
case inl
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E ⊤ }
C : ℝ
hC : 0 ≤ C
hCf : ∀ (i : α), ‖↑f i‖ ≤ C
h✝ : IsEmpty α
⊢ ‖f‖ ≤ C
[PROOFSTEP]
simpa [eq_zero' f] using hC
[GOAL]
case inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
f : { x // x ∈ lp E ⊤ }
C : ℝ
hC : 0 ≤ C
hCf : ∀ (i : α), ‖↑f i‖ ≤ C
h✝ : Nonempty α
⊢ ‖f‖ ≤ C
[PROOFSTEP]
exact norm_le_of_forall_le' C hCf
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : 0 < ENNReal.toReal p
C : ℝ
hC : 0 ≤ C
f : { x // x ∈ lp E p }
hf : ∑' (i : α), ‖↑f i‖ ^ ENNReal.toReal p ≤ C ^ ENNReal.toReal p
⊢ ‖f‖ ≤ C
[PROOFSTEP]
rw [← Real.rpow_le_rpow_iff (norm_nonneg' _) hC hp, norm_rpow_eq_tsum hp]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
hp : 0 < ENNReal.toReal p
C : ℝ
hC : 0 ≤ C
f : { x // x ∈ lp E p }
hf : ∑' (i : α), ‖↑f i‖ ^ ENNReal.toReal p ≤ C ^ ENNReal.toReal p
⊢ ∑' (i : α), ‖↑f i‖ ^ ENNReal.toReal p ≤ C ^ ENNReal.toReal p
[PROOFSTEP]
exact hf
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁶ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
𝕜' : Type u_4
inst✝⁵ : NormedRing 𝕜
inst✝⁴ : NormedRing 𝕜'
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : (i : α) → Module 𝕜' (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜' (E i)
src✝ : AddSubgroup (PreLp E) := lp E p
c : 𝕜
f : PreLp E
hf : f ∈ src✝.carrier
⊢ c • f ∈ src✝.carrier
[PROOFSTEP]
simpa using mem_lp_const_smul c ⟨f, hf⟩
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁶ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
𝕜' : Type u_4
inst✝⁵ : NormedRing 𝕜
inst✝⁴ : NormedRing 𝕜'
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : (i : α) → Module 𝕜' (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜' (E i)
hp : p ≠ 0
c : 𝕜
f : { x // x ∈ lp E p }
⊢ ‖c • f‖ ≤ ‖c‖ * ‖f‖
[PROOFSTEP]
rcases p.trichotomy with (rfl | rfl | hp)
[GOAL]
case inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝⁶ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
𝕜' : Type u_4
inst✝⁵ : NormedRing 𝕜
inst✝⁴ : NormedRing 𝕜'
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : (i : α) → Module 𝕜' (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜' (E i)
c : 𝕜
hp : 0 ≠ 0
f : { x // x ∈ lp E 0 }
⊢ ‖c • f‖ ≤ ‖c‖ * ‖f‖
[PROOFSTEP]
exact absurd rfl hp
[GOAL]
case inr.inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝⁶ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
𝕜' : Type u_4
inst✝⁵ : NormedRing 𝕜
inst✝⁴ : NormedRing 𝕜'
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : (i : α) → Module 𝕜' (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜' (E i)
c : 𝕜
hp : ⊤ ≠ 0
f : { x // x ∈ lp E ⊤ }
⊢ ‖c • f‖ ≤ ‖c‖ * ‖f‖
[PROOFSTEP]
cases isEmpty_or_nonempty α
[GOAL]
case inr.inl.inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝⁶ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
𝕜' : Type u_4
inst✝⁵ : NormedRing 𝕜
inst✝⁴ : NormedRing 𝕜'
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : (i : α) → Module 𝕜' (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜' (E i)
c : 𝕜
hp : ⊤ ≠ 0
f : { x // x ∈ lp E ⊤ }
h✝ : IsEmpty α
⊢ ‖c • f‖ ≤ ‖c‖ * ‖f‖
[PROOFSTEP]
simp [lp.eq_zero' f]
[GOAL]
case inr.inl.inr
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝⁶ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
𝕜' : Type u_4
inst✝⁵ : NormedRing 𝕜
inst✝⁴ : NormedRing 𝕜'
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : (i : α) → Module 𝕜' (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜' (E i)
c : 𝕜
hp : ⊤ ≠ 0
f : { x // x ∈ lp E ⊤ }
h✝ : Nonempty α
⊢ ‖c • f‖ ≤ ‖c‖ * ‖f‖
[PROOFSTEP]
have hcf := lp.isLUB_norm (c • f)
[GOAL]
case inr.inl.inr
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝⁶ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
𝕜' : Type u_4
inst✝⁵ : NormedRing 𝕜
inst✝⁴ : NormedRing 𝕜'
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : (i : α) → Module 𝕜' (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜' (E i)
c : 𝕜
hp : ⊤ ≠ 0
f : { x // x ∈ lp E ⊤ }
h✝ : Nonempty α
hcf : IsLUB (Set.range fun i => ‖↑(c • f) i‖) ‖c • f‖
⊢ ‖c • f‖ ≤ ‖c‖ * ‖f‖
[PROOFSTEP]
have hfc := (lp.isLUB_norm f).mul_left (norm_nonneg c)
[GOAL]
case inr.inl.inr
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝⁶ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
𝕜' : Type u_4
inst✝⁵ : NormedRing 𝕜
inst✝⁴ : NormedRing 𝕜'
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : (i : α) → Module 𝕜' (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜' (E i)
c : 𝕜
hp : ⊤ ≠ 0
f : { x // x ∈ lp E ⊤ }
h✝ : Nonempty α
hcf : IsLUB (Set.range fun i => ‖↑(c • f) i‖) ‖c • f‖
hfc : IsLUB ((fun b => ‖c‖ * b) '' Set.range fun i => ‖↑f i‖) (‖c‖ * ‖f‖)
⊢ ‖c • f‖ ≤ ‖c‖ * ‖f‖
[PROOFSTEP]
simp_rw [← Set.range_comp, Function.comp] at hfc 
[GOAL]
case inr.inl.inr
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝⁶ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
𝕜' : Type u_4
inst✝⁵ : NormedRing 𝕜
inst✝⁴ : NormedRing 𝕜'
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : (i : α) → Module 𝕜' (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜' (E i)
c : 𝕜
hp : ⊤ ≠ 0
f : { x // x ∈ lp E ⊤ }
h✝ : Nonempty α
hcf : IsLUB (Set.range fun i => ‖↑(c • f) i‖) ‖c • f‖
hfc : IsLUB (Set.range fun x => ‖c‖ * ‖↑f x‖) (‖c‖ * ‖f‖)
⊢ ‖c • f‖ ≤ ‖c‖ * ‖f‖
[PROOFSTEP]
refine' hcf.right _
[GOAL]
case inr.inl.inr
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝⁶ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
𝕜' : Type u_4
inst✝⁵ : NormedRing 𝕜
inst✝⁴ : NormedRing 𝕜'
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : (i : α) → Module 𝕜' (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜' (E i)
c : 𝕜
hp : ⊤ ≠ 0
f : { x // x ∈ lp E ⊤ }
h✝ : Nonempty α
hcf : IsLUB (Set.range fun i => ‖↑(c • f) i‖) ‖c • f‖
hfc : IsLUB (Set.range fun x => ‖c‖ * ‖↑f x‖) (‖c‖ * ‖f‖)
⊢ ‖c‖ * ‖f‖ ∈ upperBounds (Set.range fun i => ‖↑(c • f) i‖)
[PROOFSTEP]
have := hfc.left
[GOAL]
case inr.inl.inr
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝⁶ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
𝕜' : Type u_4
inst✝⁵ : NormedRing 𝕜
inst✝⁴ : NormedRing 𝕜'
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : (i : α) → Module 𝕜' (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜' (E i)
c : 𝕜
hp : ⊤ ≠ 0
f : { x // x ∈ lp E ⊤ }
h✝ : Nonempty α
hcf : IsLUB (Set.range fun i => ‖↑(c • f) i‖) ‖c • f‖
hfc : IsLUB (Set.range fun x => ‖c‖ * ‖↑f x‖) (‖c‖ * ‖f‖)
this : ‖c‖ * ‖f‖ ∈ upperBounds (Set.range fun x => ‖c‖ * ‖↑f x‖)
⊢ ‖c‖ * ‖f‖ ∈ upperBounds (Set.range fun i => ‖↑(c • f) i‖)
[PROOFSTEP]
simp_rw [mem_upperBounds, Set.mem_range, forall_exists_index, forall_apply_eq_imp_iff'] at this ⊢
[GOAL]
case inr.inl.inr
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝⁶ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
𝕜' : Type u_4
inst✝⁵ : NormedRing 𝕜
inst✝⁴ : NormedRing 𝕜'
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : (i : α) → Module 𝕜' (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜' (E i)
c : 𝕜
hp : ⊤ ≠ 0
f : { x // x ∈ lp E ⊤ }
h✝ : Nonempty α
hcf : IsLUB (Set.range fun i => ‖↑(c • f) i‖) ‖c • f‖
hfc : IsLUB (Set.range fun x => ‖c‖ * ‖↑f x‖) (‖c‖ * ‖f‖)
this : ∀ (a : α), ‖c‖ * ‖↑f a‖ ≤ ‖c‖ * ‖f‖
⊢ ∀ (a : α), ‖↑(c • f) a‖ ≤ ‖c‖ * ‖f‖
[PROOFSTEP]
intro a
[GOAL]
case inr.inl.inr
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝⁶ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
𝕜' : Type u_4
inst✝⁵ : NormedRing 𝕜
inst✝⁴ : NormedRing 𝕜'
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : (i : α) → Module 𝕜' (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜' (E i)
c : 𝕜
hp : ⊤ ≠ 0
f : { x // x ∈ lp E ⊤ }
h✝ : Nonempty α
hcf : IsLUB (Set.range fun i => ‖↑(c • f) i‖) ‖c • f‖
hfc : IsLUB (Set.range fun x => ‖c‖ * ‖↑f x‖) (‖c‖ * ‖f‖)
this : ∀ (a : α), ‖c‖ * ‖↑f a‖ ≤ ‖c‖ * ‖f‖
a : α
⊢ ‖↑(c • f) a‖ ≤ ‖c‖ * ‖f‖
[PROOFSTEP]
exact (norm_smul_le _ _).trans (this a)
[GOAL]
case inr.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁶ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
𝕜' : Type u_4
inst✝⁵ : NormedRing 𝕜
inst✝⁴ : NormedRing 𝕜'
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : (i : α) → Module 𝕜' (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜' (E i)
hp✝ : p ≠ 0
c : 𝕜
f : { x // x ∈ lp E p }
hp : 0 < ENNReal.toReal p
⊢ ‖c • f‖ ≤ ‖c‖ * ‖f‖
[PROOFSTEP]
letI inst : NNNorm (lp E p) := ⟨fun f => ⟨‖f‖, norm_nonneg' _⟩⟩
[GOAL]
case inr.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁶ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
𝕜' : Type u_4
inst✝⁵ : NormedRing 𝕜
inst✝⁴ : NormedRing 𝕜'
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : (i : α) → Module 𝕜' (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜' (E i)
hp✝ : p ≠ 0
c : 𝕜
f : { x // x ∈ lp E p }
hp : 0 < ENNReal.toReal p
inst : NNNorm { x // x ∈ lp E p } := { nnnorm := fun f => { val := ‖f‖, property := (_ : 0 ≤ ‖f‖) } }
⊢ ‖c • f‖ ≤ ‖c‖ * ‖f‖
[PROOFSTEP]
have coe_nnnorm : ∀ f : lp E p, ↑‖f‖₊ = ‖f‖ := fun _ => rfl
[GOAL]
case inr.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁶ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
𝕜' : Type u_4
inst✝⁵ : NormedRing 𝕜
inst✝⁴ : NormedRing 𝕜'
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : (i : α) → Module 𝕜' (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜' (E i)
hp✝ : p ≠ 0
c : 𝕜
f : { x // x ∈ lp E p }
hp : 0 < ENNReal.toReal p
inst : NNNorm { x // x ∈ lp E p } := { nnnorm := fun f => { val := ‖f‖, property := (_ : 0 ≤ ‖f‖) } }
coe_nnnorm : ∀ (f : { x // x ∈ lp E p }), ↑‖f‖₊ = ‖f‖
⊢ ‖c • f‖ ≤ ‖c‖ * ‖f‖
[PROOFSTEP]
suffices ‖c • f‖₊ ^ p.toReal ≤ (‖c‖₊ * ‖f‖₊) ^ p.toReal by rwa [NNReal.rpow_le_rpow_iff hp] at this 
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁶ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
𝕜' : Type u_4
inst✝⁵ : NormedRing 𝕜
inst✝⁴ : NormedRing 𝕜'
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : (i : α) → Module 𝕜' (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜' (E i)
hp✝ : p ≠ 0
c : 𝕜
f : { x // x ∈ lp E p }
hp : 0 < ENNReal.toReal p
inst : NNNorm { x // x ∈ lp E p } := { nnnorm := fun f => { val := ‖f‖, property := (_ : 0 ≤ ‖f‖) } }
coe_nnnorm : ∀ (f : { x // x ∈ lp E p }), ↑‖f‖₊ = ‖f‖
this : ‖c • f‖₊ ^ ENNReal.toReal p ≤ (‖c‖₊ * ‖f‖₊) ^ ENNReal.toReal p
⊢ ‖c • f‖ ≤ ‖c‖ * ‖f‖
[PROOFSTEP]
rwa [NNReal.rpow_le_rpow_iff hp] at this 
[GOAL]
case inr.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁶ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
𝕜' : Type u_4
inst✝⁵ : NormedRing 𝕜
inst✝⁴ : NormedRing 𝕜'
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : (i : α) → Module 𝕜' (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜' (E i)
hp✝ : p ≠ 0
c : 𝕜
f : { x // x ∈ lp E p }
hp : 0 < ENNReal.toReal p
inst : NNNorm { x // x ∈ lp E p } := { nnnorm := fun f => { val := ‖f‖, property := (_ : 0 ≤ ‖f‖) } }
coe_nnnorm : ∀ (f : { x // x ∈ lp E p }), ↑‖f‖₊ = ‖f‖
⊢ ‖c • f‖₊ ^ ENNReal.toReal p ≤ (‖c‖₊ * ‖f‖₊) ^ ENNReal.toReal p
[PROOFSTEP]
clear_value inst
[GOAL]
case inr.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁶ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
𝕜' : Type u_4
inst✝⁵ : NormedRing 𝕜
inst✝⁴ : NormedRing 𝕜'
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : (i : α) → Module 𝕜' (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜' (E i)
hp✝ : p ≠ 0
c : 𝕜
f : { x // x ∈ lp E p }
hp : 0 < ENNReal.toReal p
inst : NNNorm { x // x ∈ lp E p }
coe_nnnorm : ∀ (f : { x // x ∈ lp E p }), ↑‖f‖₊ = ‖f‖
⊢ ‖c • f‖₊ ^ ENNReal.toReal p ≤ (‖c‖₊ * ‖f‖₊) ^ ENNReal.toReal p
[PROOFSTEP]
rw [NNReal.mul_rpow]
[GOAL]
case inr.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁶ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
𝕜' : Type u_4
inst✝⁵ : NormedRing 𝕜
inst✝⁴ : NormedRing 𝕜'
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : (i : α) → Module 𝕜' (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜' (E i)
hp✝ : p ≠ 0
c : 𝕜
f : { x // x ∈ lp E p }
hp : 0 < ENNReal.toReal p
inst : NNNorm { x // x ∈ lp E p }
coe_nnnorm : ∀ (f : { x // x ∈ lp E p }), ↑‖f‖₊ = ‖f‖
⊢ ‖c • f‖₊ ^ ENNReal.toReal p ≤ ‖c‖₊ ^ ENNReal.toReal p * ‖f‖₊ ^ ENNReal.toReal p
[PROOFSTEP]
have hLHS := lp.hasSum_norm hp (c • f)
[GOAL]
case inr.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁶ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
𝕜' : Type u_4
inst✝⁵ : NormedRing 𝕜
inst✝⁴ : NormedRing 𝕜'
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : (i : α) → Module 𝕜' (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜' (E i)
hp✝ : p ≠ 0
c : 𝕜
f : { x // x ∈ lp E p }
hp : 0 < ENNReal.toReal p
inst : NNNorm { x // x ∈ lp E p }
coe_nnnorm : ∀ (f : { x // x ∈ lp E p }), ↑‖f‖₊ = ‖f‖
hLHS : HasSum (fun i => ‖↑(c • f) i‖ ^ ENNReal.toReal p) (‖c • f‖ ^ ENNReal.toReal p)
⊢ ‖c • f‖₊ ^ ENNReal.toReal p ≤ ‖c‖₊ ^ ENNReal.toReal p * ‖f‖₊ ^ ENNReal.toReal p
[PROOFSTEP]
have hRHS := (lp.hasSum_norm hp f).mul_left (‖c‖ ^ p.toReal)
[GOAL]
case inr.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁶ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
𝕜' : Type u_4
inst✝⁵ : NormedRing 𝕜
inst✝⁴ : NormedRing 𝕜'
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : (i : α) → Module 𝕜' (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜' (E i)
hp✝ : p ≠ 0
c : 𝕜
f : { x // x ∈ lp E p }
hp : 0 < ENNReal.toReal p
inst : NNNorm { x // x ∈ lp E p }
coe_nnnorm : ∀ (f : { x // x ∈ lp E p }), ↑‖f‖₊ = ‖f‖
hLHS : HasSum (fun i => ‖↑(c • f) i‖ ^ ENNReal.toReal p) (‖c • f‖ ^ ENNReal.toReal p)
hRHS :
  HasSum (fun i => ‖c‖ ^ ENNReal.toReal p * ‖↑f i‖ ^ ENNReal.toReal p) (‖c‖ ^ ENNReal.toReal p * ‖f‖ ^ ENNReal.toReal p)
⊢ ‖c • f‖₊ ^ ENNReal.toReal p ≤ ‖c‖₊ ^ ENNReal.toReal p * ‖f‖₊ ^ ENNReal.toReal p
[PROOFSTEP]
simp_rw [← coe_nnnorm, ← _root_.coe_nnnorm, ← NNReal.coe_rpow, ← NNReal.coe_mul, NNReal.hasSum_coe] at hRHS hLHS 
[GOAL]
case inr.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁶ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
𝕜' : Type u_4
inst✝⁵ : NormedRing 𝕜
inst✝⁴ : NormedRing 𝕜'
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : (i : α) → Module 𝕜' (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜' (E i)
hp✝ : p ≠ 0
c : 𝕜
f : { x // x ∈ lp E p }
hp : 0 < ENNReal.toReal p
inst : NNNorm { x // x ∈ lp E p }
coe_nnnorm : ∀ (f : { x // x ∈ lp E p }), ↑‖f‖₊ = ‖f‖
hRHS :
  HasSum (fun a => ‖c‖₊ ^ ENNReal.toReal p * ‖↑f a‖₊ ^ ENNReal.toReal p)
    (‖c‖₊ ^ ENNReal.toReal p * ‖f‖₊ ^ ENNReal.toReal p)
hLHS : HasSum (fun a => ‖↑(c • f) a‖₊ ^ ENNReal.toReal p) (‖c • f‖₊ ^ ENNReal.toReal p)
⊢ ‖c • f‖₊ ^ ENNReal.toReal p ≤ ‖c‖₊ ^ ENNReal.toReal p * ‖f‖₊ ^ ENNReal.toReal p
[PROOFSTEP]
refine' hasSum_mono hLHS hRHS fun i => _
[GOAL]
case inr.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁶ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
𝕜' : Type u_4
inst✝⁵ : NormedRing 𝕜
inst✝⁴ : NormedRing 𝕜'
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : (i : α) → Module 𝕜' (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜' (E i)
hp✝ : p ≠ 0
c : 𝕜
f : { x // x ∈ lp E p }
hp : 0 < ENNReal.toReal p
inst : NNNorm { x // x ∈ lp E p }
coe_nnnorm : ∀ (f : { x // x ∈ lp E p }), ↑‖f‖₊ = ‖f‖
hRHS :
  HasSum (fun a => ‖c‖₊ ^ ENNReal.toReal p * ‖↑f a‖₊ ^ ENNReal.toReal p)
    (‖c‖₊ ^ ENNReal.toReal p * ‖f‖₊ ^ ENNReal.toReal p)
hLHS : HasSum (fun a => ‖↑(c • f) a‖₊ ^ ENNReal.toReal p) (‖c • f‖₊ ^ ENNReal.toReal p)
i : α
⊢ ‖↑(c • f) i‖₊ ^ ENNReal.toReal p ≤ ‖c‖₊ ^ ENNReal.toReal p * ‖↑f i‖₊ ^ ENNReal.toReal p
[PROOFSTEP]
dsimp only
[GOAL]
case inr.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁶ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
𝕜' : Type u_4
inst✝⁵ : NormedRing 𝕜
inst✝⁴ : NormedRing 𝕜'
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : (i : α) → Module 𝕜' (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜' (E i)
hp✝ : p ≠ 0
c : 𝕜
f : { x // x ∈ lp E p }
hp : 0 < ENNReal.toReal p
inst : NNNorm { x // x ∈ lp E p }
coe_nnnorm : ∀ (f : { x // x ∈ lp E p }), ↑‖f‖₊ = ‖f‖
hRHS :
  HasSum (fun a => ‖c‖₊ ^ ENNReal.toReal p * ‖↑f a‖₊ ^ ENNReal.toReal p)
    (‖c‖₊ ^ ENNReal.toReal p * ‖f‖₊ ^ ENNReal.toReal p)
hLHS : HasSum (fun a => ‖↑(c • f) a‖₊ ^ ENNReal.toReal p) (‖c • f‖₊ ^ ENNReal.toReal p)
i : α
⊢ ‖↑(c • f) i‖₊ ^ ENNReal.toReal p ≤ ‖c‖₊ ^ ENNReal.toReal p * ‖↑f i‖₊ ^ ENNReal.toReal p
[PROOFSTEP]
rw [← NNReal.mul_rpow]
  -- Porting note: added
[GOAL]
case inr.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁶ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
𝕜' : Type u_4
inst✝⁵ : NormedRing 𝕜
inst✝⁴ : NormedRing 𝕜'
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : (i : α) → Module 𝕜' (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜' (E i)
hp✝ : p ≠ 0
c : 𝕜
f : { x // x ∈ lp E p }
hp : 0 < ENNReal.toReal p
inst : NNNorm { x // x ∈ lp E p }
coe_nnnorm : ∀ (f : { x // x ∈ lp E p }), ↑‖f‖₊ = ‖f‖
hRHS :
  HasSum (fun a => ‖c‖₊ ^ ENNReal.toReal p * ‖↑f a‖₊ ^ ENNReal.toReal p)
    (‖c‖₊ ^ ENNReal.toReal p * ‖f‖₊ ^ ENNReal.toReal p)
hLHS : HasSum (fun a => ‖↑(c • f) a‖₊ ^ ENNReal.toReal p) (‖c • f‖₊ ^ ENNReal.toReal p)
i : α
⊢ ‖↑(c • f) i‖₊ ^ ENNReal.toReal p ≤ (‖c‖₊ * ‖↑f i‖₊) ^ ENNReal.toReal p
[PROOFSTEP]
rw [lp.coeFn_smul, Pi.smul_apply]
[GOAL]
case inr.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁶ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
𝕜' : Type u_4
inst✝⁵ : NormedRing 𝕜
inst✝⁴ : NormedRing 𝕜'
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : (i : α) → Module 𝕜' (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜' (E i)
hp✝ : p ≠ 0
c : 𝕜
f : { x // x ∈ lp E p }
hp : 0 < ENNReal.toReal p
inst : NNNorm { x // x ∈ lp E p }
coe_nnnorm : ∀ (f : { x // x ∈ lp E p }), ↑‖f‖₊ = ‖f‖
hRHS :
  HasSum (fun a => ‖c‖₊ ^ ENNReal.toReal p * ‖↑f a‖₊ ^ ENNReal.toReal p)
    (‖c‖₊ ^ ENNReal.toReal p * ‖f‖₊ ^ ENNReal.toReal p)
hLHS : HasSum (fun a => ‖↑(c • f) a‖₊ ^ ENNReal.toReal p) (‖c • f‖₊ ^ ENNReal.toReal p)
i : α
⊢ ‖c • ↑f i‖₊ ^ ENNReal.toReal p ≤ (‖c‖₊ * ‖↑f i‖₊) ^ ENNReal.toReal p
[PROOFSTEP]
exact NNReal.rpow_le_rpow (nnnorm_smul_le _ _) ENNReal.toReal_nonneg
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝³ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝² : NormedDivisionRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
hp : p ≠ 0
c : 𝕜
f : { x // x ∈ lp E p }
⊢ ‖c • f‖ = ‖c‖ * ‖f‖
[PROOFSTEP]
obtain rfl | hc := eq_or_ne c 0
[GOAL]
case inl
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝³ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝² : NormedDivisionRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
hp : p ≠ 0
f : { x // x ∈ lp E p }
⊢ ‖0 • f‖ = ‖0‖ * ‖f‖
[PROOFSTEP]
simp
[GOAL]
case inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝³ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝² : NormedDivisionRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
hp : p ≠ 0
c : 𝕜
f : { x // x ∈ lp E p }
hc : c ≠ 0
⊢ ‖c • f‖ = ‖c‖ * ‖f‖
[PROOFSTEP]
refine' le_antisymm (norm_const_smul_le hp c f) _
[GOAL]
case inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝³ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝² : NormedDivisionRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
hp : p ≠ 0
c : 𝕜
f : { x // x ∈ lp E p }
hc : c ≠ 0
⊢ ‖c‖ * ‖f‖ ≤ ‖c • f‖
[PROOFSTEP]
have := mul_le_mul_of_nonneg_left (norm_const_smul_le hp c⁻¹ (c • f)) (norm_nonneg c)
[GOAL]
case inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝³ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝² : NormedDivisionRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
hp : p ≠ 0
c : 𝕜
f : { x // x ∈ lp E p }
hc : c ≠ 0
this : ‖c‖ * ‖c⁻¹ • c • f‖ ≤ ‖c‖ * (‖c⁻¹‖ * ‖c • f‖)
⊢ ‖c‖ * ‖f‖ ≤ ‖c • f‖
[PROOFSTEP]
rwa [inv_smul_smul₀ hc, norm_inv, mul_inv_cancel_left₀ (norm_ne_zero_iff.mpr hc)] at this 
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝² : (i : α) → NormedAddCommGroup (E i)
inst✝¹ : (i : α) → StarAddMonoid (E i)
inst✝ : ∀ (i : α), NormedStarGroup (E i)
f : (i : α) → E i
hf : Memℓp f p
⊢ Memℓp (star f) p
[PROOFSTEP]
rcases p.trichotomy with (rfl | rfl | hp)
[GOAL]
case inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝² : (i : α) → NormedAddCommGroup (E i)
inst✝¹ : (i : α) → StarAddMonoid (E i)
inst✝ : ∀ (i : α), NormedStarGroup (E i)
f : (i : α) → E i
hf : Memℓp f 0
⊢ Memℓp (star f) 0
[PROOFSTEP]
apply memℓp_zero
[GOAL]
case inl.hf
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝² : (i : α) → NormedAddCommGroup (E i)
inst✝¹ : (i : α) → StarAddMonoid (E i)
inst✝ : ∀ (i : α), NormedStarGroup (E i)
f : (i : α) → E i
hf : Memℓp f 0
⊢ Set.Finite {i | star f i ≠ 0}
[PROOFSTEP]
simp [hf.finite_dsupport]
[GOAL]
case inr.inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝² : (i : α) → NormedAddCommGroup (E i)
inst✝¹ : (i : α) → StarAddMonoid (E i)
inst✝ : ∀ (i : α), NormedStarGroup (E i)
f : (i : α) → E i
hf : Memℓp f ⊤
⊢ Memℓp (star f) ⊤
[PROOFSTEP]
apply memℓp_infty
[GOAL]
case inr.inl.hf
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝² : (i : α) → NormedAddCommGroup (E i)
inst✝¹ : (i : α) → StarAddMonoid (E i)
inst✝ : ∀ (i : α), NormedStarGroup (E i)
f : (i : α) → E i
hf : Memℓp f ⊤
⊢ BddAbove (Set.range fun i => ‖star f i‖)
[PROOFSTEP]
simpa using hf.bddAbove
[GOAL]
case inr.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝² : (i : α) → NormedAddCommGroup (E i)
inst✝¹ : (i : α) → StarAddMonoid (E i)
inst✝ : ∀ (i : α), NormedStarGroup (E i)
f : (i : α) → E i
hf : Memℓp f p
hp : 0 < ENNReal.toReal p
⊢ Memℓp (star f) p
[PROOFSTEP]
apply memℓp_gen
[GOAL]
case inr.inr.hf
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝² : (i : α) → NormedAddCommGroup (E i)
inst✝¹ : (i : α) → StarAddMonoid (E i)
inst✝ : ∀ (i : α), NormedStarGroup (E i)
f : (i : α) → E i
hf : Memℓp f p
hp : 0 < ENNReal.toReal p
⊢ Summable fun i => ‖star f i‖ ^ ENNReal.toReal p
[PROOFSTEP]
simpa using hf.summable hp
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝² : (i : α) → NormedAddCommGroup (E i)
inst✝¹ : (i : α) → StarAddMonoid (E i)
inst✝ : ∀ (i : α), NormedStarGroup (E i)
x : { x // x ∈ lp E p }
⊢ star (star x) = x
[PROOFSTEP]
simp [star]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝² : (i : α) → NormedAddCommGroup (E i)
inst✝¹ : (i : α) → StarAddMonoid (E i)
inst✝ : ∀ (i : α), NormedStarGroup (E i)
hp : Fact (1 ≤ p)
f : { x // x ∈ lp E p }
⊢ ‖star f‖ = ‖f‖
[PROOFSTEP]
rcases p.trichotomy with (rfl | rfl | h)
[GOAL]
case inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝² : (i : α) → NormedAddCommGroup (E i)
inst✝¹ : (i : α) → StarAddMonoid (E i)
inst✝ : ∀ (i : α), NormedStarGroup (E i)
hp : Fact (1 ≤ 0)
f : { x // x ∈ lp E 0 }
⊢ ‖star f‖ = ‖f‖
[PROOFSTEP]
exfalso
[GOAL]
case inl.h
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝² : (i : α) → NormedAddCommGroup (E i)
inst✝¹ : (i : α) → StarAddMonoid (E i)
inst✝ : ∀ (i : α), NormedStarGroup (E i)
hp : Fact (1 ≤ 0)
f : { x // x ∈ lp E 0 }
⊢ False
[PROOFSTEP]
have := ENNReal.toReal_mono ENNReal.zero_ne_top hp.elim
[GOAL]
case inl.h
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝² : (i : α) → NormedAddCommGroup (E i)
inst✝¹ : (i : α) → StarAddMonoid (E i)
inst✝ : ∀ (i : α), NormedStarGroup (E i)
hp : Fact (1 ≤ 0)
f : { x // x ∈ lp E 0 }
this : ENNReal.toReal 1 ≤ ENNReal.toReal 0
⊢ False
[PROOFSTEP]
norm_num at this 
[GOAL]
case inr.inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝² : (i : α) → NormedAddCommGroup (E i)
inst✝¹ : (i : α) → StarAddMonoid (E i)
inst✝ : ∀ (i : α), NormedStarGroup (E i)
hp : Fact (1 ≤ ⊤)
f : { x // x ∈ lp E ⊤ }
⊢ ‖star f‖ = ‖f‖
[PROOFSTEP]
simp only [lp.norm_eq_ciSup, lp.star_apply, norm_star]
[GOAL]
case inr.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝² : (i : α) → NormedAddCommGroup (E i)
inst✝¹ : (i : α) → StarAddMonoid (E i)
inst✝ : ∀ (i : α), NormedStarGroup (E i)
hp : Fact (1 ≤ p)
f : { x // x ∈ lp E p }
h : 0 < ENNReal.toReal p
⊢ ‖star f‖ = ‖f‖
[PROOFSTEP]
simp only [lp.norm_eq_tsum_rpow h, lp.star_apply, norm_star]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
I : Type u_3
B : I → Type u_4
inst✝ : (i : I) → NonUnitalNormedRing (B i)
f g : (i : I) → B i
hf : Memℓp f ⊤
hg : Memℓp g ⊤
⊢ Memℓp (f * g) ⊤
[PROOFSTEP]
rw [memℓp_infty_iff]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
I : Type u_3
B : I → Type u_4
inst✝ : (i : I) → NonUnitalNormedRing (B i)
f g : (i : I) → B i
hf : Memℓp f ⊤
hg : Memℓp g ⊤
⊢ BddAbove (Set.range fun i => ‖(f * g) i‖)
[PROOFSTEP]
obtain ⟨⟨Cf, hCf⟩, ⟨Cg, hCg⟩⟩ := hf.bddAbove, hg.bddAbove
[GOAL]
case intro.intro
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
I : Type u_3
B : I → Type u_4
inst✝ : (i : I) → NonUnitalNormedRing (B i)
f g : (i : I) → B i
hf : Memℓp f ⊤
hg : Memℓp g ⊤
Cf : ℝ
hCf : Cf ∈ upperBounds (Set.range fun i => ‖f i‖)
Cg : ℝ
hCg : Cg ∈ upperBounds (Set.range fun i => ‖g i‖)
⊢ BddAbove (Set.range fun i => ‖(f * g) i‖)
[PROOFSTEP]
refine' ⟨Cf * Cg, _⟩
[GOAL]
case intro.intro
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
I : Type u_3
B : I → Type u_4
inst✝ : (i : I) → NonUnitalNormedRing (B i)
f g : (i : I) → B i
hf : Memℓp f ⊤
hg : Memℓp g ⊤
Cf : ℝ
hCf : Cf ∈ upperBounds (Set.range fun i => ‖f i‖)
Cg : ℝ
hCg : Cg ∈ upperBounds (Set.range fun i => ‖g i‖)
⊢ Cf * Cg ∈ upperBounds (Set.range fun i => ‖(f * g) i‖)
[PROOFSTEP]
rintro _ ⟨i, rfl⟩
[GOAL]
case intro.intro.intro
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
I : Type u_3
B : I → Type u_4
inst✝ : (i : I) → NonUnitalNormedRing (B i)
f g : (i : I) → B i
hf : Memℓp f ⊤
hg : Memℓp g ⊤
Cf : ℝ
hCf : Cf ∈ upperBounds (Set.range fun i => ‖f i‖)
Cg : ℝ
hCg : Cg ∈ upperBounds (Set.range fun i => ‖g i‖)
i : I
⊢ (fun i => ‖(f * g) i‖) i ≤ Cf * Cg
[PROOFSTEP]
calc
  ‖(f * g) i‖ ≤ ‖f i‖ * ‖g i‖ := norm_mul_le (f i) (g i)
  _ ≤ Cf * Cg := mul_le_mul (hCf ⟨i, rfl⟩) (hCg ⟨i, rfl⟩) (norm_nonneg _) ((norm_nonneg _).trans (hCf ⟨i, rfl⟩))
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
I : Type u_3
B : I → Type u_4
inst✝³ : (i : I) → NonUnitalNormedRing (B i)
inst✝² : (i : I) → StarRing (B i)
inst✝¹ : ∀ (i : I), NormedStarGroup (B i)
inst✝ : ∀ (i : I), CstarRing (B i)
⊢ ∀ {x : { x // x ∈ lp B ⊤ }}, ‖star x * x‖ = ‖x‖ * ‖x‖
[PROOFSTEP]
intro f
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
I : Type u_3
B : I → Type u_4
inst✝³ : (i : I) → NonUnitalNormedRing (B i)
inst✝² : (i : I) → StarRing (B i)
inst✝¹ : ∀ (i : I), NormedStarGroup (B i)
inst✝ : ∀ (i : I), CstarRing (B i)
f : { x // x ∈ lp B ⊤ }
⊢ ‖star f * f‖ = ‖f‖ * ‖f‖
[PROOFSTEP]
apply le_antisymm
[GOAL]
case a
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
I : Type u_3
B : I → Type u_4
inst✝³ : (i : I) → NonUnitalNormedRing (B i)
inst✝² : (i : I) → StarRing (B i)
inst✝¹ : ∀ (i : I), NormedStarGroup (B i)
inst✝ : ∀ (i : I), CstarRing (B i)
f : { x // x ∈ lp B ⊤ }
⊢ ‖star f * f‖ ≤ ‖f‖ * ‖f‖
[PROOFSTEP]
rw [← sq]
[GOAL]
case a
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
I : Type u_3
B : I → Type u_4
inst✝³ : (i : I) → NonUnitalNormedRing (B i)
inst✝² : (i : I) → StarRing (B i)
inst✝¹ : ∀ (i : I), NormedStarGroup (B i)
inst✝ : ∀ (i : I), CstarRing (B i)
f : { x // x ∈ lp B ⊤ }
⊢ ‖star f * f‖ ≤ ‖f‖ ^ 2
[PROOFSTEP]
refine' lp.norm_le_of_forall_le (sq_nonneg ‖f‖) fun i => _
[GOAL]
case a
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
I : Type u_3
B : I → Type u_4
inst✝³ : (i : I) → NonUnitalNormedRing (B i)
inst✝² : (i : I) → StarRing (B i)
inst✝¹ : ∀ (i : I), NormedStarGroup (B i)
inst✝ : ∀ (i : I), CstarRing (B i)
f : { x // x ∈ lp B ⊤ }
i : I
⊢ ‖↑(star f * f) i‖ ≤ ‖f‖ ^ 2
[PROOFSTEP]
simp only [lp.star_apply, CstarRing.norm_star_mul_self, ← sq, infty_coeFn_mul, Pi.mul_apply]
[GOAL]
case a
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
I : Type u_3
B : I → Type u_4
inst✝³ : (i : I) → NonUnitalNormedRing (B i)
inst✝² : (i : I) → StarRing (B i)
inst✝¹ : ∀ (i : I), NormedStarGroup (B i)
inst✝ : ∀ (i : I), CstarRing (B i)
f : { x // x ∈ lp B ⊤ }
i : I
⊢ ‖↑f i‖ ^ 2 ≤ ‖f‖ ^ 2
[PROOFSTEP]
refine' sq_le_sq' _ (lp.norm_apply_le_norm ENNReal.top_ne_zero _ _)
[GOAL]
case a
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
I : Type u_3
B : I → Type u_4
inst✝³ : (i : I) → NonUnitalNormedRing (B i)
inst✝² : (i : I) → StarRing (B i)
inst✝¹ : ∀ (i : I), NormedStarGroup (B i)
inst✝ : ∀ (i : I), CstarRing (B i)
f : { x // x ∈ lp B ⊤ }
i : I
⊢ -‖f‖ ≤ ‖↑f i‖
[PROOFSTEP]
linarith [norm_nonneg (f i), norm_nonneg f]
[GOAL]
case a
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
I : Type u_3
B : I → Type u_4
inst✝³ : (i : I) → NonUnitalNormedRing (B i)
inst✝² : (i : I) → StarRing (B i)
inst✝¹ : ∀ (i : I), NormedStarGroup (B i)
inst✝ : ∀ (i : I), CstarRing (B i)
f : { x // x ∈ lp B ⊤ }
⊢ ‖f‖ * ‖f‖ ≤ ‖star f * f‖
[PROOFSTEP]
rw [← sq, ← Real.le_sqrt (norm_nonneg _) (norm_nonneg _)]
[GOAL]
case a
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
I : Type u_3
B : I → Type u_4
inst✝³ : (i : I) → NonUnitalNormedRing (B i)
inst✝² : (i : I) → StarRing (B i)
inst✝¹ : ∀ (i : I), NormedStarGroup (B i)
inst✝ : ∀ (i : I), CstarRing (B i)
f : { x // x ∈ lp B ⊤ }
⊢ ‖f‖ ≤ Real.sqrt ‖star f * f‖
[PROOFSTEP]
refine' lp.norm_le_of_forall_le ‖star f * f‖.sqrt_nonneg fun i => _
[GOAL]
case a
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
I : Type u_3
B : I → Type u_4
inst✝³ : (i : I) → NonUnitalNormedRing (B i)
inst✝² : (i : I) → StarRing (B i)
inst✝¹ : ∀ (i : I), NormedStarGroup (B i)
inst✝ : ∀ (i : I), CstarRing (B i)
f : { x // x ∈ lp B ⊤ }
i : I
⊢ ‖↑f i‖ ≤ Real.sqrt ‖star f * f‖
[PROOFSTEP]
rw [Real.le_sqrt (norm_nonneg _) (norm_nonneg _), sq, ← CstarRing.norm_star_mul_self]
[GOAL]
case a
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
I : Type u_3
B : I → Type u_4
inst✝³ : (i : I) → NonUnitalNormedRing (B i)
inst✝² : (i : I) → StarRing (B i)
inst✝¹ : ∀ (i : I), NormedStarGroup (B i)
inst✝ : ∀ (i : I), CstarRing (B i)
f : { x // x ∈ lp B ⊤ }
i : I
⊢ ‖star (↑f i) * ↑f i‖ ≤ ‖star f * f‖
[PROOFSTEP]
exact lp.norm_apply_le_norm ENNReal.top_ne_zero (star f * f) i
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝² : (i : α) → NormedAddCommGroup (E i)
I : Type u_3
B : I → Type u_4
inst✝¹ : (i : I) → NormedRing (B i)
inst✝ : ∀ (i : I), NormOneClass (B i)
⊢ 1 ∈ upperBounds (Set.range fun i => ‖OfNat.ofNat 1 i‖)
[PROOFSTEP]
rintro i ⟨i, rfl⟩
[GOAL]
case intro
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝² : (i : α) → NormedAddCommGroup (E i)
I : Type u_3
B : I → Type u_4
inst✝¹ : (i : I) → NormedRing (B i)
inst✝ : ∀ (i : I), NormOneClass (B i)
i : I
⊢ (fun i => ‖OfNat.ofNat 1 i‖) i ≤ 1
[PROOFSTEP]
exact norm_one.le
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝³ : (i : α) → NormedAddCommGroup (E i)
I : Type u_3
B : I → Type u_4
inst✝² : (i : I) → NormedRing (B i)
inst✝¹ : ∀ (i : I), NormOneClass (B i)
inst✝ : Nonempty I
⊢ ‖1‖ = 1
[PROOFSTEP]
simp_rw [lp.norm_eq_ciSup, infty_coeFn_one, Pi.one_apply, norm_one, ciSup_const]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝² : (i : α) → NormedAddCommGroup (E i)
I : Type u_3
B : I → Type u_4
inst✝¹ : (i : I) → NormedCommRing (B i)
inst✝ : ∀ (i : I), NormOneClass (B i)
src✝ : Ring { x // x ∈ lp B ⊤ } := inftyRing
f g : { x // x ∈ lp B ⊤ }
⊢ f * g = g * f
[PROOFSTEP]
ext
[GOAL]
case h.h
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝² : (i : α) → NormedAddCommGroup (E i)
I : Type u_3
B : I → Type u_4
inst✝¹ : (i : I) → NormedCommRing (B i)
inst✝ : ∀ (i : I), NormOneClass (B i)
src✝ : Ring { x // x ∈ lp B ⊤ } := inftyRing
f g : { x // x ∈ lp B ⊤ }
x✝ : I
⊢ ↑(f * g) x✝ = ↑(g * f) x✝
[PROOFSTEP]
simp only [lp.infty_coeFn_mul, Pi.mul_apply, mul_comm]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
I : Type u_3
𝕜 : Type u_4
B : I → Type u_5
inst✝³ : NormedField 𝕜
inst✝² : (i : I) → NormedRing (B i)
inst✝¹ : (i : I) → NormedAlgebra 𝕜 (B i)
inst✝ : ∀ (i : I), NormOneClass (B i)
k : 𝕜
⊢ Memℓp (↑(algebraMap 𝕜 ((i : I) → B i)) k) ⊤
[PROOFSTEP]
rw [Algebra.algebraMap_eq_smul_one]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
I : Type u_3
𝕜 : Type u_4
B : I → Type u_5
inst✝³ : NormedField 𝕜
inst✝² : (i : I) → NormedRing (B i)
inst✝¹ : (i : I) → NormedAlgebra 𝕜 (B i)
inst✝ : ∀ (i : I), NormOneClass (B i)
k : 𝕜
⊢ Memℓp (k • 1) ⊤
[PROOFSTEP]
exact (one_memℓp_infty.const_smul k : Memℓp (k • (1 : ∀ i, B i)) ∞)
[GOAL]
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
i : α
a : E i
⊢ (fun j => if h : j = i then (_ : i = j) ▸ a else 0) ∈ lp E p
[PROOFSTEP]
refine' (memℓp_zero _).of_exponent_ge (zero_le p)
[GOAL]
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
i : α
a : E i
⊢ Set.Finite {i_1 | (fun j => if h : j = i then (_ : i = j) ▸ a else 0) i_1 ≠ 0}
[PROOFSTEP]
refine' (Set.finite_singleton i).subset _
[GOAL]
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
i : α
a : E i
⊢ {i_1 | (fun j => if h : j = i then (_ : i = j) ▸ a else 0) i_1 ≠ 0} ⊆ {i}
[PROOFSTEP]
intro j
[GOAL]
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
i : α
a : E i
j : α
⊢ j ∈ {i_1 | (fun j => if h : j = i then (_ : i = j) ▸ a else 0) i_1 ≠ 0} → j ∈ {i}
[PROOFSTEP]
simp only [forall_exists_index, Set.mem_singleton_iff, Ne.def, dite_eq_right_iff, Set.mem_setOf_eq, not_forall]
[GOAL]
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
i : α
a : E i
j : α
⊢ ∀ (x : j = i), ¬(_ : i = j) ▸ a = 0 → j = i
[PROOFSTEP]
rintro rfl
[GOAL]
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
j : α
a : E j
⊢ ¬(_ : j = j) ▸ a = 0 → j = j
[PROOFSTEP]
simp
[GOAL]
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
i : α
a : E i
⊢ ↑(lp.single p i a) i = a
[PROOFSTEP]
rw [lp.single_apply, dif_pos rfl]
[GOAL]
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
i : α
a : E i
j : α
hij : j ≠ i
⊢ ↑(lp.single p i a) j = 0
[PROOFSTEP]
rw [lp.single_apply, dif_neg hij]
[GOAL]
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
i : α
a : E i
⊢ lp.single p i (-a) = -lp.single p i a
[PROOFSTEP]
refine' ext (funext (fun (j : α) => _))
[GOAL]
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
i : α
a : E i
j : α
⊢ ↑(lp.single p i (-a)) j = ↑(-lp.single p i a) j
[PROOFSTEP]
by_cases hi : j = i
[GOAL]
case pos
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
i : α
a : E i
j : α
hi : j = i
⊢ ↑(lp.single p i (-a)) j = ↑(-lp.single p i a) j
[PROOFSTEP]
subst hi
[GOAL]
case pos
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
j : α
a : E j
⊢ ↑(lp.single p j (-a)) j = ↑(-lp.single p j a) j
[PROOFSTEP]
simp [lp.single_apply_self]
[GOAL]
case neg
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
i : α
a : E i
j : α
hi : ¬j = i
⊢ ↑(lp.single p i (-a)) j = ↑(-lp.single p i a) j
[PROOFSTEP]
simp [lp.single_apply_ne p i _ hi]
[GOAL]
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
i : α
a : E i
c : 𝕜
⊢ lp.single p i (c • a) = c • lp.single p i a
[PROOFSTEP]
refine' ext (funext (fun (j : α) => _))
[GOAL]
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
i : α
a : E i
c : 𝕜
j : α
⊢ ↑(lp.single p i (c • a)) j = ↑(c • lp.single p i a) j
[PROOFSTEP]
by_cases hi : j = i
[GOAL]
case pos
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
i : α
a : E i
c : 𝕜
j : α
hi : j = i
⊢ ↑(lp.single p i (c • a)) j = ↑(c • lp.single p i a) j
[PROOFSTEP]
subst hi
[GOAL]
case pos
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
c : 𝕜
j : α
a : E j
⊢ ↑(lp.single p j (c • a)) j = ↑(c • lp.single p j a) j
[PROOFSTEP]
dsimp
[GOAL]
case pos
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
c : 𝕜
j : α
a : E j
⊢ ↑(lp.single p j (c • a)) j = c • ↑(lp.single p j a) j
[PROOFSTEP]
simp [lp.single_apply_self]
[GOAL]
case neg
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
i : α
a : E i
c : 𝕜
j : α
hi : ¬j = i
⊢ ↑(lp.single p i (c • a)) j = ↑(c • lp.single p i a) j
[PROOFSTEP]
dsimp
[GOAL]
case neg
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
i : α
a : E i
c : 𝕜
j : α
hi : ¬j = i
⊢ ↑(lp.single p i (c • a)) j = c • ↑(lp.single p i a) j
[PROOFSTEP]
simp [lp.single_apply_ne p i _ hi]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
hp : 0 < ENNReal.toReal p
f : (i : α) → E i
s : Finset α
⊢ ‖∑ i in s, lp.single p i (f i)‖ ^ ENNReal.toReal p = ∑ i in s, ‖f i‖ ^ ENNReal.toReal p
[PROOFSTEP]
refine' (hasSum_norm hp (∑ i in s, lp.single p i (f i))).unique _
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
hp : 0 < ENNReal.toReal p
f : (i : α) → E i
s : Finset α
⊢ HasSum (fun i => ‖↑(∑ i in s, lp.single p i (f i)) i‖ ^ ENNReal.toReal p) (∑ i in s, ‖f i‖ ^ ENNReal.toReal p)
[PROOFSTEP]
simp only [lp.single_apply, coeFn_sum, Finset.sum_apply, Finset.sum_dite_eq]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
hp : 0 < ENNReal.toReal p
f : (i : α) → E i
s : Finset α
⊢ HasSum (fun i => ‖if i ∈ s then f i else 0‖ ^ ENNReal.toReal p) (∑ i in s, ‖f i‖ ^ ENNReal.toReal p)
[PROOFSTEP]
have h : ∀ (i) (_ : i ∉ s), ‖ite (i ∈ s) (f i) 0‖ ^ p.toReal = 0 :=
  by
  intro i hi
  simp [if_neg hi, Real.zero_rpow hp.ne']
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
hp : 0 < ENNReal.toReal p
f : (i : α) → E i
s : Finset α
⊢ ∀ (i : α), ¬i ∈ s → ‖if i ∈ s then f i else 0‖ ^ ENNReal.toReal p = 0
[PROOFSTEP]
intro i hi
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
hp : 0 < ENNReal.toReal p
f : (i : α) → E i
s : Finset α
i : α
hi : ¬i ∈ s
⊢ ‖if i ∈ s then f i else 0‖ ^ ENNReal.toReal p = 0
[PROOFSTEP]
simp [if_neg hi, Real.zero_rpow hp.ne']
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
hp : 0 < ENNReal.toReal p
f : (i : α) → E i
s : Finset α
h : ∀ (i : α), ¬i ∈ s → ‖if i ∈ s then f i else 0‖ ^ ENNReal.toReal p = 0
⊢ HasSum (fun i => ‖if i ∈ s then f i else 0‖ ^ ENNReal.toReal p) (∑ i in s, ‖f i‖ ^ ENNReal.toReal p)
[PROOFSTEP]
have h' : ∀ i ∈ s, ‖f i‖ ^ p.toReal = ‖ite (i ∈ s) (f i) 0‖ ^ p.toReal :=
  by
  intro i hi
  rw [if_pos hi]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
hp : 0 < ENNReal.toReal p
f : (i : α) → E i
s : Finset α
h : ∀ (i : α), ¬i ∈ s → ‖if i ∈ s then f i else 0‖ ^ ENNReal.toReal p = 0
⊢ ∀ (i : α), i ∈ s → ‖f i‖ ^ ENNReal.toReal p = ‖if i ∈ s then f i else 0‖ ^ ENNReal.toReal p
[PROOFSTEP]
intro i hi
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
hp : 0 < ENNReal.toReal p
f : (i : α) → E i
s : Finset α
h : ∀ (i : α), ¬i ∈ s → ‖if i ∈ s then f i else 0‖ ^ ENNReal.toReal p = 0
i : α
hi : i ∈ s
⊢ ‖f i‖ ^ ENNReal.toReal p = ‖if i ∈ s then f i else 0‖ ^ ENNReal.toReal p
[PROOFSTEP]
rw [if_pos hi]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
hp : 0 < ENNReal.toReal p
f : (i : α) → E i
s : Finset α
h : ∀ (i : α), ¬i ∈ s → ‖if i ∈ s then f i else 0‖ ^ ENNReal.toReal p = 0
h' : ∀ (i : α), i ∈ s → ‖f i‖ ^ ENNReal.toReal p = ‖if i ∈ s then f i else 0‖ ^ ENNReal.toReal p
⊢ HasSum (fun i => ‖if i ∈ s then f i else 0‖ ^ ENNReal.toReal p) (∑ i in s, ‖f i‖ ^ ENNReal.toReal p)
[PROOFSTEP]
simpa [Finset.sum_congr rfl h'] using hasSum_sum_of_ne_finset_zero h
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
hp : 0 < ENNReal.toReal p
f : (i : α) → E i
i : α
⊢ ‖lp.single p i (f i)‖ = ‖f i‖
[PROOFSTEP]
refine' Real.rpow_left_injOn hp.ne' (norm_nonneg' _) (norm_nonneg _) _
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
hp : 0 < ENNReal.toReal p
f : (i : α) → E i
i : α
⊢ (fun y => y ^ ENNReal.toReal p) ‖lp.single p i (f i)‖ = (fun y => y ^ ENNReal.toReal p) ‖f i‖
[PROOFSTEP]
simpa using lp.norm_sum_single hp f { i }
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
hp : 0 < ENNReal.toReal p
f : { x // x ∈ lp E p }
s : Finset α
⊢ ‖f‖ ^ ENNReal.toReal p - ‖f - ∑ i in s, lp.single p i (↑f i)‖ ^ ENNReal.toReal p = ∑ i in s, ‖↑f i‖ ^ ENNReal.toReal p
[PROOFSTEP]
refine' ((hasSum_norm hp f).sub (hasSum_norm hp (f - ∑ i in s, lp.single p i (f i)))).unique _
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
hp : 0 < ENNReal.toReal p
f : { x // x ∈ lp E p }
s : Finset α
⊢ HasSum (fun b => ‖↑f b‖ ^ ENNReal.toReal p - ‖↑(f - ∑ i in s, lp.single p i (↑f i)) b‖ ^ ENNReal.toReal p)
    (∑ i in s, ‖↑f i‖ ^ ENNReal.toReal p)
[PROOFSTEP]
let F : α → ℝ := fun i => ‖f i‖ ^ p.toReal - ‖(f - ∑ i in s, lp.single p i (f i)) i‖ ^ p.toReal
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
hp : 0 < ENNReal.toReal p
f : { x // x ∈ lp E p }
s : Finset α
F : α → ℝ := fun i => ‖↑f i‖ ^ ENNReal.toReal p - ‖↑(f - ∑ i in s, lp.single p i (↑f i)) i‖ ^ ENNReal.toReal p
⊢ HasSum (fun b => ‖↑f b‖ ^ ENNReal.toReal p - ‖↑(f - ∑ i in s, lp.single p i (↑f i)) b‖ ^ ENNReal.toReal p)
    (∑ i in s, ‖↑f i‖ ^ ENNReal.toReal p)
[PROOFSTEP]
have hF : ∀ (i) (_ : i ∉ s), F i = 0 := by
  intro i hi
  suffices ‖f i‖ ^ p.toReal - ‖f i - ite (i ∈ s) (f i) 0‖ ^ p.toReal = 0 by
    simpa only [coeFn_sum, lp.single_apply, coeFn_sub, Pi.sub_apply, Finset.sum_apply, Finset.sum_dite_eq] using this
  simp only [if_neg hi, sub_zero, sub_self]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
hp : 0 < ENNReal.toReal p
f : { x // x ∈ lp E p }
s : Finset α
F : α → ℝ := fun i => ‖↑f i‖ ^ ENNReal.toReal p - ‖↑(f - ∑ i in s, lp.single p i (↑f i)) i‖ ^ ENNReal.toReal p
⊢ ∀ (i : α), ¬i ∈ s → F i = 0
[PROOFSTEP]
intro i hi
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
hp : 0 < ENNReal.toReal p
f : { x // x ∈ lp E p }
s : Finset α
F : α → ℝ := fun i => ‖↑f i‖ ^ ENNReal.toReal p - ‖↑(f - ∑ i in s, lp.single p i (↑f i)) i‖ ^ ENNReal.toReal p
i : α
hi : ¬i ∈ s
⊢ F i = 0
[PROOFSTEP]
suffices ‖f i‖ ^ p.toReal - ‖f i - ite (i ∈ s) (f i) 0‖ ^ p.toReal = 0 by
  simpa only [coeFn_sum, lp.single_apply, coeFn_sub, Pi.sub_apply, Finset.sum_apply, Finset.sum_dite_eq] using this
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
hp : 0 < ENNReal.toReal p
f : { x // x ∈ lp E p }
s : Finset α
F : α → ℝ := fun i => ‖↑f i‖ ^ ENNReal.toReal p - ‖↑(f - ∑ i in s, lp.single p i (↑f i)) i‖ ^ ENNReal.toReal p
i : α
hi : ¬i ∈ s
this : ‖↑f i‖ ^ ENNReal.toReal p - ‖↑f i - if i ∈ s then ↑f i else 0‖ ^ ENNReal.toReal p = 0
⊢ F i = 0
[PROOFSTEP]
simpa only [coeFn_sum, lp.single_apply, coeFn_sub, Pi.sub_apply, Finset.sum_apply, Finset.sum_dite_eq] using this
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
hp : 0 < ENNReal.toReal p
f : { x // x ∈ lp E p }
s : Finset α
F : α → ℝ := fun i => ‖↑f i‖ ^ ENNReal.toReal p - ‖↑(f - ∑ i in s, lp.single p i (↑f i)) i‖ ^ ENNReal.toReal p
i : α
hi : ¬i ∈ s
⊢ ‖↑f i‖ ^ ENNReal.toReal p - ‖↑f i - if i ∈ s then ↑f i else 0‖ ^ ENNReal.toReal p = 0
[PROOFSTEP]
simp only [if_neg hi, sub_zero, sub_self]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
hp : 0 < ENNReal.toReal p
f : { x // x ∈ lp E p }
s : Finset α
F : α → ℝ := fun i => ‖↑f i‖ ^ ENNReal.toReal p - ‖↑(f - ∑ i in s, lp.single p i (↑f i)) i‖ ^ ENNReal.toReal p
hF : ∀ (i : α), ¬i ∈ s → F i = 0
⊢ HasSum (fun b => ‖↑f b‖ ^ ENNReal.toReal p - ‖↑(f - ∑ i in s, lp.single p i (↑f i)) b‖ ^ ENNReal.toReal p)
    (∑ i in s, ‖↑f i‖ ^ ENNReal.toReal p)
[PROOFSTEP]
have hF' : ∀ i ∈ s, F i = ‖f i‖ ^ p.toReal := by
  intro i hi
  simp only [coeFn_sum, lp.single_apply, if_pos hi, sub_self, eq_self_iff_true, coeFn_sub, Pi.sub_apply,
    Finset.sum_apply, Finset.sum_dite_eq, sub_eq_self]
  simp [Real.zero_rpow hp.ne']
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
hp : 0 < ENNReal.toReal p
f : { x // x ∈ lp E p }
s : Finset α
F : α → ℝ := fun i => ‖↑f i‖ ^ ENNReal.toReal p - ‖↑(f - ∑ i in s, lp.single p i (↑f i)) i‖ ^ ENNReal.toReal p
hF : ∀ (i : α), ¬i ∈ s → F i = 0
⊢ ∀ (i : α), i ∈ s → F i = ‖↑f i‖ ^ ENNReal.toReal p
[PROOFSTEP]
intro i hi
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
hp : 0 < ENNReal.toReal p
f : { x // x ∈ lp E p }
s : Finset α
F : α → ℝ := fun i => ‖↑f i‖ ^ ENNReal.toReal p - ‖↑(f - ∑ i in s, lp.single p i (↑f i)) i‖ ^ ENNReal.toReal p
hF : ∀ (i : α), ¬i ∈ s → F i = 0
i : α
hi : i ∈ s
⊢ F i = ‖↑f i‖ ^ ENNReal.toReal p
[PROOFSTEP]
simp only [coeFn_sum, lp.single_apply, if_pos hi, sub_self, eq_self_iff_true, coeFn_sub, Pi.sub_apply, Finset.sum_apply,
  Finset.sum_dite_eq, sub_eq_self]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
hp : 0 < ENNReal.toReal p
f : { x // x ∈ lp E p }
s : Finset α
F : α → ℝ := fun i => ‖↑f i‖ ^ ENNReal.toReal p - ‖↑(f - ∑ i in s, lp.single p i (↑f i)) i‖ ^ ENNReal.toReal p
hF : ∀ (i : α), ¬i ∈ s → F i = 0
i : α
hi : i ∈ s
⊢ ‖0‖ ^ ENNReal.toReal p = 0
[PROOFSTEP]
simp [Real.zero_rpow hp.ne']
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
hp : 0 < ENNReal.toReal p
f : { x // x ∈ lp E p }
s : Finset α
F : α → ℝ := fun i => ‖↑f i‖ ^ ENNReal.toReal p - ‖↑(f - ∑ i in s, lp.single p i (↑f i)) i‖ ^ ENNReal.toReal p
hF : ∀ (i : α), ¬i ∈ s → F i = 0
hF' : ∀ (i : α), i ∈ s → F i = ‖↑f i‖ ^ ENNReal.toReal p
⊢ HasSum (fun b => ‖↑f b‖ ^ ENNReal.toReal p - ‖↑(f - ∑ i in s, lp.single p i (↑f i)) b‖ ^ ENNReal.toReal p)
    (∑ i in s, ‖↑f i‖ ^ ENNReal.toReal p)
[PROOFSTEP]
have : HasSum F (∑ i in s, F i) := hasSum_sum_of_ne_finset_zero hF
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
hp : 0 < ENNReal.toReal p
f : { x // x ∈ lp E p }
s : Finset α
F : α → ℝ := fun i => ‖↑f i‖ ^ ENNReal.toReal p - ‖↑(f - ∑ i in s, lp.single p i (↑f i)) i‖ ^ ENNReal.toReal p
hF : ∀ (i : α), ¬i ∈ s → F i = 0
hF' : ∀ (i : α), i ∈ s → F i = ‖↑f i‖ ^ ENNReal.toReal p
this : HasSum F (∑ i in s, F i)
⊢ HasSum (fun b => ‖↑f b‖ ^ ENNReal.toReal p - ‖↑(f - ∑ i in s, lp.single p i (↑f i)) b‖ ^ ENNReal.toReal p)
    (∑ i in s, ‖↑f i‖ ^ ENNReal.toReal p)
[PROOFSTEP]
rwa [Finset.sum_congr rfl hF'] at this 
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
hp : 0 < ENNReal.toReal p
f : { x // x ∈ lp E p }
s : Finset α
⊢ ‖f - ∑ i in s, lp.single p i (↑f i)‖ ^ ENNReal.toReal p = ‖f‖ ^ ENNReal.toReal p - ∑ i in s, ‖↑f i‖ ^ ENNReal.toReal p
[PROOFSTEP]
linarith [lp.norm_sub_norm_compl_sub_single hp f s]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁵ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝⁴ : NormedRing 𝕜
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝¹ : DecidableEq α
inst✝ : Fact (1 ≤ p)
hp : p ≠ ⊤
f : { x // x ∈ lp E p }
⊢ HasSum (fun i => lp.single p i (↑f i)) f
[PROOFSTEP]
have hp₀ : 0 < p := zero_lt_one.trans_le Fact.out
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁵ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝⁴ : NormedRing 𝕜
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝¹ : DecidableEq α
inst✝ : Fact (1 ≤ p)
hp : p ≠ ⊤
f : { x // x ∈ lp E p }
hp₀ : 0 < p
⊢ HasSum (fun i => lp.single p i (↑f i)) f
[PROOFSTEP]
have hp' : 0 < p.toReal := ENNReal.toReal_pos hp₀.ne' hp
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁵ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝⁴ : NormedRing 𝕜
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝¹ : DecidableEq α
inst✝ : Fact (1 ≤ p)
hp : p ≠ ⊤
f : { x // x ∈ lp E p }
hp₀ : 0 < p
hp' : 0 < ENNReal.toReal p
⊢ HasSum (fun i => lp.single p i (↑f i)) f
[PROOFSTEP]
have := lp.hasSum_norm hp' f
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁵ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝⁴ : NormedRing 𝕜
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝¹ : DecidableEq α
inst✝ : Fact (1 ≤ p)
hp : p ≠ ⊤
f : { x // x ∈ lp E p }
hp₀ : 0 < p
hp' : 0 < ENNReal.toReal p
this : HasSum (fun i => ‖↑f i‖ ^ ENNReal.toReal p) (‖f‖ ^ ENNReal.toReal p)
⊢ HasSum (fun i => lp.single p i (↑f i)) f
[PROOFSTEP]
rw [HasSum, Metric.tendsto_nhds] at this ⊢
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁵ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝⁴ : NormedRing 𝕜
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝¹ : DecidableEq α
inst✝ : Fact (1 ≤ p)
hp : p ≠ ⊤
f : { x // x ∈ lp E p }
hp₀ : 0 < p
hp' : 0 < ENNReal.toReal p
this :
  ∀ (ε : ℝ),
    ε > 0 → ∀ᶠ (x : Finset α) in Filter.atTop, dist (∑ b in x, ‖↑f b‖ ^ ENNReal.toReal p) (‖f‖ ^ ENNReal.toReal p) < ε
⊢ ∀ (ε : ℝ), ε > 0 → ∀ᶠ (x : Finset α) in Filter.atTop, dist (∑ b in x, lp.single p b (↑f b)) f < ε
[PROOFSTEP]
intro ε hε
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁵ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝⁴ : NormedRing 𝕜
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝¹ : DecidableEq α
inst✝ : Fact (1 ≤ p)
hp : p ≠ ⊤
f : { x // x ∈ lp E p }
hp₀ : 0 < p
hp' : 0 < ENNReal.toReal p
this :
  ∀ (ε : ℝ),
    ε > 0 → ∀ᶠ (x : Finset α) in Filter.atTop, dist (∑ b in x, ‖↑f b‖ ^ ENNReal.toReal p) (‖f‖ ^ ENNReal.toReal p) < ε
ε : ℝ
hε : ε > 0
⊢ ∀ᶠ (x : Finset α) in Filter.atTop, dist (∑ b in x, lp.single p b (↑f b)) f < ε
[PROOFSTEP]
refine' (this _ (Real.rpow_pos_of_pos hε p.toReal)).mono _
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁵ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝⁴ : NormedRing 𝕜
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝¹ : DecidableEq α
inst✝ : Fact (1 ≤ p)
hp : p ≠ ⊤
f : { x // x ∈ lp E p }
hp₀ : 0 < p
hp' : 0 < ENNReal.toReal p
this :
  ∀ (ε : ℝ),
    ε > 0 → ∀ᶠ (x : Finset α) in Filter.atTop, dist (∑ b in x, ‖↑f b‖ ^ ENNReal.toReal p) (‖f‖ ^ ENNReal.toReal p) < ε
ε : ℝ
hε : ε > 0
⊢ ∀ (x : Finset α),
    dist (∑ b in x, ‖↑f b‖ ^ ENNReal.toReal p) (‖f‖ ^ ENNReal.toReal p) < ε ^ ENNReal.toReal p →
      dist (∑ b in x, lp.single p b (↑f b)) f < ε
[PROOFSTEP]
intro s hs
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁵ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝⁴ : NormedRing 𝕜
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝¹ : DecidableEq α
inst✝ : Fact (1 ≤ p)
hp : p ≠ ⊤
f : { x // x ∈ lp E p }
hp₀ : 0 < p
hp' : 0 < ENNReal.toReal p
this :
  ∀ (ε : ℝ),
    ε > 0 → ∀ᶠ (x : Finset α) in Filter.atTop, dist (∑ b in x, ‖↑f b‖ ^ ENNReal.toReal p) (‖f‖ ^ ENNReal.toReal p) < ε
ε : ℝ
hε : ε > 0
s : Finset α
hs : dist (∑ b in s, ‖↑f b‖ ^ ENNReal.toReal p) (‖f‖ ^ ENNReal.toReal p) < ε ^ ENNReal.toReal p
⊢ dist (∑ b in s, lp.single p b (↑f b)) f < ε
[PROOFSTEP]
rw [← Real.rpow_lt_rpow_iff dist_nonneg (le_of_lt hε) hp']
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁵ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝⁴ : NormedRing 𝕜
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝¹ : DecidableEq α
inst✝ : Fact (1 ≤ p)
hp : p ≠ ⊤
f : { x // x ∈ lp E p }
hp₀ : 0 < p
hp' : 0 < ENNReal.toReal p
this :
  ∀ (ε : ℝ),
    ε > 0 → ∀ᶠ (x : Finset α) in Filter.atTop, dist (∑ b in x, ‖↑f b‖ ^ ENNReal.toReal p) (‖f‖ ^ ENNReal.toReal p) < ε
ε : ℝ
hε : ε > 0
s : Finset α
hs : dist (∑ b in s, ‖↑f b‖ ^ ENNReal.toReal p) (‖f‖ ^ ENNReal.toReal p) < ε ^ ENNReal.toReal p
⊢ dist (∑ b in s, lp.single p b (↑f b)) f ^ ENNReal.toReal p < ε ^ ENNReal.toReal p
[PROOFSTEP]
rw [dist_comm] at hs 
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁵ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝⁴ : NormedRing 𝕜
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝¹ : DecidableEq α
inst✝ : Fact (1 ≤ p)
hp : p ≠ ⊤
f : { x // x ∈ lp E p }
hp₀ : 0 < p
hp' : 0 < ENNReal.toReal p
this :
  ∀ (ε : ℝ),
    ε > 0 → ∀ᶠ (x : Finset α) in Filter.atTop, dist (∑ b in x, ‖↑f b‖ ^ ENNReal.toReal p) (‖f‖ ^ ENNReal.toReal p) < ε
ε : ℝ
hε : ε > 0
s : Finset α
hs : dist (‖f‖ ^ ENNReal.toReal p) (∑ b in s, ‖↑f b‖ ^ ENNReal.toReal p) < ε ^ ENNReal.toReal p
⊢ dist (∑ b in s, lp.single p b (↑f b)) f ^ ENNReal.toReal p < ε ^ ENNReal.toReal p
[PROOFSTEP]
simp only [dist_eq_norm, Real.norm_eq_abs] at hs ⊢
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁵ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝⁴ : NormedRing 𝕜
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝¹ : DecidableEq α
inst✝ : Fact (1 ≤ p)
hp : p ≠ ⊤
f : { x // x ∈ lp E p }
hp₀ : 0 < p
hp' : 0 < ENNReal.toReal p
this :
  ∀ (ε : ℝ),
    ε > 0 → ∀ᶠ (x : Finset α) in Filter.atTop, dist (∑ b in x, ‖↑f b‖ ^ ENNReal.toReal p) (‖f‖ ^ ENNReal.toReal p) < ε
ε : ℝ
hε : ε > 0
s : Finset α
hs : |‖f‖ ^ ENNReal.toReal p - ∑ x in s, ‖↑f x‖ ^ ENNReal.toReal p| < ε ^ ENNReal.toReal p
⊢ ‖∑ x in s, lp.single p x (↑f x) - f‖ ^ ENNReal.toReal p < ε ^ ENNReal.toReal p
[PROOFSTEP]
have H : ‖(∑ i in s, lp.single p i (f i : E i)) - f‖ ^ p.toReal = ‖f‖ ^ p.toReal - ∑ i in s, ‖f i‖ ^ p.toReal := by
  simpa only [coeFn_neg, Pi.neg_apply, lp.single_neg, Finset.sum_neg_distrib, neg_sub_neg, norm_neg,
    _root_.norm_neg] using lp.norm_compl_sum_single hp' (-f) s
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁵ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝⁴ : NormedRing 𝕜
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝¹ : DecidableEq α
inst✝ : Fact (1 ≤ p)
hp : p ≠ ⊤
f : { x // x ∈ lp E p }
hp₀ : 0 < p
hp' : 0 < ENNReal.toReal p
this :
  ∀ (ε : ℝ),
    ε > 0 → ∀ᶠ (x : Finset α) in Filter.atTop, dist (∑ b in x, ‖↑f b‖ ^ ENNReal.toReal p) (‖f‖ ^ ENNReal.toReal p) < ε
ε : ℝ
hε : ε > 0
s : Finset α
hs : |‖f‖ ^ ENNReal.toReal p - ∑ x in s, ‖↑f x‖ ^ ENNReal.toReal p| < ε ^ ENNReal.toReal p
⊢ ‖∑ i in s, lp.single p i (↑f i) - f‖ ^ ENNReal.toReal p = ‖f‖ ^ ENNReal.toReal p - ∑ i in s, ‖↑f i‖ ^ ENNReal.toReal p
[PROOFSTEP]
simpa only [coeFn_neg, Pi.neg_apply, lp.single_neg, Finset.sum_neg_distrib, neg_sub_neg, norm_neg,
  _root_.norm_neg] using lp.norm_compl_sum_single hp' (-f) s
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁵ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝⁴ : NormedRing 𝕜
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝¹ : DecidableEq α
inst✝ : Fact (1 ≤ p)
hp : p ≠ ⊤
f : { x // x ∈ lp E p }
hp₀ : 0 < p
hp' : 0 < ENNReal.toReal p
this :
  ∀ (ε : ℝ),
    ε > 0 → ∀ᶠ (x : Finset α) in Filter.atTop, dist (∑ b in x, ‖↑f b‖ ^ ENNReal.toReal p) (‖f‖ ^ ENNReal.toReal p) < ε
ε : ℝ
hε : ε > 0
s : Finset α
hs : |‖f‖ ^ ENNReal.toReal p - ∑ x in s, ‖↑f x‖ ^ ENNReal.toReal p| < ε ^ ENNReal.toReal p
H :
  ‖∑ i in s, lp.single p i (↑f i) - f‖ ^ ENNReal.toReal p = ‖f‖ ^ ENNReal.toReal p - ∑ i in s, ‖↑f i‖ ^ ENNReal.toReal p
⊢ ‖∑ x in s, lp.single p x (↑f x) - f‖ ^ ENNReal.toReal p < ε ^ ENNReal.toReal p
[PROOFSTEP]
rw [← H] at hs 
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁵ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝⁴ : NormedRing 𝕜
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝¹ : DecidableEq α
inst✝ : Fact (1 ≤ p)
hp : p ≠ ⊤
f : { x // x ∈ lp E p }
hp₀ : 0 < p
hp' : 0 < ENNReal.toReal p
this :
  ∀ (ε : ℝ),
    ε > 0 → ∀ᶠ (x : Finset α) in Filter.atTop, dist (∑ b in x, ‖↑f b‖ ^ ENNReal.toReal p) (‖f‖ ^ ENNReal.toReal p) < ε
ε : ℝ
hε : ε > 0
s : Finset α
hs : |‖∑ i in s, lp.single p i (↑f i) - f‖ ^ ENNReal.toReal p| < ε ^ ENNReal.toReal p
H :
  ‖∑ i in s, lp.single p i (↑f i) - f‖ ^ ENNReal.toReal p = ‖f‖ ^ ENNReal.toReal p - ∑ i in s, ‖↑f i‖ ^ ENNReal.toReal p
⊢ ‖∑ x in s, lp.single p x (↑f x) - f‖ ^ ENNReal.toReal p < ε ^ ENNReal.toReal p
[PROOFSTEP]
have :
  |‖(∑ i in s, lp.single p i (f i : E i)) - f‖ ^ p.toReal| = ‖(∑ i in s, lp.single p i (f i : E i)) - f‖ ^ p.toReal :=
  by simp only [Real.abs_rpow_of_nonneg (norm_nonneg _), abs_norm]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁵ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝⁴ : NormedRing 𝕜
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝¹ : DecidableEq α
inst✝ : Fact (1 ≤ p)
hp : p ≠ ⊤
f : { x // x ∈ lp E p }
hp₀ : 0 < p
hp' : 0 < ENNReal.toReal p
this :
  ∀ (ε : ℝ),
    ε > 0 → ∀ᶠ (x : Finset α) in Filter.atTop, dist (∑ b in x, ‖↑f b‖ ^ ENNReal.toReal p) (‖f‖ ^ ENNReal.toReal p) < ε
ε : ℝ
hε : ε > 0
s : Finset α
hs : |‖∑ i in s, lp.single p i (↑f i) - f‖ ^ ENNReal.toReal p| < ε ^ ENNReal.toReal p
H :
  ‖∑ i in s, lp.single p i (↑f i) - f‖ ^ ENNReal.toReal p = ‖f‖ ^ ENNReal.toReal p - ∑ i in s, ‖↑f i‖ ^ ENNReal.toReal p
⊢ |‖∑ i in s, lp.single p i (↑f i) - f‖ ^ ENNReal.toReal p| = ‖∑ i in s, lp.single p i (↑f i) - f‖ ^ ENNReal.toReal p
[PROOFSTEP]
simp only [Real.abs_rpow_of_nonneg (norm_nonneg _), abs_norm]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝⁵ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝⁴ : NormedRing 𝕜
inst✝³ : (i : α) → Module 𝕜 (E i)
inst✝² : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝¹ : DecidableEq α
inst✝ : Fact (1 ≤ p)
hp : p ≠ ⊤
f : { x // x ∈ lp E p }
hp₀ : 0 < p
hp' : 0 < ENNReal.toReal p
this✝ :
  ∀ (ε : ℝ),
    ε > 0 → ∀ᶠ (x : Finset α) in Filter.atTop, dist (∑ b in x, ‖↑f b‖ ^ ENNReal.toReal p) (‖f‖ ^ ENNReal.toReal p) < ε
ε : ℝ
hε : ε > 0
s : Finset α
hs : |‖∑ i in s, lp.single p i (↑f i) - f‖ ^ ENNReal.toReal p| < ε ^ ENNReal.toReal p
H :
  ‖∑ i in s, lp.single p i (↑f i) - f‖ ^ ENNReal.toReal p = ‖f‖ ^ ENNReal.toReal p - ∑ i in s, ‖↑f i‖ ^ ENNReal.toReal p
this :
  |‖∑ i in s, lp.single p i (↑f i) - f‖ ^ ENNReal.toReal p| = ‖∑ i in s, lp.single p i (↑f i) - f‖ ^ ENNReal.toReal p
⊢ ‖∑ x in s, lp.single p x (↑f x) - f‖ ^ ENNReal.toReal p < ε ^ ENNReal.toReal p
[PROOFSTEP]
exact this ▸ hs
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
_i : Fact (1 ≤ p)
⊢ UniformContinuous Subtype.val
[PROOFSTEP]
have hp : p ≠ 0 := (zero_lt_one.trans_le _i.elim).ne'
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
_i : Fact (1 ≤ p)
hp : p ≠ 0
⊢ UniformContinuous Subtype.val
[PROOFSTEP]
rw [uniformContinuous_pi]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
_i : Fact (1 ≤ p)
hp : p ≠ 0
⊢ ∀ (i : α), UniformContinuous fun x => ↑x i
[PROOFSTEP]
intro i
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
_i : Fact (1 ≤ p)
hp : p ≠ 0
i : α
⊢ UniformContinuous fun x => ↑x i
[PROOFSTEP]
rw [NormedAddCommGroup.uniformity_basis_dist.uniformContinuous_iff NormedAddCommGroup.uniformity_basis_dist]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
_i : Fact (1 ≤ p)
hp : p ≠ 0
i : α
⊢ ∀ (i_1 : ℝ),
    0 < i_1 →
      ∃ j,
        0 < j ∧
          ∀ (x y : { x // x ∈ lp E p }),
            (x, y) ∈ {p_1 | ‖p_1.fst - p_1.snd‖ < j} → (↑x i, ↑y i) ∈ {p | ‖p.fst - p.snd‖ < i_1}
[PROOFSTEP]
intro ε hε
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
_i : Fact (1 ≤ p)
hp : p ≠ 0
i : α
ε : ℝ
hε : 0 < ε
⊢ ∃ j,
    0 < j ∧
      ∀ (x y : { x // x ∈ lp E p }), (x, y) ∈ {p_1 | ‖p_1.fst - p_1.snd‖ < j} → (↑x i, ↑y i) ∈ {p | ‖p.fst - p.snd‖ < ε}
[PROOFSTEP]
refine' ⟨ε, hε, _⟩
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
_i : Fact (1 ≤ p)
hp : p ≠ 0
i : α
ε : ℝ
hε : 0 < ε
⊢ ∀ (x y : { x // x ∈ lp E p }), (x, y) ∈ {p_1 | ‖p_1.fst - p_1.snd‖ < ε} → (↑x i, ↑y i) ∈ {p | ‖p.fst - p.snd‖ < ε}
[PROOFSTEP]
rintro f g (hfg : ‖f - g‖ < ε)
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
_i : Fact (1 ≤ p)
hp : p ≠ 0
i : α
ε : ℝ
hε : 0 < ε
f g : { x // x ∈ lp E p }
hfg : ‖f - g‖ < ε
⊢ (↑f i, ↑g i) ∈ {p | ‖p.fst - p.snd‖ < ε}
[PROOFSTEP]
have : ‖f i - g i‖ ≤ ‖f - g‖ := norm_apply_le_norm hp (f - g) i
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝ : (i : α) → NormedAddCommGroup (E i)
_i : Fact (1 ≤ p)
hp : p ≠ 0
i : α
ε : ℝ
hε : 0 < ε
f g : { x // x ∈ lp E p }
hfg : ‖f - g‖ < ε
this : ‖↑f i - ↑g i‖ ≤ ‖f - g‖
⊢ (↑f i, ↑g i) ∈ {p | ‖p.fst - p.snd‖ < ε}
[PROOFSTEP]
exact this.trans_lt hfg
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
C : ℝ
F : ι → { x // x ∈ lp E ⊤ }
hCF : ∀ᶠ (k : ι) in l, ‖F k‖ ≤ C
f : (a : α) → E a
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 f)
a : α
⊢ ‖f a‖ ≤ C
[PROOFSTEP]
have : Tendsto (fun k => ‖F k a‖) l (𝓝 ‖f a‖) := (Tendsto.comp (continuous_apply a).continuousAt hf).norm
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
C : ℝ
F : ι → { x // x ∈ lp E ⊤ }
hCF : ∀ᶠ (k : ι) in l, ‖F k‖ ≤ C
f : (a : α) → E a
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 f)
a : α
this : Tendsto (fun k => ‖↑(F k) a‖) l (𝓝 ‖f a‖)
⊢ ‖f a‖ ≤ C
[PROOFSTEP]
refine' le_of_tendsto this (hCF.mono _)
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
C : ℝ
F : ι → { x // x ∈ lp E ⊤ }
hCF : ∀ᶠ (k : ι) in l, ‖F k‖ ≤ C
f : (a : α) → E a
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 f)
a : α
this : Tendsto (fun k => ‖↑(F k) a‖) l (𝓝 ‖f a‖)
⊢ ∀ (x : ι), ‖F x‖ ≤ C → ‖↑(F x) a‖ ≤ C
[PROOFSTEP]
intro k hCFk
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
C : ℝ
F : ι → { x // x ∈ lp E ⊤ }
hCF : ∀ᶠ (k : ι) in l, ‖F k‖ ≤ C
f : (a : α) → E a
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 f)
a : α
this : Tendsto (fun k => ‖↑(F k) a‖) l (𝓝 ‖f a‖)
k : ι
hCFk : ‖F k‖ ≤ C
⊢ ‖↑(F k) a‖ ≤ C
[PROOFSTEP]
exact (norm_apply_le_norm ENNReal.top_ne_zero (F k) a).trans hCFk
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
hp : p ≠ ⊤
C : ℝ
F : ι → { x // x ∈ lp E p }
hCF : ∀ᶠ (k : ι) in l, ‖F k‖ ≤ C
f : (a : α) → E a
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 f)
s : Finset α
⊢ ∑ i in s, ‖f i‖ ^ ENNReal.toReal p ≤ C ^ ENNReal.toReal p
[PROOFSTEP]
have hp' : p ≠ 0 := (zero_lt_one.trans_le _i.elim).ne'
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
hp : p ≠ ⊤
C : ℝ
F : ι → { x // x ∈ lp E p }
hCF : ∀ᶠ (k : ι) in l, ‖F k‖ ≤ C
f : (a : α) → E a
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 f)
s : Finset α
hp' : p ≠ 0
⊢ ∑ i in s, ‖f i‖ ^ ENNReal.toReal p ≤ C ^ ENNReal.toReal p
[PROOFSTEP]
have hp'' : 0 < p.toReal := ENNReal.toReal_pos hp' hp
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
hp : p ≠ ⊤
C : ℝ
F : ι → { x // x ∈ lp E p }
hCF : ∀ᶠ (k : ι) in l, ‖F k‖ ≤ C
f : (a : α) → E a
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 f)
s : Finset α
hp' : p ≠ 0
hp'' : 0 < ENNReal.toReal p
⊢ ∑ i in s, ‖f i‖ ^ ENNReal.toReal p ≤ C ^ ENNReal.toReal p
[PROOFSTEP]
let G : (∀ a, E a) → ℝ := fun f => ∑ a in s, ‖f a‖ ^ p.toReal
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
hp : p ≠ ⊤
C : ℝ
F : ι → { x // x ∈ lp E p }
hCF : ∀ᶠ (k : ι) in l, ‖F k‖ ≤ C
f : (a : α) → E a
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 f)
s : Finset α
hp' : p ≠ 0
hp'' : 0 < ENNReal.toReal p
G : ((a : α) → E a) → ℝ := fun f => ∑ a in s, ‖f a‖ ^ ENNReal.toReal p
⊢ ∑ i in s, ‖f i‖ ^ ENNReal.toReal p ≤ C ^ ENNReal.toReal p
[PROOFSTEP]
have hG : Continuous G := by
  refine' continuous_finset_sum s _
  intro a _
  have : Continuous fun f : ∀ a, E a => f a := continuous_apply a
  exact this.norm.rpow_const fun _ => Or.inr hp''.le
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
hp : p ≠ ⊤
C : ℝ
F : ι → { x // x ∈ lp E p }
hCF : ∀ᶠ (k : ι) in l, ‖F k‖ ≤ C
f : (a : α) → E a
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 f)
s : Finset α
hp' : p ≠ 0
hp'' : 0 < ENNReal.toReal p
G : ((a : α) → E a) → ℝ := fun f => ∑ a in s, ‖f a‖ ^ ENNReal.toReal p
⊢ Continuous G
[PROOFSTEP]
refine' continuous_finset_sum s _
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
hp : p ≠ ⊤
C : ℝ
F : ι → { x // x ∈ lp E p }
hCF : ∀ᶠ (k : ι) in l, ‖F k‖ ≤ C
f : (a : α) → E a
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 f)
s : Finset α
hp' : p ≠ 0
hp'' : 0 < ENNReal.toReal p
G : ((a : α) → E a) → ℝ := fun f => ∑ a in s, ‖f a‖ ^ ENNReal.toReal p
⊢ ∀ (i : α), i ∈ s → Continuous fun f => ‖f i‖ ^ ENNReal.toReal p
[PROOFSTEP]
intro a _
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
hp : p ≠ ⊤
C : ℝ
F : ι → { x // x ∈ lp E p }
hCF : ∀ᶠ (k : ι) in l, ‖F k‖ ≤ C
f : (a : α) → E a
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 f)
s : Finset α
hp' : p ≠ 0
hp'' : 0 < ENNReal.toReal p
G : ((a : α) → E a) → ℝ := fun f => ∑ a in s, ‖f a‖ ^ ENNReal.toReal p
a : α
a✝ : a ∈ s
⊢ Continuous fun f => ‖f a‖ ^ ENNReal.toReal p
[PROOFSTEP]
have : Continuous fun f : ∀ a, E a => f a := continuous_apply a
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
hp : p ≠ ⊤
C : ℝ
F : ι → { x // x ∈ lp E p }
hCF : ∀ᶠ (k : ι) in l, ‖F k‖ ≤ C
f : (a : α) → E a
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 f)
s : Finset α
hp' : p ≠ 0
hp'' : 0 < ENNReal.toReal p
G : ((a : α) → E a) → ℝ := fun f => ∑ a in s, ‖f a‖ ^ ENNReal.toReal p
a : α
a✝ : a ∈ s
this : Continuous fun f => f a
⊢ Continuous fun f => ‖f a‖ ^ ENNReal.toReal p
[PROOFSTEP]
exact this.norm.rpow_const fun _ => Or.inr hp''.le
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
hp : p ≠ ⊤
C : ℝ
F : ι → { x // x ∈ lp E p }
hCF : ∀ᶠ (k : ι) in l, ‖F k‖ ≤ C
f : (a : α) → E a
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 f)
s : Finset α
hp' : p ≠ 0
hp'' : 0 < ENNReal.toReal p
G : ((a : α) → E a) → ℝ := fun f => ∑ a in s, ‖f a‖ ^ ENNReal.toReal p
hG : Continuous G
⊢ ∑ i in s, ‖f i‖ ^ ENNReal.toReal p ≤ C ^ ENNReal.toReal p
[PROOFSTEP]
refine' le_of_tendsto (hG.continuousAt.tendsto.comp hf) _
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
hp : p ≠ ⊤
C : ℝ
F : ι → { x // x ∈ lp E p }
hCF : ∀ᶠ (k : ι) in l, ‖F k‖ ≤ C
f : (a : α) → E a
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 f)
s : Finset α
hp' : p ≠ 0
hp'' : 0 < ENNReal.toReal p
G : ((a : α) → E a) → ℝ := fun f => ∑ a in s, ‖f a‖ ^ ENNReal.toReal p
hG : Continuous G
⊢ ∀ᶠ (c : ι) in l, (G ∘ id fun i => ↑(F i)) c ≤ C ^ ENNReal.toReal p
[PROOFSTEP]
refine' hCF.mono _
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
hp : p ≠ ⊤
C : ℝ
F : ι → { x // x ∈ lp E p }
hCF : ∀ᶠ (k : ι) in l, ‖F k‖ ≤ C
f : (a : α) → E a
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 f)
s : Finset α
hp' : p ≠ 0
hp'' : 0 < ENNReal.toReal p
G : ((a : α) → E a) → ℝ := fun f => ∑ a in s, ‖f a‖ ^ ENNReal.toReal p
hG : Continuous G
⊢ ∀ (x : ι), ‖F x‖ ≤ C → (G ∘ id fun i => ↑(F i)) x ≤ C ^ ENNReal.toReal p
[PROOFSTEP]
intro k hCFk
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
hp : p ≠ ⊤
C : ℝ
F : ι → { x // x ∈ lp E p }
hCF : ∀ᶠ (k : ι) in l, ‖F k‖ ≤ C
f : (a : α) → E a
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 f)
s : Finset α
hp' : p ≠ 0
hp'' : 0 < ENNReal.toReal p
G : ((a : α) → E a) → ℝ := fun f => ∑ a in s, ‖f a‖ ^ ENNReal.toReal p
hG : Continuous G
k : ι
hCFk : ‖F k‖ ≤ C
⊢ (G ∘ id fun i => ↑(F i)) k ≤ C ^ ENNReal.toReal p
[PROOFSTEP]
refine' (lp.sum_rpow_le_norm_rpow hp'' (F k) s).trans _
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
hp : p ≠ ⊤
C : ℝ
F : ι → { x // x ∈ lp E p }
hCF : ∀ᶠ (k : ι) in l, ‖F k‖ ≤ C
f : (a : α) → E a
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 f)
s : Finset α
hp' : p ≠ 0
hp'' : 0 < ENNReal.toReal p
G : ((a : α) → E a) → ℝ := fun f => ∑ a in s, ‖f a‖ ^ ENNReal.toReal p
hG : Continuous G
k : ι
hCFk : ‖F k‖ ≤ C
⊢ ‖F k‖ ^ ENNReal.toReal p ≤ C ^ ENNReal.toReal p
[PROOFSTEP]
exact Real.rpow_le_rpow (norm_nonneg _) hCFk hp''.le
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
C : ℝ
F : ι → { x // x ∈ lp E p }
hCF : ∀ᶠ (k : ι) in l, ‖F k‖ ≤ C
f : { x // x ∈ lp E p }
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 ↑f)
⊢ ‖f‖ ≤ C
[PROOFSTEP]
obtain ⟨i, hi⟩ := hCF.exists
[GOAL]
case intro
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
C : ℝ
F : ι → { x // x ∈ lp E p }
hCF : ∀ᶠ (k : ι) in l, ‖F k‖ ≤ C
f : { x // x ∈ lp E p }
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 ↑f)
i : ι
hi : ‖F i‖ ≤ C
⊢ ‖f‖ ≤ C
[PROOFSTEP]
have hC : 0 ≤ C := (norm_nonneg _).trans hi
[GOAL]
case intro
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
C : ℝ
F : ι → { x // x ∈ lp E p }
hCF : ∀ᶠ (k : ι) in l, ‖F k‖ ≤ C
f : { x // x ∈ lp E p }
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 ↑f)
i : ι
hi : ‖F i‖ ≤ C
hC : 0 ≤ C
⊢ ‖f‖ ≤ C
[PROOFSTEP]
rcases eq_top_or_lt_top p with (rfl | hp)
[GOAL]
case intro.inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
C : ℝ
i : ι
hC : 0 ≤ C
_i : Fact (1 ≤ ⊤)
F : ι → { x // x ∈ lp E ⊤ }
hCF : ∀ᶠ (k : ι) in l, ‖F k‖ ≤ C
f : { x // x ∈ lp E ⊤ }
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 ↑f)
hi : ‖F i‖ ≤ C
⊢ ‖f‖ ≤ C
[PROOFSTEP]
apply norm_le_of_forall_le hC
[GOAL]
case intro.inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
C : ℝ
i : ι
hC : 0 ≤ C
_i : Fact (1 ≤ ⊤)
F : ι → { x // x ∈ lp E ⊤ }
hCF : ∀ᶠ (k : ι) in l, ‖F k‖ ≤ C
f : { x // x ∈ lp E ⊤ }
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 ↑f)
hi : ‖F i‖ ≤ C
⊢ ∀ (i : α), ‖↑f i‖ ≤ C
[PROOFSTEP]
exact norm_apply_le_of_tendsto hCF hf
[GOAL]
case intro.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
C : ℝ
F : ι → { x // x ∈ lp E p }
hCF : ∀ᶠ (k : ι) in l, ‖F k‖ ≤ C
f : { x // x ∈ lp E p }
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 ↑f)
i : ι
hi : ‖F i‖ ≤ C
hC : 0 ≤ C
hp : p < ⊤
⊢ ‖f‖ ≤ C
[PROOFSTEP]
have : 0 < p := zero_lt_one.trans_le _i.elim
[GOAL]
case intro.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
C : ℝ
F : ι → { x // x ∈ lp E p }
hCF : ∀ᶠ (k : ι) in l, ‖F k‖ ≤ C
f : { x // x ∈ lp E p }
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 ↑f)
i : ι
hi : ‖F i‖ ≤ C
hC : 0 ≤ C
hp : p < ⊤
this : 0 < p
⊢ ‖f‖ ≤ C
[PROOFSTEP]
have hp' : 0 < p.toReal := ENNReal.toReal_pos this.ne' hp.ne
[GOAL]
case intro.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
C : ℝ
F : ι → { x // x ∈ lp E p }
hCF : ∀ᶠ (k : ι) in l, ‖F k‖ ≤ C
f : { x // x ∈ lp E p }
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 ↑f)
i : ι
hi : ‖F i‖ ≤ C
hC : 0 ≤ C
hp : p < ⊤
this : 0 < p
hp' : 0 < ENNReal.toReal p
⊢ ‖f‖ ≤ C
[PROOFSTEP]
apply norm_le_of_forall_sum_le hp' hC
[GOAL]
case intro.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
C : ℝ
F : ι → { x // x ∈ lp E p }
hCF : ∀ᶠ (k : ι) in l, ‖F k‖ ≤ C
f : { x // x ∈ lp E p }
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 ↑f)
i : ι
hi : ‖F i‖ ≤ C
hC : 0 ≤ C
hp : p < ⊤
this : 0 < p
hp' : 0 < ENNReal.toReal p
⊢ ∀ (s : Finset α), ∑ i in s, ‖↑f i‖ ^ ENNReal.toReal p ≤ C ^ ENNReal.toReal p
[PROOFSTEP]
exact sum_rpow_le_of_tendsto hp.ne hCF hf
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
F : ι → { x // x ∈ lp E p }
hF : Metric.Bounded (Set.range F)
f : (a : α) → E a
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 f)
⊢ Memℓp f p
[PROOFSTEP]
obtain ⟨C, _, hCF'⟩ := hF.exists_pos_norm_le
[GOAL]
case intro.intro
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
F : ι → { x // x ∈ lp E p }
hF : Metric.Bounded (Set.range F)
f : (a : α) → E a
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 f)
C : ℝ
left✝ : C > 0
hCF' : ∀ (x : { x // x ∈ lp E p }), x ∈ Set.range F → ‖x‖ ≤ C
⊢ Memℓp f p
[PROOFSTEP]
have hCF : ∀ k, ‖F k‖ ≤ C := fun k => hCF' _ ⟨k, rfl⟩
[GOAL]
case intro.intro
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
F : ι → { x // x ∈ lp E p }
hF : Metric.Bounded (Set.range F)
f : (a : α) → E a
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 f)
C : ℝ
left✝ : C > 0
hCF' : ∀ (x : { x // x ∈ lp E p }), x ∈ Set.range F → ‖x‖ ≤ C
hCF : ∀ (k : ι), ‖F k‖ ≤ C
⊢ Memℓp f p
[PROOFSTEP]
rcases eq_top_or_lt_top p with (rfl | hp)
[GOAL]
case intro.intro.inl
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
f : (a : α) → E a
C : ℝ
left✝ : C > 0
_i : Fact (1 ≤ ⊤)
F : ι → { x // x ∈ lp E ⊤ }
hF : Metric.Bounded (Set.range F)
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 f)
hCF' : ∀ (x : { x // x ∈ lp E ⊤ }), x ∈ Set.range F → ‖x‖ ≤ C
hCF : ∀ (k : ι), ‖F k‖ ≤ C
⊢ Memℓp f ⊤
[PROOFSTEP]
apply memℓp_infty
[GOAL]
case intro.intro.inl.hf
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
f : (a : α) → E a
C : ℝ
left✝ : C > 0
_i : Fact (1 ≤ ⊤)
F : ι → { x // x ∈ lp E ⊤ }
hF : Metric.Bounded (Set.range F)
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 f)
hCF' : ∀ (x : { x // x ∈ lp E ⊤ }), x ∈ Set.range F → ‖x‖ ≤ C
hCF : ∀ (k : ι), ‖F k‖ ≤ C
⊢ BddAbove (Set.range fun i => ‖f i‖)
[PROOFSTEP]
use C
[GOAL]
case h
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
f : (a : α) → E a
C : ℝ
left✝ : C > 0
_i : Fact (1 ≤ ⊤)
F : ι → { x // x ∈ lp E ⊤ }
hF : Metric.Bounded (Set.range F)
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 f)
hCF' : ∀ (x : { x // x ∈ lp E ⊤ }), x ∈ Set.range F → ‖x‖ ≤ C
hCF : ∀ (k : ι), ‖F k‖ ≤ C
⊢ C ∈ upperBounds (Set.range fun i => ‖f i‖)
[PROOFSTEP]
rintro _ ⟨a, rfl⟩
[GOAL]
case h.intro
α : Type u_1
E : α → Type u_2
q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
f : (a : α) → E a
C : ℝ
left✝ : C > 0
_i : Fact (1 ≤ ⊤)
F : ι → { x // x ∈ lp E ⊤ }
hF : Metric.Bounded (Set.range F)
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 f)
hCF' : ∀ (x : { x // x ∈ lp E ⊤ }), x ∈ Set.range F → ‖x‖ ≤ C
hCF : ∀ (k : ι), ‖F k‖ ≤ C
a : α
⊢ (fun i => ‖f i‖) a ≤ C
[PROOFSTEP]
refine' norm_apply_le_of_tendsto (eventually_of_forall hCF) hf a
[GOAL]
case intro.intro.inr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
F : ι → { x // x ∈ lp E p }
hF : Metric.Bounded (Set.range F)
f : (a : α) → E a
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 f)
C : ℝ
left✝ : C > 0
hCF' : ∀ (x : { x // x ∈ lp E p }), x ∈ Set.range F → ‖x‖ ≤ C
hCF : ∀ (k : ι), ‖F k‖ ≤ C
hp : p < ⊤
⊢ Memℓp f p
[PROOFSTEP]
apply memℓp_gen'
[GOAL]
case intro.intro.inr.hf
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
F : ι → { x // x ∈ lp E p }
hF : Metric.Bounded (Set.range F)
f : (a : α) → E a
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 f)
C : ℝ
left✝ : C > 0
hCF' : ∀ (x : { x // x ∈ lp E p }), x ∈ Set.range F → ‖x‖ ≤ C
hCF : ∀ (k : ι), ‖F k‖ ≤ C
hp : p < ⊤
⊢ ∀ (s : Finset α), ∑ i in s, ‖f i‖ ^ ENNReal.toReal p ≤ ?intro.intro.inr.C
case intro.intro.inr.C
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
F : ι → { x // x ∈ lp E p }
hF : Metric.Bounded (Set.range F)
f : (a : α) → E a
hf : Tendsto (id fun i => ↑(F i)) l (𝓝 f)
C : ℝ
left✝ : C > 0
hCF' : ∀ (x : { x // x ∈ lp E p }), x ∈ Set.range F → ‖x‖ ≤ C
hCF : ∀ (k : ι), ‖F k‖ ≤ C
hp : p < ⊤
⊢ ℝ
[PROOFSTEP]
exact sum_rpow_le_of_tendsto hp.ne (eventually_of_forall hCF) hf
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
F : ℕ → { x // x ∈ lp E p }
hF : CauchySeq F
f : { x // x ∈ lp E p }
hf : Tendsto (id fun i => ↑(F i)) atTop (𝓝 ↑f)
⊢ Tendsto F atTop (𝓝 f)
[PROOFSTEP]
rw [Metric.nhds_basis_closedBall.tendsto_right_iff]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
F : ℕ → { x // x ∈ lp E p }
hF : CauchySeq F
f : { x // x ∈ lp E p }
hf : Tendsto (id fun i => ↑(F i)) atTop (𝓝 ↑f)
⊢ ∀ (i : ℝ), 0 < i → ∀ᶠ (x : ℕ) in atTop, F x ∈ Metric.closedBall f i
[PROOFSTEP]
intro ε hε
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
F : ℕ → { x // x ∈ lp E p }
hF : CauchySeq F
f : { x // x ∈ lp E p }
hf : Tendsto (id fun i => ↑(F i)) atTop (𝓝 ↑f)
ε : ℝ
hε : 0 < ε
⊢ ∀ᶠ (x : ℕ) in atTop, F x ∈ Metric.closedBall f ε
[PROOFSTEP]
have hε' : {p : lp E p × lp E p | ‖p.1 - p.2‖ < ε} ∈ uniformity (lp E p) :=
  NormedAddCommGroup.uniformity_basis_dist.mem_of_mem hε
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
F : ℕ → { x // x ∈ lp E p }
hF : CauchySeq F
f : { x // x ∈ lp E p }
hf : Tendsto (id fun i => ↑(F i)) atTop (𝓝 ↑f)
ε : ℝ
hε : 0 < ε
hε' : {p_1 | ‖p_1.fst - p_1.snd‖ < ε} ∈ uniformity { x // x ∈ lp E p }
⊢ ∀ᶠ (x : ℕ) in atTop, F x ∈ Metric.closedBall f ε
[PROOFSTEP]
refine' (hF.eventually_eventually hε').mono _
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
F : ℕ → { x // x ∈ lp E p }
hF : CauchySeq F
f : { x // x ∈ lp E p }
hf : Tendsto (id fun i => ↑(F i)) atTop (𝓝 ↑f)
ε : ℝ
hε : 0 < ε
hε' : {p_1 | ‖p_1.fst - p_1.snd‖ < ε} ∈ uniformity { x // x ∈ lp E p }
⊢ ∀ (x : ℕ), (∀ᶠ (l : ℕ) in atTop, (F x, F l) ∈ {p_1 | ‖p_1.fst - p_1.snd‖ < ε}) → F x ∈ Metric.closedBall f ε
[PROOFSTEP]
rintro n (hn : ∀ᶠ l in atTop, ‖(fun f => F n - f) (F l)‖ < ε)
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
F : ℕ → { x // x ∈ lp E p }
hF : CauchySeq F
f : { x // x ∈ lp E p }
hf : Tendsto (id fun i => ↑(F i)) atTop (𝓝 ↑f)
ε : ℝ
hε : 0 < ε
hε' : {p_1 | ‖p_1.fst - p_1.snd‖ < ε} ∈ uniformity { x // x ∈ lp E p }
n : ℕ
hn : ∀ᶠ (l : ℕ) in atTop, ‖(fun f => F n - f) (F l)‖ < ε
⊢ F n ∈ Metric.closedBall f ε
[PROOFSTEP]
refine' norm_le_of_tendsto (hn.mono fun k hk => hk.le) _
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
F : ℕ → { x // x ∈ lp E p }
hF : CauchySeq F
f : { x // x ∈ lp E p }
hf : Tendsto (id fun i => ↑(F i)) atTop (𝓝 ↑f)
ε : ℝ
hε : 0 < ε
hε' : {p_1 | ‖p_1.fst - p_1.snd‖ < ε} ∈ uniformity { x // x ∈ lp E p }
n : ℕ
hn : ∀ᶠ (l : ℕ) in atTop, ‖(fun f => F n - f) (F l)‖ < ε
⊢ Tendsto (id fun i => ↑((fun f => F n - f) (F i))) atTop (𝓝 ↑(F n - f))
[PROOFSTEP]
rw [tendsto_pi_nhds]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
F : ℕ → { x // x ∈ lp E p }
hF : CauchySeq F
f : { x // x ∈ lp E p }
hf : Tendsto (id fun i => ↑(F i)) atTop (𝓝 ↑f)
ε : ℝ
hε : 0 < ε
hε' : {p_1 | ‖p_1.fst - p_1.snd‖ < ε} ∈ uniformity { x // x ∈ lp E p }
n : ℕ
hn : ∀ᶠ (l : ℕ) in atTop, ‖(fun f => F n - f) (F l)‖ < ε
⊢ ∀ (x : α), Tendsto (fun i => id (fun i => ↑((fun f => F n - f) (F i))) i x) atTop (𝓝 (↑(F n - f) x))
[PROOFSTEP]
intro a
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝ : NeBot l
_i : Fact (1 ≤ p)
F : ℕ → { x // x ∈ lp E p }
hF : CauchySeq F
f : { x // x ∈ lp E p }
hf : Tendsto (id fun i => ↑(F i)) atTop (𝓝 ↑f)
ε : ℝ
hε : 0 < ε
hε' : {p_1 | ‖p_1.fst - p_1.snd‖ < ε} ∈ uniformity { x // x ∈ lp E p }
n : ℕ
hn : ∀ᶠ (l : ℕ) in atTop, ‖(fun f => F n - f) (F l)‖ < ε
a : α
⊢ Tendsto (fun i => id (fun i => ↑((fun f => F n - f) (F i))) i a) atTop (𝓝 (↑(F n - f) a))
[PROOFSTEP]
exact (hf.apply a).const_sub (F n a)
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝² : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝¹ : NeBot l
_i : Fact (1 ≤ p)
inst✝ : ∀ (a : α), CompleteSpace (E a)
⊢ ∀ (u : ℕ → { x // x ∈ lp E p }), CauchySeq u → ∃ a, Tendsto u atTop (𝓝 a)
[PROOFSTEP]
intro F hF
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝² : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝¹ : NeBot l
_i : Fact (1 ≤ p)
inst✝ : ∀ (a : α), CompleteSpace (E a)
F : ℕ → { x // x ∈ lp E p }
hF : CauchySeq F
⊢ ∃ a, Tendsto F atTop (𝓝 a)
[PROOFSTEP]
obtain ⟨f, hf⟩ :=
  cauchySeq_tendsto_of_complete
    ((uniformContinuous_coe (p := p)).comp_cauchySeq hF)
      -- Since the Cauchy sequence is bounded, its pointwise limit `f` is in `lp E p`.
[GOAL]
case intro
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝² : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝¹ : NeBot l
_i : Fact (1 ≤ p)
inst✝ : ∀ (a : α), CompleteSpace (E a)
F : ℕ → { x // x ∈ lp E p }
hF : CauchySeq F
f : (i : α) → E i
hf : Tendsto (Subtype.val ∘ F) atTop (𝓝 f)
⊢ ∃ a, Tendsto F atTop (𝓝 a)
[PROOFSTEP]
have hf' : Memℓp f p := memℓp_of_tendsto hF.bounded_range hf
[GOAL]
case intro
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝² : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
l : Filter ι
inst✝¹ : NeBot l
_i : Fact (1 ≤ p)
inst✝ : ∀ (a : α), CompleteSpace (E a)
F : ℕ → { x // x ∈ lp E p }
hF : CauchySeq F
f : (i : α) → E i
hf : Tendsto (Subtype.val ∘ F) atTop (𝓝 f)
hf' : Memℓp f p
⊢ ∃ a, Tendsto F atTop (𝓝 a)
[PROOFSTEP]
exact ⟨⟨f, hf'⟩, tendsto_lp_of_tendsto_pi hF hf⟩
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
inst✝ : PseudoMetricSpace α
g : α → ι → ℝ
K : ℝ≥0
hg : ∀ (i : ι), LipschitzWith K fun x => g x i
a₀ : α
hga₀b : Memℓp (g a₀) ⊤
a : α
⊢ Memℓp (g a) ⊤
[PROOFSTEP]
rcases hga₀b with ⟨M, hM⟩
[GOAL]
case intro
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
inst✝ : PseudoMetricSpace α
g : α → ι → ℝ
K : ℝ≥0
hg : ∀ (i : ι), LipschitzWith K fun x => g x i
a₀ a : α
M : ℝ
hM : M ∈ upperBounds (Set.range fun i => ‖g a₀ i‖)
⊢ Memℓp (g a) ⊤
[PROOFSTEP]
use↑K * dist a a₀ + M
[GOAL]
case h
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
inst✝ : PseudoMetricSpace α
g : α → ι → ℝ
K : ℝ≥0
hg : ∀ (i : ι), LipschitzWith K fun x => g x i
a₀ a : α
M : ℝ
hM : M ∈ upperBounds (Set.range fun i => ‖g a₀ i‖)
⊢ ↑K * dist a a₀ + M ∈ upperBounds (Set.range fun i => ‖g a i‖)
[PROOFSTEP]
rintro - ⟨i, rfl⟩
[GOAL]
case h.intro
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
inst✝ : PseudoMetricSpace α
g : α → ι → ℝ
K : ℝ≥0
hg : ∀ (i : ι), LipschitzWith K fun x => g x i
a₀ a : α
M : ℝ
hM : M ∈ upperBounds (Set.range fun i => ‖g a₀ i‖)
i : ι
⊢ (fun i => ‖g a i‖) i ≤ ↑K * dist a a₀ + M
[PROOFSTEP]
calc
  |g a i| = |g a i - g a₀ i + g a₀ i| := by simp
  _ ≤ |g a i - g a₀ i| + |g a₀ i| := (abs_add _ _)
  _ ≤ ↑K * dist a a₀ + M := by
    gcongr
    · exact lipschitzWith_iff_dist_le_mul.1 (hg i) a a₀
    · exact hM ⟨i, rfl⟩
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
inst✝ : PseudoMetricSpace α
g : α → ι → ℝ
K : ℝ≥0
hg : ∀ (i : ι), LipschitzWith K fun x => g x i
a₀ a : α
M : ℝ
hM : M ∈ upperBounds (Set.range fun i => ‖g a₀ i‖)
i : ι
⊢ |g a i| = |g a i - g a₀ i + g a₀ i|
[PROOFSTEP]
simp
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
inst✝ : PseudoMetricSpace α
g : α → ι → ℝ
K : ℝ≥0
hg : ∀ (i : ι), LipschitzWith K fun x => g x i
a₀ a : α
M : ℝ
hM : M ∈ upperBounds (Set.range fun i => ‖g a₀ i‖)
i : ι
⊢ |g a i - g a₀ i| + |g a₀ i| ≤ ↑K * dist a a₀ + M
[PROOFSTEP]
gcongr
[GOAL]
case h₁
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
inst✝ : PseudoMetricSpace α
g : α → ι → ℝ
K : ℝ≥0
hg : ∀ (i : ι), LipschitzWith K fun x => g x i
a₀ a : α
M : ℝ
hM : M ∈ upperBounds (Set.range fun i => ‖g a₀ i‖)
i : ι
⊢ |g a i - g a₀ i| ≤ ↑K * dist a a₀
[PROOFSTEP]
exact lipschitzWith_iff_dist_le_mul.1 (hg i) a a₀
[GOAL]
case h₂
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
inst✝ : PseudoMetricSpace α
g : α → ι → ℝ
K : ℝ≥0
hg : ∀ (i : ι), LipschitzWith K fun x => g x i
a₀ a : α
M : ℝ
hM : M ∈ upperBounds (Set.range fun i => ‖g a₀ i‖)
i : ι
⊢ |g a₀ i| ≤ M
[PROOFSTEP]
exact hM ⟨i, rfl⟩
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
inst✝ : PseudoMetricSpace α
f : α → { x // x ∈ lp (fun i => ℝ) ⊤ }
s : Set α
K : ℝ≥0
⊢ LipschitzOnWith K f s ↔ ∀ (i : ι), LipschitzOnWith K (fun a => ↑(f a) i) s
[PROOFSTEP]
simp_rw [lipschitzOnWith_iff_dist_le_mul]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
inst✝ : PseudoMetricSpace α
f : α → { x // x ∈ lp (fun i => ℝ) ⊤ }
s : Set α
K : ℝ≥0
⊢ (∀ (x : α), x ∈ s → ∀ (y : α), y ∈ s → dist (f x) (f y) ≤ ↑K * dist x y) ↔
    ∀ (i : ι) (x : α), x ∈ s → ∀ (y : α), y ∈ s → dist (↑(f x) i) (↑(f y) i) ≤ ↑K * dist x y
[PROOFSTEP]
constructor
[GOAL]
case mp
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
inst✝ : PseudoMetricSpace α
f : α → { x // x ∈ lp (fun i => ℝ) ⊤ }
s : Set α
K : ℝ≥0
⊢ (∀ (x : α), x ∈ s → ∀ (y : α), y ∈ s → dist (f x) (f y) ≤ ↑K * dist x y) →
    ∀ (i : ι) (x : α), x ∈ s → ∀ (y : α), y ∈ s → dist (↑(f x) i) (↑(f y) i) ≤ ↑K * dist x y
[PROOFSTEP]
intro hfl i x hx y hy
[GOAL]
case mp
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
inst✝ : PseudoMetricSpace α
f : α → { x // x ∈ lp (fun i => ℝ) ⊤ }
s : Set α
K : ℝ≥0
hfl : ∀ (x : α), x ∈ s → ∀ (y : α), y ∈ s → dist (f x) (f y) ≤ ↑K * dist x y
i : ι
x : α
hx : x ∈ s
y : α
hy : y ∈ s
⊢ dist (↑(f x) i) (↑(f y) i) ≤ ↑K * dist x y
[PROOFSTEP]
calc
  dist (f x i) (f y i) ≤ dist (f x) (f y) := lp.norm_apply_le_norm top_ne_zero (f x - f y) i
  _ ≤ K * dist x y := hfl x hx y hy
[GOAL]
case mpr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
inst✝ : PseudoMetricSpace α
f : α → { x // x ∈ lp (fun i => ℝ) ⊤ }
s : Set α
K : ℝ≥0
⊢ (∀ (i : ι) (x : α), x ∈ s → ∀ (y : α), y ∈ s → dist (↑(f x) i) (↑(f y) i) ≤ ↑K * dist x y) →
    ∀ (x : α), x ∈ s → ∀ (y : α), y ∈ s → dist (f x) (f y) ≤ ↑K * dist x y
[PROOFSTEP]
intro hgl x hx y hy
[GOAL]
case mpr
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
inst✝ : PseudoMetricSpace α
f : α → { x // x ∈ lp (fun i => ℝ) ⊤ }
s : Set α
K : ℝ≥0
hgl : ∀ (i : ι) (x : α), x ∈ s → ∀ (y : α), y ∈ s → dist (↑(f x) i) (↑(f y) i) ≤ ↑K * dist x y
x : α
hx : x ∈ s
y : α
hy : y ∈ s
⊢ dist (f x) (f y) ≤ ↑K * dist x y
[PROOFSTEP]
apply lp.norm_le_of_forall_le
[GOAL]
case mpr.hC
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
inst✝ : PseudoMetricSpace α
f : α → { x // x ∈ lp (fun i => ℝ) ⊤ }
s : Set α
K : ℝ≥0
hgl : ∀ (i : ι) (x : α), x ∈ s → ∀ (y : α), y ∈ s → dist (↑(f x) i) (↑(f y) i) ≤ ↑K * dist x y
x : α
hx : x ∈ s
y : α
hy : y ∈ s
⊢ 0 ≤ ↑K * dist x y
case mpr.hCf
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
inst✝ : PseudoMetricSpace α
f : α → { x // x ∈ lp (fun i => ℝ) ⊤ }
s : Set α
K : ℝ≥0
hgl : ∀ (i : ι) (x : α), x ∈ s → ∀ (y : α), y ∈ s → dist (↑(f x) i) (↑(f y) i) ≤ ↑K * dist x y
x : α
hx : x ∈ s
y : α
hy : y ∈ s
⊢ ∀ (i : ι), ‖↑(f x - f y) i‖ ≤ ↑K * dist x y
[PROOFSTEP]
positivity
[GOAL]
case mpr.hCf
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
inst✝ : PseudoMetricSpace α
f : α → { x // x ∈ lp (fun i => ℝ) ⊤ }
s : Set α
K : ℝ≥0
hgl : ∀ (i : ι) (x : α), x ∈ s → ∀ (y : α), y ∈ s → dist (↑(f x) i) (↑(f y) i) ≤ ↑K * dist x y
x : α
hx : x ∈ s
y : α
hy : y ∈ s
⊢ ∀ (i : ι), ‖↑(f x - f y) i‖ ≤ ↑K * dist x y
[PROOFSTEP]
intro i
[GOAL]
case mpr.hCf
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
inst✝ : PseudoMetricSpace α
f : α → { x // x ∈ lp (fun i => ℝ) ⊤ }
s : Set α
K : ℝ≥0
hgl : ∀ (i : ι) (x : α), x ∈ s → ∀ (y : α), y ∈ s → dist (↑(f x) i) (↑(f y) i) ≤ ↑K * dist x y
x : α
hx : x ∈ s
y : α
hy : y ∈ s
i : ι
⊢ ‖↑(f x - f y) i‖ ≤ ↑K * dist x y
[PROOFSTEP]
apply hgl i x hx y hy
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
inst✝ : PseudoMetricSpace α
f : α → { x // x ∈ lp (fun i => ℝ) ⊤ }
K : ℝ≥0
⊢ LipschitzWith K f ↔ ∀ (i : ι), LipschitzWith K fun a => ↑(f a) i
[PROOFSTEP]
simp_rw [← lipschitz_on_univ]
[GOAL]
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
inst✝ : PseudoMetricSpace α
f : α → { x // x ∈ lp (fun i => ℝ) ⊤ }
K : ℝ≥0
⊢ LipschitzOnWith K f Set.univ ↔ ∀ (i : ι), LipschitzOnWith K (fun a => ↑(f a) i) Set.univ
[PROOFSTEP]
apply LipschitzOnWith.coordinate
