Theorem: Topology.IsLower.isTopologicalBasis
File: Mathlib/Topology/Order/LowerUpperTopology.lean

tactic: convert isTopologicalBasis_of_subbasis (topology_eq α)
state_before: α : Type u_1
β : ?m.7266
inst✝² : Preorder α
inst✝¹ : TopologicalSpace α
inst✝ : IsLower α
s : Set α
⊢ IsTopologicalBasis (lowerBasis α)
state_after: case h.e'_3
α : Type u_1
β : ?m.7266
inst✝² : Preorder α
inst✝¹ : TopologicalSpace α
inst✝ : IsLower α
s : Set α
⊢ lowerBasis α = (fun f => ⋂₀ f) '' {f | f.Finite ∧ f ⊆ {s | ∃ a, (Ici a)ᶜ = s}}

tactic: simp_rw [lowerBasis, coe_upperClosure, compl_iUnion]
state_before: case h.e'_3
α : Type u_1
β : ?m.7266
inst✝² : Preorder α
inst✝¹ : TopologicalSpace α
inst✝ : IsLower α
s : Set α
⊢ lowerBasis α = (fun f => ⋂₀ f) '' {f | f.Finite ∧ f ⊆ {s | ∃ a, (Ici a)ᶜ = s}}
state_after: case h.e'_3
α : Type u_1
β : ?m.7266
inst✝² : Preorder α
inst✝¹ : TopologicalSpace α
inst✝ : IsLower α
s : Set α
⊢ {s | ∃ t, t.Finite ∧ ⋂ i ∈ t, (Ici i)ᶜ = s} = (fun f => ⋂₀ f) '' {f | f.Finite ∧ f ⊆ {s | ∃ a, (Ici a)ᶜ = s}}

tactic: ext s
state_before: case h.e'_3
α : Type u_1
β : ?m.7266
inst✝² : Preorder α
inst✝¹ : TopologicalSpace α
inst✝ : IsLower α
s : Set α
⊢ {s | ∃ t, t.Finite ∧ ⋂ i ∈ t, (Ici i)ᶜ = s} = (fun f => ⋂₀ f) '' {f | f.Finite ∧ f ⊆ {s | ∃ a, (Ici a)ᶜ = s}}
state_after: case h.e'_3.h
α : Type u_1
β : ?m.7266
inst✝² : Preorder α
inst✝¹ : TopologicalSpace α
inst✝ : IsLower α
s✝ s : Set α
⊢ s ∈ {s | ∃ t, t.Finite ∧ ⋂ i ∈ t, (Ici i)ᶜ = s} ↔ s ∈ (fun f => ⋂₀ f) '' {f | f.Finite ∧ f ⊆ {s | ∃ a, (Ici a)ᶜ = s}}

tactic: constructor
state_before: case h.e'_3.h
α : Type u_1
β : ?m.7266
inst✝² : Preorder α
inst✝¹ : TopologicalSpace α
inst✝ : IsLower α
s✝ s : Set α
⊢ s ∈ {s | ∃ t, t.Finite ∧ ⋂ i ∈ t, (Ici i)ᶜ = s} ↔ s ∈ (fun f => ⋂₀ f) '' {f | f.Finite ∧ f ⊆ {s | ∃ a, (Ici a)ᶜ = s}}
state_after: case h.e'_3.h.mp
α : Type u_1
β : ?m.7266
inst✝² : Preorder α
inst✝¹ : TopologicalSpace α
inst✝ : IsLower α
s✝ s : Set α
⊢ s ∈ {s | ∃ t, t.Finite ∧ ⋂ i ∈ t, (Ici i)ᶜ = s} → s ∈ (fun f => ⋂₀ f) '' {f | f.Finite ∧ f ⊆ {s | ∃ a, (Ici a)ᶜ = s}}

case h.e'_3.h.mpr
α : Type u_1
β : ?m.7266
inst✝² : Preorder α
inst✝¹ : TopologicalSpace α
inst✝ : IsLower α
s✝ s : Set α
⊢ s ∈ (fun f => ⋂₀ f) '' {f | f.Finite ∧ f ⊆ {s | ∃ a, (Ici a)ᶜ = s}} → s ∈ {s | ∃ t, t.Finite ∧ ⋂ i ∈ t, (Ici i)ᶜ = s}

tactic: rintro ⟨F, hF, rfl⟩
state_before: case h.e'_3.h.mp
α : Type u_1
β : ?m.7266
inst✝² : Preorder α
inst✝¹ : TopologicalSpace α
inst✝ : IsLower α
s✝ s : Set α
⊢ s ∈ {s | ∃ t, t.Finite ∧ ⋂ i ∈ t, (Ici i)ᶜ = s} → s ∈ (fun f => ⋂₀ f) '' {f | f.Finite ∧ f ⊆ {s | ∃ a, (Ici a)ᶜ = s}}
state_after: case h.e'_3.h.mp.intro.intro
α : Type u_1
β : ?m.7266
inst✝² : Preorder α
inst✝¹ : TopologicalSpace α
inst✝ : IsLower α
s F : Set α
hF : F.Finite
⊢ ⋂ i ∈ F, (Ici i)ᶜ ∈ (fun f => ⋂₀ f) '' {f | f.Finite ∧ f ⊆ {s | ∃ a, (Ici a)ᶜ = s}}

tactic: refine ⟨(fun a => (Ici a)ᶜ) '' F, ⟨hF.image _, image_subset_iff.2 fun _ _ => ⟨_, rfl⟩⟩, ?_⟩
state_before: case h.e'_3.h.mp.intro.intro
α : Type u_1
β : ?m.7266
inst✝² : Preorder α
inst✝¹ : TopologicalSpace α
inst✝ : IsLower α
s F : Set α
hF : F.Finite
⊢ ⋂ i ∈ F, (Ici i)ᶜ ∈ (fun f => ⋂₀ f) '' {f | f.Finite ∧ f ⊆ {s | ∃ a, (Ici a)ᶜ = s}}
state_after: case h.e'_3.h.mp.intro.intro
α : Type u_1
β : ?m.7266
inst✝² : Preorder α
inst✝¹ : TopologicalSpace α
inst✝ : IsLower α
s F : Set α
hF : F.Finite
⊢ (fun f => ⋂₀ f) ((fun a => (Ici a)ᶜ) '' F) = ⋂ i ∈ F, (Ici i)ᶜ

tactic: simp only [sInter_image]
state_before: case h.e'_3.h.mp.intro.intro
α : Type u_1
β : ?m.7266
inst✝² : Preorder α
inst✝¹ : TopologicalSpace α
inst✝ : IsLower α
s F : Set α
hF : F.Finite
⊢ (fun f => ⋂₀ f) ((fun a => (Ici a)ᶜ) '' F) = ⋂ i ∈ F, (Ici i)ᶜ
state_after: no goals

tactic: rintro ⟨F, ⟨hF, hs⟩, rfl⟩
state_before: case h.e'_3.h.mpr
α : Type u_1
β : ?m.7266
inst✝² : Preorder α
inst✝¹ : TopologicalSpace α
inst✝ : IsLower α
s✝ s : Set α
⊢ s ∈ (fun f => ⋂₀ f) '' {f | f.Finite ∧ f ⊆ {s | ∃ a, (Ici a)ᶜ = s}} → s ∈ {s | ∃ t, t.Finite ∧ ⋂ i ∈ t, (Ici i)ᶜ = s}
state_after: case h.e'_3.h.mpr.intro.intro.intro
α : Type u_1
β : ?m.7266
inst✝² : Preorder α
inst✝¹ : TopologicalSpace α
inst✝ : IsLower α
s : Set α
F : Set (Set α)
hF : F.Finite
hs : F ⊆ {s | ∃ a, (Ici a)ᶜ = s}
⊢ (fun f => ⋂₀ f) F ∈ {s | ∃ t, t.Finite ∧ ⋂ i ∈ t, (Ici i)ᶜ = s}

tactic: haveI := hF.to_subtype
state_before: case h.e'_3.h.mpr.intro.intro.intro
α : Type u_1
β : ?m.7266
inst✝² : Preorder α
inst✝¹ : TopologicalSpace α
inst✝ : IsLower α
s : Set α
F : Set (Set α)
hF : F.Finite
hs : F ⊆ {s | ∃ a, (Ici a)ᶜ = s}
⊢ (fun f => ⋂₀ f) F ∈ {s | ∃ t, t.Finite ∧ ⋂ i ∈ t, (Ici i)ᶜ = s}
state_after: case h.e'_3.h.mpr.intro.intro.intro
α : Type u_1
β : ?m.7266
inst✝² : Preorder α
inst✝¹ : TopologicalSpace α
inst✝ : IsLower α
s : Set α
F : Set (Set α)
hF : F.Finite
hs : F ⊆ {s | ∃ a, (Ici a)ᶜ = s}
this : Finite ↑F
⊢ (fun f => ⋂₀ f) F ∈ {s | ∃ t, t.Finite ∧ ⋂ i ∈ t, (Ici i)ᶜ = s}

tactic: rw [subset_def, Subtype.forall'] at hs
state_before: case h.e'_3.h.mpr.intro.intro.intro
α : Type u_1
β : ?m.7266
inst✝² : Preorder α
inst✝¹ : TopologicalSpace α
inst✝ : IsLower α
s : Set α
F : Set (Set α)
hF : F.Finite
hs : F ⊆ {s | ∃ a, (Ici a)ᶜ = s}
this : Finite ↑F
⊢ (fun f => ⋂₀ f) F ∈ {s | ∃ t, t.Finite ∧ ⋂ i ∈ t, (Ici i)ᶜ = s}
state_after: case h.e'_3.h.mpr.intro.intro.intro
α : Type u_1
β : ?m.7266
inst✝² : Preorder α
inst✝¹ : TopologicalSpace α
inst✝ : IsLower α
s : Set α
F : Set (Set α)
hF : F.Finite
hs : ∀ (x : { a // a ∈ F }), ↑x ∈ {s | ∃ a, (Ici a)ᶜ = s}
this : Finite ↑F
⊢ (fun f => ⋂₀ f) F ∈ {s | ∃ t, t.Finite ∧ ⋂ i ∈ t, (Ici i)ᶜ = s}

tactic: choose f hf using hs
state_before: case h.e'_3.h.mpr.intro.intro.intro
α : Type u_1
β : ?m.7266
inst✝² : Preorder α
inst✝¹ : TopologicalSpace α
inst✝ : IsLower α
s : Set α
F : Set (Set α)
hF : F.Finite
hs : ∀ (x : { a // a ∈ F }), ↑x ∈ {s | ∃ a, (Ici a)ᶜ = s}
this : Finite ↑F
⊢ (fun f => ⋂₀ f) F ∈ {s | ∃ t, t.Finite ∧ ⋂ i ∈ t, (Ici i)ᶜ = s}
state_after: case h.e'_3.h.mpr.intro.intro.intro
α : Type u_1
β : ?m.7266
inst✝² : Preorder α
inst✝¹ : TopologicalSpace α
inst✝ : IsLower α
s : Set α
F : Set (Set α)
hF : F.Finite
this : Finite ↑F
f : { a // a ∈ F } → α
hf : ∀ (x : { a // a ∈ F }), (Ici (f x))ᶜ = ↑x
⊢ (fun f => ⋂₀ f) F ∈ {s | ∃ t, t.Finite ∧ ⋂ i ∈ t, (Ici i)ᶜ = s}

tactic: exact ⟨_, finite_range f, by simp_rw [biInter_range, hf, sInter_eq_iInter]⟩
state_before: case h.e'_3.h.mpr.intro.intro.intro
α : Type u_1
β : ?m.7266
inst✝² : Preorder α
inst✝¹ : TopologicalSpace α
inst✝ : IsLower α
s : Set α
F : Set (Set α)
hF : F.Finite
this : Finite ↑F
f : { a // a ∈ F } → α
hf : ∀ (x : { a // a ∈ F }), (Ici (f x))ᶜ = ↑x
⊢ (fun f => ⋂₀ f) F ∈ {s | ∃ t, t.Finite ∧ ⋂ i ∈ t, (Ici i)ᶜ = s}
state_after: no goals

tactic: simp_rw [biInter_range, hf, sInter_eq_iInter]
state_before: α : Type u_1
β : ?m.7266
inst✝² : Preorder α
inst✝¹ : TopologicalSpace α
inst✝ : IsLower α
s : Set α
F : Set (Set α)
hF : F.Finite
this : Finite ↑F
f : { a // a ∈ F } → α
hf : ∀ (x : { a // a ∈ F }), (Ici (f x))ᶜ = ↑x
⊢ ⋂ i ∈ range f, (Ici i)ᶜ = (fun f => ⋂₀ f) F
state_after: no goals