Skip to content

Commit 2b24590

Browse files
committed
Correct lambdapi proofs when an epsilon-term is read on the input
Note: need a new proof rule in Zenon.Main, basically the epsilon axiom.
1 parent 0aaf5fe commit 2b24590

7 files changed

Lines changed: 37 additions & 8 deletions

File tree

‎dkterm.ml‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ type dkterm =
2626
| Dktrue (* true *)
2727
| Dkfalse (* false *)
2828
| Dkequal of dkterm * dkterm * dkterm (* equal type*term*term *)
29+
| Dkeps of dkterm (* epsilon prop *)
2930

3031
| DkRfalse of dkterm
3132
| DkRnottrue of dkterm
@@ -53,6 +54,7 @@ type dkterm =
5354
| DkRsubst of dkterm * dkterm * dkterm * dkterm * dkterm * dkterm * dkterm
5455
| DkRconglr of dkterm * dkterm * dkterm * dkterm * dkterm * dkterm * dkterm
5556
| DkRcongrl of dkterm * dkterm * dkterm * dkterm * dkterm * dkterm * dkterm
57+
| DkReps of dkterm * dkterm * dkterm * dkterm
5658
;;
5759

5860
type line =
@@ -116,6 +118,7 @@ let mk_existstype (t) = Dkexiststype t
116118
let mk_true = Dktrue
117119
let mk_false = Dkfalse
118120
let mk_equal (t1, t2, t3) = Dkequal (t1, t2, t3)
121+
let mk_eps (t) = Dkeps t
119122

120123
let mk_DkRfalse (pr) = DkRfalse (pr)
121124
let mk_DkRnottrue (pr) = DkRnottrue (pr)
@@ -143,6 +146,7 @@ let mk_DkRnotalltype (p, pr1, pr2) = DkRnotalltype (p, pr1, pr2)
143146
let mk_DkRsubst (a, p, t1, t2, pr1, pr2, pr3) = DkRsubst (a, p, t1, t2, pr1, pr2, pr3)
144147
let mk_DkRconglr (a, p, t1, t2, pr1, pr2, pr3) = DkRconglr (a, p, t1, t2, pr1, pr2, pr3)
145148
let mk_DkRcongrl (a, p, t1, t2, pr1, pr2, pr3) = DkRcongrl (a, p, t1, t2, pr1, pr2, pr3)
149+
let mk_DkReps (a, p, pr1, pr2) = DkReps (a, p, pr1, pr2)
146150

147151
let mk_decl (v, t) = Dkdecl (v, t)
148152
let mk_rwrt (l, t1, t2) = Dkrwrt (l, t1, t2)

‎dkterm.mli‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ type dkterm =
2828
| Dktrue (* true *)
2929
| Dkfalse (* false *)
3030
| Dkequal of dkterm * dkterm * dkterm (* equal type*term*term *)
31-
31+
| Dkeps of dkterm (* epsilon prop *)
3232
| DkRfalse of dkterm
3333
| DkRnottrue of dkterm
3434
| DkRaxiom of dkterm * dkterm * dkterm
@@ -55,6 +55,7 @@ type dkterm =
5555
| DkRsubst of dkterm * dkterm * dkterm * dkterm * dkterm * dkterm * dkterm
5656
| DkRconglr of dkterm * dkterm * dkterm * dkterm * dkterm * dkterm * dkterm
5757
| DkRcongrl of dkterm * dkterm * dkterm * dkterm * dkterm * dkterm * dkterm
58+
| DkReps of dkterm * dkterm * dkterm * dkterm (* type, predicate, proof of eps, proof of ex *)
5859

5960
type line =
6061
| Dkdecl of var * dkterm (* declaration of symbols *)
@@ -86,6 +87,7 @@ val mk_existstype : dkterm -> dkterm
8687
val mk_true : dkterm
8788
val mk_false : dkterm
8889
val mk_equal : dkterm * dkterm * dkterm -> dkterm
90+
val mk_eps : dkterm -> dkterm
8991

9092
val mk_DkRfalse : dkterm -> dkterm
9193
val mk_DkRnottrue : dkterm -> dkterm
@@ -113,6 +115,7 @@ val mk_DkRnotalltype : dkterm * dkterm * dkterm -> dkterm
113115
val mk_DkRsubst : dkterm * dkterm * dkterm * dkterm * dkterm * dkterm * dkterm -> dkterm
114116
val mk_DkRconglr : dkterm * dkterm * dkterm * dkterm * dkterm * dkterm * dkterm -> dkterm
115117
val mk_DkRcongrl : dkterm * dkterm * dkterm * dkterm * dkterm * dkterm * dkterm -> dkterm
118+
val mk_DkReps : dkterm * dkterm * dkterm * dkterm -> dkterm
116119

117120
val mk_decl : var * dkterm -> line
118121
val mk_rwrt : dkterm list * dkterm * dkterm -> line

‎globals.ml‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,5 @@ let end_comment() =
4747
else "*)"
4848

4949
let has_a_conjecture = ref true
50+
51+
let epsilon_on_input = ref false

‎globals.mli‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,5 @@ val end_comment : unit -> string;;
4141

4242
(* Has a conjecture, useful for SZS output *)
4343
val has_a_conjecture : bool ref;;
44+
45+
val epsilon_on_input : bool ref (* has an epsilon-term been read on the input? *)

‎lltolp.ml‎

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -206,10 +206,16 @@ and translate_expr e =
206206
let p' = translate_expr p in
207207
mk_exists (ty, mk_lam (nv, p'))
208208
| Eex _ -> assert false
209-
| Etau _ as e ->
210-
let v = Index.make_tau_name e in
211-
let ty = translate_type (get_type e) in
212-
mk_var (v, ty)
209+
| Etau (Evar (v, _) as v', p, _) ->
210+
if !Globals.epsilon_on_input then
211+
let ty = translate_type (get_type v') in
212+
let nv = mk_var (v, ty) in
213+
let p' = translate_expr p in
214+
mk_eps (mk_lam (nv, p'))
215+
else
216+
let v = Index.make_tau_name e in
217+
let ty = translate_type (get_type e) in
218+
mk_var (v, ty)
213219
| Elam (Evar (v, _) as v', p, _) ->
214220
let ty = translate_type (get_type v') in
215221
let nv = mk_var (v, ty) in
@@ -531,9 +537,13 @@ let rec trproof_dk p =
531537
let pzz = substitute [(vx, zz)] px in
532538
let prpzz = mk_pr_var pzz in
533539
let sub = trproof_dk (List.nth phyps 0) in
534-
let lam = mk_lam (dkzz, mk_lam (prpzz, sub)) in
535540
let conc = get_pr_var exp in
536-
mk_DkRex (a, dkp, lam, conc)
541+
if !Globals.epsilon_on_input then
542+
let lam = mk_lam (prpzz, sub) in
543+
mk_DkReps (a, dkp, lam, conc)
544+
else
545+
let lam = mk_lam (dkzz, mk_lam (prpzz, sub)) in
546+
mk_DkRex (a, dkp, lam, conc)
537547
| Rall (Eall (Evar (_, _) as vx, px, _) as allp, t) ->
538548
if (is_binder_of_type_var allp) then
539549
let dkp = translate_quant_to_dklam allp in

‎lpprint.ml‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ and print_dk_term_aux o (t, var_context) =
171171
fprintf o "(%a) = (%a)"
172172
print_dk_term_aux (t2, var_context)
173173
print_dk_term_aux (t3, var_context)
174+
| Dkeps t -> fprintf o "ε (%a)" print_dk_term_aux (t, var_context)
174175
| DkRfalse (pr) -> fprintf o "Rfalse\n (%a)" print_dk_term_aux (pr, var_context)
175176
| DkRnottrue (pr) -> fprintf o "Rnottrue\n (%a)" print_dk_term_aux (pr, var_context)
176177
| DkRaxiom (p, pr1, pr2) ->
@@ -328,6 +329,12 @@ and print_dk_term_aux o (t, var_context) =
328329
print_dk_term_aux (pr1, var_context)
329330
print_dk_term_aux (pr2, var_context)
330331
print_dk_term_aux (pr3, var_context)
332+
| DkReps (a, p, pr1, pr2) ->
333+
fprintf o "Reps\n (%a)\n (%a)\n (%a)\n (%a)\n"
334+
print_dk_zentype_aux (a, var_context)
335+
print_dk_term_aux (p, var_context)
336+
print_dk_term_aux (pr1, var_context)
337+
print_dk_term_aux (pr2, var_context)
331338
| _ -> assert false
332339
and print_dk_term o t = print_dk_term_aux o (t, [])
333340

‎parsetptp.mly‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,8 @@ expr:
168168
| expr EQSYM expr { eeq $1 $3 }
169169
| expr NEQSYM expr { enot (eeq $1 $3) }
170170
| OPEN expr CLOSE { $2 }
171-
| HASH LBRACKET var_list RBRACKET COLON unit_formula { etau (List.hd $3, $6) }
171+
| HASH LBRACKET var_list RBRACKET COLON unit_formula { Globals.epsilon_on_input := true;
172+
etau (List.hd $3, $6) }
172173
;
173174
arguments:
174175
| OPEN expr_list CLOSE { $2 }

0 commit comments

Comments
 (0)