<!-- saved from url=(0049)http://www.cs.miami.edu/~tptp/TPTP/SyntaxBNF.html -->
<html data-ember-extension="1"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>TPTP Syntax</title></head><body><a name="TOPOFPAGE"></a><tt>
%----v6.4.0.0 (TPTP version.internal development number)<br>
%----v6.4.0.1 Noted that <number>s may not be used in CNF or FOF.<br>
%----v6.4.0.2 Added tcf<br>
%----v6.4.0.3 Moved ^ into <th0_quantifier><br>
%----v6.4.0.4 Changed <thf_top_level_type> and <thf_unitary_type> to be more<br>
%---- precise. <thf_binary_type> removed from <thf_binary_formula>.<br>
%----v6.4.0.5 Specified that the quantification in a $let must be universal.<br>
%---- Added ()s around the <thf_let_plain_defn> in a<br>
%---- <thf_let_quantified_defn> (to avoid binding ambiguity).<br>
%----v6.4.0.6 Changed $ite to be an instance of a <thf_unitary_formula>, so<br>
%---- it uses application rather than FOF style $ite(...).<br>
%----v6.4.0.7 Added := to the THF binary connectives, to accomodate logic<br>
%---- specifications. This changed $let to use <thf_unitary_formula><br>
%---- for it's first arguments; the original rule hierarchy for $let<br>
%---- has been changed to :== semantic rules. Semantic rules for logic<br>
%---- specifications have been added.<br>
%----v6.4.0.8 Added := to the TFF binary connectives, to accomodate logic<br>
%---- specifications.<br>
%----v6.4.0.9 Split off TFX language, for FOOL and modal logic.<br>
%----v6.4.0.10 Renamed things to separate THF from TFF from FOF from general<br>
%----v6.4.0.11 Added <tff_subtype> back<br>
%------------------------------------------------------------------------------<br>
%----README ... this header provides important meta- and usage information<br>
%----<br>
%----Intended uses of the various parts of the TPTP syntax are explained<br>
%----in the TPTP technical manual, linked from www.tptp.org.<br>
%----<br>
%----Four kinds of separators are used, to indicate different types of rules:<br>
%---- ::= is used for regular grammar rules, for syntactic parsing.<br>
%---- :== is used for semantic grammar rules. These define specific values<br>
%---- that make semantic sense when more general syntactic rules apply.<br>
%---- ::- is used for rules that produce tokens.<br>
%---- ::: is used for rules that define character classes used in the<br>
%---- construction of tokens.<br>
%----<br>
%----White space may occur between any two tokens. White space is not specified<br>
%----in the grammar, but there are some restrictions to ensure that the grammar<br>
%----is compatible with standard Prolog: a <TPTP_file> should be readable with<br>
%----read/1.<br>
%----<br>
%----The syntax of comments is defined by the <comment> rule. Comments may<br>
%----occur between any two tokens, but do not act as white space. Comments<br>
%----will normally be discarded at the lexical level, but may be processed<br>
%----by systems that understand them (e.g., if the system comment convention<br>
%----is followed).<br>
%----<br>
%----Four languages are defined first - THF, TFF, FOF, and CNF. Depending on<br>
%----your need, you can implement just the one(s) you need. The common rules<br>
%----for atoms, terms, etc, come after the definitions of the languages, and<br>
%----they are all needed for all four languages (except for the core THF0,<br>
%----which is a defined subset of THF).<br>
%----<a href="#TOPOFPAGE">Top of Page</a>---------------------------------------------------------------<br>
%----Files. Empty file is OK.<br>
<<a name="TPTP_file">TPTP_file</a>> ::= <<a href="#TPTP_input">TPTP_input</a>>*<br>
<<a name="TPTP_input">TPTP_input</a>> ::= <<a href="#annotated_formula">annotated_formula</a>> | <<a href="#include">include</a>><br>
<br>
%----Formula records<br>
<<a name="annotated_formula">annotated_formula</a>> ::= <<a href="#thf_annotated">thf_annotated</a>> | <<a href="#tfx_annotated">tfx_annotated</a>> | <<a href="#tff_annotated">tff_annotated</a>> |<br>
<<a href="#tcf_annotated">tcf_annotated</a>> | <<a href="#fof_annotated">fof_annotated</a>> | <<a href="#cnf_annotated">cnf_annotated</a>> |<br>
<<a href="#tpi_annotated">tpi_annotated</a>><br>
%----Future languages may include ... english | efof | tfof | mathml | ...<br>
<<a name="tpi_annotated">tpi_annotated</a>> ::= tpi(<<a href="#name">name</a>>,<<a href="#formula_role">formula_role</a>>,<<a href="#tpi_formula">tpi_formula</a>><<a href="#annotations">annotations</a>>).<br>
<<a name="tpi_formula">tpi_formula</a>> ::= <<a href="#fof_formula">fof_formula</a>><br>
<<a name="thf_annotated">thf_annotated</a>> ::= thf(<<a href="#name">name</a>>,<<a href="#formula_role">formula_role</a>>,<<a href="#thf_formula">thf_formula</a>><br>
<<a href="#annotations">annotations</a>>).<br>
<<a name="tfx_annotated">tfx_annotated</a>> ::= tfx(<<a href="#name">name</a>>,<<a href="#formula_role">formula_role</a>>,<<a href="#tfx_formula">tfx_formula</a>><br>
<<a href="#annotations">annotations</a>>).<br>
<<a name="tff_annotated">tff_annotated</a>> ::= tff(<<a href="#name">name</a>>,<<a href="#formula_role">formula_role</a>>,<<a href="#tff_formula">tff_formula</a>><br>
<<a href="#annotations">annotations</a>>).<br>
<<a name="tcf_annotated">tcf_annotated</a>> ::= tcf(<<a href="#name">name</a>>,<<a href="#formula_role">formula_role</a>>,<<a href="#tcf_formula">tcf_formula</a>><br>
<<a href="#annotations">annotations</a>>).<br>
<<a name="fof_annotated">fof_annotated</a>> ::= fof(<<a href="#name">name</a>>,<<a href="#formula_role">formula_role</a>>,<<a href="#fof_formula">fof_formula</a>><br>
<<a href="#annotations">annotations</a>>).<br>
<<a name="cnf_annotated">cnf_annotated</a>> ::= cnf(<<a href="#name">name</a>>,<<a href="#formula_role">formula_role</a>>,<<a href="#cnf_formula">cnf_formula</a>><br>
<<a href="#annotations">annotations</a>>).<br>
<<a name="annotations">annotations</a>> ::= ,<<a href="#source">source</a>><<a href="#optional_info">optional_info</a>> | <<a href="#null">null</a>><br>
%----In derivations the annotated formulae names must be unique, so that<br>
%----parent references (see <inference_record>) are unambiguous.<br>
<br>
%----Types for problems.<br>
%----Note: The previous <source_type> from ...<br>
%---- <formula_role> ::= <user_role>-<source><br>
%----... is now gone. Parsers may choose to be tolerant of it for backwards<br>
%----compatibility.<br>
<<a name="formula_role">formula_role</a>> ::= <<a href="#lower_word">lower_word</a>><br>
<<a name="formula_role">formula_role</a>> :== axiom | hypothesis | definition | assumption |<br>
lemma | theorem | corollary | conjecture |<br>
negated_conjecture | plain | type |<br>
fi_domain | fi_functors | fi_predicates | unknown<br>
%----"axiom"s are accepted, without proof. There is no guarantee that the<br>
%----axioms of a problem are consistent.<br>
%----"hypothesis"s are assumed to be true for a particular problem, and are<br>
%----used like "axiom"s.<br>
%----"definition"s are intended to define symbols. They are either universally<br>
%----quantified equations, or universally quantified equivalences with an<br>
%----atomic lefthand side. They can be treated like "axiom"s.<br>
%----"assumption"s can be used like axioms, but must be discharged before a<br>
%----derivation is complete.<br>
%----"lemma"s and "theorem"s have been proven from the "axiom"s. They can be<br>
%----used like "axiom"s in problems, and a problem containing a non-redundant<br>
%----"lemma" or theorem" is ill-formed. They can also appear in derivations.<br>
%----"theorem"s are more important than "lemma"s from the user perspective.<br>
%----"conjecture"s are to be proven from the "axiom"(-like) formulae. A problem<br>
%----is solved only when all "conjecture"s are proven.<br>
%----"negated_conjecture"s are formed from negation of a "conjecture" (usually<br>
%----in a FOF to CNF conversion).<br>
%----"plain"s have no specified user semantics.<br>
%----"fi_domain", "fi_functors", and "fi_predicates" are used to record the<br>
%----domain, interpretation of functors, and interpretation of predicates, for<br>
%----a finite interpretation.<br>
%----"type" defines the type globally for one symbol; treat as $true.<br>
%----"unknown"s have unknown role, and this is an error situation.<br>
%----<a href="#TOPOFPAGE">Top of Page</a>---------------------------------------------------------------<br>
%----THF formulae.<br>
<<a name="thf_formula">thf_formula</a>> ::= <<a href="#thf_logic_formula">thf_logic_formula</a>> | <<a href="#thf_sequent">thf_sequent</a>><br>
<<a name="thf_logic_formula">thf_logic_formula</a>> ::= <<a href="#thf_binary_formula">thf_binary_formula</a>> | <<a href="#thf_unitary_formula">thf_unitary_formula</a>> |<br>
<<a href="#thf_type_formula">thf_type_formula</a>> | <<a href="#thf_subtype">thf_subtype</a>><br>
<<a name="thf_binary_formula">thf_binary_formula</a>> ::= <<a href="#thf_binary_pair">thf_binary_pair</a>> | <<a href="#thf_binary_tuple">thf_binary_tuple</a>><br>
%----Only some binary connectives can be written without ()s.<br>
%----There's no precedence among binary connectives<br>
<<a name="thf_binary_pair">thf_binary_pair</a>> ::= <<a href="#thf_unitary_formula">thf_unitary_formula</a>> <<a href="#thf_pair_connective">thf_pair_connective</a>><br>
<<a href="#thf_unitary_formula">thf_unitary_formula</a>><br>
<<a name="thf_binary_tuple">thf_binary_tuple</a>> ::= <<a href="#thf_or_formula">thf_or_formula</a>> | <<a href="#thf_and_formula">thf_and_formula</a>> |<br>
<<a href="#thf_apply_formula">thf_apply_formula</a>><br>
<<a name="thf_or_formula">thf_or_formula</a>> ::= <<a href="#thf_unitary_formula">thf_unitary_formula</a>> <<a href="#vline">vline</a>> <<a href="#thf_unitary_formula">thf_unitary_formula</a>> |<br>
<<a href="#thf_or_formula">thf_or_formula</a>> <<a href="#vline">vline</a>> <<a href="#thf_unitary_formula">thf_unitary_formula</a>><br>
<<a name="thf_and_formula">thf_and_formula</a>> ::= <<a href="#thf_unitary_formula">thf_unitary_formula</a>> & <<a href="#thf_unitary_formula">thf_unitary_formula</a>> |<br>
<<a href="#thf_and_formula">thf_and_formula</a>> & <<a href="#thf_unitary_formula">thf_unitary_formula</a>><br>
<<a name="thf_apply_formula">thf_apply_formula</a>> ::= <<a href="#thf_unitary_formula">thf_unitary_formula</a>> @ <<a href="#thf_unitary_formula">thf_unitary_formula</a>> |<br>
<<a href="#thf_apply_formula">thf_apply_formula</a>> @ <<a href="#thf_unitary_formula">thf_unitary_formula</a>><br>
%----<thf_unitary_formula> are in ()s or do not have a <binary_connective> at<br>
%----the top level. Essentially, any lambda expression that "has enough ()s" to<br>
%----be used inside a larger lambda expression. However, lambda notation might<br>
%----not be used.<br>
<<a name="thf_unitary_formula">thf_unitary_formula</a>> ::= <<a href="#thf_quantified_formula">thf_quantified_formula</a>> | <<a href="#thf_unary_formula">thf_unary_formula</a>> |<br>
<<a href="#thf_atom">thf_atom</a>> | <<a href="#thf_conditional">thf_conditional</a>> | <<a href="#thf_let">thf_let</a>> |<br>
<<a href="#thf_tuple">thf_tuple</a>> | (<<a href="#thf_logic_formula">thf_logic_formula</a>>)<br>
<<a name="thf_quantified_formula">thf_quantified_formula</a>> ::= <<a href="#thf_quantification">thf_quantification</a>> <<a href="#thf_unitary_formula">thf_unitary_formula</a>><br>
<<a name="thf_quantification">thf_quantification</a>> ::= <<a href="#thf_quantifier">thf_quantifier</a>> [<<a href="#thf_variable_list">thf_variable_list</a>>] :<br>
%----@ (denoting apply) is left-associative and lambda is right-associative.<br>
%----^ [X] : ^ [Y] : f @ g (where f is a <thf_apply_formula> and g is a<br>
%----<thf_unitary_formula>) should be parsed as: (^ [X] : (^ [Y] : f)) @ g.<br>
%----That is, g is not in the scope of either lambda.<br>
<<a name="thf_variable_list">thf_variable_list</a>> ::= <<a href="#thf_variable">thf_variable</a>> | <<a href="#thf_variable">thf_variable</a>>,<<a href="#thf_variable_list">thf_variable_list</a>><br>
<<a name="thf_variable">thf_variable</a>> ::= <<a href="#thf_typed_variable">thf_typed_variable</a>> | <<a href="#variable">variable</a>><br>
<<a name="thf_typed_variable">thf_typed_variable</a>> ::= <<a href="#variable">variable</a>> : <<a href="#thf_top_level_type">thf_top_level_type</a>><br>
%----Unary connectives bind more tightly than binary. The negated formula<br>
%----must be ()ed because a ~ is also a term.<br>
<<a name="thf_unary_formula">thf_unary_formula</a>> ::= <<a href="#thf_unary_connective">thf_unary_connective</a>> (<<a href="#thf_logic_formula">thf_logic_formula</a>>)<br>
<<a name="thf_atom">thf_atom</a>> ::= <<a href="#thf_function">thf_function</a>> | <<a href="#variable">variable</a>> | <<a href="#defined_term">defined_term</a>> |<br>
<<a href="#thf_conn_term">thf_conn_term</a>><br>
%----Defined terms have TPTP specific interpretations. Note that <thf_atom><br>
%----allows <defined_type>s as terms, which will fail type checking. The<br>
%----user must take care with this liberal syntax!<br>
<<a name="thf_function">thf_function</a>> ::= <<a href="#atom">atom</a>> | <<a href="#functor">functor</a>>(<<a href="#thf_arguments">thf_arguments</a>>) |<br>
<<a href="#defined_functor">defined_functor</a>>(<<a href="#thf_arguments">thf_arguments</a>>) |<br>
<<a href="#system_functor">system_functor</a>>(<<a href="#thf_arguments">thf_arguments</a>>)<br>
%----| <defined_type> | <defined_prop>, but they are captured by <atom> as<br>
%----<defined_constant> as <atomic_defined_word>.<br>
<<a name="thf_conn_term">thf_conn_term</a>> ::= <<a href="#thf_pair_connective">thf_pair_connective</a>> | <<a href="#assoc_connective">assoc_connective</a>> |<br>
<<a href="#thf_unary_connective">thf_unary_connective</a>><br>
%----Note that syntactically this allows (p @ =), but for = the first<br>
%----argument must be known to infer the type of =, so that's not<br>
%----allowed, i.e., only (= @ p).<br>
<<a name="thf_conditional">thf_conditional</a>> ::= $ite(<<a href="#thf_logic_formula">thf_logic_formula</a>>,<<a href="#thf_logic_formula">thf_logic_formula</a>>,<br>
<<a href="#thf_logic_formula">thf_logic_formula</a>>)<br>
%----The LHS of a term or formula binding must be a non-variable term that<br>
%----is flat with pairwise distinct variable arguments, and the variables in<br>
%----the LHS must be exactly those bound in the universally quantified variable<br>
%----list, in the same order. Let definitions are not recursive: a non-variable<br>
%----symbol introduced in the LHS of a let definition cannot occur in the RHS.<br>
%----If a symbol with the same signature as the one in the LHS of the binding<br>
%----is declared above the let expression (at the top level or in an<br>
%----encompassing let) then it can be used in the RHS of the binding, but it is<br>
%----not accessible in the term or formula of the let expression. Let<br>
%----expressions can be eliminated by a simple definition expansion.<br>
<<a name="thf_let">thf_let</a>> ::= $let(<<a href="#thf_unitary_formula">thf_unitary_formula</a>>,<<a href="#thf_formula">thf_formula</a>>)<br>
<<a name="thf_let">thf_let</a>> :== $let(<<a href="#thf_let_defns">thf_let_defns</a>>,<<a href="#thf_formula">thf_formula</a>>)<br>
<<a name="thf_let_defns">thf_let_defns</a>> :== <<a href="#thf_let_defn">thf_let_defn</a>> | [<<a href="#thf_let_defn_list">thf_let_defn_list</a>>]<br>
<<a name="thf_let_defn_list">thf_let_defn_list</a>> :== <<a href="#thf_let_defn">thf_let_defn</a>> | <<a href="#thf_let_defn">thf_let_defn</a>>,<<a href="#thf_let_defn_list">thf_let_defn_list</a>><br>
<<a name="thf_let_defn">thf_let_defn</a>> :== <<a href="#thf_let_quantified_defn">thf_let_quantified_defn</a>> | <<a href="#thf_let_plain_defn">thf_let_plain_defn</a>><br>
<<a name="thf_let_quantified_defn">thf_let_quantified_defn</a>> :== <<a href="#thf_quantification">thf_quantification</a>> (<<a href="#thf_let_plain_defn">thf_let_plain_defn</a>>)<br>
<<a name="thf_let_plain_defn">thf_let_plain_defn</a>> :== <<a href="#thf_let_defn_LHS">thf_let_defn_LHS</a>> <<a href="#assignment">assignment</a>> <<a href="#thf_formula">thf_formula</a>><br>
<<a name="thf_let_defn_LHS">thf_let_defn_LHS</a>> :== <<a href="#constant">constant</a>> | <<a href="#functor">functor</a>>(<<a href="#fof_arguments">fof_arguments</a>>) | <br>
<<a href="#thf_tuple">thf_tuple</a>><br>
%----The <fof_arguments> must all be <variable>s, and the <thf_tuple> may<br>
%----contain only <constant>s and <functor>(<fof_arguments>)s<br>
<br>
%----Arguments recurse back up to formulae (this is the THF world here)<br>
<<a name="thf_arguments">thf_arguments</a>> ::= <<a href="#thf_formula_list">thf_formula_list</a>><br>
<br>
%----A <thf_type_formula> is an assertion that the formula is in this type.<br>
<<a name="thf_type_formula">thf_type_formula</a>> ::= <<a href="#thf_typeable_formula">thf_typeable_formula</a>> : <<a href="#thf_top_level_type">thf_top_level_type</a>><br>
<<a name="thf_typeable_formula">thf_typeable_formula</a>> ::= <<a href="#thf_atom">thf_atom</a>> | (<<a href="#thf_logic_formula">thf_logic_formula</a>>)<br>
<<a name="thf_subtype">thf_subtype</a>> ::= <<a href="#thf_atom">thf_atom</a>> <<a href="#subtype_sign">subtype_sign</a>> <<a href="#thf_atom">thf_atom</a>><br>
%----In a formula with role 'type', <thf_type_formula> is a global declaration<br>
%----that <constant> is in this thf_top_level_type>, i.e., the rule is ...<br>
<<a name="thf_type_formula">thf_type_formula</a>> :== <<a href="#constant">constant</a>> : <<a href="#thf_top_level_type">thf_top_level_type</a>><br>
%----All symbols must be typed exactly one before use, and all atomic types<br>
%----must be declared (of type $tType) before use.<br>
<br>
%----<thf_top_level_type> appears after ":", where a type is being specified<br>
%----for a term or variable. <thf_unitary_type> includes <thf_unitary_formula>,<br>
%----so the syntax allows just about any lambda expression with "enough"<br>
%----parentheses to serve as a type. The expected use of this flexibility is<br>
%----parametric polymorphism in types, expressed with lambda abstraction.<br>
%----Mapping is right-associative: o > o > o means o > (o > o).<br>
%----Xproduct is left-associative: o * o * o means (o * o) * o.<br>
%----Union is left-associative: o + o + o means (o + o) + o.<br>
<<a name="thf_top_level_type">thf_top_level_type</a>> ::= <<a href="#thf_unitary_type">thf_unitary_type</a>> | <<a href="#thf_mapping_type">thf_mapping_type</a>><br>
<<a name="thf_unitary_type">thf_unitary_type</a>> ::= <<a href="#thf_unitary_formula">thf_unitary_formula</a>> | (<<a href="#thf_binary_type">thf_binary_type</a>>)<br>
<<a name="thf_binary_type">thf_binary_type</a>> ::= <<a href="#thf_mapping_type">thf_mapping_type</a>> | <<a href="#thf_xprod_type">thf_xprod_type</a>> |<br>
<<a href="#thf_union_type">thf_union_type</a>><br>
<<a name="thf_mapping_type">thf_mapping_type</a>> ::= <<a href="#thf_unitary_type">thf_unitary_type</a>> <<a href="#arrow">arrow</a>> <<a href="#thf_unitary_type">thf_unitary_type</a>> |<br>
<<a href="#thf_unitary_type">thf_unitary_type</a>> <<a href="#arrow">arrow</a>> <<a href="#thf_mapping_type">thf_mapping_type</a>><br>
<<a name="thf_xprod_type">thf_xprod_type</a>> ::= <<a href="#thf_unitary_type">thf_unitary_type</a>> <<a href="#star">star</a>> <<a href="#thf_unitary_type">thf_unitary_type</a>> |<br>
<<a href="#thf_xprod_type">thf_xprod_type</a>> <<a href="#star">star</a>> <<a href="#thf_unitary_type">thf_unitary_type</a>><br>
<<a name="thf_union_type">thf_union_type</a>> ::= <<a href="#thf_unitary_type">thf_unitary_type</a>> <<a href="#plus">plus</a>> <<a href="#thf_unitary_type">thf_unitary_type</a>> |<br>
<<a href="#thf_union_type">thf_union_type</a>> <<a href="#plus">plus</a>> <<a href="#thf_unitary_type">thf_unitary_type</a>><br>
<br>
%----Sequents using the Gentzen arrow<br>
<<a name="thf_sequent">thf_sequent</a>> ::= <<a href="#thf_tuple">thf_tuple</a>> <<a href="#gentzen_arrow">gentzen_arrow</a>> <<a href="#thf_tuple">thf_tuple</a>> |<br>
(<<a href="#thf_sequent">thf_sequent</a>>)<br>
<br>
<<a name="thf_tuple">thf_tuple</a>> ::= [] | [<<a href="#thf_formula_list">thf_formula_list</a>>]<br>
<<a name="thf_formula_list">thf_formula_list</a>> ::= <<a href="#thf_logic_formula">thf_logic_formula</a>> |<br>
<<a href="#thf_logic_formula">thf_logic_formula</a>>,<<a href="#thf_formula_list">thf_formula_list</a>><br>
<br>
%----New material for modal logic semantics, not integrated yet<br>
<<a name="logic_defn_rule">logic_defn_rule</a>> :== <<a href="#logic_defn_LHS">logic_defn_LHS</a>> <<a href="#assignment">assignment</a>> <<a href="#logic_defn_RHS">logic_defn_RHS</a>><br>
<<a name="logic_defn_LHS">logic_defn_LHS</a>> :== <<a href="#logic_defn_value">logic_defn_value</a>> | <<a href="#thf_top_level_type">thf_top_level_type</a>> | <<a href="#name">name</a>><br>
<<a name="logic_defn_LHS">logic_defn_LHS</a>> :== $constants | $quantification | $consequence |<br>
$modalities<br>
%----The $constants, $quantification, and $consequence apply to all of the<br>
%----$modalities. Each of these may be specified only once, but not necessarily<br>
%----all in a single annotated formula.<br>
<<a name="logic_defn_RHS">logic_defn_RHS</a>> :== <<a href="#logic_defn_value">logic_defn_value</a>> | <<a href="#thf_unitary_formula">thf_unitary_formula</a>><br>
<<a name="logic_defn_value">logic_defn_value</a>> :== <<a href="#defined_constant">defined_constant</a>><br>
<<a name="logic_defn_value">logic_defn_value</a>> :== $rigid | $flexible |<br>
$constant | $varying | $cumulative | $decreasing |<br>
$local | $global |<br>
$modal_system_K | $modal_system_T | $modal_system_D |<br>
$modal_system_S4 | $modal_system_S5 |<br>
$modal_axiom_K | $modal_axiom_T | $modal_axiom_B |<br>
$modal_axiom_D | $modal_axiom_4 | $modal_axiom_5<br>
<br>
%----<a href="#TOPOFPAGE">Top of Page</a>---------------------------------------------------------------<br>
%----TFX formulae<br>
<<a name="tfx_formula">tfx_formula</a>> ::= <<a href="#tfx_logic_formula">tfx_logic_formula</a>> | <<a href="#thf_sequent">thf_sequent</a>><br>
<<a name="tfx_logic_formula">tfx_logic_formula</a>> ::= <<a href="#thf_logic_formula">thf_logic_formula</a>> <br>
% <tfx_logic_formula> ::= <thf_binary_formula> | <thf_unitary_formula> |<br>
% <tff_typed_atom> | <tff_subtype><br>
%----<a href="#TOPOFPAGE">Top of Page</a>---------------------------------------------------------------<br>
%----TFF formulae.<br>
<<a name="tff_formula">tff_formula</a>> ::= <<a href="#tff_logic_formula">tff_logic_formula</a>> | <<a href="#tff_typed_atom">tff_typed_atom</a>> |<br>
<<a href="#tff_sequent">tff_sequent</a>><br>
<<a name="tff_logic_formula">tff_logic_formula</a>> ::= <<a href="#tff_binary_formula">tff_binary_formula</a>> | <<a href="#tff_unitary_formula">tff_unitary_formula</a>> |<br>
<<a href="#tff_subtype">tff_subtype</a>><br>
<<a name="tff_binary_formula">tff_binary_formula</a>> ::= <<a href="#tff_binary_nonassoc">tff_binary_nonassoc</a>> | <<a href="#tff_binary_assoc">tff_binary_assoc</a>><br>
<<a name="tff_binary_nonassoc">tff_binary_nonassoc</a>> ::= <<a href="#tff_unitary_formula">tff_unitary_formula</a>> <<a href="#binary_connective">binary_connective</a>><br>
<<a href="#tff_unitary_formula">tff_unitary_formula</a>><br>
<<a name="tff_binary_assoc">tff_binary_assoc</a>> ::= <<a href="#tff_or_formula">tff_or_formula</a>> | <<a href="#tff_and_formula">tff_and_formula</a>><br>
<<a name="tff_or_formula">tff_or_formula</a>> ::= <<a href="#tff_unitary_formula">tff_unitary_formula</a>> <<a href="#vline">vline</a>> <<a href="#tff_unitary_formula">tff_unitary_formula</a>> |<br>
<<a href="#tff_or_formula">tff_or_formula</a>> <<a href="#vline">vline</a>> <<a href="#tff_unitary_formula">tff_unitary_formula</a>><br>
<<a name="tff_and_formula">tff_and_formula</a>> ::= <<a href="#tff_unitary_formula">tff_unitary_formula</a>> & <<a href="#tff_unitary_formula">tff_unitary_formula</a>> |<br>
<<a href="#tff_and_formula">tff_and_formula</a>> & <<a href="#tff_unitary_formula">tff_unitary_formula</a>><br>
<<a name="tff_unitary_formula">tff_unitary_formula</a>> ::= <<a href="#tff_quantified_formula">tff_quantified_formula</a>> | <<a href="#tff_unary_formula">tff_unary_formula</a>> |<br>
<<a href="#tff_atomic_formula">tff_atomic_formula</a>> | <<a href="#tff_conditional">tff_conditional</a>> | <br>
<<a href="#tff_let">tff_let</a>> | (<<a href="#tff_logic_formula">tff_logic_formula</a>>)<br>
<<a name="tff_quantified_formula">tff_quantified_formula</a>> ::= <<a href="#fof_quantifier">fof_quantifier</a>> [<<a href="#tff_variable_list">tff_variable_list</a>>] :<br>
<<a href="#tff_unitary_formula">tff_unitary_formula</a>><br>
<<a name="tff_variable_list">tff_variable_list</a>> ::= <<a href="#tff_variable">tff_variable</a>> | <<a href="#tff_variable">tff_variable</a>>,<<a href="#tff_variable_list">tff_variable_list</a>><br>
<<a name="tff_variable">tff_variable</a>> ::= <<a href="#tff_typed_variable">tff_typed_variable</a>> | <<a href="#variable">variable</a>><br>
<<a name="tff_typed_variable">tff_typed_variable</a>> ::= <<a href="#variable">variable</a>> : <<a href="#tff_atomic_type">tff_atomic_type</a>><br>
<<a name="tff_unary_formula">tff_unary_formula</a>> ::= <<a href="#unary_connective">unary_connective</a>> <<a href="#tff_unitary_formula">tff_unitary_formula</a>> |<br>
<<a href="#fof_infix_unary">fof_infix_unary</a>><br>
<<a name="tff_atomic_formula">tff_atomic_formula</a>> ::= <<a href="#fof_atomic_formula">fof_atomic_formula</a>><br>
<<a name="tff_conditional">tff_conditional</a>> ::= $ite_f(<<a href="#tff_logic_formula">tff_logic_formula</a>>,<<a href="#tff_logic_formula">tff_logic_formula</a>>,<br>
<<a href="#tff_logic_formula">tff_logic_formula</a>>)<br>
<<a name="tff_let">tff_let</a>> ::= $let_tf(<<a href="#tff_let_term_defns">tff_let_term_defns</a>>,<<a href="#tff_formula">tff_formula</a>>) |<br>
$let_ff(<<a href="#tff_let_formula_defns">tff_let_formula_defns</a>>,<<a href="#tff_formula">tff_formula</a>>)<br>
%----See the commentary for <thf_let>.<br>
<<a name="tff_let_term_defns">tff_let_term_defns</a>> ::= <<a href="#tff_let_term_defn">tff_let_term_defn</a>> | [<<a href="#tff_let_term_list">tff_let_term_list</a>>]<br>
<<a name="tff_let_term_list">tff_let_term_list</a>> ::= <<a href="#tff_let_term_defn">tff_let_term_defn</a>> |<br>
<<a href="#tff_let_term_defn">tff_let_term_defn</a>>,<<a href="#tff_let_term_list">tff_let_term_list</a>><br>
<<a name="tff_let_term_defn">tff_let_term_defn</a>> ::= ! [<<a href="#tff_variable_list">tff_variable_list</a>>] : <<a href="#tff_let_term_defn">tff_let_term_defn</a>> |<br>
<<a href="#tff_let_term_binding">tff_let_term_binding</a>><br>
<<a name="tff_let_term_binding">tff_let_term_binding</a>> ::= <<a href="#fof_plain_term">fof_plain_term</a>> = <<a href="#fof_term">fof_term</a>> | <br>
(<<a href="#tff_let_term_binding">tff_let_term_binding</a>>)<br>
<<a name="tff_let_formula_defns">tff_let_formula_defns</a>> ::= <<a href="#tff_let_formula_defn">tff_let_formula_defn</a>> | [<<a href="#tff_let_formula_list">tff_let_formula_list</a>>]<br>
<<a name="tff_let_formula_list">tff_let_formula_list</a>> ::= <<a href="#tff_let_formula_defn">tff_let_formula_defn</a>> |<br>
<<a href="#tff_let_formula_defn">tff_let_formula_defn</a>>,<<a href="#tff_let_formula_list">tff_let_formula_list</a>><br>
<<a name="tff_let_formula_defn">tff_let_formula_defn</a>> ::= ! [<<a href="#tff_variable_list">tff_variable_list</a>>] : <<a href="#tff_let_formula_defn">tff_let_formula_defn</a>> |<br>
<<a href="#tff_let_formula_binding">tff_let_formula_binding</a>><br>
<<a name="tff_let_formula_binding">tff_let_formula_binding</a>> ::= <<a href="#fof_plain_atomic_formula">fof_plain_atomic_formula</a>> <<a href="#"></a>=> <br>
<<a href="#tff_unitary_formula">tff_unitary_formula</a>> | (<<a href="#tff_let_formula_binding">tff_let_formula_binding</a>>)<br>
<br>
<<a name="tff_sequent">tff_sequent</a>> ::= <<a href="#tff_formula_tuple">tff_formula_tuple</a>> <<a href="#gentzen_arrow">gentzen_arrow</a>><br>
<<a href="#tff_formula_tuple">tff_formula_tuple</a>> | (<<a href="#tff_sequent">tff_sequent</a>>)<br>
<br>
<<a name="tff_formula_tuple">tff_formula_tuple</a>> ::= [] | [<<a href="#tff_formula_tuple_list">tff_formula_tuple_list</a>>]<br>
<<a name="tff_formula_tuple_list">tff_formula_tuple_list</a>> ::= <<a href="#tff_logic_formula">tff_logic_formula</a>> |<br>
<<a href="#tff_logic_formula">tff_logic_formula</a>>,<<a href="#tff_formula_tuple_list">tff_formula_tuple_list</a>><br>
<br>
%----<tff_typed_atom> can appear only at top level<br>
<<a name="tff_typed_atom">tff_typed_atom</a>> ::= <<a href="#untyped_atom">untyped_atom</a>> : <<a href="#tff_top_level_type">tff_top_level_type</a>> |<br>
(<<a href="#tff_typed_atom">tff_typed_atom</a>>)<br>
<br>
<<a name="tff_subtype">tff_subtype</a>> ::= <<a href="#untyped_atom">untyped_atom</a>> <<a href="#subtype_sign">subtype_sign</a>> <<a href="#atom">atom</a>> <br>
<br>
%----See <thf_top_level_type> for commentary.<br>
<<a name="tff_top_level_type">tff_top_level_type</a>> ::= <<a href="#tff_atomic_type">tff_atomic_type</a>> | <<a href="#tff_mapping_type">tff_mapping_type</a>> |<br>
<<a href="#tf1_quantified_type">tf1_quantified_type</a>> | (<<a href="#tff_top_level_type">tff_top_level_type</a>>)<br>
<<a name="tf1_quantified_type">tf1_quantified_type</a>> ::= !> [<<a href="#tff_variable_list">tff_variable_list</a>>] : <<a href="#tff_monotype">tff_monotype</a>><br>
<<a name="tff_monotype">tff_monotype</a>> ::= <<a href="#tff_atomic_type">tff_atomic_type</a>> | (<<a href="#tff_mapping_type">tff_mapping_type</a>>)<br>
<<a name="tff_unitary_type">tff_unitary_type</a>> ::= <<a href="#tff_atomic_type">tff_atomic_type</a>> | (<<a href="#tff_xprod_type">tff_xprod_type</a>>)<br>
<<a name="tff_atomic_type">tff_atomic_type</a>> ::= <<a href="#type_constant">type_constant</a>> | <<a href="#defined_type">defined_type</a>> |<br>
<<a href="#type_functor">type_functor</a>>(<<a href="#tff_type_arguments">tff_type_arguments</a>>) | <<a href="#variable">variable</a>><br>
<<a name="tff_type_arguments">tff_type_arguments</a>> ::= <<a href="#tff_atomic_type">tff_atomic_type</a>> |<br>
<<a href="#tff_atomic_type">tff_atomic_type</a>>,<<a href="#tff_type_arguments">tff_type_arguments</a>><br>
%----For consistency with <thf_unitary_type> (the analogue in thf),<br>
%----<tff_atomic_type> should also allow (<tff_atomic_type>), but that causes<br>
%----ambiguity.<br>
<<a name="tff_mapping_type">tff_mapping_type</a>> ::= <<a href="#tff_unitary_type">tff_unitary_type</a>> <<a href="#arrow">arrow</a>> <<a href="#tff_atomic_type">tff_atomic_type</a>><br>
<<a name="tff_xprod_type">tff_xprod_type</a>> ::= <<a href="#tff_unitary_type">tff_unitary_type</a>> <<a href="#star">star</a>> <<a href="#tff_atomic_type">tff_atomic_type</a>> |<br>
<<a href="#tff_xprod_type">tff_xprod_type</a>> <<a href="#star">star</a>> <<a href="#tff_atomic_type">tff_atomic_type</a>><br>
<br>
%----<a href="#TOPOFPAGE">Top of Page</a>---------------------------------------------------------------<br>
%----TCF formulae.<br>
<<a name="tcf_formula">tcf_formula</a>> ::= <<a href="#tcf_logic_formula">tcf_logic_formula</a>> | <<a href="#tff_typed_atom">tff_typed_atom</a>><br>
<<a name="tcf_logic_formula">tcf_logic_formula</a>> ::= <<a href="#tcf_quantified_formula">tcf_quantified_formula</a>> | <<a href="#cnf_formula">cnf_formula</a>><br>
<<a name="tcf_quantified_formula">tcf_quantified_formula</a>> ::= ! [<<a href="#tff_variable_list">tff_variable_list</a>>] : <<a href="#cnf_formula">cnf_formula</a>><br>
<br>
%----<a href="#TOPOFPAGE">Top of Page</a>---------------------------------------------------------------<br>
%----FOF formulae.<br>
<<a name="fof_formula">fof_formula</a>> ::= <<a href="#fof_logic_formula">fof_logic_formula</a>> | <<a href="#fof_sequent">fof_sequent</a>><br>
<<a name="fof_logic_formula">fof_logic_formula</a>> ::= <<a href="#fof_binary_formula">fof_binary_formula</a>> | <<a href="#fof_unitary_formula">fof_unitary_formula</a>><br>
%----Future answer variable ideas | <answer_formula><br>
<<a name="fof_binary_formula">fof_binary_formula</a>> ::= <<a href="#fof_binary_nonassoc">fof_binary_nonassoc</a>> | <<a href="#fof_binary_assoc">fof_binary_assoc</a>><br>
%----Only some binary connectives are associative<br>
%----There's no precedence among binary connectives<br>
<<a name="fof_binary_nonassoc">fof_binary_nonassoc</a>> ::= <<a href="#fof_unitary_formula">fof_unitary_formula</a>> <<a href="#binary_connective">binary_connective</a>><br>
<<a href="#fof_unitary_formula">fof_unitary_formula</a>><br>
%----Associative connectives & and | are in <binary_assoc><br>
<<a name="fof_binary_assoc">fof_binary_assoc</a>> ::= <<a href="#fof_or_formula">fof_or_formula</a>> | <<a href="#fof_and_formula">fof_and_formula</a>><br>
<<a name="fof_or_formula">fof_or_formula</a>> ::= <<a href="#fof_unitary_formula">fof_unitary_formula</a>> <<a href="#vline">vline</a>> <<a href="#fof_unitary_formula">fof_unitary_formula</a>> |<br>
<<a href="#fof_or_formula">fof_or_formula</a>> <<a href="#vline">vline</a>> <<a href="#fof_unitary_formula">fof_unitary_formula</a>><br>
<<a name="fof_and_formula">fof_and_formula</a>> ::= <<a href="#fof_unitary_formula">fof_unitary_formula</a>> & <<a href="#fof_unitary_formula">fof_unitary_formula</a>> |<br>
<<a href="#fof_and_formula">fof_and_formula</a>> & <<a href="#fof_unitary_formula">fof_unitary_formula</a>><br>
%----<fof_unitary_formula> are in ()s or do not have a <binary_connective> at<br>
%----the top level.<br>
<<a name="fof_unitary_formula">fof_unitary_formula</a>> ::= <<a href="#fof_quantified_formula">fof_quantified_formula</a>> | <<a href="#fof_unary_formula">fof_unary_formula</a>> |<br>
<<a href="#fof_atomic_formula">fof_atomic_formula</a>> | (<<a href="#fof_logic_formula">fof_logic_formula</a>>)<br>
<<a name="fof_quantified_formula">fof_quantified_formula</a>> ::= <<a href="#fof_quantifier">fof_quantifier</a>> [<<a href="#fof_variable_list">fof_variable_list</a>>] :<br>
<<a href="#fof_unitary_formula">fof_unitary_formula</a>><br>
<<a name="fof_variable_list">fof_variable_list</a>> ::= <<a href="#variable">variable</a>> | <<a href="#variable">variable</a>>,<<a href="#fof_variable_list">fof_variable_list</a>><br>
<<a name="fof_unary_formula">fof_unary_formula</a>> ::= <<a href="#unary_connective">unary_connective</a>> <<a href="#fof_unitary_formula">fof_unitary_formula</a>> |<br>
<<a href="#fof_infix_unary">fof_infix_unary</a>><br>
%----<fof_term> != <fof_term> is equivalent to ~ <fof_term> = <fof_term><br>
<<a name="fof_infix_unary">fof_infix_unary</a>> ::= <<a href="#fof_term">fof_term</a>> <<a href="#infix_inequality">infix_inequality</a>> <<a href="#fof_term">fof_term</a>><br>
<<a name="fof_atomic_formula">fof_atomic_formula</a>> ::= <<a href="#fof_plain_atomic_formula">fof_plain_atomic_formula</a>> | <br>
<<a href="#fof_defined_atomic_formula">fof_defined_atomic_formula</a>> |<br>
<<a href="#fof_system_atomic_formula">fof_system_atomic_formula</a>><br>
<<a name="fof_plain_atomic_formula">fof_plain_atomic_formula</a>> ::= <<a href="#fof_plain_term">fof_plain_term</a>><br>
<<a name="fof_plain_atomic_formula">fof_plain_atomic_formula</a>> :== <<a href="#proposition">proposition</a>> | <<a href="#predicate">predicate</a>>(<<a href="#fof_arguments">fof_arguments</a>>)<br>
<<a name="fof_defined_atomic_formula">fof_defined_atomic_formula</a>> ::= <<a href="#fof_defined_plain_formula">fof_defined_plain_formula</a>> | <br>
<<a href="#fof_defined_infix_formula">fof_defined_infix_formula</a>><br>
<<a name="fof_defined_plain_formula">fof_defined_plain_formula</a>> ::= <<a href="#fof_defined_plain_term">fof_defined_plain_term</a>><br>
<<a name="fof_defined_plain_formula">fof_defined_plain_formula</a>> :== <<a href="#defined_proposition">defined_proposition</a>> | <br>
<<a href="#defined_predicate">defined_predicate</a>>(<<a href="#fof_arguments">fof_arguments</a>>)<br>
<<a name="fof_defined_infix_formula">fof_defined_infix_formula</a>> ::= <<a href="#fof_term">fof_term</a>> <<a href="#defined_infix_pred">defined_infix_pred</a>> <<a href="#fof_term">fof_term</a>><br>
%----System terms have system specific interpretations<br>
<<a name="fof_system_atomic_formula">fof_system_atomic_formula</a>> ::= <<a href="#fof_system_term">fof_system_term</a>><br>
%----<fof_system_atomic_formula>s are used for evaluable predicates that are<br>
%----available in particular tools. The predicate names are not controlled<br>
%----by the TPTP syntax, so use with due care. The same is true for<br>
%----<fof_system_term>s.<br>
<br>
%----FOF terms.<br>
<<a name="fof_plain_term">fof_plain_term</a>> ::= <<a href="#constant">constant</a>> | <<a href="#functor">functor</a>>(<<a href="#fof_arguments">fof_arguments</a>>)<br>
%----Defined terms have TPTP specific interpretations<br>
<<a name="fof_defined_term">fof_defined_term</a>> ::= <<a href="#defined_term">defined_term</a>> | <<a href="#fof_defined_atomic_term">fof_defined_atomic_term</a>><br>
<<a name="fof_defined_atomic_term">fof_defined_atomic_term</a>> ::= <<a href="#fof_defined_plain_term">fof_defined_plain_term</a>><br>
%----None yet | <defined_infix_term><br>
%----None yet <defined_infix_term> ::= <fof_term> <defined_infix_func> <fof_term><br>
%----None yet <defined_infix_func> ::=<br>
<<a name="fof_defined_plain_term">fof_defined_plain_term</a>> ::= <<a href="#defined_constant">defined_constant</a>> | <br>
<<a href="#defined_functor">defined_functor</a>>(<<a href="#fof_arguments">fof_arguments</a>>)<br>
%----Add $tuple for tuples, because [<fof_arguments>] doesn't work.<br>
%----System terms have system specific interpretations<br>
<<a name="fof_system_term">fof_system_term</a>> ::= <<a href="#system_constant">system_constant</a>> | <<a href="#system_functor">system_functor</a>>(<<a href="#fof_arguments">fof_arguments</a>>)<br>
%----Arguments recurse back up to terms (this is the FOF world here)<br>
<<a name="fof_arguments">fof_arguments</a>> ::= <<a href="#fof_term">fof_term</a>> | <<a href="#fof_term">fof_term</a>>,<<a href="#fof_arguments">fof_arguments</a>><br>
%----These are terms used as arguments. Not the entry point for terms because<br>
%----<fof_plain_term> is also used as <fof_plain_atomic_formula><br>
<<a name="fof_term">fof_term</a>> ::= <<a href="#fof_function_term">fof_function_term</a>> | <<a href="#variable">variable</a>> | <br>
<<a href="#tff_conditional_term">tff_conditional_term</a>> | <<a href="#tff_let_term">tff_let_term</a>><br>
%% DAMN THIS JUST WON'T WORK | <tuple_term><br>
%----<tuple_term> is for TFF only, but it's here because it's used in <br>
%----<fof_atomic_formula>, which is also used as <tff_atomic_formula>.<br>
% <tuple_term> ::= [] | [<fof_arguments>]<br>
<<a name="fof_function_term">fof_function_term</a>> ::= <<a href="#fof_plain_term">fof_plain_term</a>> | <<a href="#fof_defined_term">fof_defined_term</a>> | <br>
<<a href="#fof_system_term">fof_system_term</a>><br>
<br>
%----Conditional terms should be used by only TFF.<br>
<<a name="tff_conditional_term">tff_conditional_term</a>> ::= $ite_t(<<a href="#tff_logic_formula">tff_logic_formula</a>>,<<a href="#fof_term">fof_term</a>>,<<a href="#fof_term">fof_term</a>>)<br>
%----Let terms should be used by only TFF. $let_ft is for use when there is<br>
%----a $ite_t in the <fof_term>. See the commentary for $let_tf and $let_ff.<br>
<<a name="tff_let_term">tff_let_term</a>> ::= $let_ft(<<a href="#tff_let_formula_defns">tff_let_formula_defns</a>>,<<a href="#fof_term">fof_term</a>>) |<br>
$let_tt(<<a href="#tff_let_term_defns">tff_let_term_defns</a>>,<<a href="#fof_term">fof_term</a>>)<br>
<br>
%----<a href="#TOPOFPAGE">Top of Page</a>---------------------------------------------------------------<br>
%----This section is the FOFX syntax. Not yet in use.<br>
% <fof_let> ::= := [<fof_let_list>] : <fof_unitary_formula><br>
% <fof_let_list> ::= <fof_defined_var> |<br>
% <fof_defined_var>,<fof_let_list><br>
% <fof_defined_var> ::= <variable> := <fof_logic_formula> |<br>
% <variable> :- <fof_term> | (<fof_defined_var>)<br>
%<br>
% <fof_conditional> ::= $ite_f(<fof_logic_formula>,<fof_logic_formula>,<br>
% <fof_logic_formula>)<br>
%<br>
% <fof_conditional_term> ::= $ite_t(<fof_logic_formula>,<fof_term>,<fof_term>)<br>
<br>
<<a name="fof_sequent">fof_sequent</a>> ::= <<a href="#fof_formula_tuple">fof_formula_tuple</a>> <<a href="#gentzen_arrow">gentzen_arrow</a>><br>
<<a href="#fof_formula_tuple">fof_formula_tuple</a>> | (<<a href="#fof_sequent">fof_sequent</a>>)<br>
<br>
<<a name="fof_formula_tuple">fof_formula_tuple</a>> ::= [] | [<<a href="#fof_formula_tuple_list">fof_formula_tuple_list</a>>]<br>
<<a name="fof_formula_tuple_list">fof_formula_tuple_list</a>> ::= <<a href="#fof_logic_formula">fof_logic_formula</a>> |<br>
<<a href="#fof_logic_formula">fof_logic_formula</a>>,<<a href="#fof_formula_tuple_list">fof_formula_tuple_list</a>><br>
<br>
%----<a href="#TOPOFPAGE">Top of Page</a>---------------------------------------------------------------<br>
%----CNF formulae (variables implicitly universally quantified)<br>
<<a name="cnf_formula">cnf_formula</a>> ::= <<a href="#disjunction">disjunction</a>> | (<<a href="#disjunction">disjunction</a>>)<br>
<<a name="disjunction">disjunction</a>> ::= <<a href="#literal">literal</a>> | <<a href="#disjunction">disjunction</a>> <<a href="#vline">vline</a>> <<a href="#literal">literal</a>><br>
<<a name="literal">literal</a>> ::= <<a href="#fof_atomic_formula">fof_atomic_formula</a>> | ~ <<a href="#fof_atomic_formula">fof_atomic_formula</a>> |<br>
<<a href="#fof_infix_unary">fof_infix_unary</a>><br>
<br>
%----<a href="#TOPOFPAGE">Top of Page</a>---------------------------------------------------------------<br>
%----Connectives - THF<br>
<<a name="thf_quantifier">thf_quantifier</a>> ::= <<a href="#fof_quantifier">fof_quantifier</a>> | <<a href="#th0_quantifier">th0_quantifier</a>> |<br>
<<a href="#th1_quantifier">th1_quantifier</a>><br>
%----TH0 quantifiers are also available in TH1<br>
<<a name="th1_quantifier">th1_quantifier</a>> ::= !> | ?*<br>
<<a name="th0_quantifier">th0_quantifier</a>> ::= ^ | @+ | @-<br>
<<a name="thf_pair_connective">thf_pair_connective</a>> ::= <<a href="#infix_equality">infix_equality</a>> | <<a href="#infix_inequality">infix_inequality</a>> |<br>
<<a href="#binary_connective">binary_connective</a>> | <<a href="#assignment">assignment</a>><br>
<<a name="thf_unary_connective">thf_unary_connective</a>> ::= <<a href="#unary_connective">unary_connective</a>> | <<a href="#th1_unary_connective">th1_unary_connective</a>><br>
<<a name="th1_unary_connective">th1_unary_connective</a>> ::= !! | ?? | @@+ | @@- | @=<br>
%----Connectives - THF and TFF<br>
<<a name="subtype_sign">subtype_sign</a>> ::= <<a href="#"></a><<a href="#"></a><br>
%----Connectives - TFF<br>
% <tff_pair_connective> ::= <binary_connective> | <assignment><br>
%----Connectives - FOF<br>
<<a name="fof_quantifier">fof_quantifier</a>> ::= ! | ?<br>
<<a name="binary_connective">binary_connective</a>> ::= <<a href="#"></a>=> | => | <<a href="#"></a>= | <<a href="#"></a>~> | ~<<a href="#vline">vline</a>> | ~&<br>
<<a name="assoc_connective">assoc_connective</a>> ::= <<a href="#vline">vline</a>> | &<br>
<<a name="unary_connective">unary_connective</a>> ::= ~<br>
%----The seqent arrow<br>
<<a name="gentzen_arrow">gentzen_arrow</a>> ::= --><br>
<<a name="assignment">assignment</a>> ::= :=<br>
<br>
%----Types for THF and TFF<br>
<<a name="type_constant">type_constant</a>> ::= <<a href="#type_functor">type_functor</a>><br>
<<a name="type_functor">type_functor</a>> ::= <<a href="#atomic_word">atomic_word</a>><br>
<<a name="defined_type">defined_type</a>> ::= <<a href="#atomic_defined_word">atomic_defined_word</a>><br>
<<a name="defined_type">defined_type</a>> :== $oType | $o | $iType | $i | $tType |<br>
$real | $rat | $int<br>
%----$oType/$o is the Boolean type, i.e., the type of $true and $false.<br>
%----$iType/$i is non-empty type of individuals, which may be finite or<br>
%----infinite. $tType is the type of all types. $real is the type of <real>s.<br>
%----$rat is the type of <rational>s. $int is the type of <signed_integer>s<br>
%----and <unsigned_integer>s.<br>
<<a name="system_type">system_type</a>> :== <<a href="#atomic_system_word">atomic_system_word</a>><br>
<br>
%----For all language types<br>
<<a name="atom">atom</a>> ::= <<a href="#untyped_atom">untyped_atom</a>> | <<a href="#defined_constant">defined_constant</a>><br>
<<a name="untyped_atom">untyped_atom</a>> ::= <<a href="#constant">constant</a>> | <<a href="#system_constant">system_constant</a>><br>
<br>
<<a name="defined_proposition">defined_proposition</a>> :== <<a href="#atomic_defined_word">atomic_defined_word</a>><br>
<<a name="defined_proposition">defined_proposition</a>> :== $true | $false<br>
<<a name="defined_predicate">defined_predicate</a>> :== <<a href="#atomic_defined_word">atomic_defined_word</a>><br>
<<a name="defined_predicate">defined_predicate</a>> :== $distinct |<br>
$less | $lesseq | $greater | $greatereq |<br>
$is_int | $is_rat |<br>
$box_P | $box_i | $box_int | $box |<br>
$dia_P | $dia_i | $dia_int | $dia<br>
%----$distinct means that each of it's constant arguments are pairwise !=. It<br>
%----is part of the TFF syntax. It can be used only as a fact, not under any<br>
%----connective.<br>
<<a name="defined_infix_pred">defined_infix_pred</a>> ::= <<a href="#infix_equality">infix_equality</a>> | <<a href="#assignment">assignment</a>><br>
<<a name="infix_equality">infix_equality</a>> ::= =<br>
<<a name="infix_inequality">infix_inequality</a>> ::= !=<br>
<br>
<<a name="constant">constant</a>> ::= <<a href="#functor">functor</a>><br>
<<a name="functor">functor</a>> ::= <<a href="#atomic_word">atomic_word</a>><br>
<<a name="system_constant">system_constant</a>> ::= <<a href="#system_functor">system_functor</a>><br>
<<a name="system_functor">system_functor</a>> ::= <<a href="#atomic_system_word">atomic_system_word</a>><br>
<<a name="defined_constant">defined_constant</a>> ::= <<a href="#defined_functor">defined_functor</a>><br>
<<a name="defined_functor">defined_functor</a>> ::= <<a href="#atomic_defined_word">atomic_defined_word</a>><br>
<<a name="defined_functor">defined_functor</a>> :== $uminus | $sum | $difference | $product |<br>
$quotient | $quotient_e | $quotient_t | $quotient_f |<br>
$remainder_e | $remainder_t | $remainder_f |<br>
$floor | $ceiling | $truncate | $round |<br>
$to_int | $to_rat | $to_real<br>
<<a name="defined_term">defined_term</a>> ::= <<a href="#number">number</a>> | <<a href="#distinct_object">distinct_object</a>><br>
<<a name="variable">variable</a>> ::= <<a href="#upper_word">upper_word</a>><br>
%----<a href="#TOPOFPAGE">Top of Page</a>---------------------------------------------------------------<br>
%----Formula sources<br>
<<a name="source">source</a>> ::= <<a href="#general_term">general_term</a>><br>
<<a name="source">source</a>> :== <<a href="#dag_source">dag_source</a>> | <<a href="#internal_source">internal_source</a>> |<br>
<<a href="#external_source">external_source</a>> | unknown | [<<a href="#sources">sources</a>>]<br>
%----Alternative sources are recorded like this, thus allowing representation<br>
%----of alternative derivations with shared parts.<br>
<<a name="sources">sources</a>> :== <<a href="#source">source</a>> | <<a href="#source">source</a>>,<<a href="#sources">sources</a>><br>
%----Only a <dag_source> can be a <name>, i.e., derived formulae can be<br>
%----identified by a <name> or an <inference_record><br>
<<a name="dag_source">dag_source</a>> :== <<a href="#name">name</a>> | <<a href="#inference_record">inference_record</a>><br>
<<a name="inference_record">inference_record</a>> :== inference(<<a href="#inference_rule">inference_rule</a>>,<<a href="#useful_info">useful_info</a>>,<br>
<<a href="#inference_parents">inference_parents</a>>)<br>
<<a name="inference_rule">inference_rule</a>> :== <<a href="#atomic_word">atomic_word</a>><br>
%----Examples are deduction | modus_tollens | modus_ponens | rewrite |<br>
% resolution | paramodulation | factorization |<br>
% cnf_conversion | cnf_refutation | ...<br>
%----<inference_parents> can be empty in cases when there is a justification<br>
%----for a tautologous theorem. In case when a tautology is introduced as<br>
%----a leaf, e.g., for splitting, then use an <internal_source>.<br>
<<a name="inference_parents">inference_parents</a>> :== [] | [<<a href="#parent_list">parent_list</a>>]<br>
<<a name="parent_list">parent_list</a>> :== <<a href="#parent_info">parent_info</a>> | <<a href="#parent_info">parent_info</a>>,<<a href="#parent_list">parent_list</a>><br>
<<a name="parent_info">parent_info</a>> :== <<a href="#source">source</a>><<a href="#parent_details">parent_details</a>><br>
<<a name="parent_details">parent_details</a>> :== :<<a href="#general_list">general_list</a>> | <<a href="#null">null</a>><br>
<<a name="internal_source">internal_source</a>> :== introduced(<<a href="#intro_type">intro_type</a>><<a href="#optional_info">optional_info</a>>)<br>
<<a name="intro_type">intro_type</a>> :== definition | axiom_of_choice | tautology | assumption<br>
%----This should be used to record the symbol being defined, or the function<br>
%----for the axiom of choice<br>
<<a name="external_source">external_source</a>> :== <<a href="#file_source">file_source</a>> | <<a href="#theory">theory</a>> | <<a href="#creator_source">creator_source</a>><br>
<<a name="file_source">file_source</a>> :== file(<<a href="#file_name">file_name</a>><<a href="#file_info">file_info</a>>)<br>
<<a name="file_info">file_info</a>> :== ,<<a href="#name">name</a>> | <<a href="#null">null</a>><br>
<<a name="theory">theory</a>> :== theory(<<a href="#theory_name">theory_name</a>><<a href="#optional_info">optional_info</a>>)<br>
<<a name="theory_name">theory_name</a>> :== equality | ac<br>
%----More theory names may be added in the future. The <optional_info> is<br>
%----used to store, e.g., which axioms of equality have been implicitly used,<br>
%----e.g., theory(equality,[rst]). Standard format still to be decided.<br>
<<a name="creator_source">creator_source</a>> :== creator(<<a href="#creator_name">creator_name</a>><<a href="#optional_info">optional_info</a>>)<br>
<<a name="creator_name">creator_name</a>> :== <<a href="#atomic_word">atomic_word</a>><br>
<br>
%----Useful info fields<br>
<<a name="optional_info">optional_info</a>> ::= ,<<a href="#useful_info">useful_info</a>> | <<a href="#null">null</a>><br>
<<a name="useful_info">useful_info</a>> ::= <<a href="#general_list">general_list</a>><br>
<<a name="useful_info">useful_info</a>> :== [] | [<<a href="#info_items">info_items</a>>]<br>
<<a name="info_items">info_items</a>> :== <<a href="#info_item">info_item</a>> | <<a href="#info_item">info_item</a>>,<<a href="#info_items">info_items</a>><br>
<<a name="info_item">info_item</a>> :== <<a href="#formula_item">formula_item</a>> | <<a href="#inference_item">inference_item</a>> |<br>
<<a href="#general_function">general_function</a>><br>
%----Useful info for formula records<br>
<<a name="formula_item">formula_item</a>> :== <<a href="#description_item">description_item</a>> | <<a href="#iquote_item">iquote_item</a>><br>
<<a name="description_item">description_item</a>> :== description(<<a href="#atomic_word">atomic_word</a>>)<br>
<<a name="iquote_item">iquote_item</a>> :== iquote(<<a href="#atomic_word">atomic_word</a>>)<br>
%----<iquote_item>s are used for recording exactly what the system output about<br>
%----the inference step. In the future it is planned to encode this information<br>
%----in standardized forms as <parent_details> in each <inference_record>.<br>
%----Useful info for inference records<br>
<<a name="inference_item">inference_item</a>> :== <<a href="#inference_status">inference_status</a>> | <<a href="#assumptions_record">assumptions_record</a>> |<br>
<<a href="#new_symbol_record">new_symbol_record</a>> | <<a href="#refutation">refutation</a>><br>
<<a name="inference_status">inference_status</a>> :== status(<<a href="#status_value">status_value</a>>) | <<a href="#inference_info">inference_info</a>><br>
%----These are the success status values from the <a href="
%----commonly used values are:<br>
%---- thm - Every model of the parent formulae is a model of the inferred<br>
%---- formula. Regular logical consequences.<br>
%---- cth - Every model of the parent formulae is a model of the negation of<br>
%---- the inferred formula. Used for negation of conjectures in FOF to<br>
%---- CNF conversion.<br>
%---- esa - There exists a model of the parent formulae iff there exists a<br>
%---- model of the inferred formula. Used for Skolemization steps.<br>
%----For the full hierarchy see the SZSOntology file distributed with the TPTP.<br>
<<a name="status_value">status_value</a>> :== suc | unp | sap | esa | sat | fsa | thm | eqv | tac |<br>
wec | eth | tau | wtc | wth | cax | sca | tca | wca |<br>
cup | csp | ecs | csa | cth | ceq | unc | wcc | ect |<br>
fun | uns | wuc | wct | scc | uca | noc<br>
%----<inference_info> is used to record standard information associated with an<br>
%----arbitrary inference rule. The <inference_rule> is the same as the<br>
%----<inference_rule> of the <inference_record>. The <atomic_word> indicates<br>
%----the information being recorded in the <general_list>. The <atomic_word><br>
%----are (loosely) set by TPTP conventions, and include esplit, sr_split, and<br>
%----discharge.<br>
<<a name="inference_info">inference_info</a>> :== <<a href="#inference_rule">inference_rule</a>>(<<a href="#atomic_word">atomic_word</a>>,<<a href="#general_list">general_list</a>>)<br>
%----An <assumptions_record> lists the names of assumptions upon which this<br>
%----inferred formula depends. These must be discharged in a completed proof.<br>
<<a name="assumptions_record">assumptions_record</a>> :== assumptions([<<a href="#name_list">name_list</a>>])<br>
%----A <refutation> record names a file in which the inference recorded here<br>
%----is recorded as a proof by refutation.<br>
<<a name="refutation">refutation</a>> :== refutation(<<a href="#file_source">file_source</a>>)<br>
%----A <new_symbol_record> provides information about a newly introduced symbol.<br>
<<a name="new_symbol_record">new_symbol_record</a>> :== new_symbols(<<a href="#atomic_word">atomic_word</a>>,[<<a href="#new_symbol_list">new_symbol_list</a>>])<br>
<<a name="new_symbol_list">new_symbol_list</a>> :== <<a href="#principal_symbol">principal_symbol</a>> |<br>
<<a href="#principal_symbol">principal_symbol</a>>,<<a href="#new_symbol_list">new_symbol_list</a>><br>
%----Principal symbols are predicates, functions, variables<br>
<<a name="principal_symbol">principal_symbol</a>> :== <<a href="#functor">functor</a>> | <<a href="#variable">variable</a>><br>
<br>
%----Include directives<br>
<<a name="include">include</a>> ::= include(<<a href="#file_name">file_name</a>><<a href="#formula_selection">formula_selection</a>>).<br>
<<a name="formula_selection">formula_selection</a>> ::= ,[<<a href="#name_list">name_list</a>>] | <<a href="#null">null</a>><br>
<<a name="name_list">name_list</a>> ::= <<a href="#name">name</a>> | <<a href="#name">name</a>>,<<a href="#name_list">name_list</a>><br>
<br>
%----Non-logical data<br>
<<a name="general_term">general_term</a>> ::= <<a href="#general_data">general_data</a>> | <<a href="#general_data">general_data</a>>:<<a href="#general_term">general_term</a>> |<br>
<<a href="#general_list">general_list</a>><br>
<<a name="general_data">general_data</a>> ::= <<a href="#atomic_word">atomic_word</a>> | <<a href="#general_function">general_function</a>> |<br>
<<a href="#variable">variable</a>> | <<a href="#number">number</a>> | <<a href="#distinct_object">distinct_object</a>> |<br>
<<a href="#formula_data">formula_data</a>><br>
<<a name="general_function">general_function</a>> ::= <<a href="#atomic_word">atomic_word</a>>(<<a href="#general_terms">general_terms</a>>)<br>
%----A <general_data> bind() term is used to record a variable binding in an<br>
%----inference, as an element of the <parent_details> list.<br>
<<a name="general_data">general_data</a>> :== bind(<<a href="#variable">variable</a>>,<<a href="#formula_data">formula_data</a>>)<br>
<<a name="formula_data">formula_data</a>> ::= $thf(<<a href="#thf_formula">thf_formula</a>>) | $tff(<<a href="#tff_formula">tff_formula</a>>) |<br>
$fof(<<a href="#fof_formula">fof_formula</a>>) | $cnf(<<a href="#cnf_formula">cnf_formula</a>>) |<br>
$fot(<<a href="#fof_term">fof_term</a>>)<br>
<<a name="general_list">general_list</a>> ::= [] | [<<a href="#general_terms">general_terms</a>>]<br>
<<a name="general_terms">general_terms</a>> ::= <<a href="#general_term">general_term</a>> | <<a href="#general_term">general_term</a>>,<<a href="#general_terms">general_terms</a>><br>
<br>
%----General purpose<br>
<<a name="name">name</a>> ::= <<a href="#atomic_word">atomic_word</a>> | <<a href="#integer">integer</a>><br>
%----Integer names are expected to be unsigned<br>
<<a name="atomic_word">atomic_word</a>> ::= <<a href="#lower_word">lower_word</a>> | <<a href="#single_quoted">single_quoted</a>><br>
%----<single_quoted> tokens do not include their outer quotes, therefore the<br>
%----<lower_word> <atomic_word> cat and the <single_quoted> <atomic_word> 'cat'<br>
%----are the same. Quotes must be removed from a <single_quoted> <atomic_word><br>
%----if doing so produces a <lower_word> <atomic_word>. Note that <numbers>s<br>
%----and <variable>s are not <lower_word>s, so '123' and 123, and 'X' and X,<br>
%----are different.<br>
<<a name="atomic_defined_word">atomic_defined_word</a>> ::= <<a href="#dollar_word">dollar_word</a>><br>
<<a name="atomic_system_word">atomic_system_word</a>> ::= <<a href="#dollar_dollar_word">dollar_dollar_word</a>><br>
<<a name="number">number</a>> ::= <<a href="#integer">integer</a>> | <<a href="#rational">rational</a>> | <<a href="#real">real</a>><br>
%----Numbers are always interpreted as themselves, and are thus implicitly<br>
%----distinct if they have different values, e.g., 1 != 2 is an implicit axiom.<br>
%----All numbers are base 10 at the moment.<br>
<<a name="file_name">file_name</a>> ::= <<a href="#single_quoted">single_quoted</a>><br>
<<a name="null">null</a>> ::=<br>
%----<a href="#TOPOFPAGE">Top of Page</a>---------------------------------------------------------------<br>
%----Rules from here on down are for defining tokens (terminal symbols) of the<br>
%----grammar, assuming they will be recognized by a lexical scanner.<br>
%----A ::- rule defines a token, a ::: rule defines a macro that is not a<br>
%----token. Usual regexp notation is used. Single characters are always placed<br>
%----in []s to disable any special meanings (for uniformity this is done to<br>
%----all characters, not only those with special meanings).<br>
<br>
%----These are tokens that appear in the syntax rules above. No rules<br>
%----defined here because they appear explicitly in the syntax rules,<br>
%----except that <vline>, <star>, <plus> denote "|", "*", "+", respectively.<br>
%----Keywords: fof cnf thf tff include<br>
%----Punctuation: ( ) , . [ ] :<br>
%----Operators: ! ? ~ & | <=> => <= <~> ~| ~& * +<br>
%----Predicates: = != $true $false<br>
<br>
%----For lex/yacc there cannot be spaces on either side of the | here<br>
<<a name="comment">comment</a>> ::- <<a href="#comment_line">comment_line</a>>|<<a href="#comment_block">comment_block</a>><br>
<<a name="comment_line">comment_line</a>> ::- [%]<<a href="#printable_char">printable_char</a>>*<br>
<<a name="comment_block">comment_block</a>> ::: [/][*]<<a href="#not_star_slash">not_star_slash</a>>[*][*]*[/]<br>
<<a name="not_star_slash">not_star_slash</a>> ::: ([^*]*[*][*]*[^/*])*[^*]*<br>
%----Defined comments are a convention used for annotations that are used as<br>
%----additional input for systems. They look like comments, but start with %$<br>
%----or /*$. A wily user of the syntax can notice the $ and extract information<br>
%----from the "comment" and pass that on as input to the system. They are<br>
%----analogous to pragmas in programming languages. To extract these separately<br>
%----from regular comments, the rules are:<br>
%---- <defined_comment> ::- <def_comment_line>|<def_comment_block><br>
%---- <def_comment_line> ::: [%]<dollar><printable_char>*<br>
%---- <def_comment_block> ::: [/][*]<dollar><not_star_slash>[*][*]*[/]<br>
%----A string that matches both <defined_comment> and <comment> should be<br>
%----recognized as <defined_comment>, so put these before <comment>.<br>
%----Defined comments that are in use include:<br>
%---- TO BE ANNOUNCED<br>
%----System comments are a convention used for annotations that may used as<br>
%----additional input to a specific system. They look like comments, but start<br>
%----with %$$ or /*$$. A wily user of the syntax can notice the $$ and extract<br>
%----information from the "comment" and pass that on as input to the system.<br>
%----The specific system for which the information is intended should be<br>
%----identified after the $$, e.g., /*$$Otter 3.3: Demodulator */<br>
%----To extract these separately from regular comments, the rules are:<br>
%---- <system_comment> ::- <sys_comment_line>|<sys_comment_block><br>
%---- <sys_comment_line> ::: [%]<dollar><dollar><printable_char>*<br>
%---- <sys_comment_block> ::: [/][*]<dollar><dollar><not_star_slash>[*][*]*[/]<br>
%----A string that matches both <system_comment> and <defined_comment> should<br>
%----be recognized as <system_comment>, so put these before <defined_comment>.<br>
<br>
<<a name="single_quoted">single_quoted</a>> ::- <<a href="#single_quote">single_quote</a>><<a href="#sq_char">sq_char</a>><<a href="#sq_char">sq_char</a>>*<<a href="#single_quote">single_quote</a>><br>
%----<single_quoted>s contain visible characters. \ is the escape character for<br>
%----' and \, i.e., \' is not the end of the <single_quoted>.<br>
%----The token does not include the outer quotes, e.g., 'cat' and cat are the<br>
%----same. See <atomic_word> for information about stripping the quotes.<br>
<br>
<<a name="distinct_object">distinct_object</a>> ::- <<a href="#double_quote">double_quote</a>><<a href="#do_char">do_char</a>>*<<a href="#double_quote">double_quote</a>><br>
%---Space and visible characters upto ~, except " and \<br>
%----<distinct_object>s contain visible characters. \ is the escape character<br>
%----for " and \, i.e., \" is not the end of the <distinct_object>.<br>
%----<distinct_object>s are different from (but may be equal to) other tokens,<br>
%----e.g., "cat" is different from 'cat' and cat. Distinct objects are always<br>
%----interpreted as themselves, so if they are different they are unequal,<br>
%----e.g., "Apple" != "Microsoft" is implicit.<br>
<br>
<<a name="dollar_word">dollar_word</a>> ::- <<a href="#dollar">dollar</a>><<a href="#lower_word">lower_word</a>><br>
<<a name="dollar_dollar_word">dollar_dollar_word</a>> ::- <<a href="#dollar">dollar</a>><<a href="#dollar">dollar</a>><<a href="#lower_word">lower_word</a>><br>
<<a name="upper_word">upper_word</a>> ::- <<a href="#upper_alpha">upper_alpha</a>><<a href="#alpha_numeric">alpha_numeric</a>>*<br>
<<a name="lower_word">lower_word</a>> ::- <<a href="#lower_alpha">lower_alpha</a>><<a href="#alpha_numeric">alpha_numeric</a>>*<br>
<br>
%----Tokens used in syntax, and cannot be character classes<br>
<<a name="vline">vline</a>> ::- [|]<br>
<<a name="star">star</a>> ::- [*]<br>
<<a name="plus">plus</a>> ::- [+]<br>
<<a name="arrow">arrow</a>> ::- [>]<br>
<<a name="less_sign">less_sign</a>> ::- [<<a href="#"></a>]<br>
<br>
%----Numbers. Signs are made part of the same token here.<br>
<<a name="real">real</a>> ::- (<<a href="#signed_real">signed_real</a>>|<<a href="#unsigned_real">unsigned_real</a>>)<br>
<<a name="signed_real">signed_real</a>> ::- <<a href="#sign">sign</a>><<a href="#unsigned_real">unsigned_real</a>><br>
<<a name="unsigned_real">unsigned_real</a>> ::- (<<a href="#decimal_fraction">decimal_fraction</a>>|<<a href="#decimal_exponent">decimal_exponent</a>>)<br>
<<a name="rational">rational</a>> ::- (<<a href="#signed_rational">signed_rational</a>>|<<a href="#unsigned_rational">unsigned_rational</a>>)<br>
<<a name="signed_rational">signed_rational</a>> ::- <<a href="#sign">sign</a>><<a href="#unsigned_rational">unsigned_rational</a>><br>
<<a name="unsigned_rational">unsigned_rational</a>> ::- <<a href="#decimal">decimal</a>><<a href="#slash">slash</a>><<a href="#positive_decimal">positive_decimal</a>><br>
<<a name="integer">integer</a>> ::- (<<a href="#signed_integer">signed_integer</a>>|<<a href="#unsigned_integer">unsigned_integer</a>>)<br>
<<a name="signed_integer">signed_integer</a>> ::- <<a href="#sign">sign</a>><<a href="#unsigned_integer">unsigned_integer</a>><br>
<<a name="unsigned_integer">unsigned_integer</a>> ::- <<a href="#decimal">decimal</a>><br>
<<a name="decimal">decimal</a>> ::- (<<a href="#zero_numeric">zero_numeric</a>>|<<a href="#positive_decimal">positive_decimal</a>>)<br>
<<a name="positive_decimal">positive_decimal</a>> ::- <<a href="#non_zero_numeric">non_zero_numeric</a>><<a href="#numeric">numeric</a>>*<br>
<<a name="decimal_exponent">decimal_exponent</a>> ::- (<<a href="#decimal">decimal</a>>|<<a href="#decimal_fraction">decimal_fraction</a>>)<<a href="#exponent">exponent</a>><<a href="#exp_integer">exp_integer</a>><br>
<<a name="decimal_fraction">decimal_fraction</a>> ::- <<a href="#decimal">decimal</a>><<a href="#dot_decimal">dot_decimal</a>><br>
<<a name="dot_decimal">dot_decimal</a>> ::- <<a href="#dot">dot</a>><<a href="#numeric">numeric</a>><<a href="#numeric">numeric</a>>*<br>
<<a name="exp_integer">exp_integer</a>> ::- (<<a href="#signed_exp_integer">signed_exp_integer</a>>|<<a href="#unsigned_exp_integer">unsigned_exp_integer</a>>)<br>
<<a name="signed_exp_integer">signed_exp_integer</a>> ::- <<a href="#sign">sign</a>><<a href="#unsigned_exp_integer">unsigned_exp_integer</a>><br>
<<a name="unsigned_exp_integer">unsigned_exp_integer</a>> ::- <<a href="#numeric">numeric</a>><<a href="#numeric">numeric</a>>*<br>
<br>
%----Character classes<br>
<<a name="percentage_sign">percentage_sign</a>> ::: [%]<br>
<<a name="double_quote">double_quote</a>> ::: ["]<br>
<<a name="do_char">do_char</a>> ::: ([\40-\41\43-\133\135-\176]|[\\]["\\])<br>
<<a name="single_quote">single_quote</a>> ::: [']<br>
%---Space and visible characters upto ~, except ' and \<br>
<<a name="sq_char">sq_char</a>> ::: ([\40-\46\50-\133\135-\176]|[\\]['\\])<br>
<<a name="sign">sign</a>> ::: [+-]<br>
<<a name="dot">dot</a>> ::: [.]<br>
<<a name="exponent">exponent</a>> ::: [Ee]<br>
<<a name="slash">slash</a>> ::: [/]<br>
<<a name="zero_numeric">zero_numeric</a>> ::: [0]<br>
<<a name="non_zero_numeric">non_zero_numeric</a>> ::: [1-9]<br>
<<a name="numeric">numeric</a>> ::: [0-9]<br>
<<a name="lower_alpha">lower_alpha</a>> ::: [a-z]<br>
<<a name="upper_alpha">upper_alpha</a>> ::: [A-Z]<br>
<<a name="alpha_numeric">alpha_numeric</a>> ::: (<<a href="#lower_alpha">lower_alpha</a>>|<<a href="#upper_alpha">upper_alpha</a>>|<<a href="#numeric">numeric</a>>|[_])<br>
<<a name="dollar">dollar</a>> ::: [$]<br>
<<a name="printable_char">printable_char</a>> ::: .<br>
%----<printable_char> is any printable ASCII character, codes 32 (space) to 126<br>
%----(tilde). <printable_char> does not include tabs, newlines, bells, etc. The<br>
%----use of . does not not exclude tab, so this is a bit loose.<br>
<<a name="viewable_char">viewable_char</a>> ::: [.\n]<br>
%----<a href="#TOPOFPAGE">Top of Page</a>---------------------------------------------------------------<br>
<p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p></tt><p><tt></tt>
</p></body><style type="text/css" id="stylebot-global-css">body {font-variant-ligatures: no-common-ligatures !important;}</style></html>