simplifying the treatment of clausification
authorpaulson
Tue, 11 Oct 2005 15:04:11 +0200
changeset 17829 35123f89801e
parent 17828 c82fb51ee18d
child 17830 695a2365d32f
simplifying the treatment of clausification
src/HOL/Tools/res_axioms.ML
--- a/src/HOL/Tools/res_axioms.ML	Tue Oct 11 15:03:36 2005 +0200
+++ b/src/HOL/Tools/res_axioms.ML	Tue Oct 11 15:04:11 2005 +0200
@@ -20,8 +20,7 @@
   val simpset_rules_of_thy : theory -> (string * thm) list
   val claset_rules_of_ctxt: Proof.context -> (string * thm) list
   val simpset_rules_of_ctxt : Proof.context -> (string * thm) list
-  val clausify_rules_pairs : 
-        (string*thm) list -> thm list -> (ResClause.clause*thm) list list * thm list
+  val clausify_rules_pairs : (string*thm) list -> (ResClause.clause*thm) list list
   val clause_setup : (theory -> theory) list
   val meson_method_setup : (theory -> theory) list
   end;
@@ -174,7 +173,7 @@
 (* remove tautologous clauses *)
 val rm_redundant_cls = List.filter (not o is_taut);
 
-(* transform an Isabelle thm into CNF *)
+(* transform an Isabelle theorem into CNF *)
 fun cnf_axiom_aux th =
     map zero_var_indexes
         (rm_redundant_cls (cnf_rule (transfer_to_Reconstruction th)));
@@ -356,9 +355,9 @@
 
 (* replace the epsilon terms in a formula by skolem terms. *)
 fun rm_Eps _ [] = []
-  | rm_Eps epss (th::thms) = 
+  | rm_Eps epss (th::ths) = 
       let val (th',epss') = rm_Eps_cls epss th
-      in th' :: (rm_Eps epss' thms) end;
+      in th' :: (rm_Eps epss' ths) end;
 
 
 
@@ -406,8 +405,8 @@
 
 (* classical rules *)
 fun cnf_rules [] err_list = ([],err_list)
-  | cnf_rules ((name,th) :: thms) err_list = 
-      let val (ts,es) = cnf_rules thms err_list
+  | cnf_rules ((name,th) :: ths) err_list = 
+      let val (ts,es) = cnf_rules ths err_list
       in  (cnf_axiom (name,th) :: ts,es) handle  _ => (ts, (th::es))  end;  
 
 
@@ -416,9 +415,9 @@
 fun addclause (c,th) l =
   if ResClause.isTaut c then l else (c,th) :: l;
 
-(* outputs a list of (clause,thm) pairs *)
-fun clausify_axiom_pairs (thm_name,thm) =
-    let val isa_clauses = cnf_axiom (thm_name,thm) 
+(* outputs a list of (clause,theorem) pairs *)
+fun clausify_axiom_pairs (thm_name,th) =
+    let val isa_clauses = cnf_axiom (thm_name,th) 
         val isa_clauses' = rm_Eps [] isa_clauses
         val clauses_n = length isa_clauses
 	fun make_axiom_clauses _ [] []= []
@@ -429,20 +428,18 @@
 	make_axiom_clauses 0 isa_clauses' isa_clauses		
     end
 
-fun clausify_rules_pairs [] err_list = ([],err_list)
-  | clausify_rules_pairs ((name,thm)::thms) err_list =
-      let val (ts,es) = clausify_rules_pairs thms err_list
-      in
-	  ((clausify_axiom_pairs (name,thm))::ts, es) 
-	  handle THM (msg,_,_) =>  
-		  (debug ("Cannot clausify " ^ name ^ ": " ^ msg); 
-		   (ts, (thm::es)))
-             |  ResClause.CLAUSE (msg,t) => 
-                  (debug ("Cannot clausify " ^ name ^ ": " ^ msg ^
-                          ": " ^ TermLib.string_of_term t); 
-		   (ts, (thm::es)))
+fun clausify_rules_pairs_aux result [] = result
+  | clausify_rules_pairs_aux result ((name,th)::ths) =
+      clausify_rules_pairs_aux (clausify_axiom_pairs (name,th) :: result) ths
+      handle THM (msg,_,_) =>  
+	      (debug ("Cannot clausify " ^ name ^ ": " ^ msg); 
+	       clausify_rules_pairs_aux result ths)
+	 |  ResClause.CLAUSE (msg,t) => 
+	      (debug ("Cannot clausify " ^ name ^ ": " ^ msg ^
+		      ": " ^ TermLib.string_of_term t); 
+	       clausify_rules_pairs_aux result ths)
 
-      end;
+val clausify_rules_pairs = clausify_rules_pairs_aux []
 
 
 (*Setup function: takes a theory and installs ALL simprules and claset rules