src/HOL/Tools/SMT/z3_interface.ML
author boehmes
Wed, 12 May 2010 23:54:02 +0200
changeset 36890 8e55aa1306c5
child 36891 bcd6fce5bf06
permissions -rw-r--r--
integrated SMT into the HOL image
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