| author | wenzelm | 
| Sat, 13 Mar 2021 12:45:31 +0100 | |
| changeset 73420 | 2c5d58e58fd2 | 
| parent 72908 | 6a26a955308e | 
| child 74382 | 8d0294d877bd | 
| permissions | -rw-r--r-- | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 1 | (* Title: HOL/Tools/SMT/Verit_Proof.ML | 
| 57704 | 2 | Author: Mathias Fleury, ENS Rennes | 
| 3 | Author: Sascha Boehme, TU Muenchen | |
| 4 | ||
| 5 | VeriT proofs: parsing and abstract syntax tree. | |
| 6 | *) | |
| 7 | ||
| 8 | signature VERIT_PROOF = | |
| 9 | sig | |
| 10 | (*proofs*) | |
| 11 |   datatype veriT_step = VeriT_Step of {
 | |
| 57712 
3c4e6bc7455f
Simplifying the labels in the proof of the SMT solver veriT.
 fleury parents: 
57710diff
changeset | 12 | id: string, | 
| 57704 | 13 | rule: string, | 
| 14 | prems: string list, | |
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 15 | proof_ctxt: term list, | 
| 57704 | 16 | concl: term, | 
| 17 | fixes: string list} | |
| 18 | ||
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 19 |   datatype veriT_replay_node = VeriT_Replay_Node of {
 | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 20 | id: string, | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 21 | rule: string, | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 22 | args: term list, | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 23 | prems: string list, | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 24 | proof_ctxt: term list, | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 25 | concl: term, | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 26 | bounds: (string * typ) list, | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 27 | declarations: (string * term) list, | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 28 | insts: term Symtab.table, | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 29 | subproof: (string * typ) list * term list * term list * veriT_replay_node list} | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 30 | |
| 57704 | 31 | (*proof parser*) | 
| 32 | val parse: typ Symtab.table -> term Symtab.table -> string list -> | |
| 33 | Proof.context -> veriT_step list * Proof.context | |
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 34 | val parse_replay: typ Symtab.table -> term Symtab.table -> string list -> | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 35 | Proof.context -> veriT_replay_node list * Proof.context | 
| 57704 | 36 | |
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 37 | val step_prefix : string | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 38 | val input_rule: string | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 39 | val keep_app_symbols: string -> bool | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 40 | val keep_raw_lifting: string -> bool | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 41 | val normalized_input_rule: string | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 42 | val la_generic_rule : string | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 43 | val rewrite_rule : string | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 44 | val simp_arith_rule : string | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 45 | val veriT_deep_skolemize_rule : string | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 46 | val veriT_def : string | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 47 | val subproof_rule : string | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 48 | val local_input_rule : string | 
| 72513 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 49 | val not_not_rule : string | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 50 | val contract_rule : string | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 51 | val ite_intro_rule : string | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 52 | val eq_congruent_rule : string | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 53 | val eq_congruent_pred_rule : string | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 54 | val skolemization_steps : string list | 
| 72908 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 55 | val theory_resolution2_rule: string | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 56 | val equiv_pos2_rule: string | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 57 | val th_resolution_rule: string | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 58 | |
| 72513 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 59 | val is_skolemization: string -> bool | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 60 | val is_skolemization_step: veriT_replay_node -> bool | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 61 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 62 | val number_of_steps: veriT_replay_node list -> int | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 63 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 64 | (*Strategy related*) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 65 | val veriT_strategy : string Config.T | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 66 | val veriT_current_strategy : Context.generic -> string list | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 67 | val all_veriT_stgies: Context.generic -> string list; | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 68 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 69 | val select_veriT_stgy: string -> Context.generic -> Context.generic; | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 70 | val valid_veriT_stgy: string -> Context.generic -> bool; | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 71 | val verit_add_stgy: string * string list -> Context.generic -> Context.generic | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 72 | val verit_rm_stgy: string -> Context.generic -> Context.generic | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 73 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 74 | (*Global tactic*) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 75 | val verit_tac: Proof.context -> thm list -> int -> tactic | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 76 | val verit_tac_stgy: string -> Proof.context -> thm list -> int -> tactic | 
| 57704 | 77 | end; | 
| 78 | ||
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 79 | structure Verit_Proof: VERIT_PROOF = | 
| 57704 | 80 | struct | 
| 81 | ||
| 58061 | 82 | open SMTLIB_Proof | 
| 57704 | 83 | |
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 84 | val veriT_strategy_default_name = "default"; (*FUDGE*) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 85 | val veriT_strategy_del_insts_name = "del_insts"; (*FUDGE*) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 86 | val veriT_strategy_rm_insts_name = "ccfv_SIG"; (*FUDGE*) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 87 | val veriT_strategy_ccfv_insts_name = "ccfv_threshold"; (*FUDGE*) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 88 | val veriT_strategy_best_name = "best"; (*FUDGE*) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 89 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 90 | val veriT_strategy_best = ["--index-sorts", "--index-fresh-sorts", "--triggers-new", | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 91 | "--triggers-sel-rm-specific"]; | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 92 | val veriT_strategy_del_insts = ["--index-sorts", "--index-fresh-sorts", "--ccfv-breadth", | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 93 | "--inst-deletion", "--index-SAT-triggers", "--inst-deletion-loops", "--inst-deletion-track-vars", | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 94 | "--inst-deletion", "--index-SAT-triggers"]; | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 95 | val veriT_strategy_rm_insts = ["--index-SIG", "--triggers-new", "--triggers-sel-rm-specific"]; | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 96 | val veriT_strategy_ccfv_insts = ["--index-sorts", "--index-fresh-sorts", "--triggers-new", | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 97 | "--triggers-sel-rm-specific", "--triggers-restrict-combine", "--inst-deletion", | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 98 | "--index-SAT-triggers", "--inst-deletion-loops", "--inst-deletion-track-vars", "--inst-deletion", | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 99 | "--index-SAT-triggers", "--inst-sorts-threshold=100000", "--ematch-exp=10000000", | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 100 | "--ccfv-index=100000", "--ccfv-index-full=1000"] | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 101 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 102 | val veriT_strategy_default = []; | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 103 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 104 | type verit_strategy = {default_strategy: string, strategies: (string * string list) list}
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 105 | fun mk_verit_strategy default_strategy strategies : verit_strategy = {default_strategy=default_strategy,strategies=strategies}
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 106 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 107 | val empty_data = mk_verit_strategy veriT_strategy_best_name | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 108 | [(veriT_strategy_default_name, veriT_strategy_default), | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 109 | (veriT_strategy_del_insts_name, veriT_strategy_del_insts), | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 110 | (veriT_strategy_rm_insts_name, veriT_strategy_rm_insts), | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 111 | (veriT_strategy_ccfv_insts_name, veriT_strategy_ccfv_insts), | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 112 | (veriT_strategy_best_name, veriT_strategy_best)] | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 113 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 114 | fun merge_data ({strategies=strategies1,...}:verit_strategy,
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 115 |     {default_strategy,strategies=strategies2}:verit_strategy) : verit_strategy =
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 116 | mk_verit_strategy default_strategy (AList.merge (op =) (op =) (strategies1, strategies2)) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 117 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 118 | structure Data = Generic_Data | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 119 | ( | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 120 | type T = verit_strategy | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 121 | val empty = empty_data | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 122 | val extend = I | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 123 | val merge = merge_data | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 124 | ) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 125 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 126 | fun veriT_current_strategy ctxt = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 127 | let | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 128 |     val {default_strategy,strategies} = (Data.get ctxt)
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 129 | in | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 130 | AList.lookup (op=) strategies default_strategy | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 131 | |> the | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 132 | end | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 133 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 134 | val veriT_strategy = Attrib.setup_config_string \<^binding>\<open>smt_verit_strategy\<close> (K veriT_strategy_best_name); | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 135 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 136 | fun valid_veriT_stgy stgy context = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 137 | let | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 138 |     val {strategies,...} = Data.get context
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 139 | in | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 140 | AList.defined (op =) strategies stgy | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 141 | end | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 142 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 143 | fun select_veriT_stgy stgy context = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 144 | let | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 145 |     val {strategies,...} = Data.get context
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 146 | val upd = Data.map (K (mk_verit_strategy stgy strategies)) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 147 | in | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 148 | if not (AList.defined (op =) strategies stgy) then | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 149 |       error ("Trying to select unknown veriT strategy: " ^ quote stgy)
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 150 | else upd context | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 151 | end | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 152 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 153 | fun verit_add_stgy stgy context = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 154 | let | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 155 |     val {default_strategy,strategies} = Data.get context
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 156 | in | 
| 72908 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 157 | Data.map | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 158 | (K (mk_verit_strategy default_strategy (AList.update (op =) stgy strategies))) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 159 | context | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 160 | end | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 161 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 162 | fun verit_rm_stgy stgy context = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 163 | let | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 164 |     val {default_strategy,strategies} = Data.get context
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 165 | in | 
| 72908 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 166 | Data.map | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 167 | (K (mk_verit_strategy default_strategy (AList.delete (op =) stgy strategies))) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 168 | context | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 169 | end | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 170 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 171 | fun all_veriT_stgies context = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 172 | let | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 173 |     val {strategies,...} = Data.get context
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 174 | in | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 175 | map fst strategies | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 176 | end | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 177 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 178 | fun verit_tac ctxt = SMT_Solver.smt_tac (Context.proof_map (SMT_Config.select_solver "verit") ctxt) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 179 | fun verit_tac_stgy stgy ctxt = verit_tac (Context.proof_of (select_veriT_stgy stgy (Context.Proof ctxt))) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 180 | |
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 181 | datatype raw_veriT_node = Raw_VeriT_Node of {
 | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 182 | id: string, | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 183 | rule: string, | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 184 | args: SMTLIB.tree, | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 185 | prems: string list, | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 186 | concl: SMTLIB.tree, | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 187 | declarations: (string * SMTLIB.tree) list, | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 188 | subproof: raw_veriT_node list} | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 189 | |
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 190 | fun mk_raw_node id rule args prems declarations concl subproof = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 191 |   Raw_VeriT_Node {id = id, rule = rule, args = args, prems = prems, declarations = declarations,
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 192 | concl = concl, subproof = subproof} | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 193 | |
| 57704 | 194 | datatype veriT_node = VeriT_Node of {
 | 
| 57712 
3c4e6bc7455f
Simplifying the labels in the proof of the SMT solver veriT.
 fleury parents: 
57710diff
changeset | 195 | id: string, | 
| 57704 | 196 | rule: string, | 
| 197 | prems: string list, | |
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 198 | proof_ctxt: term list, | 
| 72513 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 199 | concl: term} | 
| 57704 | 200 | |
| 72513 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 201 | fun mk_node id rule prems proof_ctxt concl = | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 202 |   VeriT_Node {id = id, rule = rule, prems = prems, proof_ctxt = proof_ctxt, concl = concl}
 | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 203 | |
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 204 | datatype veriT_replay_node = VeriT_Replay_Node of {
 | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 205 | id: string, | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 206 | rule: string, | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 207 | args: term list, | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 208 | prems: string list, | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 209 | proof_ctxt: term list, | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 210 | concl: term, | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 211 | bounds: (string * typ) list, | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 212 | insts: term Symtab.table, | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 213 | declarations: (string * term) list, | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 214 | subproof: (string * typ) list * term list * term list * veriT_replay_node list} | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 215 | |
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 216 | fun mk_replay_node id rule args prems proof_ctxt concl bounds insts declarations subproof = | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 217 |   VeriT_Replay_Node {id = id, rule = rule, args = args, prems = prems, proof_ctxt = proof_ctxt,
 | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 218 | concl = concl, bounds = bounds, insts = insts, declarations = declarations, | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 219 | subproof = subproof} | 
| 57704 | 220 | |
| 221 | datatype veriT_step = VeriT_Step of {
 | |
| 57712 
3c4e6bc7455f
Simplifying the labels in the proof of the SMT solver veriT.
 fleury parents: 
57710diff
changeset | 222 | id: string, | 
| 57704 | 223 | rule: string, | 
| 224 | prems: string list, | |
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 225 | proof_ctxt: term list, | 
| 57704 | 226 | concl: term, | 
| 227 | fixes: string list} | |
| 228 | ||
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 229 | fun mk_step id rule prems proof_ctxt concl fixes = | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 230 |   VeriT_Step {id = id, rule = rule, prems = prems, proof_ctxt = proof_ctxt, concl = concl,
 | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 231 | fixes = fixes} | 
| 57704 | 232 | |
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 233 | val step_prefix = ".c" | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 234 | val input_rule = "input" | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 235 | val la_generic_rule = "la_generic" | 
| 72513 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 236 | val normalized_input_rule = "__normalized_input" (*arbitrary*) | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 237 | val rewrite_rule = "__rewrite" (*arbitrary*) | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 238 | val subproof_rule = "subproof" | 
| 72513 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 239 | val local_input_rule = "__local_input" (*arbitrary*) | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 240 | val simp_arith_rule = "simp_arith" | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 241 | val veriT_def = "__skolem_definition" (*arbitrary*) | 
| 72513 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 242 | val not_not_rule = "not_not" | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 243 | val contract_rule = "contraction" | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 244 | val eq_congruent_pred_rule = "eq_congruent_pred" | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 245 | val eq_congruent_rule = "eq_congruent" | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 246 | val ite_intro_rule = "ite_intro" | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 247 | val default_skolem_rule = "sko_forall" (*arbitrary, but must be one of the skolems*) | 
| 72908 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 248 | val theory_resolution2_rule = "__theory_resolution2" (*arbitrary*) | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 249 | val equiv_pos2_rule = "equiv_pos2" | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 250 | val th_resolution_rule = "th_resolution" | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 251 | |
| 72513 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 252 | val skolemization_steps = ["sko_forall", "sko_ex"] | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 253 | val is_skolemization = member (op =) skolemization_steps | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 254 | val keep_app_symbols = member (op =) [eq_congruent_pred_rule, eq_congruent_rule, ite_intro_rule] | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 255 | val keep_raw_lifting = member (op =) [eq_congruent_pred_rule, eq_congruent_rule, ite_intro_rule] | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 256 | val is_SH_trivial = member (op =) [not_not_rule, contract_rule] | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 257 | |
| 72513 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 258 | fun is_skolemization_step (VeriT_Replay_Node {id, ...}) = is_skolemization id
 | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 259 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 260 | (* Even the veriT developers do not know if the following rule can still appear in proofs: *) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 261 | val veriT_deep_skolemize_rule = "deep_skolemize" | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 262 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 263 | fun number_of_steps [] = 0 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 264 |   | number_of_steps ((VeriT_Replay_Node {subproof = (_, _, _, subproof), ...}) :: pf) =
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 265 | 1 + number_of_steps subproof + number_of_steps pf | 
| 57708 
4b52c1b319ce
veriT changes for lifted terms, and ite_elim rules.
 fleury parents: 
57705diff
changeset | 266 | |
| 57704 | 267 | (* proof parser *) | 
| 268 | ||
| 269 | fun node_of p cx = | |
| 270 | ([], cx) | |
| 57747 | 271 | ||>> `(with_fresh_names (term_of p)) | 
| 57716 | 272 | |>> snd | 
| 57704 | 273 | |
| 58490 | 274 | fun find_type_in_formula (Abs (v, T, u)) var_name = | 
| 275 | if String.isPrefix var_name v then SOME T else find_type_in_formula u var_name | |
| 57705 | 276 | | find_type_in_formula (u $ v) var_name = | 
| 277 | (case find_type_in_formula u var_name of | |
| 278 | NONE => find_type_in_formula v var_name | |
| 58490 | 279 | | some_T => some_T) | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 280 | | find_type_in_formula (Free(v, T)) var_name = | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 281 | if String.isPrefix var_name v then SOME T else NONE | 
| 57705 | 282 | | find_type_in_formula _ _ = NONE | 
| 283 | ||
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 284 | fun synctactic_var_subst old_name new_name (u $ v) = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 285 | (synctactic_var_subst old_name new_name u $ synctactic_var_subst old_name new_name v) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 286 | | synctactic_var_subst old_name new_name (Abs (v, T, u)) = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 287 | Abs (if String.isPrefix old_name v then new_name else v, T, | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 288 | synctactic_var_subst old_name new_name u) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 289 | | synctactic_var_subst old_name new_name (Free (v, T)) = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 290 | if String.isPrefix old_name v then Free (new_name, T) else Free (v, T) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 291 | | synctactic_var_subst _ _ t = t | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 292 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 293 | fun synctatic_rew_in_lhs_subst old_name new_name (Const(\<^const_name>\<open>HOL.eq\<close>, T) $ t1 $ t2) = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 294 | Const(\<^const_name>\<open>HOL.eq\<close>, T) $ synctactic_var_subst old_name new_name t1 $ t2 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 295 | | synctatic_rew_in_lhs_subst old_name new_name (Const(\<^const_name>\<open>Trueprop\<close>, T) $ t1) = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 296 | Const(\<^const_name>\<open>Trueprop\<close>, T) $ (synctatic_rew_in_lhs_subst old_name new_name t1) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 297 | | synctatic_rew_in_lhs_subst _ _ t = t | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 298 | |
| 58490 | 299 | fun add_bound_variables_to_ctxt concl = | 
| 300 | fold (update_binding o | |
| 301 | (fn s => (s, Term (Free (s, the_default dummyT (find_type_in_formula concl s)))))) | |
| 57705 | 302 | |
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 303 | local | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 304 | |
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 305 | fun remove_Sym (SMTLIB.Sym y) = y | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 306 |     | remove_Sym y = (@{print} y; raise (Fail "failed to match"))
 | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 307 | |
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 308 | fun extract_symbols bds = | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 309 | bds | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 310 | |> map (fn SMTLIB.S [SMTLIB.Sym "=", SMTLIB.Sym x, SMTLIB.Sym y] => [[x, y]] | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 311 | | SMTLIB.S [SMTLIB.Key "=", SMTLIB.Sym x, SMTLIB.Sym y] => [[x, y]] | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 312 | | SMTLIB.S syms => map (single o remove_Sym) syms | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 313 | | SMTLIB.Sym x => [[x]] | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 314 |              | t => raise (Fail ("match error " ^ @{make_string} t)))
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 315 | |> flat | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 316 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 317 | (* onepoint can bind a variable to another variable or to a constant *) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 318 | fun extract_qnt_symbols cx bds = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 319 | bds | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 320 | |> map (fn SMTLIB.S [SMTLIB.Sym "=", SMTLIB.Sym x, SMTLIB.Sym y] => | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 321 | (case node_of (SMTLIB.Sym y) cx of | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 322 | ((_, []), _) => [[x]] | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 323 | | _ => [[x, y]]) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 324 | | SMTLIB.S [SMTLIB.Key "=", SMTLIB.Sym x, SMTLIB.Sym y] => | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 325 | (case node_of (SMTLIB.Sym y) cx of | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 326 | ((_, []), _) => [[x]] | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 327 | | _ => [[x, y]]) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 328 | | SMTLIB.S (SMTLIB.Sym "=" :: SMTLIB.Sym x :: _) => [[x]] | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 329 | | SMTLIB.S (SMTLIB.Key "=" :: SMTLIB.Sym x :: _) => [[x]] | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 330 | | SMTLIB.S syms => map (single o remove_Sym) syms | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 331 | | SMTLIB.Sym x => [[x]] | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 332 |              | t => raise (Fail ("match error " ^ @{make_string} t)))
 | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 333 | |> flat | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 334 | |
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 335 | fun extract_symbols_map bds = | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 336 | bds | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 337 | |> map (fn SMTLIB.S [SMTLIB.Sym "=", SMTLIB.Sym x, _] => [[x]] | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 338 | | SMTLIB.S syms => map (single o remove_Sym) syms) | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 339 | |> flat | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 340 | in | 
| 57705 | 341 | |
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 342 | fun declared_csts _ "__skolem_definition" (SMTLIB.S [SMTLIB.Sym x, typ, _]) = [(x, typ)] | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 343 | | declared_csts _ _ _ = [] | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 344 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 345 | fun skolems_introduced_by_rule (SMTLIB.S bds) = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 346 | fold (fn (SMTLIB.S [SMTLIB.Sym "=", SMTLIB.Sym _, SMTLIB.Sym y]) => curry (op ::) y) bds [] | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 347 | |
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 348 | (*FIXME there is probably a way to use the information given by onepoint*) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 349 | fun bound_vars_by_rule _ "bind" (SMTLIB.S bds) = extract_symbols bds | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 350 | | bound_vars_by_rule cx "onepoint" (SMTLIB.S bds) = extract_qnt_symbols cx bds | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 351 | | bound_vars_by_rule _ "sko_forall" (SMTLIB.S bds) = extract_symbols_map bds | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 352 | | bound_vars_by_rule _ "sko_ex" (SMTLIB.S bds) = extract_symbols_map bds | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 353 | | bound_vars_by_rule _ "__skolem_definition" (SMTLIB.S [SMTLIB.Sym x, _, _]) = [[x]] | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 354 | | bound_vars_by_rule _ _ _ = [] | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 355 | |
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 356 | (* VeriT adds "?" before some variables. *) | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 357 | fun remove_all_qm (SMTLIB.Sym v :: l) = | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 358 | SMTLIB.Sym (perhaps (try (unprefix "?")) v) :: remove_all_qm l | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 359 | | remove_all_qm (SMTLIB.S l :: l') = SMTLIB.S (remove_all_qm l) :: remove_all_qm l' | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 360 | | remove_all_qm (SMTLIB.Key v :: l) = SMTLIB.Key v :: remove_all_qm l | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 361 | | remove_all_qm (v :: l) = v :: remove_all_qm l | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 362 | | remove_all_qm [] = [] | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 363 | |
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 364 | fun remove_all_qm2 (SMTLIB.Sym v) = SMTLIB.Sym (perhaps (try (unprefix "?")) v) | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 365 | | remove_all_qm2 (SMTLIB.S l) = SMTLIB.S (remove_all_qm l) | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 366 | | remove_all_qm2 (SMTLIB.Key v) = SMTLIB.Key v | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 367 | | remove_all_qm2 v = v | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 368 | |
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 369 | end | 
| 57705 | 370 | |
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 371 | datatype step_kind = ASSUME | ANCHOR | NO_STEP | NORMAL_STEP | SKOLEM | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 372 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 373 | fun parse_raw_proof_steps (limit : string option) (ls : SMTLIB.tree list) (cx : name_bindings) : | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 374 | (raw_veriT_node list * SMTLIB.tree list * name_bindings) = | 
| 57704 | 375 | let | 
| 376 | fun rotate_pair (a, (b, c)) = ((a, b), c) | |
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 377 | fun step_kind [] = (NO_STEP, SMTLIB.S [], []) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 378 | | step_kind ((p as SMTLIB.S (SMTLIB.Sym "anchor" :: _)) :: l) = (ANCHOR, p, l) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 379 | | step_kind ((p as SMTLIB.S (SMTLIB.Sym "assume" :: _)) :: l) = (ASSUME, p, l) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 380 | | step_kind ((p as SMTLIB.S (SMTLIB.Sym "step" :: _)) :: l) = (NORMAL_STEP, p, l) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 381 | | step_kind ((p as SMTLIB.S (SMTLIB.Sym "define-fun" :: _)) :: l) = (SKOLEM, p, l) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 382 | fun parse_skolem (SMTLIB.S [SMTLIB.Sym "define-fun", SMTLIB.Sym id, _, typ, | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 383 | SMTLIB.S (SMTLIB.Sym "!" :: t :: [SMTLIB.Key _, SMTLIB.Sym name])]) cx = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 384 | (*replace the name binding by the constant instead of the full term in order to reduce | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 385 | the size of the generated terms and therefore the reconstruction time*) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 386 | let val (l, cx) = (fst oo SMTLIB_Proof.extract_and_update_name_bindings) t cx | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 387 | |> apsnd (SMTLIB_Proof.update_name_binding (name, SMTLIB.Sym id)) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 388 | in | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 389 | (mk_raw_node (id ^ veriT_def) veriT_def (SMTLIB.S [SMTLIB.Sym id, typ, l]) [] [] | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 390 | (SMTLIB.S [SMTLIB.Sym "=", SMTLIB.Sym id, l]) [], cx) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 391 | end | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 392 | | parse_skolem (SMTLIB.S [SMTLIB.Sym "define-fun", SMTLIB.Sym id, _, typ, SMTLIB.S l]) cx = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 393 | let val (l, cx) = (fst oo SMTLIB_Proof.extract_and_update_name_bindings) (SMTLIB.S l ) cx | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 394 | in | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 395 | (mk_raw_node (id ^ veriT_def) veriT_def (SMTLIB.S [SMTLIB.Sym id, typ, l]) [] [] | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 396 | (SMTLIB.S [SMTLIB.Sym "=", SMTLIB.Sym id, l]) [], cx) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 397 | end | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 398 |       | parse_skolem t _ = raise Fail ("unrecognized VeriT proof " ^ \<^make_string> t)
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 399 | fun get_id_cx (SMTLIB.S ((SMTLIB.Sym _) :: (SMTLIB.Sym id) :: l), cx) = (id, (l, cx)) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 400 |       | get_id_cx t = raise Fail ("unrecognized VeriT proof " ^ \<^make_string> t)
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 401 | fun get_id (SMTLIB.S ((SMTLIB.Sym _) :: (SMTLIB.Sym id) :: l)) = (id, l) | 
| 69593 | 402 |       | get_id t = raise Fail ("unrecognized VeriT proof " ^ \<^make_string> t)
 | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 403 | fun parse_source (SMTLIB.Key "premises" :: SMTLIB.S source ::l, cx) = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 404 | (SOME (map (fn (SMTLIB.Sym id) => id) source), (l, cx)) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 405 | | parse_source (l, cx) = (NONE, (l, cx)) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 406 | fun parse_rule (SMTLIB.Key "rule" :: SMTLIB.Sym r :: l, cx) = (r, (l, cx)) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 407 |       | parse_rule t = raise Fail ("unrecognized VeriT proof " ^ \<^make_string> t)
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 408 | fun parse_anchor_step (SMTLIB.S (SMTLIB.Sym "anchor" :: SMTLIB.Key "step" :: SMTLIB.Sym r :: l), cx) = (r, (l, cx)) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 409 |       | parse_anchor_step t = raise Fail ("unrecognized VeriT proof " ^ \<^make_string> t)
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 410 | fun parse_args (SMTLIB.Key "args" :: args :: l, cx) = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 411 | let val ((args, cx), _) = SMTLIB_Proof.extract_and_update_name_bindings args cx | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 412 | in (args, (l, cx)) end | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 413 | | parse_args (l, cx) = (SMTLIB.S [], (l, cx)) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 414 | fun parse_and_clausify_conclusion (SMTLIB.S (SMTLIB.Sym "cl" :: []) :: l, cx) = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 415 | (SMTLIB.Sym "false", (l, cx)) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 416 | | parse_and_clausify_conclusion (SMTLIB.S (SMTLIB.Sym "cl" :: concl) :: l, cx) = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 417 | let val (concl, cx) = fold_map (fst oo SMTLIB_Proof.extract_and_update_name_bindings) concl cx | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 418 | in (SMTLIB.S (SMTLIB.Sym "or" :: concl), (l, cx)) end | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 419 |       | parse_and_clausify_conclusion t = raise Fail ("unrecognized VeriT proof " ^ \<^make_string> t)
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 420 | val parse_normal_step = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 421 | get_id_cx | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 422 | ##> parse_and_clausify_conclusion | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 423 | #> rotate_pair | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 424 | ##> parse_rule | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 425 | #> rotate_pair | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 426 | ##> parse_source | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 427 | #> rotate_pair | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 428 | ##> parse_args | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 429 | #> rotate_pair | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 430 | |
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 431 | fun to_raw_node subproof ((((id, concl), rule), prems), args) = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 432 | mk_raw_node id rule args (the_default [] prems) [] concl subproof | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 433 | fun at_discharge NONE _ = false | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 434 | | at_discharge (SOME id) p = p |> get_id |> fst |> (fn id2 => id = id2) | 
| 57704 | 435 | in | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 436 | case step_kind ls of | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 437 | (NO_STEP, _, _) => ([],[], cx) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 438 | | (NORMAL_STEP, p, l) => | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 439 | if at_discharge limit p then ([], ls, cx) else | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 440 | let | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 441 | val (s, (_, cx)) = (p, cx) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 442 | |> parse_normal_step | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 443 | ||> (fn i => i) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 444 | |>> (to_raw_node []) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 445 | val (rp, rl, cx) = parse_raw_proof_steps limit l cx | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 446 | in (s :: rp, rl, cx) end | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 447 | | (ASSUME, p, l) => | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 448 | let | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 449 | val (id, t :: []) = p | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 450 | |> get_id | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 451 | val ((t, cx), _) = SMTLIB_Proof.extract_and_update_name_bindings t cx | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 452 | val s = mk_raw_node id input_rule (SMTLIB.S []) [] [] t [] | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 453 | val (rp, rl, cx) = parse_raw_proof_steps limit l cx | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 454 | in (s :: rp, rl, cx) end | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 455 | | (ANCHOR, p, l) => | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 456 | let | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 457 | val (anchor_id, (anchor_args, (_, cx))) = (p, cx) |> (parse_anchor_step ##> parse_args) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 458 | val (subproof, discharge_step :: remaining_proof, cx) = parse_raw_proof_steps (SOME anchor_id) l cx | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 459 | val (curss, (_, cx)) = parse_normal_step (discharge_step, cx) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 460 | val s = to_raw_node subproof (fst curss, anchor_args) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 461 | val (rp, rl, cx) = parse_raw_proof_steps limit remaining_proof cx | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 462 | in (s :: rp, rl, cx) end | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 463 | | (SKOLEM, p, l) => | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 464 | let | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 465 | val (s, cx) = parse_skolem p cx | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 466 | val (rp, rl, cx) = parse_raw_proof_steps limit l cx | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 467 | in (s :: rp, rl, cx) end | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 468 | end | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 469 | |
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 470 | fun proof_ctxt_of_rule "bind" t = t | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 471 | | proof_ctxt_of_rule "sko_forall" t = t | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 472 | | proof_ctxt_of_rule "sko_ex" t = t | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 473 | | proof_ctxt_of_rule "let" t = t | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 474 | | proof_ctxt_of_rule "onepoint" t = t | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 475 | | proof_ctxt_of_rule _ _ = [] | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 476 | |
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 477 | fun args_of_rule "bind" t = t | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 478 | | args_of_rule "la_generic" t = t | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 479 | | args_of_rule "lia_generic" t = t | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 480 | | args_of_rule _ _ = [] | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 481 | |
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 482 | fun insts_of_forall_inst "forall_inst" t = map (fn SMTLIB.S [_, SMTLIB.Sym x, a] => (x, a)) t | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 483 | | insts_of_forall_inst _ _ = [] | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 484 | |
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 485 | fun id_of_last_step prems = | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 486 | if null prems then [] | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 487 | else | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 488 |     let val VeriT_Replay_Node {id, ...} = List.last prems in [id] end
 | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 489 | |
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 490 | fun extract_assumptions_from_subproof subproof = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 491 |   let fun extract_assumptions_from_subproof (VeriT_Replay_Node {rule, concl, ...}) assms =
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 492 | if rule = local_input_rule then concl :: assms else assms | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 493 | in | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 494 | fold extract_assumptions_from_subproof subproof [] | 
| 57705 | 495 | end | 
| 496 | ||
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 497 | fun normalized_rule_name id rule = | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 498 | (case (rule = input_rule, can (unprefix SMTLIB_Interface.assert_prefix) id) of | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 499 | (true, true) => normalized_input_rule | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 500 | | (true, _) => local_input_rule | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 501 | | _ => rule) | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 502 | |
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 503 | fun is_assm_repetition id rule = | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 504 | rule = input_rule andalso can (unprefix SMTLIB_Interface.assert_prefix) id | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 505 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 506 | fun extract_skolem ([SMTLIB.Sym var, typ, choice]) = (var, typ, choice) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 507 |   | extract_skolem t = raise Fail ("fail to parse type" ^ @{make_string} t)
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 508 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 509 | (* The preprocessing takes care of: | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 510 | 1. unfolding the shared terms | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 511 | 2. extract the declarations of skolems to make sure that there are not unfolded | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 512 | *) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 513 | fun preprocess compress step = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 514 | let | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 515 | fun expand_assms cs = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 516 | map (fn t => case AList.lookup (op =) cs t of NONE => t | SOME a => a) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 517 | fun expand_lonely_arguments (args as SMTLIB.S [SMTLIB.Sym "=", _, _]) = [args] | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 518 | | expand_lonely_arguments (SMTLIB.S S) = map (fn x => SMTLIB.S [SMTLIB.Sym "=", x, x]) S | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 519 | | expand_lonely_arguments (x as SMTLIB.Sym _) = [SMTLIB.S [SMTLIB.Sym "=", x, x]] | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 520 | | expand_lonely_arguments t = [t] | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 521 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 522 |     fun preprocess (Raw_VeriT_Node {id, rule, args, prems, concl, subproof, ...}) (cx, remap_assms)  =
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 523 | let | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 524 | val stripped_args = args | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 525 | |> (fn SMTLIB.S args => args) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 526 | |> map | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 527 | (fn SMTLIB.S [SMTLIB.Key "=", x, y] => SMTLIB.S [SMTLIB.Sym "=", x, y] | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 528 | | x => x) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 529 | |> (rule = "bind" orelse rule = "onepoint") ? flat o (map expand_lonely_arguments) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 530 | |> `(if rule = veriT_def then single o extract_skolem else K []) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 531 | ||> SMTLIB.S | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 532 | |
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 533 | val (subproof, (cx, _)) = fold_map preprocess subproof (cx, remap_assms) |> apfst flat | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 534 | val (skolem_names, stripped_args) = stripped_args | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 535 | val remap_assms = (if rule = "or" then (id, hd prems) :: remap_assms else remap_assms) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 536 | (* declare variables in the context *) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 537 | val declarations = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 538 | if rule = veriT_def | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 539 | then skolem_names |> map (fn (name, _, choice) => (name, choice)) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 540 | else [] | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 541 | in | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 542 | if compress andalso rule = "or" | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 543 | then ([], (cx, remap_assms)) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 544 |         else ([Raw_VeriT_Node {id = id, rule = rule, args = stripped_args,
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 545 | prems = expand_assms remap_assms prems, declarations = declarations, concl = concl, subproof = subproof}], | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 546 | (cx, remap_assms)) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 547 | end | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 548 | in preprocess step end | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 549 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 550 | fun filter_split _ [] = ([], []) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 551 | | filter_split f (a :: xs) = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 552 | (if f a then apfst (curry op :: a) else apsnd (curry op :: a)) (filter_split f xs) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 553 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 554 | fun collect_skolem_defs (Raw_VeriT_Node {rule, subproof = subproof, args, ...}) =
 | 
| 72513 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 555 | (if is_skolemization rule then map (fn id => id ^ veriT_def) (skolems_introduced_by_rule args) else []) @ | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 556 | flat (map collect_skolem_defs subproof) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 557 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 558 | (*The postprocessing does: | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 559 | 1. translate the terms to Isabelle syntax, taking care of free variables | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 560 | 2. remove the ambiguity in the proof terms: | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 561 | x \<leadsto> y |- x = x | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 562 | means y = x. To remove ambiguity, we use the fact that y is a free variable and replace the term | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 563 | by: | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 564 | xy \<leadsto> y |- xy = x. | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 565 | This is now does not have an ambiguity and we can safely move the "xy \<leadsto> y" to the proof | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 566 | assumptions. | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 567 | *) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 568 | fun postprocess_proof compress ctxt step cx = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 569 | let | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 570 |     fun postprocess (Raw_VeriT_Node {id, rule, args, prems, declarations, concl, subproof}) (cx, rew) =
 | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 571 | let | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 572 |       val _ = (SMT_Config.verit_msg ctxt) (fn () => @{print} ("id =", id, "concl =", concl))
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 573 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 574 | val globally_bound_vars = declared_csts cx rule args | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 575 | val cx = fold (update_binding o (fn (s, typ) => (s, Term (Free (s, type_of cx typ))))) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 576 | globally_bound_vars cx | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 577 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 578 | (*find rebound variables specific to the LHS of the equivalence symbol*) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 579 | val bound_vars = bound_vars_by_rule cx rule args | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 580 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 581 | val rhs_vars = fold (fn [t', t] => t <> t' ? (curry (op ::) t) | _ => fn x => x) bound_vars [] | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 582 | fun not_already_bound cx t = SMTLIB_Proof.lookup_binding cx t = None andalso | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 583 | not (member (op =) rhs_vars t) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 584 | val (shadowing_vars, rebound_lhs_vars) = bound_vars | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 585 | |> filter_split (fn [t, _] => not_already_bound cx t | _ => true) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 586 | |>> map (single o hd) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 587 | |>> (fn vars => vars @ map (fn [_, t] => [t] | _ => []) bound_vars) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 588 | |>> flat | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 589 | val subproof_rew = fold (fn [t, t'] => curry (op ::) (t, t ^ t')) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 590 | rebound_lhs_vars rew | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 591 | val subproof_rewriter = fold (fn (t, t') => synctatic_rew_in_lhs_subst t t') | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 592 | subproof_rew | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 593 | |
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 594 | val ((concl, bounds), cx') = node_of concl cx | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 595 | |
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 596 | val extra_lhs_vars = map (fn [a,b] => (a, a^b)) rebound_lhs_vars | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 597 | |
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 598 | (* postprocess conclusion *) | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 599 | val concl = SMTLIB_Isar.unskolemize_names ctxt (subproof_rewriter concl) | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 600 | |
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 601 |       val _ = (SMT_Config.verit_msg ctxt) (fn () => \<^print> ("id =", id, "concl =", concl))
 | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 602 |       val _ = (SMT_Config.verit_msg ctxt) (fn () => \<^print> ("id =", id, "cx' =", cx',
 | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 603 | "bound_vars =", bound_vars)) | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 604 | |
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 605 | val bound_tvars = | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 606 | map (fn s => (s, the (find_type_in_formula concl s))) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 607 | (shadowing_vars @ map snd extra_lhs_vars) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 608 | val subproof_cx = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 609 | add_bound_variables_to_ctxt concl (shadowing_vars @ map snd extra_lhs_vars) cx | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 610 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 611 | fun could_unify (Bound i, Bound j) = i = j | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 612 | | could_unify (Var v, Var v') = v = v' | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 613 | | could_unify (Free v, Free v') = v = v' | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 614 | | could_unify (Const (v, ty), Const (v', ty')) = v = v' andalso ty = ty' | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 615 | | could_unify (Abs (_, ty, bdy), Abs (_, ty', bdy')) = ty = ty' andalso could_unify (bdy, bdy') | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 616 | | could_unify (u $ v, u' $ v') = could_unify (u, u') andalso could_unify (v, v') | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 617 | | could_unify _ = false | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 618 | fun is_alpha_renaming t = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 619 | t | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 620 | |> HOLogic.dest_Trueprop | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 621 | |> HOLogic.dest_eq | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 622 | |> could_unify | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 623 | handle TERM _ => false | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 624 | val alpha_conversion = rule = "bind" andalso is_alpha_renaming concl | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 625 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 626 | val can_remove_subproof = | 
| 72513 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 627 | compress andalso (is_skolemization rule orelse alpha_conversion) | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 628 | val (fixed_subproof : veriT_replay_node list, _) = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 629 | fold_map postprocess (if can_remove_subproof then [] else subproof) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 630 | (subproof_cx, subproof_rew) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 631 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 632 | val unsk_and_rewrite = SMTLIB_Isar.unskolemize_names ctxt o subproof_rewriter | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 633 | |
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 634 | (* postprocess assms *) | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 635 | val stripped_args = args |> (fn SMTLIB.S S => S) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 636 | val sanitized_args = proof_ctxt_of_rule rule stripped_args | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 637 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 638 | val arg_cx = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 639 | subproof_cx | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 640 | |> add_bound_variables_to_ctxt concl (shadowing_vars @ map fst extra_lhs_vars) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 641 | val (termified_args, _) = fold_map node_of sanitized_args arg_cx |> apfst (map fst) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 642 | val normalized_args = map unsk_and_rewrite termified_args | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 643 | |
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 644 | val subproof_assms = proof_ctxt_of_rule rule normalized_args | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 645 | |
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 646 | (* postprocess arguments *) | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 647 | val rule_args = args_of_rule rule stripped_args | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 648 | val (termified_args, _) = fold_map term_of rule_args subproof_cx | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 649 | val normalized_args = map unsk_and_rewrite termified_args | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 650 | val rule_args = map subproof_rewriter normalized_args | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 651 | |
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 652 | val raw_insts = insts_of_forall_inst rule stripped_args | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 653 | fun termify_term (x, t) cx = let val (t, cx) = term_of t cx in ((x, t), cx) end | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 654 | val (termified_args, _) = fold_map termify_term raw_insts subproof_cx | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 655 | val insts = Symtab.empty | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 656 | |> fold (fn (x, t) => fn insts => Symtab.update_new (x, t) insts) termified_args | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 657 | |> Symtab.map (K unsk_and_rewrite) | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 658 | |
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 659 | (* declarations *) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 660 | val (declarations, _) = fold_map termify_term declarations cx | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 661 | |> apfst (map (apsnd unsk_and_rewrite)) | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 662 | |
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 663 | (* fix step *) | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 664 | val bound_t = bounds | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 665 | |> map (fn s => (s, the (find_type_in_formula concl s))) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 666 | |
| 72513 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 667 | val skolem_defs = (if is_skolemization rule | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 668 | then map (fn id => id ^ veriT_def) (skolems_introduced_by_rule args) else []) | 
| 72513 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 669 | val skolems_of_subproof = (if is_skolemization rule | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 670 | then flat (map collect_skolem_defs subproof) else []) | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 671 | val fixed_prems = | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 672 | prems @ (if is_assm_repetition id rule then [id] else []) @ | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 673 | skolem_defs @ skolems_of_subproof @ (id_of_last_step fixed_subproof) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 674 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 675 | (* fix subproof *) | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 676 | val normalized_rule = normalized_rule_name id rule | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 677 | |> (if compress andalso alpha_conversion then K "refl" else I) | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 678 | |
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 679 | val extra_assms2 = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 680 | (if rule = subproof_rule then extract_assumptions_from_subproof fixed_subproof else []) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 681 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 682 | val step = mk_replay_node id normalized_rule rule_args fixed_prems subproof_assms concl | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 683 | bound_t insts declarations (bound_tvars, subproof_assms, extra_assms2, fixed_subproof) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 684 | |
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 685 | in | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 686 | (step, (cx', rew)) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 687 | end | 
| 57705 | 688 | in | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 689 | postprocess step (cx, []) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 690 | |> (fn (step, (cx, _)) => (step, cx)) | 
| 72908 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 691 | end | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 692 | |
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 693 | fun combine_proof_steps ((step1 : veriT_replay_node) :: step2 :: steps) = | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 694 | let | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 695 |         val (VeriT_Replay_Node {id = id1, rule = rule1, args = args1, prems = prems1,
 | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 696 | proof_ctxt = proof_ctxt1, concl = concl1, bounds = bounds1, insts = insts1, | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 697 | declarations = declarations1, | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 698 | subproof = (bound_sub1, assms_sub1, assms_extra1, subproof1)}) = step1 | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 699 |         val (VeriT_Replay_Node {id = id2, rule = rule2, args = args2, prems = prems2,
 | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 700 | proof_ctxt = proof_ctxt2, concl = concl2, bounds = bounds2, insts = insts2, | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 701 | declarations = declarations2, | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 702 | subproof = (bound_sub2, assms_sub2, assms_extra2, subproof2)}) = step2 | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 703 | val goals1 = | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 704 | (case concl1 of | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 705 | _ $ (Const (\<^const_name>\<open>HOL.disj\<close>, _) $ _ $ | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 706 | (Const (\<^const_name>\<open>HOL.disj\<close>, _) $ (Const (\<^const_name>\<open>HOL.Not\<close>, _) $a) $ b)) => [a,b] | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 707 | | _ => []) | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 708 | val goal2 = (case concl2 of _ $ a => a) | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 709 | in | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 710 | if rule1 = equiv_pos2_rule andalso rule2 = th_resolution_rule andalso member (op =) prems2 id1 | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 711 | andalso member (op =) goals1 goal2 | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 712 | then | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 713 | mk_replay_node id2 theory_resolution2_rule args2 (filter_out (curry (op =) id1) prems2) | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 714 | proof_ctxt2 concl2 bounds2 insts2 declarations2 | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 715 | (bound_sub2, assms_sub2, assms_extra2, combine_proof_steps subproof2) :: | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 716 | combine_proof_steps steps | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 717 | else | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 718 | mk_replay_node id1 rule1 args1 prems1 | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 719 | proof_ctxt1 concl1 bounds1 insts1 declarations1 | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 720 | (bound_sub1, assms_sub1, assms_extra1, combine_proof_steps subproof1) :: | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 721 | combine_proof_steps (step2 :: steps) | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 722 | end | 
| 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 723 | | combine_proof_steps steps = steps | 
| 57704 | 724 | |
| 57705 | 725 | |
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 726 | val linearize_proof = | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 727 | let | 
| 72513 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 728 |     fun map_node_concl f (VeriT_Node {id, rule, prems, proof_ctxt, concl}) =
 | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 729 | mk_node id rule prems proof_ctxt (f concl) | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 730 |     fun linearize (VeriT_Replay_Node {id = id, rule = rule, args = _, prems = prems,
 | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 731 | proof_ctxt = proof_ctxt, concl = concl, bounds = bounds, insts = _, declarations = _, | 
| 72513 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 732 | subproof = (bounds', assms, inputs, subproof)}) = | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 733 | let | 
| 72513 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 734 | val bounds = distinct (op =) bounds | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 735 | val bounds' = distinct (op =) bounds' | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 736 | fun mk_prop_of_term concl = | 
| 69593 | 737 | concl |> fastype_of concl = \<^typ>\<open>bool\<close> ? curry (op $) \<^term>\<open>Trueprop\<close> | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 738 | fun remove_assumption_id assumption_id prems = | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 739 | filter_out (curry (op =) assumption_id) prems | 
| 72513 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 740 | fun add_assumption assumption concl = | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 741 | \<^const>\<open>Pure.imp\<close> $ mk_prop_of_term assumption $ mk_prop_of_term concl | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 742 | fun inline_assumption assumption assumption_id | 
| 72513 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 743 |             (VeriT_Node {id, rule, prems, proof_ctxt, concl}) =
 | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 744 | mk_node id rule (remove_assumption_id assumption_id prems) proof_ctxt | 
| 72513 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 745 | (add_assumption assumption concl) | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 746 | fun find_input_steps_and_inline [] = [] | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 747 | | find_input_steps_and_inline | 
| 72513 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 748 |               (VeriT_Node {id = id', rule, prems, concl, ...} :: steps) =
 | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 749 | if rule = input_rule then | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 750 | find_input_steps_and_inline (map (inline_assumption concl id') steps) | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 751 | else | 
| 72513 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 752 | mk_node (id') rule prems [] concl :: find_input_steps_and_inline steps | 
| 57708 
4b52c1b319ce
veriT changes for lifted terms, and ite_elim rules.
 fleury parents: 
57705diff
changeset | 753 | |
| 72513 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 754 | fun free_bounds bounds (concl) = | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 755 | fold (fn (var, typ) => fn t => Logic.all (Free (var, typ)) t) bounds concl | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 756 | val subproof = subproof | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 757 | |> flat o map linearize | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 758 | |> map (map_node_concl (fold add_assumption (assms @ inputs))) | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 759 | |> map (map_node_concl (free_bounds (bounds @ bounds'))) | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 760 | |> find_input_steps_and_inline | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 761 | val concl = free_bounds bounds concl | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 762 | in | 
| 72513 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 763 | subproof @ [mk_node id rule prems proof_ctxt concl] | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 764 | end | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 765 | in linearize end | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 766 | |
| 72513 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 767 | fun rule_of (VeriT_Replay_Node {rule,...}) = rule
 | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 768 | fun subproof_of (VeriT_Replay_Node {subproof = (_, _, _, subproof),...}) = subproof
 | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 769 | |
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 770 | |
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 771 | (* Massage Skolems for Sledgehammer. | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 772 | |
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 773 | We have to make sure that there is an "arrow" in the graph for skolemization steps. | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 774 | |
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 775 | |
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 776 | A. The normal easy case | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 777 | |
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 778 | This function detects the steps of the form | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 779 | P \<longleftrightarrow> Q :skolemization | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 780 | Q :resolution with P | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 781 | and replace them by | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 782 | Q :skolemization | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 783 | Throwing away the step "P \<longleftrightarrow> Q" completely. This throws away a lot of information, but it does not | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 784 | matter too much for Sledgehammer. | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 785 | |
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 786 | |
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 787 | B. Skolems in subproofs | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 788 | Supporting this is more or less hopeless as long as the Isar reconstruction of Sledgehammer | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 789 | does not support more features like definitions. veriT is able to generate proofs with skolemization | 
| 72908 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 790 | happening in subproofs inside the formula. | 
| 72513 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 791 | (assume "A \<or> P" | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 792 | ... | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 793 | P \<longleftrightarrow> Q :skolemization in the subproof | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 794 | ...) | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 795 | hence A \<or> P \<longrightarrow> A \<or> Q :lemma | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 796 | ... | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 797 | R :something with some rule | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 798 | and replace them by | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 799 | R :skolemization with some rule | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 800 | Without any subproof | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 801 | *) | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 802 | fun remove_skolem_definitions_proof steps = | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 803 | let | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 804 | fun replace_equivalent_by_imp (judgement $ ((Const(\<^const_name>\<open>HOL.eq\<close>, typ) $ arg1) $ arg2)) = | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 805 | judgement $ ((Const(\<^const_name>\<open>HOL.implies\<close>, typ) $ arg1) $ arg2) | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 806 | | replace_equivalent_by_imp a = a (*This case is probably wrong*) | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 807 |     fun remove_skolem_definitions (VeriT_Replay_Node {id = id, rule = rule, args = args,
 | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 808 | prems = prems, | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 809 | proof_ctxt = proof_ctxt, concl = concl, bounds = bounds, insts = insts, | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 810 | declarations = declarations, | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 811 | subproof = (vars, assms', extra_assms', subproof)}) (prems_to_remove, skolems) = | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 812 | let | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 813 | val prems = prems | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 814 | |> filter_out (member (op =) prems_to_remove) | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 815 | val trivial_step = is_SH_trivial rule | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 816 | fun has_skolem_substep st NONE = if is_skolemization (rule_of st) then SOME (rule_of st) | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 817 | else fold has_skolem_substep (subproof_of st) NONE | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 818 | | has_skolem_substep _ a = a | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 819 | val promote_to_skolem = exists (fn t => member (op =) skolems t) prems | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 820 | val promote_from_assms = fold has_skolem_substep subproof NONE <> NONE | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 821 | val promote_step = promote_to_skolem orelse promote_from_assms | 
| 72908 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 822 | val skolem_step_to_skip = is_skolemization rule orelse | 
| 72513 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 823 | (promote_from_assms andalso length prems > 1) | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 824 | val is_skolem = is_skolemization rule orelse promote_step | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 825 | val prems = prems | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 826 | |> filter_out (fn t => member (op =) skolems t) | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 827 | |> is_skolem ? filter_out (String.isPrefix id) | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 828 | val rule = (if promote_step then default_skolem_rule else rule) | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 829 | val subproof = subproof | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 830 | |> (is_skolem ? K []) (*subproofs of skolemization steps are useless for SH*) | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 831 | |> map (fst o (fn st => remove_skolem_definitions st (prems_to_remove, skolems))) | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 832 | (*no new definitions in subproofs*) | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 833 | |> flat | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 834 | val concl = concl | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 835 | |> is_skolem ? replace_equivalent_by_imp | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 836 | val step = (if skolem_step_to_skip orelse rule = veriT_def orelse trivial_step then [] | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 837 | else mk_replay_node id rule args prems proof_ctxt concl bounds insts declarations | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 838 | (vars, assms', extra_assms', subproof) | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 839 | |> single) | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 840 | val defs = (if rule = veriT_def orelse trivial_step then id :: prems_to_remove | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 841 | else prems_to_remove) | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 842 | val skolems = (if skolem_step_to_skip then id :: skolems else skolems) | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 843 | in | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 844 | (step, (defs, skolems)) | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 845 | end | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 846 | in | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 847 | fold_map remove_skolem_definitions steps ([], []) | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 848 | |> fst | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 849 | |> flat | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 850 | end | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 851 | |
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 852 | local | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 853 | fun import_proof_and_post_process typs funs lines ctxt = | 
| 57708 
4b52c1b319ce
veriT changes for lifted terms, and ite_elim rules.
 fleury parents: 
57705diff
changeset | 854 | let | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 855 | val compress = SMT_Config.compress_verit_proofs ctxt | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 856 | val smtlib_lines_without_qm = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 857 | lines | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 858 | |> map single | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 859 | |> map SMTLIB.parse | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 860 | |> map remove_all_qm2 | 
| 72908 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 861 | val (raw_steps, _, _) = | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 862 | parse_raw_proof_steps NONE smtlib_lines_without_qm SMTLIB_Proof.empty_name_binding | 
| 72908 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 863 | |
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 864 | fun process step (cx, cx') = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 865 | let fun postprocess step (cx, cx') = | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 866 | let val (step, cx) = postprocess_proof compress ctxt step cx | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 867 | in (step, (cx, cx')) end | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 868 | in uncurry (fold_map postprocess) (preprocess compress step (cx, cx')) end | 
| 72513 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 869 | val step = | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 870 | (empty_context ctxt typs funs, []) | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 871 | |> fold_map process raw_steps | 
| 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 872 | |> (fn (steps, (cx, _)) => (flat steps, cx)) | 
| 72908 
6a26a955308e
improve and activate compression for veriT proof reconstruction
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72513diff
changeset | 873 | |> compress? apfst combine_proof_steps | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 874 | in step end | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 875 | in | 
| 57704 | 876 | |
| 877 | fun parse typs funs lines ctxt = | |
| 878 | let | |
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 879 | val (u, env) = import_proof_and_post_process typs funs lines ctxt | 
| 72513 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 880 | val t = u | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 881 | |> remove_skolem_definitions_proof | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 882 | |> flat o (map linearize_proof) | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 883 |     fun node_to_step (VeriT_Node {id, rule, prems, concl, ...}) =
 | 
| 
75f5c63f6cfa
better handling of skolemization for Isar reconstruction in Sledgehammer for veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
72458diff
changeset | 884 | mk_step id rule prems [] concl [] | 
| 58490 | 885 | in | 
| 57705 | 886 | (map node_to_step t, ctxt_of env) | 
| 57704 | 887 | end | 
| 888 | ||
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 889 | fun parse_replay typs funs lines ctxt = | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 890 | let | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 891 | val (u, env) = import_proof_and_post_process typs funs lines ctxt | 
| 72458 
b44e894796d5
add reconstruction for the SMT solver veriT
 Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
69597diff
changeset | 892 | val _ = (SMT_Config.verit_msg ctxt) (fn () => \<^print> u) | 
| 69205 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 893 | in | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 894 | (u, ctxt_of env) | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 895 | end | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 896 | end | 
| 
8050734eee3e
add reconstruction by veriT in method smt
 fleury <Mathias.Fleury@mpi-inf.mpg.de> parents: 
61611diff
changeset | 897 | |
| 57704 | 898 | end; |