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