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

tactic: set e := (MeasurableEquiv.piEquivPiSubtypeProd α p).symm
state_before: ι✝ : Type ?u.5372445
ι' : Type ?u.5372448
α✝ : ι✝ → Type ?u.5372453
inst✝³ : Fintype ι✝
m✝ : (i : ι✝) → OuterMeasure (α✝ i)
ι : Type u
α : ι → Type v
inst✝² : Fintype ι
m : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
inst✝¹ : ∀ (i : ι), SigmaFinite (μ i)
p : ι → Prop
inst✝ : DecidablePred p
⊢ MeasurePreserving ↑(MeasurableEquiv.piEquivPiSubtypeProd α p)

tactic: refine' MeasurePreserving.symm e _
state_before: ι✝ : Type ?u.5372445
ι' : Type ?u.5372448
α✝ : ι✝ → Type ?u.5372453
inst✝³ : Fintype ι✝
m✝ : (i : ι✝) → OuterMeasure (α✝ i)
ι : Type u
α : ι → Type v
inst✝² : Fintype ι
m : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
inst✝¹ : ∀ (i : ι), SigmaFinite (μ i)
p : ι → Prop
inst✝ : DecidablePred p
e : ((i : Subtype p) → α ↑i) × ((i : { i // ¬p i }) → α ↑i) ≃ᵐ ((i : ι) → α i) :=
  MeasurableEquiv.symm (MeasurableEquiv.piEquivPiSubtypeProd α p)
⊢ MeasurePreserving ↑(MeasurableEquiv.piEquivPiSubtypeProd α p)

tactic: refine' ⟨e.measurable, (pi_eq fun s _ => _).symm⟩
state_before: ι✝ : Type ?u.5372445
ι' : Type ?u.5372448
α✝ : ι✝ → Type ?u.5372453
inst✝³ : Fintype ι✝
m✝ : (i : ι✝) → OuterMeasure (α✝ i)
ι : Type u
α : ι → Type v
inst✝² : Fintype ι
m : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
inst✝¹ : ∀ (i : ι), SigmaFinite (μ i)
p : ι → Prop
inst✝ : DecidablePred p
e : ((i : Subtype p) → α ↑i) × ((i : { i // ¬p i }) → α ↑i) ≃ᵐ ((i : ι) → α i) :=
  MeasurableEquiv.symm (MeasurableEquiv.piEquivPiSubtypeProd α p)
⊢ MeasurePreserving ↑e

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.5372445
ι' : Type ?u.5372448
α✝ : ι✝ → Type ?u.5372453
inst✝³ : Fintype ι✝
m✝ : (i : ι✝) → OuterMeasure (α✝ i)
ι : Type u
α : ι → Type v
inst✝² : Fintype ι
m : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
inst✝¹ : ∀ (i : ι), SigmaFinite (μ i)
p : ι → Prop
inst✝ : DecidablePred p
e : ((i : Subtype p) → α ↑i) × ((i : { i // ¬p i }) → α ↑i) ≃ᵐ ((i : ι) → α i) :=
  MeasurableEquiv.symm (MeasurableEquiv.piEquivPiSubtypeProd α p)
s : (i : ι) → Set (α i)
x✝ : ∀ (i : ι), MeasurableSet (s i)
⊢ ↑↑(Measure.map (↑e) (Measure.prod (Measure.pi fun i => μ ↑i) (Measure.pi fun i => μ ↑i))) (Set.pi univ s) =
    ∏ i : ι, ↑↑(μ i) (s i)

tactic: rw [e.map_apply, this, prod_prod, pi_pi, pi_pi]
state_before: ι✝ : Type ?u.5372445
ι' : Type ?u.5372448
α✝ : ι✝ → Type ?u.5372453
inst✝³ : Fintype ι✝
m✝ : (i : ι✝) → OuterMeasure (α✝ i)
ι : Type u
α : ι → Type v
inst✝² : Fintype ι
m : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
inst✝¹ : ∀ (i : ι), SigmaFinite (μ i)
p : ι → Prop
inst✝ : DecidablePred p
e : ((i : Subtype p) → α ↑i) × ((i : { i // ¬p i }) → α ↑i) ≃ᵐ ((i : ι) → α i) :=
  MeasurableEquiv.symm (MeasurableEquiv.piEquivPiSubtypeProd α p)
s : (i : ι) → Set (α i)
x✝ : ∀ (i : ι), MeasurableSet (s i)
this : ↑e ⁻¹' Set.pi univ s = (Set.pi univ fun i => s ↑i) ×ˢ Set.pi univ fun i => s ↑i
⊢ ↑↑(Measure.map (↑e) (Measure.prod (Measure.pi fun i => μ ↑i) (Measure.pi fun i => μ ↑i))) (Set.pi univ s) =
    ∏ i : ι, ↑↑(μ i) (s i)

tactic: exact Fintype.prod_subtype_mul_prod_subtype p fun i => μ i (s i)
state_before: ι✝ : Type ?u.5372445
ι' : Type ?u.5372448
α✝ : ι✝ → Type ?u.5372453
inst✝³ : Fintype ι✝
m✝ : (i : ι✝) → OuterMeasure (α✝ i)
ι : Type u
α : ι → Type v
inst✝² : Fintype ι
m : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
inst✝¹ : ∀ (i : ι), SigmaFinite (μ i)
p : ι → Prop
inst✝ : DecidablePred p
e : ((i : Subtype p) → α ↑i) × ((i : { i // ¬p i }) → α ↑i) ≃ᵐ ((i : ι) → α i) :=
  MeasurableEquiv.symm (MeasurableEquiv.piEquivPiSubtypeProd α p)
s : (i : ι) → Set (α i)
x✝ : ∀ (i : ι), MeasurableSet (s i)
this : ↑e ⁻¹' Set.pi univ s = (Set.pi univ fun i => s ↑i) ×ˢ Set.pi univ fun i => s ↑i
⊢ (∏ i : Subtype p, ↑↑(μ ↑i) (s ↑i)) * ∏ i : { i // ¬p i }, ↑↑(μ ↑i) (s ↑i) = ∏ i : ι, ↑↑(μ i) (s i)