src/HOL/Tools/res_atp_setup.ML
author haftmann
Fri, 28 Oct 2005 17:27:49 +0200
changeset 18014 8bedb073e628
parent 18001 6ca14bec7cd5
child 18086 051b7f323b4c
permissions -rw-r--r--
circumvented smlnj value restriction
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17907
c20e4bddcb11 *** empty log message ***
mengj
parents: 17905
diff changeset
     1
(* ID: $Id$ 
c20e4bddcb11 *** empty log message ***
mengj
parents: 17905
diff changeset
     2
   Author: Jia Meng, NICTA
17905
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
     3
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
     4
*)
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
     5
structure ResAtpSetup =
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
     6
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
     7
struct
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
     8
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
     9
val keep_atp_input = ref false;
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    10
val debug = ref true;
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    11
val filter_ax = ref false;
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    12
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    13
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    14
fun warning_thm thm nm = warning (nm ^ " " ^ (string_of_thm thm));
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    15
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    16
fun warning_thms_n n thms nm =
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    17
    let val _ = warning ("total " ^ (string_of_int n) ^ " " ^ nm)
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    18
	fun warning_thms_aux [] = warning ("no more " ^ nm)
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    19
	  | warning_thms_aux (th::ths) = (warning_thm th nm; warning_thms_aux ths)
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    20
    in
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    21
	warning_thms_aux thms
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    22
    end;
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    23
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    24
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    25
(*******************************************************)
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    26
(* set up the output paths                             *)
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    27
(*******************************************************)
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    28
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    29
val claset_file = File.tmp_path (Path.basic "claset");
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    30
val simpset_file = File.tmp_path (Path.basic "simp");
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    31
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    32
val prob_file = File.tmp_path (Path.basic "prob");
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    33
val hyps_file = File.tmp_path (Path.basic "hyps");
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    34
18001
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
    35
val types_sorts_file =  File.tmp_path (Path.basic "typsorts");
17905
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    36
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    37
(*******************************************************)
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    38
(* operations on Isabelle theorems:                    *)
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    39
(* retrieving from ProofContext,                       *)
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    40
(* modifying local theorems,                           *)
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    41
(* CNF                                                 *)
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    42
(*******************************************************)
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    43
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    44
(* a special version of repeat_RS *)
18001
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
    45
fun repeat_someI_ex thm = ResAxioms.repeat_RS thm someI_ex;
17905
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    46
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    47
val include_simpset = ref false;
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    48
val include_claset = ref false; 
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    49
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    50
val add_simpset = (fn () => include_simpset:=true);
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    51
val add_claset = (fn () => include_claset:=true);
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    52
val add_clasimp = (fn () => include_simpset:=true;include_claset:=true);
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    53
val rm_simpset = (fn () => include_simpset:=false);
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    54
val rm_claset = (fn () => include_claset:=false);
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    55
val rm_clasimp = (fn () => include_simpset:=false;include_claset:=false);
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    56
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    57
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    58
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    59
val rules_modifiers =
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    60
  Simplifier.simp_modifiers @ Splitter.split_modifiers @
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    61
  Classical.cla_modifiers @ iff_modifiers;
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    62
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    63
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    64
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    65
fun get_local_claR ctxt = 
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    66
    let val cla_rules = rep_cs (Classical.get_local_claset ctxt) 
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    67
	val safeEs = #safeEs cla_rules
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    68
	val safeIs = #safeIs cla_rules
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    69
	val hazEs = #hazEs cla_rules
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    70
	val hazIs = #hazIs cla_rules
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    71
    in
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    72
	map ResAxioms.pairname (safeEs @ safeIs @ hazEs @ hazIs)
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    73
    end;
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    74
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    75
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    76
fun get_local_simpR ctxt = 
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    77
    let val simpset_rules = #rules(fst (rep_ss (Simplifier.get_local_simpset ctxt)))
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    78
    in
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    79
	map (fn r => (#name r, #thm r)) (Net.entries simpset_rules) end;
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    80
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    81
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    82
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    83
(***************************************************************)
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    84
(* prover-specific output format:                              *)
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    85
(* TPTP                                                        *)
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    86
(***************************************************************)
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    87
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    88
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    89
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    90
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    91
(***************** TPTP format *********************************)
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    92
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
    93
(* convert each (sub)goal clause (Thm.thm) into one or more TPTP clauses.  The additional TPTP clauses are tfree_lits.  Write the output TPTP clauses to a problem file *)
18001
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
    94
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
    95
fun mk_conjectures is_fol terms =
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
    96
    if is_fol then
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
    97
	ListPair.unzip (map ResClause.clause2tptp (ResClause.make_conjecture_clauses terms))
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
    98
    else
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
    99
	ListPair.unzip (map ResHolClause.clause2tptp (ResHolClause.make_conjecture_clauses terms));
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   100
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   101
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   102
fun tptp_form_g is_fol thms n tfrees =
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   103
    let val terms = map prop_of thms
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   104
	val (tptp_clss,tfree_litss) = mk_conjectures is_fol terms
17939
3925ab7b8a18 Merged theory ResAtpOracle.thy into ResAtpMethods.thy
mengj
parents: 17907
diff changeset
   105
	val tfree_clss = map ResClause.tfree_clause ((ResClause.union_all tfree_litss) \\ tfrees)
17905
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   106
	val probfile = File.platform_path prob_file ^ "_" ^ string_of_int n
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   107
	val out = TextIO.openOut(probfile)		 	
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   108
    in
18001
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   109
	ResAtp.writeln_strs out (tfree_clss @ tptp_clss);
17905
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   110
	TextIO.closeOut out;
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   111
	warning probfile; (* show the location for debugging *)
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   112
	probfile (* return the location *)
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   113
	
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   114
    end;
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   115
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   116
18001
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   117
val tptp_form = tptp_form_g true;
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   118
val tptp_formH = tptp_form_g false;
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   119
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   120
fun tptp_hyps_g _ [] = ([], [])
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   121
  | tptp_hyps_g is_fol thms =
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   122
    let val mk_nnf = if is_fol then make_nnf else make_nnf1
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   123
	val prems = map (skolemize o mk_nnf o ObjectLogic.atomize_thm) thms
17905
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   124
        val prems' = map repeat_someI_ex prems
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   125
        val prems'' = make_clauses prems'
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   126
        val prems''' = ResAxioms.rm_Eps [] prems''
18001
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   127
	val (tptp_clss,tfree_litss) = mk_conjectures is_fol prems'''
17939
3925ab7b8a18 Merged theory ResAtpOracle.thy into ResAtpMethods.thy
mengj
parents: 17907
diff changeset
   128
	val tfree_lits = ResClause.union_all tfree_litss
17905
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   129
	val tfree_clss = map ResClause.tfree_clause tfree_lits 
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   130
        val hypsfile = File.platform_path hyps_file
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   131
        val out = TextIO.openOut(hypsfile)
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   132
    in
18001
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   133
        ResAtp.writeln_strs out (tfree_clss @ tptp_clss);
17905
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   134
        TextIO.closeOut out; warning hypsfile;
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   135
        ([hypsfile],tfree_lits)
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   136
    end;
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   137
 
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   138
18001
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   139
val tptp_hyps = tptp_hyps_g true;
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   140
val tptp_hypsH = tptp_hyps_g false;
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   141
17905
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   142
fun subtract_simpset thy ctxt =
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   143
  let
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   144
    val rules1 = #rules (#1 (rep_ss (simpset_of thy)));
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   145
    val rules2 = #rules (#1 (rep_ss (local_simpset_of ctxt)));
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   146
  in map ResAxioms.pairname (map #thm (Net.subtract MetaSimplifier.eq_rrule rules1 rules2)) end;
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   147
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   148
fun subtract_claset thy ctxt =
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   149
  let
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   150
    val (netI1, netE1) = #xtra_netpair (rep_cs (claset_of thy));
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   151
    val (netI2, netE2) = #xtra_netpair (rep_cs (local_claset_of ctxt));
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   152
    val subtract = map (#2 o #2) oo Net.subtract Tactic.eq_kbrl;
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   153
  in map ResAxioms.pairname (subtract netI1 netI2 @ subtract netE1 netE2) end;
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   154
18001
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   155
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   156
fun mk_axioms is_fol rules =
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   157
    if is_fol then 
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   158
	(let val  clss = ResClause.union_all(ResAxioms.clausify_rules_pairs rules)
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   159
	     val (clss',names) = ListPair.unzip clss
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   160
	     val (tptpclss,_) = ListPair.unzip(map ResClause.clause2tptp clss')
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   161
	 in tptpclss end)
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   162
    else
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   163
	(let val  clss = ResClause.union_all(ResAxioms.clausify_rules_pairsH rules)
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   164
	     val (clss',names) = ListPair.unzip clss
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   165
	     val (tptpclss,_) = ListPair.unzip(map ResHolClause.clause2tptp clss')
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   166
	 in tptpclss end)
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   167
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   168
17905
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   169
local
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   170
18001
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   171
fun write_rules_g is_fol [] file = [](* no rules, then no need to write anything, thus no clasimp file *)
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   172
  | write_rules_g is_fol rules file =
17905
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   173
    let val out = TextIO.openOut(file)
18001
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   174
	val tptpclss = mk_axioms is_fol rules
17905
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   175
    in
18001
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   176
	ResAtp.writeln_strs out tptpclss;
17905
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   177
	TextIO.closeOut out; warning file;
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   178
	[file]
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   179
    end;
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   180
18001
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   181
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   182
val write_rules = write_rules_g true;
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   183
val write_rulesH = write_rules_g false;
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   184
17905
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   185
in
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   186
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   187
(* TPTP Isabelle theorems *)
18001
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   188
fun tptp_cnf_rules_g write_rules (clasetR,simpsetR) =
17905
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   189
    let val simpfile = File.platform_path simpset_file
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   190
	val clafile =  File.platform_path claset_file
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   191
    in
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   192
	(write_rules clasetR clafile) @ (write_rules simpsetR simpfile)
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   193
    end;
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   194
18001
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   195
val tptp_cnf_rules = tptp_cnf_rules_g write_rules;
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   196
val tptp_cnf_rulesH = tptp_cnf_rules_g write_rulesH;
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   197
17905
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   198
end
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   199
18001
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   200
fun tptp_cnf_clasimp_g tptp_cnf_rules ctxt (include_claset,include_simpset) =
17905
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   201
    let val local_claR = if include_claset then get_local_claR ctxt else (subtract_claset (ProofContext.theory_of ctxt) ctxt)
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   202
	val local_simpR = if include_simpset then get_local_simpR ctxt else (subtract_simpset (ProofContext.theory_of ctxt) ctxt)
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   203
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   204
    in
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   205
	tptp_cnf_rules (local_claR,local_simpR)
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   206
    end;
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   207
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   208
18001
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   209
val tptp_cnf_clasimp = tptp_cnf_clasimp_g tptp_cnf_rules;
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   210
val tptp_cnf_clasimpH = tptp_cnf_clasimp_g tptp_cnf_rulesH;
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   211
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   212
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   213
fun tptp_types_sorts thy = 
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   214
    let val classrel_clauses = ResClause.classrel_clauses_thy thy
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   215
	val arity_clauses = ResClause.arity_clause_thy thy
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   216
	val classrel_cls = map ResClause.tptp_classrelClause classrel_clauses
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   217
	val arity_cls = map ResClause.tptp_arity_clause arity_clauses
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   218
	fun write_ts () =
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   219
	    let val tsfile = File.platform_path types_sorts_file
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   220
		val out = TextIO.openOut(tsfile)
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   221
	    in
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   222
		ResAtp.writeln_strs out (classrel_cls @ arity_cls);
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   223
		TextIO.closeOut out;
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   224
		[tsfile]
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   225
	    end
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   226
    in
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   227
	if (List.null arity_cls andalso List.null classrel_cls) then []
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   228
	else
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   229
	    write_ts ()
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   230
    end;
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   231
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   232
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   233
17905
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   234
(*FIXME: a function that does not perform any filtering now *)
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   235
fun find_relevant_ax ctxt = tptp_cnf_clasimp ctxt (true,true);
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   236
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   237
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   238
(***************************************************************)
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   239
(* setup ATPs as Isabelle methods                               *)
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   240
(***************************************************************)
18001
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   241
fun atp_meth_g tptp_hyps tptp_cnf_clasimp tac prems ctxt = 
17939
3925ab7b8a18 Merged theory ResAtpOracle.thy into ResAtpMethods.thy
mengj
parents: 17907
diff changeset
   242
    let val rules = if !filter_ax then find_relevant_ax ctxt 
3925ab7b8a18 Merged theory ResAtpOracle.thy into ResAtpMethods.thy
mengj
parents: 17907
diff changeset
   243
		    else tptp_cnf_clasimp ctxt (!include_claset, !include_simpset) 
17905
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   244
	val (hyps,tfrees) = tptp_hyps (ProofContext.prems_of ctxt)
18001
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   245
	val thy = ProofContext.theory_of ctxt
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   246
	val tsfile = tptp_types_sorts thy
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   247
	val files = hyps @ rules @ tsfile
17905
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   248
    in
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   249
	Method.METHOD (fn facts =>
17939
3925ab7b8a18 Merged theory ResAtpOracle.thy into ResAtpMethods.thy
mengj
parents: 17907
diff changeset
   250
			  if !debug then (warning_thms_n (length facts) facts "facts";HEADGOAL (tac ctxt files tfrees)) 
3925ab7b8a18 Merged theory ResAtpOracle.thy into ResAtpMethods.thy
mengj
parents: 17907
diff changeset
   251
			  else HEADGOAL (tac ctxt files tfrees))
17905
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   252
    end;
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   253
18014
8bedb073e628 circumvented smlnj value restriction
haftmann
parents: 18001
diff changeset
   254
fun atp_meth_f tac = atp_meth_g tptp_hyps tptp_cnf_clasimp tac;
17905
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   255
18014
8bedb073e628 circumvented smlnj value restriction
haftmann
parents: 18001
diff changeset
   256
fun atp_meth_h tac = atp_meth_g tptp_hypsH tptp_cnf_clasimpH tac;
18001
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   257
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   258
fun atp_meth_G atp_meth tac prems ctxt =
17905
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   259
    let val _ = ResClause.init (ProofContext.theory_of ctxt)
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   260
    in    
18001
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   261
	if not(List.null prems) then (warning_thms_n (length prems) prems "prems!!!"; atp_meth tac prems ctxt)
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   262
	else (atp_meth tac prems ctxt)
17905
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   263
    end;
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   264
	
18001
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   265
18014
8bedb073e628 circumvented smlnj value restriction
haftmann
parents: 18001
diff changeset
   266
fun atp_meth_H tac = atp_meth_G atp_meth_h tac;
18001
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   267
18014
8bedb073e628 circumvented smlnj value restriction
haftmann
parents: 18001
diff changeset
   268
fun atp_meth_F tac = atp_meth_G atp_meth_f tac;
17905
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   269
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   270
18001
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   271
val atp_method_H = Method.bang_sectioned_args rules_modifiers o atp_meth_H;
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   272
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   273
val atp_method_F = Method.bang_sectioned_args rules_modifiers o atp_meth_F;
6ca14bec7cd5 Added new functions to handle HOL goals and lemmas.
mengj
parents: 17939
diff changeset
   274
17905
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   275
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   276
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   277
(*************Remove tmp files********************************)
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   278
fun rm_tmp_files1 [] = ()
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   279
  | rm_tmp_files1 (f::fs) =
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   280
    (OS.FileSys.remove f; rm_tmp_files1 fs);
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   281
17939
3925ab7b8a18 Merged theory ResAtpOracle.thy into ResAtpMethods.thy
mengj
parents: 17907
diff changeset
   282
fun cond_rm_tmp files = 
3925ab7b8a18 Merged theory ResAtpOracle.thy into ResAtpMethods.thy
mengj
parents: 17907
diff changeset
   283
    if !keep_atp_input then warning "ATP input kept..." 
3925ab7b8a18 Merged theory ResAtpOracle.thy into ResAtpMethods.thy
mengj
parents: 17907
diff changeset
   284
    else (warning "deleting ATP inputs..."; rm_tmp_files1 files);
17905
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   285
1574533861b1 Added files in order to use external ATPs as oracles and invoke these ATPs by calling Isabelle methods (currently "vampire" and "eprover").
mengj
parents:
diff changeset
   286
17907
c20e4bddcb11 *** empty log message ***
mengj
parents: 17905
diff changeset
   287
end