Theorem: MeasureTheory.inter_mem_measurableCylinders
File: Mathlib/MeasureTheory/Constructions/Cylinders.lean

tactic: rw [mem_measurableCylinders] at *
state_before: ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
s t : Set ((i : ι) → α i)
hs : s ∈ measurableCylinders α
ht : t ∈ measurableCylinders α
⊢ s ∩ t ∈ measurableCylinders α
state_after: ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
s t : Set ((i : ι) → α i)
hs : ∃ s_1 S, MeasurableSet S ∧ s = cylinder s_1 S
ht : ∃ s S, MeasurableSet S ∧ t = cylinder s S
⊢ ∃ s_1 S, MeasurableSet S ∧ s ∩ t = cylinder s_1 S

tactic: obtain ⟨s₁, S₁, hS₁, rfl⟩ := hs
state_before: ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
s t : Set ((i : ι) → α i)
hs : ∃ s_1 S, MeasurableSet S ∧ s = cylinder s_1 S
ht : ∃ s S, MeasurableSet S ∧ t = cylinder s S
⊢ ∃ s_1 S, MeasurableSet S ∧ s ∩ t = cylinder s_1 S
state_after: case intro.intro.intro
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
t : Set ((i : ι) → α i)
ht : ∃ s S, MeasurableSet S ∧ t = cylinder s S
s₁ : Finset ι
S₁ : Set ((i : { x // x ∈ s₁ }) → α ↑i)
hS₁ : MeasurableSet S₁
⊢ ∃ s S, MeasurableSet S ∧ cylinder s₁ S₁ ∩ t = cylinder s S

tactic: obtain ⟨s₂, S₂, hS₂, rfl⟩ := ht
state_before: case intro.intro.intro
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
t : Set ((i : ι) → α i)
ht : ∃ s S, MeasurableSet S ∧ t = cylinder s S
s₁ : Finset ι
S₁ : Set ((i : { x // x ∈ s₁ }) → α ↑i)
hS₁ : MeasurableSet S₁
⊢ ∃ s S, MeasurableSet S ∧ cylinder s₁ S₁ ∩ t = cylinder s S
state_after: case intro.intro.intro.intro.intro.intro
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
s₁ : Finset ι
S₁ : Set ((i : { x // x ∈ s₁ }) → α ↑i)
hS₁ : MeasurableSet S₁
s₂ : Finset ι
S₂ : Set ((i : { x // x ∈ s₂ }) → α ↑i)
hS₂ : MeasurableSet S₂
⊢ ∃ s S, MeasurableSet S ∧ cylinder s₁ S₁ ∩ cylinder s₂ S₂ = cylinder s S

tactic: refine ⟨s₁ ∪ s₂,
  (fun f ↦ (fun i ↦ f ⟨i, Finset.mem_union_left s₂ i.prop⟩ : ∀ i : s₁, α i)) ⁻¹' S₁ ∩
    {f | (fun i ↦ f ⟨i, Finset.mem_union_right s₁ i.prop⟩ : ∀ i : s₂, α i) ∈ S₂}, ?_, ?_⟩
state_before: case intro.intro.intro.intro.intro.intro
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
s₁ : Finset ι
S₁ : Set ((i : { x // x ∈ s₁ }) → α ↑i)
hS₁ : MeasurableSet S₁
s₂ : Finset ι
S₂ : Set ((i : { x // x ∈ s₂ }) → α ↑i)
hS₂ : MeasurableSet S₂
⊢ ∃ s S, MeasurableSet S ∧ cylinder s₁ S₁ ∩ cylinder s₂ S₂ = cylinder s S
state_after: case intro.intro.intro.intro.intro.intro.refine_1
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
s₁ : Finset ι
S₁ : Set ((i : { x // x ∈ s₁ }) → α ↑i)
hS₁ : MeasurableSet S₁
s₂ : Finset ι
S₂ : Set ((i : { x // x ∈ s₂ }) → α ↑i)
hS₂ : MeasurableSet S₂
⊢ MeasurableSet ((fun f i => f ⟨↑i, ⋯⟩) ⁻¹' S₁ ∩ {f | (fun i => f ⟨↑i, ⋯⟩) ∈ S₂})

case intro.intro.intro.intro.intro.intro.refine_2
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
s₁ : Finset ι
S₁ : Set ((i : { x // x ∈ s₁ }) → α ↑i)
hS₁ : MeasurableSet S₁
s₂ : Finset ι
S₂ : Set ((i : { x // x ∈ s₂ }) → α ↑i)
hS₂ : MeasurableSet S₂
⊢ cylinder s₁ S₁ ∩ cylinder s₂ S₂ = cylinder (s₁ ∪ s₂) ((fun f i => f ⟨↑i, ⋯⟩) ⁻¹' S₁ ∩ {f | (fun i => f ⟨↑i, ⋯⟩) ∈ S₂})

tactic: refine MeasurableSet.inter ?_ ?_
state_before: case intro.intro.intro.intro.intro.intro.refine_1
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
s₁ : Finset ι
S₁ : Set ((i : { x // x ∈ s₁ }) → α ↑i)
hS₁ : MeasurableSet S₁
s₂ : Finset ι
S₂ : Set ((i : { x // x ∈ s₂ }) → α ↑i)
hS₂ : MeasurableSet S₂
⊢ MeasurableSet ((fun f i => f ⟨↑i, ⋯⟩) ⁻¹' S₁ ∩ {f | (fun i => f ⟨↑i, ⋯⟩) ∈ S₂})
state_after: case intro.intro.intro.intro.intro.intro.refine_1.refine_1
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
s₁ : Finset ι
S₁ : Set ((i : { x // x ∈ s₁ }) → α ↑i)
hS₁ : MeasurableSet S₁
s₂ : Finset ι
S₂ : Set ((i : { x // x ∈ s₂ }) → α ↑i)
hS₂ : MeasurableSet S₂
⊢ MeasurableSet ((fun f i => f ⟨↑i, ⋯⟩) ⁻¹' S₁)

case intro.intro.intro.intro.intro.intro.refine_1.refine_2
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
s₁ : Finset ι
S₁ : Set ((i : { x // x ∈ s₁ }) → α ↑i)
hS₁ : MeasurableSet S₁
s₂ : Finset ι
S₂ : Set ((i : { x // x ∈ s₂ }) → α ↑i)
hS₂ : MeasurableSet S₂
⊢ MeasurableSet {f | (fun i => f ⟨↑i, ⋯⟩) ∈ S₂}

tactic: exact measurable_pi_lambda _ (fun _ ↦ measurable_pi_apply _) hS₁
state_before: case intro.intro.intro.intro.intro.intro.refine_1.refine_1
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
s₁ : Finset ι
S₁ : Set ((i : { x // x ∈ s₁ }) → α ↑i)
hS₁ : MeasurableSet S₁
s₂ : Finset ι
S₂ : Set ((i : { x // x ∈ s₂ }) → α ↑i)
hS₂ : MeasurableSet S₂
⊢ MeasurableSet ((fun f i => f ⟨↑i, ⋯⟩) ⁻¹' S₁)
state_after: no goals

tactic: exact measurable_pi_lambda _ (fun _ ↦ measurable_pi_apply _) hS₂
state_before: case intro.intro.intro.intro.intro.intro.refine_1.refine_2
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
s₁ : Finset ι
S₁ : Set ((i : { x // x ∈ s₁ }) → α ↑i)
hS₁ : MeasurableSet S₁
s₂ : Finset ι
S₂ : Set ((i : { x // x ∈ s₂ }) → α ↑i)
hS₂ : MeasurableSet S₂
⊢ MeasurableSet {f | (fun i => f ⟨↑i, ⋯⟩) ∈ S₂}
state_after: no goals

tactic: exact inter_cylinder _ _ _ _
state_before: case intro.intro.intro.intro.intro.intro.refine_2
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → MeasurableSpace (α i)
s₁ : Finset ι
S₁ : Set ((i : { x // x ∈ s₁ }) → α ↑i)
hS₁ : MeasurableSet S₁
s₂ : Finset ι
S₂ : Set ((i : { x // x ∈ s₂ }) → α ↑i)
hS₂ : MeasurableSet S₂
⊢ cylinder s₁ S₁ ∩ cylinder s₂ S₂ = cylinder (s₁ ∪ s₂) ((fun f i => f ⟨↑i, ⋯⟩) ⁻¹' S₁ ∩ {f | (fun i => f ⟨↑i, ⋯⟩) ∈ S₂})
state_after: no goals