| author | wenzelm | 
| Fri, 08 Mar 2024 13:05:01 +0100 | |
| changeset 79810 | 4b23abde5d0b | 
| parent 79576 | 157de27b0863 | 
| child 80701 | 39cd50407f79 | 
| permissions | -rw-r--r-- | 
| 
72458
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
1  | 
(* Title: HOL/Tools/SMT/smt_replay_arith.ML  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
2  | 
Author: Mathias Fleury, MPII, JKU  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
3  | 
|
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
4  | 
Proof methods for replaying arithmetic steps with Farkas Lemma.  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
5  | 
*)  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
6  | 
|
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
7  | 
signature SMT_REPLAY_ARITH =  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
8  | 
sig  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
9  | 
val la_farkas_tac: Subgoal.focus -> term list -> thm -> thm Seq.seq;  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
10  | 
val la_farkas: term list -> Proof.context -> int -> tactic;  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
11  | 
end;  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
12  | 
|
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
13  | 
structure SMT_Replay_Arith: SMT_REPLAY_ARITH =  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
14  | 
struct  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
15  | 
|
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
16  | 
fun extract_number (Const ("SMT.z3div", _) $ (Const ("Groups.uminus_class.uminus", _) $ n1) $ n2) =
 | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
17  | 
(n1, n2, false)  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
18  | 
  | extract_number (Const ("SMT.z3div", _) $ n1 $ n2) = (n1, n2, true)
 | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
19  | 
  | extract_number (Const ("Groups.uminus_class.uminus", _) $ n) =
 | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
20  | 
(n, HOLogic.numeral_const (fastype_of n) $ HOLogic.one_const, false)  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
21  | 
| extract_number n = (n, HOLogic.numeral_const (fastype_of n) $ HOLogic.one_const, true)  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
22  | 
|
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
23  | 
fun try_OF _ thm1 thm2 =  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
24  | 
(thm1 OF [thm2])  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
25  | 
|> single  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
26  | 
handle THM _ => []  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
27  | 
|
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
28  | 
fun try_OF_inst ctxt thm1 ((r, q, pos), thm2) =  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
29  | 
map (fn thm =>  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
30  | 
(Drule.infer_instantiate' ctxt (map SOME [Thm.cterm_of ctxt q, Thm.cterm_of ctxt r]) thm,  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
31  | 
pos))  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
32  | 
(try_OF ctxt thm1 thm2)  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
33  | 
handle THM _ => []  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
34  | 
|
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
35  | 
fun try_OF_insts ctxt thms thm = map (fn thm1 => try_OF_inst ctxt thm1 thm) thms |> flat  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
36  | 
|
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
37  | 
fun try_OFs ctxt thms thm = map (fn thm1 => try_OF ctxt thm1 thm) thms |> flat  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
38  | 
|
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
39  | 
fun la_farkas_tac ({context = ctxt, prems, concl,  ...}: Subgoal.focus) args thm =
 | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
40  | 
let  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
41  | 
fun trace v = (SMT_Config.verit_arith_msg ctxt v; v)  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
42  | 
    val _ = trace (fn () => @{print} (prems, concl))
 | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
43  | 
    val arith_thms = Named_Theorems.get ctxt @{named_theorems smt_arith_simplify}
 | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
44  | 
    val verit_arith = Named_Theorems.get ctxt @{named_theorems smt_arith_combine}
 | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
45  | 
    val verit_arith_multiplication = Named_Theorems.get ctxt @{named_theorems smt_arith_multiplication}
 | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
46  | 
    val _ = trace (fn () => @{print}  "******************************************************")
 | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
47  | 
    val _ = trace (fn () => @{print}  "       Multiply by constants                          ")
 | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
48  | 
    val _ = trace (fn () => @{print}  "******************************************************")
 | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
49  | 
val coeff_prems =  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
50  | 
map extract_number args  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
51  | 
|> (fn xs => ListPair.zip (xs, prems))  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
52  | 
    val _ = trace (fn () => @{print} coeff_prems)
 | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
53  | 
fun negate_if_needed (thm, pos) =  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
54  | 
if pos then thm  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
55  | 
       else map (fn thm0 => try_OF ctxt thm0 thm) @{thms verit_negate_coefficient}
 | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
56  | 
|> flat |> the_single  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
57  | 
val normalized =  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
58  | 
map (try_OF_insts ctxt verit_arith_multiplication) coeff_prems  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
59  | 
|> flat  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
60  | 
|> map negate_if_needed  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
61  | 
fun import_assumption thm (Trues, ctxt) =  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
62  | 
let val (assms, ctxt) = Assumption.add_assumes ((map (Thm.cterm_of ctxt) o Thm.prems_of) thm) ctxt in  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
63  | 
(thm OF assms, (Trues + length assms, ctxt)) end  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
64  | 
val (n :: normalized, (Trues, ctxt_with_assms)) = fold_map import_assumption normalized (0, ctxt)  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
65  | 
|
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
66  | 
    val _ = trace (fn () => @{print} (n :: normalized))
 | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
67  | 
    val _ = trace (fn () => @{print}   "*****************************************************")
 | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
68  | 
    val _ = trace (fn () => @{print}  "       Combine equalities                             ")
 | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
69  | 
    val _ = trace (fn () => @{print}  "******************************************************")
 | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
70  | 
|
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
71  | 
val combined =  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
72  | 
List.foldl  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
73  | 
(fn (thm1, thm2) =>  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
74  | 
try_OFs ctxt verit_arith thm1  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
75  | 
|> (fn thms => try_OFs ctxt thms thm2)  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
76  | 
|> the_single)  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
77  | 
n  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
78  | 
normalized  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
79  | 
|> singleton (Proof_Context.export ctxt_with_assms ctxt)  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
80  | 
    val _ = trace (fn () => @{print} combined)
 | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
81  | 
fun arith_full_simps ctxt thms =  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
82  | 
ctxt  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
83  | 
|> empty_simpset  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
84  | 
|> put_simpset HOL_basic_ss  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
85  | 
|> (fn ctxt => ctxt addsimps thms  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
86  | 
addsimps arith_thms  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
87  | 
           addsimprocs [@{simproc int_div_cancel_numeral_factors}, @{simproc int_combine_numerals},
 | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
88  | 
             @{simproc divide_cancel_numeral_factor}, @{simproc intle_cancel_numerals},
 | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
89  | 
             @{simproc field_combine_numerals}, @{simproc intless_cancel_numerals}])
 | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
90  | 
|> asm_full_simplify  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
91  | 
val final_False = combined  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
92  | 
      |> arith_full_simps ctxt (Named_Theorems.get ctxt @{named_theorems ac_simps})
 | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
93  | 
    val _ = trace (fn () => @{print} final_False)
 | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
94  | 
val final_theorem = try_OF ctxt thm final_False  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
95  | 
in  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
96  | 
(case final_theorem of  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
97  | 
       [thm] => Seq.single (thm OF replicate Trues @{thm TrueI})
 | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
98  | 
| _ => Seq.empty)  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
99  | 
end  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
100  | 
|
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
101  | 
fun TRY' tac = fn i => TRY (tac i)  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
102  | 
fun REPEAT' tac = fn i => REPEAT (tac i)  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
103  | 
|
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
104  | 
fun rewrite_only_thms ctxt thms =  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
105  | 
ctxt  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
106  | 
|> empty_simpset  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
107  | 
|> put_simpset HOL_basic_ss  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
108  | 
|> (fn ctxt => ctxt addsimps thms)  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
109  | 
|> Simplifier.full_simp_tac  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
110  | 
|
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
111  | 
fun la_farkas args ctxt =  | 
| 
79576
 
157de27b0863
fix reconstruction of Alethe's and_pos rule
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents: 
72513 
diff
changeset
 | 
112  | 
  REPEAT' (resolve_tac ctxt @{thms verit_farkas})
 | 
| 
72458
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
113  | 
  THEN' TRY' (resolve_tac ctxt @{thms ccontr})
 | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
114  | 
  THEN' TRY' (rewrite_only_thms ctxt @{thms linorder_class.not_less linorder_class.not_le not_not})
 | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
115  | 
THEN' (Subgoal.FOCUS (fn focus => la_farkas_tac focus args) ctxt)  | 
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
116  | 
|
| 
 
b44e894796d5
add reconstruction for the SMT solver veriT
 
Mathias Fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents:  
diff
changeset
 | 
117  | 
end  |