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

tactic: have h : Measurable fun z : G × G => (z.2 * z.1, z.1⁻¹) :=
  (measurable_snd.mul measurable_fst).prod_mk measurable_fst.inv
state_before: G : Type u_1
inst✝⁷ : MeasurableSpace G
inst✝⁶ : Group G
inst✝⁵ : MeasurableMul₂ G
μ ν : Measure G
inst✝⁴ : SigmaFinite ν
inst✝³ : SigmaFinite μ
s : Set G
inst✝² : MeasurableInv G
inst✝¹ : IsMulLeftInvariant μ
inst✝ : IsMulLeftInvariant ν
f : G → G → ℝ≥0∞
hf : AEMeasurable (uncurry f)
⊢ (∫⁻ (x : G), ∫⁻ (y : G), f (y * x) x⁻¹ ∂ν ∂μ) = ∫⁻ (x : G), ∫⁻ (y : G), f x y ∂ν ∂μ

tactic: have h2f : AEMeasurable (uncurry fun x y => f (y * x) x⁻¹) (μ.prod ν) :=
  hf.comp_quasiMeasurePreserving (measurePreserving_mul_prod_inv μ ν).quasiMeasurePreserving
state_before: G : Type u_1
inst✝⁷ : MeasurableSpace G
inst✝⁶ : Group G
inst✝⁵ : MeasurableMul₂ G
μ ν : Measure G
inst✝⁴ : SigmaFinite ν
inst✝³ : SigmaFinite μ
s : Set G
inst✝² : MeasurableInv G
inst✝¹ : IsMulLeftInvariant μ
inst✝ : IsMulLeftInvariant ν
f : G → G → ℝ≥0∞
hf : AEMeasurable (uncurry f)
h : Measurable fun z => (z.snd * z.fst, z.fst⁻¹)
⊢ (∫⁻ (x : G), ∫⁻ (y : G), f (y * x) x⁻¹ ∂ν ∂μ) = ∫⁻ (x : G), ∫⁻ (y : G), f x y ∂ν ∂μ

tactic: simp_rw [lintegral_lintegral h2f, lintegral_lintegral hf]
state_before: G : Type u_1
inst✝⁷ : MeasurableSpace G
inst✝⁶ : Group G
inst✝⁵ : MeasurableMul₂ G
μ ν : Measure G
inst✝⁴ : SigmaFinite ν
inst✝³ : SigmaFinite μ
s : Set G
inst✝² : MeasurableInv G
inst✝¹ : IsMulLeftInvariant μ
inst✝ : IsMulLeftInvariant ν
f : G → G → ℝ≥0∞
hf : AEMeasurable (uncurry f)
h : Measurable fun z => (z.snd * z.fst, z.fst⁻¹)
h2f : AEMeasurable (uncurry fun x y => f (y * x) x⁻¹)
⊢ (∫⁻ (x : G), ∫⁻ (y : G), f (y * x) x⁻¹ ∂ν ∂μ) = ∫⁻ (x : G), ∫⁻ (y : G), f x y ∂ν ∂μ

tactic: conv_rhs => rw [← (measurePreserving_mul_prod_inv μ ν).map_eq]
state_before: G : Type u_1
inst✝⁷ : MeasurableSpace G
inst✝⁶ : Group G
inst✝⁵ : MeasurableMul₂ G
μ ν : Measure G
inst✝⁴ : SigmaFinite ν
inst✝³ : SigmaFinite μ
s : Set G
inst✝² : MeasurableInv G
inst✝¹ : IsMulLeftInvariant μ
inst✝ : IsMulLeftInvariant ν
f : G → G → ℝ≥0∞
hf : AEMeasurable (uncurry f)
h : Measurable fun z => (z.snd * z.fst, z.fst⁻¹)
h2f : AEMeasurable (uncurry fun x y => f (y * x) x⁻¹)
⊢ (∫⁻ (z : G × G), f (z.snd * z.fst) z.fst⁻¹ ∂Measure.prod μ ν) = ∫⁻ (z : G × G), f z.fst z.snd ∂Measure.prod μ ν

tactic: symm
state_before: G : Type u_1
inst✝⁷ : MeasurableSpace G
inst✝⁶ : Group G
inst✝⁵ : MeasurableMul₂ G
μ ν : Measure G
inst✝⁴ : SigmaFinite ν
inst✝³ : SigmaFinite μ
s : Set G
inst✝² : MeasurableInv G
inst✝¹ : IsMulLeftInvariant μ
inst✝ : IsMulLeftInvariant ν
f : G → G → ℝ≥0∞
hf : AEMeasurable (uncurry f)
h : Measurable fun z => (z.snd * z.fst, z.fst⁻¹)
h2f : AEMeasurable (uncurry fun x y => f (y * x) x⁻¹)
⊢ (∫⁻ (z : G × G), f (z.snd * z.fst) z.fst⁻¹ ∂Measure.prod μ ν) =
    ∫⁻ (z : G × G), f z.fst z.snd ∂map (fun z => (z.snd * z.fst, z.fst⁻¹)) (Measure.prod μ ν)

tactic: exact
  lintegral_map' (hf.mono' (measurePreserving_mul_prod_inv μ ν).map_eq.absolutelyContinuous)
    h.aemeasurable
state_before: G : Type u_1
inst✝⁷ : MeasurableSpace G
inst✝⁶ : Group G
inst✝⁵ : MeasurableMul₂ G
μ ν : Measure G
inst✝⁴ : SigmaFinite ν
inst✝³ : SigmaFinite μ
s : Set G
inst✝² : MeasurableInv G
inst✝¹ : IsMulLeftInvariant μ
inst✝ : IsMulLeftInvariant ν
f : G → G → ℝ≥0∞
hf : AEMeasurable (uncurry f)
h : Measurable fun z => (z.snd * z.fst, z.fst⁻¹)
h2f : AEMeasurable (uncurry fun x y => f (y * x) x⁻¹)
⊢ (∫⁻ (z : G × G), f z.fst z.snd ∂map (fun z => (z.snd * z.fst, z.fst⁻¹)) (Measure.prod μ ν)) =
    ∫⁻ (z : G × G), f (z.snd * z.fst) z.fst⁻¹ ∂Measure.prod μ ν