-- 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 μ
⊢ integral μ (X * Y) = integral μ X * integral μ Y

Tactic:
have hl1 : Integrable (Xm * Ym) μ := hi1.integrable_mul hv1 hv3

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) μ
⊢ 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 μ
⊢ integral μ (X * Y) = integral μ X * integral μ Y

Tactic:
have hi2 : IndepFun Xp Ym μ := hXY.comp posm negm

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 μ
⊢ 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) μ
⊢ integral μ (X * Y) = integral μ X * integral μ Y

Tactic:
have hl6 : Integrable (Xp * Ym - Xm * Ym) μ := hl2.sub hl1

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 μ (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) μ
⊢ integral μ (X * Y) = integral μ X * integral μ Y

Tactic:
have hl5 : Integrable (Xp * Yp - Xm * Yp) μ := hl4.sub hl3

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) μ
⊢ 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
⊢ integral μ (X * Y) = integral μ X * integral μ Y

Tactic:
let neg : ℝ → ℝ := 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
neg : ℝ → ℝ := fun x => -x ⊔ 0
⊢ integral μ (X * Y) = integral μ X * integral μ Y