BASIC-SPEC ::= basic-spec BASIC-ITEMS*
BASIC-ITEMS ::= SIG-ITEMS | FREE-DATATYPE | SORT-GEN
| VAR-ITEMS | LOCAL-VAR-AXIOMS | AXIOM-ITEMS
SIG-ITEMS ::= SORT-ITEMS | OP-ITEMS | PRED-ITEMS
| DATATYPE-ITEMS
SORT-ITEMS ::= sort-items SORT-ITEM+
SORT-ITEM ::= SORT-DECL
SORT-DECL ::= sort-decl SORT+
OP-ITEMS ::= op-items OP-ITEM+
OP-ITEM ::= OP-DECL | OP-DEFN
OP-DECL ::= op-decl OP-NAME+ OP-TYPE OP-ATTR*
OP-TYPE ::= TOTAL-OP-TYPE | PARTIAL-OP-TYPE
TOTAL-OP-TYPE ::= total-op-type SORTS SORT
PARTIAL-OP-TYPE ::= partial-op-type SORTS SORT
SORTS ::= sorts SORT*
OP-ATTR ::= BINARY-OP-ATTR | UNIT-OP-ATTR
BINARY-OP-ATTR ::= associative | commutative | idempotent
UNIT-OP-ATTR ::= unit-op-attr TERM
OP-DEFN ::= op-defn OP-NAME OP-HEAD TERM
OP-HEAD ::= TOTAL-OP-HEAD | PARTIAL-OP-HEAD
TOTAL-OP-HEAD ::= total-op-head ARG-DECL* SORT
PARTIAL-OP-HEAD ::= partial-op-head ARG-DECL* SORT
ARG-DECL ::= arg-decl VAR+ SORT
PRED-ITEMS ::= pred-items PRED-ITEM+
PRED-ITEM ::= PRED-DECL | PRED-DEFN
PRED-DECL ::= pred-decl PRED-NAME+ PRED-TYPE
PRED-TYPE ::= pred-type SORTS
PRED-DEFN ::= pred-defn PRED-NAME PRED-HEAD FORMULA
PRED-HEAD ::= pred-head ARG-DECL*
DATATYPE-ITEMS ::= datatype-items DATATYPE-DECL+
DATATYPE-DECL ::= datatype-decl SORT ALTERNATIVE+
ALTERNATIVE ::= TOTAL-CONSTRUCT | PARTIAL-CONSTRUCT
TOTAL-CONSTRUCT ::= total-construct OP-NAME COMPONENTS*
PARTIAL-CONSTRUCT::= partial-construct OP-NAME COMPONENTS*
COMPONENTS ::= TOTAL-SELECT | PARTIAL-SELECT | SORT
TOTAL-SELECT ::= total-select OP-NAME+ SORT
PARTIAL-SELECT ::= partial-select OP-NAME+ SORT
FREE-DATATYPE ::= free-datatype DATATYPE-ITEMS
SORT-GEN ::= sort-gen SIG-ITEMS+
VAR-ITEMS ::= var-items VAR-DECL+
VAR-DECL ::= var-decl VAR+ SORT
LOCAL-VAR-AXIOMS ::= local-var-axioms VAR-DECL+ AXIOM+
AXIOM-ITEMS ::= axiom-items AXIOM+
AXIOM ::= FORMULA
FORMULA ::= QUANTIFICATION | CONJUNCTION | DISJUNCTION
| IMPLICATION | EQUIVALENCE | NEGATION | ATOM
QUANTIFICATION ::= quantification QUANTIFIER VAR-DECL+ FORMULA
QUANTIFIER ::= forall | exists | exists-uniquely
CONJUNCTION ::= conjunction FORMULA+
DISJUNCTION ::= disjunction FORMULA+
IMPLICATION ::= implication FORMULA FORMULA
EQUIVALENCE ::= equivalence FORMULA FORMULA
NEGATION ::= negation FORMULA
ATOM ::= TRUTH | PREDICATION | DEFINEDNESS
| EXISTL-EQUATION | STRONG-EQUATION
TRUTH ::= true | false
PREDICATION ::= predication PRED-SYMB TERMS
PRED-SYMB ::= PRED-NAME | QUAL-PRED-NAME
QUAL-PRED-NAME ::= qual-pred-name PRED-NAME PRED-TYPE
DEFINEDNESS ::= definedness TERM
EXISTL-EQUATION ::= existl-equation TERM TERM
STRONG-EQUATION ::= strong-equation TERM TERM
TERMS ::= terms TERM*
TERM ::= SIMPLE-ID | QUAL-VAR | APPLICATION
| SORTED-TERM | CONDITIONAL
QUAL-VAR ::= qual-var VAR SORT
APPLICATION ::= application OP-SYMB TERMS
OP-SYMB ::= OP-NAME | QUAL-OP-NAME
QUAL-OP-NAME ::= qual-op-name OP-NAME OP-TYPE
SORTED-TERM ::= sorted-term TERM SORT
CONDITIONAL ::= conditional TERM FORMULA TERM
SORT ::= TOKEN-ID
OP-NAME ::= ID
PRED-NAME ::= ID
VAR ::= SIMPLE-ID
ID ::= TOKEN-ID | MIXFIX-ID
TOKEN-ID ::= TOKEN
MIXFIX-ID ::= TOKEN-PLACES
TOKEN-PLACES ::= token-places TOKEN-OR-PLACE+
TOKEN-OR-PLACE ::= TOKEN | PLACE
TOKEN ::= WORDS | SIGNS | DOT-WORDS
SIMPLE-ID ::= WORDS