new interface to make_conjecture_clauses
authorpaulson
Tue, 18 Oct 2005 15:08:38 +0200
changeset 17888 116a8d1c7a67
parent 17887 c10e68962ad3
child 17889 29391114c295
new interface to make_conjecture_clauses
src/HOL/Tools/res_atp.ML
src/HOL/Tools/res_clause.ML
--- a/src/HOL/Tools/res_atp.ML	Mon Oct 17 23:10:25 2005 +0200
+++ b/src/HOL/Tools/res_atp.ML	Tue Oct 18 15:08:38 2005 +0200
@@ -65,9 +65,9 @@
   | writeln_strs out (s::ss) = (TextIO.output (out, s); TextIO.output (out, "\n"); writeln_strs out ss);
 
 (* write out a subgoal as tptp clauses to the file "xxxx_N"*)
-fun tptp_inputs_tfrees thms pf n (axclauses,classrel_clauses,arity_clauses) =
+fun tptp_inputs_tfrees ths pf n (axclauses,classrel_clauses,arity_clauses) =
   let
-    val clss = ResClause.make_conjecture_clauses thms
+    val clss = ResClause.make_conjecture_clauses (map prop_of ths)
     val (tptp_clss,tfree_litss) = ListPair.unzip (map ResClause.clause2tptp clss)
     val tfree_clss = map ResClause.tfree_clause (foldl (op union_string) [] tfree_litss)
     val classrel_cls = map ResClause.tptp_classrelClause classrel_clauses
@@ -80,8 +80,8 @@
   end;
 
 (* write out a subgoal in DFG format to the file "xxxx_N"*)
-fun dfg_inputs_tfrees thms pf n (axclauses,classrel_clauses,arity_clauses) = 
-    let val clss = ResClause.make_conjecture_clauses thms
+fun dfg_inputs_tfrees ths pf n (axclauses,classrel_clauses,arity_clauses) = 
+    let val clss = ResClause.make_conjecture_clauses (map prop_of ths)
         (*FIXME: classrel_clauses and arity_clauses*)
         val probN = ResClause.clauses2dfg clss (!problem_name ^ "_" ^ Int.toString n)
                         axclauses [] [] []    
@@ -91,10 +91,7 @@
     end;
 
 
-(*********************************************************************)
 (* call prover with settings and problem file for the current subgoal *)
-(*********************************************************************)
-(* now passing in list of skolemized thms and list of sgterms to go with them *)
 fun watcher_call_provers sign sg_terms (childin, childout, pid) =
   let
     fun make_atp_list [] n = []
--- a/src/HOL/Tools/res_clause.ML	Mon Oct 17 23:10:25 2005 +0200
+++ b/src/HOL/Tools/res_clause.ML	Tue Oct 18 15:08:38 2005 +0200
@@ -21,7 +21,7 @@
   type clause
   val init : theory -> unit
   val make_axiom_clause : Term.term -> string * int -> clause
-  val make_conjecture_clauses : thm list -> clause list
+  val make_conjecture_clauses : term list -> clause list
   val get_axiomName : clause ->  string
   val isTaut : clause -> bool
   val num_of_clauses : clause -> int
@@ -401,7 +401,7 @@
 	  val (ts2,ffuncs) = ListPair.unzip ts_funcs
 	  val ts3 = union_all (ts1::ts2)
 	  val ffuncs' = union_all ffuncs
-	  val newfuncs = distinct (pfuncs@ffuncs')
+	  val newfuncs = pfuncs union ffuncs'
 	  val arity = 
 	    case pred of
 		Const (c,_) => 
@@ -423,25 +423,21 @@
   | predicate_of (term,polarity,tag) =
         (pred_of (strip_comb term), polarity, tag);
 
-fun literals_of_term ((Const("Trueprop",_) $ P),lits_ts, preds, funcs) =    
-      literals_of_term(P,lits_ts, preds, funcs)
-  | literals_of_term ((Const("op |",_) $ P $ Q),(lits,ts), preds,funcs) = 
-      let val (lits',ts', preds', funcs') = 
-            literals_of_term(P,(lits,ts), preds,funcs)
+fun literals_of_term1 args (Const("Trueprop",_) $ P) = literals_of_term1 args P
+  | literals_of_term1 (args as (lits, ts, preds, funcs)) (Const("op |",_) $ P $ Q) = 
+      let val (lits', ts', preds', funcs') = literals_of_term1 args P
       in
-	  literals_of_term(Q, (lits',ts'), distinct(preds'@preds), 
-	                   distinct(funcs'@funcs))
+	  literals_of_term1 (lits', ts', preds' union preds, funcs' union funcs) Q
       end
-  | literals_of_term (P,(lits,ts), preds, funcs) = 
-      let val ((pred,ts', preds', funcs'), pol, tag) = 
-              predicate_of (P,true,false)
+  | literals_of_term1 (lits, ts, preds, funcs) P =
+      let val ((pred, ts', preds', funcs'), pol, tag) = predicate_of (P,true,false)
 	  val lits' = Literal(pol,pred,tag) :: lits
       in
-	  (lits', ts union ts', distinct(preds'@preds), distinct(funcs'@funcs))
+	  (lits', ts union ts', preds' union preds, funcs' union funcs)
       end;
 
 
-fun literals_of_thm thm = literals_of_term (prop_of thm, ([],[]), [], []);
+val literals_of_term = literals_of_term1 ([],[],[],[]);
 
 
 (* FIX: not sure what to do with these funcs *)
@@ -495,16 +491,15 @@
 fun get_tvar_strs [] = []
   | get_tvar_strs ((FOLTVar indx,s)::tss) = 
       let val vstr = make_schematic_type_var indx
-          val vstrs = get_tvar_strs tss
       in
-	  (distinct( vstr:: vstrs))
+	  vstr ins (get_tvar_strs tss)
       end
   | get_tvar_strs((FOLTFree x,s)::tss) = distinct (get_tvar_strs tss)
 
 (* FIX add preds and funcs to add typs aux here *)
 
 fun make_axiom_clause_thm thm (ax_name,cls_id) =
-    let val (lits,types_sorts, preds, funcs) = literals_of_thm thm
+    let val (lits,types_sorts, preds, funcs) = literals_of_term (prop_of thm)
 	val (tvar_lits,tfree_lits, preds) = add_typs_aux types_sorts preds 
         val tvars = get_tvar_strs types_sorts
     in 
@@ -515,8 +510,8 @@
 
 
 
-fun make_conjecture_clause n thm =
-    let val (lits,types_sorts, preds, funcs) = literals_of_thm thm
+fun make_conjecture_clause n t =
+    let val (lits,types_sorts, preds, funcs) = literals_of_term t
 	val (tvar_lits,tfree_lits, preds) = add_typs_aux types_sorts preds 
         val tvars = get_tvar_strs types_sorts
     in
@@ -526,14 +521,14 @@
     end;
     
 fun make_conjecture_clauses_aux _ [] = []
-  | make_conjecture_clauses_aux n (th::ths) =
-      make_conjecture_clause n th :: make_conjecture_clauses_aux (n+1) ths
+  | make_conjecture_clauses_aux n (t::ts) =
+      make_conjecture_clause n t :: make_conjecture_clauses_aux (n+1) ts
 
 val make_conjecture_clauses = make_conjecture_clauses_aux 0
 
 
 fun make_axiom_clause term (ax_name,cls_id) =
-    let val (lits,types_sorts, preds,funcs) = literals_of_term (term,([],[]), [],[])
+    let val (lits,types_sorts, preds,funcs) = literals_of_term term
 	val (tvar_lits,tfree_lits, preds) = add_typs_aux types_sorts preds
         val tvars = get_tvar_strs types_sorts	
     in 
@@ -900,8 +895,8 @@
 	 val ax_name = get_axiomName cls
 	 val vars = dfg_vars cls
 	 val tvars = dfg_tvars cls
-	 val funcs' = distinct((funcs_of_cls cls)@funcs)
-	 val preds' = distinct((preds_of_cls cls)@preds)
+	 val funcs' = (funcs_of_cls cls) union funcs
+	 val preds' = (preds_of_cls cls) union preds
 	 val knd = string_of_kind cls
 	 val lits_str = concat_with ", " lits
 	 val axioms' = if knd = "axiom" then (cls::axioms) else axioms