src/HOL/Tools/SMT/verit_replay_methods.ML
author haftmann
Thu, 19 Jun 2025 17:15:40 +0200
changeset 82734 89347c0cc6a3
parent 78177 ea7a3cc64df5
permissions -rw-r--r--
treat map_filter similar to list_all, list_ex, list_ex1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
69205
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
     1
(*  Title:      HOL/Tools/SMT/verit_replay_methods.ML
72458
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
     2
    Author:     Mathias Fleury, MPII, JKU
69205
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
     3
72458
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
     4
Proof method for replaying veriT proofs.
69205
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
     5
*)
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
     6
72459
15fc6320da68 reconstruction of veriT proofs in NEWS
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 72458
diff changeset
     7
signature VERIT_REPLAY_METHODS =
69205
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
     8
sig
72458
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
     9
  (*methods for verit proof rules*)
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
    10
  val method_for: string -> Proof.context -> thm list -> term list -> term Symtab.table ->
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
    11
     (string * term) list -> term -> thm
69205
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    12
72458
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
    13
  val discharge: Proof.context -> thm list -> term -> thm
69205
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    14
end;
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    15
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    16
72459
15fc6320da68 reconstruction of veriT proofs in NEWS
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 72458
diff changeset
    17
structure Verit_Replay_Methods: VERIT_REPLAY_METHODS =
69205
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    18
struct
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    19
75299
da591621d6ae split veriT reconstruction into Lethe and veriT part
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 75268
diff changeset
    20
open Lethe_Replay_Methods
69205
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    21
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    22
fun verit_rule_of "bind" = Bind
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    23
  | verit_rule_of "cong" = Cong
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    24
  | verit_rule_of "refl" = Refl
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    25
  | verit_rule_of "equiv1" = Equiv1
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    26
  | verit_rule_of "equiv2" = Equiv2
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    27
  | verit_rule_of "equiv_pos1" = Equiv_pos1
72908
6a26a955308e improve and activate compression for veriT proof reconstruction
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 72513
diff changeset
    28
   (*Equiv_pos2 covered below*)
69205
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    29
  | verit_rule_of "equiv_neg1" = Equiv_neg1
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    30
  | verit_rule_of "equiv_neg2" = Equiv_neg2
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    31
  | verit_rule_of "sko_forall" = Skolem_Forall
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    32
  | verit_rule_of "sko_ex" = Skolem_Ex
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    33
  | verit_rule_of "eq_reflexive" = Eq_Reflexive
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    34
  | verit_rule_of "forall_inst" = Forall_Inst
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    35
  | verit_rule_of "implies_pos" = Implies_Pos
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    36
  | verit_rule_of "or" = Or
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    37
  | verit_rule_of "not_or" = Not_Or
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    38
  | verit_rule_of "resolution" = Resolution
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    39
  | verit_rule_of "trans" = Trans
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    40
  | verit_rule_of "false" = False
72458
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
    41
  | verit_rule_of "ac_simp" = AC_Simp
69205
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    42
  | verit_rule_of "and" = And
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    43
  | verit_rule_of "not_and" = Not_And
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    44
  | verit_rule_of "and_neg" = And_Neg
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    45
  | verit_rule_of "or_pos" = Or_Pos
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    46
  | verit_rule_of "or_neg" = Or_Neg
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    47
  | verit_rule_of "not_equiv1" = Not_Equiv1
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    48
  | verit_rule_of "not_equiv2" = Not_Equiv2
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    49
  | verit_rule_of "not_implies1" = Not_Implies1
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    50
  | verit_rule_of "not_implies2" = Not_Implies2
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    51
  | verit_rule_of "implies_neg1" = Implies_Neg1
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    52
  | verit_rule_of "implies_neg2" = Implies_Neg2
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    53
  | verit_rule_of "implies" = Implies
72458
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
    54
  | verit_rule_of "bfun_elim" = Bfun_Elim
69205
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    55
  | verit_rule_of "ite1" = ITE1
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    56
  | verit_rule_of "ite2" = ITE2
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    57
  | verit_rule_of "not_ite1" = Not_ITE1
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    58
  | verit_rule_of "not_ite2" = Not_ITE2
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    59
  | verit_rule_of "ite_pos1" = ITE_Pos1
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    60
  | verit_rule_of "ite_pos2" = ITE_Pos2
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    61
  | verit_rule_of "ite_neg1" = ITE_Neg1
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    62
  | verit_rule_of "ite_neg2" = ITE_Neg2
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    63
  | verit_rule_of "la_disequality" = LA_Disequality
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    64
  | verit_rule_of "lia_generic" = LIA_Generic
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    65
  | verit_rule_of "la_generic" = LA_Generic
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    66
  | verit_rule_of "la_tautology" = LA_Tautology
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    67
  | verit_rule_of "la_totality" = LA_Totality
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    68
  | verit_rule_of "la_rw_eq"= LA_RW_Eq
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    69
  | verit_rule_of "nla_generic"= NLA_Generic
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    70
  | verit_rule_of "eq_transitive" = Eq_Transitive
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    71
  | verit_rule_of "qnt_rm_unused" = Qnt_Rm_Unused
72458
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
    72
  | verit_rule_of "onepoint" = Onepoint
69205
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    73
  | verit_rule_of "qnt_join" = Qnt_Join
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    74
  | verit_rule_of "subproof" = Subproof
72458
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
    75
  | verit_rule_of "bool_simplify" = Bool_Simplify
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
    76
  | verit_rule_of "or_simplify" = Or_Simplify
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
    77
  | verit_rule_of "ite_simplify" = ITE_Simplify
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
    78
  | verit_rule_of "and_simplify" = And_Simplify
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
    79
  | verit_rule_of "not_simplify" = Not_Simplify
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
    80
  | verit_rule_of "equiv_simplify" = Equiv_Simplify
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
    81
  | verit_rule_of "eq_simplify" = Eq_Simplify
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
    82
  | verit_rule_of "implies_simplify" = Implies_Simplify
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
    83
  | verit_rule_of "connective_def" = Connective_Def
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
    84
  | verit_rule_of "minus_simplify" = Minus_Simplify
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
    85
  | verit_rule_of "sum_simplify" = Sum_Simplify
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
    86
  | verit_rule_of "prod_simplify" = Prod_Simplify
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
    87
  | verit_rule_of "comp_simplify" = Comp_Simplify
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
    88
  | verit_rule_of "qnt_simplify" = Qnt_Simplify
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
    89
  | verit_rule_of "tautology" = Tautological_Clause
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
    90
  | verit_rule_of "qnt_cnf" = Qnt_CNF
69205
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
    91
  | verit_rule_of r =
75299
da591621d6ae split veriT reconstruction into Lethe and veriT part
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 75268
diff changeset
    92
     if r = Lethe_Proof.normalized_input_rule then Normalized_Input
da591621d6ae split veriT reconstruction into Lethe and veriT part
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 75268
diff changeset
    93
     else if r = Lethe_Proof.local_input_rule then Local_Input
da591621d6ae split veriT reconstruction into Lethe and veriT part
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 75268
diff changeset
    94
     else if r = Lethe_Proof.lethe_def then Definition
da591621d6ae split veriT reconstruction into Lethe and veriT part
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 75268
diff changeset
    95
     else if r = Lethe_Proof.not_not_rule then Not_Not
da591621d6ae split veriT reconstruction into Lethe and veriT part
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 75268
diff changeset
    96
     else if r = Lethe_Proof.contract_rule then Duplicate_Literals
da591621d6ae split veriT reconstruction into Lethe and veriT part
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 75268
diff changeset
    97
     else if r = Lethe_Proof.ite_intro_rule then ITE_Intro
da591621d6ae split veriT reconstruction into Lethe and veriT part
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 75268
diff changeset
    98
     else if r = Lethe_Proof.eq_congruent_rule then Eq_Congruent
da591621d6ae split veriT reconstruction into Lethe and veriT part
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 75268
diff changeset
    99
     else if r = Lethe_Proof.eq_congruent_pred_rule then Eq_Congruent_Pred
da591621d6ae split veriT reconstruction into Lethe and veriT part
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 75268
diff changeset
   100
     else if r = Lethe_Proof.theory_resolution2_rule then Theory_Resolution2
da591621d6ae split veriT reconstruction into Lethe and veriT part
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 75268
diff changeset
   101
     else if r = Lethe_Proof.th_resolution_rule then Theory_Resolution
da591621d6ae split veriT reconstruction into Lethe and veriT part
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 75268
diff changeset
   102
     else if r = Lethe_Proof.equiv_pos2_rule then Equiv_pos2
75561
b6239ed66b94 fix veriT reconstruction for and_pos and lambda-lifting
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 75299
diff changeset
   103
     else if r = Lethe_Proof.and_pos_rule then And_Pos
72458
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   104
     else (@{print} ("Unsupport rule", r); Unsupported)
69205
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
   105
72458
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   106
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   107
(* Combining all together *)
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   108
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   109
fun unsupported rule ctxt thms _ _ _ = SMT_Replay_Methods.replay_error ctxt "Unsupported verit rule"
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   110
  rule thms
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   111
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   112
fun ignore_args f ctxt thm _ _ _ t = f ctxt thm t
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   113
fun ignore_decls f ctxt thm args insts _ t = f ctxt thm args insts t
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   114
fun ignore_insts f ctxt thm args _ _ t = f ctxt thm args t
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   115
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   116
fun choose And = ignore_args and_rule
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   117
  | choose And_Neg = ignore_args and_neg_rule
69205
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
   118
  | choose And_Pos = ignore_args and_pos
72458
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   119
  | choose And_Simplify = ignore_args rewrite_and_simplify
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   120
  | choose Bind = ignore_insts bind
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   121
  | choose Bool_Simplify = ignore_args rewrite_bool_simplify
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   122
  | choose Comp_Simplify = ignore_args rewrite_comp_simplify
78177
ea7a3cc64df5 early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 75561
diff changeset
   123
  | choose Cong = ignore_args (cong "verit")
72458
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   124
  | choose Connective_Def = ignore_args rewrite_connective_def
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   125
  | choose Duplicate_Literals = ignore_args duplicate_literals
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   126
  | choose Eq_Congruent = ignore_args eq_congruent
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   127
  | choose Eq_Congruent_Pred = ignore_args eq_congruent_pred
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   128
  | choose Eq_Reflexive = ignore_args eq_reflexive
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   129
  | choose Eq_Simplify = ignore_args rewrite_eq_simplify
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   130
  | choose Eq_Transitive = ignore_args eq_transitive
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   131
  | choose Equiv1 = ignore_args equiv1
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   132
  | choose Equiv2 = ignore_args equiv2
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   133
  | choose Equiv_neg1 = ignore_args equiv_neg1
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   134
  | choose Equiv_neg2 = ignore_args equiv_neg2
69205
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
   135
  | choose Equiv_pos1 = ignore_args equiv_pos1
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
   136
  | choose Equiv_pos2 = ignore_args equiv_pos2
72458
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   137
  | choose Equiv_Simplify = ignore_args rewrite_equiv_simplify
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   138
  | choose False = ignore_args false_rule
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   139
  | choose Forall_Inst = ignore_decls forall_inst
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   140
  | choose Implies = ignore_args implies_rules
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   141
  | choose Implies_Neg1 = ignore_args implies_neg1
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   142
  | choose Implies_Neg2 = ignore_args implies_neg2
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   143
  | choose Implies_Pos = ignore_args implies_pos
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   144
  | choose Implies_Simplify = ignore_args rewrite_implies_simplify
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   145
  | choose ITE1 = ignore_args ite1
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   146
  | choose ITE2 = ignore_args ite2
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   147
  | choose ITE_Intro = ignore_args ite_intro
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   148
  | choose ITE_Neg1 = ignore_args ite_neg1
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   149
  | choose ITE_Neg2 = ignore_args ite_neg2
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   150
  | choose ITE_Pos1 = ignore_args ite_pos1
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   151
  | choose ITE_Pos2 = ignore_args ite_pos2
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   152
  | choose ITE_Simplify = ignore_args rewrite_ite_simplify
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   153
  | choose LA_Disequality = ignore_args la_disequality
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   154
  | choose LA_Generic = ignore_insts la_generic
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   155
  | choose LA_RW_Eq = ignore_args la_rw_eq
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   156
  | choose LA_Tautology = ignore_args SMT_Replay_Methods.arith_th_lemma_wo_shallow
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   157
  | choose LA_Totality = ignore_args SMT_Replay_Methods.arith_th_lemma_wo_shallow
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   158
  | choose LIA_Generic = ignore_args lia_generic
78177
ea7a3cc64df5 early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 75561
diff changeset
   159
  | choose Local_Input = ignore_args (refl "verit")
72458
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   160
  | choose Minus_Simplify = ignore_args rewrite_minus_simplify
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   161
  | choose NLA_Generic = ignore_args SMT_Replay_Methods.arith_th_lemma_wo_shallow
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   162
  | choose Normalized_Input = ignore_args normalized_input
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   163
  | choose Not_And = ignore_args not_and_rule
69205
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
   164
  | choose Not_Equiv1 = ignore_args not_equiv1
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
   165
  | choose Not_Equiv2 = ignore_args not_equiv2
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
   166
  | choose Not_Implies1 = ignore_args not_implies1
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
   167
  | choose Not_Implies2 = ignore_args not_implies2
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
   168
  | choose Not_ITE1 = ignore_args not_ite1
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
   169
  | choose Not_ITE2 = ignore_args not_ite2
72458
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   170
  | choose Not_Not = ignore_args not_not
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   171
  | choose Not_Or = ignore_args not_or_rule
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   172
  | choose Not_Simplify = ignore_args rewrite_not_simplify
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   173
  | choose Or = ignore_args or
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   174
  | choose Or_Neg = ignore_args or_neg_rule
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   175
  | choose Or_Pos = ignore_args or_pos_rule
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   176
  | choose Or_Simplify = ignore_args rewrite_or_simplify
72908
6a26a955308e improve and activate compression for veriT proof reconstruction
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 72513
diff changeset
   177
  | choose Theory_Resolution2 = ignore_args theory_resolution2
72458
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   178
  | choose Prod_Simplify = ignore_args prod_simplify
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   179
  | choose Qnt_Join = ignore_args qnt_join
69205
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
   180
  | choose Qnt_Rm_Unused = ignore_args qnt_rm_unused
72458
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   181
  | choose Onepoint = ignore_args onepoint
69205
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
   182
  | choose Qnt_Simplify = ignore_args qnt_simplify
78177
ea7a3cc64df5 early inclusion of cvc5 proof reconstruction; slightly reorganize smt/z3_reals;
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 75561
diff changeset
   183
  | choose Refl = ignore_args (refl "verit")
72458
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   184
  | choose Resolution = ignore_args unit_res
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   185
  | choose Skolem_Ex = ignore_args skolem_ex
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   186
  | choose Skolem_Forall = ignore_args skolem_forall
69205
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
   187
  | choose Subproof = ignore_args subproof
72458
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   188
  | choose Sum_Simplify = ignore_args sum_simplify
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   189
  | choose Tautological_Clause = ignore_args tautological_clause
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   190
  | choose Theory_Resolution = ignore_args unit_res
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   191
  | choose AC_Simp = ignore_args tmp_AC_rule
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   192
  | choose Bfun_Elim = ignore_args bfun_elim
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   193
  | choose Qnt_CNF = ignore_args qnt_cnf
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   194
  | choose Trans = ignore_args trans
69205
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
   195
  | choose r = unsupported (string_of_verit_rule r)
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
   196
72459
15fc6320da68 reconstruction of veriT proofs in NEWS
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 72458
diff changeset
   197
type verit_method = Proof.context -> thm list -> term -> thm
69205
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
   198
type abs_context = int * term Termtab.table
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
   199
72458
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   200
fun with_tracing rule method ctxt thms args insts decls t =
69205
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
   201
  let val _ = SMT_Replay_Methods.trace_goal ctxt rule thms t
72458
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   202
  in method ctxt thms args insts decls t end
69205
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
   203
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
   204
fun method_for rule = with_tracing rule (choose (verit_rule_of rule))
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
   205
72458
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   206
fun discharge ctxt [thm] t =
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   207
  SMT_Replay_Methods.prove ctxt t (fn _ =>
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   208
    resolve_tac ctxt [thm] THEN_ALL_NEW (resolve_tac ctxt @{thms refl}))
b44e894796d5 add reconstruction for the SMT solver veriT
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents: 69593
diff changeset
   209
69205
8050734eee3e add reconstruction by veriT in method smt
fleury <Mathias.Fleury@mpi-inf.mpg.de>
parents:
diff changeset
   210
end;