| author | wenzelm | 
| Sun, 30 Aug 2015 11:56:37 +0200 | |
| changeset 61047 | bf05dc1a77c0 | 
| parent 59058 | a78612c67ec0 | 
| child 61549 | 16e2313e855c | 
| permissions | -rw-r--r-- | 
| 38047 | 1 | (* Title: HOL/Tools/ATP/atp_problem.ML | 
| 38027 | 2 | Author: Jia Meng, Cambridge University Computer Laboratory and NICTA | 
| 37509 
f39464d971c4
factor out TPTP format output into file of its own, to facilitate further changes
 blanchet parents: diff
changeset | 3 | Author: Jasmin Blanchette, TU Muenchen | 
| 
f39464d971c4
factor out TPTP format output into file of its own, to facilitate further changes
 blanchet parents: diff
changeset | 4 | |
| 39452 | 5 | Abstract representation of ATP problems and TPTP syntax. | 
| 37509 
f39464d971c4
factor out TPTP format output into file of its own, to facilitate further changes
 blanchet parents: diff
changeset | 6 | *) | 
| 
f39464d971c4
factor out TPTP format output into file of its own, to facilitate further changes
 blanchet parents: diff
changeset | 7 | |
| 38019 
e207a64e1e0b
complete renaming of "Sledgehammer_TPTP_Format" to "ATP_Problem"
 blanchet parents: 
38018diff
changeset | 8 | signature ATP_PROBLEM = | 
| 37509 
f39464d971c4
factor out TPTP format output into file of its own, to facilitate further changes
 blanchet parents: diff
changeset | 9 | sig | 
| 53586 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 10 |   datatype ('a, 'b) atp_term =
 | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 11 |     ATerm of ('a * 'b list) * ('a, 'b) atp_term list |
 | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 12 |     AAbs of (('a * 'b) * ('a, 'b) atp_term) * ('a, 'b) atp_term list
 | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 13 | datatype atp_quantifier = AForall | AExists | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 14 | datatype atp_connective = ANot | AAnd | AOr | AImplies | AIff | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 15 |   datatype ('a, 'b, 'c, 'd) atp_formula =
 | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 16 |     ATyQuant of atp_quantifier * ('b * 'd list) list
 | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 17 |         * ('a, 'b, 'c, 'd) atp_formula |
 | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 18 |     AQuant of atp_quantifier * ('a * 'b option) list
 | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 19 |         * ('a, 'b, 'c, 'd) atp_formula |
 | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 20 |     AConn of atp_connective * ('a, 'b, 'c, 'd) atp_formula list |
 | 
| 42531 
a462dbaa584f
added more rudimentary type support to Sledgehammer's ATP encoding
 blanchet parents: 
42530diff
changeset | 21 | AAtom of 'c | 
| 37994 
b04307085a09
make TPTP generator accept full first-order formulas
 blanchet parents: 
37993diff
changeset | 22 | |
| 53586 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 23 | datatype 'a atp_type = | 
| 54820 | 24 |     AType of ('a * 'a list) * 'a atp_type list |
 | 
| 53586 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 25 | AFun of 'a atp_type * 'a atp_type | | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 26 | APi of 'a list * 'a atp_type | 
| 42963 | 27 | |
| 47038 
2409b484e1cc
continued implementation of term ordering attributes
 blanchet parents: 
47030diff
changeset | 28 | type term_order = | 
| 
2409b484e1cc
continued implementation of term ordering attributes
 blanchet parents: 
47030diff
changeset | 29 |     {is_lpo : bool,
 | 
| 
2409b484e1cc
continued implementation of term ordering attributes
 blanchet parents: 
47030diff
changeset | 30 | gen_weights : bool, | 
| 
2409b484e1cc
continued implementation of term ordering attributes
 blanchet parents: 
47030diff
changeset | 31 | gen_prec : bool, | 
| 
2409b484e1cc
continued implementation of term ordering attributes
 blanchet parents: 
47030diff
changeset | 32 | gen_simp : bool} | 
| 
2409b484e1cc
continued implementation of term ordering attributes
 blanchet parents: 
47030diff
changeset | 33 | |
| 48140 | 34 | datatype polymorphism = Monomorphic | Polymorphic | 
| 48004 
989a34fa72b3
don't generate definitions for LEO-II -- this cuases more harm than good
 blanchet parents: 
47976diff
changeset | 35 | datatype thf_choice = THF_Without_Choice | THF_With_Choice | 
| 45301 
866b075aa99b
added sorted DFG output for coming version of SPASS
 blanchet parents: 
44787diff
changeset | 36 | |
| 
866b075aa99b
added sorted DFG output for coming version of SPASS
 blanchet parents: 
44787diff
changeset | 37 | datatype atp_format = | 
| 44235 
85e9dad3c187
distinguish THF syntax with and without choice (Satallax vs. LEO-II)
 blanchet parents: 
43987diff
changeset | 38 | CNF | | 
| 
85e9dad3c187
distinguish THF syntax with and without choice (Satallax vs. LEO-II)
 blanchet parents: 
43987diff
changeset | 39 | CNF_UEQ | | 
| 
85e9dad3c187
distinguish THF syntax with and without choice (Satallax vs. LEO-II)
 blanchet parents: 
43987diff
changeset | 40 | FOF | | 
| 52995 
ab98feb66684
Vampire 3.0 requires types to be declared -- make it happy (and get rid of "implicit" types since only Satallax seems to support them anymore)
 blanchet parents: 
52353diff
changeset | 41 | TFF of polymorphism | | 
| 54197 
994ebb795b75
use definitions for LEO-II as well -- this simplifies the code and matches some users' expectations
 blanchet parents: 
53586diff
changeset | 42 | THF of polymorphism * thf_choice | | 
| 48131 | 43 | DFG of polymorphism | 
| 44235 
85e9dad3c187
distinguish THF syntax with and without choice (Satallax vs. LEO-II)
 blanchet parents: 
43987diff
changeset | 44 | |
| 53586 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 45 | datatype atp_formula_role = | 
| 50012 
01cb92151a53
track formula roles in proofs and use that to determine whether the conjecture should be negated or not
 blanchet parents: 
48438diff
changeset | 46 | Axiom | Definition | Lemma | Hypothesis | Conjecture | Negated_Conjecture | | 
| 57255 
488046fdda59
add support for Isar reconstruction for thf1 ATP provers like Leo-II.
 fleury parents: 
56847diff
changeset | 47 | Plain | Type_Role | Unknown | 
| 50012 
01cb92151a53
track formula roles in proofs and use that to determine whether the conjecture should be negated or not
 blanchet parents: 
48438diff
changeset | 48 | |
| 53586 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 49 | datatype 'a atp_problem_line = | 
| 48141 | 50 | Class_Decl of string * 'a * 'a list | | 
| 48142 
efaff8206967
finished implementation of DFG type class output
 blanchet parents: 
48141diff
changeset | 51 | Type_Decl of string * 'a * int | | 
| 53586 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 52 | Sym_Decl of string * 'a * 'a atp_type | | 
| 56683 
7f4ae504e059
reintroduced '...' (nonexhaustive) syntax for SPASS-Pirate
 blanchet parents: 
54829diff
changeset | 53 | Datatype_Decl of | 
| 
7f4ae504e059
reintroduced '...' (nonexhaustive) syntax for SPASS-Pirate
 blanchet parents: 
54829diff
changeset | 54 |       string * ('a * 'a list) list * 'a atp_type * ('a, 'a atp_type) atp_term list * bool |
 | 
| 53586 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 55 |     Class_Memb of string * ('a * 'a list) list * 'a atp_type * 'a |
 | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 56 | Formula of (string * string) * atp_formula_role | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 57 |                * ('a, 'a atp_type, ('a, 'a atp_type) atp_term, 'a) atp_formula
 | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 58 | * (string, string atp_type) atp_term option | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 59 | * (string, string atp_type) atp_term list | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 60 | type 'a atp_problem = (string * 'a atp_problem_line list) list | 
| 37992 | 61 | |
| 42968 
74415622d293
more work on parsing LEO-II proofs and extracting uses of extensionality
 blanchet parents: 
42967diff
changeset | 62 | val tptp_cnf : string | 
| 
74415622d293
more work on parsing LEO-II proofs and extracting uses of extensionality
 blanchet parents: 
42967diff
changeset | 63 | val tptp_fof : string | 
| 
74415622d293
more work on parsing LEO-II proofs and extracting uses of extensionality
 blanchet parents: 
42967diff
changeset | 64 | val tptp_tff : string | 
| 
74415622d293
more work on parsing LEO-II proofs and extracting uses of extensionality
 blanchet parents: 
42967diff
changeset | 65 | val tptp_thf : string | 
| 42967 | 66 | val tptp_has_type : string | 
| 42962 
3b50fdeb6cfc
started adding support for THF output (but no lambdas)
 blanchet parents: 
42961diff
changeset | 67 | val tptp_type_of_types : string | 
| 
3b50fdeb6cfc
started adding support for THF output (but no lambdas)
 blanchet parents: 
42961diff
changeset | 68 | val tptp_bool_type : string | 
| 
3b50fdeb6cfc
started adding support for THF output (but no lambdas)
 blanchet parents: 
42961diff
changeset | 69 | val tptp_individual_type : string | 
| 42963 | 70 | val tptp_fun_type : string | 
| 42998 
1c80902d0456
fully support all type system encodings in typed formats (TFF, THF)
 blanchet parents: 
42994diff
changeset | 71 | val tptp_product_type : string | 
| 42968 
74415622d293
more work on parsing LEO-II proofs and extracting uses of extensionality
 blanchet parents: 
42967diff
changeset | 72 | val tptp_forall : string | 
| 43678 | 73 | val tptp_ho_forall : string | 
| 44650 | 74 | val tptp_pi_binder : string | 
| 42968 
74415622d293
more work on parsing LEO-II proofs and extracting uses of extensionality
 blanchet parents: 
42967diff
changeset | 75 | val tptp_exists : string | 
| 43678 | 76 | val tptp_ho_exists : string | 
| 44495 | 77 | val tptp_choice : string | 
| 57255 
488046fdda59
add support for Isar reconstruction for thf1 ATP provers like Leo-II.
 fleury parents: 
56847diff
changeset | 78 | val tptp_ho_choice : string | 
| 57709 | 79 | val tptp_hilbert_choice : string | 
| 80 | val tptp_hilbert_the : string | |
| 42968 
74415622d293
more work on parsing LEO-II proofs and extracting uses of extensionality
 blanchet parents: 
42967diff
changeset | 81 | val tptp_not : string | 
| 
74415622d293
more work on parsing LEO-II proofs and extracting uses of extensionality
 blanchet parents: 
42967diff
changeset | 82 | val tptp_and : string | 
| 57255 
488046fdda59
add support for Isar reconstruction for thf1 ATP provers like Leo-II.
 fleury parents: 
56847diff
changeset | 83 | val tptp_not_and : string | 
| 42968 
74415622d293
more work on parsing LEO-II proofs and extracting uses of extensionality
 blanchet parents: 
42967diff
changeset | 84 | val tptp_or : string | 
| 57255 
488046fdda59
add support for Isar reconstruction for thf1 ATP provers like Leo-II.
 fleury parents: 
56847diff
changeset | 85 | val tptp_not_or : string | 
| 42968 
74415622d293
more work on parsing LEO-II proofs and extracting uses of extensionality
 blanchet parents: 
42967diff
changeset | 86 | val tptp_implies : string | 
| 
74415622d293
more work on parsing LEO-II proofs and extracting uses of extensionality
 blanchet parents: 
42967diff
changeset | 87 | val tptp_if : string | 
| 
74415622d293
more work on parsing LEO-II proofs and extracting uses of extensionality
 blanchet parents: 
42967diff
changeset | 88 | val tptp_iff : string | 
| 
74415622d293
more work on parsing LEO-II proofs and extracting uses of extensionality
 blanchet parents: 
42967diff
changeset | 89 | val tptp_not_iff : string | 
| 
74415622d293
more work on parsing LEO-II proofs and extracting uses of extensionality
 blanchet parents: 
42967diff
changeset | 90 | val tptp_app : string | 
| 
74415622d293
more work on parsing LEO-II proofs and extracting uses of extensionality
 blanchet parents: 
42967diff
changeset | 91 | val tptp_not_infix : string | 
| 
74415622d293
more work on parsing LEO-II proofs and extracting uses of extensionality
 blanchet parents: 
42967diff
changeset | 92 | val tptp_equal : string | 
| 57255 
488046fdda59
add support for Isar reconstruction for thf1 ATP provers like Leo-II.
 fleury parents: 
56847diff
changeset | 93 | val tptp_not_equal : string | 
| 43000 
bd424c3dde46
cleaner handling of equality and proxies (esp. for THF)
 blanchet parents: 
42998diff
changeset | 94 | val tptp_old_equal : string | 
| 42966 
4e2d6c1e5392
more work on parsing LEO-II proofs without lambdas
 blanchet parents: 
42963diff
changeset | 95 | val tptp_false : string | 
| 
4e2d6c1e5392
more work on parsing LEO-II proofs without lambdas
 blanchet parents: 
42963diff
changeset | 96 | val tptp_true : string | 
| 57255 
488046fdda59
add support for Isar reconstruction for thf1 ATP provers like Leo-II.
 fleury parents: 
56847diff
changeset | 97 | val tptp_lambda : string | 
| 43000 
bd424c3dde46
cleaner handling of equality and proxies (esp. for THF)
 blanchet parents: 
42998diff
changeset | 98 | val tptp_empty_list : string | 
| 58600 | 99 | val dfg_individual_type : string | 
| 46406 | 100 | val isabelle_info_prefix : string | 
| 53586 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 101 | val isabelle_info : string -> int -> (string, 'a) atp_term list | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 102 | val extract_isabelle_status : (string, 'a) atp_term list -> string option | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 103 | val extract_isabelle_rank : (string, 'a) atp_term list -> int | 
| 48438 
3e45c98fe127
distinguish between recursive and nonrecursive definitions + clean up typedef dependencies in MaSh
 blanchet parents: 
48143diff
changeset | 104 | val inductionN : string | 
| 46406 | 105 | val introN : string | 
| 47148 
7b5846065c1b
be less forceful about ":lt" to make infinite loops less likely (could still fail with mutually recursive tail rec functions)
 blanchet parents: 
47146diff
changeset | 106 | val inductiveN : string | 
| 46406 | 107 | val elimN : string | 
| 108 | val simpN : string | |
| 48438 
3e45c98fe127
distinguish between recursive and nonrecursive definitions + clean up typedef dependencies in MaSh
 blanchet parents: 
48143diff
changeset | 109 | val non_rec_defN : string | 
| 
3e45c98fe127
distinguish between recursive and nonrecursive definitions + clean up typedef dependencies in MaSh
 blanchet parents: 
48143diff
changeset | 110 | val rec_defN : string | 
| 46406 | 111 | val rankN : string | 
| 112 | val minimum_rank : int | |
| 113 | val default_rank : int | |
| 47030 | 114 | val default_term_order_weight : int | 
| 43000 
bd424c3dde46
cleaner handling of equality and proxies (esp. for THF)
 blanchet parents: 
42998diff
changeset | 115 | val is_tptp_equal : string -> bool | 
| 42998 
1c80902d0456
fully support all type system encodings in typed formats (TFF, THF)
 blanchet parents: 
42994diff
changeset | 116 | val is_built_in_tptp_symbol : string -> bool | 
| 
1c80902d0456
fully support all type system encodings in typed formats (TFF, THF)
 blanchet parents: 
42994diff
changeset | 117 | val is_tptp_variable : string -> bool | 
| 
1c80902d0456
fully support all type system encodings in typed formats (TFF, THF)
 blanchet parents: 
42994diff
changeset | 118 | val is_tptp_user_symbol : string -> bool | 
| 53586 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 119 | val bool_atype : (string * string) atp_type | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 120 | val individual_atype : (string * string) atp_type | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 121 |   val mk_anot : ('a, 'b, 'c, 'd) atp_formula -> ('a, 'b, 'c, 'd) atp_formula
 | 
| 42942 | 122 | val mk_aconn : | 
| 53586 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 123 |     atp_connective -> ('a, 'b, 'c, 'd) atp_formula
 | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 124 |     -> ('a, 'b, 'c, 'd) atp_formula -> ('a, 'b, 'c, 'd) atp_formula
 | 
| 57255 
488046fdda59
add support for Isar reconstruction for thf1 ATP provers like Leo-II.
 fleury parents: 
56847diff
changeset | 125 | val mk_app : (string, 'a) atp_term -> (string, 'a) atp_term -> (string, 'a) atp_term | 
| 
488046fdda59
add support for Isar reconstruction for thf1 ATP provers like Leo-II.
 fleury parents: 
56847diff
changeset | 126 | val mk_apps : (string, 'a) atp_term -> (string, 'a) atp_term list -> (string, 'a) atp_term | 
| 
488046fdda59
add support for Isar reconstruction for thf1 ATP provers like Leo-II.
 fleury parents: 
56847diff
changeset | 127 |   val mk_simple_aterm:  'a -> ('a, 'b) atp_term
 | 
| 42998 
1c80902d0456
fully support all type system encodings in typed formats (TFF, THF)
 blanchet parents: 
42994diff
changeset | 128 | val aconn_fold : | 
| 53586 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 129 | bool option -> (bool option -> 'a -> 'b -> 'b) -> atp_connective * 'a list | 
| 42998 
1c80902d0456
fully support all type system encodings in typed formats (TFF, THF)
 blanchet parents: 
42994diff
changeset | 130 | -> 'b -> 'b | 
| 
1c80902d0456
fully support all type system encodings in typed formats (TFF, THF)
 blanchet parents: 
42994diff
changeset | 131 | val aconn_map : | 
| 53586 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 132 |     bool option -> (bool option -> 'a -> ('b, 'c, 'd, 'e) atp_formula)
 | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 133 |     -> atp_connective * 'a list -> ('b, 'c, 'd, 'e) atp_formula
 | 
| 42998 
1c80902d0456
fully support all type system encodings in typed formats (TFF, THF)
 blanchet parents: 
42994diff
changeset | 134 | val formula_fold : | 
| 53586 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 135 | bool option -> (bool option -> 'c -> 'e -> 'e) | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 136 |     -> ('a, 'b, 'c, 'd) atp_formula -> 'e -> 'e
 | 
| 48135 | 137 | val formula_map : | 
| 53586 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 138 |     ('c -> 'e) -> ('a, 'b, 'c, 'd) atp_formula -> ('a, 'b, 'e, 'd) atp_formula
 | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 139 |   val strip_atype : 'a atp_type -> 'a list * ('a atp_type list * 'a atp_type)
 | 
| 45303 
bd03b08161ac
added DFG unsorted support (like in the old days)
 blanchet parents: 
45301diff
changeset | 140 | val is_format_higher_order : atp_format -> bool | 
| 53586 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 141 | val tptp_string_of_line : atp_format -> string atp_problem_line -> string | 
| 51998 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 142 | val lines_of_atp_problem : | 
| 53586 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 143 | atp_format -> term_order -> (unit -> (string * int) list) | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 144 | -> string atp_problem -> string list | 
| 43092 
93ec303e1917
more work on new metis that exploits the powerful new type encodings
 blanchet parents: 
43085diff
changeset | 145 | val ensure_cnf_problem : | 
| 53586 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 146 | (string * string) atp_problem -> (string * string) atp_problem | 
| 42939 | 147 | val filter_cnf_ueq_problem : | 
| 53586 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 148 | (string * string) atp_problem -> (string * string) atp_problem | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 149 |   val declared_in_atp_problem : 'a atp_problem -> ('a list * 'a list) * 'a list
 | 
| 39452 | 150 | val nice_atp_problem : | 
| 53586 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 151 |     bool -> atp_format -> ('a * (string * string) atp_problem_line list) list
 | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 152 |     -> ('a * string atp_problem_line list) list
 | 
| 38017 
3ad3e3ca2451
move Sledgehammer-specific code out of "Sledgehammer_TPTP_Format"
 blanchet parents: 
38014diff
changeset | 153 | * (string Symtab.table * string Symtab.table) option | 
| 37509 
f39464d971c4
factor out TPTP format output into file of its own, to facilitate further changes
 blanchet parents: diff
changeset | 154 | end; | 
| 
f39464d971c4
factor out TPTP format output into file of its own, to facilitate further changes
 blanchet parents: diff
changeset | 155 | |
| 38019 
e207a64e1e0b
complete renaming of "Sledgehammer_TPTP_Format" to "ATP_Problem"
 blanchet parents: 
38018diff
changeset | 156 | structure ATP_Problem : ATP_PROBLEM = | 
| 37509 
f39464d971c4
factor out TPTP format output into file of its own, to facilitate further changes
 blanchet parents: diff
changeset | 157 | struct | 
| 
f39464d971c4
factor out TPTP format output into file of its own, to facilitate further changes
 blanchet parents: diff
changeset | 158 | |
| 43085 
0a2f5b86bdd7
first step in sharing more code between ATP and Metis translation
 blanchet parents: 
43000diff
changeset | 159 | open ATP_Util | 
| 
0a2f5b86bdd7
first step in sharing more code between ATP and Metis translation
 blanchet parents: 
43000diff
changeset | 160 | |
| 52075 
f363f54a1936
generate agsyHOL-friendly THF (to some extent -- partial application of connectives remains an issue)
 blanchet parents: 
52074diff
changeset | 161 | val parens = enclose "(" ")"
 | 
| 
f363f54a1936
generate agsyHOL-friendly THF (to some extent -- partial application of connectives remains an issue)
 blanchet parents: 
52074diff
changeset | 162 | |
| 37643 
f576af716aa6
rewrote the TPTP problem generation code more or less from scratch;
 blanchet parents: 
37642diff
changeset | 163 | (** ATP problem **) | 
| 
f576af716aa6
rewrote the TPTP problem generation code more or less from scratch;
 blanchet parents: 
37642diff
changeset | 164 | |
| 53586 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 165 | datatype ('a, 'b) atp_term =
 | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 166 |   ATerm of ('a * 'b list) * ('a, 'b) atp_term list |
 | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 167 |   AAbs of (('a * 'b) * ('a, 'b) atp_term) * ('a, 'b) atp_term list
 | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 168 | datatype atp_quantifier = AForall | AExists | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 169 | datatype atp_connective = ANot | AAnd | AOr | AImplies | AIff | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 170 | datatype ('a, 'b, 'c, 'd) atp_formula =
 | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 171 |   ATyQuant of atp_quantifier * ('b * 'd list) list
 | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 172 |       * ('a, 'b, 'c, 'd) atp_formula |
 | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 173 |   AQuant of atp_quantifier * ('a * 'b option) list
 | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 174 |       * ('a, 'b, 'c, 'd) atp_formula |
 | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 175 |   AConn of atp_connective * ('a, 'b, 'c, 'd) atp_formula list |
 | 
| 42531 
a462dbaa584f
added more rudimentary type support to Sledgehammer's ATP encoding
 blanchet parents: 
42530diff
changeset | 176 | AAtom of 'c | 
| 37961 
6a48c85a211a
first step in using "fof" rather than "cnf" in TPTP problems
 blanchet parents: 
37931diff
changeset | 177 | |
| 53586 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 178 | datatype 'a atp_type = | 
| 54820 | 179 |   AType of ('a * 'a list) * 'a atp_type list |
 | 
| 53586 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 180 | AFun of 'a atp_type * 'a atp_type | | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 181 | APi of 'a list * 'a atp_type | 
| 42963 | 182 | |
| 47038 
2409b484e1cc
continued implementation of term ordering attributes
 blanchet parents: 
47030diff
changeset | 183 | type term_order = | 
| 
2409b484e1cc
continued implementation of term ordering attributes
 blanchet parents: 
47030diff
changeset | 184 |   {is_lpo : bool,
 | 
| 
2409b484e1cc
continued implementation of term ordering attributes
 blanchet parents: 
47030diff
changeset | 185 | gen_weights : bool, | 
| 
2409b484e1cc
continued implementation of term ordering attributes
 blanchet parents: 
47030diff
changeset | 186 | gen_prec : bool, | 
| 
2409b484e1cc
continued implementation of term ordering attributes
 blanchet parents: 
47030diff
changeset | 187 | gen_simp : bool} | 
| 
2409b484e1cc
continued implementation of term ordering attributes
 blanchet parents: 
47030diff
changeset | 188 | |
| 48140 | 189 | datatype polymorphism = Monomorphic | Polymorphic | 
| 48004 
989a34fa72b3
don't generate definitions for LEO-II -- this cuases more harm than good
 blanchet parents: 
47976diff
changeset | 190 | datatype thf_choice = THF_Without_Choice | THF_With_Choice | 
| 44499 | 191 | |
| 45301 
866b075aa99b
added sorted DFG output for coming version of SPASS
 blanchet parents: 
44787diff
changeset | 192 | datatype atp_format = | 
| 44235 
85e9dad3c187
distinguish THF syntax with and without choice (Satallax vs. LEO-II)
 blanchet parents: 
43987diff
changeset | 193 | CNF | | 
| 
85e9dad3c187
distinguish THF syntax with and without choice (Satallax vs. LEO-II)
 blanchet parents: 
43987diff
changeset | 194 | CNF_UEQ | | 
| 
85e9dad3c187
distinguish THF syntax with and without choice (Satallax vs. LEO-II)
 blanchet parents: 
43987diff
changeset | 195 | FOF | | 
| 52995 
ab98feb66684
Vampire 3.0 requires types to be declared -- make it happy (and get rid of "implicit" types since only Satallax seems to support them anymore)
 blanchet parents: 
52353diff
changeset | 196 | TFF of polymorphism | | 
| 54197 
994ebb795b75
use definitions for LEO-II as well -- this simplifies the code and matches some users' expectations
 blanchet parents: 
53586diff
changeset | 197 | THF of polymorphism * thf_choice | | 
| 48131 | 198 | DFG of polymorphism | 
| 44235 
85e9dad3c187
distinguish THF syntax with and without choice (Satallax vs. LEO-II)
 blanchet parents: 
43987diff
changeset | 199 | |
| 53586 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 200 | datatype atp_formula_role = | 
| 50012 
01cb92151a53
track formula roles in proofs and use that to determine whether the conjecture should be negated or not
 blanchet parents: 
48438diff
changeset | 201 | Axiom | Definition | Lemma | Hypothesis | Conjecture | Negated_Conjecture | | 
| 57255 
488046fdda59
add support for Isar reconstruction for thf1 ATP provers like Leo-II.
 fleury parents: 
56847diff
changeset | 202 | Plain | Type_Role | Unknown | 
| 50012 
01cb92151a53
track formula roles in proofs and use that to determine whether the conjecture should be negated or not
 blanchet parents: 
48438diff
changeset | 203 | |
| 53586 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 204 | datatype 'a atp_problem_line = | 
| 48141 | 205 | Class_Decl of string * 'a * 'a list | | 
| 48142 
efaff8206967
finished implementation of DFG type class output
 blanchet parents: 
48141diff
changeset | 206 | Type_Decl of string * 'a * int | | 
| 53586 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 207 | Sym_Decl of string * 'a * 'a atp_type | | 
| 56683 
7f4ae504e059
reintroduced '...' (nonexhaustive) syntax for SPASS-Pirate
 blanchet parents: 
54829diff
changeset | 208 | Datatype_Decl of | 
| 
7f4ae504e059
reintroduced '...' (nonexhaustive) syntax for SPASS-Pirate
 blanchet parents: 
54829diff
changeset | 209 |     string * ('a * 'a list) list * 'a atp_type * ('a, 'a atp_type) atp_term list * bool |
 | 
| 53586 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 210 |   Class_Memb of string * ('a * 'a list) list * 'a atp_type * 'a |
 | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 211 | Formula of (string * string) * atp_formula_role | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 212 |              * ('a, 'a atp_type, ('a, 'a atp_type) atp_term, 'a) atp_formula
 | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 213 | * (string, string atp_type) atp_term option | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 214 | * (string, string atp_type) atp_term list | 
| 
bd5fa6425993
prefixed types and some functions with "atp_" for disambiguation
 blanchet parents: 
52995diff
changeset | 215 | type 'a atp_problem = (string * 'a atp_problem_line list) list | 
| 37643 
f576af716aa6
rewrote the TPTP problem generation code more or less from scratch;
 blanchet parents: 
37642diff
changeset | 216 | |
| 42722 | 217 | (* official TPTP syntax *) | 
| 42968 
74415622d293
more work on parsing LEO-II proofs and extracting uses of extensionality
 blanchet parents: 
42967diff
changeset | 218 | val tptp_cnf = "cnf" | 
| 
74415622d293
more work on parsing LEO-II proofs and extracting uses of extensionality
 blanchet parents: 
42967diff
changeset | 219 | val tptp_fof = "fof" | 
| 
74415622d293
more work on parsing LEO-II proofs and extracting uses of extensionality
 blanchet parents: 
42967diff
changeset | 220 | val tptp_tff = "tff" | 
| 
74415622d293
more work on parsing LEO-II proofs and extracting uses of extensionality
 blanchet parents: 
42967diff
changeset | 221 | val tptp_thf = "thf" | 
| 42967 | 222 | val tptp_has_type = ":" | 
| 42962 
3b50fdeb6cfc
started adding support for THF output (but no lambdas)
 blanchet parents: 
42961diff
changeset | 223 | val tptp_type_of_types = "$tType" | 
| 
3b50fdeb6cfc
started adding support for THF output (but no lambdas)
 blanchet parents: 
42961diff
changeset | 224 | val tptp_bool_type = "$o" | 
| 
3b50fdeb6cfc
started adding support for THF output (but no lambdas)
 blanchet parents: 
42961diff
changeset | 225 | val tptp_individual_type = "$i" | 
| 42963 | 226 | val tptp_fun_type = ">" | 
| 42998 
1c80902d0456
fully support all type system encodings in typed formats (TFF, THF)
 blanchet parents: 
42994diff
changeset | 227 | val tptp_product_type = "*" | 
| 42968 
74415622d293
more work on parsing LEO-II proofs and extracting uses of extensionality
 blanchet parents: 
42967diff
changeset | 228 | val tptp_forall = "!" | 
| 43678 | 229 | val tptp_ho_forall = "!!" | 
| 44650 | 230 | val tptp_pi_binder = "!>" | 
| 42968 
74415622d293
more work on parsing LEO-II proofs and extracting uses of extensionality
 blanchet parents: 
42967diff
changeset | 231 | val tptp_exists = "?" | 
| 43678 | 232 | val tptp_ho_exists = "??" | 
| 44495 | 233 | val tptp_choice = "@+" | 
| 57255 
488046fdda59
add support for Isar reconstruction for thf1 ATP provers like Leo-II.
 fleury parents: 
56847diff
changeset | 234 | val tptp_ho_choice = "@@+" | 
| 42968 
74415622d293
more work on parsing LEO-II proofs and extracting uses of extensionality
 blanchet parents: 
42967diff
changeset | 235 | val tptp_not = "~" | 
| 
74415622d293
more work on parsing LEO-II proofs and extracting uses of extensionality
 blanchet parents: 
42967diff
changeset | 236 | val tptp_and = "&" | 
| 57255 
488046fdda59
add support for Isar reconstruction for thf1 ATP provers like Leo-II.
 fleury parents: 
56847diff
changeset | 237 | val tptp_not_and = "~&" | 
| 42968 
74415622d293
more work on parsing LEO-II proofs and extracting uses of extensionality
 blanchet parents: 
42967diff
changeset | 238 | val tptp_or = "|" | 
| 57255 
488046fdda59
add support for Isar reconstruction for thf1 ATP provers like Leo-II.
 fleury parents: 
56847diff
changeset | 239 | val tptp_not_or = "~|" | 
| 42968 
74415622d293
more work on parsing LEO-II proofs and extracting uses of extensionality
 blanchet parents: 
42967diff
changeset | 240 | val tptp_implies = "=>" | 
| 
74415622d293
more work on parsing LEO-II proofs and extracting uses of extensionality
 blanchet parents: 
42967diff
changeset | 241 | val tptp_if = "<=" | 
| 
74415622d293
more work on parsing LEO-II proofs and extracting uses of extensionality
 blanchet parents: 
42967diff
changeset | 242 | val tptp_iff = "<=>" | 
| 
74415622d293
more work on parsing LEO-II proofs and extracting uses of extensionality
 blanchet parents: 
42967diff
changeset | 243 | val tptp_not_iff = "<~>" | 
| 
74415622d293
more work on parsing LEO-II proofs and extracting uses of extensionality
 blanchet parents: 
42967diff
changeset | 244 | val tptp_app = "@" | 
| 57709 | 245 | val tptp_hilbert_choice = "@+" | 
| 246 | val tptp_hilbert_the = "@-" | |
| 42968 
74415622d293
more work on parsing LEO-II proofs and extracting uses of extensionality
 blanchet parents: 
42967diff
changeset | 247 | val tptp_not_infix = "!" | 
| 
74415622d293
more work on parsing LEO-II proofs and extracting uses of extensionality
 blanchet parents: 
42967diff
changeset | 248 | val tptp_equal = "=" | 
| 57255 
488046fdda59
add support for Isar reconstruction for thf1 ATP provers like Leo-II.
 fleury parents: 
56847diff
changeset | 249 | val tptp_not_equal = "!=" | 
| 43000 
bd424c3dde46
cleaner handling of equality and proxies (esp. for THF)
 blanchet parents: 
42998diff
changeset | 250 | val tptp_old_equal = "equal" | 
| 42966 
4e2d6c1e5392
more work on parsing LEO-II proofs without lambdas
 blanchet parents: 
42963diff
changeset | 251 | val tptp_false = "$false" | 
| 
4e2d6c1e5392
more work on parsing LEO-II proofs without lambdas
 blanchet parents: 
42963diff
changeset | 252 | val tptp_true = "$true" | 
| 57255 
488046fdda59
add support for Isar reconstruction for thf1 ATP provers like Leo-II.
 fleury parents: 
56847diff
changeset | 253 | val tptp_lambda = "^" | 
| 43000 
bd424c3dde46
cleaner handling of equality and proxies (esp. for THF)
 blanchet parents: 
42998diff
changeset | 254 | val tptp_empty_list = "[]" | 
| 58600 | 255 | |
| 256 | val dfg_individual_type = "iii" (* cannot clash *) | |
| 257 | ||
| 46406 | 258 | val isabelle_info_prefix = "isabelle_" | 
| 259 | ||
| 48438 
3e45c98fe127
distinguish between recursive and nonrecursive definitions + clean up typedef dependencies in MaSh
 blanchet parents: 
48143diff
changeset | 260 | val inductionN = "induction" | 
| 46406 | 261 | val introN = "intro" | 
| 47148 
7b5846065c1b
be less forceful about ":lt" to make infinite loops less likely (could still fail with mutually recursive tail rec functions)
 blanchet parents: 
47146diff
changeset | 262 | val inductiveN = "inductive" | 
| 46406 | 263 | val elimN = "elim" | 
| 264 | val simpN = "simp" | |
| 48438 
3e45c98fe127
distinguish between recursive and nonrecursive definitions + clean up typedef dependencies in MaSh
 blanchet parents: 
48143diff
changeset | 265 | val non_rec_defN = "non_rec_def" | 
| 
3e45c98fe127
distinguish between recursive and nonrecursive definitions + clean up typedef dependencies in MaSh
 blanchet parents: 
48143diff
changeset | 266 | val rec_defN = "rec_def" | 
| 
3e45c98fe127
distinguish between recursive and nonrecursive definitions + clean up typedef dependencies in MaSh
 blanchet parents: 
48143diff
changeset | 267 | |
| 46406 | 268 | val rankN = "rank" | 
| 269 | ||
| 270 | val minimum_rank = 0 | |
| 271 | val default_rank = 1000 | |
| 47030 | 272 | val default_term_order_weight = 1 | 
| 46406 | 273 | |
| 48129 
933d43c31689
removed support for unsorted DFG, now that SPASS 3.7 is no longer supported
 blanchet parents: 
48004diff
changeset | 274 | (* Currently, only SPASS 3.8ds can process Isabelle metainformation. *) | 
| 47038 
2409b484e1cc
continued implementation of term ordering attributes
 blanchet parents: 
47030diff
changeset | 275 | fun isabelle_info status rank = | 
| 
2409b484e1cc
continued implementation of term ordering attributes
 blanchet parents: 
47030diff
changeset | 276 | [] |> rank <> default_rank | 
| 48132 
9aa0fad4e864
added type arguments to "ATerm" constructor -- but don't use them yet
 blanchet parents: 
48131diff
changeset | 277 | ? cons (ATerm ((isabelle_info_prefix ^ rankN, []), | 
| 
9aa0fad4e864
added type arguments to "ATerm" constructor -- but don't use them yet
 blanchet parents: 
48131diff
changeset | 278 | [ATerm ((string_of_int rank, []), [])])) | 
| 
9aa0fad4e864
added type arguments to "ATerm" constructor -- but don't use them yet
 blanchet parents: 
48131diff
changeset | 279 | |> status <> "" ? cons (ATerm ((isabelle_info_prefix ^ status, []), [])) | 
| 46406 | 280 | |
| 48132 
9aa0fad4e864
added type arguments to "ATerm" constructor -- but don't use them yet
 blanchet parents: 
48131diff
changeset | 281 | fun extract_isabelle_status (ATerm ((s, []), []) :: _) = | 
| 46406 | 282 | try (unprefix isabelle_info_prefix) s | 
| 283 | | extract_isabelle_status _ = NONE | |
| 284 | ||
| 285 | fun extract_isabelle_rank (tms as _ :: _) = | |
| 286 | (case List.last tms of | |
| 48132 
9aa0fad4e864
added type arguments to "ATerm" constructor -- but don't use them yet
 blanchet parents: 
48131diff
changeset | 287 | ATerm ((_, []), [ATerm ((rank, []), [])]) => the (Int.fromString rank) | 
| 46406 | 288 | | _ => default_rank) | 
| 289 | | extract_isabelle_rank _ = default_rank | |
| 290 | ||
| 43000 
bd424c3dde46
cleaner handling of equality and proxies (esp. for THF)
 blanchet parents: 
42998diff
changeset | 291 | fun is_tptp_equal s = (s = tptp_equal orelse s = tptp_old_equal) | 
| 
bd424c3dde46
cleaner handling of equality and proxies (esp. for THF)
 blanchet parents: 
42998diff
changeset | 292 | fun is_built_in_tptp_symbol s = | 
| 
bd424c3dde46
cleaner handling of equality and proxies (esp. for THF)
 blanchet parents: 
42998diff
changeset | 293 | s = tptp_old_equal orelse not (Char.isAlpha (String.sub (s, 0))) | 
| 51878 | 294 | fun is_tptp_variable s = s <> "" andalso Char.isUpper (String.sub (s, 0)) | 
| 42998 
1c80902d0456
fully support all type system encodings in typed formats (TFF, THF)
 blanchet parents: 
42994diff
changeset | 295 | val is_tptp_user_symbol = not o (is_tptp_variable orf is_built_in_tptp_symbol) | 
| 42939 | 296 | |
| 54820 | 297 | val bool_atype = AType ((`I tptp_bool_type, []), []) | 
| 298 | val individual_atype = AType ((`I tptp_individual_type, []), []) | |
| 45301 
866b075aa99b
added sorted DFG output for coming version of SPASS
 blanchet parents: 
44787diff
changeset | 299 | |
| 43098 
e88e974c4846
proper handling of type variable classes in new Metis
 blanchet parents: 
43092diff
changeset | 300 | fun raw_polarities_of_conn ANot = (SOME false, NONE) | 
| 
e88e974c4846
proper handling of type variable classes in new Metis
 blanchet parents: 
43092diff
changeset | 301 | | raw_polarities_of_conn AAnd = (SOME true, SOME true) | 
| 
e88e974c4846
proper handling of type variable classes in new Metis
 blanchet parents: 
43092diff
changeset | 302 | | raw_polarities_of_conn AOr = (SOME true, SOME true) | 
| 
e88e974c4846
proper handling of type variable classes in new Metis
 blanchet parents: 
43092diff
changeset | 303 | | raw_polarities_of_conn AImplies = (SOME false, SOME true) | 
| 
e88e974c4846
proper handling of type variable classes in new Metis
 blanchet parents: 
43092diff
changeset | 304 | | raw_polarities_of_conn AIff = (NONE, NONE) | 
| 
e88e974c4846
proper handling of type variable classes in new Metis
 blanchet parents: 
43092diff
changeset | 305 | fun polarities_of_conn NONE = K (NONE, NONE) | 
| 
e88e974c4846
proper handling of type variable classes in new Metis
 blanchet parents: 
43092diff
changeset | 306 | | polarities_of_conn (SOME pos) = | 
| 59058 
a78612c67ec0
renamed "pairself" to "apply2", in accordance to @{apply 2};
 wenzelm parents: 
58600diff
changeset | 307 | raw_polarities_of_conn #> not pos ? apply2 (Option.map not) | 
| 43098 
e88e974c4846
proper handling of type variable classes in new Metis
 blanchet parents: 
43092diff
changeset | 308 | |
| 42942 | 309 | fun mk_anot (AConn (ANot, [phi])) = phi | 
| 310 | | mk_anot phi = AConn (ANot, [phi]) | |
| 311 | fun mk_aconn c phi1 phi2 = AConn (c, [phi1, phi2]) | |
| 312 | ||
| 57255 
488046fdda59
add support for Isar reconstruction for thf1 ATP provers like Leo-II.
 fleury parents: 
56847diff
changeset | 313 | fun mk_app t u = ATerm ((tptp_app, []), [t, u]) | 
| 
488046fdda59
add support for Isar reconstruction for thf1 ATP provers like Leo-II.
 fleury parents: 
56847diff
changeset | 314 | fun mk_apps f xs = fold (fn x => fn f => mk_app f x) xs f | 
| 
488046fdda59
add support for Isar reconstruction for thf1 ATP provers like Leo-II.
 fleury parents: 
56847diff
changeset | 315 | |
| 
488046fdda59
add support for Isar reconstruction for thf1 ATP provers like Leo-II.
 fleury parents: 
56847diff
changeset | 316 | fun mk_simple_aterm p = ATerm ((p, []), []) | 
| 
488046fdda59
add support for Isar reconstruction for thf1 ATP provers like Leo-II.
 fleury parents: 
56847diff
changeset | 317 | |
| 42998 
1c80902d0456
fully support all type system encodings in typed formats (TFF, THF)
 blanchet parents: 
42994diff
changeset | 318 | fun aconn_fold pos f (ANot, [phi]) = f (Option.map not pos) phi | 
| 
1c80902d0456
fully support all type system encodings in typed formats (TFF, THF)
 blanchet parents: 
42994diff
changeset | 319 | | aconn_fold pos f (AImplies, [phi1, phi2]) = | 
| 
1c80902d0456
fully support all type system encodings in typed formats (TFF, THF)
 blanchet parents: 
42994diff
changeset | 320 | f (Option.map not pos) phi1 #> f pos phi2 | 
| 
1c80902d0456
fully support all type system encodings in typed formats (TFF, THF)
 blanchet parents: 
42994diff
changeset | 321 | | aconn_fold pos f (AAnd, phis) = fold (f pos) phis | 
| 
1c80902d0456
fully support all type system encodings in typed formats (TFF, THF)
 blanchet parents: 
42994diff
changeset | 322 | | aconn_fold pos f (AOr, phis) = fold (f pos) phis | 
| 
1c80902d0456
fully support all type system encodings in typed formats (TFF, THF)
 blanchet parents: 
42994diff
changeset | 323 | | aconn_fold _ f (_, phis) = fold (f NONE) phis | 
| 
1c80902d0456
fully support all type system encodings in typed formats (TFF, THF)
 blanchet parents: 
42994diff
changeset | 324 | |
| 
1c80902d0456
fully support all type system encodings in typed formats (TFF, THF)
 blanchet parents: 
42994diff
changeset | 325 | fun aconn_map pos f (ANot, [phi]) = AConn (ANot, [f (Option.map not pos) phi]) | 
| 
1c80902d0456
fully support all type system encodings in typed formats (TFF, THF)
 blanchet parents: 
42994diff
changeset | 326 | | aconn_map pos f (AImplies, [phi1, phi2]) = | 
| 
1c80902d0456
fully support all type system encodings in typed formats (TFF, THF)
 blanchet parents: 
42994diff
changeset | 327 | AConn (AImplies, [f (Option.map not pos) phi1, f pos phi2]) | 
| 
1c80902d0456
fully support all type system encodings in typed formats (TFF, THF)
 blanchet parents: 
42994diff
changeset | 328 | | aconn_map pos f (AAnd, phis) = AConn (AAnd, map (f pos) phis) | 
| 
1c80902d0456
fully support all type system encodings in typed formats (TFF, THF)
 blanchet parents: 
42994diff
changeset | 329 | | aconn_map pos f (AOr, phis) = AConn (AOr, map (f pos) phis) | 
| 
1c80902d0456
fully support all type system encodings in typed formats (TFF, THF)
 blanchet parents: 
42994diff
changeset | 330 | | aconn_map _ f (c, phis) = AConn (c, map (f NONE) phis) | 
| 
1c80902d0456
fully support all type system encodings in typed formats (TFF, THF)
 blanchet parents: 
42994diff
changeset | 331 | |
| 
1c80902d0456
fully support all type system encodings in typed formats (TFF, THF)
 blanchet parents: 
42994diff
changeset | 332 | fun formula_fold pos f = | 
| 
1c80902d0456
fully support all type system encodings in typed formats (TFF, THF)
 blanchet parents: 
42994diff
changeset | 333 | let | 
| 44501 | 334 | fun fld pos (AQuant (_, _, phi)) = fld pos phi | 
| 48133 
a5ab5964065f
implement polymorphic DFG output, without type classes for now
 blanchet parents: 
48132diff
changeset | 335 | | fld pos (ATyQuant (_, _, phi)) = fld pos phi | 
| 44501 | 336 | | fld pos (AConn conn) = aconn_fold pos fld conn | 
| 337 | | fld pos (AAtom tm) = f pos tm | |
| 338 | in fld pos end | |
| 42998 
1c80902d0456
fully support all type system encodings in typed formats (TFF, THF)
 blanchet parents: 
42994diff
changeset | 339 | |
| 42944 
9e620869a576
improved Waldmeister support -- even run it by default on unit equational goals
 blanchet parents: 
42942diff
changeset | 340 | fun formula_map f (AQuant (q, xs, phi)) = AQuant (q, xs, formula_map f phi) | 
| 48133 
a5ab5964065f
implement polymorphic DFG output, without type classes for now
 blanchet parents: 
48132diff
changeset | 341 | | formula_map f (ATyQuant (q, xs, phi)) = ATyQuant (q, xs, formula_map f phi) | 
| 42944 
9e620869a576
improved Waldmeister support -- even run it by default on unit equational goals
 blanchet parents: 
42942diff
changeset | 342 | | formula_map f (AConn (c, phis)) = AConn (c, map (formula_map f) phis) | 
| 
9e620869a576
improved Waldmeister support -- even run it by default on unit equational goals
 blanchet parents: 
42942diff
changeset | 343 | | formula_map f (AAtom tm) = AAtom (f tm) | 
| 
9e620869a576
improved Waldmeister support -- even run it by default on unit equational goals
 blanchet parents: 
42942diff
changeset | 344 | |
| 52025 | 345 | fun strip_api (APi (tys, ty)) = strip_api ty |>> append tys | 
| 346 | | strip_api ty = ([], ty) | |
| 48137 
6f524f2066e3
cleanly distinguish between type declarations and symbol declarations
 blanchet parents: 
48135diff
changeset | 347 | |
| 52025 | 348 | fun strip_afun (AFun (ty1, ty2)) = strip_afun ty2 |>> cons ty1 | 
| 349 | | strip_afun ty = ([], ty) | |
| 350 | ||
| 351 | fun strip_atype ty = ty |> strip_api ||> strip_afun | |
| 352 | ||
| 54820 | 353 | fun is_function_atype ty = snd (snd (strip_atype ty)) <> AType ((tptp_bool_type, []), []) | 
| 48137 
6f524f2066e3
cleanly distinguish between type declarations and symbol declarations
 blanchet parents: 
48135diff
changeset | 354 | fun is_predicate_atype ty = not (is_function_atype ty) | 
| 
6f524f2066e3
cleanly distinguish between type declarations and symbol declarations
 blanchet parents: 
48135diff
changeset | 355 | fun is_nontrivial_predicate_atype (AType _) = false | 
| 
6f524f2066e3
cleanly distinguish between type declarations and symbol declarations
 blanchet parents: 
48135diff
changeset | 356 | | is_nontrivial_predicate_atype ty = is_predicate_atype ty | 
| 46442 
1e07620d724c
added possibility of generating KBO weights to DFG problems
 blanchet parents: 
46414diff
changeset | 357 | |
| 45303 
bd03b08161ac
added DFG unsorted support (like in the old days)
 blanchet parents: 
45301diff
changeset | 358 | fun is_format_higher_order (THF _) = true | 
| 
bd03b08161ac
added DFG unsorted support (like in the old days)
 blanchet parents: 
45301diff
changeset | 359 | | is_format_higher_order _ = false | 
| 44499 | 360 | fun is_format_typed (TFF _) = true | 
| 44754 | 361 | | is_format_typed (THF _) = true | 
| 48131 | 362 | | is_format_typed (DFG _) = true | 
| 44235 
85e9dad3c187
distinguish THF syntax with and without choice (Satallax vs. LEO-II)
 blanchet parents: 
43987diff
changeset | 363 | | is_format_typed _ = false | 
| 42998 
1c80902d0456
fully support all type system encodings in typed formats (TFF, THF)
 blanchet parents: 
42994diff
changeset | 364 | |
| 51998 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 365 | fun tptp_string_of_role Axiom = "axiom" | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 366 | | tptp_string_of_role Definition = "definition" | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 367 | | tptp_string_of_role Lemma = "lemma" | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 368 | | tptp_string_of_role Hypothesis = "hypothesis" | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 369 | | tptp_string_of_role Conjecture = "conjecture" | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 370 | | tptp_string_of_role Negated_Conjecture = "negated_conjecture" | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 371 | | tptp_string_of_role Plain = "plain" | 
| 57255 
488046fdda59
add support for Isar reconstruction for thf1 ATP provers like Leo-II.
 fleury parents: 
56847diff
changeset | 372 | | tptp_string_of_role Type_Role = "type" | 
| 51998 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 373 | | tptp_string_of_role Unknown = "unknown" | 
| 38631 
979a0b37f981
prefer TPTP "conjecture" tag to "hypothesis" on ATPs where this is possible;
 blanchet parents: 
38613diff
changeset | 374 | |
| 51998 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 375 | fun tptp_string_of_app _ func [] = func | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 376 | | tptp_string_of_app format func args = | 
| 48133 
a5ab5964065f
implement polymorphic DFG output, without type classes for now
 blanchet parents: 
48132diff
changeset | 377 | if is_format_higher_order format then | 
| 
a5ab5964065f
implement polymorphic DFG output, without type classes for now
 blanchet parents: 
48132diff
changeset | 378 |       "(" ^ space_implode (" " ^ tptp_app ^ " ") (func :: args) ^ ")"
 | 
| 
a5ab5964065f
implement polymorphic DFG output, without type classes for now
 blanchet parents: 
48132diff
changeset | 379 | else | 
| 
a5ab5964065f
implement polymorphic DFG output, without type classes for now
 blanchet parents: 
48132diff
changeset | 380 |       func ^ "(" ^ commas args ^ ")"
 | 
| 44787 | 381 | |
| 52025 | 382 | fun uncurry_type (APi (tys, ty)) = APi (tys, uncurry_type ty) | 
| 383 | | uncurry_type (ty as AFun (ty1 as AType _, ty2)) = | |
| 384 | (case uncurry_type ty2 of | |
| 54820 | 385 | AFun (ty' as AType ((s, _), tys), ty) => | 
| 386 | AFun (AType ((tptp_product_type, []), | |
| 387 | ty1 :: (if s = tptp_product_type then tys else [ty'])), ty) | |
| 44594 
ae82943481e9
added type abstractions (for declaring polymorphic constants) to TFF syntax
 blanchet parents: 
44593diff
changeset | 388 | | _ => ty) | 
| 52025 | 389 | | uncurry_type (ty as AType _) = ty | 
| 390 | | uncurry_type _ = | |
| 42963 | 391 | raise Fail "unexpected higher-order type in first-order format" | 
| 392 | ||
| 57267 
8b87114357bd
integrated new Waldmeister code with 'sledgehammer' command
 blanchet parents: 
57256diff
changeset | 393 | val suffix_type_of_types = suffix (" " ^ tptp_has_type ^ " " ^ tptp_type_of_types)
 | 
| 48133 
a5ab5964065f
implement polymorphic DFG output, without type classes for now
 blanchet parents: 
48132diff
changeset | 394 | |
| 51998 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 395 | fun str_of_type format ty = | 
| 44593 
ccf40af26ae9
implement more of the polymorphic simply typed format TFF(1)
 blanchet parents: 
44589diff
changeset | 396 | let | 
| 54829 | 397 | val dfg = (case format of DFG _ => true | _ => false) | 
| 54820 | 398 | fun str _ (AType ((s, _), [])) = | 
| 46338 
b02ff6b17599
better handling of individual type for DFG format (SPASS)
 blanchet parents: 
46320diff
changeset | 399 | if dfg andalso s = tptp_individual_type then dfg_individual_type else s | 
| 54820 | 400 | | str _ (AType ((s, _), tys)) = | 
| 44787 | 401 | let val ss = tys |> map (str false) in | 
| 402 | if s = tptp_product_type then | |
| 45301 
866b075aa99b
added sorted DFG output for coming version of SPASS
 blanchet parents: 
44787diff
changeset | 403 | ss |> space_implode | 
| 
866b075aa99b
added sorted DFG output for coming version of SPASS
 blanchet parents: 
44787diff
changeset | 404 | (if dfg then ", " else " " ^ tptp_product_type ^ " ") | 
| 52075 
f363f54a1936
generate agsyHOL-friendly THF (to some extent -- partial application of connectives remains an issue)
 blanchet parents: 
52074diff
changeset | 405 | |> (not dfg andalso length ss > 1) ? parens | 
| 44787 | 406 | else | 
| 51998 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 407 | tptp_string_of_app format s ss | 
| 44787 | 408 | end | 
| 44593 
ccf40af26ae9
implement more of the polymorphic simply typed format TFF(1)
 blanchet parents: 
44589diff
changeset | 409 | | str rhs (AFun (ty1, ty2)) = | 
| 52075 
f363f54a1936
generate agsyHOL-friendly THF (to some extent -- partial application of connectives remains an issue)
 blanchet parents: 
52074diff
changeset | 410 | (str false ty1 |> dfg ? parens) ^ " " ^ | 
| 45301 
866b075aa99b
added sorted DFG output for coming version of SPASS
 blanchet parents: 
44787diff
changeset | 411 | (if dfg then "" else tptp_fun_type ^ " ") ^ str true ty2 | 
| 52075 
f363f54a1936
generate agsyHOL-friendly THF (to some extent -- partial application of connectives remains an issue)
 blanchet parents: 
52074diff
changeset | 412 | |> not rhs ? parens | 
| 48133 
a5ab5964065f
implement polymorphic DFG output, without type classes for now
 blanchet parents: 
48132diff
changeset | 413 | | str _ (APi (ss, ty)) = | 
| 
a5ab5964065f
implement polymorphic DFG output, without type classes for now
 blanchet parents: 
48132diff
changeset | 414 | if dfg then | 
| 
a5ab5964065f
implement polymorphic DFG output, without type classes for now
 blanchet parents: 
48132diff
changeset | 415 | "[" ^ commas ss ^ "], " ^ str true ty | 
| 
a5ab5964065f
implement polymorphic DFG output, without type classes for now
 blanchet parents: 
48132diff
changeset | 416 | else | 
| 
a5ab5964065f
implement polymorphic DFG output, without type classes for now
 blanchet parents: 
48132diff
changeset | 417 | tptp_pi_binder ^ "[" ^ commas (map suffix_type_of_types ss) ^ "]: " ^ | 
| 
a5ab5964065f
implement polymorphic DFG output, without type classes for now
 blanchet parents: 
48132diff
changeset | 418 | str false ty | 
| 44593 
ccf40af26ae9
implement more of the polymorphic simply typed format TFF(1)
 blanchet parents: 
44589diff
changeset | 419 | in str true ty end | 
| 
ccf40af26ae9
implement more of the polymorphic simply typed format TFF(1)
 blanchet parents: 
44589diff
changeset | 420 | |
| 51998 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 421 | fun string_of_type (format as THF _) ty = str_of_type format ty | 
| 52025 | 422 | | string_of_type format ty = str_of_type format (uncurry_type ty) | 
| 42963 | 423 | |
| 51998 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 424 | fun tptp_string_of_quantifier AForall = tptp_forall | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 425 | | tptp_string_of_quantifier AExists = tptp_exists | 
| 42963 | 426 | |
| 51998 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 427 | fun tptp_string_of_connective ANot = tptp_not | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 428 | | tptp_string_of_connective AAnd = tptp_and | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 429 | | tptp_string_of_connective AOr = tptp_or | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 430 | | tptp_string_of_connective AImplies = tptp_implies | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 431 | | tptp_string_of_connective AIff = tptp_iff | 
| 42963 | 432 | |
| 51998 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 433 | fun string_of_bound_var format (s, ty) = | 
| 44593 
ccf40af26ae9
implement more of the polymorphic simply typed format TFF(1)
 blanchet parents: 
44589diff
changeset | 434 | s ^ | 
| 
ccf40af26ae9
implement more of the polymorphic simply typed format TFF(1)
 blanchet parents: 
44589diff
changeset | 435 | (if is_format_typed format then | 
| 
ccf40af26ae9
implement more of the polymorphic simply typed format TFF(1)
 blanchet parents: 
44589diff
changeset | 436 | " " ^ tptp_has_type ^ " " ^ | 
| 54820 | 437 | (ty |> the_default (AType ((tptp_individual_type, []), [])) |> string_of_type format) | 
| 44593 
ccf40af26ae9
implement more of the polymorphic simply typed format TFF(1)
 blanchet parents: 
44589diff
changeset | 438 | else | 
| 
ccf40af26ae9
implement more of the polymorphic simply typed format TFF(1)
 blanchet parents: 
44589diff
changeset | 439 | "") | 
| 42963 | 440 | |
| 51998 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 441 | fun tptp_string_of_term _ (ATerm ((s, []), [])) = s | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 442 | | tptp_string_of_term format (ATerm ((s, tys), ts)) = | 
| 52074 | 443 | let | 
| 52075 
f363f54a1936
generate agsyHOL-friendly THF (to some extent -- partial application of connectives remains an issue)
 blanchet parents: 
52074diff
changeset | 444 | val of_type = string_of_type format | 
| 
f363f54a1936
generate agsyHOL-friendly THF (to some extent -- partial application of connectives remains an issue)
 blanchet parents: 
52074diff
changeset | 445 | val of_term = tptp_string_of_term format | 
| 57300 | 446 | fun app () = | 
| 447 | tptp_string_of_app format s | |
| 448 | (map (of_type #> is_format_higher_order format ? parens) tys @ map of_term ts) | |
| 52074 | 449 | in | 
| 450 | if s = tptp_empty_list then | |
| 451 | (* used for lists in the optional "source" field of a derivation *) | |
| 52075 
f363f54a1936
generate agsyHOL-friendly THF (to some extent -- partial application of connectives remains an issue)
 blanchet parents: 
52074diff
changeset | 452 | "[" ^ commas (map of_term ts) ^ "]" | 
| 52074 | 453 | else if is_tptp_equal s then | 
| 52075 
f363f54a1936
generate agsyHOL-friendly THF (to some extent -- partial application of connectives remains an issue)
 blanchet parents: 
52074diff
changeset | 454 |         space_implode (" " ^ tptp_equal ^ " ") (map of_term ts)
 | 
| 
f363f54a1936
generate agsyHOL-friendly THF (to some extent -- partial application of connectives remains an issue)
 blanchet parents: 
52074diff
changeset | 455 | |> is_format_higher_order format ? parens | 
| 52074 | 456 | else if s = tptp_ho_forall orelse s = tptp_ho_exists then | 
| 54829 | 457 | (case ts of | 
| 52074 | 458 | [AAbs (((s', ty), tm), [])] => | 
| 459 | (* Use syntactic sugar "!" and "?" instead of "!!" and "??" whenever | |
| 460 | possible, to work around LEO-II 1.2.8 parser limitation. *) | |
| 461 | tptp_string_of_formula format | |
| 462 | (AQuant (if s = tptp_ho_forall then AForall else AExists, | |
| 463 | [(s', SOME ty)], AAtom tm)) | |
| 54829 | 464 | | _ => app ()) | 
| 52074 | 465 | else if s = tptp_choice then | 
| 54829 | 466 | (case ts of | 
| 52074 | 467 | [AAbs (((s', ty), tm), args)] => | 
| 468 | (* There is code in "ATP_Problem_Generate" to ensure that "Eps" is | |
| 469 | always applied to an abstraction. *) | |
| 470 | tptp_string_of_app format | |
| 52075 
f363f54a1936
generate agsyHOL-friendly THF (to some extent -- partial application of connectives remains an issue)
 blanchet parents: 
52074diff
changeset | 471 | (tptp_choice ^ "[" ^ s' ^ " : " ^ of_type ty ^ | 
| 
f363f54a1936
generate agsyHOL-friendly THF (to some extent -- partial application of connectives remains an issue)
 blanchet parents: 
52074diff
changeset | 472 | "]: " ^ of_term tm ^ "" | 
| 
f363f54a1936
generate agsyHOL-friendly THF (to some extent -- partial application of connectives remains an issue)
 blanchet parents: 
52074diff
changeset | 473 | |> parens) (map of_term args) | 
| 54829 | 474 | | _ => app ()) | 
| 52075 
f363f54a1936
generate agsyHOL-friendly THF (to some extent -- partial application of connectives remains an issue)
 blanchet parents: 
52074diff
changeset | 475 | else if s = tptp_not then | 
| 
f363f54a1936
generate agsyHOL-friendly THF (to some extent -- partial application of connectives remains an issue)
 blanchet parents: 
52074diff
changeset | 476 | (* agsyHOL doesn't like negations applied like this: "~ @ t". *) | 
| 54829 | 477 | (case ts of [t] => s ^ " " ^ (of_term t |> parens) |> parens | _ => s) | 
| 52075 
f363f54a1936
generate agsyHOL-friendly THF (to some extent -- partial application of connectives remains an issue)
 blanchet parents: 
52074diff
changeset | 478 | else if member (op =) [tptp_and, tptp_or, tptp_implies, tptp_if, tptp_iff, | 
| 
f363f54a1936
generate agsyHOL-friendly THF (to some extent -- partial application of connectives remains an issue)
 blanchet parents: 
52074diff
changeset | 479 | tptp_not_iff, tptp_equal] s then | 
| 
f363f54a1936
generate agsyHOL-friendly THF (to some extent -- partial application of connectives remains an issue)
 blanchet parents: 
52074diff
changeset | 480 | (* agsyHOL doesn't like connectives applied like this: "& @ t1 @ t2". *) | 
| 54829 | 481 | (case ts of | 
| 482 | [t1, t2] => (of_term t1 |> parens) ^ " " ^ s ^ " " ^ (of_term t2 |> parens) |> parens | |
| 483 | | _ => app ()) | |
| 52074 | 484 | else | 
| 485 | app () | |
| 486 | end | |
| 51998 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 487 | | tptp_string_of_term (format as THF _) (AAbs (((s, ty), tm), args)) = | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 488 | tptp_string_of_app format | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 489 |         ("(^[" ^ s ^ " : " ^ string_of_type format ty ^ "]: " ^
 | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 490 | tptp_string_of_term format tm ^ ")") | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 491 | (map (tptp_string_of_term format) args) | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 492 | | tptp_string_of_term _ _ = | 
| 45301 
866b075aa99b
added sorted DFG output for coming version of SPASS
 blanchet parents: 
44787diff
changeset | 493 | raise Fail "unexpected term in first-order format" | 
| 51998 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 494 | and tptp_string_of_formula format (ATyQuant (q, xs, phi)) = | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 495 | tptp_string_of_quantifier q ^ | 
| 48135 | 496 | "[" ^ | 
| 51998 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 497 | commas (map (suffix_type_of_types o string_of_type format o fst) xs) ^ | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 498 | "]: " ^ tptp_string_of_formula format phi | 
| 52075 
f363f54a1936
generate agsyHOL-friendly THF (to some extent -- partial application of connectives remains an issue)
 blanchet parents: 
52074diff
changeset | 499 | |> parens | 
| 51998 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 500 | | tptp_string_of_formula format (AQuant (q, xs, phi)) = | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 501 | tptp_string_of_quantifier q ^ | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 502 | "[" ^ commas (map (string_of_bound_var format) xs) ^ "]: " ^ | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 503 | tptp_string_of_formula format phi | 
| 52075 
f363f54a1936
generate agsyHOL-friendly THF (to some extent -- partial application of connectives remains an issue)
 blanchet parents: 
52074diff
changeset | 504 | |> parens | 
| 51998 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 505 | | tptp_string_of_formula format | 
| 48132 
9aa0fad4e864
added type arguments to "ATerm" constructor -- but don't use them yet
 blanchet parents: 
48131diff
changeset | 506 |         (AConn (ANot, [AAtom (ATerm (("=" (* tptp_equal *), []), ts))])) =
 | 
| 42968 
74415622d293
more work on parsing LEO-II proofs and extracting uses of extensionality
 blanchet parents: 
42967diff
changeset | 507 |     space_implode (" " ^ tptp_not_infix ^ tptp_equal ^ " ")
 | 
| 51998 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 508 | (map (tptp_string_of_term format) ts) | 
| 52075 
f363f54a1936
generate agsyHOL-friendly THF (to some extent -- partial application of connectives remains an issue)
 blanchet parents: 
52074diff
changeset | 509 | |> is_format_higher_order format ? parens | 
| 51998 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 510 | | tptp_string_of_formula format (AConn (c, [phi])) = | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 511 | tptp_string_of_connective c ^ " " ^ | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 512 | (tptp_string_of_formula format phi | 
| 52075 
f363f54a1936
generate agsyHOL-friendly THF (to some extent -- partial application of connectives remains an issue)
 blanchet parents: 
52074diff
changeset | 513 | |> is_format_higher_order format ? parens) | 
| 
f363f54a1936
generate agsyHOL-friendly THF (to some extent -- partial application of connectives remains an issue)
 blanchet parents: 
52074diff
changeset | 514 | |> parens | 
| 51998 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 515 | | tptp_string_of_formula format (AConn (c, phis)) = | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 516 |     space_implode (" " ^ tptp_string_of_connective c ^ " ")
 | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 517 | (map (tptp_string_of_formula format) phis) | 
| 52075 
f363f54a1936
generate agsyHOL-friendly THF (to some extent -- partial application of connectives remains an issue)
 blanchet parents: 
52074diff
changeset | 518 | |> parens | 
| 51998 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 519 | | tptp_string_of_formula format (AAtom tm) = tptp_string_of_term format tm | 
| 37961 
6a48c85a211a
first step in using "fof" rather than "cnf" in TPTP problems
 blanchet parents: 
37931diff
changeset | 520 | |
| 51998 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 521 | fun tptp_string_of_format CNF = tptp_cnf | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 522 | | tptp_string_of_format CNF_UEQ = tptp_cnf | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 523 | | tptp_string_of_format FOF = tptp_fof | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 524 | | tptp_string_of_format (TFF _) = tptp_tff | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 525 | | tptp_string_of_format (THF _) = tptp_thf | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 526 | | tptp_string_of_format (DFG _) = raise Fail "non-TPTP format" | 
| 42962 
3b50fdeb6cfc
started adding support for THF output (but no lambdas)
 blanchet parents: 
42961diff
changeset | 527 | |
| 54820 | 528 | val atype_of_types = AType ((tptp_type_of_types, []), []) | 
| 48137 
6f524f2066e3
cleanly distinguish between type declarations and symbol declarations
 blanchet parents: 
48135diff
changeset | 529 | |
| 48141 | 530 | fun nary_type_decl_type n = funpow n (curry AFun atype_of_types) atype_of_types | 
| 48137 
6f524f2066e3
cleanly distinguish between type declarations and symbol declarations
 blanchet parents: 
48135diff
changeset | 531 | |
| 50522 
19dbd7554076
generate original name as a comment in SPASS problems as well
 blanchet parents: 
50521diff
changeset | 532 | fun maybe_alt "" = "" | 
| 
19dbd7554076
generate original name as a comment in SPASS problems as well
 blanchet parents: 
50521diff
changeset | 533 | | maybe_alt s = " % " ^ s | 
| 50521 
bec828f3364e
generate comments with original names for debugging
 blanchet parents: 
50012diff
changeset | 534 | |
| 51998 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 535 | fun tptp_string_of_line format (Type_Decl (ident, ty, ary)) = | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 536 | tptp_string_of_line format (Sym_Decl (ident, ty, nary_type_decl_type ary)) | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 537 | | tptp_string_of_line format (Sym_Decl (ident, sym, ty)) = | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 538 |     tptp_string_of_format format ^ "(" ^ ident ^ ", type,\n    " ^ sym ^
 | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 539 | " : " ^ string_of_type format ty ^ ").\n" | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 540 | | tptp_string_of_line format (Formula ((ident, alt), kind, phi, source, _)) = | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 541 |     tptp_string_of_format format ^ "(" ^ ident ^ ", " ^
 | 
| 57811 
faab5feffb42
put comments between TPTP lines to comply with TPTP BNF
 blanchet parents: 
57709diff
changeset | 542 |     tptp_string_of_role kind ^ "," ^ "\n    (" ^
 | 
| 
faab5feffb42
put comments between TPTP lines to comply with TPTP BNF
 blanchet parents: 
57709diff
changeset | 543 | tptp_string_of_formula format phi ^ ")" ^ | 
| 47038 
2409b484e1cc
continued implementation of term ordering attributes
 blanchet parents: 
47030diff
changeset | 544 | (case source of | 
| 57811 
faab5feffb42
put comments between TPTP lines to comply with TPTP BNF
 blanchet parents: 
57709diff
changeset | 545 | SOME tm => ", " ^ tptp_string_of_term format tm | 
| 
faab5feffb42
put comments between TPTP lines to comply with TPTP BNF
 blanchet parents: 
57709diff
changeset | 546 | | NONE => "") ^ | 
| 
faab5feffb42
put comments between TPTP lines to comply with TPTP BNF
 blanchet parents: 
57709diff
changeset | 547 | ")." ^ maybe_alt alt ^ "\n" | 
| 45301 
866b075aa99b
added sorted DFG output for coming version of SPASS
 blanchet parents: 
44787diff
changeset | 548 | |
| 
866b075aa99b
added sorted DFG output for coming version of SPASS
 blanchet parents: 
44787diff
changeset | 549 | fun tptp_lines format = | 
| 37643 
f576af716aa6
rewrote the TPTP problem generation code more or less from scratch;
 blanchet parents: 
37642diff
changeset | 550 | maps (fn (_, []) => [] | 
| 
f576af716aa6
rewrote the TPTP problem generation code more or less from scratch;
 blanchet parents: 
37642diff
changeset | 551 | | (heading, lines) => | 
| 41491 | 552 |            "\n% " ^ heading ^ " (" ^ string_of_int (length lines) ^ ")\n" ::
 | 
| 51998 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 553 | map (tptp_string_of_line format) lines) | 
| 45301 
866b075aa99b
added sorted DFG output for coming version of SPASS
 blanchet parents: 
44787diff
changeset | 554 | |
| 48133 
a5ab5964065f
implement polymorphic DFG output, without type classes for now
 blanchet parents: 
48132diff
changeset | 555 | fun arity_of_type (APi (tys, ty)) = | 
| 
a5ab5964065f
implement polymorphic DFG output, without type classes for now
 blanchet parents: 
48132diff
changeset | 556 | arity_of_type ty |>> Integer.add (length tys) | 
| 
a5ab5964065f
implement polymorphic DFG output, without type classes for now
 blanchet parents: 
48132diff
changeset | 557 | | arity_of_type (AFun (_, ty)) = arity_of_type ty ||> Integer.add 1 | 
| 
a5ab5964065f
implement polymorphic DFG output, without type classes for now
 blanchet parents: 
48132diff
changeset | 558 | | arity_of_type _ = (0, 0) | 
| 45301 
866b075aa99b
added sorted DFG output for coming version of SPASS
 blanchet parents: 
44787diff
changeset | 559 | |
| 48133 
a5ab5964065f
implement polymorphic DFG output, without type classes for now
 blanchet parents: 
48132diff
changeset | 560 | fun string_of_arity (0, n) = string_of_int n | 
| 
a5ab5964065f
implement polymorphic DFG output, without type classes for now
 blanchet parents: 
48132diff
changeset | 561 | | string_of_arity (m, n) = string_of_int m ^ "+" ^ string_of_int n | 
| 
a5ab5964065f
implement polymorphic DFG output, without type classes for now
 blanchet parents: 
48132diff
changeset | 562 | |
| 48143 | 563 | val dfg_class_inter = space_implode " & " | 
| 564 | ||
| 51998 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 565 | fun dfg_string_of_term (ATerm ((s, tys), tms)) = | 
| 51997 
8dbe623a7804
added datatype declaration syntax for next-gen SPASS
 blanchet parents: 
51878diff
changeset | 566 | s ^ | 
| 
8dbe623a7804
added datatype declaration syntax for next-gen SPASS
 blanchet parents: 
51878diff
changeset | 567 | (if null tys then "" | 
| 51998 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 568 | else "<" ^ commas (map (string_of_type (DFG Polymorphic)) tys) ^ ">") ^ | 
| 51997 
8dbe623a7804
added datatype declaration syntax for next-gen SPASS
 blanchet parents: 
51878diff
changeset | 569 | (if null tms then "" | 
| 51998 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 570 |      else "(" ^ commas (map dfg_string_of_term tms) ^ ")")
 | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 571 | | dfg_string_of_term _ = raise Fail "unexpected atom in first-order format" | 
| 51997 
8dbe623a7804
added datatype declaration syntax for next-gen SPASS
 blanchet parents: 
51878diff
changeset | 572 | |
| 51998 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 573 | fun dfg_string_of_formula poly gen_simp info = | 
| 45301 
866b075aa99b
added sorted DFG output for coming version of SPASS
 blanchet parents: 
44787diff
changeset | 574 | let | 
| 51998 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 575 | val str_of_typ = string_of_type (DFG poly) | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 576 | fun str_of_bound_typ (ty, []) = str_of_typ ty | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 577 | | str_of_bound_typ (ty, cls) = str_of_typ ty ^ " : " ^ dfg_class_inter cls | 
| 46379 
de5dd84717c1
distinguish between ":lr" and ":lt" (terminating) in DFG format
 blanchet parents: 
46378diff
changeset | 578 | fun suffix_tag top_level s = | 
| 48129 
933d43c31689
removed support for unsorted DFG, now that SPASS 3.7 is no longer supported
 blanchet parents: 
48004diff
changeset | 579 | if top_level then | 
| 54829 | 580 | (case extract_isabelle_status info of | 
| 48438 
3e45c98fe127
distinguish between recursive and nonrecursive definitions + clean up typedef dependencies in MaSh
 blanchet parents: 
48143diff
changeset | 581 | SOME s' => | 
| 54829 | 582 | if s' = non_rec_defN then s ^ ":lt" | 
| 583 | else if (s' = simpN orelse s' = rec_defN) andalso gen_simp then s ^ ":lr" | |
| 584 | else s | |
| 585 | | NONE => s) | |
| 46379 
de5dd84717c1
distinguish between ":lr" and ":lt" (terminating) in DFG format
 blanchet parents: 
46378diff
changeset | 586 | else | 
| 
de5dd84717c1
distinguish between ":lr" and ":lt" (terminating) in DFG format
 blanchet parents: 
46378diff
changeset | 587 | s | 
| 51998 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 588 | fun str_of_atom top_level (ATerm ((s, tys), tms)) = | 
| 51997 
8dbe623a7804
added datatype declaration syntax for next-gen SPASS
 blanchet parents: 
51878diff
changeset | 589 | let | 
| 
8dbe623a7804
added datatype declaration syntax for next-gen SPASS
 blanchet parents: 
51878diff
changeset | 590 | val s' = | 
| 
8dbe623a7804
added datatype declaration syntax for next-gen SPASS
 blanchet parents: 
51878diff
changeset | 591 | if is_tptp_equal s then "equal" |> suffix_tag top_level | 
| 
8dbe623a7804
added datatype declaration syntax for next-gen SPASS
 blanchet parents: 
51878diff
changeset | 592 | else if s = tptp_true then "true" | 
| 
8dbe623a7804
added datatype declaration syntax for next-gen SPASS
 blanchet parents: 
51878diff
changeset | 593 | else if s = tptp_false then "false" | 
| 
8dbe623a7804
added datatype declaration syntax for next-gen SPASS
 blanchet parents: 
51878diff
changeset | 594 | else s | 
| 51998 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 595 | in dfg_string_of_term (ATerm ((s', tys), tms)) end | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 596 | | str_of_atom _ _ = raise Fail "unexpected atom in first-order format" | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 597 | fun str_of_quant AForall = "forall" | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 598 | | str_of_quant AExists = "exists" | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 599 | fun str_of_conn _ ANot = "not" | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 600 | | str_of_conn _ AAnd = "and" | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 601 | | str_of_conn _ AOr = "or" | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 602 | | str_of_conn _ AImplies = "implies" | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 603 | | str_of_conn top_level AIff = "equiv" |> suffix_tag top_level | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 604 | fun str_of_formula top_level (ATyQuant (q, xs, phi)) = | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 605 | str_of_quant q ^ "_sorts([" ^ commas (map str_of_bound_typ xs) ^ "], " ^ | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 606 | str_of_formula top_level phi ^ ")" | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 607 | | str_of_formula top_level (AQuant (q, xs, phi)) = | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 608 | str_of_quant q ^ "([" ^ | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 609 | commas (map (string_of_bound_var (DFG poly)) xs) ^ "], " ^ | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 610 | str_of_formula top_level phi ^ ")" | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 611 | | str_of_formula top_level (AConn (c, phis)) = | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 612 |         str_of_conn top_level c ^ "(" ^
 | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 613 | commas (map (str_of_formula false) phis) ^ ")" | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 614 | | str_of_formula top_level (AAtom tm) = str_of_atom top_level tm | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 615 | in str_of_formula true end | 
| 45301 
866b075aa99b
added sorted DFG output for coming version of SPASS
 blanchet parents: 
44787diff
changeset | 616 | |
| 47038 
2409b484e1cc
continued implementation of term ordering attributes
 blanchet parents: 
47030diff
changeset | 617 | fun maybe_enclose bef aft "" = "% " ^ bef ^ aft | 
| 
2409b484e1cc
continued implementation of term ordering attributes
 blanchet parents: 
47030diff
changeset | 618 | | maybe_enclose bef aft s = bef ^ s ^ aft | 
| 
2409b484e1cc
continued implementation of term ordering attributes
 blanchet parents: 
47030diff
changeset | 619 | |
| 48131 | 620 | fun dfg_lines poly {is_lpo, gen_weights, gen_prec, gen_simp} ord_info problem =
 | 
| 45301 
866b075aa99b
added sorted DFG output for coming version of SPASS
 blanchet parents: 
44787diff
changeset | 621 | let | 
| 51998 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 622 | val typ = string_of_type (DFG poly) | 
| 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 623 | val term = dfg_string_of_term | 
| 48133 
a5ab5964065f
implement polymorphic DFG output, without type classes for now
 blanchet parents: 
48132diff
changeset | 624 |     fun spair (s, s') = "(" ^ s ^ ", " ^ s' ^ ")"
 | 
| 
a5ab5964065f
implement polymorphic DFG output, without type classes for now
 blanchet parents: 
48132diff
changeset | 625 | fun tm_ary sym ty = spair (sym, string_of_arity (arity_of_type ty)) | 
| 48141 | 626 | fun ty_ary 0 ty = ty | 
| 627 |       | ty_ary n ty = "(" ^ ty ^ ", " ^ string_of_int n ^ ")"
 | |
| 51997 
8dbe623a7804
added datatype declaration syntax for next-gen SPASS
 blanchet parents: 
51878diff
changeset | 628 |     fun fun_typ sym ty = "function(" ^ sym ^ ", " ^ typ ty ^ ")."
 | 
| 45301 
866b075aa99b
added sorted DFG output for coming version of SPASS
 blanchet parents: 
44787diff
changeset | 629 | fun pred_typ sym ty = | 
| 48133 
a5ab5964065f
implement polymorphic DFG output, without type classes for now
 blanchet parents: 
48132diff
changeset | 630 | let | 
| 52025 | 631 | val (ty_vars, (tys, _)) = | 
| 632 | strip_atype ty | |
| 633 | |>> (fn [] => [] | xs => ["[" ^ commas xs ^ "]"]) | |
| 51997 
8dbe623a7804
added datatype declaration syntax for next-gen SPASS
 blanchet parents: 
51878diff
changeset | 634 |       in "predicate(" ^ commas (sym :: ty_vars @ map typ tys) ^ ")." end
 | 
| 
8dbe623a7804
added datatype declaration syntax for next-gen SPASS
 blanchet parents: 
51878diff
changeset | 635 | fun bound_tvar (ty, []) = ty | 
| 
8dbe623a7804
added datatype declaration syntax for next-gen SPASS
 blanchet parents: 
51878diff
changeset | 636 | | bound_tvar (ty, cls) = ty ^ " : " ^ dfg_class_inter cls | 
| 52004 | 637 | fun binder_typ xs ty = | 
| 51997 
8dbe623a7804
added datatype declaration syntax for next-gen SPASS
 blanchet parents: 
51878diff
changeset | 638 | (if null xs then "" else "[" ^ commas (map bound_tvar xs) ^ "], ") ^ | 
| 
8dbe623a7804
added datatype declaration syntax for next-gen SPASS
 blanchet parents: 
51878diff
changeset | 639 | typ ty | 
| 52004 | 640 |     fun sort_decl xs ty cl = "sort(" ^ binder_typ xs ty ^ ", " ^ cl ^ ")."
 | 
| 56683 
7f4ae504e059
reintroduced '...' (nonexhaustive) syntax for SPASS-Pirate
 blanchet parents: 
54829diff
changeset | 641 | fun datatype_decl xs ty tms exhaust = | 
| 
7f4ae504e059
reintroduced '...' (nonexhaustive) syntax for SPASS-Pirate
 blanchet parents: 
54829diff
changeset | 642 |       "datatype(" ^ commas (binder_typ xs ty :: map term tms @ (if exhaust then [] else ["..."])) ^
 | 
| 
7f4ae504e059
reintroduced '...' (nonexhaustive) syntax for SPASS-Pirate
 blanchet parents: 
54829diff
changeset | 643 | ")." | 
| 48142 
efaff8206967
finished implementation of DFG type class output
 blanchet parents: 
48141diff
changeset | 644 |     fun subclass_of sub super = "subclass(" ^ sub ^ ", " ^ super ^ ")."
 | 
| 50522 
19dbd7554076
generate original name as a comment in SPASS problems as well
 blanchet parents: 
50521diff
changeset | 645 | fun formula pred (Formula ((ident, alt), kind, phi, _, info)) = | 
| 45301 
866b075aa99b
added sorted DFG output for coming version of SPASS
 blanchet parents: 
44787diff
changeset | 646 | if pred kind then | 
| 48129 
933d43c31689
removed support for unsorted DFG, now that SPASS 3.7 is no longer supported
 blanchet parents: 
48004diff
changeset | 647 | let val rank = extract_isabelle_rank info in | 
| 57811 
faab5feffb42
put comments between TPTP lines to comply with TPTP BNF
 blanchet parents: 
57709diff
changeset | 648 |             "formula(" ^ dfg_string_of_formula poly gen_simp info phi ^ ", " ^ ident ^
 | 
| 46406 | 649 | (if rank = default_rank then "" else ", " ^ string_of_int rank) ^ | 
| 50522 
19dbd7554076
generate original name as a comment in SPASS problems as well
 blanchet parents: 
50521diff
changeset | 650 | ")." ^ maybe_alt alt | 
| 
19dbd7554076
generate original name as a comment in SPASS problems as well
 blanchet parents: 
50521diff
changeset | 651 | |> SOME | 
| 46406 | 652 | end | 
| 45301 
866b075aa99b
added sorted DFG output for coming version of SPASS
 blanchet parents: 
44787diff
changeset | 653 | else | 
| 
866b075aa99b
added sorted DFG output for coming version of SPASS
 blanchet parents: 
44787diff
changeset | 654 | NONE | 
| 
866b075aa99b
added sorted DFG output for coming version of SPASS
 blanchet parents: 
44787diff
changeset | 655 | | formula _ _ = NONE | 
| 46413 | 656 | fun filt f = problem |> map (map_filter f o snd) |> filter_out null | 
| 45301 
866b075aa99b
added sorted DFG output for coming version of SPASS
 blanchet parents: 
44787diff
changeset | 657 | val func_aries = | 
| 48137 
6f524f2066e3
cleanly distinguish between type declarations and symbol declarations
 blanchet parents: 
48135diff
changeset | 658 | filt (fn Sym_Decl (_, sym, ty) => | 
| 
6f524f2066e3
cleanly distinguish between type declarations and symbol declarations
 blanchet parents: 
48135diff
changeset | 659 | if is_function_atype ty then SOME (tm_ary sym ty) else NONE | 
| 45301 
866b075aa99b
added sorted DFG output for coming version of SPASS
 blanchet parents: 
44787diff
changeset | 660 | | _ => NONE) | 
| 47038 
2409b484e1cc
continued implementation of term ordering attributes
 blanchet parents: 
47030diff
changeset | 661 | |> flat |> commas |> maybe_enclose "functions [" "]." | 
| 45301 
866b075aa99b
added sorted DFG output for coming version of SPASS
 blanchet parents: 
44787diff
changeset | 662 | val pred_aries = | 
| 48137 
6f524f2066e3
cleanly distinguish between type declarations and symbol declarations
 blanchet parents: 
48135diff
changeset | 663 | filt (fn Sym_Decl (_, sym, ty) => | 
| 
6f524f2066e3
cleanly distinguish between type declarations and symbol declarations
 blanchet parents: 
48135diff
changeset | 664 | if is_predicate_atype ty then SOME (tm_ary sym ty) else NONE | 
| 45301 
866b075aa99b
added sorted DFG output for coming version of SPASS
 blanchet parents: 
44787diff
changeset | 665 | | _ => NONE) | 
| 47038 
2409b484e1cc
continued implementation of term ordering attributes
 blanchet parents: 
47030diff
changeset | 666 | |> flat |> commas |> maybe_enclose "predicates [" "]." | 
| 48129 
933d43c31689
removed support for unsorted DFG, now that SPASS 3.7 is no longer supported
 blanchet parents: 
48004diff
changeset | 667 | val sorts = | 
| 52000 | 668 | filt (try (fn Type_Decl (_, ty, ary) => ty_ary ary ty)) @ | 
| 48142 
efaff8206967
finished implementation of DFG type class output
 blanchet parents: 
48141diff
changeset | 669 | [[ty_ary 0 dfg_individual_type]] | 
| 47038 
2409b484e1cc
continued implementation of term ordering attributes
 blanchet parents: 
47030diff
changeset | 670 | |> flat |> commas |> maybe_enclose "sorts [" "]." | 
| 48141 | 671 | val classes = | 
| 52000 | 672 | filt (try (fn Class_Decl (_, cl, _) => cl)) | 
| 48141 | 673 | |> flat |> commas |> maybe_enclose "classes [" "]." | 
| 48129 
933d43c31689
removed support for unsorted DFG, now that SPASS 3.7 is no longer supported
 blanchet parents: 
48004diff
changeset | 674 | val ord_info = if gen_weights orelse gen_prec then ord_info () else [] | 
| 
933d43c31689
removed support for unsorted DFG, now that SPASS 3.7 is no longer supported
 blanchet parents: 
48004diff
changeset | 675 | val do_term_order_weights = | 
| 47038 
2409b484e1cc
continued implementation of term ordering attributes
 blanchet parents: 
47030diff
changeset | 676 | (if gen_weights then ord_info else []) | 
| 48133 
a5ab5964065f
implement polymorphic DFG output, without type classes for now
 blanchet parents: 
48132diff
changeset | 677 | |> map (spair o apsnd string_of_int) |> commas | 
| 
a5ab5964065f
implement polymorphic DFG output, without type classes for now
 blanchet parents: 
48132diff
changeset | 678 | |> maybe_enclose "weights [" "]." | 
| 48141 | 679 | val syms = [func_aries, pred_aries, do_term_order_weights, sorts, classes] | 
| 48142 
efaff8206967
finished implementation of DFG type class output
 blanchet parents: 
48141diff
changeset | 680 | val func_decls = | 
| 48137 
6f524f2066e3
cleanly distinguish between type declarations and symbol declarations
 blanchet parents: 
48135diff
changeset | 681 | filt (fn Sym_Decl (_, sym, ty) => | 
| 
6f524f2066e3
cleanly distinguish between type declarations and symbol declarations
 blanchet parents: 
48135diff
changeset | 682 | if is_function_atype ty then SOME (fun_typ sym ty) else NONE | 
| 48142 
efaff8206967
finished implementation of DFG type class output
 blanchet parents: 
48141diff
changeset | 683 | | _ => NONE) |> flat | 
| 
efaff8206967
finished implementation of DFG type class output
 blanchet parents: 
48141diff
changeset | 684 | val pred_decls = | 
| 48137 
6f524f2066e3
cleanly distinguish between type declarations and symbol declarations
 blanchet parents: 
48135diff
changeset | 685 | filt (fn Sym_Decl (_, sym, ty) => | 
| 
6f524f2066e3
cleanly distinguish between type declarations and symbol declarations
 blanchet parents: 
48135diff
changeset | 686 | if is_nontrivial_predicate_atype ty then SOME (pred_typ sym ty) | 
| 46391 
8d8d3c1f1854
really fixed syntax bug in DFG output (cf. ef62c2fafa9e)
 blanchet parents: 
46382diff
changeset | 687 | else NONE | 
| 48142 
efaff8206967
finished implementation of DFG type class output
 blanchet parents: 
48141diff
changeset | 688 | | _ => NONE) |> flat | 
| 51997 
8dbe623a7804
added datatype declaration syntax for next-gen SPASS
 blanchet parents: 
51878diff
changeset | 689 | val datatype_decls = | 
| 56683 
7f4ae504e059
reintroduced '...' (nonexhaustive) syntax for SPASS-Pirate
 blanchet parents: 
54829diff
changeset | 690 | filt (try (fn Datatype_Decl (_, xs, ty, tms, exhaust) => datatype_decl xs ty tms exhaust)) | 
| 
7f4ae504e059
reintroduced '...' (nonexhaustive) syntax for SPASS-Pirate
 blanchet parents: 
54829diff
changeset | 691 | |> flat | 
| 48142 
efaff8206967
finished implementation of DFG type class output
 blanchet parents: 
48141diff
changeset | 692 | val sort_decls = | 
| 52000 | 693 | filt (try (fn Class_Memb (_, xs, ty, cl) => sort_decl xs ty cl)) |> flat | 
| 48142 
efaff8206967
finished implementation of DFG type class output
 blanchet parents: 
48141diff
changeset | 694 | val subclass_decls = | 
| 52000 | 695 | filt (try (fn Class_Decl (_, sub, supers) => | 
| 696 | map (subclass_of sub) supers)) | |
| 697 | |> flat |> flat | |
| 51997 
8dbe623a7804
added datatype declaration syntax for next-gen SPASS
 blanchet parents: 
51878diff
changeset | 698 | val decls = | 
| 
8dbe623a7804
added datatype declaration syntax for next-gen SPASS
 blanchet parents: 
51878diff
changeset | 699 | func_decls @ pred_decls @ datatype_decls @ sort_decls @ subclass_decls | 
| 46413 | 700 | val axioms = | 
| 701 | filt (formula (curry (op <>) Conjecture)) |> separate [""] |> flat | |
| 702 | val conjs = | |
| 703 | filt (formula (curry (op =) Conjecture)) |> separate [""] |> flat | |
| 47038 
2409b484e1cc
continued implementation of term ordering attributes
 blanchet parents: 
47030diff
changeset | 704 | val settings = | 
| 47054 | 705 | (if is_lpo then ["set_flag(Ordering, 1)."] else []) @ | 
| 47038 
2409b484e1cc
continued implementation of term ordering attributes
 blanchet parents: 
47030diff
changeset | 706 | (if gen_prec then | 
| 
2409b484e1cc
continued implementation of term ordering attributes
 blanchet parents: 
47030diff
changeset | 707 | [ord_info |> map fst |> rev |> commas | 
| 
2409b484e1cc
continued implementation of term ordering attributes
 blanchet parents: 
47030diff
changeset | 708 |                    |> maybe_enclose "set_precedence(" ")."]
 | 
| 
2409b484e1cc
continued implementation of term ordering attributes
 blanchet parents: 
47030diff
changeset | 709 | else | 
| 
2409b484e1cc
continued implementation of term ordering attributes
 blanchet parents: 
47030diff
changeset | 710 | []) | 
| 47053 | 711 | fun list_of _ [] = [] | 
| 712 | | list_of heading ss = | |
| 713 | "list_of_" ^ heading ^ ".\n" :: map (suffix "\n") ss @ | |
| 714 | ["end_of_list.\n\n"] | |
| 45301 
866b075aa99b
added sorted DFG output for coming version of SPASS
 blanchet parents: 
44787diff
changeset | 715 | in | 
| 
866b075aa99b
added sorted DFG output for coming version of SPASS
 blanchet parents: 
44787diff
changeset | 716 | "\nbegin_problem(isabelle).\n\n" :: | 
| 47053 | 717 | list_of "descriptions" | 
| 45301 
866b075aa99b
added sorted DFG output for coming version of SPASS
 blanchet parents: 
44787diff
changeset | 718 |             ["name({**}).", "author({**}).", "status(unknown).",
 | 
| 
866b075aa99b
added sorted DFG output for coming version of SPASS
 blanchet parents: 
44787diff
changeset | 719 |              "description({**})."] @
 | 
| 47053 | 720 | list_of "symbols" syms @ | 
| 721 | list_of "declarations" decls @ | |
| 722 | list_of "formulae(axioms)" axioms @ | |
| 723 | list_of "formulae(conjectures)" conjs @ | |
| 724 | list_of "settings(SPASS)" settings @ | |
| 45301 
866b075aa99b
added sorted DFG output for coming version of SPASS
 blanchet parents: 
44787diff
changeset | 725 | ["end_problem.\n"] | 
| 
866b075aa99b
added sorted DFG output for coming version of SPASS
 blanchet parents: 
44787diff
changeset | 726 | end | 
| 
866b075aa99b
added sorted DFG output for coming version of SPASS
 blanchet parents: 
44787diff
changeset | 727 | |
| 51998 
f732a674db1b
renamed Sledgehammer functions with 'for' in their names to 'of'
 blanchet parents: 
51997diff
changeset | 728 | fun lines_of_atp_problem format ord ord_info problem = | 
| 45301 
866b075aa99b
added sorted DFG output for coming version of SPASS
 blanchet parents: 
44787diff
changeset | 729 | "% This file was generated by Isabelle (most likely Sledgehammer)\n\ | 
| 
866b075aa99b
added sorted DFG output for coming version of SPASS
 blanchet parents: 
44787diff
changeset | 730 | \% " ^ timestamp () ^ "\n" :: | 
| 48131 | 731 | (case format of | 
| 732 | DFG poly => dfg_lines poly ord ord_info | |
| 733 | | _ => tptp_lines format) problem | |
| 37643 
f576af716aa6
rewrote the TPTP problem generation code more or less from scratch;
 blanchet parents: 
37642diff
changeset | 734 | |
| 42939 | 735 | |
| 43098 
e88e974c4846
proper handling of type variable classes in new Metis
 blanchet parents: 
43092diff
changeset | 736 | (** CNF (Metis) and CNF UEQ (Waldmeister) **) | 
| 42939 | 737 | |
| 48140 | 738 | fun is_line_negated (Formula (_, _, AConn (ANot, _), _, _)) = true | 
| 739 | | is_line_negated _ = false | |
| 42939 | 740 | |
| 48140 | 741 | fun is_line_cnf_ueq (Formula (_, _, AAtom (ATerm (((s, _), _), _)), _, _)) = | 
| 43193 
e11bd628f1a5
improved ATP clausifier so it can deal with "x => (y <=> z)"
 blanchet parents: 
43163diff
changeset | 742 | is_tptp_equal s | 
| 48140 | 743 | | is_line_cnf_ueq _ = false | 
| 42939 | 744 | |
| 48132 
9aa0fad4e864
added type arguments to "ATerm" constructor -- but don't use them yet
 blanchet parents: 
48131diff
changeset | 745 | fun open_conjecture_term (ATerm (((s, s'), tys), tms)) = | 
| 56811 | 746 | ATerm ((if is_tptp_variable s then (s |> Name.desymbolize (SOME false), s') | 
| 48132 
9aa0fad4e864
added type arguments to "ATerm" constructor -- but don't use them yet
 blanchet parents: 
48131diff
changeset | 747 | else (s, s'), tys), tms |> map open_conjecture_term) | 
| 43676 
3b0b448b4d69
add support for lambdas in TPTP THF generator + killed an unsound type encoding (because the monotonicity calculus assumes first-order)
 nik parents: 
43422diff
changeset | 748 | | open_conjecture_term _ = raise Fail "unexpected higher-order term" | 
| 43098 
e88e974c4846
proper handling of type variable classes in new Metis
 blanchet parents: 
43092diff
changeset | 749 | fun open_formula conj = | 
| 
e88e974c4846
proper handling of type variable classes in new Metis
 blanchet parents: 
43092diff
changeset | 750 | let | 
| 43193 
e11bd628f1a5
improved ATP clausifier so it can deal with "x => (y <=> z)"
 blanchet parents: 
43163diff
changeset | 751 | (* We are conveniently assuming that all bound variable names are | 
| 
e11bd628f1a5
improved ATP clausifier so it can deal with "x => (y <=> z)"
 blanchet parents: 
43163diff
changeset | 752 | distinct, which should be the case for the formulas we generate. *) | 
| 
e11bd628f1a5
improved ATP clausifier so it can deal with "x => (y <=> z)"
 blanchet parents: 
43163diff
changeset | 753 | fun opn (pos as SOME true) (AQuant (AForall, _, phi)) = opn pos phi | 
| 
e11bd628f1a5
improved ATP clausifier so it can deal with "x => (y <=> z)"
 blanchet parents: 
43163diff
changeset | 754 | | opn (pos as SOME false) (AQuant (AExists, _, phi)) = opn pos phi | 
| 43098 
e88e974c4846
proper handling of type variable classes in new Metis
 blanchet parents: 
43092diff
changeset | 755 | | opn pos (AConn (ANot, [phi])) = mk_anot (opn (Option.map not pos) phi) | 
| 
e88e974c4846
proper handling of type variable classes in new Metis
 blanchet parents: 
43092diff
changeset | 756 | | opn pos (AConn (c, [phi1, phi2])) = | 
| 
e88e974c4846
proper handling of type variable classes in new Metis
 blanchet parents: 
43092diff
changeset | 757 | let val (pos1, pos2) = polarities_of_conn pos c in | 
| 
e88e974c4846
proper handling of type variable classes in new Metis
 blanchet parents: 
43092diff
changeset | 758 | AConn (c, [opn pos1 phi1, opn pos2 phi2]) | 
| 
e88e974c4846
proper handling of type variable classes in new Metis
 blanchet parents: 
43092diff
changeset | 759 | end | 
| 
e88e974c4846
proper handling of type variable classes in new Metis
 blanchet parents: 
43092diff
changeset | 760 | | opn _ (AAtom t) = AAtom (t |> conj ? open_conjecture_term) | 
| 43422 
dcbedaf6f80c
added missing case in pattern matching -- solves Waldmeister "Match" exceptions that have been plaguing some users
 blanchet parents: 
43295diff
changeset | 761 | | opn _ phi = phi | 
| 43098 
e88e974c4846
proper handling of type variable classes in new Metis
 blanchet parents: 
43092diff
changeset | 762 | in opn (SOME (not conj)) end | 
| 42944 
9e620869a576
improved Waldmeister support -- even run it by default on unit equational goals
 blanchet parents: 
42942diff
changeset | 763 | fun open_formula_line (Formula (ident, kind, phi, source, info)) = | 
| 
9e620869a576
improved Waldmeister support -- even run it by default on unit equational goals
 blanchet parents: 
42942diff
changeset | 764 | Formula (ident, kind, open_formula (kind = Conjecture) phi, source, info) | 
| 
9e620869a576
improved Waldmeister support -- even run it by default on unit equational goals
 blanchet parents: 
42942diff
changeset | 765 | | open_formula_line line = line | 
| 42939 | 766 | |
| 767 | fun negate_conjecture_line (Formula (ident, Conjecture, phi, source, info)) = | |
| 42942 | 768 | Formula (ident, Hypothesis, mk_anot phi, source, info) | 
| 42939 | 769 | | negate_conjecture_line line = line | 
| 770 | ||
| 43098 
e88e974c4846
proper handling of type variable classes in new Metis
 blanchet parents: 
43092diff
changeset | 771 | exception CLAUSIFY of unit | 
| 
e88e974c4846
proper handling of type variable classes in new Metis
 blanchet parents: 
43092diff
changeset | 772 | |
| 43126 
a7db0afd5200
clausify "<=>" (needed for some type information)
 blanchet parents: 
43098diff
changeset | 773 | (* This "clausification" only expands syntactic sugar, such as "phi => psi" to | 
| 
a7db0afd5200
clausify "<=>" (needed for some type information)
 blanchet parents: 
43098diff
changeset | 774 | "~ phi | psi" and "phi <=> psi" to "~ phi | psi" and "~ psi | phi". We don't | 
| 
a7db0afd5200
clausify "<=>" (needed for some type information)
 blanchet parents: 
43098diff
changeset | 775 | attempt to distribute conjunctions over disjunctions. *) | 
| 43193 
e11bd628f1a5
improved ATP clausifier so it can deal with "x => (y <=> z)"
 blanchet parents: 
43163diff
changeset | 776 | fun clausify_formula pos (phi as AAtom _) = [phi |> not pos ? mk_anot] | 
| 
e11bd628f1a5
improved ATP clausifier so it can deal with "x => (y <=> z)"
 blanchet parents: 
43163diff
changeset | 777 | | clausify_formula pos (AConn (ANot, [phi])) = clausify_formula (not pos) phi | 
| 
e11bd628f1a5
improved ATP clausifier so it can deal with "x => (y <=> z)"
 blanchet parents: 
43163diff
changeset | 778 | | clausify_formula true (AConn (AOr, [phi1, phi2])) = | 
| 59058 
a78612c67ec0
renamed "pairself" to "apply2", in accordance to @{apply 2};
 wenzelm parents: 
58600diff
changeset | 779 | (phi1, phi2) |> apply2 (clausify_formula true) | 
| 43193 
e11bd628f1a5
improved ATP clausifier so it can deal with "x => (y <=> z)"
 blanchet parents: 
43163diff
changeset | 780 | |> uncurry (map_product (mk_aconn AOr)) | 
| 
e11bd628f1a5
improved ATP clausifier so it can deal with "x => (y <=> z)"
 blanchet parents: 
43163diff
changeset | 781 | | clausify_formula false (AConn (AAnd, [phi1, phi2])) = | 
| 59058 
a78612c67ec0
renamed "pairself" to "apply2", in accordance to @{apply 2};
 wenzelm parents: 
58600diff
changeset | 782 | (phi1, phi2) |> apply2 (clausify_formula false) | 
| 43193 
e11bd628f1a5
improved ATP clausifier so it can deal with "x => (y <=> z)"
 blanchet parents: 
43163diff
changeset | 783 | |> uncurry (map_product (mk_aconn AOr)) | 
| 
e11bd628f1a5
improved ATP clausifier so it can deal with "x => (y <=> z)"
 blanchet parents: 
43163diff
changeset | 784 | | clausify_formula true (AConn (AImplies, [phi1, phi2])) = | 
| 
e11bd628f1a5
improved ATP clausifier so it can deal with "x => (y <=> z)"
 blanchet parents: 
43163diff
changeset | 785 | clausify_formula true (AConn (AOr, [mk_anot phi1, phi2])) | 
| 
e11bd628f1a5
improved ATP clausifier so it can deal with "x => (y <=> z)"
 blanchet parents: 
43163diff
changeset | 786 | | clausify_formula true (AConn (AIff, phis)) = | 
| 
e11bd628f1a5
improved ATP clausifier so it can deal with "x => (y <=> z)"
 blanchet parents: 
43163diff
changeset | 787 | clausify_formula true (AConn (AImplies, phis)) @ | 
| 
e11bd628f1a5
improved ATP clausifier so it can deal with "x => (y <=> z)"
 blanchet parents: 
43163diff
changeset | 788 | clausify_formula true (AConn (AImplies, rev phis)) | 
| 
e11bd628f1a5
improved ATP clausifier so it can deal with "x => (y <=> z)"
 blanchet parents: 
43163diff
changeset | 789 | | clausify_formula _ _ = raise CLAUSIFY () | 
| 43098 
e88e974c4846
proper handling of type variable classes in new Metis
 blanchet parents: 
43092diff
changeset | 790 | |
| 50521 
bec828f3364e
generate comments with original names for debugging
 blanchet parents: 
50012diff
changeset | 791 | fun clausify_formula_line (Formula ((ident, alt), kind, phi, source, info)) = | 
| 43126 
a7db0afd5200
clausify "<=>" (needed for some type information)
 blanchet parents: 
43098diff
changeset | 792 | let | 
| 
a7db0afd5200
clausify "<=>" (needed for some type information)
 blanchet parents: 
43098diff
changeset | 793 | val (n, phis) = phi |> try (clausify_formula true) |> these |> `length | 
| 
a7db0afd5200
clausify "<=>" (needed for some type information)
 blanchet parents: 
43098diff
changeset | 794 | in | 
| 
a7db0afd5200
clausify "<=>" (needed for some type information)
 blanchet parents: 
43098diff
changeset | 795 | map2 (fn phi => fn j => | 
| 50521 
bec828f3364e
generate comments with original names for debugging
 blanchet parents: 
50012diff
changeset | 796 | Formula ((ident ^ replicate_string (j - 1) "x", alt), kind, phi, | 
| 
bec828f3364e
generate comments with original names for debugging
 blanchet parents: 
50012diff
changeset | 797 | source, info)) | 
| 43126 
a7db0afd5200
clausify "<=>" (needed for some type information)
 blanchet parents: 
43098diff
changeset | 798 | phis (1 upto n) | 
| 
a7db0afd5200
clausify "<=>" (needed for some type information)
 blanchet parents: 
43098diff
changeset | 799 | end | 
| 
a7db0afd5200
clausify "<=>" (needed for some type information)
 blanchet parents: 
43098diff
changeset | 800 | | clausify_formula_line _ = [] | 
| 43098 
e88e974c4846
proper handling of type variable classes in new Metis
 blanchet parents: 
43092diff
changeset | 801 | |
| 48140 | 802 | fun ensure_cnf_line line = | 
| 43098 
e88e974c4846
proper handling of type variable classes in new Metis
 blanchet parents: 
43092diff
changeset | 803 | line |> open_formula_line |> negate_conjecture_line |> clausify_formula_line | 
| 
e88e974c4846
proper handling of type variable classes in new Metis
 blanchet parents: 
43092diff
changeset | 804 | |
| 48140 | 805 | fun ensure_cnf_problem problem = problem |> map (apsnd (maps ensure_cnf_line)) | 
| 43092 
93ec303e1917
more work on new metis that exploits the powerful new type encodings
 blanchet parents: 
43085diff
changeset | 806 | |
| 42962 
3b50fdeb6cfc
started adding support for THF output (but no lambdas)
 blanchet parents: 
42961diff
changeset | 807 | fun filter_cnf_ueq_problem problem = | 
| 
3b50fdeb6cfc
started adding support for THF output (but no lambdas)
 blanchet parents: 
42961diff
changeset | 808 | problem | 
| 48140 | 809 | |> map (apsnd (map open_formula_line #> filter is_line_cnf_ueq | 
| 42962 
3b50fdeb6cfc
started adding support for THF output (but no lambdas)
 blanchet parents: 
42961diff
changeset | 810 | #> map negate_conjecture_line)) | 
| 
3b50fdeb6cfc
started adding support for THF output (but no lambdas)
 blanchet parents: 
42961diff
changeset | 811 | |> (fn problem => | 
| 42939 | 812 | let | 
| 43824 
0234156d3fbe
don't generate Waldmeister problems with only a conjecture, since it makes it crash sometimes
 blanchet parents: 
43692diff
changeset | 813 | val lines = problem |> maps snd | 
| 48140 | 814 | val conjs = lines |> filter is_line_negated | 
| 43824 
0234156d3fbe
don't generate Waldmeister problems with only a conjecture, since it makes it crash sometimes
 blanchet parents: 
43692diff
changeset | 815 | in if length conjs = 1 andalso conjs <> lines then problem else [] end) | 
| 38017 
3ad3e3ca2451
move Sledgehammer-specific code out of "Sledgehammer_TPTP_Format"
 blanchet parents: 
38014diff
changeset | 816 | |
| 37643 
f576af716aa6
rewrote the TPTP problem generation code more or less from scratch;
 blanchet parents: 
37642diff
changeset | 817 | |
| 42998 
1c80902d0456
fully support all type system encodings in typed formats (TFF, THF)
 blanchet parents: 
42994diff
changeset | 818 | (** Symbol declarations **) | 
| 
1c80902d0456
fully support all type system encodings in typed formats (TFF, THF)
 blanchet parents: 
42994diff
changeset | 819 | |
| 48141 | 820 | fun add_declared_in_line (Class_Decl (_, cl, _)) = apfst (apfst (cons cl)) | 
| 48142 
efaff8206967
finished implementation of DFG type class output
 blanchet parents: 
48141diff
changeset | 821 | | add_declared_in_line (Type_Decl (_, ty, _)) = apfst (apsnd (cons ty)) | 
| 48140 | 822 | | add_declared_in_line (Sym_Decl (_, sym, _)) = apsnd (cons sym) | 
| 823 | | add_declared_in_line _ = I | |
| 48141 | 824 | fun declared_in_atp_problem problem = | 
| 825 | fold (fold add_declared_in_line o snd) problem (([], []), []) | |
| 42998 
1c80902d0456
fully support all type system encodings in typed formats (TFF, THF)
 blanchet parents: 
42994diff
changeset | 826 | |
| 37643 
f576af716aa6
rewrote the TPTP problem generation code more or less from scratch;
 blanchet parents: 
37642diff
changeset | 827 | (** Nice names **) | 
| 
f576af716aa6
rewrote the TPTP problem generation code more or less from scratch;
 blanchet parents: 
37642diff
changeset | 828 | |
| 42227 
662b50b7126f
if "monomorphize" is enabled, mangle the type information in the names by default
 blanchet parents: 
41769diff
changeset | 829 | val no_qualifiers = | 
| 
662b50b7126f
if "monomorphize" is enabled, mangle the type information in the names by default
 blanchet parents: 
41769diff
changeset | 830 | let | 
| 
662b50b7126f
if "monomorphize" is enabled, mangle the type information in the names by default
 blanchet parents: 
41769diff
changeset | 831 | fun skip [] = [] | 
| 
662b50b7126f
if "monomorphize" is enabled, mangle the type information in the names by default
 blanchet parents: 
41769diff
changeset | 832 | | skip (#"." :: cs) = skip cs | 
| 
662b50b7126f
if "monomorphize" is enabled, mangle the type information in the names by default
 blanchet parents: 
41769diff
changeset | 833 | | skip (c :: cs) = if Char.isAlphaNum c then skip cs else c :: keep cs | 
| 
662b50b7126f
if "monomorphize" is enabled, mangle the type information in the names by default
 blanchet parents: 
41769diff
changeset | 834 | and keep [] = [] | 
| 
662b50b7126f
if "monomorphize" is enabled, mangle the type information in the names by default
 blanchet parents: 
41769diff
changeset | 835 | | keep (#"." :: cs) = skip cs | 
| 
662b50b7126f
if "monomorphize" is enabled, mangle the type information in the names by default
 blanchet parents: 
41769diff
changeset | 836 | | keep (c :: cs) = c :: keep cs | 
| 
662b50b7126f
if "monomorphize" is enabled, mangle the type information in the names by default
 blanchet parents: 
41769diff
changeset | 837 | in String.explode #> rev #> keep #> rev #> String.implode end | 
| 
662b50b7126f
if "monomorphize" is enabled, mangle the type information in the names by default
 blanchet parents: 
41769diff
changeset | 838 | |
| 42761 
8ea9c6fa8b53
fixed several bugs in Isar proof reconstruction, in particular w.r.t. mangled types and hAPP
 blanchet parents: 
42752diff
changeset | 839 | (* Long names can slow down the ATPs. *) | 
| 42724 
4d6bcf846759
added "max_mono_instances" option to Sledgehammer and renamed old "monomorphize_limit" option
 blanchet parents: 
42722diff
changeset | 840 | val max_readable_name_size = 20 | 
| 42567 
d012947edd36
shorten readable names -- they can get really long with monomorphization, which actually slows down the ATPs
 blanchet parents: 
42543diff
changeset | 841 | |
| 43000 
bd424c3dde46
cleaner handling of equality and proxies (esp. for THF)
 blanchet parents: 
42998diff
changeset | 842 | (* "equal" is reserved by some ATPs. "op" is also reserved, to avoid the | 
| 
bd424c3dde46
cleaner handling of equality and proxies (esp. for THF)
 blanchet parents: 
42998diff
changeset | 843 | unreadable "op_1", "op_2", etc., in the problem files. "eq" is reserved to | 
| 
bd424c3dde46
cleaner handling of equality and proxies (esp. for THF)
 blanchet parents: 
42998diff
changeset | 844 | ensure that "HOL.eq" is correctly mapped to equality (not clear whether this | 
| 
bd424c3dde46
cleaner handling of equality and proxies (esp. for THF)
 blanchet parents: 
42998diff
changeset | 845 | is still necessary). *) | 
| 45939 
711fec5b4f61
don't try to avoid SPASS keywords; instead, just suffix an underscore to all generated identifiers
 blanchet parents: 
45938diff
changeset | 846 | val reserved_nice_names = [tptp_old_equal, "op", "eq"] | 
| 42939 | 847 | |
| 46414 
4ed12518fb81
improved hashing w.r.t. Mirabelle, to help debugging
 blanchet parents: 
46413diff
changeset | 848 | (* hack to get the same hashing across Mirabelle runs (see "mirabelle.pl") *) | 
| 
4ed12518fb81
improved hashing w.r.t. Mirabelle, to help debugging
 blanchet parents: 
46413diff
changeset | 849 | fun cleanup_mirabelle_name s = | 
| 
4ed12518fb81
improved hashing w.r.t. Mirabelle, to help debugging
 blanchet parents: 
46413diff
changeset | 850 | let | 
| 
4ed12518fb81
improved hashing w.r.t. Mirabelle, to help debugging
 blanchet parents: 
46413diff
changeset | 851 | val mirabelle_infix = "_Mirabelle_" | 
| 
4ed12518fb81
improved hashing w.r.t. Mirabelle, to help debugging
 blanchet parents: 
46413diff
changeset | 852 | val random_suffix_len = 10 | 
| 
4ed12518fb81
improved hashing w.r.t. Mirabelle, to help debugging
 blanchet parents: 
46413diff
changeset | 853 | val (s1, s2) = Substring.position mirabelle_infix (Substring.full s) | 
| 
4ed12518fb81
improved hashing w.r.t. Mirabelle, to help debugging
 blanchet parents: 
46413diff
changeset | 854 | in | 
| 
4ed12518fb81
improved hashing w.r.t. Mirabelle, to help debugging
 blanchet parents: 
46413diff
changeset | 855 | if Substring.isEmpty s2 then | 
| 
4ed12518fb81
improved hashing w.r.t. Mirabelle, to help debugging
 blanchet parents: 
46413diff
changeset | 856 | s | 
| 
4ed12518fb81
improved hashing w.r.t. Mirabelle, to help debugging
 blanchet parents: 
46413diff
changeset | 857 | else | 
| 
4ed12518fb81
improved hashing w.r.t. Mirabelle, to help debugging
 blanchet parents: 
46413diff
changeset | 858 | Substring.string s1 ^ | 
| 
4ed12518fb81
improved hashing w.r.t. Mirabelle, to help debugging
 blanchet parents: 
46413diff
changeset | 859 | Substring.string (Substring.triml (size mirabelle_infix + random_suffix_len) s2) | 
| 
4ed12518fb81
improved hashing w.r.t. Mirabelle, to help debugging
 blanchet parents: 
46413diff
changeset | 860 | end | 
| 
4ed12518fb81
improved hashing w.r.t. Mirabelle, to help debugging
 blanchet parents: 
46413diff
changeset | 861 | |
| 46378 | 862 | fun readable_name protect full_name s = | 
| 45939 
711fec5b4f61
don't try to avoid SPASS keywords; instead, just suffix an underscore to all generated identifiers
 blanchet parents: 
45938diff
changeset | 863 | (if s = full_name then | 
| 
711fec5b4f61
don't try to avoid SPASS keywords; instead, just suffix an underscore to all generated identifiers
 blanchet parents: 
45938diff
changeset | 864 | s | 
| 
711fec5b4f61
don't try to avoid SPASS keywords; instead, just suffix an underscore to all generated identifiers
 blanchet parents: 
45938diff
changeset | 865 | else | 
| 
711fec5b4f61
don't try to avoid SPASS keywords; instead, just suffix an underscore to all generated identifiers
 blanchet parents: 
45938diff
changeset | 866 | s |> no_qualifiers | 
| 52076 
bfa28e1cba77
freeze types in Sledgehammer goal, not just terms
 blanchet parents: 
52075diff
changeset | 867 | |> unquote_tvar | 
| 56811 | 868 | |> Name.desymbolize (SOME (Char.isUpper (String.sub (full_name, 0)))) | 
| 45939 
711fec5b4f61
don't try to avoid SPASS keywords; instead, just suffix an underscore to all generated identifiers
 blanchet parents: 
45938diff
changeset | 869 | |> (fn s => | 
| 
711fec5b4f61
don't try to avoid SPASS keywords; instead, just suffix an underscore to all generated identifiers
 blanchet parents: 
45938diff
changeset | 870 | if size s > max_readable_name_size then | 
| 
711fec5b4f61
don't try to avoid SPASS keywords; instead, just suffix an underscore to all generated identifiers
 blanchet parents: 
45938diff
changeset | 871 | String.substring (s, 0, max_readable_name_size div 2 - 4) ^ | 
| 46414 
4ed12518fb81
improved hashing w.r.t. Mirabelle, to help debugging
 blanchet parents: 
46413diff
changeset | 872 | string_of_int (hash_string (cleanup_mirabelle_name full_name)) ^ | 
| 56847 | 873 | String.extract (s, size s - max_readable_name_size div 2 + 4, NONE) | 
| 45939 
711fec5b4f61
don't try to avoid SPASS keywords; instead, just suffix an underscore to all generated identifiers
 blanchet parents: 
45938diff
changeset | 874 | else | 
| 
711fec5b4f61
don't try to avoid SPASS keywords; instead, just suffix an underscore to all generated identifiers
 blanchet parents: 
45938diff
changeset | 875 | s) | 
| 
711fec5b4f61
don't try to avoid SPASS keywords; instead, just suffix an underscore to all generated identifiers
 blanchet parents: 
45938diff
changeset | 876 | |> (fn s => | 
| 
711fec5b4f61
don't try to avoid SPASS keywords; instead, just suffix an underscore to all generated identifiers
 blanchet parents: 
45938diff
changeset | 877 | if member (op =) reserved_nice_names s then full_name else s)) | 
| 46378 | 878 | |> protect | 
| 37624 | 879 | |
| 45939 
711fec5b4f61
don't try to avoid SPASS keywords; instead, just suffix an underscore to all generated identifiers
 blanchet parents: 
45938diff
changeset | 880 | fun nice_name _ (full_name, _) NONE = (full_name, NONE) | 
| 46378 | 881 | | nice_name protect (full_name, desired_name) (SOME the_pool) = | 
| 42998 
1c80902d0456
fully support all type system encodings in typed formats (TFF, THF)
 blanchet parents: 
42994diff
changeset | 882 | if is_built_in_tptp_symbol full_name then | 
| 39384 | 883 | (full_name, SOME the_pool) | 
| 54829 | 884 | else | 
| 885 | (case Symtab.lookup (fst the_pool) full_name of | |
| 886 | SOME nice_name => (nice_name, SOME the_pool) | |
| 887 | | NONE => | |
| 888 | let | |
| 889 | val nice_prefix = readable_name protect full_name desired_name | |
| 890 | fun add j = | |
| 891 | let | |
| 892 | val nice_name = nice_prefix ^ (if j = 1 then "" else string_of_int j) | |
| 893 | in | |
| 894 | (case Symtab.lookup (snd the_pool) nice_name of | |
| 895 | SOME full_name' => | |
| 896 | if full_name = full_name' then (nice_name, the_pool) else add (j + 1) | |
| 897 | | NONE => | |
| 898 | (nice_name, | |
| 899 | (Symtab.update_new (full_name, nice_name) (fst the_pool), | |
| 900 | Symtab.update_new (nice_name, full_name) (snd the_pool)))) | |
| 901 | end | |
| 902 | in add 1 |> apsnd SOME end) | |
| 37624 | 903 | |
| 46643 
a88bccd2b567
added support for Alt-Ergo through Why3 (mostly for experimental purposes, e.g. polymorphism vs. monomorphization)
 blanchet parents: 
46445diff
changeset | 904 | fun avoid_clash_with_alt_ergo_type_vars s = | 
| 
a88bccd2b567
added support for Alt-Ergo through Why3 (mostly for experimental purposes, e.g. polymorphism vs. monomorphization)
 blanchet parents: 
46445diff
changeset | 905 | if is_tptp_variable s then s else s ^ "_" | 
| 
a88bccd2b567
added support for Alt-Ergo through Why3 (mostly for experimental purposes, e.g. polymorphism vs. monomorphization)
 blanchet parents: 
46445diff
changeset | 906 | |
| 46378 | 907 | fun avoid_clash_with_dfg_keywords s = | 
| 908 | let val n = String.size s in | |
| 46443 
c86276014571
improved KBO weights -- beware of explicit applications
 blanchet parents: 
46442diff
changeset | 909 | if n < 2 orelse (n = 2 andalso String.sub (s, 0) = String.sub (s, 1)) orelse | 
| 
c86276014571
improved KBO weights -- beware of explicit applications
 blanchet parents: 
46442diff
changeset | 910 | String.isSubstring "_" s then | 
| 46378 | 911 | s | 
| 47150 | 912 | else if is_tptp_variable s then | 
| 52353 
dba3d398c322
SPASS has more Uppercase keywords than I was fearing -- better always append _
 blanchet parents: 
52076diff
changeset | 913 | s ^ "_" | 
| 46378 | 914 | else | 
| 915 | String.substring (s, 0, n - 1) ^ | |
| 916 | String.str (Char.toUpper (String.sub (s, n - 1))) | |
| 917 | end | |
| 918 | ||
| 45939 
711fec5b4f61
don't try to avoid SPASS keywords; instead, just suffix an underscore to all generated identifiers
 blanchet parents: 
45938diff
changeset | 919 | fun nice_atp_problem readable_names format problem = | 
| 
711fec5b4f61
don't try to avoid SPASS keywords; instead, just suffix an underscore to all generated identifiers
 blanchet parents: 
45938diff
changeset | 920 | let | 
| 
711fec5b4f61
don't try to avoid SPASS keywords; instead, just suffix an underscore to all generated identifiers
 blanchet parents: 
45938diff
changeset | 921 | val empty_pool = | 
| 
711fec5b4f61
don't try to avoid SPASS keywords; instead, just suffix an underscore to all generated identifiers
 blanchet parents: 
45938diff
changeset | 922 | if readable_names then SOME (Symtab.empty, Symtab.empty) else NONE | 
| 46643 
a88bccd2b567
added support for Alt-Ergo through Why3 (mostly for experimental purposes, e.g. polymorphism vs. monomorphization)
 blanchet parents: 
46445diff
changeset | 923 | val avoid_clash = | 
| 54829 | 924 | (case format of | 
| 52995 
ab98feb66684
Vampire 3.0 requires types to be declared -- make it happy (and get rid of "implicit" types since only Satallax seems to support them anymore)
 blanchet parents: 
52353diff
changeset | 925 | TFF Polymorphic => avoid_clash_with_alt_ergo_type_vars | 
| 48131 | 926 | | DFG _ => avoid_clash_with_dfg_keywords | 
| 54829 | 927 | | _ => I) | 
| 46643 
a88bccd2b567
added support for Alt-Ergo through Why3 (mostly for experimental purposes, e.g. polymorphism vs. monomorphization)
 blanchet parents: 
46445diff
changeset | 928 | val nice_name = nice_name avoid_clash | 
| 54820 | 929 | |
| 52001 
2fb33d73c366
more work on implementing datatype output for new SPASS
 blanchet parents: 
52000diff
changeset | 930 | fun nice_bound_tvars xs = | 
| 52003 | 931 | fold_map (nice_name o fst) xs | 
| 932 | ##>> fold_map (fold_map nice_name o snd) xs | |
| 52001 
2fb33d73c366
more work on implementing datatype output for new SPASS
 blanchet parents: 
52000diff
changeset | 933 | #>> op ~~ | 
| 54820 | 934 | |
| 935 | fun nice_type (AType ((name, clss), tys)) = | |
| 936 | nice_name name ##>> fold_map nice_name clss ##>> fold_map nice_type tys #>> AType | |
| 45939 
711fec5b4f61
don't try to avoid SPASS keywords; instead, just suffix an underscore to all generated identifiers
 blanchet parents: 
45938diff
changeset | 937 | | nice_type (AFun (ty1, ty2)) = nice_type ty1 ##>> nice_type ty2 #>> AFun | 
| 54820 | 938 | | nice_type (APi (names, ty)) = fold_map nice_name names ##>> nice_type ty #>> APi | 
| 939 | ||
| 48132 
9aa0fad4e864
added type arguments to "ATerm" constructor -- but don't use them yet
 blanchet parents: 
48131diff
changeset | 940 | fun nice_term (ATerm ((name, tys), ts)) = | 
| 54820 | 941 | nice_name name ##>> fold_map nice_type tys ##>> fold_map nice_term ts #>> ATerm | 
| 47911 
2168126446bb
extend ATP data structure to avoid having to perform ((non-)capture avoiding) beta reduction -- fixes a bug in the THF translation of "is_measure.simps"
 blanchet parents: 
47768diff
changeset | 942 | | nice_term (AAbs (((name, ty), tm), args)) = | 
| 54820 | 943 | nice_name name ##>> nice_type ty ##>> nice_term tm ##>> fold_map nice_term args #>> AAbs | 
| 944 | ||
| 48133 
a5ab5964065f
implement polymorphic DFG output, without type classes for now
 blanchet parents: 
48132diff
changeset | 945 | fun nice_formula (ATyQuant (q, xs, phi)) = | 
| 52003 | 946 | fold_map (nice_type o fst) xs | 
| 947 | ##>> fold_map (fold_map nice_name o snd) xs | |
| 48142 
efaff8206967
finished implementation of DFG type class output
 blanchet parents: 
48141diff
changeset | 948 | ##>> nice_formula phi | 
| 48141 | 949 | #>> (fn ((tys, cls), phi) => ATyQuant (q, tys ~~ cls, phi)) | 
| 48133 
a5ab5964065f
implement polymorphic DFG output, without type classes for now
 blanchet parents: 
48132diff
changeset | 950 | | nice_formula (AQuant (q, xs, phi)) = | 
| 52003 | 951 | fold_map (nice_name o fst) xs | 
| 952 | ##>> fold_map (fn (_, NONE) => pair NONE | |
| 953 | | (_, SOME ty) => nice_type ty #>> SOME) xs | |
| 45939 
711fec5b4f61
don't try to avoid SPASS keywords; instead, just suffix an underscore to all generated identifiers
 blanchet parents: 
45938diff
changeset | 954 | ##>> nice_formula phi | 
| 
711fec5b4f61
don't try to avoid SPASS keywords; instead, just suffix an underscore to all generated identifiers
 blanchet parents: 
45938diff
changeset | 955 | #>> (fn ((ss, ts), phi) => AQuant (q, ss ~~ ts, phi)) | 
| 
711fec5b4f61
don't try to avoid SPASS keywords; instead, just suffix an underscore to all generated identifiers
 blanchet parents: 
45938diff
changeset | 956 | | nice_formula (AConn (c, phis)) = | 
| 52002 | 957 | fold_map nice_formula phis #>> curry AConn c | 
| 45939 
711fec5b4f61
don't try to avoid SPASS keywords; instead, just suffix an underscore to all generated identifiers
 blanchet parents: 
45938diff
changeset | 958 | | nice_formula (AAtom tm) = nice_term tm #>> AAtom | 
| 54820 | 959 | |
| 48141 | 960 | fun nice_line (Class_Decl (ident, cl, cls)) = | 
| 52002 | 961 | nice_name cl ##>> fold_map nice_name cls | 
| 48141 | 962 | #>> (fn (cl, cls) => Class_Decl (ident, cl, cls)) | 
| 48142 
efaff8206967
finished implementation of DFG type class output
 blanchet parents: 
48141diff
changeset | 963 | | nice_line (Type_Decl (ident, ty, ary)) = | 
| 
efaff8206967
finished implementation of DFG type class output
 blanchet parents: 
48141diff
changeset | 964 | nice_name ty #>> (fn ty => Type_Decl (ident, ty, ary)) | 
| 48140 | 965 | | nice_line (Sym_Decl (ident, sym, ty)) = | 
| 54820 | 966 | nice_name sym ##>> nice_type ty #>> (fn (sym, ty) => Sym_Decl (ident, sym, ty)) | 
| 56683 
7f4ae504e059
reintroduced '...' (nonexhaustive) syntax for SPASS-Pirate
 blanchet parents: 
54829diff
changeset | 967 | | nice_line (Datatype_Decl (ident, xs, ty, tms, exhaust)) = | 
| 52002 | 968 | nice_bound_tvars xs ##>> nice_type ty ##>> fold_map nice_term tms | 
| 56683 
7f4ae504e059
reintroduced '...' (nonexhaustive) syntax for SPASS-Pirate
 blanchet parents: 
54829diff
changeset | 969 | #>> (fn ((xs, ty), tms) => Datatype_Decl (ident, xs, ty, tms, exhaust)) | 
| 48142 
efaff8206967
finished implementation of DFG type class output
 blanchet parents: 
48141diff
changeset | 970 | | nice_line (Class_Memb (ident, xs, ty, cl)) = | 
| 52001 
2fb33d73c366
more work on implementing datatype output for new SPASS
 blanchet parents: 
52000diff
changeset | 971 | nice_bound_tvars xs ##>> nice_type ty ##>> nice_name cl | 
| 
2fb33d73c366
more work on implementing datatype output for new SPASS
 blanchet parents: 
52000diff
changeset | 972 | #>> (fn ((xs, ty), cl) => Class_Memb (ident, xs, ty, cl)) | 
| 48140 | 973 | | nice_line (Formula (ident, kind, phi, source, info)) = | 
| 54820 | 974 | nice_formula phi #>> (fn phi => Formula (ident, kind, phi, source, info)) | 
| 975 | ||
| 45939 
711fec5b4f61
don't try to avoid SPASS keywords; instead, just suffix an underscore to all generated identifiers
 blanchet parents: 
45938diff
changeset | 976 | fun nice_problem problem = | 
| 54820 | 977 | fold_map (fn (heading, lines) => fold_map nice_line lines #>> pair heading) problem | 
| 978 | in | |
| 979 | nice_problem problem empty_pool | |
| 980 | end | |
| 37509 
f39464d971c4
factor out TPTP format output into file of its own, to facilitate further changes
 blanchet parents: diff
changeset | 981 | |
| 
f39464d971c4
factor out TPTP format output into file of its own, to facilitate further changes
 blanchet parents: diff
changeset | 982 | end; |