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

tactic: let U := (fun f : ∀ i : (I ∪ J : Finset ι), α i
      ↦ fun j : I ↦ f ⟨j, Finset.mem_union_left J j.prop⟩) ⁻¹' S ∩
    (fun f ↦ fun j : J ↦ f ⟨j, Finset.mem_union_right I j.prop⟩) ⁻¹' T
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)
hS : MeasurableSet S
hT : MeasurableSet T
h_eq : cylinder I S = cylinder 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)
hS : MeasurableSet S
hT : MeasurableSet T
h_eq : cylinder I S = cylinder J T
U : Set ((i : { x // x ∈ I ∪ J }) → α ↑i) := (fun f j => f ⟨↑j, ⋯⟩) ⁻¹' S ∩ (fun f j => f ⟨↑j, ⋯⟩) ⁻¹' T
⊢ (P I) S = (P J) T

tactic: suffices P (I ∪ J) U = P I S ∧ P (I ∪ J) U = P J T from this.1.symm.trans this.2
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)
hS : MeasurableSet S
hT : MeasurableSet T
h_eq : cylinder I S = cylinder J T
U : Set ((i : { x // x ∈ I ∪ J }) → α ↑i) := (fun f j => f ⟨↑j, ⋯⟩) ⁻¹' 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)
hS : MeasurableSet S
hT : MeasurableSet T
h_eq : cylinder I S = cylinder J T
U : Set ((i : { x // x ∈ I ∪ J }) → α ↑i) := (fun f j => f ⟨↑j, ⋯⟩) ⁻¹' S ∩ (fun f j => f ⟨↑j, ⋯⟩) ⁻¹' T
⊢ (P (I ∪ J)) U = (P I) S ∧ (P (I ∪ J)) U = (P J) T

tactic: constructor
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)
hS : MeasurableSet S
hT : MeasurableSet T
h_eq : cylinder I S = cylinder J T
U : Set ((i : { x // x ∈ I ∪ J }) → α ↑i) := (fun f j => f ⟨↑j, ⋯⟩) ⁻¹' S ∩ (fun f j => f ⟨↑j, ⋯⟩) ⁻¹' T
⊢ (P (I ∪ J)) U = (P I) S ∧ (P (I ∪ J)) U = (P J) T
state_after: case left
ι : 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)
hS : MeasurableSet S
hT : MeasurableSet T
h_eq : cylinder I S = cylinder J T
U : Set ((i : { x // x ∈ I ∪ J }) → α ↑i) := (fun f j => f ⟨↑j, ⋯⟩) ⁻¹' S ∩ (fun f j => f ⟨↑j, ⋯⟩) ⁻¹' T
⊢ (P (I ∪ J)) U = (P I) S

case right
ι : 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)
hS : MeasurableSet S
hT : MeasurableSet T
h_eq : cylinder I S = cylinder J T
U : Set ((i : { x // x ∈ I ∪ J }) → α ↑i) := (fun f j => f ⟨↑j, ⋯⟩) ⁻¹' S ∩ (fun f j => f ⟨↑j, ⋯⟩) ⁻¹' T
⊢ (P (I ∪ J)) U = (P J) T

tactic: have h_eq_union : cylinder I S = cylinder (I ∪ J) U := by
  rw [← inter_cylinder, h_eq, inter_self]
state_before: case left
ι : 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)
hS : MeasurableSet S
hT : MeasurableSet T
h_eq : cylinder I S = cylinder J T
U : Set ((i : { x // x ∈ I ∪ J }) → α ↑i) := (fun f j => f ⟨↑j, ⋯⟩) ⁻¹' S ∩ (fun f j => f ⟨↑j, ⋯⟩) ⁻¹' T
⊢ (P (I ∪ J)) U = (P I) S
state_after: case left
ι : 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)
hS : MeasurableSet S
hT : MeasurableSet T
h_eq : cylinder I S = cylinder J T
U : Set ((i : { x // x ∈ I ∪ J }) → α ↑i) := (fun f j => f ⟨↑j, ⋯⟩) ⁻¹' S ∩ (fun f j => f ⟨↑j, ⋯⟩) ⁻¹' T
h_eq_union : cylinder I S = cylinder (I ∪ J) U
⊢ (P (I ∪ J)) U = (P I) S

tactic: exact hP.congr_cylinder_of_subset hS h_eq_union.symm Finset.subset_union_left
state_before: case left
ι : 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)
hS : MeasurableSet S
hT : MeasurableSet T
h_eq : cylinder I S = cylinder J T
U : Set ((i : { x // x ∈ I ∪ J }) → α ↑i) := (fun f j => f ⟨↑j, ⋯⟩) ⁻¹' S ∩ (fun f j => f ⟨↑j, ⋯⟩) ⁻¹' T
h_eq_union : cylinder I S = cylinder (I ∪ J) U
⊢ (P (I ∪ J)) U = (P I) S
state_after: no goals

tactic: rw [← inter_cylinder, h_eq, inter_self]
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)
hS : MeasurableSet S
hT : MeasurableSet T
h_eq : cylinder I S = cylinder J T
U : Set ((i : { x // x ∈ I ∪ J }) → α ↑i) := (fun f j => f ⟨↑j, ⋯⟩) ⁻¹' S ∩ (fun f j => f ⟨↑j, ⋯⟩) ⁻¹' T
⊢ cylinder I S = cylinder (I ∪ J) U
state_after: no goals

tactic: have h_eq_union : cylinder J T = cylinder (I ∪ J) U := by
  rw [← inter_cylinder, h_eq, inter_self]
state_before: case right
ι : 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)
hS : MeasurableSet S
hT : MeasurableSet T
h_eq : cylinder I S = cylinder J T
U : Set ((i : { x // x ∈ I ∪ J }) → α ↑i) := (fun f j => f ⟨↑j, ⋯⟩) ⁻¹' S ∩ (fun f j => f ⟨↑j, ⋯⟩) ⁻¹' T
⊢ (P (I ∪ J)) U = (P J) T
state_after: case right
ι : 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)
hS : MeasurableSet S
hT : MeasurableSet T
h_eq : cylinder I S = cylinder J T
U : Set ((i : { x // x ∈ I ∪ J }) → α ↑i) := (fun f j => f ⟨↑j, ⋯⟩) ⁻¹' S ∩ (fun f j => f ⟨↑j, ⋯⟩) ⁻¹' T
h_eq_union : cylinder J T = cylinder (I ∪ J) U
⊢ (P (I ∪ J)) U = (P J) T

tactic: exact hP.congr_cylinder_of_subset hT h_eq_union.symm Finset.subset_union_right
state_before: case right
ι : 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)
hS : MeasurableSet S
hT : MeasurableSet T
h_eq : cylinder I S = cylinder J T
U : Set ((i : { x // x ∈ I ∪ J }) → α ↑i) := (fun f j => f ⟨↑j, ⋯⟩) ⁻¹' S ∩ (fun f j => f ⟨↑j, ⋯⟩) ⁻¹' T
h_eq_union : cylinder J T = cylinder (I ∪ J) U
⊢ (P (I ∪ J)) U = (P J) T
state_after: no goals

tactic: rw [← inter_cylinder, h_eq, inter_self]
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)
hS : MeasurableSet S
hT : MeasurableSet T
h_eq : cylinder I S = cylinder J T
U : Set ((i : { x // x ∈ I ∪ J }) → α ↑i) := (fun f j => f ⟨↑j, ⋯⟩) ⁻¹' S ∩ (fun f j => f ⟨↑j, ⋯⟩) ⁻¹' T
⊢ cylinder J T = cylinder (I ∪ J) U
state_after: no goals