-- Mathlib/MeasureTheory/Function/ConditionalExpectation/Real.lean
theorem condExp_stronglyMeasurable_mul_of_bound (hm : m ≤ m0) [IsFiniteMeasure μ] {f g : α → ℝ}
    (hf : StronglyMeasurable[m] f) (hg : Integrable g μ) (c : ℝ) (hf_bound : ∀ᵐ x ∂μ, ‖f x‖ ≤ c) :
    μ[f * g|m] =ᵐ[μ] f * μ[g|m]

Proof state:
case neg
α : Type u_1
m m0 : MeasurableSpace α
μ : Measure α
hm : m ≤ m0
inst✝ : IsFiniteMeasure μ
f g : α → ℝ
hf : StronglyMeasurable f
hg : Integrable g μ
c : ℝ
hf_bound : ∀ᵐ (x : α) ∂μ, ‖f x‖ ≤ c
fs : ℕ → SimpleFunc α ℝ := hf.approxBounded c
hfs_tendsto : ∀ᵐ (x : α) ∂μ, Tendsto (fun x_1 => (fs x_1) x) atTop (𝓝 (f x))
hμ : ¬μ = 0
this : (ae μ).NeBot
hc : 0 ≤ c
hfs_bound : ∀ (n : ℕ) (x : α), ‖(fs n) x‖ ≤ c
⊢ μ[f * g|m] =ᶠ[ae μ] f * μ[g|m]

Tactic:
have : μ[f * μ[g|m]|m] = f * μ[g|m] := by
  refine condExp_of_stronglyMeasurable hm (hf.mul stronglyMeasurable_condExp) ?_
  exact integrable_condExp.bdd_mul' (hf.mono hm).aestronglyMeasurable hf_bound

Result:
case neg
α : Type u_1
m m0 : MeasurableSpace α
μ : Measure α
hm : m ≤ m0
inst✝ : IsFiniteMeasure μ
f g : α → ℝ
hf : StronglyMeasurable f
hg : Integrable g μ
c : ℝ
hf_bound : ∀ᵐ (x : α) ∂μ, ‖f x‖ ≤ c
fs : ℕ → SimpleFunc α ℝ := hf.approxBounded c
hfs_tendsto : ∀ᵐ (x : α) ∂μ, Tendsto (fun x_1 => (fs x_1) x) atTop (𝓝 (f x))
hμ : ¬μ = 0
this✝ : (ae μ).NeBot
hc : 0 ≤ c
hfs_bound : ∀ (n : ℕ) (x : α), ‖(fs n) x‖ ≤ c
this : μ[f * μ[g|m]|m] = f * μ[g|m]
⊢ μ[f * g|m] =ᶠ[ae μ] f * μ[g|m]

Proof state:
case neg
α : Type u_1
m m0 : MeasurableSpace α
μ : Measure α
hm : m ≤ m0
inst✝ : IsFiniteMeasure μ
f g : α → ℝ
hf : StronglyMeasurable f
hg : Integrable g μ
c : ℝ
hf_bound : ∀ᵐ (x : α) ∂μ, ‖f x‖ ≤ c
fs : ℕ → SimpleFunc α ℝ := hf.approxBounded c
hfs_tendsto : ∀ᵐ (x : α) ∂μ, Tendsto (fun x_1 => (fs x_1) x) atTop (𝓝 (f x))
hμ : ¬μ = 0
this : (ae μ).NeBot
⊢ μ[f * g|m] =ᶠ[ae μ] f * μ[g|m]

Tactic:
have hc : 0 ≤ c := by
  rcases hf_bound.exists with ⟨_x, hx⟩
  exact (norm_nonneg _).trans hx

Result:
case neg
α : Type u_1
m m0 : MeasurableSpace α
μ : Measure α
hm : m ≤ m0
inst✝ : IsFiniteMeasure μ
f g : α → ℝ
hf : StronglyMeasurable f
hg : Integrable g μ
c : ℝ
hf_bound : ∀ᵐ (x : α) ∂μ, ‖f x‖ ≤ c
fs : ℕ → SimpleFunc α ℝ := hf.approxBounded c
hfs_tendsto : ∀ᵐ (x : α) ∂μ, Tendsto (fun x_1 => (fs x_1) x) atTop (𝓝 (f x))
hμ : ¬μ = 0
this : (ae μ).NeBot
hc : 0 ≤ c
⊢ μ[f * g|m] =ᶠ[ae μ] f * μ[g|m]

Proof state:
α : Type u_1
m m0 : MeasurableSpace α
μ : Measure α
hm : m ≤ m0
inst✝ : IsFiniteMeasure μ
f g : α → ℝ
hf : StronglyMeasurable f
hg : Integrable g μ
c : ℝ
hf_bound : ∀ᵐ (x : α) ∂μ, ‖f x‖ ≤ c
fs : ℕ → SimpleFunc α ℝ := hf.approxBounded c
hfs_tendsto : ∀ᵐ (x : α) ∂μ, Tendsto (fun x_1 => (fs x_1) x) atTop (𝓝 (f x))
hμ : ¬μ = 0
this : (ae μ).NeBot
hc : 0 ≤ c
hfs_bound : ∀ (n : ℕ) (x : α), ‖(fs n) x‖ ≤ c
⊢ Integrable (f * μ[g|m]) μ

Tactic:
exact integrable_condExp.bdd_mul' (hf.mono hm).aestronglyMeasurable hf_bound

Result:
no goals

Proof state:
case neg
α : Type u_1
m m0 : MeasurableSpace α
μ : Measure α
hm : m ≤ m0
inst✝ : IsFiniteMeasure μ
f g : α → ℝ
hf : StronglyMeasurable f
hg : Integrable g μ
c : ℝ
hf_bound : ∀ᵐ (x : α) ∂μ, ‖f x‖ ≤ c
fs : ℕ → SimpleFunc α ℝ := hf.approxBounded c
hfs_tendsto : ∀ᵐ (x : α) ∂μ, Tendsto (fun x_1 => (fs x_1) x) atTop (𝓝 (f x))
hμ : ¬μ = 0
this : (ae μ).NeBot
hc : 0 ≤ c
⊢ μ[f * g|m] =ᶠ[ae μ] f * μ[g|m]

Tactic:
have hfs_bound : ∀ n x, ‖fs n x‖ ≤ c := hf.norm_approxBounded_le hc

Result:
case neg
α : Type u_1
m m0 : MeasurableSpace α
μ : Measure α
hm : m ≤ m0
inst✝ : IsFiniteMeasure μ
f g : α → ℝ
hf : StronglyMeasurable f
hg : Integrable g μ
c : ℝ
hf_bound : ∀ᵐ (x : α) ∂μ, ‖f x‖ ≤ c
fs : ℕ → SimpleFunc α ℝ := hf.approxBounded c
hfs_tendsto : ∀ᵐ (x : α) ∂μ, Tendsto (fun x_1 => (fs x_1) x) atTop (𝓝 (f x))
hμ : ¬μ = 0
this : (ae μ).NeBot
hc : 0 ≤ c
hfs_bound : ∀ (n : ℕ) (x : α), ‖(fs n) x‖ ≤ c
⊢ μ[f * g|m] =ᶠ[ae μ] f * μ[g|m]

Proof state:
case h
α : Type u_1
m m0 : MeasurableSpace α
μ : Measure α
hm : m ≤ m0
inst✝ : IsFiniteMeasure μ
f g : α → ℝ
hf : StronglyMeasurable f
hg : Integrable g μ
c : ℝ
hf_bound : ∀ᵐ (x : α) ∂μ, ‖f x‖ ≤ c
fs : ℕ → SimpleFunc α ℝ := hf.approxBounded c
hfs_tendsto : ∀ᵐ (x : α) ∂μ, Tendsto (fun x_1 => (fs x_1) x) atTop (𝓝 (f x))
hμ : ¬μ = 0
this✝ : (ae μ).NeBot
hc : 0 ≤ c
hfs_bound : ∀ (n : ℕ) (x : α), ‖(fs n) x‖ ≤ c
this : μ[f * μ[g|m]|m] = f * μ[g|m]
x : α
hx : Tendsto (fun x_1 => (fs x_1) x) atTop (𝓝 (f x))
⊢ Tendsto (fun n => (fs n) x * (μ[g|m]) x) atTop (𝓝 ((f * μ[g|m]) x))

Tactic:
exact hx.mul tendsto_const_nhds

Result:
no goals

Proof state:
α : Type u_1
m m0 : MeasurableSpace α
μ : Measure α
hm : m ≤ m0
inst✝ : IsFiniteMeasure μ
f g : α → ℝ
hf : StronglyMeasurable f
hg : Integrable g μ
c : ℝ
hf_bound : ∀ᵐ (x : α) ∂μ, ‖f x‖ ≤ c
⊢ μ[f * g|m] =ᶠ[ae μ] f * μ[g|m]

Tactic:
let fs := hf.approxBounded c

Result:
α : Type u_1
m m0 : MeasurableSpace α
μ : Measure α
hm : m ≤ m0
inst✝ : IsFiniteMeasure μ
f g : α → ℝ
hf : StronglyMeasurable f
hg : Integrable g μ
c : ℝ
hf_bound : ∀ᵐ (x : α) ∂μ, ‖f x‖ ≤ c
fs : ℕ → SimpleFunc α ℝ := hf.approxBounded c
⊢ μ[f * g|m] =ᶠ[ae μ] f * μ[g|m]

Proof state:
case neg.refine_8
α : Type u_1
m m0 : MeasurableSpace α
μ : Measure α
hm : m ≤ m0
inst✝ : IsFiniteMeasure μ
f g : α → ℝ
hf : StronglyMeasurable f
hg : Integrable g μ
c : ℝ
hf_bound : ∀ᵐ (x : α) ∂μ, ‖f x‖ ≤ c
fs : ℕ → SimpleFunc α ℝ := hf.approxBounded c
hfs_tendsto : ∀ᵐ (x : α) ∂μ, Tendsto (fun x_1 => (fs x_1) x) atTop (𝓝 (f x))
hμ : ¬μ = 0
this✝ : (ae μ).NeBot
hc : 0 ≤ c
hfs_bound : ∀ (n : ℕ) (x : α), ‖(fs n) x‖ ≤ c
this : μ[f * μ[g|m]|m] = f * μ[g|m]
⊢ ∀ (n : ℕ), ∀ᵐ (x : α) ∂μ, ‖(fun n x => (fs n) x * (μ[g|m]) x) n x‖ ≤ (fun x => c * ‖(μ[g|m]) x‖) x

Tactic:
refine fun n => Eventually.of_forall fun x => ?_

Result:
case neg.refine_8
α : Type u_1
m m0 : MeasurableSpace α
μ : Measure α
hm : m ≤ m0
inst✝ : IsFiniteMeasure μ
f g : α → ℝ
hf : StronglyMeasurable f
hg : Integrable g μ
c : ℝ
hf_bound : ∀ᵐ (x : α) ∂μ, ‖f x‖ ≤ c
fs : ℕ → SimpleFunc α ℝ := hf.approxBounded c
hfs_tendsto : ∀ᵐ (x : α) ∂μ, Tendsto (fun x_1 => (fs x_1) x) atTop (𝓝 (f x))
hμ : ¬μ = 0
this✝ : (ae μ).NeBot
hc : 0 ≤ c
hfs_bound : ∀ (n : ℕ) (x : α), ‖(fs n) x‖ ≤ c
this : μ[f * μ[g|m]|m] = f * μ[g|m]
n : ℕ
x : α
⊢ ‖(fun n x => (fs n) x * (μ[g|m]) x) n x‖ ≤ (fun x => c * ‖(μ[g|m]) x‖) x

Proof state:
case neg.refine_1
α : Type u_1
m m0 : MeasurableSpace α
μ : Measure α
hm : m ≤ m0
inst✝ : IsFiniteMeasure μ
f g : α → ℝ
hf : StronglyMeasurable f
hg : Integrable g μ
c : ℝ
hf_bound : ∀ᵐ (x : α) ∂μ, ‖f x‖ ≤ c
fs : ℕ → SimpleFunc α ℝ := hf.approxBounded c
hfs_tendsto : ∀ᵐ (x : α) ∂μ, Tendsto (fun x_1 => (fs x_1) x) atTop (𝓝 (f x))
hμ : ¬μ = 0
this✝ : (ae μ).NeBot
hc : 0 ≤ c
hfs_bound : ∀ (n : ℕ) (x : α), ‖(fs n) x‖ ≤ c
this : μ[f * μ[g|m]|m] = f * μ[g|m]
⊢ ∀ (n : ℕ), Integrable ((fun n x => (fs n) x * g x) n) μ

Tactic:
exact fun n => hg.bdd_mul' ((SimpleFunc.stronglyMeasurable (fs n)).mono hm).aestronglyMeasurable
  (Eventually.of_forall (hfs_bound n))

Result:
no goals

Proof state:
α : Type u_1
m m0 : MeasurableSpace α
μ : Measure α
hm : m ≤ m0
inst✝ : IsFiniteMeasure μ
f g : α → ℝ
hf : StronglyMeasurable f
hg : Integrable g μ
c : ℝ
hf_bound : ∀ᵐ (x : α) ∂μ, ‖f x‖ ≤ c
fs : ℕ → SimpleFunc α ℝ := hf.approxBounded c
hfs_tendsto : ∀ᵐ (x : α) ∂μ, Tendsto (fun x_1 => (fs x_1) x) atTop (𝓝 (f x))
hμ : ¬μ = 0
this : (ae μ).NeBot
hc : 0 ≤ c
hfs_bound : ∀ (n : ℕ) (x : α), ‖(fs n) x‖ ≤ c
⊢ μ[f * μ[g|m]|m] = f * μ[g|m]

Tactic:
refine condExp_of_stronglyMeasurable hm (hf.mul stronglyMeasurable_condExp) ?_

Result:
α : Type u_1
m m0 : MeasurableSpace α
μ : Measure α
hm : m ≤ m0
inst✝ : IsFiniteMeasure μ
f g : α → ℝ
hf : StronglyMeasurable f
hg : Integrable g μ
c : ℝ
hf_bound : ∀ᵐ (x : α) ∂μ, ‖f x‖ ≤ c
fs : ℕ → SimpleFunc α ℝ := hf.approxBounded c
hfs_tendsto : ∀ᵐ (x : α) ∂μ, Tendsto (fun x_1 => (fs x_1) x) atTop (𝓝 (f x))
hμ : ¬μ = 0
this : (ae μ).NeBot
hc : 0 ≤ c
hfs_bound : ∀ (n : ℕ) (x : α), ‖(fs n) x‖ ≤ c
⊢ Integrable (f * μ[g|m]) μ