-
-
Notifications
You must be signed in to change notification settings - Fork 27
Expand file tree
/
Copy pathLoewenheimSkolem.lean
More file actions
65 lines (42 loc) · 2.26 KB
/
Copy pathLoewenheimSkolem.lean
File metadata and controls
65 lines (42 loc) · 2.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
module
public import Foundation.FirstOrder.SetTheory.Basic.Model
public import Foundation.FirstOrder.Skolemization.Hull
@[expose] public section
/-!
# Downward Löwenheim-Skolem theorem for models of set theory
-/
namespace LO.FirstOrder.SetTheory
variable {V : Type*} [SetStructure V] [Nonempty V] (s : Set V)
def Hull : Set V := Structure.SkolemHull ℒₛₑₜ s
variable (V)
abbrev Collapse : Set V := Hull ∅
variable {V}
namespace Hull
@[simp] lemma mk_mem_mk_iff {x y : V} {hx hy} : (⟨x, hx⟩ : Hull s) ∈ (⟨y, hy⟩ : Hull s) ↔ x ∈ y := by rfl
lemma str_eq : Structure.SkolemHull.str (standardStructure V) s = standardStructure (Hull s) := by
have : (Structure.SkolemHull.str (standardStructure V) s).Eq ℒₛₑₜ (Hull s) := Structure.SkolemHull.eq
have : (Structure.SkolemHull.str (standardStructure V) s).Mem ℒₛₑₜ (Hull s) := Structure.SkolemHull.mem
exact standardStructure_unique (Hull s) (Structure.SkolemHull.str (standardStructure V) s)
@[simp] lemma subset : s ⊆ Hull s := Structure.SkolemHull.subset
lemma closed {v : Fin k → V} (hv : ∀ i, v i ∈ Hull s)
{φ : SetTheorySemisentence (k + 1)} (H : ∃ z, V ⊧/(z :> v) φ) :
∃ z ∈ Hull s, V ⊧/(z :> v) φ :=
Structure.SkolemHull.closed hv H
@[simp] lemma hull_models_iff {φ : SetTheorySemisentence n} :
(Hull s) ⊧/b φ ↔ V ⊧/(b ·) φ := by
have :
φ.Evalb (s := Structure.SkolemHull.str (standardStructure V) s) b ↔
V ⊧/(b ·) φ :=
Structure.SkolemHull.str_eval (𝓼 := standardStructure V) (φ := φ) (b := b)
rw [str_eq] at this
exact this
lemma set_nonempty : (Hull s).Nonempty := Structure.SkolemHull.set_nonempty _ _
instance nonempty : Nonempty (Hull s) := Structure.SkolemHull.nonempty _ _
instance elementaryEquiv : (Hull s) ≡ₑ[ℒₛₑₜ] V where
models {φ} := by simp [models_iff, Matrix.empty_eq]
lemma set_countable [hs : Countable s] : (Hull s).Countable := Structure.SkolemHull.set_countable hs
instance countable [hs : Countable s] : Countable (Hull s) := Structure.SkolemHull.set_countable hs
instance countable₀ : Countable (Collapse V) := Structure.SkolemHull.countable₀
instance small [hs : Countable s] : Small.{w} ↑(Hull s) := Countable.toSmall (Hull s)
end Hull
end LO.FirstOrder.SetTheory