src/HOL/Tools/ATP/recon_translate_proof.ML
author paulson
Mon, 28 Aug 2006 18:18:31 +0200
changeset 20423 593053389701
parent 20294 a69cda724b5a
permissions -rw-r--r--
minor bug fixes
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
15789
4cb16144c81b added hearder lines and deleted some redundant material
paulson
parents: 15774
diff changeset
     1
(*  ID:         $Id$
4cb16144c81b added hearder lines and deleted some redundant material
paulson
parents: 15774
diff changeset
     2
    Author:     Claire Quigley
4cb16144c81b added hearder lines and deleted some redundant material
paulson
parents: 15774
diff changeset
     3
    Copyright   2004  University of Cambridge
4cb16144c81b added hearder lines and deleted some redundant material
paulson
parents: 15774
diff changeset
     4
*)
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
     5
16803
wenzelm
parents: 16707
diff changeset
     6
structure ReconTranslateProof =
wenzelm
parents: 16707
diff changeset
     7
struct
wenzelm
parents: 16707
diff changeset
     8
20294
a69cda724b5a removed obsolete Drule.frees/vars_of;
wenzelm
parents: 20259
diff changeset
     9
fun thm_varnames thm =
a69cda724b5a removed obsolete Drule.frees/vars_of;
wenzelm
parents: 20259
diff changeset
    10
  (Drule.fold_terms o Term.fold_aterms)
a69cda724b5a removed obsolete Drule.frees/vars_of;
wenzelm
parents: 20259
diff changeset
    11
    (fn Var ((x, _), _) => insert (op =) x | _ => I) thm [];
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    12
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    13
exception Reflex_equal;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    14
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    15
(********************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    16
(* Proofstep datatype           *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    17
(********************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    18
(* 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
    19
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    20
datatype Side = Left |Right
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    21
16803
wenzelm
parents: 16707
diff changeset
    22
datatype Proofstep =  ExtraAxiom
16418
5d0d24bd2c96 Multiple subgoals working.
quigley
parents: 16357
diff changeset
    23
                     | OrigAxiom
5d0d24bd2c96 Multiple subgoals working.
quigley
parents: 16357
diff changeset
    24
  		     | VampInput 
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    25
                     | Axiom
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    26
                     | Binary of (int * int) * (int * int)   (* (clause1,lit1), (clause2, lit2) *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    27
                     | MRR of (int * int) * (int * int) 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    28
                     | Factor of (int * int * int)           (* (clause,lit1, lit2) *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    29
                     | Para of (int * int) * (int * int) 
16357
f1275d2a1dee All subgoals sent to the watcher at once now.
quigley
parents: 16259
diff changeset
    30
		     | Super_l of (int * int) * (int * int)
f1275d2a1dee All subgoals sent to the watcher at once now.
quigley
parents: 16259
diff changeset
    31
		     | Super_r of (int * int) * (int * int)
16548
aa36ae6b955e Temporarily removed Rewrite from the translation code so that parsing with work on lists of numbers.
quigley
parents: 16433
diff changeset
    32
                     (*| Rewrite of (int * int) * (int * int)  *)
aa36ae6b955e Temporarily removed Rewrite from the translation code so that parsing with work on lists of numbers.
quigley
parents: 16433
diff changeset
    33
                     | Rewrite of (int * int) list
16357
f1275d2a1dee All subgoals sent to the watcher at once now.
quigley
parents: 16259
diff changeset
    34
		     | SortSimp of (int * int) * (int * int)  
f1275d2a1dee All subgoals sent to the watcher at once now.
quigley
parents: 16259
diff changeset
    35
		     | UnitConf of (int * int) * (int * int)  
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    36
                     | Obvious of (int * int)
16357
f1275d2a1dee All subgoals sent to the watcher at once now.
quigley
parents: 16259
diff changeset
    37
  		     | AED of (int*int)
f1275d2a1dee All subgoals sent to the watcher at once now.
quigley
parents: 16259
diff changeset
    38
  		     | EqualRes of (int*int)
f1275d2a1dee All subgoals sent to the watcher at once now.
quigley
parents: 16259
diff changeset
    39
    		     | Condense of (int*int)
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    40
                     (*| Hyper of int list*)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    41
                     | Unusedstep of unit
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    42
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    43
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    44
datatype Clausesimp = Binary_s of int * int
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    45
                      | Factor_s of unit
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    46
                      | Demod_s of (int * int) list
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    47
                      | Hyper_s of int list
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    48
                      | Unusedstep_s of unit
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    49
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    50
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    51
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    52
datatype Step_label = T_info
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    53
                     |P_info
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    54
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    55
16061
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
    56
fun is_alpha_space_digit_or_neg ch =
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
    57
    (ch = "~") orelse (ReconOrderClauses.is_alpha ch) orelse 
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
    58
    (ReconOrderClauses.is_digit ch) orelse ( ch = " ");
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    59
19643
213e12ad2c03 added low-level string_of_term (back again from term.ML) -- should avoid this altogether;
wenzelm
parents: 17776
diff changeset
    60
fun string_of_term (Const(s,_)) = s
213e12ad2c03 added low-level string_of_term (back again from term.ML) -- should avoid this altogether;
wenzelm
parents: 17776
diff changeset
    61
  | string_of_term (Free(s,_)) = s
213e12ad2c03 added low-level string_of_term (back again from term.ML) -- should avoid this altogether;
wenzelm
parents: 17776
diff changeset
    62
  | string_of_term (Var(ix,_)) = Term.string_of_vname ix
213e12ad2c03 added low-level string_of_term (back again from term.ML) -- should avoid this altogether;
wenzelm
parents: 17776
diff changeset
    63
  | string_of_term (Bound i) = string_of_int i
213e12ad2c03 added low-level string_of_term (back again from term.ML) -- should avoid this altogether;
wenzelm
parents: 17776
diff changeset
    64
  | string_of_term (Abs(x,_,t)) = "%" ^ x ^ ". " ^ string_of_term t
213e12ad2c03 added low-level string_of_term (back again from term.ML) -- should avoid this altogether;
wenzelm
parents: 17776
diff changeset
    65
  | string_of_term (s $ t) =
213e12ad2c03 added low-level string_of_term (back again from term.ML) -- should avoid this altogether;
wenzelm
parents: 17776
diff changeset
    66
      "(" ^ string_of_term s ^ " " ^ string_of_term t ^ ")"
213e12ad2c03 added low-level string_of_term (back again from term.ML) -- should avoid this altogether;
wenzelm
parents: 17776
diff changeset
    67
213e12ad2c03 added low-level string_of_term (back again from term.ML) -- should avoid this altogether;
wenzelm
parents: 17776
diff changeset
    68
(* FIXME string_of_term is quite unreliable here *)
213e12ad2c03 added low-level string_of_term (back again from term.ML) -- should avoid this altogether;
wenzelm
parents: 17776
diff changeset
    69
fun lit_string_with_nums t = let val termstr = string_of_term t
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    70
                                 val exp_term = explode termstr
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    71
                             in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    72
                                 implode(List.filter is_alpha_space_digit_or_neg exp_term)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    73
                             end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    74
15774
9df37a0e935d more tidying of libraries in Reconstruction
paulson
parents: 15739
diff changeset
    75
fun reconstruction_failed fname = error (fname ^ ": reconstruction failed")
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    76
15919
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15794
diff changeset
    77
(************************************************)
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15794
diff changeset
    78
(* Reconstruct an axiom resolution step         *)
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15794
diff changeset
    79
(* clauses is a list of (clausenum,clause) pairs*)
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15794
diff changeset
    80
(************************************************)
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    81
15774
9df37a0e935d more tidying of libraries in Reconstruction
paulson
parents: 15739
diff changeset
    82
fun follow_axiom clauses  allvars (clausenum:int) thml clause_strs =  
17374
63e0ab9f2ea9 introduces AList.lookup
haftmann
parents: 17312
diff changeset
    83
    let val this_axiom = (the o AList.lookup (op =) clauses) clausenum
16061
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
    84
	val (res, numlist, symlist, nsymlist) = (ReconOrderClauses.rearrange_clause this_axiom clause_strs allvars)         
20294
a69cda724b5a removed obsolete Drule.frees/vars_of;
wenzelm
parents: 20259
diff changeset
    85
	val thmvars = thm_varnames res
16061
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
    86
    in
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
    87
	(res, (Axiom,clause_strs,thmvars )  )
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
    88
    end
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
    89
    handle Option => reconstruction_failed "follow_axiom"
15642
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 *)
16061
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
    96
fun follow_binary ((clause1, lit1), (clause2 , lit2)) allvars thml clause_strs =
17374
63e0ab9f2ea9 introduces AList.lookup
haftmann
parents: 17312
diff changeset
    97
    let val thm1 =  select_literal (lit1 + 1) ((the o AList.lookup (op =) thml) clause1)
63e0ab9f2ea9 introduces AList.lookup
haftmann
parents: 17312
diff changeset
    98
	val thm2 =  (the o AList.lookup (op =) thml) clause2
16061
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
    99
	val res =   thm1 RSN ((lit2 +1), thm2)
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   100
	val (res', numlist, symlist, nsymlist) = (ReconOrderClauses.rearrange_clause res clause_strs allvars)
20294
a69cda724b5a removed obsolete Drule.frees/vars_of;
wenzelm
parents: 20259
diff changeset
   101
	val thmvars = thm_varnames res
16061
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   102
    in
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   103
       (res',  ((Binary ((clause1, lit1), (clause2 , lit2))),clause_strs,thmvars) )
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   104
    end
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   105
    handle Option => reconstruction_failed "follow_binary"
15642
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
16061
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   114
fun follow_mrr ((clause1, lit1), (clause2 , lit2))  allvars thml clause_strs =
17374
63e0ab9f2ea9 introduces AList.lookup
haftmann
parents: 17312
diff changeset
   115
    let val thm1 =  select_literal (lit1 + 1) ((the o AList.lookup (op =) thml) clause1)
63e0ab9f2ea9 introduces AList.lookup
haftmann
parents: 17312
diff changeset
   116
	val thm2 =  (the o AList.lookup (op =) thml) clause2
16061
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   117
	val res =   thm1 RSN ((lit2 +1), thm2)
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   118
	val (res', numlist, symlist, nsymlist) = 
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   119
	    (ReconOrderClauses.rearrange_clause res clause_strs allvars)
20294
a69cda724b5a removed obsolete Drule.frees/vars_of;
wenzelm
parents: 20259
diff changeset
   120
	val thmvars = thm_varnames res
16061
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   121
    in
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   122
       (res',  ((MRR ((clause1, lit1), (clause2 , lit2))) ,clause_strs,thmvars))
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   123
    end
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   124
    handle Option => reconstruction_failed "follow_mrr"
15642
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
(*******************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   128
(* Reconstruct a factoring resolution step *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   129
(*******************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   130
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   131
fun mksubstlist [] sublist = sublist
16061
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   132
   |mksubstlist ((a, (_, b)) :: rest) sublist = 
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   133
       let val vartype = type_of b 
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   134
	   val avar = Var(a,vartype)
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   135
	   val newlist = ((avar,b)::sublist)
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   136
       in
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   137
	   mksubstlist rest newlist
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   138
       end;
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   139
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   140
(* based on Tactic.distinct_subgoals_tac *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   141
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   142
fun delete_assump_tac state lit =
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   143
    let val (frozth,thawfn) = freeze_thaw state
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   144
        val froz_prems = cprems_of frozth
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   145
        val assumed = implies_elim_list frozth (map assume froz_prems)
16061
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   146
        val new_prems = ReconOrderClauses.remove_nth lit froz_prems
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   147
        val implied = implies_intr_list new_prems assumed
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   148
    in  
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   149
        Seq.single (thawfn implied)  
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   150
    end
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
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
(* Reconstruct a factoring step      *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   158
(*************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   159
17488
67376a311a2b further simplification of the Isabelle-ATP linkup
paulson
parents: 17374
diff changeset
   160
fun getnewenv seq = fst (fst (the (Seq.pull seq)));
67376a311a2b further simplification of the Isabelle-ATP linkup
paulson
parents: 17374
diff changeset
   161
15739
bb2acfed8212 yet more tidying up: removal of some references to Main
paulson
parents: 15736
diff changeset
   162
(*FIXME: share code with that in Tools/reconstruction.ML*)
16061
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   163
fun follow_factor clause lit1 lit2 allvars thml clause_strs = 
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   164
    let 
17374
63e0ab9f2ea9 introduces AList.lookup
haftmann
parents: 17312
diff changeset
   165
      val th =  (the o AList.lookup (op =) thml) clause
16061
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   166
      val prems = prems_of th
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   167
      val sign = sign_of_thm th
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   168
      val fac1 = ReconOrderClauses.get_nth (lit1+1) prems
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   169
      val fac2 = ReconOrderClauses.get_nth (lit2+1) prems
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   170
      val unif_env = Unify.unifiers (sign,Envir.empty 0, [(fac1, fac2)])
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   171
      val newenv = getnewenv unif_env
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   172
      val envlist = Envir.alist_of newenv
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   173
      
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   174
      val (t1,t2)::_ = mksubstlist envlist []
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   175
    in 
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   176
      if (is_Var t1)
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   177
      then
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   178
	  let 
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   179
	     val str1 = lit_string_with_nums t1;
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   180
	     val str2 = lit_string_with_nums t2;
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   181
	     val facthm = read_instantiate [(str1,str2)] th;
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   182
	     val res = hd (Seq.list_of(delete_assump_tac  facthm (lit1 + 1)))
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   183
	     val (res', numlist, symlist, nsymlist) = 
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   184
	         ReconOrderClauses.rearrange_clause res clause_strs allvars
20294
a69cda724b5a removed obsolete Drule.frees/vars_of;
wenzelm
parents: 20259
diff changeset
   185
	     val thmvars = thm_varnames res'
16061
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   186
	  in 
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   187
		 (res',((Factor (clause,  lit1, lit2)),clause_strs,thmvars))
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   188
	  end
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   189
      else
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   190
	  let
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   191
	     val str2 = lit_string_with_nums t1;
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   192
	     val str1 = lit_string_with_nums t2;
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   193
	     val facthm = read_instantiate [(str1,str2)] th;
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   194
	     val res = hd (Seq.list_of(delete_assump_tac  facthm (lit1 + 1)))
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   195
	     val (res', numlist, symlist, nsymlist) = 
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   196
	         ReconOrderClauses.rearrange_clause res clause_strs allvars
20294
a69cda724b5a removed obsolete Drule.frees/vars_of;
wenzelm
parents: 20259
diff changeset
   197
	     val thmvars = thm_varnames res'
16061
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   198
	  in 
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   199
		 (res', ((Factor (clause,  lit1, lit2)),clause_strs, thmvars))         
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   200
	  end
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   201
   end
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   202
   handle Option => reconstruction_failed "follow_factor"
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   203
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   204
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   205
15684
5ec4d21889d6 Reconstruction code, now packaged to avoid name clashes
paulson
parents: 15658
diff changeset
   206
fun get_unif_comb t eqterm =
5ec4d21889d6 Reconstruction code, now packaged to avoid name clashes
paulson
parents: 15658
diff changeset
   207
    if ((type_of t) = (type_of eqterm))
5ec4d21889d6 Reconstruction code, now packaged to avoid name clashes
paulson
parents: 15658
diff changeset
   208
    then t
5ec4d21889d6 Reconstruction code, now packaged to avoid name clashes
paulson
parents: 15658
diff changeset
   209
    else
5ec4d21889d6 Reconstruction code, now packaged to avoid name clashes
paulson
parents: 15658
diff changeset
   210
        let val _ $ rand = t
5ec4d21889d6 Reconstruction code, now packaged to avoid name clashes
paulson
parents: 15658
diff changeset
   211
        in get_unif_comb rand eqterm end;
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   212
15684
5ec4d21889d6 Reconstruction code, now packaged to avoid name clashes
paulson
parents: 15658
diff changeset
   213
fun get_unif_lit t eqterm =
5ec4d21889d6 Reconstruction code, now packaged to avoid name clashes
paulson
parents: 15658
diff changeset
   214
    if (can HOLogic.dest_eq t)
5ec4d21889d6 Reconstruction code, now packaged to avoid name clashes
paulson
parents: 15658
diff changeset
   215
    then
5ec4d21889d6 Reconstruction code, now packaged to avoid name clashes
paulson
parents: 15658
diff changeset
   216
	let val (lhs,rhs) = HOLogic.dest_eq(HOLogic.dest_Trueprop eqterm)
5ec4d21889d6 Reconstruction code, now packaged to avoid name clashes
paulson
parents: 15658
diff changeset
   217
	in lhs end
5ec4d21889d6 Reconstruction code, now packaged to avoid name clashes
paulson
parents: 15658
diff changeset
   218
    else
5ec4d21889d6 Reconstruction code, now packaged to avoid name clashes
paulson
parents: 15658
diff changeset
   219
	get_unif_comb t eqterm;
5ec4d21889d6 Reconstruction code, now packaged to avoid name clashes
paulson
parents: 15658
diff changeset
   220
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   221
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   222
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   223
(*************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   224
(* Reconstruct a paramodulation step *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   225
(*************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   226
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   227
val rev_subst = rotate_prems 1 subst;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   228
val rev_ssubst = rotate_prems 1 ssubst;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   229
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   230
16061
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   231
fun follow_standard_para ((clause1, lit1), (clause2 , lit2)) allvars thml clause_strs = 
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   232
    let 
17374
63e0ab9f2ea9 introduces AList.lookup
haftmann
parents: 17312
diff changeset
   233
      val th1 =  (the o AList.lookup (op =) thml) clause1
63e0ab9f2ea9 introduces AList.lookup
haftmann
parents: 17312
diff changeset
   234
      val th2 =  (the o AList.lookup (op =) thml) clause2 
16061
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   235
      val eq_lit_th = select_literal (lit1+1) th1
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   236
      val mod_lit_th = select_literal (lit2+1) th2
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   237
      val eqsubst = eq_lit_th RSN (2,rev_subst)
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   238
      val newth = Seq.hd (biresolution false [(false, mod_lit_th)] 1 eqsubst)
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   239
      val newth' =negate_head newth 
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   240
      val (res, numlist, symlist, nsymlist)  = 
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   241
          (ReconOrderClauses.rearrange_clause newth' clause_strs allvars 
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   242
	   handle Not_in_list => 
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   243
	       let val mod_lit_th' = mod_lit_th RS not_sym
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   244
		   val newth = Seq.hd (biresolution false [(false, mod_lit_th')] 1 eqsubst)
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   245
		   val newth' =negate_head newth 
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   246
		in 
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   247
		   ReconOrderClauses.rearrange_clause newth' clause_strs allvars
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   248
		end)
20294
a69cda724b5a removed obsolete Drule.frees/vars_of;
wenzelm
parents: 20259
diff changeset
   249
      val thmvars = thm_varnames res
16061
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   250
   in 
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   251
     (res, ((Para((clause1, lit1), (clause2 , lit2))),clause_strs,thmvars))
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   252
   end
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   253
   handle Option => reconstruction_failed "follow_standard_para"
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   254
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   255
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   256
(********************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   257
(* Reconstruct a rewriting step *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   258
(********************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   259
 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   260
(*
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   261
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   262
val rev_subst = rotate_prems 1 subst;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   263
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   264
fun paramod_rule ((cl1, lit1), (cl2 , lit2)) =
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   265
     let  val eq_lit_th = select_literal (lit1+1) cl1
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   266
          val mod_lit_th = select_literal (lit2+1) cl2
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   267
          val eqsubst = eq_lit_th RSN (2,rev_subst)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   268
          val newth = Seq.hd (biresolution false [(false, mod_lit_th)] 1 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   269
eqsubst)
15697
681bcb7f0389 removal of Main and other tidying up
paulson
parents: 15684
diff changeset
   270
     in Meson.negated_asm_of_head newth end;
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   271
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   272
val newth = Seq.hd (biresolution false [(false, mod_lit_th)] 1 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   273
eqsubst)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   274
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   275
val mod_lit_th' = mod_lit_th RS not_sym
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   276
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   277
*)
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
fun delete_assumps 0 th = th 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   281
|   delete_assumps n th = let val th_prems = length (prems_of th)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   282
                              val th' = hd (Seq.list_of(delete_assump_tac  th (th_prems -1)))
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   283
                          in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   284
                              delete_assumps (n-1) th'
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   285
                          end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   286
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   287
(* 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
   288
(* changed negate_nead to negate_head here too*)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   289
                    (* clause1, lit1 is thing to rewrite with *)
16548
aa36ae6b955e Temporarily removed Rewrite from the translation code so that parsing with work on lists of numbers.
quigley
parents: 16433
diff changeset
   290
(*fun follow_rewrite ((clause1, lit1), (clause2, lit2)) allvars thml clause_strs = 
17374
63e0ab9f2ea9 introduces AList.lookup
haftmann
parents: 17312
diff changeset
   291
      let val th1 =  (the o AList.lookup (op =) thml) clause1
63e0ab9f2ea9 introduces AList.lookup
haftmann
parents: 17312
diff changeset
   292
	  val th2 = (the o AList.lookup (op =) thml) clause2
16061
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   293
	  val eq_lit_th = select_literal (lit1+1) th1
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   294
	  val mod_lit_th = select_literal (lit2+1) th2
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   295
	  val eqsubst = eq_lit_th RSN (2,rev_subst)
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   296
	  val eq_lit_prem_num = length (prems_of eq_lit_th)
16433
e6fedd5baf32 Theory.merge;
wenzelm
parents: 16418
diff changeset
   297
	  val sign = Theory.merge (sign_of_thm th1, sign_of_thm th2)
16061
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   298
	  val newth = Seq.hd (biresolution false [(false, mod_lit_th)] 1 eqsubst)
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   299
     	  val newthm = negate_head newth
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   300
	  val newthm' = delete_assumps eq_lit_prem_num newthm
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   301
	  val (res, numlist, symlist, nsymlist) =
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   302
	      ReconOrderClauses.rearrange_clause newthm clause_strs allvars
20294
a69cda724b5a removed obsolete Drule.frees/vars_of;
wenzelm
parents: 20259
diff changeset
   303
	  val thmvars = thm_varnames res
16061
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   304
       in
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   305
	   (res, ((Rewrite ((clause1, lit1),  (clause2, lit2))),clause_strs,thmvars))
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   306
       end
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   307
       handle Option => reconstruction_failed "follow_rewrite"
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   308
16548
aa36ae6b955e Temporarily removed Rewrite from the translation code so that parsing with work on lists of numbers.
quigley
parents: 16433
diff changeset
   309
*)
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   310
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   311
(*****************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   312
(* Reconstruct an obvious reduction step *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   313
(*****************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   314
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   315
16061
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   316
fun follow_obvious  (clause1, lit1)  allvars thml clause_strs = 
17374
63e0ab9f2ea9 introduces AList.lookup
haftmann
parents: 17312
diff changeset
   317
    let val th1 =  (the o AList.lookup (op =) thml) clause1
16061
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   318
	val prems1 = prems_of th1
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   319
	val newthm = refl RSN ((lit1+ 1), th1)
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   320
		     handle THM _ =>  hd (Seq.list_of(delete_assump_tac  th1 (lit1 + 1)))
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   321
	val (res, numlist, symlist, nsymlist) =
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   322
	    ReconOrderClauses.rearrange_clause newthm clause_strs allvars
20294
a69cda724b5a removed obsolete Drule.frees/vars_of;
wenzelm
parents: 20259
diff changeset
   323
	val thmvars = thm_varnames res
16061
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   324
    in 
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   325
	(res, ((Obvious (clause1, lit1)),clause_strs,thmvars))
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   326
    end
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   327
    handle Option => reconstruction_failed "follow_obvious"
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   328
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   329
(**************************************************************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   330
(* 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
   331
(**************************************************************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   332
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   333
 fun follow_proof clauses allvars  clausenum thml  (Axiom ) clause_strs
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   334
        = follow_axiom clauses allvars  clausenum thml clause_strs
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   335
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   336
      | follow_proof clauses  allvars clausenum  thml (Binary (a, b)) clause_strs
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   337
        = follow_binary  (a, b)  allvars thml clause_strs
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   338
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   339
      | follow_proof clauses  allvars clausenum  thml (MRR (a, b)) clause_strs
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   340
        = follow_mrr (a, b)  allvars thml clause_strs
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   341
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   342
      | follow_proof clauses  allvars clausenum  thml (Factor (a, b, c)) clause_strs
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   343
         = follow_factor a b c  allvars thml clause_strs
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   344
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   345
      | follow_proof clauses  allvars clausenum  thml (Para (a, b)) clause_strs
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   346
        = follow_standard_para (a, b) allvars  thml clause_strs
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   347
16548
aa36ae6b955e Temporarily removed Rewrite from the translation code so that parsing with work on lists of numbers.
quigley
parents: 16433
diff changeset
   348
    (*  | follow_proof clauses  allvars clausenum thml (Rewrite (a,b)) clause_strs
aa36ae6b955e Temporarily removed Rewrite from the translation code so that parsing with work on lists of numbers.
quigley
parents: 16433
diff changeset
   349
        = follow_rewrite (a,b)  allvars thml clause_strs*)
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   350
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   351
      | follow_proof clauses  allvars clausenum thml (Obvious (a,b)) clause_strs
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   352
        = follow_obvious (a,b)  allvars thml clause_strs
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   353
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   354
      (*| follow_proof clauses  clausenum thml (Hyper l)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   355
        = follow_hyper l thml*)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   356
      | follow_proof clauses  allvars clausenum  thml _ _ =
17488
67376a311a2b further simplification of the Isabelle-ATP linkup
paulson
parents: 17374
diff changeset
   357
          error "proof step not implemented"
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   358
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   359
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   360
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   361
 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   362
(**************************************************************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   363
(* reconstruct a single line of the res. proof - at the moment do only inference steps*)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   364
(**************************************************************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   365
17488
67376a311a2b further simplification of the Isabelle-ATP linkup
paulson
parents: 17374
diff changeset
   366
    fun follow_line clauses  allvars thml (clause_num, proof_step, clause_strs) recons =
67376a311a2b further simplification of the Isabelle-ATP linkup
paulson
parents: 17374
diff changeset
   367
      let
67376a311a2b further simplification of the Isabelle-ATP linkup
paulson
parents: 17374
diff changeset
   368
	val (thm, recon_fun) = follow_proof clauses allvars clause_num thml proof_step clause_strs 
67376a311a2b further simplification of the Isabelle-ATP linkup
paulson
parents: 17374
diff changeset
   369
      in
67376a311a2b further simplification of the Isabelle-ATP linkup
paulson
parents: 17374
diff changeset
   370
	((clause_num, thm)::thml, (clause_num,recon_fun)::recons)
67376a311a2b further simplification of the Isabelle-ATP linkup
paulson
parents: 17374
diff changeset
   371
      end
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   372
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   373
(***************************************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   374
(* follow through the res. proof, creating an Isabelle theorem *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   375
(***************************************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   376
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   377
fun is_proof_char ch = ((33 <= (ord ch)) andalso ((ord ch ) <= 126)) orelse (ch = " ")
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   378
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   379
fun proofstring x = let val exp = explode x 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   380
                    in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   381
                        List.filter (is_proof_char ) exp
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   382
                    end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   383
16061
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   384
fun replace_clause_strs [] recons newrecons = (newrecons)
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   385
|   replace_clause_strs ((thmnum, thm)::thml)    
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   386
                  ((clausenum,(step,clause_strs,thmvars))::recons) newrecons = 
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   387
    let val new_clause_strs = ReconOrderClauses.get_meta_lits_bracket thm
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   388
    in
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   389
	replace_clause_strs thml recons  
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   390
	    ((clausenum,(step,new_clause_strs,thmvars))::newrecons)
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   391
    end
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   392
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   393
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   394
fun follow clauses [] allvars thml recons = 
16061
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   395
      let 
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   396
	  val new_recons = replace_clause_strs thml recons []
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   397
      in
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   398
	   (#2(hd thml), new_recons)
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   399
      end
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   400
 | follow clauses (h::t) allvars thml recons =
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   401
      let
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   402
	val (thml', recons') = follow_line clauses allvars  thml h recons
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   403
	val  (thm, recons_list) = follow clauses t  allvars thml' recons'     
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   404
      in
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   405
	 (thm,recons_list)
8a139c1557bf A new structure and reduced indentation
paulson
parents: 15919
diff changeset
   406
      end
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   407
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   408
(* Assume we have the cnf clauses as a list of (clauseno, clause) *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   409
 (* and the proof as a list of the proper datatype *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   410
(* take the cnf clauses of the goal and the proof from the res. prover *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   411
(* as a list of type Proofstep and return the thm goal ==> False *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   412
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   413
(* takes original axioms, proof_steps parsed from spass, variables *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   414
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   415
fun translate_proof clauses proof allvars
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   416
        = let val (thm, recons) = follow clauses proof allvars [] []
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   417
          in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   418
             (thm, (recons))
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   419
          end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   420
  
16803
wenzelm
parents: 16707
diff changeset
   421
end;