Theorem: MeasureTheory.measurePreserving_pi
File: Mathlib/MeasureTheory/Constructions/Pi.lean

Proof steps:
state_before: ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
inst✝⁴ : Fintype ι
m✝ : (i : ι) → OuterMeasure (α i)
m : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
inst✝³ : ∀ (i : ι), SigmaFinite (μ i)
inst✝² : Fintype ι'
β : ι → Type u_4
inst✝¹ : (i : ι) → MeasurableSpace (β i)
ν : (i : ι) → Measure (β i)
f : (i : ι) → α i → β i
inst✝ : ∀ (i : ι), SigmaFinite (ν i)
hf : ∀ (i : ι), MeasurePreserving (f i) (μ i) (ν i)
⊢ Measure.map (fun a i => f i (a i)) (Measure.pi μ) = Measure.pi ν
state_after: ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
inst✝⁴ : Fintype ι
m✝ : (i : ι) → OuterMeasure (α i)
m : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
inst✝³ : ∀ (i : ι), SigmaFinite (μ i)
inst✝² : Fintype ι'
β : ι → Type u_4
inst✝¹ : (i : ι) → MeasurableSpace (β i)
ν : (i : ι) → Measure (β i)
f : (i : ι) → α i → β i
inst✝ : ∀ (i : ι), SigmaFinite (ν i)
hf : ∀ (i : ι), MeasurePreserving (f i) (μ i) (ν i)
this : ∀ (i : ι), SigmaFinite (μ i)
⊢ Measure.map (fun a i => f i (a i)) (Measure.pi μ) = Measure.pi ν
tactic: haveI : ∀ i, SigmaFinite (μ i) := fun i ↦ (hf i).sigmaFinite
state_before: ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
inst✝⁴ : Fintype ι
m✝ : (i : ι) → OuterMeasure (α i)
m : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
inst✝³ : ∀ (i : ι), SigmaFinite (μ i)
inst✝² : Fintype ι'
β : ι → Type u_4
inst✝¹ : (i : ι) → MeasurableSpace (β i)
ν : (i : ι) → Measure (β i)
f : (i : ι) → α i → β i
inst✝ : ∀ (i : ι), SigmaFinite (ν i)
hf : ∀ (i : ι), MeasurePreserving (f i) (μ i) (ν i)
this : ∀ (i : ι), SigmaFinite (μ i)
⊢ Measure.map (fun a i => f i (a i)) (Measure.pi μ) = Measure.pi ν
state_after: ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
inst✝⁴ : Fintype ι
m✝ : (i : ι) → OuterMeasure (α i)
m : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
inst✝³ : ∀ (i : ι), SigmaFinite (μ i)
inst✝² : Fintype ι'
β : ι → Type u_4
inst✝¹ : (i : ι) → MeasurableSpace (β i)
ν : (i : ι) → Measure (β i)
f : (i : ι) → α i → β i
inst✝ : ∀ (i : ι), SigmaFinite (ν i)
hf : ∀ (i : ι), MeasurePreserving (f i) (μ i) (ν i)
this : ∀ (i : ι), SigmaFinite (μ i)
s : (i : ι) → Set (β i)
hs : ∀ (i : ι), MeasurableSet (s i)
⊢ (Measure.map (fun a i => f i (a i)) (Measure.pi μ)) (univ.pi s) = ∏ i : ι, (ν i) (s i)
tactic: refine (Measure.pi_eq fun s hs ↦ ?_).symm
state_before: ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
inst✝⁴ : Fintype ι
m✝ : (i : ι) → OuterMeasure (α i)
m : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
inst✝³ : ∀ (i : ι), SigmaFinite (μ i)
inst✝² : Fintype ι'
β : ι → Type u_4
inst✝¹ : (i : ι) → MeasurableSpace (β i)
ν : (i : ι) → Measure (β i)
f : (i : ι) → α i → β i
inst✝ : ∀ (i : ι), SigmaFinite (ν i)
hf : ∀ (i : ι), MeasurePreserving (f i) (μ i) (ν i)
this : ∀ (i : ι), SigmaFinite (μ i)
s : (i : ι) → Set (β i)
hs : ∀ (i : ι), MeasurableSet (s i)
⊢ (Measure.map (fun a i => f i (a i)) (Measure.pi μ)) (univ.pi s) = ∏ i : ι, (ν i) (s i)
state_after: ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
inst✝⁴ : Fintype ι
m✝ : (i : ι) → OuterMeasure (α i)
m : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
inst✝³ : ∀ (i : ι), SigmaFinite (μ i)
inst✝² : Fintype ι'
β : ι → Type u_4
inst✝¹ : (i : ι) → MeasurableSpace (β i)
ν : (i : ι) → Measure (β i)
f : (i : ι) → α i → β i
inst✝ : ∀ (i : ι), SigmaFinite (ν i)
hf : ∀ (i : ι), MeasurePreserving (f i) (μ i) (ν i)
this : ∀ (i : ι), SigmaFinite (μ i)
s : (i : ι) → Set (β i)
hs : ∀ (i : ι), MeasurableSet (s i)
⊢ ∏ i : ι, (μ i) (f i ⁻¹' s i) = ∏ i : ι, (ν i) (s i)

case hf
ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
inst✝⁴ : Fintype ι
m✝ : (i : ι) → OuterMeasure (α i)
m : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
inst✝³ : ∀ (i : ι), SigmaFinite (μ i)
inst✝² : Fintype ι'
β : ι → Type u_4
inst✝¹ : (i : ι) → MeasurableSpace (β i)
ν : (i : ι) → Measure (β i)
f : (i : ι) → α i → β i
inst✝ : ∀ (i : ι), SigmaFinite (ν i)
hf : ∀ (i : ι), MeasurePreserving (f i) (μ i) (ν i)
this : ∀ (i : ι), SigmaFinite (μ i)
s : (i : ι) → Set (β i)
hs : ∀ (i : ι), MeasurableSet (s i)
⊢ Measurable fun a i => f i (a i)

case hs
ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
inst✝⁴ : Fintype ι
m✝ : (i : ι) → OuterMeasure (α i)
m : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
inst✝³ : ∀ (i : ι), SigmaFinite (μ i)
inst✝² : Fintype ι'
β : ι → Type u_4
inst✝¹ : (i : ι) → MeasurableSpace (β i)
ν : (i : ι) → Measure (β i)
f : (i : ι) → α i → β i
inst✝ : ∀ (i : ι), SigmaFinite (ν i)
hf : ∀ (i : ι), MeasurePreserving (f i) (μ i) (ν i)
this : ∀ (i : ι), SigmaFinite (μ i)
s : (i : ι) → Set (β i)
hs : ∀ (i : ι), MeasurableSet (s i)
⊢ MeasurableSet (univ.pi s)
tactic: rw [Measure.map_apply, Set.preimage_pi, Measure.pi_pi]