src/HOL/SMT/Tools/smt_solver.ML
changeset 32627 23cc1724ede5
parent 32622 8ed38c7bd21a
child 32943 2cb928848e77
equal deleted inserted replaced
32626:a45e8ec2b51e 32627:23cc1724ede5
    53 structure SMT_Solver: SMT_SOLVER =
    53 structure SMT_Solver: SMT_SOLVER =
    54 struct
    54 struct
    55 
    55 
    56 exception SMT_COUNTEREXAMPLE of bool * term list
    56 exception SMT_COUNTEREXAMPLE of bool * term list
    57 
    57 
    58 val theory_of = Context.cases I ProofContext.theory_of
       
    59 
       
    60 
    58 
    61 datatype interface = Interface of {
    59 datatype interface = Interface of {
    62   normalize: SMT_Normalize.config list,
    60   normalize: SMT_Normalize.config list,
    63   translate: SMT_Translate.config }
    61   translate: SMT_Translate.config }
    64 
    62 
   175 )
   173 )
   176 
   174 
   177 val solver_name_of = snd o SelectedSolver.get
   175 val solver_name_of = snd o SelectedSolver.get
   178 
   176 
   179 fun select_solver name gen =
   177 fun select_solver name gen =
   180   if is_none (lookup_solver (theory_of gen) name)
   178   if is_none (lookup_solver (Context.theory_of gen) name)
   181   then error ("SMT solver not registered: " ^ quote name)
   179   then error ("SMT solver not registered: " ^ quote name)
   182   else SelectedSolver.map (K (serial (), name)) gen
   180   else SelectedSolver.map (K (serial (), name)) gen
   183 
   181 
   184 fun raw_solver_of gen =
   182 fun raw_solver_of gen =
   185   (case lookup_solver (theory_of gen) (solver_name_of gen) of
   183   (case lookup_solver (Context.theory_of gen) (solver_name_of gen) of
   186     NONE => error "No SMT solver selected"
   184     NONE => error "No SMT solver selected"
   187   | SOME (s, _) => s)
   185   | SOME (s, _) => s)
   188 
   186 
   189 val solver_of = gen_solver o raw_solver_of
   187 val solver_of = gen_solver o raw_solver_of
   190 
   188 
   226   setup_trace
   224   setup_trace
   227 
   225 
   228 fun print_setup gen =
   226 fun print_setup gen =
   229   let
   227   let
   230     val t = string_of_int (Config.get_generic gen timeout)
   228     val t = string_of_int (Config.get_generic gen timeout)
   231     val names = sort string_ord (all_solver_names_of (theory_of gen))
   229     val names = sort string_ord (all_solver_names_of (Context.theory_of gen))
   232     val ns = if null names then [no_solver] else names
   230     val ns = if null names then [no_solver] else names
   233     val take_info = (fn (_, []) => NONE | info => SOME info)
   231     val take_info = (fn (_, []) => NONE | info => SOME info)
   234     val infos =
   232     val infos =
   235       theory_of gen
   233       Context.theory_of gen
   236       |> Symtab.dest o Solvers.get
   234       |> Symtab.dest o Solvers.get
   237       |> map_filter (fn (n, (_, info)) => take_info (n, info gen))
   235       |> map_filter (fn (n, (_, info)) => take_info (n, info gen))
   238       |> sort (prod_ord string_ord (K EQUAL))
   236       |> sort (prod_ord string_ord (K EQUAL))
   239       |> map (fn (n, ps) => Pretty.big_list (n ^ ":") ps)
   237       |> map (fn (n, ps) => Pretty.big_list (n ^ ":") ps)
   240   in
   238   in