Theorem: MeasureTheory.Memℒp.exists_simpleFunc_eLpNorm_sub_lt
File: Mathlib/MeasureTheory/Function/SimpleFuncDenseLp.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
E✝ : Type u_4
F : Type u_5
𝕜 : Type u_6
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_7
inst✝ : NormedAddCommGroup E
f : β → E
μ : Measure β
hf : Memℒp f p μ
hp_ne_top : p ≠ ⊤
ε : ℝ≥0∞
hε : ε ≠ 0
⊢ ∃ g, eLpNorm (f - ↑g) p μ < ε ∧ Memℒp (↑g) p μ
state_after: α : Type u_1
β : Type u_2
ι : Type u_3
E✝ : Type u_4
F : Type u_5
𝕜 : Type u_6
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_7
inst✝ : NormedAddCommGroup E
f : β → E
μ : Measure β
hf : Memℒp f p μ
hp_ne_top : p ≠ ⊤
ε : ℝ≥0∞
hε : ε ≠ 0
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
⊢ ∃ g, eLpNorm (f - ↑g) p μ < ε ∧ Memℒp (↑g) p μ
tactic: borelize E
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
E✝ : Type u_4
F : Type u_5
𝕜 : Type u_6
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_7
inst✝ : NormedAddCommGroup E
f : β → E
μ : Measure β
hf : Memℒp f p μ
hp_ne_top : p ≠ ⊤
ε : ℝ≥0∞
hε : ε ≠ 0
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
⊢ ∃ g, eLpNorm (f - ↑g) p μ < ε ∧ Memℒp (↑g) p μ
state_after: α : Type u_1
β : Type u_2
ι : Type u_3
E✝ : Type u_4
F : Type u_5
𝕜 : Type u_6
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_7
inst✝ : NormedAddCommGroup E
f : β → E
μ : Measure β
hf : Memℒp f p μ
hp_ne_top : p ≠ ⊤
ε : ℝ≥0∞
hε : ε ≠ 0
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
f' : β → E := AEStronglyMeasurable.mk f ⋯
⊢ ∃ g, eLpNorm (f - ↑g) p μ < ε ∧ Memℒp (↑g) p μ
tactic: let f' := hf.1.mk f
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
E✝ : Type u_4
F : Type u_5
𝕜 : Type u_6
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_7
inst✝ : NormedAddCommGroup E
f : β → E
μ : Measure β
hf : Memℒp f p μ
hp_ne_top : p ≠ ⊤
ε : ℝ≥0∞
hε : ε ≠ 0
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
f' : β → E := AEStronglyMeasurable.mk f ⋯
⊢ ∃ g, eLpNorm (f - ↑g) p μ < ε ∧ Memℒp (↑g) p μ
state_after: case intro.intro
α : Type u_1
β : Type u_2
ι : Type u_3
E✝ : Type u_4
F : Type u_5
𝕜 : Type u_6
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_7
inst✝ : NormedAddCommGroup E
f : β → E
μ : Measure β
hf : Memℒp f p μ
hp_ne_top : p ≠ ⊤
ε : ℝ≥0∞
hε : ε ≠ 0
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
f' : β → E := AEStronglyMeasurable.mk f ⋯
g : β →ₛ E
hg : eLpNorm (f' - ↑g) p μ < ε
g_mem : Memℒp (↑g) p μ
⊢ ∃ g, eLpNorm (f - ↑g) p μ < ε ∧ Memℒp (↑g) p μ

α : Type u_1
β : Type u_2
ι : Type u_3
E✝ : Type u_4
F : Type u_5
𝕜 : Type u_6
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_7
inst✝ : NormedAddCommGroup E
f : β → E
μ : Measure β
hf : Memℒp f p μ
hp_ne_top : p ≠ ⊤
ε : ℝ≥0∞
hε : ε ≠ 0
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
f' : β → E := AEStronglyMeasurable.mk f ⋯
⊢ ∃ g, eLpNorm (f' - ↑g) p μ < ε ∧ Memℒp (↑g) p μ
tactic: rsuffices ⟨g, hg, g_mem⟩ : ∃ g : β →ₛ E, eLpNorm (f' - ⇑g) p μ < ε ∧ Memℒp g p μ
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
E✝ : Type u_4
F : Type u_5
𝕜 : Type u_6
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_7
inst✝ : NormedAddCommGroup E
f : β → E
μ : Measure β
hf : Memℒp f p μ
hp_ne_top : p ≠ ⊤
ε : ℝ≥0∞
hε : ε ≠ 0
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
f' : β → E := AEStronglyMeasurable.mk f ⋯
⊢ ∃ g, eLpNorm (f' - ↑g) p μ < ε ∧ Memℒp (↑g) p μ
state_after: α : Type u_1
β : Type u_2
ι : Type u_3
E✝ : Type u_4
F : Type u_5
𝕜 : Type u_6
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_7
inst✝ : NormedAddCommGroup E
f : β → E
μ : Measure β
hf : Memℒp f p μ
hp_ne_top : p ≠ ⊤
ε : ℝ≥0∞
hε : ε ≠ 0
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
f' : β → E := AEStronglyMeasurable.mk f ⋯
hf' : Memℒp f' p μ
⊢ ∃ g, eLpNorm (f' - ↑g) p μ < ε ∧ Memℒp (↑g) p μ
tactic: have hf' : Memℒp f' p μ := hf.ae_eq hf.1.ae_eq_mk
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
E✝ : Type u_4
F : Type u_5
𝕜 : Type u_6
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_7
inst✝ : NormedAddCommGroup E
f : β → E
μ : Measure β
hf : Memℒp f p μ
hp_ne_top : p ≠ ⊤
ε : ℝ≥0∞
hε : ε ≠ 0
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
f' : β → E := AEStronglyMeasurable.mk f ⋯
hf' : Memℒp f' p μ
⊢ ∃ g, eLpNorm (f' - ↑g) p μ < ε ∧ Memℒp (↑g) p μ
state_after: α : Type u_1
β : Type u_2
ι : Type u_3
E✝ : Type u_4
F : Type u_5
𝕜 : Type u_6
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_7
inst✝ : NormedAddCommGroup E
f : β → E
μ : Measure β
hf : Memℒp f p μ
hp_ne_top : p ≠ ⊤
ε : ℝ≥0∞
hε : ε ≠ 0
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
f' : β → E := AEStronglyMeasurable.mk f ⋯
hf' : Memℒp f' p μ
f'meas : Measurable f'
⊢ ∃ g, eLpNorm (f' - ↑g) p μ < ε ∧ Memℒp (↑g) p μ
tactic: have f'meas : Measurable f' := hf.1.measurable_mk
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
E✝ : Type u_4
F : Type u_5
𝕜 : Type u_6
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_7
inst✝ : NormedAddCommGroup E
f : β → E
μ : Measure β
hf : Memℒp f p μ
hp_ne_top : p ≠ ⊤
ε : ℝ≥0∞
hε : ε ≠ 0
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
f' : β → E := AEStronglyMeasurable.mk f ⋯
hf' : Memℒp f' p μ
f'meas : Measurable f'
⊢ ∃ g, eLpNorm (f' - ↑g) p μ < ε ∧ Memℒp (↑g) p μ
state_after: α : Type u_1
β : Type u_2
ι : Type u_3
E✝ : Type u_4
F : Type u_5
𝕜 : Type u_6
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_7
inst✝ : NormedAddCommGroup E
f : β → E
μ : Measure β
hf : Memℒp f p μ
hp_ne_top : p ≠ ⊤
ε : ℝ≥0∞
hε : ε ≠ 0
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
f' : β → E := AEStronglyMeasurable.mk f ⋯
hf' : Memℒp f' p μ
f'meas : Measurable f'
this : SeparableSpace ↑(Set.range f' ∪ {0})
⊢ ∃ g, eLpNorm (f' - ↑g) p μ < ε ∧ Memℒp (↑g) p μ
tactic: have : SeparableSpace (range f' ∪ {0} : Set E) :=
    StronglyMeasurable.separableSpace_range_union_singleton hf.1.stronglyMeasurable_mk
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
E✝ : Type u_4
F : Type u_5
𝕜 : Type u_6
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_7
inst✝ : NormedAddCommGroup E
f : β → E
μ : Measure β
hf : Memℒp f p μ
hp_ne_top : p ≠ ⊤
ε : ℝ≥0∞
hε : ε ≠ 0
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
f' : β → E := AEStronglyMeasurable.mk f ⋯
hf' : Memℒp f' p μ
f'meas : Measurable f'
this : SeparableSpace ↑(Set.range f' ∪ {0})
⊢ ∃ g, eLpNorm (f' - ↑g) p μ < ε ∧ Memℒp (↑g) p μ
state_after: case intro
α : Type u_1
β : Type u_2
ι : Type u_3
E✝ : Type u_4
F : Type u_5
𝕜 : Type u_6
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_7
inst✝ : NormedAddCommGroup E
f : β → E
μ : Measure β
hf : Memℒp f p μ
hp_ne_top : p ≠ ⊤
ε : ℝ≥0∞
hε : ε ≠ 0
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
f' : β → E := AEStronglyMeasurable.mk f ⋯
hf' : Memℒp f' p μ
f'meas : Measurable f'
this : SeparableSpace ↑(Set.range f' ∪ {0})
n : ℕ
hn : eLpNorm (↑(approxOn f' f'meas (Set.range f' ∪ {0}) 0 ⋯ n) - f') p μ < ε
⊢ ∃ g, eLpNorm (f' - ↑g) p μ < ε ∧ Memℒp (↑g) p μ
tactic: rcases ((tendsto_approxOn_range_Lp_eLpNorm hp_ne_top f'meas hf'.2).eventually <|
    gt_mem_nhds hε.bot_lt).exists with ⟨n, hn⟩
state_before: case intro
α : Type u_1
β : Type u_2
ι : Type u_3
E✝ : Type u_4
F : Type u_5
𝕜 : Type u_6
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_7
inst✝ : NormedAddCommGroup E
f : β → E
μ : Measure β
hf : Memℒp f p μ
hp_ne_top : p ≠ ⊤
ε : ℝ≥0∞
hε : ε ≠ 0
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
f' : β → E := AEStronglyMeasurable.mk f ⋯
hf' : Memℒp f' p μ
f'meas : Measurable f'
this : SeparableSpace ↑(Set.range f' ∪ {0})
n : ℕ
hn : eLpNorm (↑(approxOn f' f'meas (Set.range f' ∪ {0}) 0 ⋯ n) - f') p μ < ε
⊢ ∃ g, eLpNorm (f' - ↑g) p μ < ε ∧ Memℒp (↑g) p μ
state_after: case intro
α : Type u_1
β : Type u_2
ι : Type u_3
E✝ : Type u_4
F : Type u_5
𝕜 : Type u_6
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_7
inst✝ : NormedAddCommGroup E
f : β → E
μ : Measure β
hf : Memℒp f p μ
hp_ne_top : p ≠ ⊤
ε : ℝ≥0∞
hε : ε ≠ 0
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
f' : β → E := AEStronglyMeasurable.mk f ⋯
hf' : Memℒp f' p μ
f'meas : Measurable f'
this : SeparableSpace ↑(Set.range f' ∪ {0})
n : ℕ
hn : eLpNorm (f' - ↑(approxOn f' f'meas (Set.range f' ∪ {0}) 0 ⋯ n)) p μ < ε
⊢ ∃ g, eLpNorm (f' - ↑g) p μ < ε ∧ Memℒp (↑g) p μ
tactic: rw [← eLpNorm_neg, neg_sub] at hn
state_before: case intro
α : Type u_1
β : Type u_2
ι : Type u_3
E✝ : Type u_4
F : Type u_5
𝕜 : Type u_6
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_7
inst✝ : NormedAddCommGroup E
f : β → E
μ : Measure β
hf : Memℒp f p μ
hp_ne_top : p ≠ ⊤
ε : ℝ≥0∞
hε : ε ≠ 0
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
f' : β → E := AEStronglyMeasurable.mk f ⋯
hf' : Memℒp f' p μ
f'meas : Measurable f'
this : SeparableSpace ↑(Set.range f' ∪ {0})
n : ℕ
hn : eLpNorm (f' - ↑(approxOn f' f'meas (Set.range f' ∪ {0}) 0 ⋯ n)) p μ < ε
⊢ ∃ g, eLpNorm (f' - ↑g) p μ < ε ∧ Memℒp (↑g) p μ
state_after: no goals
tactic: exact ⟨_, hn, memℒp_approxOn_range f'meas hf' _⟩