Theorem: TopologicalSpace.IsTopologicalBasis.sigma
File: Mathlib/Topology/Bases.lean

tactic: apply isTopologicalBasis_of_open_of_nhds
state_before: α : Type u
t : TopologicalSpace α
ι : Type u_2
E : ι → Type u_1
inst✝ : (i : ι) → TopologicalSpace (E i)
s : (i : ι) → Set (Set (E i))
hs : ∀ (i : ι), IsTopologicalBasis (s i)
⊢ IsTopologicalBasis (⋃ (i : ι), (fun u => Sigma.mk i '' u) '' s i)

tactic: intro u hu
state_before: case h_open
α : Type u
t : TopologicalSpace α
ι : Type u_2
E : ι → Type u_1
inst✝ : (i : ι) → TopologicalSpace (E i)
s : (i : ι) → Set (Set (E i))
hs : ∀ (i : ι), IsTopologicalBasis (s i)
⊢ ∀ (u : Set ((i : ι) × E i)), (u ∈ ⋃ (i : ι), (fun u => Sigma.mk i '' u) '' s i) → IsOpen u

tactic: obtain ⟨i, t, ts, rfl⟩ : ∃ (i : ι) (t : Set (E i)), t ∈ s i ∧ Sigma.mk i '' t = u := by
  simpa only [mem_iUnion, mem_image] using hu
state_before: case h_open
α : Type u
t : TopologicalSpace α
ι : Type u_2
E : ι → Type u_1
inst✝ : (i : ι) → TopologicalSpace (E i)
s : (i : ι) → Set (Set (E i))
hs : ∀ (i : ι), IsTopologicalBasis (s i)
u : Set ((i : ι) × E i)
hu : u ∈ ⋃ (i : ι), (fun u => Sigma.mk i '' u) '' s i
⊢ IsOpen u

tactic: exact isOpenMap_sigmaMk _ ((hs i).isOpen ts)
state_before: case h_open.intro.intro.intro
α : Type u
t✝ : TopologicalSpace α
ι : Type u_2
E : ι → Type u_1
inst✝ : (i : ι) → TopologicalSpace (E i)
s : (i : ι) → Set (Set (E i))
hs : ∀ (i : ι), IsTopologicalBasis (s i)
i : ι
t : Set (E i)
ts : t ∈ s i
hu : Sigma.mk i '' t ∈ ⋃ (i : ι), (fun u => Sigma.mk i '' u) '' s i
⊢ IsOpen (Sigma.mk i '' t)

tactic: simpa only [mem_iUnion, mem_image] using hu
state_before: α : Type u
t : TopologicalSpace α
ι : Type u_2
E : ι → Type u_1
inst✝ : (i : ι) → TopologicalSpace (E i)
s : (i : ι) → Set (Set (E i))
hs : ∀ (i : ι), IsTopologicalBasis (s i)
u : Set ((i : ι) × E i)
hu : u ∈ ⋃ (i : ι), (fun u => Sigma.mk i '' u) '' s i
⊢ ∃ i t, t ∈ s i ∧ Sigma.mk i '' t = u

tactic: rintro ⟨i, x⟩ u hxu u_open
state_before: case h_nhds
α : Type u
t : TopologicalSpace α
ι : Type u_2
E : ι → Type u_1
inst✝ : (i : ι) → TopologicalSpace (E i)
s : (i : ι) → Set (Set (E i))
hs : ∀ (i : ι), IsTopologicalBasis (s i)
⊢ ∀ (a : (i : ι) × E i) (u : Set ((i : ι) × E i)),
    a ∈ u → IsOpen u → ∃ v, (v ∈ ⋃ (i : ι), (fun u => Sigma.mk i '' u) '' s i) ∧ a ∈ v ∧ v ⊆ u

tactic: have hx : x ∈ Sigma.mk i ⁻¹' u := hxu
state_before: case h_nhds.mk
α : Type u
t : TopologicalSpace α
ι : Type u_2
E : ι → Type u_1
inst✝ : (i : ι) → TopologicalSpace (E i)
s : (i : ι) → Set (Set (E i))
hs : ∀ (i : ι), IsTopologicalBasis (s i)
i : ι
x : E i
u : Set ((i : ι) × E i)
hxu : { fst := i, snd := x } ∈ u
u_open : IsOpen u
⊢ ∃ v, (v ∈ ⋃ (i : ι), (fun u => Sigma.mk i '' u) '' s i) ∧ { fst := i, snd := x } ∈ v ∧ v ⊆ u

tactic: obtain ⟨v, vs, xv, hv⟩ : ∃ (v : Set (E i)), v ∈ s i ∧ x ∈ v ∧ v ⊆ Sigma.mk i ⁻¹' u :=
  (hs i).exists_subset_of_mem_open hx (isOpen_sigma_iff.1 u_open i)
state_before: case h_nhds.mk
α : Type u
t : TopologicalSpace α
ι : Type u_2
E : ι → Type u_1
inst✝ : (i : ι) → TopologicalSpace (E i)
s : (i : ι) → Set (Set (E i))
hs : ∀ (i : ι), IsTopologicalBasis (s i)
i : ι
x : E i
u : Set ((i : ι) × E i)
hxu : { fst := i, snd := x } ∈ u
u_open : IsOpen u
hx : x ∈ Sigma.mk i ⁻¹' u
⊢ ∃ v, (v ∈ ⋃ (i : ι), (fun u => Sigma.mk i '' u) '' s i) ∧ { fst := i, snd := x } ∈ v ∧ v ⊆ u

tactic: exact
  ⟨Sigma.mk i '' v, mem_iUnion.2 ⟨i, mem_image_of_mem _ vs⟩, mem_image_of_mem _ xv,
    image_subset_iff.2 hv⟩
state_before: case h_nhds.mk.intro.intro.intro
α : Type u
t : TopologicalSpace α
ι : Type u_2
E : ι → Type u_1
inst✝ : (i : ι) → TopologicalSpace (E i)
s : (i : ι) → Set (Set (E i))
hs : ∀ (i : ι), IsTopologicalBasis (s i)
i : ι
x : E i
u : Set ((i : ι) × E i)
hxu : { fst := i, snd := x } ∈ u
u_open : IsOpen u
hx : x ∈ Sigma.mk i ⁻¹' u
v : Set (E i)
vs : v ∈ s i
xv : x ∈ v
hv : v ⊆ Sigma.mk i ⁻¹' u
⊢ ∃ v, (v ∈ ⋃ (i : ι), (fun u => Sigma.mk i '' u) '' s i) ∧ { fst := i, snd := x } ∈ v ∧ v ⊆ u