src/HOL/TPTP/TPTP_Parser/tptp_syntax.ML
author sultana
Fri, 09 Mar 2012 15:38:55 +0000
changeset 46844 5d9aab0c609c
child 47357 15e579392a68
permissions -rw-r--r--
added tptp parser;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
46844
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
     1
(*  Title:      HOL/TPTP/TPTP_Parser/tptp_syntax.ML
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
     2
    Author:     Nik Sultana, Cambridge University Computer Laboratory
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
     3
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
     4
TPTP abstract syntax and parser-related definitions.
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
     5
*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
     6
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
     7
signature TPTP_SYNTAX =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
     8
sig
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
     9
  exception TPTP_SYNTAX of string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    10
  val debug: ('a -> unit) -> 'a -> unit
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    11
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    12
(*Note that in THF "^ [X] : ^ [Y] : f @ g" should parse
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    13
  as "(^ [X] : (^ [Y] : f)) @ g"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    14
*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    15
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    16
  datatype number_kind = Int_num | Real_num | Rat_num
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    17
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    18
  datatype status_value =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    19
      Suc | Unp | Sap | Esa | Sat | Fsa
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    20
    | Thm | Eqv | Tac | Wec | Eth | Tau
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    21
    | Wtc | Wth | Cax | Sca | Tca | Wca
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    22
    | Cup | Csp | Ecs | Csa | Cth | Ceq
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    23
    | Unc | Wcc | Ect | Fun | Uns | Wuc
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    24
    | Wct | Scc | Uca | Noc
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    25
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    26
  type name = string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    27
  type atomic_word = string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    28
  type inference_rule = atomic_word
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    29
  type file_info = name option
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    30
  type single_quoted = string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    31
  type file_name = single_quoted
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    32
  type creator_name = atomic_word
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    33
  type variable = string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    34
  type upper_word = string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    35
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    36
  datatype language = FOF | CNF | TFF | THF | FOT | TFF_with_arithmetic
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    37
  and role =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    38
     Role_Axiom | Role_Hypothesis | Role_Definition | Role_Assumption |
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    39
     Role_Lemma | Role_Theorem | Role_Conjecture | Role_Negated_Conjecture |
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    40
     Role_Plain | Role_Fi_Domain | Role_Fi_Functors | Role_Fi_Predicates |
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    41
     Role_Type | Role_Unknown
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    42
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    43
  and general_data = (*Bind of variable * formula_data*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    44
     Atomic_Word of string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    45
   | Application of string * general_term list (*general_function*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    46
   | V of upper_word (*variable*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    47
   | Number of number_kind * string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    48
   | Distinct_Object of string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    49
   | (*formula_data*) Formula_Data of language * tptp_formula (* $thf(<thf_formula>) *)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    50
   | (*formula_data*) Term_Data of tptp_term
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    51
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    52
  and interpreted_symbol =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    53
    UMinus | Sum | Difference | Product | Quotient | Quotient_E |
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    54
    Quotient_T | Quotient_F | Remainder_E | Remainder_T | Remainder_F |
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    55
    Floor | Ceiling | Truncate | Round | To_Int | To_Rat | To_Real |
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    56
    (*these should be in defined_pred, but that's not being used in TPTP*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    57
    Less | LessEq | Greater | GreaterEq | EvalEq | Is_Int | Is_Rat |
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    58
    Apply (*this is just a matter of convenience*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    59
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    60
  and logic_symbol = Equals | NEquals | Or | And | Iff | If | Fi | Xor |
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    61
    Nor | Nand | Not | Op_Forall | Op_Exists |
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    62
    (*these should be in defined_pred, but that's not being used in TPTP*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    63
    True | False
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    64
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    65
  and quantifier = (*interpreted binders*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    66
    Forall | Exists | Epsilon | Iota | Lambda | Dep_Prod | Dep_Sum
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    67
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    68
  and tptp_base_type =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    69
    Type_Ind | Type_Bool | Type_Type | Type_Int | Type_Rat | Type_Real
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    70
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    71
  and symbol =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    72
      Uninterpreted of string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    73
    | Interpreted_ExtraLogic of interpreted_symbol
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    74
    | Interpreted_Logic of logic_symbol
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    75
    | TypeSymbol of tptp_base_type
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    76
    | System of string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    77
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    78
  and general_term =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    79
      General_Data of general_data (*general_data*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    80
    | General_Term of general_data * general_term (*general_data : general_term*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    81
    | General_List of general_term list
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    82
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    83
  and tptp_term =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    84
      Term_Func of symbol * tptp_term list
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    85
    | Term_Var of string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    86
    | Term_Conditional of tptp_formula * tptp_term * tptp_term
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    87
    | Term_Num of number_kind * string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    88
    | Term_Distinct_Object of string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    89
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    90
  and tptp_atom =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    91
      TFF_Typed_Atom of symbol * tptp_type option (*only TFF*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    92
    | THF_Atom_term of tptp_term   (*from here on, only THF*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    93
    | THF_Atom_conn_term of symbol
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    94
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    95
  and tptp_formula =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    96
      Pred of symbol * tptp_term list
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    97
    | Fmla of symbol * tptp_formula list
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    98
    | Sequent of tptp_formula list * tptp_formula list
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
    99
    | Quant of quantifier * (string * tptp_type option) list * tptp_formula
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   100
    | Conditional of tptp_formula * tptp_formula * tptp_formula
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   101
    | Let of tptp_let list * tptp_formula
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   102
    | Atom of tptp_atom
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   103
    | THF_type of tptp_type
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   104
    | THF_typing of tptp_formula * tptp_type (*only THF*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   105
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   106
  and tptp_let =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   107
      Let_fmla of (string * tptp_type option) * tptp_formula
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   108
    | Let_term of (string * tptp_type option) * tptp_term  (*only TFF*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   109
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   110
  and tptp_type =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   111
      Prod_type of tptp_type * tptp_type
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   112
    | Fn_type of tptp_type * tptp_type
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   113
    | Atom_type of string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   114
    | Defined_type of tptp_base_type
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   115
    | Sum_type of tptp_type * tptp_type (*only THF*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   116
    | Fmla_type of tptp_formula (*only THF*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   117
    | Subtype of symbol * symbol (*only THF*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   118
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   119
  type general_list = general_term list
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   120
  type parent_details = general_list
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   121
  type useful_info = general_term list
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   122
  type info = useful_info
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   123
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   124
  type annotation = general_term * general_term list
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   125
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   126
  exception DEQUOTE of string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   127
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   128
  type position = string * int * int
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   129
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   130
  datatype tptp_line =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   131
      Annotated_Formula of position * language * string * role * tptp_formula * annotation option
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   132
   |  Include of string * string list
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   133
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   134
  type tptp_problem = tptp_line list
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   135
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   136
  val dequote : single_quoted -> single_quoted
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   137
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   138
  val role_to_string : role -> string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   139
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   140
  val status_to_string : status_value -> string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   141
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   142
  val nameof_tff_atom_type : tptp_type -> string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   143
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   144
  (*Returns the list of all files included in a directory and its
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   145
  subdirectories. This is only used for testing the parser/interpreter against
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   146
  all THF problems.*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   147
  val get_file_list : Path.T -> Path.T list
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   148
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   149
  val string_of_tptp_term : tptp_term -> string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   150
  val string_of_tptp_formula : tptp_formula -> string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   151
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   152
end
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   153
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   154
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   155
structure TPTP_Syntax : TPTP_SYNTAX =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   156
struct
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   157
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   158
exception TPTP_SYNTAX of string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   159
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   160
datatype number_kind = Int_num | Real_num | Rat_num
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   161
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   162
datatype status_value =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   163
    Suc | Unp | Sap | Esa | Sat | Fsa
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   164
  | Thm | Eqv | Tac | Wec | Eth | Tau
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   165
  | Wtc | Wth | Cax | Sca | Tca | Wca
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   166
  | Cup | Csp | Ecs | Csa | Cth | Ceq
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   167
  | Unc | Wcc | Ect | Fun | Uns | Wuc
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   168
  | Wct | Scc | Uca | Noc
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   169
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   170
type name = string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   171
type atomic_word = string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   172
type inference_rule = atomic_word
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   173
type file_info = name option
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   174
type single_quoted = string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   175
type file_name = single_quoted
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   176
type creator_name = atomic_word
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   177
type variable = string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   178
type upper_word = string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   179
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   180
datatype language = FOF | CNF | TFF | THF | FOT | TFF_with_arithmetic
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   181
and role =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   182
  Role_Axiom | Role_Hypothesis | Role_Definition | Role_Assumption |
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   183
  Role_Lemma | Role_Theorem | Role_Conjecture | Role_Negated_Conjecture |
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   184
  Role_Plain | Role_Fi_Domain | Role_Fi_Functors | Role_Fi_Predicates |
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   185
  Role_Type | Role_Unknown
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   186
and general_data = (*Bind of variable * formula_data*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   187
    Atomic_Word of string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   188
  | Application of string * (general_term list)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   189
  | V of upper_word (*variable*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   190
  | Number of number_kind * string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   191
  | Distinct_Object of string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   192
  | (*formula_data*) Formula_Data of language * tptp_formula (* $thf(<thf_formula>) *)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   193
  | (*formula_data*) Term_Data of tptp_term
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   194
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   195
  and interpreted_symbol =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   196
    UMinus | Sum | Difference | Product | Quotient | Quotient_E |
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   197
    Quotient_T | Quotient_F | Remainder_E | Remainder_T | Remainder_F |
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   198
    Floor | Ceiling | Truncate | Round | To_Int | To_Rat | To_Real |
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   199
    (*these should be in defined_pred, but that's not being used in TPTP*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   200
    Less | LessEq | Greater | GreaterEq | EvalEq | Is_Int | Is_Rat |
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   201
    Apply (*this is just a matter of convenience*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   202
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   203
  and logic_symbol = Equals | NEquals | Or | And | Iff | If | Fi | Xor |
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   204
    Nor | Nand | Not | Op_Forall | Op_Exists |
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   205
    (*these should be in defined_pred, but that's not being used in TPTP*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   206
    True | False
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   207
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   208
  and quantifier = (*interpreted binders*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   209
    Forall | Exists | Epsilon | Iota | Lambda | Dep_Prod | Dep_Sum
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   210
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   211
  and tptp_base_type =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   212
    Type_Ind | Type_Bool | Type_Type | Type_Int | Type_Rat | Type_Real
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   213
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   214
  and symbol =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   215
      Uninterpreted of string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   216
    | Interpreted_ExtraLogic of interpreted_symbol
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   217
    | Interpreted_Logic of logic_symbol
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   218
    | TypeSymbol of tptp_base_type
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   219
    | System of string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   220
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   221
  and general_term =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   222
      General_Data of general_data (*general_data*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   223
    | General_Term of general_data * general_term (*general_data : general_term*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   224
    | General_List of general_term list
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   225
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   226
  and tptp_term =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   227
      Term_Func of symbol * tptp_term list
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   228
    | Term_Var of string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   229
    | Term_Conditional of tptp_formula * tptp_term * tptp_term
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   230
    | Term_Num of number_kind * string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   231
    | Term_Distinct_Object of string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   232
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   233
  and tptp_atom =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   234
      TFF_Typed_Atom of symbol * tptp_type option (*only TFF*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   235
    | THF_Atom_term of tptp_term   (*from here on, only THF*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   236
    | THF_Atom_conn_term of symbol
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   237
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   238
  and tptp_formula =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   239
      Pred of symbol * tptp_term list
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   240
    | Fmla of symbol * tptp_formula list
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   241
    | Sequent of tptp_formula list * tptp_formula list
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   242
    | Quant of quantifier * (string * tptp_type option) list * tptp_formula
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   243
    | Conditional of tptp_formula * tptp_formula * tptp_formula
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   244
    | Let of tptp_let list * tptp_formula
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   245
    | Atom of tptp_atom
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   246
    | THF_type of tptp_type
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   247
    | THF_typing of tptp_formula * tptp_type
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   248
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   249
  and tptp_let =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   250
      Let_fmla of (string * tptp_type option) * tptp_formula (*both TFF and THF*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   251
    | Let_term of (string * tptp_type option) * tptp_term  (*only TFF*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   252
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   253
  and tptp_type =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   254
      Prod_type of tptp_type * tptp_type
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   255
    | Fn_type of tptp_type * tptp_type
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   256
    | Atom_type of string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   257
    | Defined_type of tptp_base_type
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   258
    | Sum_type of tptp_type * tptp_type (*only THF*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   259
    | Fmla_type of tptp_formula (*only THF*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   260
    | Subtype of symbol * symbol (*only THF*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   261
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   262
type general_list = general_term list
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   263
type parent_details = general_list
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   264
type useful_info = general_term list
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   265
type info = useful_info
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   266
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   267
(*type annotation = (source * info option)*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   268
type annotation = general_term * general_term list
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   269
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   270
exception DEQUOTE of string
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   271
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   272
(*
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   273
datatype defined_functor =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   274
  ITE_T | UMINUS | SUM | DIFFERENCE | PRODUCT | QUOTIENT | QUOTIENT_E |
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   275
  QUOTIENT_T | QUOTIENT_F | REMAINDER_E | REMAINDER_T | REMAINDER_F |
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   276
  FLOOR | CEILING | TRUNCATE | ROUND | TO_INT | TO_RAT | TO_REAL
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   277
*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   278
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   279
type position = string * int * int
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   280
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   281
datatype tptp_line =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   282
    Annotated_Formula of position * language * string * role * tptp_formula * annotation option
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   283
 |  Include of string * string list
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   284
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   285
type tptp_problem = tptp_line list
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   286
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   287
fun debug f x = if !Runtime.debug then (f x; ()) else ()
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   288
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   289
fun nameof_tff_atom_type (Atom_type str) = str
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   290
  | nameof_tff_atom_type _ = raise TPTP_SYNTAX "nameof_tff_atom_type called on non-atom type"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   291
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   292
(*Used for debugging. Returns all files contained within a directory or its
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   293
subdirectories. Follows symbolic links, filters away directories.*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   294
fun get_file_list path =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   295
  let
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   296
    fun check_file_entry f rest =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   297
      let
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   298
        (*NOTE needed since no File.is_link and File.read_link*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   299
        val f_str = Path.implode f
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   300
      in
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   301
        if File.is_dir f then
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   302
          rest @ get_file_list f
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   303
        else if OS.FileSys.isLink f_str then
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   304
          (*follow links -- NOTE this breaks if links are relative paths*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   305
          check_file_entry (Path.explode (OS.FileSys.readLink f_str)) rest
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   306
        else f :: rest
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   307
      end
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   308
  in
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   309
    File.read_dir path
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   310
    |> map
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   311
        (Path.explode
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   312
        #> Path.append path)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   313
    |> (fn l => fold check_file_entry l [])
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   314
  end
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   315
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   316
fun role_to_string role =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   317
  case role of
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   318
      Role_Axiom => "axiom"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   319
    | Role_Hypothesis => "hypothesis"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   320
    | Role_Definition => "definition"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   321
    | Role_Assumption => "assumption"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   322
    | Role_Lemma => "lemma"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   323
    | Role_Theorem => "theorem"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   324
    | Role_Conjecture => "conjecture"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   325
    | Role_Negated_Conjecture => "negated_conjecture"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   326
    | Role_Plain => "plain"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   327
    | Role_Fi_Domain => "fi_domain"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   328
    | Role_Fi_Functors => "fi_functors"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   329
    | Role_Fi_Predicates => "fi_predicates"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   330
    | Role_Type => "type"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   331
    | Role_Unknown => "unknown"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   332
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   333
(*accepts a string "'abc'" and returns "abc"*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   334
fun dequote str : single_quoted =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   335
  if str = "" then
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   336
    raise (DEQUOTE "empty string")
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   337
  else
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   338
    (unprefix "'" str
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   339
    |> unsuffix "'"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   340
    handle (Fail str) =>
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   341
      if str = "unprefix" then
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   342
        raise DEQUOTE ("string doesn't open with quote:" ^ str)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   343
      else if str = "unsuffix" then
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   344
        raise DEQUOTE ("string doesn't close with quote:" ^ str)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   345
      else raise Fail str)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   346
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   347
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   348
(* Printing parsed TPTP formulas *)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   349
(*FIXME this is not pretty-printing, just printing*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   350
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   351
fun status_to_string status_value =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   352
  case status_value of
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   353
      Suc => "suc"	| Unp => "unp"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   354
    | Sap => "sap"  | Esa => "esa"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   355
    | Sat => "sat"  | Fsa => "fsa"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   356
    | Thm => "thm"  | Wuc => "wuc"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   357
    | Eqv => "eqv"	| Tac => "tac"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   358
    | Wec => "wec"	| Eth => "eth"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   359
    | Tau => "tau"	| Wtc => "wtc"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   360
    | Wth => "wth"	| Cax => "cax"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   361
    | Sca => "sca"	| Tca => "tca"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   362
    | Wca => "wca"	| Cup => "cup"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   363
    | Csp => "csp"	| Ecs => "ecs"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   364
    | Csa => "csa"	| Cth => "cth"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   365
    | Ceq => "ceq"	| Unc => "unc"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   366
    | Wcc => "wcc"	| Ect => "ect"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   367
    | Fun => "fun"	| Uns => "uns"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   368
    | Wct => "wct"	| Scc => "scc"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   369
    | Uca => "uca"	| Noc => "noc"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   370
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   371
fun string_of_tptp_term x =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   372
  case x of
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   373
      Term_Func (symbol, tptp_term_list) =>
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   374
        "(" ^ string_of_symbol symbol ^ " " ^
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   375
        String.concatWith " " (map string_of_tptp_term tptp_term_list) ^ ")"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   376
    | Term_Var str => str
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   377
    | Term_Conditional (tptp_formula, tptp_term1, tptp_term2) => "" (*FIXME*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   378
    | Term_Num (_, str) => str
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   379
    | Term_Distinct_Object str => str
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   380
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   381
and string_of_symbol (Uninterpreted str) = str
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   382
  | string_of_symbol (Interpreted_ExtraLogic interpreted_symbol) = string_of_interpreted_symbol interpreted_symbol
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   383
  | string_of_symbol (Interpreted_Logic logic_symbol) = string_of_logic_symbol logic_symbol
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   384
  | string_of_symbol (TypeSymbol tptp_base_type) = string_of_tptp_base_type tptp_base_type
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   385
  | string_of_symbol (System str) = str
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   386
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   387
and string_of_tptp_base_type Type_Ind = "$i"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   388
  | string_of_tptp_base_type Type_Bool = "$o"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   389
  | string_of_tptp_base_type Type_Type = "$tType"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   390
  | string_of_tptp_base_type Type_Int = "$int"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   391
  | string_of_tptp_base_type Type_Rat = "$rat"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   392
  | string_of_tptp_base_type Type_Real = "$real"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   393
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   394
and string_of_interpreted_symbol x =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   395
  case x of
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   396
      UMinus => "$uminus"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   397
    | Sum => "$sum"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   398
    | Difference => "$difference"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   399
    | Product => "$product"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   400
    | Quotient => "$quotient"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   401
    | Quotient_E => "$quotient_e"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   402
    | Quotient_T => "$quotient_t"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   403
    | Quotient_F => "$quotient_f"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   404
    | Remainder_E => "$remainder_e"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   405
    | Remainder_T => "$remainder_t"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   406
    | Remainder_F => "$remainder_f"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   407
    | Floor => "$floor"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   408
    | Ceiling => "$ceiling"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   409
    | Truncate => "$truncate"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   410
    | Round => "$round"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   411
    | To_Int => "$to_int"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   412
    | To_Rat => "$to_rat"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   413
    | To_Real => "$to_real"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   414
    | Less => "$less"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   415
    | LessEq => "$lesseq"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   416
    | Greater => "$greater"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   417
    | GreaterEq => "$greatereq"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   418
    | EvalEq => "$evaleq"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   419
    | Is_Int => "$is_int"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   420
    | Is_Rat => "$is_rat"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   421
    | Apply => "@"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   422
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   423
and string_of_logic_symbol Equals = "="
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   424
  | string_of_logic_symbol NEquals = "!="
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   425
  | string_of_logic_symbol Or = "|"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   426
  | string_of_logic_symbol And = "&"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   427
  | string_of_logic_symbol Iff = "<=>"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   428
  | string_of_logic_symbol If = "=>"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   429
  | string_of_logic_symbol Fi = "<="
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   430
  | string_of_logic_symbol Xor = "<~>"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   431
  | string_of_logic_symbol Nor = "~|"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   432
  | string_of_logic_symbol Nand = "~&"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   433
  | string_of_logic_symbol Not = "~"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   434
  | string_of_logic_symbol Op_Forall = "!!"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   435
  | string_of_logic_symbol Op_Exists = "??"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   436
  | string_of_logic_symbol True = "$true"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   437
  | string_of_logic_symbol False = "$false"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   438
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   439
and string_of_quantifier Forall = "!"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   440
  | string_of_quantifier Exists  = "?"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   441
  | string_of_quantifier Epsilon  = "@+"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   442
  | string_of_quantifier Iota  = "@-"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   443
  | string_of_quantifier Lambda  = "^"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   444
  | string_of_quantifier Dep_Prod = "!>"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   445
  | string_of_quantifier Dep_Sum  = "?*"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   446
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   447
and string_of_tptp_atom (TFF_Typed_Atom (symbol, tptp_type_option)) =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   448
    (case tptp_type_option of
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   449
       NONE => string_of_symbol symbol
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   450
     | SOME tptp_type =>
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   451
         string_of_symbol symbol ^ " : " ^ string_of_tptp_type tptp_type)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   452
  | string_of_tptp_atom (THF_Atom_term tptp_term) = string_of_tptp_term tptp_term
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   453
  | string_of_tptp_atom (THF_Atom_conn_term symbol) = string_of_symbol symbol
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   454
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   455
and string_of_tptp_formula (Pred (symbol, tptp_term_list)) =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   456
      "(" ^ string_of_symbol symbol ^
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   457
      String.concatWith " " (map string_of_tptp_term tptp_term_list) ^ ")"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   458
  | string_of_tptp_formula (Fmla (symbol, tptp_formula_list)) =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   459
      "(" ^
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   460
      string_of_symbol symbol ^
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   461
      String.concatWith " " (map string_of_tptp_formula tptp_formula_list) ^ ")"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   462
  | string_of_tptp_formula (Sequent (tptp_formula_list1, tptp_formula_list2)) = "" (*FIXME*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   463
  | string_of_tptp_formula (Quant (quantifier, varlist, tptp_formula)) =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   464
      string_of_quantifier quantifier ^ "[" ^
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   465
      String.concatWith ", " (map (fn (n, ty) =>
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   466
        case ty of
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   467
          NONE => n
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   468
        | SOME ty => n ^ " : " ^ string_of_tptp_type ty) varlist) ^ "] : (" ^
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   469
      string_of_tptp_formula tptp_formula ^ ")"
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   470
  | string_of_tptp_formula (Conditional _) = "" (*FIXME*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   471
  | string_of_tptp_formula (Let _) = "" (*FIXME*)
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   472
  | string_of_tptp_formula (Atom tptp_atom) = string_of_tptp_atom tptp_atom
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   473
  | string_of_tptp_formula (THF_type tptp_type) = string_of_tptp_type tptp_type
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   474
  | string_of_tptp_formula (THF_typing (tptp_formula, tptp_type)) =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   475
      string_of_tptp_formula tptp_formula ^ " : " ^ string_of_tptp_type tptp_type
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   476
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   477
and string_of_tptp_type (Prod_type (tptp_type1, tptp_type2)) =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   478
      string_of_tptp_type tptp_type1 ^ " * " ^ string_of_tptp_type tptp_type2
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   479
  | string_of_tptp_type (Fn_type (tptp_type1, tptp_type2)) =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   480
      string_of_tptp_type tptp_type1 ^ " > " ^ string_of_tptp_type tptp_type2
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   481
  | string_of_tptp_type (Atom_type str) = str
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   482
  | string_of_tptp_type (Defined_type tptp_base_type) =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   483
      string_of_tptp_base_type tptp_base_type
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   484
  | string_of_tptp_type (Sum_type (tptp_type1, tptp_type2)) = ""
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   485
  | string_of_tptp_type (Fmla_type tptp_formula) = string_of_tptp_formula tptp_formula
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   486
  | string_of_tptp_type (Subtype (symbol1, symbol2)) =
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   487
      string_of_symbol symbol1 ^ " << " ^ string_of_symbol symbol2
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   488
5d9aab0c609c added tptp parser;
sultana
parents:
diff changeset
   489
end