10 |
10 |
11 structure Dcterm : |
11 structure Dcterm : |
12 sig |
12 sig |
13 val mk_conj : cterm * cterm -> cterm |
13 val mk_conj : cterm * cterm -> cterm |
14 val mk_disj : cterm * cterm -> cterm |
14 val mk_disj : cterm * cterm -> cterm |
15 val mk_select : cterm * cterm -> cterm |
|
16 val mk_forall : cterm * cterm -> cterm |
|
17 val mk_exists : cterm * cterm -> cterm |
15 val mk_exists : cterm * cterm -> cterm |
18 |
16 |
19 val dest_conj : cterm -> cterm * cterm |
17 val dest_conj : cterm -> cterm * cterm |
20 val dest_const : cterm -> {Name:string, Ty:typ} |
18 val dest_const : cterm -> {Name:string, Ty:typ} |
21 val dest_disj : cterm -> cterm * cterm |
19 val dest_disj : cterm -> cterm * cterm |
24 val dest_forall : cterm -> cterm * cterm |
22 val dest_forall : cterm -> cterm * cterm |
25 val dest_imp : cterm -> cterm * cterm |
23 val dest_imp : cterm -> cterm * cterm |
26 val dest_let : cterm -> cterm * cterm |
24 val dest_let : cterm -> cterm * cterm |
27 val dest_neg : cterm -> cterm |
25 val dest_neg : cterm -> cterm |
28 val dest_pair : cterm -> cterm * cterm |
26 val dest_pair : cterm -> cterm * cterm |
29 val dest_select : cterm -> cterm * cterm |
|
30 val dest_var : cterm -> {Name:string, Ty:typ} |
27 val dest_var : cterm -> {Name:string, Ty:typ} |
31 val is_conj : cterm -> bool |
28 val is_conj : cterm -> bool |
32 val is_cons : cterm -> bool |
29 val is_cons : cterm -> bool |
33 val is_disj : cterm -> bool |
30 val is_disj : cterm -> bool |
34 val is_eq : cterm -> bool |
31 val is_eq : cterm -> bool |
36 val is_forall : cterm -> bool |
33 val is_forall : cterm -> bool |
37 val is_imp : cterm -> bool |
34 val is_imp : cterm -> bool |
38 val is_let : cterm -> bool |
35 val is_let : cterm -> bool |
39 val is_neg : cterm -> bool |
36 val is_neg : cterm -> bool |
40 val is_pair : cterm -> bool |
37 val is_pair : cterm -> bool |
41 val is_select : cterm -> bool |
|
42 val list_mk_abs : cterm list -> cterm -> cterm |
38 val list_mk_abs : cterm list -> cterm -> cterm |
43 val list_mk_exists : cterm list * cterm -> cterm |
39 val list_mk_exists : cterm list * cterm -> cterm |
44 val list_mk_forall : cterm list * cterm -> cterm |
|
45 val list_mk_disj : cterm list -> cterm |
40 val list_mk_disj : cterm list -> cterm |
46 val strip_abs : cterm -> cterm list * cterm |
41 val strip_abs : cterm -> cterm list * cterm |
47 val strip_comb : cterm -> cterm * cterm list |
42 val strip_comb : cterm -> cterm * cterm list |
48 val strip_conj : cterm -> cterm list |
|
49 val strip_disj : cterm -> cterm list |
43 val strip_disj : cterm -> cterm list |
50 val strip_exists : cterm -> cterm list * cterm |
44 val strip_exists : cterm -> cterm list * cterm |
51 val strip_forall : cterm -> cterm list * cterm |
45 val strip_forall : cterm -> cterm list * cterm |
52 val strip_imp : cterm -> cterm list * cterm |
46 val strip_imp : cterm -> cterm list * cterm |
53 val strip_pair : cterm -> cterm list |
|
54 val drop_prop : cterm -> cterm |
47 val drop_prop : cterm -> cterm |
55 val mk_prop : cterm -> cterm |
48 val mk_prop : cterm -> cterm |
56 end = |
49 end = |
57 struct |
50 struct |
58 |
51 |
77 * Some simple constructor functions. |
70 * Some simple constructor functions. |
78 *---------------------------------------------------------------------------*) |
71 *---------------------------------------------------------------------------*) |
79 |
72 |
80 fun mk_const sign pr = cterm_of sign (Const pr); |
73 fun mk_const sign pr = cterm_of sign (Const pr); |
81 val mk_hol_const = mk_const (sign_of HOL.thy); |
74 val mk_hol_const = mk_const (sign_of HOL.thy); |
82 |
|
83 fun mk_select (r as (Bvar,Body)) = |
|
84 let val ty = #T(rep_cterm Bvar) |
|
85 val c = mk_hol_const("Eps", (ty --> HOLogic.boolT) --> ty) |
|
86 in capply c (uncurry cabs r) |
|
87 end; |
|
88 |
|
89 fun mk_forall (r as (Bvar,Body)) = |
|
90 let val ty = #T(rep_cterm Bvar) |
|
91 val c = mk_hol_const("All", (ty --> HOLogic.boolT) --> HOLogic.boolT) |
|
92 in capply c (uncurry cabs r) |
|
93 end; |
|
94 |
75 |
95 fun mk_exists (r as (Bvar,Body)) = |
76 fun mk_exists (r as (Bvar,Body)) = |
96 let val ty = #T(rep_cterm Bvar) |
77 let val ty = #T(rep_cterm Bvar) |
97 val c = mk_hol_const("Ex", (ty --> HOLogic.boolT) --> HOLogic.boolT) |
78 val c = mk_hol_const("Ex", (ty --> HOLogic.boolT) --> HOLogic.boolT) |
98 in capply c (uncurry cabs r) |
79 in capply c (uncurry cabs r) |
184 * Iterated creation. |
165 * Iterated creation. |
185 *---------------------------------------------------------------------------*) |
166 *---------------------------------------------------------------------------*) |
186 val list_mk_abs = itlist cabs; |
167 val list_mk_abs = itlist cabs; |
187 |
168 |
188 fun list_mk_exists(V,t) = itlist(fn v => fn b => mk_exists(v, b)) V t; |
169 fun list_mk_exists(V,t) = itlist(fn v => fn b => mk_exists(v, b)) V t; |
189 fun list_mk_forall(V,t) = itlist(fn v => fn b => mk_forall(v, b)) V t; |
|
190 val list_mk_disj = end_itlist(fn d1 => fn tm => mk_disj(d1, tm)) |
170 val list_mk_disj = end_itlist(fn d1 => fn tm => mk_disj(d1, tm)) |
191 |
171 |
192 (*--------------------------------------------------------------------------- |
172 (*--------------------------------------------------------------------------- |
193 * Iterated destruction. (To the "right" in a term.) |
173 * Iterated destruction. (To the "right" in a term.) |
194 *---------------------------------------------------------------------------*) |
174 *---------------------------------------------------------------------------*) |
206 val strip_imp = rev2swap o strip dest_imp |
186 val strip_imp = rev2swap o strip dest_imp |
207 val strip_abs = rev2swap o strip dest_abs |
187 val strip_abs = rev2swap o strip dest_abs |
208 val strip_forall = rev2swap o strip dest_forall |
188 val strip_forall = rev2swap o strip dest_forall |
209 val strip_exists = rev2swap o strip dest_exists |
189 val strip_exists = rev2swap o strip dest_exists |
210 |
190 |
211 val strip_conj = rev o (op::) o strip dest_conj |
|
212 val strip_disj = rev o (op::) o strip dest_disj |
191 val strip_disj = rev o (op::) o strip dest_disj |
213 val strip_pair = rev o (op::) o strip dest_pair; |
|
214 |
192 |
215 |
193 |
216 (*--------------------------------------------------------------------------- |
194 (*--------------------------------------------------------------------------- |
217 * Going into and out of prop |
195 * Going into and out of prop |
218 *---------------------------------------------------------------------------*) |
196 *---------------------------------------------------------------------------*) |