boehmes@36890
|
1 |
(* Title: HOL/Tools/SMT/z3_interface.ML
|
boehmes@36890
|
2 |
Author: Sascha Boehme, TU Muenchen
|
boehmes@36890
|
3 |
|
boehmes@36890
|
4 |
Interface to Z3 based on a relaxed version of SMT-LIB.
|
boehmes@36890
|
5 |
*)
|
boehmes@36890
|
6 |
|
boehmes@36890
|
7 |
signature Z3_INTERFACE =
|
boehmes@36890
|
8 |
sig
|
boehmes@36890
|
9 |
val interface: SMT_Translate.config
|
boehmes@36890
|
10 |
|
boehmes@36890
|
11 |
val is_builtin: term -> bool
|
boehmes@36890
|
12 |
end
|
boehmes@36890
|
13 |
|
boehmes@36890
|
14 |
structure Z3_Interface: Z3_INTERFACE =
|
boehmes@36890
|
15 |
struct
|
boehmes@36890
|
16 |
|
boehmes@36890
|
17 |
fun z3_builtin_fun bf c ts =
|
boehmes@36890
|
18 |
(case Const c of
|
boehmes@36890
|
19 |
@{term "op / :: real => _"} => SOME ("/", ts)
|
boehmes@36890
|
20 |
| _ => bf c ts)
|
boehmes@36890
|
21 |
|
boehmes@36890
|
22 |
|
boehmes@36890
|
23 |
val {prefixes, strict, builtins, serialize} = SMTLIB_Interface.interface
|
boehmes@36890
|
24 |
val {builtin_typ, builtin_num, builtin_fun} = builtins
|
boehmes@36890
|
25 |
|
boehmes@36890
|
26 |
val interface = {
|
boehmes@36890
|
27 |
extra_norm =
|
boehmes@36890
|
28 |
translate = {
|
boehmes@36890
|
29 |
prefixes = prefixes,
|
boehmes@36890
|
30 |
strict = strict,
|
boehmes@36890
|
31 |
builtins = {
|
boehmes@36890
|
32 |
builtin_typ = builtin_typ,
|
boehmes@36890
|
33 |
builtin_num = builtin_num,
|
boehmes@36890
|
34 |
builtin_fun = z3_builtin_fun builtin_fun},
|
boehmes@36890
|
35 |
serialize = serialize}}
|
boehmes@36890
|
36 |
|
boehmes@36890
|
37 |
end
|