Theorem: MeasureTheory.measure_lintegral_sub_measure
File: Mathlib/MeasureTheory/Group/Prod.lean

Proof steps:
state_before: G : Type u_1
inst✝¹⁰ : MeasurableSpace G
inst✝⁹ : Group G
inst✝⁸ : MeasurableMul₂ G
μ ν : Measure G
inst✝⁷ : SFinite ν
inst✝⁶ : SFinite μ
s : Set G
inst✝⁵ : MeasurableInv G
inst✝⁴ : μ.IsMulLeftInvariant
μ' ν' : Measure G
inst✝³ : SigmaFinite μ'
inst✝² : SigmaFinite ν'
inst✝¹ : μ'.IsMulLeftInvariant
inst✝ : ν'.IsMulLeftInvariant
sm : MeasurableSet s
h2s : ν' s ≠ 0
h3s : ν' s ≠ ⊤
f : G → ℝ≥0∞
hf : Measurable f
⊢ μ' s * ∫⁻ (y : G), f y⁻¹ / ν' ((fun x => x * y⁻¹) ⁻¹' s) ∂ν' = ∫⁻ (x : G), f x ∂μ'
state_after: G : Type u_1
inst✝¹⁰ : MeasurableSpace G
inst✝⁹ : Group G
inst✝⁸ : MeasurableMul₂ G
μ ν : Measure G
inst✝⁷ : SFinite ν
inst✝⁶ : SFinite μ
s : Set G
inst✝⁵ : MeasurableInv G
inst✝⁴ : μ.IsMulLeftInvariant
μ' ν' : Measure G
inst✝³ : SigmaFinite μ'
inst✝² : SigmaFinite ν'
inst✝¹ : μ'.IsMulLeftInvariant
inst✝ : ν'.IsMulLeftInvariant
sm : MeasurableSet s
h2s : ν' s ≠ 0
h3s : ν' s ≠ ⊤
f : G → ℝ≥0∞
hf : Measurable f
g : G → ℝ≥0∞ := fun y => f y⁻¹ / ν' ((fun x => x * y⁻¹) ⁻¹' s)
⊢ μ' s * lintegral ν' g = ∫⁻ (x : G), f x ∂μ'
tactic: set g := fun y => f y⁻¹ / ν' ((fun x => x * y⁻¹) ⁻¹' s)
state_before: G : Type u_1
inst✝¹⁰ : MeasurableSpace G
inst✝⁹ : Group G
inst✝⁸ : MeasurableMul₂ G
μ ν : Measure G
inst✝⁷ : SFinite ν
inst✝⁶ : SFinite μ
s : Set G
inst✝⁵ : MeasurableInv G
inst✝⁴ : μ.IsMulLeftInvariant
μ' ν' : Measure G
inst✝³ : SigmaFinite μ'
inst✝² : SigmaFinite ν'
inst✝¹ : μ'.IsMulLeftInvariant
inst✝ : ν'.IsMulLeftInvariant
sm : MeasurableSet s
h2s : ν' s ≠ 0
h3s : ν' s ≠ ⊤
f : G → ℝ≥0∞
hf : Measurable f
g : G → ℝ≥0∞ := fun y => f y⁻¹ / ν' ((fun x => x * y⁻¹) ⁻¹' s)
⊢ μ' s * lintegral ν' g = ∫⁻ (x : G), f x ∂μ'
state_after: G : Type u_1
inst✝¹⁰ : MeasurableSpace G
inst✝⁹ : Group G
inst✝⁸ : MeasurableMul₂ G
μ ν : Measure G
inst✝⁷ : SFinite ν
inst✝⁶ : SFinite μ
s : Set G
inst✝⁵ : MeasurableInv G
inst✝⁴ : μ.IsMulLeftInvariant
μ' ν' : Measure G
inst✝³ : SigmaFinite μ'
inst✝² : SigmaFinite ν'
inst✝¹ : μ'.IsMulLeftInvariant
inst✝ : ν'.IsMulLeftInvariant
sm : MeasurableSet s
h2s : ν' s ≠ 0
h3s : ν' s ≠ ⊤
f : G → ℝ≥0∞
hf : Measurable f
g : G → ℝ≥0∞ := fun y => f y⁻¹ / ν' ((fun x => x * y⁻¹) ⁻¹' s)
hg : Measurable g
⊢ μ' s * lintegral ν' g = ∫⁻ (x : G), f x ∂μ'
tactic: have hg : Measurable g :=
    (hf.comp measurable_inv).div ((measurable_measure_mul_right ν' sm).comp measurable_inv)
state_before: G : Type u_1
inst✝¹⁰ : MeasurableSpace G
inst✝⁹ : Group G
inst✝⁸ : MeasurableMul₂ G
μ ν : Measure G
inst✝⁷ : SFinite ν
inst✝⁶ : SFinite μ
s : Set G
inst✝⁵ : MeasurableInv G
inst✝⁴ : μ.IsMulLeftInvariant
μ' ν' : Measure G
inst✝³ : SigmaFinite μ'
inst✝² : SigmaFinite ν'
inst✝¹ : μ'.IsMulLeftInvariant
inst✝ : ν'.IsMulLeftInvariant
sm : MeasurableSet s
h2s : ν' s ≠ 0
h3s : ν' s ≠ ⊤
f : G → ℝ≥0∞
hf : Measurable f
g : G → ℝ≥0∞ := fun y => f y⁻¹ / ν' ((fun x => x * y⁻¹) ⁻¹' s)
hg : Measurable g
⊢ μ' s * lintegral ν' g = ∫⁻ (x : G), f x ∂μ'
state_after: G : Type u_1
inst✝¹⁰ : MeasurableSpace G
inst✝⁹ : Group G
inst✝⁸ : MeasurableMul₂ G
μ ν : Measure G
inst✝⁷ : SFinite ν
inst✝⁶ : SFinite μ
s : Set G
inst✝⁵ : MeasurableInv G
inst✝⁴ : μ.IsMulLeftInvariant
μ' ν' : Measure G
inst✝³ : SigmaFinite μ'
inst✝² : SigmaFinite ν'
inst✝¹ : μ'.IsMulLeftInvariant
inst✝ : ν'.IsMulLeftInvariant
sm : MeasurableSet s
h2s : ν' s ≠ 0
h3s : ν' s ≠ ⊤
f : G → ℝ≥0∞
hf : Measurable f
g : G → ℝ≥0∞ := fun y => f y⁻¹ / ν' ((fun x => x * y⁻¹) ⁻¹' s)
hg : Measurable g
⊢ ∫⁻ (x : G), ν' ((fun x_1 => x_1 * x) ⁻¹' s) * (f x / ν' ((fun x_1 => x_1 * x) ⁻¹' s)) ∂μ' = ∫⁻ (x : G), f x ∂μ'
tactic: simp_rw [measure_mul_lintegral_eq μ' ν' sm g hg, g, inv_inv]
state_before: G : Type u_1
inst✝¹⁰ : MeasurableSpace G
inst✝⁹ : Group G
inst✝⁸ : MeasurableMul₂ G
μ ν : Measure G
inst✝⁷ : SFinite ν
inst✝⁶ : SFinite μ
s : Set G
inst✝⁵ : MeasurableInv G
inst✝⁴ : μ.IsMulLeftInvariant
μ' ν' : Measure G
inst✝³ : SigmaFinite μ'
inst✝² : SigmaFinite ν'
inst✝¹ : μ'.IsMulLeftInvariant
inst✝ : ν'.IsMulLeftInvariant
sm : MeasurableSet s
h2s : ν' s ≠ 0
h3s : ν' s ≠ ⊤
f : G → ℝ≥0∞
hf : Measurable f
g : G → ℝ≥0∞ := fun y => f y⁻¹ / ν' ((fun x => x * y⁻¹) ⁻¹' s)
hg : Measurable g
⊢ ∫⁻ (x : G), ν' ((fun x_1 => x_1 * x) ⁻¹' s) * (f x / ν' ((fun x_1 => x_1 * x) ⁻¹' s)) ∂μ' = ∫⁻ (x : G), f x ∂μ'
state_after: G : Type u_1
inst✝¹⁰ : MeasurableSpace G
inst✝⁹ : Group G
inst✝⁸ : MeasurableMul₂ G
μ ν : Measure G
inst✝⁷ : SFinite ν
inst✝⁶ : SFinite μ
s : Set G
inst✝⁵ : MeasurableInv G
inst✝⁴ : μ.IsMulLeftInvariant
μ' ν' : Measure G
inst✝³ : SigmaFinite μ'
inst✝² : SigmaFinite ν'
inst✝¹ : μ'.IsMulLeftInvariant
inst✝ : ν'.IsMulLeftInvariant
sm : MeasurableSet s
h2s : ν' s ≠ 0
h3s : ν' s ≠ ⊤
f : G → ℝ≥0∞
hf : Measurable f
g : G → ℝ≥0∞ := fun y => f y⁻¹ / ν' ((fun x => x * y⁻¹) ⁻¹' s)
hg : Measurable g
⊢ (fun x => ν' ((fun x_1 => x_1 * x) ⁻¹' s) * (f x / ν' ((fun x_1 => x_1 * x) ⁻¹' s))) =ᶠ[ae μ'] f
tactic: refine lintegral_congr_ae ?_
state_before: G : Type u_1
inst✝¹⁰ : MeasurableSpace G
inst✝⁹ : Group G
inst✝⁸ : MeasurableMul₂ G
μ ν : Measure G
inst✝⁷ : SFinite ν
inst✝⁶ : SFinite μ
s : Set G
inst✝⁵ : MeasurableInv G
inst✝⁴ : μ.IsMulLeftInvariant
μ' ν' : Measure G
inst✝³ : SigmaFinite μ'
inst✝² : SigmaFinite ν'
inst✝¹ : μ'.IsMulLeftInvariant
inst✝ : ν'.IsMulLeftInvariant
sm : MeasurableSet s
h2s : ν' s ≠ 0
h3s : ν' s ≠ ⊤
f : G → ℝ≥0∞
hf : Measurable f
g : G → ℝ≥0∞ := fun y => f y⁻¹ / ν' ((fun x => x * y⁻¹) ⁻¹' s)
hg : Measurable g
⊢ (fun x => ν' ((fun x_1 => x_1 * x) ⁻¹' s) * (f x / ν' ((fun x_1 => x_1 * x) ⁻¹' s))) =ᶠ[ae μ'] f
state_after: G : Type u_1
inst✝¹⁰ : MeasurableSpace G
inst✝⁹ : Group G
inst✝⁸ : MeasurableMul₂ G
μ ν : Measure G
inst✝⁷ : SFinite ν
inst✝⁶ : SFinite μ
s : Set G
inst✝⁵ : MeasurableInv G
inst✝⁴ : μ.IsMulLeftInvariant
μ' ν' : Measure G
inst✝³ : SigmaFinite μ'
inst✝² : SigmaFinite ν'
inst✝¹ : μ'.IsMulLeftInvariant
inst✝ : ν'.IsMulLeftInvariant
sm : MeasurableSet s
h2s : ν' s ≠ 0
h3s : ν' s ≠ ⊤
f : G → ℝ≥0∞
hf : Measurable f
g : G → ℝ≥0∞ := fun y => f y⁻¹ / ν' ((fun x => x * y⁻¹) ⁻¹' s)
hg : Measurable g
x : G
hx : ν' ((fun y => y * x) ⁻¹' s) < ⊤
⊢ (fun x => ν' ((fun x_1 => x_1 * x) ⁻¹' s) * (f x / ν' ((fun x_1 => x_1 * x) ⁻¹' s))) x = f x
tactic: refine (ae_measure_preimage_mul_right_lt_top_of_ne_zero μ' ν' h2s h3s).mono fun x hx => ?_
state_before: G : Type u_1
inst✝¹⁰ : MeasurableSpace G
inst✝⁹ : Group G
inst✝⁸ : MeasurableMul₂ G
μ ν : Measure G
inst✝⁷ : SFinite ν
inst✝⁶ : SFinite μ
s : Set G
inst✝⁵ : MeasurableInv G
inst✝⁴ : μ.IsMulLeftInvariant
μ' ν' : Measure G
inst✝³ : SigmaFinite μ'
inst✝² : SigmaFinite ν'
inst✝¹ : μ'.IsMulLeftInvariant
inst✝ : ν'.IsMulLeftInvariant
sm : MeasurableSet s
h2s : ν' s ≠ 0
h3s : ν' s ≠ ⊤
f : G → ℝ≥0∞
hf : Measurable f
g : G → ℝ≥0∞ := fun y => f y⁻¹ / ν' ((fun x => x * y⁻¹) ⁻¹' s)
hg : Measurable g
x : G
hx : ν' ((fun y => y * x) ⁻¹' s) < ⊤
⊢ (fun x => ν' ((fun x_1 => x_1 * x) ⁻¹' s) * (f x / ν' ((fun x_1 => x_1 * x) ⁻¹' s))) x = f x
state_after: no goals
tactic: simp_rw [ENNReal.mul_div_cancel' (measure_mul_right_ne_zero ν' h2s _) hx.ne]