Theorem: MeasureTheory.Measure.prodAssoc_prod
File: Mathlib/MeasureTheory/Constructions/Prod/Basic.lean

tactic: refine'
  (prod_eq_generateFrom generateFrom_measurableSet generateFrom_prod isPiSystem_measurableSet
      isPiSystem_prod μ.toFiniteSpanningSetsIn
      (ν.toFiniteSpanningSetsIn.prod τ.toFiniteSpanningSetsIn) _).symm
state_before: α : Type u_2
α' : Type ?u.4458428
β : Type u_3
β' : Type ?u.4458434
γ : Type u_1
E : Type ?u.4458440
inst✝⁸ : MeasurableSpace α
inst✝⁷ : MeasurableSpace α'
inst✝⁶ : MeasurableSpace β
inst✝⁵ : MeasurableSpace β'
inst✝⁴ : MeasurableSpace γ
μ μ' : Measure α
ν ν' : Measure β
τ : Measure γ
inst✝³ : NormedAddCommGroup E
inst✝² : SigmaFinite ν
inst✝¹ : SigmaFinite μ
inst✝ : SigmaFinite τ
⊢ map (↑MeasurableEquiv.prodAssoc) (Measure.prod (Measure.prod μ ν) τ) = Measure.prod μ (Measure.prod ν τ)

tactic: rintro s hs _ ⟨t, u, ht, hu, rfl⟩
state_before: α : Type u_2
α' : Type ?u.4458428
β : Type u_3
β' : Type ?u.4458434
γ : Type u_1
E : Type ?u.4458440
inst✝⁸ : MeasurableSpace α
inst✝⁷ : MeasurableSpace α'
inst✝⁶ : MeasurableSpace β
inst✝⁵ : MeasurableSpace β'
inst✝⁴ : MeasurableSpace γ
μ μ' : Measure α
ν ν' : Measure β
τ : Measure γ
inst✝³ : NormedAddCommGroup E
inst✝² : SigmaFinite ν
inst✝¹ : SigmaFinite μ
inst✝ : SigmaFinite τ
⊢ ∀ (s : Set α),
    s ∈ {s | MeasurableSet s} →
      ∀ (t : Set (β × γ)),
        t ∈ image2 (fun x x_1 => x ×ˢ x_1) {s | MeasurableSet s} {t | MeasurableSet t} →
          ↑↑(map (↑MeasurableEquiv.prodAssoc) (Measure.prod (Measure.prod μ ν) τ)) (s ×ˢ t) =
            ↑↑μ s * ↑↑(Measure.prod ν τ) t

tactic: rw [mem_setOf_eq] at hs ht hu
state_before: case intro.intro.intro.intro
α : Type u_2
α' : Type ?u.4458428
β : Type u_3
β' : Type ?u.4458434
γ : Type u_1
E : Type ?u.4458440
inst✝⁸ : MeasurableSpace α
inst✝⁷ : MeasurableSpace α'
inst✝⁶ : MeasurableSpace β
inst✝⁵ : MeasurableSpace β'
inst✝⁴ : MeasurableSpace γ
μ μ' : Measure α
ν ν' : Measure β
τ : Measure γ
inst✝³ : NormedAddCommGroup E
inst✝² : SigmaFinite ν
inst✝¹ : SigmaFinite μ
inst✝ : SigmaFinite τ
s : Set α
hs : s ∈ {s | MeasurableSet s}
t : Set β
u : Set γ
ht : t ∈ {s | MeasurableSet s}
hu : u ∈ {t | MeasurableSet t}
⊢ ↑↑(map (↑MeasurableEquiv.prodAssoc) (Measure.prod (Measure.prod μ ν) τ)) (s ×ˢ (fun x x_1 => x ×ˢ x_1) t u) =
    ↑↑μ s * ↑↑(Measure.prod ν τ) ((fun x x_1 => x ×ˢ x_1) t u)

tactic: simp_rw [map_apply (MeasurableEquiv.measurable _) (hs.prod (ht.prod hu)),
  MeasurableEquiv.prodAssoc, MeasurableEquiv.coe_mk, Equiv.prod_assoc_preimage, prod_prod,
  mul_assoc]
state_before: case intro.intro.intro.intro
α : Type u_2
α' : Type ?u.4458428
β : Type u_3
β' : Type ?u.4458434
γ : Type u_1
E : Type ?u.4458440
inst✝⁸ : MeasurableSpace α
inst✝⁷ : MeasurableSpace α'
inst✝⁶ : MeasurableSpace β
inst✝⁵ : MeasurableSpace β'
inst✝⁴ : MeasurableSpace γ
μ μ' : Measure α
ν ν' : Measure β
τ : Measure γ
inst✝³ : NormedAddCommGroup E
inst✝² : SigmaFinite ν
inst✝¹ : SigmaFinite μ
inst✝ : SigmaFinite τ
s : Set α
hs : MeasurableSet s
t : Set β
u : Set γ
ht : MeasurableSet t
hu : MeasurableSet u
⊢ ↑↑(map (↑MeasurableEquiv.prodAssoc) (Measure.prod (Measure.prod μ ν) τ)) (s ×ˢ (fun x x_1 => x ×ˢ x_1) t u) =
    ↑↑μ s * ↑↑(Measure.prod ν τ) ((fun x x_1 => x ×ˢ x_1) t u)