Skip to content

Commit a299ad9

Browse files
committed
wip
1 parent 4a95a7b commit a299ad9

File tree

1 file changed

+24
-87
lines changed

1 file changed

+24
-87
lines changed

Skolem.lp

Lines changed: 24 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,16 @@
11
require open Stdlib.Prop Stdlib.FOL Stdlib.Epsilon;
22

3-
// procedure for skolemizing all existentials
3+
// procedure for skolemizing all existentials (no proof provided)
44
// /!\ WARNING: this is a sequential symbol
55

66
private sequential symbol skolem: PropProp;
7-
private sequential symbol skolem-: PropProp;
87

9-
rule skolem ( $p) ↪ `∀ x, skolem ($p x)
10-
with skolem ( $p) ↪ skolem ($p (ε $p))
8+
rule skolem ( $p) ↪ skolem ($p (ε $p))
9+
with skolem ( $p) ↪ `∀ x, skolem ($p x)
1110
with skolem ($p ∧ $q) ↪ skolem $pskolem $q
1211
with skolem ($p ∨ $q) ↪ skolem $pskolem $q
13-
with skolem ($p ⇒ $q) ↪ skolem- $pskolem $q
1412
with skolem $p ↪ $p
15-
16-
with skolem- (∀ $p) ↪ skolem- ($p (ε $p))
17-
with skolem- (∃ $p) ↪ `∃ x, skolem- ($p x)
18-
with skolem- ($p ∧ $q) ↪ skolem- $pskolem- $q
19-
with skolem- ($p ∨ $q) ↪ skolem- $pskolem- $q
20-
with skolem- ($p ⇒ $q) ↪ skolem $pskolem- $q
21-
with skolem- $p ↪ $p;
13+
;
2214

2315
// example
2416

@@ -56,7 +48,6 @@ symbol ind_Prop (p:Prop → Prop):
5648
a f, π((`∀ xa, p (f x)) ⇒ p (∀ f))) →
5749
f g, π(p fp gp (fg))) →
5850
f g, π(p fp gp (fg))) →
59-
f g, π(p fp gp (fg))) →
6051
Π f:Prop, π(p f);
6152

6253
// positions in a proposition
@@ -69,8 +60,7 @@ inductive Pos : TYPE ≔
6960
| and2: PosPos
7061
| or1: PosPos
7162
| or2: PosPos
72-
| imp1: PosPos
73-
| imp2: PosPos;
63+
;
7464

7565
// valid positions
7666

@@ -124,20 +114,6 @@ with valid (or2 _) (∀ _) ↪ ⊥
124114
with valid (or2 _) (_ ∧ _) ↪ ⊥
125115
with valid (or2 $i) (_ ∨ $f) ↪ valid $i $f
126116
with valid (or2 _) (_ ⇒ _) ↪ ⊥
127-
128-
with valid (imp1 _) (at _) ↪ ⊥
129-
with valid (imp1 _) (∃ _) ↪ ⊥
130-
with valid (imp1 _) (∀ _) ↪ ⊥
131-
with valid (imp1 _) (_ ∧ _) ↪ ⊥
132-
with valid (imp1 _) (_ ∨ _) ↪ ⊥
133-
with valid (imp1 $i) ($f ⇒ _) ↪ valid $i $f
134-
135-
with valid (imp2 _) (at _) ↪ ⊥
136-
with valid (imp2 _) (∃ _) ↪ ⊥
137-
with valid (imp2 _) (∀ _) ↪ ⊥
138-
with valid (imp2 _) (_ ∧ _) ↪ ⊥
139-
with valid (imp2 _) (_ ∨ _) ↪ ⊥
140-
with valid (imp2 $i) (_ ⇒ $f) ↪ valid $i $f
141117
;
142118

143119
// induction principle on valid positions
@@ -154,134 +130,95 @@ opaque symbol ind_valid (p:Pos → Prop → Prop):
154130
i f g, π(valid i gp i gp (and2 i) (fg))) →
155131
i f g, π(valid i fp i fp (or1 i) (fg))) →
156132
i f g, π(valid i gp i gp (or2 i) (fg))) →
157-
i f g, π(valid i fp i fp (imp1 i) (fg))) →
158-
i f g, π(valid i gp i gp (imp2 i) (fg))) →
159133
Π i f, π(valid i fp i f) ≔
160134
begin
161-
assume p ptop pall pex pand1 pand2 por1 por2 pimp1 pimp2; induction
135+
assume p ptop pall pex pand1 pand2 por1 por2; induction
162136
// top
163-
{ refine ind_Prop _ _ _ _ _ _ _
137+
{ refine ind_Prop _ _ _ _ _ _
164138
{ assume k v; apply ⊥ₑ v }
165139
{ assume a f hf v; apply ptop }
166140
{ assume a f hf v; apply ⊥ₑ v }
167141
{ assume f g hf hg v; apply ⊥ₑ v }
168142
{ assume f g hf hg v; apply ⊥ₑ v }
169-
{ assume f g hf hg v; apply ⊥ₑ v }
170143
}
171144
// all
172-
{ assume i hi; refine ind_Prop _ _ _ _ _ _ _
145+
{ assume i hi; refine ind_Prop _ _ _ _ _ _
173146
{ assume k v; apply ⊥ₑ v }
174147
{ assume a f hf v; apply ⊥ₑ v }
175148
{ assume a f hf v; apply pall i a f v; assume x; apply hi; refine (v x) }
176149
{ assume f g hf hg v; apply ⊥ₑ v }
177150
{ assume f g hf hg v; apply ⊥ₑ v }
178-
{ assume f g hf hg v; apply ⊥ₑ v }
179151
}
180152
// ex
181-
{ assume i hi; refine ind_Prop _ _ _ _ _ _ _
153+
{ assume i hi; refine ind_Prop _ _ _ _ _ _
182154
{ assume k v; apply ⊥ₑ v }
183155
{ assume a f hf v; apply pex i a f v; assume x; apply hi; refine (v x) }
184156
{ assume a f hf v; apply ⊥ₑ v }
185157
{ assume f g hf hg v; apply ⊥ₑ v }
186158
{ assume f g hf hg v; apply ⊥ₑ v }
187-
{ assume f g hf hg v; apply ⊥ₑ v }
188159
}
189160
// and1
190-
{ assume i hi; refine ind_Prop _ _ _ _ _ _ _
161+
{ assume i hi; refine ind_Prop _ _ _ _ _ _
191162
{ assume k v; apply ⊥ₑ v }
192163
{ assume a f hf v; apply ⊥ₑ v }
193164
{ assume a f hf v; apply ⊥ₑ v }
194165
{ assume f g hf hg v; apply pand1 i f g v (hi f v) }
195166
{ assume f g hf hg v; apply ⊥ₑ v }
196-
{ assume f g hf hg v; apply ⊥ₑ v }
197167
}
198168
// and2
199-
{ assume i hi; refine ind_Prop _ _ _ _ _ _ _
169+
{ assume i hi; refine ind_Prop _ _ _ _ _ _
200170
{ assume k v; apply ⊥ₑ v }
201171
{ assume a f hf v; apply ⊥ₑ v }
202172
{ assume a f hf v; apply ⊥ₑ v }
203173
{ assume f g hf hg v; apply pand2 i f g v (hi g v) }
204174
{ assume f g hf hg v; apply ⊥ₑ v }
205-
{ assume f g hf hg v; apply ⊥ₑ v }
206175
}
207176
// or1
208-
{ assume i hi; refine ind_Prop _ _ _ _ _ _ _
177+
{ assume i hi; refine ind_Prop _ _ _ _ _ _
209178
{ assume k v; apply ⊥ₑ v }
210179
{ assume a f hf v; apply ⊥ₑ v }
211180
{ assume a f hf v; apply ⊥ₑ v }
212181
{ assume f g hf hg v; apply ⊥ₑ v }
213182
{ assume f g hf hg v; apply por1 i f g v (hi f v) }
214-
{ assume f g hf hg v; apply ⊥ₑ v }
215183
}
216184
// or2
217-
{ assume i hi; refine ind_Prop _ _ _ _ _ _ _
185+
{ assume i hi; refine ind_Prop _ _ _ _ _ _
218186
{ assume k v; apply ⊥ₑ v }
219187
{ assume a f hf v; apply ⊥ₑ v }
220188
{ assume a f hf v; apply ⊥ₑ v }
221189
{ assume f g hf hg v; apply ⊥ₑ v }
222190
{ assume f g hf hg v; apply por2 i f g v (hi g v) }
223-
{ assume f g hf hg v; apply ⊥ₑ v }
224-
}
225-
// imp1
226-
{ assume i hi; refine ind_Prop _ _ _ _ _ _ _
227-
{ assume k v; apply ⊥ₑ v }
228-
{ assume a f hf v; apply ⊥ₑ v }
229-
{ assume a f hf v; apply ⊥ₑ v }
230-
{ assume f g hf hg v; apply ⊥ₑ v }
231-
{ assume f g hf hg v; apply ⊥ₑ v }
232-
{ assume f g hf hg v; apply pimp1 i f g v (hi f v) }
233-
}
234-
// imp2
235-
{ assume i hi; refine ind_Prop _ _ _ _ _ _ _
236-
{ assume k v; apply ⊥ₑ v }
237-
{ assume a f hf v; apply ⊥ₑ v }
238-
{ assume a f hf v; apply ⊥ₑ v }
239-
{ assume f g hf hg v; apply ⊥ₑ v }
240-
{ assume f g hf hg v; apply ⊥ₑ v }
241-
{ assume f g hf hg v; apply pimp2 i f g v (hi g v) }
242191
}
243192
end;
244193

245194
// skolemization of a particular existential
246195

247196
// /!\ WARNING: partial function defined on valid positions only
248197
symbol skolem1: PosPropProp;
249-
symbol skolem1-: PosPropProp;
250198

251199
rule skolem1 top (∃ $p) ↪ $p (ε $p)
252200
with skolem1 (all $i) (∀ $p) ↪ `∀ x, skolem1 $i ($p x)
201+
with skolem1 (ex $i) (∃ $p) ↪ `∃ x, skolem1 $i ($p x)
253202
with skolem1 (and1 $i) ($p ∧ $q) ↪ skolem1 $i $p ∧ $q
254203
with skolem1 (and2 $i) ($p ∧ $q) ↪ $pskolem1 $i $q
255204
with skolem1 (or1 $i) ($p ∨ $q) ↪ skolem1 $i $p ∨ $q
256205
with skolem1 (or2 $i) ($p ∨ $q) ↪ $pskolem1 $i $q
257-
with skolem1 (imp1 $i) ($p ⇒ $q) ↪ skolem1- $i $p ⇒ $q
258-
with skolem1 (imp2 $i) ($p ⇒ $q) ↪ $pskolem1 $i $q
259-
260-
with skolem1- top (∀ $p) ↪ $p (ε $p)
261-
with skolem1- (ex $i) (∃ $p) ↪ `∃ x, skolem1- $i ($p x)
262-
with skolem1- (and1 $i) ($p ∧ $q) ↪ skolem1- $i $p ∧ $q
263-
with skolem1- (and2 $i) ($p ∧ $q) ↪ $pskolem1- $i $q
264-
with skolem1- (or1 $i) ($p ∨ $q) ↪ skolem1- $i $p ∨ $q
265-
with skolem1- (or2 $i) ($p ∨ $q) ↪ $pskolem1- $i $q
266-
with skolem1- (imp1 $i) ($p ⇒ $q) ↪ skolem1 $i $p ⇒ $q
267-
with skolem1- (imp2 $i) ($p ⇒ $q) ↪ $pskolem1- $i $q
268206
;
269207

270208
assertskolem1 (all top) AB;
271209
assertskolem1 (all(and2(all top))) BC;
272210

273-
// correctness proof
211+
// skolemization preserves provability
274212

275-
opaque symbol skolem1_correct i f: π(valid i f) → π f → π(skolem1 i f) ≔
213+
opaque symbol skolem1_preserves_provability i f:
214+
π(valid i f) → π f → π(skolem1 i f) ≔
276215
begin
277-
refine ind_validi f, fskolem1 i f) _ _ _ _ _ _ _ _ _
278-
{ assume a f h; apply εᵢ _ h }
216+
refine ind_validi f, fskolem1 i f) _ _ _ _ _ _ _
217+
{ assume a f h; simplify; apply εᵢ _ h }
279218
{ assume i a f v IH h x; apply IH x (h x) }
280-
{ admit }
281-
{ assume i f g v IH h; apply ∧ᵢ { apply IH (∧ₑ₁ h) } { apply ∧ₑ₂ h } }
282-
{ assume i f g v IH h; apply ∧ᵢ { apply ∧ₑ₁ h } { apply IH (∧ₑ₂ h) } }
283-
{ assume i f g v IH h; apply ∨ₑ h { assume hf; apply ∨ᵢ₁ (IH hf) } { assume hg; apply ∨ᵢ₂ hg } }
284-
{ assume i f g v IH h; apply ∨ₑ h { assume hf; apply ∨ᵢ₁ hf } { assume hg; apply ∨ᵢ₂ (IH hg) } }
285-
{ assume i f g v IH h; admit }
286-
{ assume i f g v IH h; admit }
219+
{ assume i a f v IH h; simplify; apply ∃ₑ h; assume x hx; apply ∃ᵢ x; apply IH x; apply hx }
220+
{ assume i f g v IH h; simplify; apply ∧ᵢ { apply IH (∧ₑ₁ h) } { apply ∧ₑ₂ h } }
221+
{ assume i f g v IH h; simplify; apply ∧ᵢ { apply ∧ₑ₁ h } { apply IH (∧ₑ₂ h) } }
222+
{ assume i f g v IH h; simplify; apply ∨ₑ h { assume hf; apply ∨ᵢ₁ (IH hf) } { assume hg; apply ∨ᵢ₂ hg } }
223+
{ assume i f g v IH h; simplify; apply ∨ₑ h { assume hf; apply ∨ᵢ₁ hf } { assume hg; apply ∨ᵢ₂ (IH hg) } }
287224
end;

0 commit comments

Comments
 (0)