Lean4
theorem exists_lt_lintegral_simpleFunc_of_lt_lintegral {m : MeasurableSpace α} {μ : Measure α} [SigmaFinite μ]
{f : α →ₛ ℝ≥0} {L : ℝ≥0∞} (hL : L < ∫⁻ x, f x ∂μ) :
∃ g : α →ₛ ℝ≥0, (∀ x, g x ≤ f x) ∧ ∫⁻ x, g x ∂μ < ∞ ∧ L < ∫⁻ x, g x ∂μ := by
induction f using MeasureTheory.SimpleFunc.induction generalizing L with
| @const c s
hs =>
simp only [hs, const_zero, coe_piecewise, coe_const, SimpleFunc.coe_zero, univ_inter, piecewise_eq_indicator,
lintegral_indicator, lintegral_const, Measure.restrict_apply', ENNReal.coe_indicator, Function.const_apply] at hL
have c_ne_zero : c ≠ 0 := by
intro hc
simp only [hc, ENNReal.coe_zero, zero_mul, not_lt_zero] at hL
have : L / c < μ s := by
rwa [ENNReal.div_lt_iff, mul_comm]
· simp only [c_ne_zero, Ne, ENNReal.coe_eq_zero, not_false_iff, true_or]
· simp only [Ne, coe_ne_top, not_false_iff, true_or]
obtain ⟨t, ht, ts, mlt, t_top⟩ : ∃ t : Set α, MeasurableSet t ∧ t ⊆ s ∧ L / ↑c < μ t ∧ μ t < ∞ :=
Measure.exists_subset_measure_lt_top hs this
refine ⟨piecewise t ht (const α c) (const α 0), fun x => ?_, ?_, ?_⟩
· refine indicator_le_indicator_of_subset ts (fun x => ?_) x
exact zero_le _
·
simp only [ht, const_zero, coe_piecewise, coe_const, SimpleFunc.coe_zero, univ_inter, piecewise_eq_indicator,
ENNReal.coe_indicator, Function.const_apply, lintegral_indicator, lintegral_const, Measure.restrict_apply',
ENNReal.mul_lt_top ENNReal.coe_lt_top t_top]
· simp only [ht, const_zero, coe_piecewise, coe_const, SimpleFunc.coe_zero, piecewise_eq_indicator,
ENNReal.coe_indicator, Function.const_apply, lintegral_indicator, lintegral_const, Measure.restrict_apply',
univ_inter]
rwa [mul_comm, ← ENNReal.div_lt_iff]
· simp only [c_ne_zero, Ne, ENNReal.coe_eq_zero, not_false_iff, true_or]
· simp only [Ne, coe_ne_top, not_false_iff, true_or]
| @add f₁ f₂ _ h₁
h₂ =>
replace hL : L < ∫⁻ x, f₁ x ∂μ + ∫⁻ x, f₂ x ∂μ := by rwa [← lintegral_add_left f₁.measurable.coe_nnreal_ennreal]
by_cases hf₁ : ∫⁻ x, f₁ x ∂μ = 0
· simp only [hf₁, zero_add] at hL
rcases h₂ hL with ⟨g, g_le, g_top, gL⟩
refine ⟨g, fun x => (g_le x).trans ?_, g_top, gL⟩
simp only [SimpleFunc.coe_add, Pi.add_apply, le_add_iff_nonneg_left, zero_le']
by_cases hf₂ : ∫⁻ x, f₂ x ∂μ = 0
· simp only [hf₂, add_zero] at hL
rcases h₁ hL with ⟨g, g_le, g_top, gL⟩
refine ⟨g, fun x => (g_le x).trans ?_, g_top, gL⟩
simp only [SimpleFunc.coe_add, Pi.add_apply, le_add_iff_nonneg_right, zero_le']
obtain ⟨L₁, hL₁, L₂, hL₂, hL⟩ : ∃ L₁ < ∫⁻ x, f₁ x ∂μ, ∃ L₂ < ∫⁻ x, f₂ x ∂μ, L < L₁ + L₂ :=
ENNReal.exists_lt_add_of_lt_add hL hf₁ hf₂
rcases h₁ hL₁ with ⟨g₁, g₁_le, g₁_top, hg₁⟩
rcases h₂ hL₂ with ⟨g₂, g₂_le, g₂_top, hg₂⟩
refine ⟨g₁ + g₂, fun x => add_le_add (g₁_le x) (g₂_le x), ?_, ?_⟩
· apply lt_of_le_of_lt _ (add_lt_top.2 ⟨g₁_top, g₂_top⟩)
rw [← lintegral_add_left g₁.measurable.coe_nnreal_ennreal]
exact le_rfl
· apply hL.trans ((ENNReal.add_lt_add hg₁ hg₂).trans_le _)
rw [← lintegral_add_left g₁.measurable.coe_nnreal_ennreal]
simp only [coe_add, Pi.add_apply, ENNReal.coe_add, le_rfl]