have res := (Filter.inhabitedMem (α := α) (f := F)).default
exact ⟨res.val, res.prop⟩
theorem TopologicalSpace.IsTopologicalBasis.contains_point {α : Type _} [TopologicalSpace α]
{B : Set (Set α)} (B_basis : TopologicalSpace.IsTopologicalBasis B) (p : α) :
∃ S : Set α, S ∈ B ∧ p ∈ S :=
by
have nhds_basis := B_basis.nhds_hasBasis (a := p)
rw [Filter.hasBasis_iff] at nhds_basis
let ⟨S₁, S₁_in_nhds⟩ := Filter.NeBot.choose (𝓝 p)
let ⟨S, ⟨⟨S_in_B, p_in_S⟩, _⟩⟩ := (nhds_basis S₁).mp S₁_in_nhds
exact ⟨S, S_in_B, p_in_S⟩
-- The collection of all the sets in `B` (a topological basis of `α`), such that `p` is in them.
def TopologicalBasisContaining {α : Type _} [TopologicalSpace α]
{B : Set (Set α)} (B_basis : TopologicalSpace.IsTopologicalBasis B) (p : α) : FilterBasis α
where
sets := {b ∈ B | p ∈ b}
nonempty := by
let ⟨S, S_in_B, p_in_S⟩ := TopologicalSpace.IsTopologicalBasis.contains_point B_basis p
use S
simp
tauto
inter_sets := by
intro S T ⟨S_in_B, p_in_S⟩ ⟨T_in_B, p_in_T⟩
have S_in_nhds := B_basis.mem_nhds_iff.mpr ⟨S, S_in_B, ⟨p_in_S, Eq.subset rfl⟩⟩
have T_in_nhds := B_basis.mem_nhds_iff.mpr ⟨T, T_in_B, ⟨p_in_T, Eq.subset rfl⟩⟩
have ST_in_nhds : S ∩ T ∈ 𝓝 p := Filter.inter_mem S_in_nhds T_in_nhds
rw [B_basis.mem_nhds_iff] at ST_in_nhds
let ⟨U, props⟩ := ST_in_nhds
use U
simp
simp at props
tauto
theorem TopologicalBasisContaining.mem_iff {α : Type _} [TopologicalSpace α]
{B : Set (Set α)} (B_basis : TopologicalSpace.IsTopologicalBasis B) (p : α) (S : Set α) :
S ∈ TopologicalBasisContaining B_basis p ↔ S ∈ B ∧ p ∈ S :=
by
rw [<-FilterBasis.mem_sets]
rfl
theorem TopologicalBasisContaining.mem_nhds {α : Type _} [TopologicalSpace α]
{B : Set (Set α)} (B_basis : TopologicalSpace.IsTopologicalBasis B) (p : α) (S : Set α) :
S ∈ TopologicalBasisContaining B_basis p → S ∈ 𝓝 p :=
by
rw [TopologicalBasisContaining.mem_iff]
rw [B_basis.mem_nhds_iff]
intro ⟨S_in_B, p_in_S⟩
use S
instance TopologicalBasisContaining.neBot {α : Type _} [TopologicalSpace α]
{B : Set (Set α)} (B_basis : TopologicalSpace.IsTopologicalBasis B) (p : α) :
Filter.NeBot (TopologicalBasisContaining B_basis p).filter where
ne' := by
intro empty_in
rw [<-Filter.empty_mem_iff_bot, FilterBasis.mem_filter_iff] at empty_in
let ⟨S, ⟨S_in_basis, S_ss_empty⟩⟩ := empty_in
rw [TopologicalBasisContaining.mem_iff] at S_in_basis
exact S_ss_empty S_in_basis.right
-- Note: the definition of "convergence" in the article doesn't quite match with the definition of ClusterPt
-- Instead, `F ≤ nhds p` should be used.
-- Note: Filter.HasBasis is a stronger statement than just FilterBasis - it defines a two-way relationship between a filter and a property; if the property is true for a set, then any superset of it is part of the filter, and vice-versa.
-- With this, it's impossible for there to be a finer filter satisfying the property,
-- as is evidenced by `filter_eq`: stripping away the `Filter` allows us to uniquely reconstruct it from the property itself.
-- Proposition 3.3.1 trivially follows from `TopologicalSpace.IsTopologicalBasis.nhds_hasBasis` and `disjoint_nhds_nhds`: if `F.HasBasis (S → S ∈ B ∧ p ∈ S)` and `F.HasBasis (S → S ∈ B ∧ q ∈ S)`,
-- then one can prove that `F ≤ nhds x` and `F ≤ nhds y` ~> `F = ⊥`