Theorem: MeasureTheory.IsProjectiveMeasureFamily.congr_cylinder_of_subset
File: Mathlib/MeasureTheory/Constructions/Projective.lean

tactic: cases isEmpty_or_nonempty (∀ i, α i) with
| inl h =>
  suffices ∀ I, P I univ = 0 by
    simp only [Measure.measure_univ_eq_zero] at this
    simp [this]
  intro I
  simp only [isEmpty_pi] at h
  obtain ⟨i, hi_empty⟩ := h
  rw [measure_univ_eq hP I {i}]
  have : (univ : Set ((j : {x // x ∈ ({i} : Finset ι)}) → α j)) = ∅ := by simp [hi_empty]
  simp [this]
| inr h =>
  have : S = (fun f : ∀ i : I, α i ↦ fun j : J ↦ f ⟨j, hJI j.prop⟩) ⁻¹' T :=
    eq_of_cylinder_eq_of_subset h_eq hJI
  rw [hP I J hJI, Measure.map_apply _ hT, this]
  exact measurable_pi_lambda _ (fun _ ↦ measurable_pi_apply _)
state_before: ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
P : (J : Finset ι) → Measure ((j : { x // x ∈ J }) → α ↑j)
I J : Finset ι
hP : IsProjectiveMeasureFamily P
S : Set ((i : { x // x ∈ I }) → α ↑i)
T : Set ((i : { x // x ∈ J }) → α ↑i)
hT : MeasurableSet T
h_eq : cylinder I S = cylinder J T
hJI : J ⊆ I
⊢ (P I) S = (P J) T
state_after: no goals

tactic: suffices ∀ I, P I univ = 0 by
  simp only [Measure.measure_univ_eq_zero] at this
  simp [this]
state_before: case inl
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
P : (J : Finset ι) → Measure ((j : { x // x ∈ J }) → α ↑j)
I J : Finset ι
hP : IsProjectiveMeasureFamily P
S : Set ((i : { x // x ∈ I }) → α ↑i)
T : Set ((i : { x // x ∈ J }) → α ↑i)
hT : MeasurableSet T
h_eq : cylinder I S = cylinder J T
hJI : J ⊆ I
h : IsEmpty ((i : ι) → α i)
⊢ (P I) S = (P J) T
state_after: case inl
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
P : (J : Finset ι) → Measure ((j : { x // x ∈ J }) → α ↑j)
I J : Finset ι
hP : IsProjectiveMeasureFamily P
S : Set ((i : { x // x ∈ I }) → α ↑i)
T : Set ((i : { x // x ∈ J }) → α ↑i)
hT : MeasurableSet T
h_eq : cylinder I S = cylinder J T
hJI : J ⊆ I
h : IsEmpty ((i : ι) → α i)
⊢ ∀ (I : Finset ι), (P I) univ = 0

tactic: intro I
state_before: case inl
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
P : (J : Finset ι) → Measure ((j : { x // x ∈ J }) → α ↑j)
I J : Finset ι
hP : IsProjectiveMeasureFamily P
S : Set ((i : { x // x ∈ I }) → α ↑i)
T : Set ((i : { x // x ∈ J }) → α ↑i)
hT : MeasurableSet T
h_eq : cylinder I S = cylinder J T
hJI : J ⊆ I
h : IsEmpty ((i : ι) → α i)
⊢ ∀ (I : Finset ι), (P I) univ = 0
state_after: case inl
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
P : (J : Finset ι) → Measure ((j : { x // x ∈ J }) → α ↑j)
I✝ J : Finset ι
hP : IsProjectiveMeasureFamily P
S : Set ((i : { x // x ∈ I✝ }) → α ↑i)
T : Set ((i : { x // x ∈ J }) → α ↑i)
hT : MeasurableSet T
h_eq : cylinder I✝ S = cylinder J T
hJI : J ⊆ I✝
h : IsEmpty ((i : ι) → α i)
I : Finset ι
⊢ (P I) univ = 0

tactic: simp only [isEmpty_pi] at h
state_before: case inl
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
P : (J : Finset ι) → Measure ((j : { x // x ∈ J }) → α ↑j)
I✝ J : Finset ι
hP : IsProjectiveMeasureFamily P
S : Set ((i : { x // x ∈ I✝ }) → α ↑i)
T : Set ((i : { x // x ∈ J }) → α ↑i)
hT : MeasurableSet T
h_eq : cylinder I✝ S = cylinder J T
hJI : J ⊆ I✝
h : IsEmpty ((i : ι) → α i)
I : Finset ι
⊢ (P I) univ = 0
state_after: case inl
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
P : (J : Finset ι) → Measure ((j : { x // x ∈ J }) → α ↑j)
I✝ J : Finset ι
hP : IsProjectiveMeasureFamily P
S : Set ((i : { x // x ∈ I✝ }) → α ↑i)
T : Set ((i : { x // x ∈ J }) → α ↑i)
hT : MeasurableSet T
h_eq : cylinder I✝ S = cylinder J T
hJI : J ⊆ I✝
I : Finset ι
h : ∃ a, IsEmpty (α a)
⊢ (P I) univ = 0

tactic: obtain ⟨i, hi_empty⟩ := h
state_before: case inl
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
P : (J : Finset ι) → Measure ((j : { x // x ∈ J }) → α ↑j)
I✝ J : Finset ι
hP : IsProjectiveMeasureFamily P
S : Set ((i : { x // x ∈ I✝ }) → α ↑i)
T : Set ((i : { x // x ∈ J }) → α ↑i)
hT : MeasurableSet T
h_eq : cylinder I✝ S = cylinder J T
hJI : J ⊆ I✝
I : Finset ι
h : ∃ a, IsEmpty (α a)
⊢ (P I) univ = 0
state_after: case inl.intro
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
P : (J : Finset ι) → Measure ((j : { x // x ∈ J }) → α ↑j)
I✝ J : Finset ι
hP : IsProjectiveMeasureFamily P
S : Set ((i : { x // x ∈ I✝ }) → α ↑i)
T : Set ((i : { x // x ∈ J }) → α ↑i)
hT : MeasurableSet T
h_eq : cylinder I✝ S = cylinder J T
hJI : J ⊆ I✝
I : Finset ι
i : ι
hi_empty : IsEmpty (α i)
⊢ (P I) univ = 0

tactic: rw [measure_univ_eq hP I {i}]
state_before: case inl.intro
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
P : (J : Finset ι) → Measure ((j : { x // x ∈ J }) → α ↑j)
I✝ J : Finset ι
hP : IsProjectiveMeasureFamily P
S : Set ((i : { x // x ∈ I✝ }) → α ↑i)
T : Set ((i : { x // x ∈ J }) → α ↑i)
hT : MeasurableSet T
h_eq : cylinder I✝ S = cylinder J T
hJI : J ⊆ I✝
I : Finset ι
i : ι
hi_empty : IsEmpty (α i)
⊢ (P I) univ = 0
state_after: case inl.intro
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
P : (J : Finset ι) → Measure ((j : { x // x ∈ J }) → α ↑j)
I✝ J : Finset ι
hP : IsProjectiveMeasureFamily P
S : Set ((i : { x // x ∈ I✝ }) → α ↑i)
T : Set ((i : { x // x ∈ J }) → α ↑i)
hT : MeasurableSet T
h_eq : cylinder I✝ S = cylinder J T
hJI : J ⊆ I✝
I : Finset ι
i : ι
hi_empty : IsEmpty (α i)
⊢ (P {i}) univ = 0

tactic: have : (univ : Set ((j : {x // x ∈ ({i} : Finset ι)}) → α j)) = ∅ := by simp [hi_empty]
state_before: case inl.intro
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
P : (J : Finset ι) → Measure ((j : { x // x ∈ J }) → α ↑j)
I✝ J : Finset ι
hP : IsProjectiveMeasureFamily P
S : Set ((i : { x // x ∈ I✝ }) → α ↑i)
T : Set ((i : { x // x ∈ J }) → α ↑i)
hT : MeasurableSet T
h_eq : cylinder I✝ S = cylinder J T
hJI : J ⊆ I✝
I : Finset ι
i : ι
hi_empty : IsEmpty (α i)
⊢ (P {i}) univ = 0
state_after: case inl.intro
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
P : (J : Finset ι) → Measure ((j : { x // x ∈ J }) → α ↑j)
I✝ J : Finset ι
hP : IsProjectiveMeasureFamily P
S : Set ((i : { x // x ∈ I✝ }) → α ↑i)
T : Set ((i : { x // x ∈ J }) → α ↑i)
hT : MeasurableSet T
h_eq : cylinder I✝ S = cylinder J T
hJI : J ⊆ I✝
I : Finset ι
i : ι
hi_empty : IsEmpty (α i)
this : univ = ∅
⊢ (P {i}) univ = 0

tactic: simp [this]
state_before: case inl.intro
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
P : (J : Finset ι) → Measure ((j : { x // x ∈ J }) → α ↑j)
I✝ J : Finset ι
hP : IsProjectiveMeasureFamily P
S : Set ((i : { x // x ∈ I✝ }) → α ↑i)
T : Set ((i : { x // x ∈ J }) → α ↑i)
hT : MeasurableSet T
h_eq : cylinder I✝ S = cylinder J T
hJI : J ⊆ I✝
I : Finset ι
i : ι
hi_empty : IsEmpty (α i)
this : univ = ∅
⊢ (P {i}) univ = 0
state_after: no goals

tactic: simp only [Measure.measure_univ_eq_zero] at this
state_before: ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
P : (J : Finset ι) → Measure ((j : { x // x ∈ J }) → α ↑j)
I J : Finset ι
hP : IsProjectiveMeasureFamily P
S : Set ((i : { x // x ∈ I }) → α ↑i)
T : Set ((i : { x // x ∈ J }) → α ↑i)
hT : MeasurableSet T
h_eq : cylinder I S = cylinder J T
hJI : J ⊆ I
h : IsEmpty ((i : ι) → α i)
this : ∀ (I : Finset ι), (P I) univ = 0
⊢ (P I) S = (P J) T
state_after: ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
P : (J : Finset ι) → Measure ((j : { x // x ∈ J }) → α ↑j)
I J : Finset ι
hP : IsProjectiveMeasureFamily P
S : Set ((i : { x // x ∈ I }) → α ↑i)
T : Set ((i : { x // x ∈ J }) → α ↑i)
hT : MeasurableSet T
h_eq : cylinder I S = cylinder J T
hJI : J ⊆ I
h : IsEmpty ((i : ι) → α i)
this : ∀ (I : Finset ι), P I = 0
⊢ (P I) S = (P J) T

tactic: simp [this]
state_before: ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
P : (J : Finset ι) → Measure ((j : { x // x ∈ J }) → α ↑j)
I J : Finset ι
hP : IsProjectiveMeasureFamily P
S : Set ((i : { x // x ∈ I }) → α ↑i)
T : Set ((i : { x // x ∈ J }) → α ↑i)
hT : MeasurableSet T
h_eq : cylinder I S = cylinder J T
hJI : J ⊆ I
h : IsEmpty ((i : ι) → α i)
this : ∀ (I : Finset ι), P I = 0
⊢ (P I) S = (P J) T
state_after: no goals

tactic: simp [hi_empty]
state_before: ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
P : (J : Finset ι) → Measure ((j : { x // x ∈ J }) → α ↑j)
I✝ J : Finset ι
hP : IsProjectiveMeasureFamily P
S : Set ((i : { x // x ∈ I✝ }) → α ↑i)
T : Set ((i : { x // x ∈ J }) → α ↑i)
hT : MeasurableSet T
h_eq : cylinder I✝ S = cylinder J T
hJI : J ⊆ I✝
I : Finset ι
i : ι
hi_empty : IsEmpty (α i)
⊢ univ = ∅
state_after: no goals

tactic: have : S = (fun f : ∀ i : I, α i ↦ fun j : J ↦ f ⟨j, hJI j.prop⟩) ⁻¹' T :=
  eq_of_cylinder_eq_of_subset h_eq hJI
state_before: case inr
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
P : (J : Finset ι) → Measure ((j : { x // x ∈ J }) → α ↑j)
I J : Finset ι
hP : IsProjectiveMeasureFamily P
S : Set ((i : { x // x ∈ I }) → α ↑i)
T : Set ((i : { x // x ∈ J }) → α ↑i)
hT : MeasurableSet T
h_eq : cylinder I S = cylinder J T
hJI : J ⊆ I
h : Nonempty ((i : ι) → α i)
⊢ (P I) S = (P J) T
state_after: case inr
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
P : (J : Finset ι) → Measure ((j : { x // x ∈ J }) → α ↑j)
I J : Finset ι
hP : IsProjectiveMeasureFamily P
S : Set ((i : { x // x ∈ I }) → α ↑i)
T : Set ((i : { x // x ∈ J }) → α ↑i)
hT : MeasurableSet T
h_eq : cylinder I S = cylinder J T
hJI : J ⊆ I
h : Nonempty ((i : ι) → α i)
this : S = (fun f j => f ⟨↑j, ⋯⟩) ⁻¹' T
⊢ (P I) S = (P J) T

tactic: rw [hP I J hJI, Measure.map_apply _ hT, this]
state_before: case inr
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
P : (J : Finset ι) → Measure ((j : { x // x ∈ J }) → α ↑j)
I J : Finset ι
hP : IsProjectiveMeasureFamily P
S : Set ((i : { x // x ∈ I }) → α ↑i)
T : Set ((i : { x // x ∈ J }) → α ↑i)
hT : MeasurableSet T
h_eq : cylinder I S = cylinder J T
hJI : J ⊆ I
h : Nonempty ((i : ι) → α i)
this : S = (fun f j => f ⟨↑j, ⋯⟩) ⁻¹' T
⊢ (P I) S = (P J) T
state_after: ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
P : (J : Finset ι) → Measure ((j : { x // x ∈ J }) → α ↑j)
I J : Finset ι
hP : IsProjectiveMeasureFamily P
S : Set ((i : { x // x ∈ I }) → α ↑i)
T : Set ((i : { x // x ∈ J }) → α ↑i)
hT : MeasurableSet T
h_eq : cylinder I S = cylinder J T
hJI : J ⊆ I
h : Nonempty ((i : ι) → α i)
this : S = (fun f j => f ⟨↑j, ⋯⟩) ⁻¹' T
⊢ Measurable fun x j => x ⟨↑j, ⋯⟩

tactic: exact measurable_pi_lambda _ (fun _ ↦ measurable_pi_apply _)
state_before: ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
P : (J : Finset ι) → Measure ((j : { x // x ∈ J }) → α ↑j)
I J : Finset ι
hP : IsProjectiveMeasureFamily P
S : Set ((i : { x // x ∈ I }) → α ↑i)
T : Set ((i : { x // x ∈ J }) → α ↑i)
hT : MeasurableSet T
h_eq : cylinder I S = cylinder J T
hJI : J ⊆ I
h : Nonempty ((i : ι) → α i)
this : S = (fun f j => f ⟨↑j, ⋯⟩) ⁻¹' T
⊢ Measurable fun x j => x ⟨↑j, ⋯⟩
state_after: no goals