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

tactic: borelize E
state_before: α : Type ?u.887478
β : Type u_2
ι : Type ?u.887484
E✝ : Type ?u.887487
F : Type ?u.887490
𝕜 : Type ?u.887493
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_1
inst✝ : NormedAddCommGroup E
f : β → E
μ : Measure β
hf : Memℒp f p
hp_ne_top : p ≠ ⊤
ε : ℝ≥0∞
hε : ε ≠ 0
⊢ ∃ g, snorm (f - ↑g) p μ < ε ∧ Memℒp (↑g) p

tactic: let f' := hf.1.mk f
state_before: α : Type ?u.887478
β : Type u_2
ι : Type ?u.887484
E✝ : Type ?u.887487
F : Type ?u.887490
𝕜 : Type ?u.887493
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_1
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, snorm (f - ↑g) p μ < ε ∧ Memℒp (↑g) p

tactic: suffices H : ∃ g : β →ₛ E, snorm (f' - ⇑g) p μ < ε ∧ Memℒp g p μ
state_before: α : Type ?u.887478
β : Type u_2
ι : Type ?u.887484
E✝ : Type ?u.887487
F : Type ?u.887490
𝕜 : Type ?u.887493
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_1
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 (_ : AEStronglyMeasurable f μ)
⊢ ∃ g, snorm (f - ↑g) p μ < ε ∧ Memℒp (↑g) p

tactic: have hf' : Memℒp f' p μ := hf.ae_eq hf.1.ae_eq_mk
state_before: case H
α : Type ?u.887478
β : Type u_2
ι : Type ?u.887484
E✝ : Type ?u.887487
F : Type ?u.887490
𝕜 : Type ?u.887493
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_1
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 (_ : AEStronglyMeasurable f μ)
⊢ ∃ g, snorm (f' - ↑g) p μ < ε ∧ Memℒp (↑g) p

tactic: have f'meas : Measurable f' := hf.1.measurable_mk
state_before: case H
α : Type ?u.887478
β : Type u_2
ι : Type ?u.887484
E✝ : Type ?u.887487
F : Type ?u.887490
𝕜 : Type ?u.887493
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_1
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 (_ : AEStronglyMeasurable f μ)
hf' : Memℒp f' p
⊢ ∃ g, snorm (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: case H
α : Type ?u.887478
β : Type u_2
ι : Type ?u.887484
E✝ : Type ?u.887487
F : Type ?u.887490
𝕜 : Type ?u.887493
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_1
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 (_ : AEStronglyMeasurable f μ)
hf' : Memℒp f' p
f'meas : Measurable f'
⊢ ∃ g, snorm (f' - ↑g) p μ < ε ∧ Memℒp (↑g) p

tactic: rcases((tendsto_order.1 (tendsto_approxOn_range_Lp_snorm hp_ne_top f'meas hf'.2)).2 ε
      hε.bot_lt).exists with
  ⟨n, hn⟩
state_before: case H
α : Type ?u.887478
β : Type u_2
ι : Type ?u.887484
E✝ : Type ?u.887487
F : Type ?u.887490
𝕜 : Type ?u.887493
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_1
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 (_ : AEStronglyMeasurable f μ)
hf' : Memℒp f' p
f'meas : Measurable f'
this : SeparableSpace ↑(Set.range f' ∪ {0})
⊢ ∃ g, snorm (f' - ↑g) p μ < ε ∧ Memℒp (↑g) p

tactic: rw [← snorm_neg, neg_sub] at hn
state_before: case H.intro
α : Type ?u.887478
β : Type u_2
ι : Type ?u.887484
E✝ : Type ?u.887487
F : Type ?u.887490
𝕜 : Type ?u.887493
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_1
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 (_ : AEStronglyMeasurable f μ)
hf' : Memℒp f' p
f'meas : Measurable f'
this : SeparableSpace ↑(Set.range f' ∪ {0})
n : ℕ
hn : snorm (↑(approxOn f' f'meas (Set.range f' ∪ {0}) 0 (_ : 0 ∈ Set.range f' ∪ {0}) n) - f') p μ < ε
⊢ ∃ g, snorm (f' - ↑g) p μ < ε ∧ Memℒp (↑g) p

tactic: exact ⟨_, hn, memℒp_approxOn_range f'meas hf' _⟩
state_before: case H.intro
α : Type ?u.887478
β : Type u_2
ι : Type ?u.887484
E✝ : Type ?u.887487
F : Type ?u.887490
𝕜 : Type ?u.887493
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_1
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 (_ : AEStronglyMeasurable f μ)
hf' : Memℒp f' p
f'meas : Measurable f'
this : SeparableSpace ↑(Set.range f' ∪ {0})
n : ℕ
hn : snorm (f' - ↑(approxOn f' f'meas (Set.range f' ∪ {0}) 0 (_ : 0 ∈ Set.range f' ∪ {0}) n)) p μ < ε
⊢ ∃ g, snorm (f' - ↑g) p μ < ε ∧ Memℒp (↑g) p

tactic: rcases H with ⟨g, hg, g_mem⟩
state_before: α : Type ?u.887478
β : Type u_2
ι : Type ?u.887484
E✝ : Type ?u.887487
F : Type ?u.887490
𝕜 : Type ?u.887493
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_1
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 (_ : AEStronglyMeasurable f μ)
H : ∃ g, snorm (f' - ↑g) p μ < ε ∧ Memℒp (↑g) p
⊢ ∃ g, snorm (f - ↑g) p μ < ε ∧ Memℒp (↑g) p

tactic: refine' ⟨g, _, g_mem⟩
state_before: case intro.intro
α : Type ?u.887478
β : Type u_2
ι : Type ?u.887484
E✝ : Type ?u.887487
F : Type ?u.887490
𝕜 : Type ?u.887493
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_1
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 (_ : AEStronglyMeasurable f μ)
g : β →ₛ E
hg : snorm (f' - ↑g) p μ < ε
g_mem : Memℒp (↑g) p
⊢ ∃ g, snorm (f - ↑g) p μ < ε ∧ Memℒp (↑g) p

tactic: suffices snorm (f - ⇑g) p μ = snorm (f' - ⇑g) p μ by rwa [this]
state_before: case intro.intro
α : Type ?u.887478
β : Type u_2
ι : Type ?u.887484
E✝ : Type ?u.887487
F : Type ?u.887490
𝕜 : Type ?u.887493
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_1
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 (_ : AEStronglyMeasurable f μ)
g : β →ₛ E
hg : snorm (f' - ↑g) p μ < ε
g_mem : Memℒp (↑g) p
⊢ snorm (f - ↑g) p μ < ε

tactic: apply snorm_congr_ae
state_before: case intro.intro
α : Type ?u.887478
β : Type u_2
ι : Type ?u.887484
E✝ : Type ?u.887487
F : Type ?u.887490
𝕜 : Type ?u.887493
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_1
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 (_ : AEStronglyMeasurable f μ)
g : β →ₛ E
hg : snorm (f' - ↑g) p μ < ε
g_mem : Memℒp (↑g) p
⊢ snorm (f - ↑g) p μ = snorm (f' - ↑g) p μ

tactic: filter_upwards [hf.1.ae_eq_mk] with x hx
state_before: case intro.intro.hfg
α : Type ?u.887478
β : Type u_2
ι : Type ?u.887484
E✝ : Type ?u.887487
F : Type ?u.887490
𝕜 : Type ?u.887493
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_1
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 (_ : AEStronglyMeasurable f μ)
g : β →ₛ E
hg : snorm (f' - ↑g) p μ < ε
g_mem : Memℒp (↑g) p
⊢ f - ↑g =ᵐ[μ] f' - ↑g

tactic: simpa only [Pi.sub_apply, sub_left_inj] using hx
state_before: case h
α : Type ?u.887478
β : Type u_2
ι : Type ?u.887484
E✝ : Type ?u.887487
F : Type ?u.887490
𝕜 : Type ?u.887493
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_1
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 (_ : AEStronglyMeasurable f μ)
g : β →ₛ E
hg : snorm (f' - ↑g) p μ < ε
g_mem : Memℒp (↑g) p
x : β
hx : f x = AEStronglyMeasurable.mk f (_ : AEStronglyMeasurable f μ) x
⊢ (f - ↑g) x = (AEStronglyMeasurable.mk f (_ : AEStronglyMeasurable f μ) - ↑g) x

tactic: rwa [this]
state_before: α : Type ?u.887478
β : Type u_2
ι : Type ?u.887484
E✝ : Type ?u.887487
F : Type ?u.887490
𝕜 : Type ?u.887493
inst✝⁴ : MeasurableSpace β
inst✝³ : MeasurableSpace E✝
inst✝² : NormedAddCommGroup E✝
inst✝¹ : NormedAddCommGroup F
q : ℝ
p : ℝ≥0∞
E : Type u_1
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 (_ : AEStronglyMeasurable f μ)
g : β →ₛ E
hg : snorm (f' - ↑g) p μ < ε
g_mem : Memℒp (↑g) p
this : snorm (f - ↑g) p μ = snorm (f' - ↑g) p μ
⊢ snorm (f - ↑g) p μ < ε