Theorem: piiUnionInter_singleton_left
File: Mathlib/MeasureTheory/PiSystem.lean

Proof steps:
state_before: α : Type u_1
ι : Type u_2
s : ι → Set α
S : Set ι
⊢ piiUnionInter (fun i => {s i}) S = {s' | ∃ t, ∃ (_ : ↑t ⊆ S), s' = ⋂ i ∈ t, s i}
state_after: case h
α : Type u_1
ι : Type u_2
s : ι → Set α
S : Set ι
s' : Set α
⊢ s' ∈ piiUnionInter (fun i => {s i}) S ↔ s' ∈ {s' | ∃ t, ∃ (_ : ↑t ⊆ S), s' = ⋂ i ∈ t, s i}
tactic: ext1 s'
state_before: case h
α : Type u_1
ι : Type u_2
s : ι → Set α
S : Set ι
s' : Set α
⊢ s' ∈ piiUnionInter (fun i => {s i}) S ↔ s' ∈ {s' | ∃ t, ∃ (_ : ↑t ⊆ S), s' = ⋂ i ∈ t, s i}
state_after: case h
α : Type u_1
ι : Type u_2
s : ι → Set α
S : Set ι
s' : Set α
⊢ (∃ t, ↑t ⊆ S ∧ ∃ f, (∀ x ∈ t, f x = s x) ∧ s' = ⋂ x ∈ t, f x) ↔ ∃ t, ↑t ⊆ S ∧ s' = ⋂ i ∈ t, s i
tactic: simp_rw [piiUnionInter, Set.mem_singleton_iff, exists_prop, Set.mem_setOf_eq]
state_before: case h
α : Type u_1
ι : Type u_2
s : ι → Set α
S : Set ι
s' : Set α
⊢ (∃ t, ↑t ⊆ S ∧ ∃ f, (∀ x ∈ t, f x = s x) ∧ s' = ⋂ x ∈ t, f x) ↔ ∃ t, ↑t ⊆ S ∧ s' = ⋂ i ∈ t, s i
state_after: case h
α : Type u_1
ι : Type u_2
s : ι → Set α
S : Set ι
s' : Set α
h : ∃ t, ↑t ⊆ S ∧ ∃ f, (∀ x ∈ t, f x = s x) ∧ s' = ⋂ x ∈ t, f x
⊢ ∃ t, ↑t ⊆ S ∧ s' = ⋂ i ∈ t, s i
tactic: refine ⟨fun h => ?_, fun ⟨t, htS, h_eq⟩ => ⟨t, htS, s, fun _ _ => rfl, h_eq⟩⟩
state_before: case h
α : Type u_1
ι : Type u_2
s : ι → Set α
S : Set ι
s' : Set α
h : ∃ t, ↑t ⊆ S ∧ ∃ f, (∀ x ∈ t, f x = s x) ∧ s' = ⋂ x ∈ t, f x
⊢ ∃ t, ↑t ⊆ S ∧ s' = ⋂ i ∈ t, s i
state_after: case h.intro.intro.intro.intro
α : Type u_1
ι : Type u_2
s : ι → Set α
S : Set ι
t : Finset ι
htS : ↑t ⊆ S
f : ι → Set α
hft_eq : ∀ x ∈ t, f x = s x
⊢ ∃ t_1, ↑t_1 ⊆ S ∧ ⋂ x ∈ t, f x = ⋂ i ∈ t_1, s i
tactic: obtain ⟨t, htS, f, hft_eq, rfl⟩ := h
state_before: case h.intro.intro.intro.intro
α : Type u_1
ι : Type u_2
s : ι → Set α
S : Set ι
t : Finset ι
htS : ↑t ⊆ S
f : ι → Set α
hft_eq : ∀ x ∈ t, f x = s x
⊢ ∃ t_1, ↑t_1 ⊆ S ∧ ⋂ x ∈ t, f x = ⋂ i ∈ t_1, s i
state_after: case h.intro.intro.intro.intro
α : Type u_1
ι : Type u_2
s : ι → Set α
S : Set ι
t : Finset ι
htS : ↑t ⊆ S
f : ι → Set α
hft_eq : ∀ x ∈ t, f x = s x
⊢ ⋂ x ∈ t, f x = ⋂ i ∈ t, s i
tactic: refine ⟨t, htS, ?_⟩
state_before: case h.intro.intro.intro.intro
α : Type u_1
ι : Type u_2
s : ι → Set α
S : Set ι
t : Finset ι
htS : ↑t ⊆ S
f : ι → Set α
hft_eq : ∀ x ∈ t, f x = s x
⊢ ⋂ x ∈ t, f x = ⋂ i ∈ t, s i
state_after: case h.intro.intro.intro.intro.h.e'_3.h.f
α : Type u_1
ι : Type u_2
s : ι → Set α
S : Set ι
t : Finset ι
htS : ↑t ⊆ S
f : ι → Set α
hft_eq : ∀ x ∈ t, f x = s x
x✝¹ : ι
x✝ : x✝¹ ∈ t
⊢ f x✝¹ = s x✝¹
tactic: congr! 3
state_before: case h.intro.intro.intro.intro.h.e'_3.h.f
α : Type u_1
ι : Type u_2
s : ι → Set α
S : Set ι
t : Finset ι
htS : ↑t ⊆ S
f : ι → Set α
hft_eq : ∀ x ∈ t, f x = s x
x✝¹ : ι
x✝ : x✝¹ ∈ t
⊢ f x✝¹ = s x✝¹
state_after: case h.intro.intro.intro.intro.h.e'_3.h.f.a
α : Type u_1
ι : Type u_2
s : ι → Set α
S : Set ι
t : Finset ι
htS : ↑t ⊆ S
f : ι → Set α
hft_eq : ∀ x ∈ t, f x = s x
x✝¹ : ι
x✝ : x✝¹ ∈ t
⊢ x✝¹ ∈ t
tactic: apply hft_eq
state_before: case h.intro.intro.intro.intro.h.e'_3.h.f.a
α : Type u_1
ι : Type u_2
s : ι → Set α
S : Set ι
t : Finset ι
htS : ↑t ⊆ S
f : ι → Set α
hft_eq : ∀ x ∈ t, f x = s x
x✝¹ : ι
x✝ : x✝¹ ∈ t
⊢ x✝¹ ∈ t
state_after: no goals
tactic: assumption