Theorem: MeasureTheory.measurePreserving_piEquivPiSubtypeProd
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 ι'
p : ι → Prop
inst✝ : DecidablePred p
⊢ MeasurePreserving (⇑(MeasurableEquiv.piEquivPiSubtypeProd α p)) (Measure.pi μ)
    ((Measure.pi fun i => μ ↑i).prod (Measure.pi fun i => μ ↑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 ι'
p : ι → Prop
inst✝ : DecidablePred p
e : ((i : Subtype p) → α ↑i) × ((i : { i // ¬p i }) → α ↑i) ≃ᵐ ((i : ι) → α i) :=
  (MeasurableEquiv.piEquivPiSubtypeProd α p).symm
⊢ MeasurePreserving (⇑(MeasurableEquiv.piEquivPiSubtypeProd α p)) (Measure.pi μ)
    ((Measure.pi fun i => μ ↑i).prod (Measure.pi fun i => μ ↑i))
tactic: set e := (MeasurableEquiv.piEquivPiSubtypeProd α p).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 ι'
p : ι → Prop
inst✝ : DecidablePred p
e : ((i : Subtype p) → α ↑i) × ((i : { i // ¬p i }) → α ↑i) ≃ᵐ ((i : ι) → α i) :=
  (MeasurableEquiv.piEquivPiSubtypeProd α p).symm
⊢ MeasurePreserving (⇑(MeasurableEquiv.piEquivPiSubtypeProd α p)) (Measure.pi μ)
    ((Measure.pi fun i => μ ↑i).prod (Measure.pi fun i => μ ↑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 ι'
p : ι → Prop
inst✝ : DecidablePred p
e : ((i : Subtype p) → α ↑i) × ((i : { i // ¬p i }) → α ↑i) ≃ᵐ ((i : ι) → α i) :=
  (MeasurableEquiv.piEquivPiSubtypeProd α p).symm
⊢ MeasurePreserving (⇑e) ((Measure.pi fun i => μ ↑i).prod (Measure.pi fun i => μ ↑i)) (Measure.pi μ)
tactic: refine MeasurePreserving.symm e ?_
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 ι'
p : ι → Prop
inst✝ : DecidablePred p
e : ((i : Subtype p) → α ↑i) × ((i : { i // ¬p i }) → α ↑i) ≃ᵐ ((i : ι) → α i) :=
  (MeasurableEquiv.piEquivPiSubtypeProd α p).symm
⊢ MeasurePreserving (⇑e) ((Measure.pi fun i => μ ↑i).prod (Measure.pi fun i => μ ↑i)) (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 ι'
p : ι → Prop
inst✝ : DecidablePred p
e : ((i : Subtype p) → α ↑i) × ((i : { i // ¬p i }) → α ↑i) ≃ᵐ ((i : ι) → α i) :=
  (MeasurableEquiv.piEquivPiSubtypeProd α p).symm
s : (i : ι) → Set (α i)
x✝ : ∀ (i : ι), MeasurableSet (s i)
⊢ (Measure.map (⇑e) ((Measure.pi fun i => μ ↑i).prod (Measure.pi fun i => μ ↑i))) (univ.pi s) = ∏ i : ι, (μ i) (s i)
tactic: refine ⟨e.measurable, (pi_eq fun s _ => ?_).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 ι'
p : ι → Prop
inst✝ : DecidablePred p
e : ((i : Subtype p) → α ↑i) × ((i : { i // ¬p i }) → α ↑i) ≃ᵐ ((i : ι) → α i) :=
  (MeasurableEquiv.piEquivPiSubtypeProd α p).symm
s : (i : ι) → Set (α i)
x✝ : ∀ (i : ι), MeasurableSet (s i)
⊢ (Measure.map (⇑e) ((Measure.pi fun i => μ ↑i).prod (Measure.pi fun i => μ ↑i))) (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 ι'
p : ι → Prop
inst✝ : DecidablePred p
e : ((i : Subtype p) → α ↑i) × ((i : { i // ¬p i }) → α ↑i) ≃ᵐ ((i : ι) → α i) :=
  (MeasurableEquiv.piEquivPiSubtypeProd α p).symm
s : (i : ι) → Set (α i)
x✝ : ∀ (i : ι), MeasurableSet (s i)
this : ⇑e ⁻¹' univ.pi s = (univ.pi fun i => s ↑i) ×ˢ univ.pi fun i => s ↑i
⊢ (Measure.map (⇑e) ((Measure.pi fun i => μ ↑i).prod (Measure.pi fun i => μ ↑i))) (univ.pi s) = ∏ i : ι, (μ i) (s i)
tactic: have : e ⁻¹' pi univ s =
      (pi univ fun i : { i // p i } => s i) ×ˢ pi univ fun i : { i // ¬p i } => s i :=
    Equiv.preimage_piEquivPiSubtypeProd_symm_pi p s
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 ι'
p : ι → Prop
inst✝ : DecidablePred p
e : ((i : Subtype p) → α ↑i) × ((i : { i // ¬p i }) → α ↑i) ≃ᵐ ((i : ι) → α i) :=
  (MeasurableEquiv.piEquivPiSubtypeProd α p).symm
s : (i : ι) → Set (α i)
x✝ : ∀ (i : ι), MeasurableSet (s i)
this : ⇑e ⁻¹' univ.pi s = (univ.pi fun i => s ↑i) ×ˢ univ.pi fun i => s ↑i
⊢ (Measure.map (⇑e) ((Measure.pi fun i => μ ↑i).prod (Measure.pi fun i => μ ↑i))) (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 ι'
p : ι → Prop
inst✝ : DecidablePred p
e : ((i : Subtype p) → α ↑i) × ((i : { i // ¬p i }) → α ↑i) ≃ᵐ ((i : ι) → α i) :=
  (MeasurableEquiv.piEquivPiSubtypeProd α p).symm
s : (i : ι) → Set (α i)
x✝ : ∀ (i : ι), MeasurableSet (s i)
this : ⇑e ⁻¹' univ.pi s = (univ.pi fun i => s ↑i) ×ˢ univ.pi fun i => s ↑i
⊢ (∏ i : Subtype p, (μ ↑i) (s ↑i)) * ∏ i : { i // ¬p i }, (μ ↑i) (s ↑i) = ∏ i : ι, (μ i) (s i)
tactic: rw [e.map_apply, this, prod_prod, pi_pi, pi_pi]
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 ι'
p : ι → Prop
inst✝ : DecidablePred p
e : ((i : Subtype p) → α ↑i) × ((i : { i // ¬p i }) → α ↑i) ≃ᵐ ((i : ι) → α i) :=
  (MeasurableEquiv.piEquivPiSubtypeProd α p).symm
s : (i : ι) → Set (α i)
x✝ : ∀ (i : ι), MeasurableSet (s i)
this : ⇑e ⁻¹' univ.pi s = (univ.pi fun i => s ↑i) ×ˢ univ.pi fun i => s ↑i
⊢ (∏ i : Subtype p, (μ ↑i) (s ↑i)) * ∏ i : { i // ¬p i }, (μ ↑i) (s ↑i) = ∏ i : ι, (μ i) (s i)
state_after: no goals
tactic: exact Fintype.prod_subtype_mul_prod_subtype p fun i => μ i (s i)