src/HOL/Tools/ATP/recon_translate_proof.ML
author quigley
Wed, 06 Apr 2005 12:01:37 +0200
changeset 15658 2edb384bf61f
parent 15642 028059faa963
child 15684 5ec4d21889d6
permissions -rw-r--r--
watcher.ML and watcher.sig changed. Debug files now write to tmp.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
     1
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
     2
fun take n [] = []
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
     3
|   take n (x::xs) = (if n = 0 then [] else (x::(take (n - 1) xs)))
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
     4
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
     5
fun drop n [] = []
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
     6
|   drop n (x::xs) = (if n = 0 then (x::xs) else drop (n-1) xs)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
     7
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
     8
fun remove n [] = []
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
     9
|   remove n (x::xs) = List.filter (not_equal n) (x::xs);
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    10
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    11
fun remove_nth n [] = []
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    12
|   remove_nth n (x::xs) = (take (n -1) (x::xs))@(drop n (x::xs))
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    13
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    14
fun get_nth n (x::xs) = hd (drop (n-1) (x::xs))
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    15
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    16
fun add_in_order (x:string) [] = [x]
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    17
|   add_in_order (x:string) ((y:string)::ys) = if (x < y) 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    18
                             then 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    19
                                  (x::(y::ys))
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    20
                             else
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    21
                                  (y::(add_in_order x ys))
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    22
fun add_once x [] = [x]
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    23
|   add_once x (y::ys) = if (inlist x (y::ys)) then 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    24
                            (y::ys)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    25
                        else
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    26
                            add_in_order x (y::ys)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    27
     
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    28
fun thm_vars thm = map getindexstring (map fst (Drule.vars_of thm));
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    29
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    30
Goal "False ==> False";
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    31
by Auto_tac;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    32
qed "False_imp";
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    33
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    34
exception Reflex_equal;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    35
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    36
(********************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    37
(* Proofstep datatype           *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    38
(********************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    39
(* Assume rewrite steps have only two clauses in them just now, but lcl109-5 has Rew[5,3,5,3]  *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    40
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    41
datatype Side = Left |Right
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    42
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    43
 datatype Proofstep = ExtraAxiom
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    44
                     |OrigAxiom
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    45
                     | Axiom
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    46
                     | Binary of (int * int) * (int * int)   (* (clause1,lit1), (clause2, lit2) *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    47
                     | MRR of (int * int) * (int * int) 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    48
                     | Factor of (int * int * int)           (* (clause,lit1, lit2) *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    49
                     | Para of (int * int) * (int * int) 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    50
                     | Rewrite of (int * int) * (int * int)  
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    51
                     | Obvious of (int * int)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    52
                     (*| Hyper of int list*)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    53
                     | Unusedstep of unit
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    54
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    55
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    56
datatype Clausesimp = Binary_s of int * int
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    57
                      | Factor_s of unit
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    58
                      | Demod_s of (int * int) list
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    59
                      | Hyper_s of int list
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    60
                      | Unusedstep_s of unit
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    61
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    62
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    63
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    64
datatype Step_label = T_info
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    65
                     |P_info
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    66
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    67
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    68
fun is_alpha_space_digit_or_neg ch = (ch = "~") orelse (is_alpha ch) orelse (is_digit ch) orelse ( ch = " ")
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    69
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    70
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    71
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    72
fun lit_string_with_nums t = let val termstr = (Sign.string_of_term Mainsign) t
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    73
                                 val exp_term = explode termstr
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    74
                             in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    75
                                 implode(List.filter is_alpha_space_digit_or_neg exp_term)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    76
                             end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    77
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    78
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    79
(****************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    80
(* Reconstruct an axiom resolution step *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    81
(****************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    82
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    83
 fun follow_axiom clauses  allvars (clausenum:int) thml clause_strs =  
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    84
                                     let val this_axiom =(assoc  clausenum clauses)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    85
                                         val (res, numlist, symlist, nsymlist) = (rearrange_clause this_axiom clause_strs allvars)         
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    86
                                         val thmvars = thm_vars res
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    87
                                     in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    88
                                         (res, (Axiom,clause_strs,thmvars )  )
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    89
                                     end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    90
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    91
(****************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    92
(* Reconstruct a binary resolution step *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    93
(****************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    94
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    95
                 (* numbers of clauses and literals*) (*vars*) (*list of current thms*) (* literal strings as parsed from spass *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    96
fun follow_binary ((clause1, lit1), (clause2 , lit2)) allvars thml clause_strs 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    97
        = let
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    98
              val thm1 =  select_literal (lit1 + 1) (assoc  clause1 thml)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    99
              val thm2 =  assoc  clause2 thml
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   100
              val res =   thm1 RSN ((lit2 +1), thm2)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   101
              val (res', numlist, symlist, nsymlist) = (rearrange_clause res clause_strs allvars)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   102
              val thmvars = thm_vars res
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   103
          in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   104
             (res',  ((Binary ((clause1, lit1), (clause2 , lit2))),clause_strs,thmvars) )
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   105
          end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   106
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   107
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   108
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   109
(******************************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   110
(* Reconstruct a matching replacement resolution step *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   111
(******************************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   112
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   113
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   114
fun follow_mrr ((clause1, lit1), (clause2 , lit2))  allvars thml clause_strs 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   115
        = let
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   116
              val thm1 =  select_literal (lit1 + 1) (assoc  clause1 thml)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   117
              val thm2 =  assoc  clause2 thml
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   118
              val res =   thm1 RSN ((lit2 +1), thm2)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   119
              val (res', numlist, symlist, nsymlist) = (rearrange_clause res clause_strs allvars)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   120
              val thmvars = thm_vars res
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   121
          in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   122
             (res',  ((MRR ((clause1, lit1), (clause2 , lit2))) ,clause_strs,thmvars))
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   123
          end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   124
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   125
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   126
(*******************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   127
(* Reconstruct a factoring resolution step *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   128
(*******************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   129
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   130
fun mksubstlist [] sublist = sublist
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   131
   |mksubstlist ((a,b)::rest) sublist = let val vartype = type_of b 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   132
                                          val avar = Var(a,vartype)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   133
                                          val newlist = ((avar,b)::sublist) in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   134
                                          mksubstlist rest newlist
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   135
                                      end;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   136
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   137
(* based on Tactic.distinct_subgoals_tac *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   138
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   139
fun delete_assump_tac state lit =
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   140
    let val (frozth,thawfn) = freeze_thaw state
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   141
        val froz_prems = cprems_of frozth
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   142
        val assumed = implies_elim_list frozth (map assume froz_prems)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   143
        val new_prems = remove_nth lit froz_prems
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   144
        val implied = implies_intr_list new_prems assumed
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   145
    in  
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   146
        Seq.single (thawfn implied)  
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   147
    end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   148
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   149
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   150
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   151
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   152
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   153
(*************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   154
(* Reconstruct a factoring step      *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   155
(*************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   156
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   157
fun follow_factor clause lit1 lit2 allvars thml clause_strs= 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   158
                          let 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   159
                            val th =  assoc clause thml
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   160
                            val prems = prems_of th
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   161
                            val fac1 = get_nth (lit1+1) prems
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   162
                            val fac2 = get_nth (lit2+1) prems
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   163
                            val unif_env = unifiers (Mainsign,myenv, [(fac1, fac2)])
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   164
                            val newenv = getnewenv unif_env
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   165
                            val envlist = alist_of newenv
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   166
                            
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   167
                            val newsubsts = mksubstlist envlist []
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   168
                          in 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   169
                            if (is_Var (fst(hd(newsubsts))))
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   170
                            then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   171
                                let 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   172
                                   val str1 = lit_string_with_nums (fst (hd newsubsts));
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   173
                                   val str2 = lit_string_with_nums (snd (hd newsubsts));
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   174
                                   val facthm = read_instantiate [(str1,str2)] th;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   175
                                   val res = hd (Seq.list_of(delete_assump_tac  facthm (lit1 + 1)))
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   176
                                   val (res', numlist, symlist, nsymlist) = (rearrange_clause res clause_strs allvars)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   177
                                   val thmvars = thm_vars res'
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   178
                                in 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   179
                                       (res',((Factor (clause,  lit1, lit2)),clause_strs,thmvars))
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   180
                                end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   181
                            else
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   182
                                let
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   183
                                   val str2 = lit_string_with_nums (fst (hd newsubsts));
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   184
                                   val str1 = lit_string_with_nums (snd (hd newsubsts));
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   185
                                   val facthm = read_instantiate [(str1,str2)] th;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   186
                                   val res = hd (Seq.list_of(delete_assump_tac  facthm (lit1 + 1)))
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   187
                                   val (res', numlist, symlist, nsymlist) = (rearrange_clause res clause_strs allvars)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   188
                                  val thmvars = thm_vars res'
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   189
                                in 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   190
                                       (res', ((Factor (clause,  lit1, lit2)),clause_strs, thmvars))         
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   191
                                end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   192
                         end;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   193
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   194
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   195
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   196
Goal "[| [|Q |] ==> False; [|P|] ==> False; Q; P|] ==> False";
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   197
val prems = it;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   198
br (hd prems) 1;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   199
br (hd(tl(tl prems))) 1;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   200
qed "merge";
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   201
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   202
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   203
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   204
fun get_unif_comb t eqterm = if ((type_of t ) = (type_of eqterm))
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   205
                             then 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   206
                                  t
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   207
                             else 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   208
                                 let val {Rand, Rator} = dest_comb t
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   209
                                 in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   210
                                     get_unif_comb Rand eqterm
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   211
                                 end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   212
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   213
fun get_rhs_unif_lit t eqterm = if (can dest_eq t)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   214
                            then 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   215
                                let val {lhs, rhs} = dest_eq( t)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   216
                                in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   217
                                    rhs
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   218
                                end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   219
                            else
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   220
                                get_unif_comb t eqterm
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   221
                         
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   222
fun get_lhs_unif_lit t eqterm = if (can dest_eq t)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   223
                            then 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   224
                                let val {lhs, rhs} = dest_eq( t)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   225
                                in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   226
                                    lhs
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   227
                                end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   228
                            else
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   229
                                get_unif_comb t eqterm
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   230
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   231
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   232
(*************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   233
(* Reconstruct a paramodulation step *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   234
(*************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   235
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   236
val rev_subst = rotate_prems 1 subst;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   237
val rev_ssubst = rotate_prems 1 ssubst;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   238
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   239
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   240
(* have changed from negate_nead to negate_head.  God knows if this will actually work *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   241
fun follow_standard_para ((clause1, lit1), (clause2 , lit2)) allvars thml clause_strs= 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   242
                          let 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   243
                            val th1 =  assoc clause1 thml
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   244
                            val th2 =  assoc clause2 thml 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   245
                            val eq_lit_th = select_literal (lit1+1) th1
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   246
                            val mod_lit_th = select_literal (lit2+1) th2
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   247
                            val eqsubst = eq_lit_th RSN (2,rev_subst)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   248
                            val newth = Seq.hd (biresolution false [(false, mod_lit_th)] 1 eqsubst)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   249
			    val newth' =negate_head newth 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   250
                            val (res, numlist, symlist, nsymlist)  = (rearrange_clause newth' clause_strs allvars 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   251
                                handle Not_in_list => let 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   252
                                                  val mod_lit_th' = mod_lit_th RS not_sym
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   253
                                                   val newth = Seq.hd (biresolution false [(false, mod_lit_th')] 1 eqsubst)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   254
			                           val newth' =negate_head newth 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   255
                                               in 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   256
                                                  (rearrange_clause newth' clause_strs allvars)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   257
                                               end)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   258
                            val thmvars = thm_vars res
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   259
                         in 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   260
                           (res, ((Para((clause1, lit1), (clause2 , lit2))),clause_strs,thmvars))
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   261
                         end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   262
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   263
(*              
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   264
fun follow_standard_para ((clause1, lit1), (clause2 , lit2)) allvars thml clause_strs= 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   265
                          let 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   266
                            val th1 =  assoc clause1 thml
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   267
                            val th2 =  assoc clause2 thml 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   268
                            val eq_lit_th = select_literal (lit1+1) th1
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   269
                            val mod_lit_th = select_literal (lit2+1) th2
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   270
                            val eqsubst = eq_lit_th RSN (2,rev_subst)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   271
                            val newth = Seq.hd (biresolution false [(false, mod_lit_th)] 1 eqsubst)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   272
			    val newth' =negate_nead newth 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   273
                            val (res, numlist, symlist, nsymlist)  = (rearrange_clause newth' clause_strs allvars)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   274
                            val thmvars = thm_vars res
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   275
                         in 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   276
                           (res, ((Para((clause1, lit1), (clause2 , lit2))),clause_strs,thmvars))
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   277
                         end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   278
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   279
*)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   280
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   281
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   282
(********************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   283
(* Reconstruct a rewriting step *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   284
(********************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   285
 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   286
(*
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   287
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   288
val rev_subst = rotate_prems 1 subst;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   289
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   290
fun paramod_rule ((cl1, lit1), (cl2 , lit2)) =
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   291
     let  val eq_lit_th = select_literal (lit1+1) cl1
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   292
          val mod_lit_th = select_literal (lit2+1) cl2
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   293
          val eqsubst = eq_lit_th RSN (2,rev_subst)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   294
          val newth = Seq.hd (biresolution false [(false, mod_lit_th)] 1 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   295
eqsubst)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   296
     in negated_asm_of_head newth end;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   297
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   298
val newth = Seq.hd (biresolution false [(false, mod_lit_th)] 1 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   299
eqsubst)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   300
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   301
val mod_lit_th' = mod_lit_th RS not_sym
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   302
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   303
*)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   304
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   305
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   306
fun delete_assumps 0 th = th 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   307
|   delete_assumps n th = let val th_prems = length (prems_of th)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   308
                              val th' = hd (Seq.list_of(delete_assump_tac  th (th_prems -1)))
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   309
                          in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   310
                              delete_assumps (n-1) th'
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   311
                          end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   312
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   313
(* extra conditions from the equality turn up as 2nd to last literals of result.  Need to delete them *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   314
(* changed negate_nead to negate_head here too*)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   315
                    (* clause1, lit1 is thing to rewrite with *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   316
fun follow_rewrite ((clause1, lit1), (clause2, lit2)) allvars thml clause_strs= 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   317
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   318
                          let val th1 =  assoc clause1 thml
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   319
                              val th2 = assoc clause2 thml
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   320
                              val eq_lit_th = select_literal (lit1+1) th1
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   321
                              val mod_lit_th = select_literal (lit2+1) th2
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   322
                              val eqsubst = eq_lit_th RSN (2,rev_subst)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   323
                              val eq_lit_prem_num = length (prems_of eq_lit_th)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   324
                              val sign = Sign.merge (sign_of_thm th1, sign_of_thm th2)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   325
                              val newth = Seq.hd (biresolution false [(false, mod_lit_th)] 1 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   326
eqsubst)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   327
                         
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   328
                              val newthm = negate_head newth
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   329
                              val newthm' = delete_assumps eq_lit_prem_num newthm
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   330
                              val (res, numlist, symlist, nsymlist) =(rearrange_clause newthm clause_strs allvars)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   331
                              val thmvars = thm_vars res
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   332
                           in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   333
                               (res, ((Rewrite ((clause1, lit1),  (clause2, lit2))),clause_strs,thmvars))
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   334
                           end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   335
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   336
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   337
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   338
(*****************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   339
(* Reconstruct an obvious reduction step *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   340
(*****************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   341
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   342
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   343
fun follow_obvious  (clause1, lit1)  allvars thml clause_strs= 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   344
                           let val th1 =  assoc clause1 thml
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   345
                               val prems1 = prems_of th1
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   346
                               val newthm = refl RSN ((lit1+ 1), th1)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   347
                                               handle THM _ =>  hd (Seq.list_of(delete_assump_tac  th1 (lit1 + 1)))
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   348
                               val (res, numlist, symlist, nsymlist) =(rearrange_clause newthm clause_strs allvars)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   349
                               val thmvars = thm_vars res
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   350
                           in 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   351
                               (res, ((Obvious (clause1, lit1)),clause_strs,thmvars))
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   352
                           end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   353
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   354
(**************************************************************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   355
(* reconstruct a single line of the res. proof - depending on what sort of proof step it was*)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   356
(**************************************************************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   357
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   358
 fun follow_proof clauses allvars  clausenum thml  (Axiom ) clause_strs
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   359
        = follow_axiom clauses allvars  clausenum thml clause_strs
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   360
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   361
      | follow_proof clauses  allvars clausenum  thml (Binary (a, b)) clause_strs
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   362
        = follow_binary  (a, b)  allvars thml clause_strs
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   363
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   364
      | follow_proof clauses  allvars clausenum  thml (MRR (a, b)) clause_strs
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   365
        = follow_mrr (a, b)  allvars thml clause_strs
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   366
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   367
      | follow_proof clauses  allvars clausenum  thml (Factor (a, b, c)) clause_strs
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   368
         = follow_factor a b c  allvars thml clause_strs
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   369
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   370
      | follow_proof clauses  allvars clausenum  thml (Para (a, b)) clause_strs
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   371
        = follow_standard_para (a, b) allvars  thml clause_strs
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   372
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   373
      | follow_proof clauses  allvars clausenum thml (Rewrite (a,b)) clause_strs
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   374
        = follow_rewrite (a,b)  allvars thml clause_strs
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   375
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   376
      | follow_proof clauses  allvars clausenum thml (Obvious (a,b)) clause_strs
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   377
        = follow_obvious (a,b)  allvars thml clause_strs
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   378
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   379
      (*| follow_proof clauses  clausenum thml (Hyper l)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   380
        = follow_hyper l thml*)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   381
      | follow_proof clauses  allvars clausenum  thml _ _ =
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   382
          raise ASSERTION  "proof step not implemented"
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   383
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   384
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   385
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   386
 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   387
(**************************************************************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   388
(* reconstruct a single line of the res. proof - at the moment do only inference steps*)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   389
(**************************************************************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   390
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   391
    fun follow_line clauses  allvars thml (clause_num, proof_step, clause_strs) recons
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   392
        = let
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   393
            val (thm, recon_fun) = follow_proof clauses  allvars clause_num thml proof_step clause_strs 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   394
            val recon_step = (recon_fun)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   395
          in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   396
            (((clause_num, thm)::thml), ((clause_num,recon_step)::recons))
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   397
          end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   398
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   399
(***************************************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   400
(* follow through the res. proof, creating an Isabelle theorem *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   401
(***************************************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   402
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   403
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   404
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   405
(*fun is_proof_char ch = (case ch of 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   406
                       
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   407
                        "(" => true
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   408
                       |  ")" => true
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   409
                         | ":" => true
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   410
                        |  "'" => true
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   411
                        |  "&" => true
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   412
                        | "|" => true
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   413
                        | "~" => true
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   414
                        |  "." => true
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   415
                        |(is_alpha ) => true
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   416
                       |(is_digit) => true
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   417
                         | _ => false)*)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   418
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   419
fun is_proof_char ch = ((33 <= (ord ch)) andalso ((ord ch ) <= 126)) orelse (ch = " ")
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   420
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   421
fun proofstring x = let val exp = explode x 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   422
                    in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   423
                        List.filter (is_proof_char ) exp
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   424
                    end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   425
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   426
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   427
fun not_newline ch = not (ch = "\n");
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   428
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   429
fun concat_with_and [] str = str
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   430
|   concat_with_and (x::[]) str = str^"("^x^")"
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   431
|   concat_with_and (x::xs) str = (concat_with_and xs (str^"("^x^")"^" & "))
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   432
(*
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   433
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   434
fun follow clauses [] allvars thml recons = 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   435
                             let (* val _ = reset show_sorts*)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   436
                              val thmstring = concat_with_and (map string_of_thm (map snd thml)) ""
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   437
                              val thmproofstring = proofstring ( thmstring)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   438
                            val no_returns =List.filter  not_newline ( thmproofstring)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   439
                            val thmstr = implode no_returns
15658
2edb384bf61f watcher.ML and watcher.sig changed. Debug files now write to tmp.
quigley
parents: 15642
diff changeset
   440
                               val outfile = TextIO.openOut(File.sysify_path(File.tmp_path (Path.basic "thml_file")))
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   441
                               val _ = TextIO.output(outfile, "thmstr is "^thmstr)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   442
                               val _ = TextIO.flushOut outfile;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   443
                               val _ =  TextIO.closeOut outfile
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   444
                                 (*val _ = set show_sorts*)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   445
                             in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   446
                                  ((snd( hd thml)), recons)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   447
                             end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   448
      | follow clauses (h::t) allvars thml recons 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   449
        = let
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   450
            val (thml', recons') = follow_line clauses allvars  thml h recons
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   451
            val  (thm, recons_list) = follow clauses t  allvars thml' recons'
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   452
            
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   453
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   454
          in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   455
             (thm,recons_list)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   456
          end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   457
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   458
*)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   459
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   460
fun replace_clause_strs [] recons newrecons= (newrecons)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   461
|   replace_clause_strs ((thmnum, thm)::thml)  ((clausenum,(step,clause_strs,thmvars))::recons) newrecons = 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   462
                           let val new_clause_strs = get_meta_lits_bracket thm
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   463
                           in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   464
                               replace_clause_strs thml recons ((clausenum,(step,new_clause_strs,thmvars))::newrecons)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   465
                           end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   466
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   467
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   468
fun follow clauses [] allvars thml recons = 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   469
                             let 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   470
                                 val new_recons = replace_clause_strs thml recons []
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   471
                             in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   472
                                  ((snd( hd thml)), new_recons)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   473
                             end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   474
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   475
 |  follow clauses (h::t) allvars thml recons 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   476
        = let
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   477
            val (thml', recons') = follow_line clauses allvars  thml h recons
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   478
            val  (thm, recons_list) = follow clauses t  allvars thml' recons'     
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   479
          in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   480
             (thm,recons_list)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   481
          end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   482
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   483
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   484
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   485
(* Assume we have the cnf clauses as a list of (clauseno, clause) *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   486
 (* and the proof as a list of the proper datatype *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   487
(* take the cnf clauses of the goal and the proof from the res. prover *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   488
(* as a list of type Proofstep and return the thm goal ==> False *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   489
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   490
fun first_pair (a,b,c) = (a,b);
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   491
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   492
fun second_pair (a,b,c) = (b,c);
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   493
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   494
fun one_of_three (a,b,c) = a;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   495
fun two_of_three (a,b,c) = b;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   496
fun three_of_three (a,b,c) = c;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   497
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   498
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   499
(* takes original axioms, proof_steps parsed from spass, variables *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   500
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   501
fun translate_proof clauses proof allvars
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   502
        = let val (thm, recons) = follow clauses proof allvars [] []
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   503
          in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   504
             (thm, (recons))
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   505
          end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   506
  
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   507
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   508
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   509
fun remove_tinfo [] = []
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   510
|   remove_tinfo ( (clausenum, step, T_info, newstrs)::xs) = (clausenum, step , newstrs)::(remove_tinfo xs)