src/HOL/Tools/Sledgehammer/sledgehammer_prover_smt.ML
author wenzelm
Wed, 23 Jul 2025 14:53:21 +0200
changeset 82898 89da4dcd1fa8
parent 82620 2d854f1cd830
permissions -rw-r--r--
clarified colors, following d6a14ed060fb;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
58061
3d060f43accb renamed new SMT module from 'SMT2' to 'SMT'
blanchet
parents: 57776
diff changeset
     1
(*  Title:      HOL/Tools/Sledgehammer/sledgehammer_prover_smt.ML
56081
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
     2
    Author:     Fabian Immler, TU Muenchen
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
     3
    Author:     Makarius
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
     4
    Author:     Jasmin Blanchette, TU Muenchen
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
     5
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
     6
SMT solvers as Sledgehammer provers.
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
     7
*)
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
     8
58061
3d060f43accb renamed new SMT module from 'SMT2' to 'SMT'
blanchet
parents: 57776
diff changeset
     9
signature SLEDGEHAMMER_PROVER_SMT =
56081
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    10
sig
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    11
  type stature = ATP_Problem_Generate.stature
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    12
  type mode = Sledgehammer_Prover.mode
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    13
  type prover = Sledgehammer_Prover.prover
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    14
58061
3d060f43accb renamed new SMT module from 'SMT2' to 'SMT'
blanchet
parents: 57776
diff changeset
    15
  val smt_builtins : bool Config.T
3d060f43accb renamed new SMT module from 'SMT2' to 'SMT'
blanchet
parents: 57776
diff changeset
    16
  val smt_triggers : bool Config.T
56081
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    17
82202
a1f85f579a07 initial work on Magnushammer-inspured tactic hammer (from Jasmin)
desharna
parents: 81610
diff changeset
    18
  val is_smt_solver : Proof.context -> string -> bool
a1f85f579a07 initial work on Magnushammer-inspured tactic hammer (from Jasmin)
desharna
parents: 81610
diff changeset
    19
  val is_smt_solver_installed : Proof.context -> string -> bool
58061
3d060f43accb renamed new SMT module from 'SMT2' to 'SMT'
blanchet
parents: 57776
diff changeset
    20
  val run_smt_solver : mode -> string -> prover
75036
212e9ec706cf run all installed provers by default
blanchet
parents: 75033
diff changeset
    21
82202
a1f85f579a07 initial work on Magnushammer-inspured tactic hammer (from Jasmin)
desharna
parents: 81610
diff changeset
    22
  val smt_solvers : Proof.context -> string list
56081
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    23
end;
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    24
58061
3d060f43accb renamed new SMT module from 'SMT2' to 'SMT'
blanchet
parents: 57776
diff changeset
    25
structure Sledgehammer_Prover_SMT : SLEDGEHAMMER_PROVER_SMT =
56081
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    26
struct
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    27
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    28
open ATP_Util
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    29
open ATP_Proof
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    30
open ATP_Problem_Generate
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    31
open ATP_Proof_Reconstruct
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    32
open Sledgehammer_Util
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    33
open Sledgehammer_Proof_Methods
56083
b5d1d9c60341 have Sledgehammer generate Isar proofs from Z3 proofs
blanchet
parents: 56082
diff changeset
    34
open Sledgehammer_Isar
72400
abfeed05c323 tune filename
desharna
parents: 71931
diff changeset
    35
open Sledgehammer_ATP_Systems
56081
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    36
open Sledgehammer_Prover
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    37
69593
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 63692
diff changeset
    38
val smt_builtins = Attrib.setup_config_bool \<^binding>\<open>sledgehammer_smt_builtins\<close> (K true)
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 63692
diff changeset
    39
val smt_triggers = Attrib.setup_config_bool \<^binding>\<open>sledgehammer_smt_triggers\<close> (K true)
56081
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    40
82202
a1f85f579a07 initial work on Magnushammer-inspured tactic hammer (from Jasmin)
desharna
parents: 81610
diff changeset
    41
val smt_solvers = sort_strings o SMT_Config.all_solvers_of
75036
212e9ec706cf run all installed provers by default
blanchet
parents: 75033
diff changeset
    42
82202
a1f85f579a07 initial work on Magnushammer-inspured tactic hammer (from Jasmin)
desharna
parents: 81610
diff changeset
    43
val is_smt_solver = member (op =) o smt_solvers
a1f85f579a07 initial work on Magnushammer-inspured tactic hammer (from Jasmin)
desharna
parents: 81610
diff changeset
    44
val is_smt_solver_installed = member (op =) o SMT_Config.available_solvers_of
56081
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    45
58061
3d060f43accb renamed new SMT module from 'SMT2' to 'SMT'
blanchet
parents: 57776
diff changeset
    46
(* "SMT_Failure.Abnormal_Termination" carries the solver's return code. Until these are sorted out
56081
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    47
   properly in the SMT module, we must interpret these here. *)
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    48
val z3_failures =
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    49
  [(101, OutOfResources),
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    50
   (103, MalformedInput),
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    51
   (110, MalformedInput),
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    52
   (112, TimedOut)]
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    53
val unix_failures =
59019
0c58b5cf989a other way of crashing (with CVC4)
blanchet
parents: 58843
diff changeset
    54
  [(134, Crashed),
0c58b5cf989a other way of crashing (with CVC4)
blanchet
parents: 58843
diff changeset
    55
   (138, Crashed),
56081
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    56
   (139, Crashed)]
58061
3d060f43accb renamed new SMT module from 'SMT2' to 'SMT'
blanchet
parents: 57776
diff changeset
    57
val smt_failures = z3_failures @ unix_failures
56081
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    58
58061
3d060f43accb renamed new SMT module from 'SMT2' to 'SMT'
blanchet
parents: 57776
diff changeset
    59
fun failure_of_smt_failure (SMT_Failure.Counterexample genuine) =
57158
f028d93798e6 simplified counterexample handling
blanchet
parents: 57078
diff changeset
    60
    if genuine then Unprovable else GaveUp
58061
3d060f43accb renamed new SMT module from 'SMT2' to 'SMT'
blanchet
parents: 57776
diff changeset
    61
  | failure_of_smt_failure SMT_Failure.Time_Out = TimedOut
3d060f43accb renamed new SMT module from 'SMT2' to 'SMT'
blanchet
parents: 57776
diff changeset
    62
  | failure_of_smt_failure (SMT_Failure.Abnormal_Termination code) =
3d060f43accb renamed new SMT module from 'SMT2' to 'SMT'
blanchet
parents: 57776
diff changeset
    63
    (case AList.lookup (op =) smt_failures code of
56081
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    64
      SOME failure => failure
63692
1bc4bc2c9fd1 killed final stops in Sledgehammer and friends
blanchet
parents: 62826
diff changeset
    65
    | NONE => UnknownError ("Abnormal termination with exit code " ^ string_of_int code))
58061
3d060f43accb renamed new SMT module from 'SMT2' to 'SMT'
blanchet
parents: 57776
diff changeset
    66
  | failure_of_smt_failure SMT_Failure.Out_Of_Memory = OutOfResources
3d060f43accb renamed new SMT module from 'SMT2' to 'SMT'
blanchet
parents: 57776
diff changeset
    67
  | failure_of_smt_failure (SMT_Failure.Other_Failure s) = UnknownError s
56081
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    68
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    69
val is_boring_builtin_typ =
69593
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 63692
diff changeset
    70
  not o exists_subtype (member (op =) [\<^typ>\<open>nat\<close>, \<^typ>\<open>int\<close>, HOLogic.realT])
56081
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    71
75340
e1aa703c8cce second and last step in making time slicing more flexible in Sledgehammer: try to honor desired slice size
blanchet
parents: 75125
diff changeset
    72
fun smt_filter name ({debug, overlord, max_mono_iters, max_new_mono_instances, type_enc, slices,
81610
ed9ffd8e9e40 added option "cache_dir" to Sledgehammer
desharna
parents: 81254
diff changeset
    73
    timeout, ...} : params) memoize_fun_call state goal i slice_size facts options =
56081
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    74
  let
75340
e1aa703c8cce second and last step in making time slicing more flexible in Sledgehammer: try to honor desired slice size
blanchet
parents: 75125
diff changeset
    75
    val run_timeout = slice_timeout slice_size slices timeout
74891
db4b8dd587a5 added support for higher-order SMT proof search in Sledgehammer
desharna
parents: 72798
diff changeset
    76
    val (higher_order, nat_as_int) =
db4b8dd587a5 added support for higher-order SMT proof search in Sledgehammer
desharna
parents: 72798
diff changeset
    77
      (case type_enc of
75125
18cd39e55eca have Sledgehammer honor 'smt_nat_as_int' option
blanchet
parents: 75069
diff changeset
    78
        SOME s => (SOME (String.isSubstring "native_higher" s), SOME (String.isSubstring "arith" s))
18cd39e55eca have Sledgehammer honor 'smt_nat_as_int' option
blanchet
parents: 75069
diff changeset
    79
      | NONE => (NONE, NONE))
75017
30ccc472d486 disable slicing within SMT (in preparation for factoring it out)
blanchet
parents: 75016
diff changeset
    80
    fun repair_context ctxt = ctxt
30ccc472d486 disable slicing within SMT (in preparation for factoring it out)
blanchet
parents: 75016
diff changeset
    81
      |> Context.proof_map (SMT_Config.select_solver name)
75125
18cd39e55eca have Sledgehammer honor 'smt_nat_as_int' option
blanchet
parents: 75069
diff changeset
    82
      |> (case higher_order of
18cd39e55eca have Sledgehammer honor 'smt_nat_as_int' option
blanchet
parents: 75069
diff changeset
    83
           SOME higher_order => Config.put SMT_Config.higher_order higher_order
18cd39e55eca have Sledgehammer honor 'smt_nat_as_int' option
blanchet
parents: 75069
diff changeset
    84
         | NONE => I)
18cd39e55eca have Sledgehammer honor 'smt_nat_as_int' option
blanchet
parents: 75069
diff changeset
    85
      |> (case nat_as_int of
18cd39e55eca have Sledgehammer honor 'smt_nat_as_int' option
blanchet
parents: 75069
diff changeset
    86
           SOME nat_as_int => Config.put SMT_Config.nat_as_int nat_as_int
18cd39e55eca have Sledgehammer honor 'smt_nat_as_int' option
blanchet
parents: 75069
diff changeset
    87
         | NONE => I)
75017
30ccc472d486 disable slicing within SMT (in preparation for factoring it out)
blanchet
parents: 75016
diff changeset
    88
      |> (if overlord then
30ccc472d486 disable slicing within SMT (in preparation for factoring it out)
blanchet
parents: 75016
diff changeset
    89
            Config.put SMT_Config.debug_files
30ccc472d486 disable slicing within SMT (in preparation for factoring it out)
blanchet
parents: 75016
diff changeset
    90
              (overlord_file_location_of_prover name |> (fn (path, name) => path ^ "/" ^ name))
30ccc472d486 disable slicing within SMT (in preparation for factoring it out)
blanchet
parents: 75016
diff changeset
    91
          else
30ccc472d486 disable slicing within SMT (in preparation for factoring it out)
blanchet
parents: 75016
diff changeset
    92
            I)
30ccc472d486 disable slicing within SMT (in preparation for factoring it out)
blanchet
parents: 75016
diff changeset
    93
       |> Config.put SMT_Config.infer_triggers (Config.get ctxt smt_triggers)
30ccc472d486 disable slicing within SMT (in preparation for factoring it out)
blanchet
parents: 75016
diff changeset
    94
       |> not (Config.get ctxt smt_builtins)
30ccc472d486 disable slicing within SMT (in preparation for factoring it out)
blanchet
parents: 75016
diff changeset
    95
         ? (SMT_Builtin.filter_builtins is_boring_builtin_typ
30ccc472d486 disable slicing within SMT (in preparation for factoring it out)
blanchet
parents: 75016
diff changeset
    96
            #> Config.put SMT_Systems.z3_extensions false)
30ccc472d486 disable slicing within SMT (in preparation for factoring it out)
blanchet
parents: 75016
diff changeset
    97
       |> repair_monomorph_context max_mono_iters default_max_mono_iters max_new_mono_instances
30ccc472d486 disable slicing within SMT (in preparation for factoring it out)
blanchet
parents: 75016
diff changeset
    98
         default_max_new_mono_instances
56081
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
    99
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
   100
    val state = Proof.map_context (repair_context) state
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
   101
    val ctxt = Proof.context_of state
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
   102
75017
30ccc472d486 disable slicing within SMT (in preparation for factoring it out)
blanchet
parents: 75016
diff changeset
   103
    val timer = Timer.startRealTimer ()
30ccc472d486 disable slicing within SMT (in preparation for factoring it out)
blanchet
parents: 75016
diff changeset
   104
    val birth = Timer.checkRealTimer timer
56081
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
   105
75017
30ccc472d486 disable slicing within SMT (in preparation for factoring it out)
blanchet
parents: 75016
diff changeset
   106
    val filter_result as {outcome, ...} =
81610
ed9ffd8e9e40 added option "cache_dir" to Sledgehammer
desharna
parents: 81254
diff changeset
   107
      \<^try>\<open>SMT_Solver.smt_filter ctxt goal facts i run_timeout memoize_fun_call options
78709
ebafb2daabb7 tuned: prefer antiquotation for try-catch;
wenzelm
parents: 77269
diff changeset
   108
        catch exn =>
ebafb2daabb7 tuned: prefer antiquotation for try-catch;
wenzelm
parents: 77269
diff changeset
   109
          {outcome = SOME (SMT_Failure.Other_Failure (Runtime.exn_message exn)), fact_ids = NONE,
ebafb2daabb7 tuned: prefer antiquotation for try-catch;
wenzelm
parents: 77269
diff changeset
   110
           atp_proof = K []}\<close>
56081
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
   111
75017
30ccc472d486 disable slicing within SMT (in preparation for factoring it out)
blanchet
parents: 75016
diff changeset
   112
    val death = Timer.checkRealTimer timer
30ccc472d486 disable slicing within SMT (in preparation for factoring it out)
blanchet
parents: 75016
diff changeset
   113
    val run_time = death - birth
56081
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
   114
  in
75017
30ccc472d486 disable slicing within SMT (in preparation for factoring it out)
blanchet
parents: 75016
diff changeset
   115
    {outcome = outcome, filter_result = filter_result, used_from = facts, run_time = run_time}
56081
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
   116
  end
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
   117
81610
ed9ffd8e9e40 added option "cache_dir" to Sledgehammer
desharna
parents: 81254
diff changeset
   118
fun run_smt_solver mode name
ed9ffd8e9e40 added option "cache_dir" to Sledgehammer
desharna
parents: 81254
diff changeset
   119
    (params as {debug, verbose, isar_proofs, compress, try0, smt_proofs, minimize, preplay_timeout,
ed9ffd8e9e40 added option "cache_dir" to Sledgehammer
desharna
parents: 81254
diff changeset
   120
      ...} : params)
ed9ffd8e9e40 added option "cache_dir" to Sledgehammer
desharna
parents: 81254
diff changeset
   121
    ({state, goal, subgoal, subgoal_count, factss, found_something, memoize_fun_call,
ed9ffd8e9e40 added option "cache_dir" to Sledgehammer
desharna
parents: 81254
diff changeset
   122
      ...} : prover_problem)
75025
f741d55a81e5 thread slices through
blanchet
parents: 75023
diff changeset
   123
    slice =
56081
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
   124
  let
77269
bc43f86c9598 added refute mode to Sledgehammer to find 'counterexamples'
blanchet
parents: 75868
diff changeset
   125
    val (basic_slice as (slice_size, _, _, _, _), SMT_Slice options) = slice
75069
455d886009b1 uniformized fact selection for ATP and SMT in Sledgehammer
desharna
parents: 75067
diff changeset
   126
    val facts = facts_of_basic_slice basic_slice factss
56081
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
   127
    val ctxt = Proof.context_of state
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
   128
57159
24cbdebba35a refactored Z3 to Isar proof construction code
blanchet
parents: 57158
diff changeset
   129
    val {outcome, filter_result = {fact_ids, atp_proof, ...}, used_from, run_time} =
81610
ed9ffd8e9e40 added option "cache_dir" to Sledgehammer
desharna
parents: 81254
diff changeset
   130
      smt_filter name params memoize_fun_call state goal subgoal slice_size facts options
60201
90e88e521e0e made CVC4 support work also without unsat cores
blanchet
parents: 59019
diff changeset
   131
    val used_facts =
90e88e521e0e made CVC4 support work also without unsat cores
blanchet
parents: 59019
diff changeset
   132
      (case fact_ids of
90e88e521e0e made CVC4 support work also without unsat cores
blanchet
parents: 59019
diff changeset
   133
        NONE => map fst used_from
60924
610794dff23c tuned signature, in accordance to sortBy in Scala;
wenzelm
parents: 60201
diff changeset
   134
      | SOME ids => sort_by fst (map (fst o snd) ids))
58061
3d060f43accb renamed new SMT module from 'SMT2' to 'SMT'
blanchet
parents: 57776
diff changeset
   135
    val outcome = Option.map failure_of_smt_failure outcome
56081
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
   136
57738
25d1495e6641 eliminated needlessly complex message tail
blanchet
parents: 57735
diff changeset
   137
    val (preferred_methss, message) =
56081
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
   138
      (case outcome of
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
   139
        NONE =>
57734
18bb3e1ff6f6 rationalized preplaying by eliminating (now superfluous) laziness
blanchet
parents: 57732
diff changeset
   140
        let
77269
bc43f86c9598 added refute mode to Sledgehammer to find 'counterexamples'
blanchet
parents: 75868
diff changeset
   141
          val _ = found_something name;
72518
4be6ae020fc4 Added smt (verit) to Sledgehammer's proof preplay.
desharna
parents: 72400
diff changeset
   142
          val preferred =
4be6ae020fc4 Added smt (verit) to Sledgehammer's proof preplay.
desharna
parents: 72400
diff changeset
   143
            if smt_proofs then
75371
136f79711c2a tuned sledgehammer to suggest (smt (verit)) on failing smt preplay for all but Z3
desharna
parents: 75340
diff changeset
   144
              SMT_Method (if name = "z3" then SMT_Z3 else SMT_Verit "default")
72518
4be6ae020fc4 Added smt (verit) to Sledgehammer's proof preplay.
desharna
parents: 72400
diff changeset
   145
            else
81254
d3c0734059ee variable instantiation in Sledgehammer and Metis
blanchet
parents: 78709
diff changeset
   146
              Metis_Method (NONE, NONE, []);
75868
e7b04452eef3 revived 'try0' and 'smart' Isar proofs in Sledgehammer
blanchet
parents: 75371
diff changeset
   147
          val methss =
e7b04452eef3 revived 'try0' and 'smart' Isar proofs in Sledgehammer
blanchet
parents: 75371
diff changeset
   148
            if try0 then
81254
d3c0734059ee variable instantiation in Sledgehammer and Metis
blanchet
parents: 78709
diff changeset
   149
              bunches_of_proof_methods ctxt smt_proofs false true
d3c0734059ee variable instantiation in Sledgehammer and Metis
blanchet
parents: 78709
diff changeset
   150
            else if smt_proofs then
d3c0734059ee variable instantiation in Sledgehammer and Metis
blanchet
parents: 78709
diff changeset
   151
              bunches_of_smt_methods ctxt
75868
e7b04452eef3 revived 'try0' and 'smart' Isar proofs in Sledgehammer
blanchet
parents: 75371
diff changeset
   152
            else
81254
d3c0734059ee variable instantiation in Sledgehammer and Metis
blanchet
parents: 78709
diff changeset
   153
              bunches_of_metis_methods ctxt false true
57734
18bb3e1ff6f6 rationalized preplaying by eliminating (now superfluous) laziness
blanchet
parents: 57732
diff changeset
   154
        in
72518
4be6ae020fc4 Added smt (verit) to Sledgehammer's proof preplay.
desharna
parents: 72400
diff changeset
   155
          ((preferred, methss),
82620
2d854f1cd830 clarify Sledgehammer instantiations without preplay (dont_preplay option and tactic provers)
Lukas Bartl <lukas.bartl@uni-a.de>
parents: 82202
diff changeset
   156
           fn preplay_outcome =>
57734
18bb3e1ff6f6 rationalized preplaying by eliminating (now superfluous) laziness
blanchet
parents: 57732
diff changeset
   157
             let
58843
521cea5fa777 discontinued obsolete Output.urgent_message;
wenzelm
parents: 58498
diff changeset
   158
               val _ = if verbose then writeln "Generating proof text..." else ()
57723
668322cd58f4 use parallel preplay machinery also for one-line proofs
blanchet
parents: 57721
diff changeset
   159
57734
18bb3e1ff6f6 rationalized preplaying by eliminating (now superfluous) laziness
blanchet
parents: 57732
diff changeset
   160
               fun isar_params () =
81254
d3c0734059ee variable instantiation in Sledgehammer and Metis
blanchet
parents: 78709
diff changeset
   161
                 (verbose, (NONE, NONE, []), preplay_timeout, compress, try0, minimize,
d3c0734059ee variable instantiation in Sledgehammer and Metis
blanchet
parents: 78709
diff changeset
   162
                  atp_proof (), goal)
57056
8b2283566f6e properly reconstruct helpers in Z3 proofs
blanchet
parents: 57054
diff changeset
   163
82620
2d854f1cd830 clarify Sledgehammer instantiations without preplay (dont_preplay option and tactic provers)
Lukas Bartl <lukas.bartl@uni-a.de>
parents: 82202
diff changeset
   164
                val preplay_result = preplay_outcome
2d854f1cd830 clarify Sledgehammer instantiations without preplay (dont_preplay option and tactic provers)
Lukas Bartl <lukas.bartl@uni-a.de>
parents: 82202
diff changeset
   165
                  |> the_default
2d854f1cd830 clarify Sledgehammer instantiations without preplay (dont_preplay option and tactic provers)
Lukas Bartl <lukas.bartl@uni-a.de>
parents: 82202
diff changeset
   166
                    (map (apfst Pretty.str) used_facts,
2d854f1cd830 clarify Sledgehammer instantiations without preplay (dont_preplay option and tactic provers)
Lukas Bartl <lukas.bartl@uni-a.de>
parents: 82202
diff changeset
   167
                     (preferred, Play_Timed_Out Time.zeroTime))
2d854f1cd830 clarify Sledgehammer instantiations without preplay (dont_preplay option and tactic provers)
Lukas Bartl <lukas.bartl@uni-a.de>
parents: 82202
diff changeset
   168
               val one_line_params = (preplay_result, proof_banner mode name, subgoal, subgoal_count)
57734
18bb3e1ff6f6 rationalized preplaying by eliminating (now superfluous) laziness
blanchet
parents: 57732
diff changeset
   169
               val num_chained = length (#facts (Proof.goal state))
18bb3e1ff6f6 rationalized preplaying by eliminating (now superfluous) laziness
blanchet
parents: 57732
diff changeset
   170
             in
71931
0c8a9c028304 simplified 'smt_proofs' option to be a binary option (instead of ternary), now that SMT proofs are accepted in the AFP (done with Martin Desharnais)
blanchet
parents: 69593
diff changeset
   171
               proof_text ctxt debug isar_proofs smt_proofs isar_params num_chained one_line_params
57738
25d1495e6641 eliminated needlessly complex message tail
blanchet
parents: 57735
diff changeset
   172
             end)
57734
18bb3e1ff6f6 rationalized preplaying by eliminating (now superfluous) laziness
blanchet
parents: 57732
diff changeset
   173
        end
57738
25d1495e6641 eliminated needlessly complex message tail
blanchet
parents: 57735
diff changeset
   174
      | SOME failure => ((Auto_Method (* dummy *), []), fn _ => string_of_atp_failure failure))
56081
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
   175
  in
57734
18bb3e1ff6f6 rationalized preplaying by eliminating (now superfluous) laziness
blanchet
parents: 57732
diff changeset
   176
    {outcome = outcome, used_facts = used_facts, used_from = used_from,
57738
25d1495e6641 eliminated needlessly complex message tail
blanchet
parents: 57735
diff changeset
   177
     preferred_methss = preferred_methss, run_time = run_time, message = message}
56081
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
   178
  end
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
   179
72fad75baf7e integrate SMT2 with Sledgehammer
blanchet
parents:
diff changeset
   180
end;