src/HOL/SMT.thy
changeset 41426 09615ed31f04
parent 41328 6792a5c92a58
child 41432 3214c39777ab
equal deleted inserted replaced
41424:7ee22760436c 41426:09615ed31f04
     3 *)
     3 *)
     4 
     4 
     5 header {* Bindings to Satisfiability Modulo Theories (SMT) solvers *}
     5 header {* Bindings to Satisfiability Modulo Theories (SMT) solvers *}
     6 
     6 
     7 theory SMT
     7 theory SMT
     8 imports List
     8 imports Record
     9 uses
     9 uses
    10   "Tools/Datatype/datatype_selectors.ML"
       
    11   "Tools/SMT/smt_utils.ML"
    10   "Tools/SMT/smt_utils.ML"
    12   "Tools/SMT/smt_failure.ML"
    11   "Tools/SMT/smt_failure.ML"
    13   "Tools/SMT/smt_config.ML"
    12   "Tools/SMT/smt_config.ML"
    14   ("Tools/SMT/smt_monomorph.ML")
    13   ("Tools/SMT/smt_monomorph.ML")
    15   ("Tools/SMT/smt_builtin.ML")
    14   ("Tools/SMT/smt_builtin.ML")
       
    15   ("Tools/SMT/smt_datatypes.ML")
    16   ("Tools/SMT/smt_normalize.ML")
    16   ("Tools/SMT/smt_normalize.ML")
    17   ("Tools/SMT/smt_translate.ML")
    17   ("Tools/SMT/smt_translate.ML")
    18   ("Tools/SMT/smt_solver.ML")
    18   ("Tools/SMT/smt_solver.ML")
    19   ("Tools/SMT/smtlib_interface.ML")
    19   ("Tools/SMT/smtlib_interface.ML")
    20   ("Tools/SMT/z3_interface.ML")
    20   ("Tools/SMT/z3_interface.ML")
   121 definition term_true where "term_true = True"
   121 definition term_true where "term_true = True"
   122 definition term_false where "term_false = False"
   122 definition term_false where "term_false = False"
   123 
   123 
   124 
   124 
   125 
   125 
   126 
       
   127 subsection {* Integer division and modulo for Z3 *}
   126 subsection {* Integer division and modulo for Z3 *}
   128 
   127 
   129 definition z3div :: "int \<Rightarrow> int \<Rightarrow> int" where
   128 definition z3div :: "int \<Rightarrow> int \<Rightarrow> int" where
   130   "z3div k l = (if 0 \<le> l then k div l else -(k div (-l)))"
   129   "z3div k l = (if 0 \<le> l then k div l else -(k div (-l)))"
   131 
   130 
   136 
   135 
   137 subsection {* Setup *}
   136 subsection {* Setup *}
   138 
   137 
   139 use "Tools/SMT/smt_monomorph.ML"
   138 use "Tools/SMT/smt_monomorph.ML"
   140 use "Tools/SMT/smt_builtin.ML"
   139 use "Tools/SMT/smt_builtin.ML"
       
   140 use "Tools/SMT/smt_datatypes.ML"
   141 use "Tools/SMT/smt_normalize.ML"
   141 use "Tools/SMT/smt_normalize.ML"
   142 use "Tools/SMT/smt_translate.ML"
   142 use "Tools/SMT/smt_translate.ML"
   143 use "Tools/SMT/smt_solver.ML"
   143 use "Tools/SMT/smt_solver.ML"
   144 use "Tools/SMT/smtlib_interface.ML"
   144 use "Tools/SMT/smtlib_interface.ML"
   145 use "Tools/SMT/z3_interface.ML"
   145 use "Tools/SMT/z3_interface.ML"
   378 
   378 
   379 hide_type (open) pattern
   379 hide_type (open) pattern
   380 hide_const Pattern fun_app term_true term_false z3div z3mod
   380 hide_const Pattern fun_app term_true term_false z3div z3mod
   381 hide_const (open) trigger pat nopat weight
   381 hide_const (open) trigger pat nopat weight
   382 
   382 
   383 
       
   384 
       
   385 subsection {* Selectors for datatypes *}
       
   386 
       
   387 setup {* Datatype_Selectors.setup *}
       
   388 
       
   389 declare [[ selector Pair 1 = fst, selector Pair 2 = snd ]]
       
   390 declare [[ selector Cons 1 = hd, selector Cons 2 = tl ]]
       
   391 
       
   392 end
   383 end