Skip to content

Commit f4704b9

Browse files
committed
feat: add Stone duality theorem for clopen sets in complete types
1 parent c6b594a commit f4704b9

2 files changed

Lines changed: 33 additions & 1 deletion

File tree

Mathlib/ModelTheory/Topology/Types.lean

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,27 @@ instance : CompactSpace (T.CompleteType α) := by
9595
obtain ⟨_, rfl⟩ := h.2
9696
exact h.1
9797

98-
instance : BaireSpace (T.CompleteType α) := BaireSpace.of_t2Space_locallyCompactSpace
98+
/--
99+
Stone Duality:
100+
Every clopen set in the Stone space of types corresponds to the set of types
101+
consistent with some sentence φ.
102+
-/
103+
theorem exists_sentence_of_isClopen (U : Set (CompleteType T α)) :
104+
IsClopen U → ∃ (φ : L[[α]].Sentence), U = typesWith (T := T) φ := by
105+
intro hU
106+
obtain ⟨ι,S,hUS,hS⟩ := IsTopologicalBasis.open_eq_iUnion typesWith_basis hU.2
107+
obtain ⟨F,hF⟩ := IsCompact.elim_finite_subcover hU.1.isCompact S
108+
(fun i => IsTopologicalBasis.isOpen typesWith_basis (hS i))
109+
(hUS.subset)
110+
replace hF : U = ⋃ i ∈ F, S i := Subset.antisymm hF (by
111+
rw [hUS]
112+
exact iUnion₂_subset_iUnion (Membership.mem F) S
113+
)
114+
choose φs hφs using hS
115+
exists Formula.iSup (fun (x : F) => φs x.1)
116+
simp [typesWith_iSup, hF, hφs]
117+
exact Eq.symm (iUnion_subtype (Membership.mem F) fun x ↦ S ↑x)
118+
119+
instance {n : ℕ} : BaireSpace (T.CompleteType (Fin n)) := BaireSpace.of_t2Space_locallyCompactSpace
99120

100121
end CompleteType

Mathlib/ModelTheory/Types.lean

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,17 @@ lemma typesWith_inf (φ ψ : L[[α]].Sentence)
193193
simp only [p.isMaximal.mem_iff_models, ModelsBoundedFormula, ←forall_and]
194194
exact forall₃_congr fun _ _ _ ↦ BoundedFormula.realize_inf
195195

196+
lemma typesWith_iSup {β : Type*} [Finite β] (f : β → L[[α]].Sentence) :
197+
typesWith (T := T) (Formula.iSup f) = ⋃ (i : β), typesWith (f i) := by
198+
ext p
199+
simp only [typesWith, Set.mem_setOf_eq, Set.mem_iUnion]
200+
obtain ⟨M⟩ := p.isMaximal'.1
201+
have : ∀ φ, φ ∈ ↑p ↔ φ.Realize M.Carrier := by
202+
intro φ
203+
simp [←SetLike.mem_coe, p.isMaximal.mem_iff_models]
204+
exact (p.isMaximal.isComplete.realize_sentence_iff φ M).symm
205+
simp only [this, Sentence.Realize, Formula.realize_iSup]
206+
196207
lemma typesWith_mem {φ} (hφ : φ ∈ (L.lhomWithConstants α).onTheory T)
197208
: typesWith (T := T) φ = Set.univ
198209
:= univ_subset_iff.mp fun p _ ↦ p.subset hφ

0 commit comments

Comments
 (0)