/usr/share/hol88-2.02.19940316/contrib/convert/unfold.ml is in hol88-contrib-source 2.02.19940316-14.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 66 | %<
---------------------------------
new-unwind library
unfold.ml
based on HOL88 unwind library
Rules for unfolding
this file mk_thm free !!
---------------------------------
>%
let REWRITES_CONV net = \tm. FIRST_CONV (lookup_term net tm) tm;;
%
A1 |- t1 = t1' , ... , An |- tn = tn'
---------------------------------------------------------
A1 u ... u An |- (t1 /\ ... /\ tn) = (t1' /\ ... /\ tn')
%
letrec MK_CONJL thl =
(if null thl
then fail
if null(tl thl)
then hd thl
else
(let th = MK_CONJL(tl thl)
in
let t1,() = dest_eq(concl(hd thl))
and (),t2' = dest_eq(concl th)
in
(AP_TERM "$/\ ^t1" th) TRANS (AP_THM (AP_TERM "$/\" (hd thl)) t2'))
) ? failwith `MK_CONJL`;;
%
A1 |- t1 = t1' , ... , An |- tn = tn'
--------------------------------------------------
A1 u ... u An |- ?l1 ... lm. t1 /\ ... /\ tn =
?l1 ... lm. t1' /\ ... /\ tn'
%
let UNFOLD thl =
let net = mk_conv_net thl
in
\t.
((let vars, eqs = strip_exists t
and rewrite = REWRITES_CONV net
in
LIST_MK_EXISTS vars (MK_CONJL(map rewrite (conjuncts eqs)))
) ? failwith `UNFOLD`);;
%
A1 |- t1 = t1' , ... , An |- tn = tn'
A |- t = (?l1 ... lm. t1 /\ ... /\ tn)
------------------------------------------
A |- t = (?l1 ... lm. t1' /\ ... /\ tn')
%
let UNFOLD_RULE thl th =
RIGHT_CONV_RULE (UNFOLD(map SPEC_ALL thl)) (SPEC_ALL th)
? failwith`UNFOLD_RULE`;;
|