Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 1ed3a11

Browse files
committed
feat(model_theory/order): Renames and generalizes notation about ordered structures (#17870)
Generalizes the definition of first-order sentences and theories about orders to work in ordered languages rather than just the one-symbol language `language.order`. Renames these sentences and theories accordingly: for instance, the dot notation `L.preorder_theory` is the theory of preordered `L`-structures, which requires that `preorder_theory` be directly in the namespace `first_order.language`.
1 parent 8a31802 commit 1ed3a11

File tree

1 file changed

+51
-43
lines changed

1 file changed

+51
-43
lines changed

src/model_theory/order.lean

Lines changed: 51 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@ This file defines ordered first-order languages and structures, as well as their
1414
* `first_order.language.order_Structure` is the structure on an ordered type, assigning the symbol
1515
representing `≤` to the actual relation `≤`.
1616
* `first_order.language.is_ordered` points out a specific symbol in a language as representing `≤`.
17-
* `first_order.language.is_ordered_structure` indicates that a structure over a
18-
* `first_order.language.Theory.linear_order` and similar define the theories of preorders,
17+
* `first_order.language.ordered_structure` indicates that the `≤` symbol in an ordered language
18+
is interpreted as the actual relation `≤` in a particular structure.
19+
* `first_order.language.linear_order_theory` and similar define the theories of preorders,
1920
partial orders, and linear orders.
20-
* `first_order.language.Theory.DLO` defines the theory of dense linear orders without endpoints, a
21+
* `first_order.language.DLO` defines the theory of dense linear orders without endpoints, a
2122
particularly useful example in model theory.
2223
23-
2424
## Main Results
2525
* `partial_order`s model the theory of partial orders, `linear_order`s model the theory of
2626
linear orders, and dense linear orders without endpoints model `Theory.DLO`.
@@ -40,11 +40,11 @@ variables {L : language.{u v}} {α : Type w} {M : Type w'} {n : ℕ}
4040
protected def order : language :=
4141
language.mk₂ empty empty empty empty unit
4242

43-
namespace order
44-
45-
instance Structure [has_le M] : language.order.Structure M :=
43+
instance order_Structure [has_le M] : language.order.Structure M :=
4644
Structure.mk₂ empty.elim empty.elim empty.elim empty.elim (λ _, (≤))
4745

46+
namespace order
47+
4848
instance : is_relational (language.order) := language.is_relational_mk₂
4949

5050
instance : subsingleton (language.order.relations n) :=
@@ -89,137 +89,145 @@ Lhom.funext (subsingleton.elim _ _) (subsingleton.elim _ _)
8989

9090
instance : is_ordered (L.sum language.order) := ⟨sum.inr is_ordered.le_symb⟩
9191

92+
section
93+
variables (L) [is_ordered L]
94+
9295
/-- The theory of preorders. -/
93-
protected def Theory.preorder : language.order.Theory :=
96+
def preorder_theory : L.Theory :=
9497
{le_symb.reflexive, le_symb.transitive}
9598

9699
/-- The theory of partial orders. -/
97-
protected def Theory.partial_order : language.order.Theory :=
100+
def partial_order_theory : L.Theory :=
98101
{le_symb.reflexive, le_symb.antisymmetric, le_symb.transitive}
99102

100103
/-- The theory of linear orders. -/
101-
protected def Theory.linear_order : language.order.Theory :=
104+
def linear_order_theory : L.Theory :=
102105
{le_symb.reflexive, le_symb.antisymmetric, le_symb.transitive, le_symb.total}
103106

104107
/-- A sentence indicating that an order has no top element:
105108
$\forall x, \exists y, \neg y \le x$. -/
106-
protected def sentence.no_top_order : language.order.sentence := ∀' ∃' ∼ ((&1).le &0)
109+
def no_top_order_sentence : L.sentence := ∀' ∃' ∼ ((&1).le &0)
107110

108111
/-- A sentence indicating that an order has no bottom element:
109112
$\forall x, \exists y, \neg x \le y$. -/
110-
protected def sentence.no_bot_order : language.order.sentence := ∀' ∃' ∼ ((&0).le &1)
113+
def no_bot_order_sentence : L.sentence := ∀' ∃' ∼ ((&0).le &1)
111114

112115
/-- A sentence indicating that an order is dense:
113116
$\forall x, \forall y, x < y \to \exists z, x < z \wedge z < y$. -/
114-
protected def sentence.densely_ordered : language.order.sentence :=
117+
def densely_ordered_sentence : L.sentence :=
115118
∀' ∀' (((&0).lt &1) ⟹ (∃' (((&0).lt &2) ⊓ ((&2).lt &1))))
116119

117120
/-- The theory of dense linear orders without endpoints. -/
118-
protected def Theory.DLO : language.order.Theory :=
119-
Theory.linear_order ∪ {sentence.no_top_order, sentence.no_bot_order, sentence.densely_ordered}
121+
def DLO : L.Theory :=
122+
L.linear_order_theory ∪
123+
{L.no_top_order_sentence, L.no_bot_order_sentence, L.densely_ordered_sentence}
124+
125+
end
120126

121127
variables (L M)
122128

123129
/-- A structure is ordered if its language has a `≤` symbol whose interpretation is -/
124-
abbreviation is_ordered_structure [is_ordered L] [has_le M] [L.Structure M] : Prop :=
130+
abbreviation ordered_structure [is_ordered L] [has_le M] [L.Structure M] : Prop :=
125131
Lhom.is_expansion_on (order_Lhom L) M
126132

127133
variables {L M}
128134

129-
@[simp] lemma is_ordered_structure_iff [is_ordered L] [has_le M] [L.Structure M] :
130-
L.is_ordered_structure M ↔ Lhom.is_expansion_on (order_Lhom L) M := iff.rfl
135+
@[simp] lemma ordered_structure_iff [is_ordered L] [has_le M] [L.Structure M] :
136+
L.ordered_structure M ↔ Lhom.is_expansion_on (order_Lhom L) M := iff.rfl
131137

132-
instance is_ordered_structure_has_le [has_le M] :
133-
is_ordered_structure language.order M :=
138+
instance ordered_structure_has_le [has_le M] :
139+
ordered_structure language.order M :=
134140
begin
135-
rw [is_ordered_structure_iff, order_Lhom_order],
141+
rw [ordered_structure_iff, order_Lhom_order],
136142
exact Lhom.id_is_expansion_on M,
137143
end
138144

139145
instance model_preorder [preorder M] :
140-
M ⊨ Theory.preorder :=
146+
M ⊨ language.order.preorder_theory :=
141147
begin
142-
simp only [Theory.preorder, Theory.model_iff, set.mem_insert_iff, set.mem_singleton_iff,
148+
simp only [preorder_theory, Theory.model_iff, set.mem_insert_iff, set.mem_singleton_iff,
143149
forall_eq_or_imp, relations.realize_reflexive, rel_map_apply₂, forall_eq,
144150
relations.realize_transitive],
145151
exact ⟨le_refl, λ _ _ _, le_trans⟩
146152
end
147153

148154
instance model_partial_order [partial_order M] :
149-
M ⊨ Theory.partial_order :=
155+
M ⊨ language.order.partial_order_theory :=
150156
begin
151-
simp only [Theory.partial_order, Theory.model_iff, set.mem_insert_iff, set.mem_singleton_iff,
157+
simp only [partial_order_theory, Theory.model_iff, set.mem_insert_iff, set.mem_singleton_iff,
152158
forall_eq_or_imp, relations.realize_reflexive, rel_map_apply₂, relations.realize_antisymmetric,
153159
forall_eq, relations.realize_transitive],
154160
exact ⟨le_refl, λ _ _, le_antisymm, λ _ _ _, le_trans⟩,
155161
end
156162

157163
instance model_linear_order [linear_order M] :
158-
M ⊨ Theory.linear_order :=
164+
M ⊨ language.order.linear_order_theory :=
159165
begin
160-
simp only [Theory.linear_order, Theory.model_iff, set.mem_insert_iff, set.mem_singleton_iff,
166+
simp only [linear_order_theory, Theory.model_iff, set.mem_insert_iff, set.mem_singleton_iff,
161167
forall_eq_or_imp, relations.realize_reflexive, rel_map_apply₂, relations.realize_antisymmetric,
162168
relations.realize_transitive, forall_eq, relations.realize_total],
163169
exact ⟨le_refl, λ _ _, le_antisymm, λ _ _ _, le_trans, le_total⟩,
164170
end
165171

166-
section is_ordered_structure
172+
section ordered_structure
167173
variables [is_ordered L] [L.Structure M]
168174

169-
@[simp] lemma rel_map_le_symb [has_le M] [L.is_ordered_structure M] {a b : M} :
175+
@[simp] lemma rel_map_le_symb [has_le M] [L.ordered_structure M] {a b : M} :
170176
rel_map (le_symb : L.relations 2) ![a, b] ↔ a ≤ b :=
171177
begin
172178
rw [← order_Lhom_le_symb, Lhom.map_on_relation],
173179
refl,
174180
end
175181

176-
@[simp] lemma term.realize_le [has_le M] [L.is_ordered_structure M]
182+
@[simp] lemma term.realize_le [has_le M] [L.ordered_structure M]
177183
{t₁ t₂ : L.term (α ⊕ fin n)} {v : α → M} {xs : fin n → M} :
178184
(t₁.le t₂).realize v xs ↔ t₁.realize (sum.elim v xs) ≤ t₂.realize (sum.elim v xs) :=
179185
by simp [term.le]
180186

181-
@[simp] lemma term.realize_lt [preorder M] [L.is_ordered_structure M]
187+
@[simp] lemma term.realize_lt [preorder M] [L.ordered_structure M]
182188
{t₁ t₂ : L.term (α ⊕ fin n)} {v : α → M} {xs : fin n → M} :
183189
(t₁.lt t₂).realize v xs ↔ t₁.realize (sum.elim v xs) < t₂.realize (sum.elim v xs) :=
184190
by simp [term.lt, lt_iff_le_not_le]
185191

186-
end is_ordered_structure
192+
end ordered_structure
187193

188194
section has_le
189195
variables [has_le M]
190196

191-
theorem realize_no_top_order_iff : M ⊨ sentence.no_top_order ↔ no_top_order M :=
197+
theorem realize_no_top_order_iff : M ⊨ language.order.no_top_order_sentence ↔ no_top_order M :=
192198
begin
193-
simp only [sentence.no_top_order, sentence.realize, formula.realize, bounded_formula.realize_all,
199+
simp only [no_top_order_sentence, sentence.realize, formula.realize, bounded_formula.realize_all,
194200
bounded_formula.realize_ex, bounded_formula.realize_not, realize, term.realize_le,
195201
sum.elim_inr],
196202
refine ⟨λ h, ⟨λ a, h a⟩, _⟩,
197203
introsI h a,
198204
exact exists_not_le a,
199205
end
200206

201-
@[simp] lemma realize_no_top_order [h : no_top_order M] : M ⊨ sentence.no_top_order :=
207+
@[simp] lemma realize_no_top_order [h : no_top_order M] :
208+
M ⊨ language.order.no_top_order_sentence :=
202209
realize_no_top_order_iff.2 h
203210

204-
theorem realize_no_bot_order_iff : M ⊨ sentence.no_bot_order ↔ no_bot_order M :=
211+
theorem realize_no_bot_order_iff : M ⊨ language.order.no_bot_order_sentence ↔ no_bot_order M :=
205212
begin
206-
simp only [sentence.no_bot_order, sentence.realize, formula.realize, bounded_formula.realize_all,
213+
simp only [no_bot_order_sentence, sentence.realize, formula.realize, bounded_formula.realize_all,
207214
bounded_formula.realize_ex, bounded_formula.realize_not, realize, term.realize_le,
208215
sum.elim_inr],
209216
refine ⟨λ h, ⟨λ a, h a⟩, _⟩,
210217
introsI h a,
211218
exact exists_not_ge a,
212219
end
213220

214-
@[simp] lemma realize_no_bot_order [h : no_bot_order M] : M ⊨ sentence.no_bot_order :=
221+
@[simp] lemma realize_no_bot_order [h : no_bot_order M] :
222+
M ⊨ language.order.no_bot_order_sentence :=
215223
realize_no_bot_order_iff.2 h
216224

217225
end has_le
218226

219227
theorem realize_densely_ordered_iff [preorder M] :
220-
M ⊨ sentence.densely_ordered ↔ densely_ordered M :=
228+
M ⊨ language.order.densely_ordered_sentence ↔ densely_ordered M :=
221229
begin
222-
simp only [sentence.densely_ordered, sentence.realize, formula.realize,
230+
simp only [densely_ordered_sentence, sentence.realize, formula.realize,
223231
bounded_formula.realize_imp, bounded_formula.realize_all, realize, term.realize_lt,
224232
sum.elim_inr, bounded_formula.realize_ex, bounded_formula.realize_inf],
225233
refine ⟨λ h, ⟨λ a b ab, h a b ab⟩, _⟩,
@@ -228,13 +236,13 @@ begin
228236
end
229237

230238
@[simp] lemma realize_densely_ordered [preorder M] [h : densely_ordered M] :
231-
M ⊨ sentence.densely_ordered :=
239+
M ⊨ language.order.densely_ordered_sentence :=
232240
realize_densely_ordered_iff.2 h
233241

234242
instance model_DLO [linear_order M] [densely_ordered M] [no_top_order M] [no_bot_order M] :
235-
M ⊨ Theory.DLO :=
243+
M ⊨ language.order.DLO :=
236244
begin
237-
simp only [Theory.DLO, set.union_insert, set.union_singleton, Theory.model_iff,
245+
simp only [DLO, set.union_insert, set.union_singleton, Theory.model_iff,
238246
set.mem_insert_iff, forall_eq_or_imp, realize_no_top_order, realize_no_bot_order,
239247
realize_densely_ordered, true_and],
240248
rw ← Theory.model_iff,

0 commit comments

Comments
 (0)