src/HOL/Tools/ATP/res_clasimpset.ML
author paulson
Thu, 12 May 2005 18:24:42 +0200
changeset 15956 0da64b5a9a00
parent 15919 b30a35432f5a
child 16039 dfe264950511
permissions -rw-r--r--
theorem names for caching
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
15789
4cb16144c81b added hearder lines and deleted some redundant material
paulson
parents: 15782
diff changeset
     1
(*  ID:         $Id$
4cb16144c81b added hearder lines and deleted some redundant material
paulson
parents: 15782
diff changeset
     2
    Author:     Claire Quigley
4cb16144c81b added hearder lines and deleted some redundant material
paulson
parents: 15782
diff changeset
     3
    Copyright   2004  University of Cambridge
4cb16144c81b added hearder lines and deleted some redundant material
paulson
parents: 15782
diff changeset
     4
*)
4cb16144c81b added hearder lines and deleted some redundant material
paulson
parents: 15782
diff changeset
     5
15919
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
     6
signature RES_CLASIMP =
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
     7
  sig
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
     8
     val write_out_clasimp :string -> (ResClause.clause * Thm.thm) Array.array * int
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
     9
  end;
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    10
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    11
structure ResClasimp : RES_CLASIMP =
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    12
struct
15643
5829f30fc20a *** empty log message ***
quigley
parents:
diff changeset
    13
5829f30fc20a *** empty log message ***
quigley
parents:
diff changeset
    14
fun has_name_pair (a,b) = not_equal a "";
5829f30fc20a *** empty log message ***
quigley
parents:
diff changeset
    15
5829f30fc20a *** empty log message ***
quigley
parents:
diff changeset
    16
fun stick []  = []
5829f30fc20a *** empty log message ***
quigley
parents:
diff changeset
    17
|   stick (x::xs)  = x@(stick xs )
5829f30fc20a *** empty log message ***
quigley
parents:
diff changeset
    18
15919
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    19
(* changed, now it also finds out the name of the theorem. *)
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    20
(* convert a theorem into CNF and then into Clause.clause format. *)
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    21
fun clausify_axiom_pairs thm =
15956
0da64b5a9a00 theorem names for caching
paulson
parents: 15919
diff changeset
    22
    let val thm_name = Thm.name_of_thm thm
0da64b5a9a00 theorem names for caching
paulson
parents: 15919
diff changeset
    23
	val isa_clauses = ResAxioms.cnf_axiom (thm_name,thm) (*"isa_clauses" are already "standard"ed. *)
15919
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    24
        val isa_clauses' = ResAxioms.rm_Eps [] isa_clauses
15956
0da64b5a9a00 theorem names for caching
paulson
parents: 15919
diff changeset
    25
        val clauses_n = length isa_clauses
15919
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    26
	fun make_axiom_clauses _ [] []= []
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    27
	  | make_axiom_clauses i (cls::clss) (cls'::clss')= ((ResClause.make_axiom_clause cls (thm_name,i)),cls') :: make_axiom_clauses (i+1) clss clss'
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    28
    in
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    29
	make_axiom_clauses 0 isa_clauses' isa_clauses		
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    30
    end;
15643
5829f30fc20a *** empty log message ***
quigley
parents:
diff changeset
    31
5829f30fc20a *** empty log message ***
quigley
parents:
diff changeset
    32
15919
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    33
fun clausify_rules_pairs [] err_list = ([],err_list)
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    34
  | clausify_rules_pairs (thm::thms) err_list =
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    35
    let val (ts,es) = clausify_rules_pairs thms err_list
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    36
    in
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    37
	((clausify_axiom_pairs thm)::ts,es) handle  _ => (ts,(thm::es))
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    38
    end;
15643
5829f30fc20a *** empty log message ***
quigley
parents:
diff changeset
    39
15956
0da64b5a9a00 theorem names for caching
paulson
parents: 15919
diff changeset
    40
0da64b5a9a00 theorem names for caching
paulson
parents: 15919
diff changeset
    41
(*Insert th into the result provided the name is not "".*)
0da64b5a9a00 theorem names for caching
paulson
parents: 15919
diff changeset
    42
fun add_nonempty ((name,th), ths) = if name="" then ths else th::ths;
0da64b5a9a00 theorem names for caching
paulson
parents: 15919
diff changeset
    43
0da64b5a9a00 theorem names for caching
paulson
parents: 15919
diff changeset
    44
15919
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    45
fun write_out_clasimp filename = let
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    46
					val claset_rules = ResAxioms.claset_rules_of_thy (the_context());
15956
0da64b5a9a00 theorem names for caching
paulson
parents: 15919
diff changeset
    47
					val named_claset = List.foldr add_nonempty []  claset_rules;
15919
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    48
					val claset_cls_thms = #1( clausify_rules_pairs named_claset []);
15643
5829f30fc20a *** empty log message ***
quigley
parents:
diff changeset
    49
15919
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    50
					val simpset_rules = ResAxioms.simpset_rules_of_thy (the_context());
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    51
					val named_simpset = map #2(List.filter has_name_pair simpset_rules);
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    52
					val simpset_cls_thms = #1 (clausify_rules_pairs named_simpset []);
15643
5829f30fc20a *** empty log message ***
quigley
parents:
diff changeset
    53
15919
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    54
					val cls_thms = (claset_cls_thms@simpset_cls_thms);
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    55
					val cls_thms_list = stick cls_thms;
15643
5829f30fc20a *** empty log message ***
quigley
parents:
diff changeset
    56
15919
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    57
                                        (*********************************************************)
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    58
                                  	(* create array and put clausename, number pairs into it *)
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    59
                                   	(*********************************************************)
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    60
					val num_of_clauses =  0;
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    61
                                     	val clause_arr = Array.fromList cls_thms_list;
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    62
              
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    63
                                   	val  num_of_clauses= (List.length cls_thms_list);
15782
a1863ea9052b Corrected the problem with the ATP directory.
quigley
parents: 15774
diff changeset
    64
15919
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    65
                                        (*************************************************)
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    66
					(* Write out clauses as tptp strings to filename *)
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    67
 					(*************************************************)
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    68
                                        val clauses = map #1(cls_thms_list);
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    69
          				val cls_tptp_strs = map ResClause.tptp_clause clauses;
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    70
                                        (* list of lists of tptp string clauses *)
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    71
                                        val stick_clasrls =   stick cls_tptp_strs;
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    72
    					val out = TextIO.openOut filename;
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    73
                                    	val _=   ResLib.writeln_strs out stick_clasrls;
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    74
                                    	val _= TextIO.flushOut out;
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    75
					val _= TextIO.closeOut out
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    76
                     		  in
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    77
					(clause_arr, num_of_clauses)
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    78
				  end;
15643
5829f30fc20a *** empty log message ***
quigley
parents:
diff changeset
    79
5829f30fc20a *** empty log message ***
quigley
parents:
diff changeset
    80
15919
b30a35432f5a Replaced reference to SPASS with general one - set SPASS_HOME in settings file.
quigley
parents: 15907
diff changeset
    81
end;