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