src/HOL/SMT/SMT.thy
changeset 32618 42865636d006
child 33006 39f73a59e855
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/src/HOL/SMT/SMT.thy	Fri Sep 18 18:13:19 2009 +0200
     1.3 @@ -0,0 +1,51 @@
     1.4 +(*  Title:      HOL/SMT/SMT.thy
     1.5 +    Author:     Sascha Boehme, TU Muenchen
     1.6 +*)
     1.7 +
     1.8 +header {* SMT method using external SMT solvers (CVC3, Yices, Z3) *}
     1.9 +
    1.10 +theory SMT
    1.11 +imports SMT_Definitions
    1.12 +uses
    1.13 +  "Tools/smt_normalize.ML"
    1.14 +  "Tools/smt_monomorph.ML"
    1.15 +  "Tools/smt_translate.ML"
    1.16 +  "Tools/smt_solver.ML"
    1.17 +  "Tools/smtlib_interface.ML"
    1.18 +  "Tools/cvc3_solver.ML"
    1.19 +  "Tools/yices_solver.ML"
    1.20 +  "Tools/z3_model.ML"
    1.21 +  "Tools/z3_interface.ML"
    1.22 +  "Tools/z3_solver.ML"
    1.23 +begin
    1.24 +
    1.25 +setup {*
    1.26 +  SMT_Normalize.setup #>
    1.27 +  SMT_Solver.setup #>
    1.28 +  CVC3_Solver.setup #>
    1.29 +  Yices_Solver.setup #>
    1.30 +  Z3_Solver.setup
    1.31 +*}
    1.32 +
    1.33 +ML {*
    1.34 +OuterSyntax.improper_command "smt_status"
    1.35 +  "Show the available SMT solvers and the currently selected solver."
    1.36 +  OuterKeyword.diag
    1.37 +    (Scan.succeed (Toplevel.no_timing o Toplevel.keep (fn state =>
    1.38 +      SMT_Solver.print_setup (Context.Proof (Toplevel.context_of state)))))
    1.39 +*}
    1.40 +
    1.41 +method_setup smt = {*
    1.42 +  let fun solver thms ctxt = SMT_Solver.smt_tac ctxt thms
    1.43 +  in
    1.44 +    Scan.optional (Scan.lift (Args.add -- Args.colon) |-- Attrib.thms) [] >>
    1.45 +    (Method.SIMPLE_METHOD' oo solver)
    1.46 +  end
    1.47 +*} "Applies an SMT solver to the current goal."
    1.48 +
    1.49 +declare [[ smt_solver = z3, smt_timeout = 20, smt_trace = false ]]
    1.50 +declare [[ smt_unfold_defs = true ]]
    1.51 +declare [[ z3_proofs = false ]]
    1.52 +
    1.53 +end
    1.54 +