-- Mathlib/Probability/Integration.lean
theorem IndepFun.integral_mul_of_integrable (hXY : IndepFun X Y μ) (hX : Integrable X μ)
    (hY : Integrable Y μ) : integral μ (X * Y) = integral μ X * integral μ Y

Proof state:
Ω : Type u_1
mΩ : MeasurableSpace Ω
μ : Measure Ω
X Y : Ω → ℝ
hXY : IndepFun X Y μ
hX : Integrable X μ
hY : Integrable Y μ
pos : ℝ → ℝ := fun x => x ⊔ 0
neg : ℝ → ℝ := fun x => -x ⊔ 0
posm : Measurable pos
negm : Measurable neg
Xp : Ω → ℝ := pos ∘ X
Xm : Ω → ℝ := neg ∘ X
Yp : Ω → ℝ := pos ∘ Y
Ym : Ω → ℝ := neg ∘ Y
hXpm : X = Xp - Xm
hYpm : Y = Yp - Ym
hp1 : 0 ≤ Xm
hp2 : 0 ≤ Xp
hp3 : 0 ≤ Ym
hp4 : 0 ≤ Yp
hm1 : AEMeasurable Xm μ
hm2 : AEMeasurable Xp μ
hm3 : AEMeasurable Ym μ
hm4 : AEMeasurable Yp μ
hv1 : Integrable Xm μ
hv2 : Integrable Xp μ
hv3 : Integrable Ym μ
hv4 : Integrable Yp μ
hi1 : IndepFun Xm Ym μ
hi2 : IndepFun Xp Ym μ
hi3 : IndepFun Xm Yp μ
hi4 : IndepFun Xp Yp μ
hl1 : Integrable (Xm * Ym) μ
hl2 : Integrable (Xp * Ym) μ
⊢ integral μ (X * Y) = integral μ X * integral μ Y

Tactic:
have hl3 : Integrable (Xm * Yp) μ := hi3.integrable_mul hv1 hv4

Result:
Ω : Type u_1
mΩ : MeasurableSpace Ω
μ : Measure Ω
X Y : Ω → ℝ
hXY : IndepFun X Y μ
hX : Integrable X μ
hY : Integrable Y μ
pos : ℝ → ℝ := fun x => x ⊔ 0
neg : ℝ → ℝ := fun x => -x ⊔ 0
posm : Measurable pos
negm : Measurable neg
Xp : Ω → ℝ := pos ∘ X
Xm : Ω → ℝ := neg ∘ X
Yp : Ω → ℝ := pos ∘ Y
Ym : Ω → ℝ := neg ∘ Y
hXpm : X = Xp - Xm
hYpm : Y = Yp - Ym
hp1 : 0 ≤ Xm
hp2 : 0 ≤ Xp
hp3 : 0 ≤ Ym
hp4 : 0 ≤ Yp
hm1 : AEMeasurable Xm μ
hm2 : AEMeasurable Xp μ
hm3 : AEMeasurable Ym μ
hm4 : AEMeasurable Yp μ
hv1 : Integrable Xm μ
hv2 : Integrable Xp μ
hv3 : Integrable Ym μ
hv4 : Integrable Yp μ
hi1 : IndepFun Xm Ym μ
hi2 : IndepFun Xp Ym μ
hi3 : IndepFun Xm Yp μ
hi4 : IndepFun Xp Yp μ
hl1 : Integrable (Xm * Ym) μ
hl2 : Integrable (Xp * Ym) μ
hl3 : Integrable (Xm * Yp) μ
⊢ integral μ (X * Y) = integral μ X * integral μ Y

Proof state:
Ω : Type u_1
mΩ : MeasurableSpace Ω
μ : Measure Ω
X Y : Ω → ℝ
hXY : IndepFun X Y μ
hX : Integrable X μ
hY : Integrable Y μ
pos : ℝ → ℝ := fun x => x ⊔ 0
neg : ℝ → ℝ := fun x => -x ⊔ 0
posm : Measurable pos
negm : Measurable neg
Xp : Ω → ℝ := pos ∘ X
Xm : Ω → ℝ := neg ∘ X
Yp : Ω → ℝ := pos ∘ Y
Ym : Ω → ℝ := neg ∘ Y
hXpm : X = Xp - Xm
hYpm : Y = Yp - Ym
⊢ integral μ (X * Y) = integral μ X * integral μ Y

Tactic:
have hp1 : 0 ≤ Xm := fun ω => le_max_right _ _

Result:
Ω : Type u_1
mΩ : MeasurableSpace Ω
μ : Measure Ω
X Y : Ω → ℝ
hXY : IndepFun X Y μ
hX : Integrable X μ
hY : Integrable Y μ
pos : ℝ → ℝ := fun x => x ⊔ 0
neg : ℝ → ℝ := fun x => -x ⊔ 0
posm : Measurable pos
negm : Measurable neg
Xp : Ω → ℝ := pos ∘ X
Xm : Ω → ℝ := neg ∘ X
Yp : Ω → ℝ := pos ∘ Y
Ym : Ω → ℝ := neg ∘ Y
hXpm : X = Xp - Xm
hYpm : Y = Yp - Ym
hp1 : 0 ≤ Xm
⊢ integral μ (X * Y) = integral μ X * integral μ Y

Proof state:
Ω : Type u_1
mΩ : MeasurableSpace Ω
μ : Measure Ω
X Y : Ω → ℝ
hXY : IndepFun X Y μ
hX : Integrable X μ
hY : Integrable Y μ
⊢ integral μ (X * Y) = integral μ X * integral μ Y

Tactic:
let pos : ℝ → ℝ := fun x => max x 0

Result:
Ω : Type u_1
mΩ : MeasurableSpace Ω
μ : Measure Ω
X Y : Ω → ℝ
hXY : IndepFun X Y μ
hX : Integrable X μ
hY : Integrable Y μ
pos : ℝ → ℝ := fun x => x ⊔ 0
⊢ integral μ (X * Y) = integral μ X * integral μ Y

Proof state:
Ω : Type u_1
mΩ : MeasurableSpace Ω
μ : Measure Ω
X Y : Ω → ℝ
hXY : IndepFun X Y μ
hX : Integrable X μ
hY : Integrable Y μ
pos : ℝ → ℝ := fun x => x ⊔ 0
neg : ℝ → ℝ := fun x => -x ⊔ 0
posm : Measurable pos
negm : Measurable neg
Xp : Ω → ℝ := pos ∘ X
Xm : Ω → ℝ := neg ∘ X
Yp : Ω → ℝ := pos ∘ Y
Ym : Ω → ℝ := neg ∘ Y
⊢ integral μ (X * Y) = integral μ X * integral μ Y

Tactic:
have hXpm : X = Xp - Xm := funext fun ω => (max_zero_sub_max_neg_zero_eq_self (X ω)).symm

Result:
Ω : Type u_1
mΩ : MeasurableSpace Ω
μ : Measure Ω
X Y : Ω → ℝ
hXY : IndepFun X Y μ
hX : Integrable X μ
hY : Integrable Y μ
pos : ℝ → ℝ := fun x => x ⊔ 0
neg : ℝ → ℝ := fun x => -x ⊔ 0
posm : Measurable pos
negm : Measurable neg
Xp : Ω → ℝ := pos ∘ X
Xm : Ω → ℝ := neg ∘ X
Yp : Ω → ℝ := pos ∘ Y
Ym : Ω → ℝ := neg ∘ Y
hXpm : X = Xp - Xm
⊢ integral μ (X * Y) = integral μ X * integral μ Y

Proof state:
Ω : Type u_1
mΩ : MeasurableSpace Ω
μ : Measure Ω
X Y : Ω → ℝ
hXY : IndepFun X Y μ
hX : Integrable X μ
hY : Integrable Y μ
pos : ℝ → ℝ := fun x => x ⊔ 0
neg : ℝ → ℝ := fun x => -x ⊔ 0
posm : Measurable pos
negm : Measurable neg
Xp : Ω → ℝ := pos ∘ X
Xm : Ω → ℝ := neg ∘ X
Yp : Ω → ℝ := pos ∘ Y
Ym : Ω → ℝ := neg ∘ Y
hXpm : X = Xp - Xm
hYpm : Y = Yp - Ym
hp1 : 0 ≤ Xm
hp2 : 0 ≤ Xp
hp3 : 0 ≤ Ym
hp4 : 0 ≤ Yp
hm1 : AEMeasurable Xm μ
hm2 : AEMeasurable Xp μ
hm3 : AEMeasurable Ym μ
hm4 : AEMeasurable Yp μ
⊢ integral μ (X * Y) = integral μ X * integral μ Y

Tactic:
have hv1 : Integrable Xm μ := hX.neg_part

Result:
Ω : Type u_1
mΩ : MeasurableSpace Ω
μ : Measure Ω
X Y : Ω → ℝ
hXY : IndepFun X Y μ
hX : Integrable X μ
hY : Integrable Y μ
pos : ℝ → ℝ := fun x => x ⊔ 0
neg : ℝ → ℝ := fun x => -x ⊔ 0
posm : Measurable pos
negm : Measurable neg
Xp : Ω → ℝ := pos ∘ X
Xm : Ω → ℝ := neg ∘ X
Yp : Ω → ℝ := pos ∘ Y
Ym : Ω → ℝ := neg ∘ Y
hXpm : X = Xp - Xm
hYpm : Y = Yp - Ym
hp1 : 0 ≤ Xm
hp2 : 0 ≤ Xp
hp3 : 0 ≤ Ym
hp4 : 0 ≤ Yp
hm1 : AEMeasurable Xm μ
hm2 : AEMeasurable Xp μ
hm3 : AEMeasurable Ym μ
hm4 : AEMeasurable Yp μ
hv1 : Integrable Xm μ
⊢ integral μ (X * Y) = integral μ X * integral μ Y

Proof state:
Ω : Type u_1
mΩ : MeasurableSpace Ω
μ : Measure Ω
X Y : Ω → ℝ
hXY : IndepFun X Y μ
hX : Integrable X μ
hY : Integrable Y μ
pos : ℝ → ℝ := fun x => x ⊔ 0
neg : ℝ → ℝ := fun x => -x ⊔ 0
posm : Measurable pos
negm : Measurable neg
Xp : Ω → ℝ := pos ∘ X
Xm : Ω → ℝ := neg ∘ X
Yp : Ω → ℝ := pos ∘ Y
Ym : Ω → ℝ := neg ∘ Y
hXpm : X = Xp - Xm
hYpm : Y = Yp - Ym
hp1 : 0 ≤ Xm
hp2 : 0 ≤ Xp
hp3 : 0 ≤ Ym
hp4 : 0 ≤ Yp
hm1 : AEMeasurable Xm μ
hm2 : AEMeasurable Xp μ
hm3 : AEMeasurable Ym μ
hm4 : AEMeasurable Yp μ
hv1 : Integrable Xm μ
hv2 : Integrable Xp μ
hv3 : Integrable Ym μ
hv4 : Integrable Yp μ
hi1 : IndepFun Xm Ym μ
hi2 : IndepFun Xp Ym μ
hi3 : IndepFun Xm Yp μ
hi4 : IndepFun Xp Yp μ
hl1 : Integrable (Xm * Ym) μ
hl2 : Integrable (Xp * Ym) μ
hl3 : Integrable (Xm * Yp) μ
hl4 : Integrable (Xp * Yp) μ
hl5 : Integrable (Xp * Yp - Xm * Yp) μ
hl6 : Integrable (Xp * Ym - Xm * Ym) μ
⊢ integral μ (X * Y) = integral μ X * integral μ Y

Tactic:
rw [hXpm, hYpm, mul_sub, sub_mul, sub_mul]

Result:
Ω : Type u_1
mΩ : MeasurableSpace Ω
μ : Measure Ω
X Y : Ω → ℝ
hXY : IndepFun X Y μ
hX : Integrable X μ
hY : Integrable Y μ
pos : ℝ → ℝ := fun x => x ⊔ 0
neg : ℝ → ℝ := fun x => -x ⊔ 0
posm : Measurable pos
negm : Measurable neg
Xp : Ω → ℝ := pos ∘ X
Xm : Ω → ℝ := neg ∘ X
Yp : Ω → ℝ := pos ∘ Y
Ym : Ω → ℝ := neg ∘ Y
hXpm : X = Xp - Xm
hYpm : Y = Yp - Ym
hp1 : 0 ≤ Xm
hp2 : 0 ≤ Xp
hp3 : 0 ≤ Ym
hp4 : 0 ≤ Yp
hm1 : AEMeasurable Xm μ
hm2 : AEMeasurable Xp μ
hm3 : AEMeasurable Ym μ
hm4 : AEMeasurable Yp μ
hv1 : Integrable Xm μ
hv2 : Integrable Xp μ
hv3 : Integrable Ym μ
hv4 : Integrable Yp μ
hi1 : IndepFun Xm Ym μ
hi2 : IndepFun Xp Ym μ
hi3 : IndepFun Xm Yp μ
hi4 : IndepFun Xp Yp μ
hl1 : Integrable (Xm * Ym) μ
hl2 : Integrable (Xp * Ym) μ
hl3 : Integrable (Xm * Yp) μ
hl4 : Integrable (Xp * Yp) μ
hl5 : Integrable (Xp * Yp - Xm * Yp) μ
hl6 : Integrable (Xp * Ym - Xm * Ym) μ
⊢ integral μ (Xp * Yp - Xm * Yp - (Xp * Ym - Xm * Ym)) = integral μ (Xp - Xm) * integral μ (Yp - Ym)