! BASIC-SPEC ::= BASIC-ITEMS... BASIC-ITEMS ::= SORT-ITEMS | OP-ITEMS | SORT-GEN-ITEMS | VAR-ITEMS | AXIOM-ITEMS ! SORT-ITEMS ::= SORT-S SORT-ITEM;... SORT-S ::= sort | sorts SORT-ITEM ::= SORT-DECL | SUBSORT-DECL | SUBSORT-DEFN | ISO-DECL | DATATYPE-DECL SORT-DECL ::= SORT,...,SORT SUBSORT-DECL ::= SORT,...,SORT < SORT SUBSORT-DEFN ::= SORT = { VAR : SORT . FORMULA } ISO-DECL ::= SORT,...,SORT = SORT ! DATATYPE-DECL ::= SORT "::=" ALTERNATIVE "|"..."|" ALTERNATIVE ALTERNATIVE ::= CONSTRUCT | SUBSORTS CONSTRUCT ::= FUN-NAME : COMPONENT *...* COMPONENT | FUN-NAME ! | FUN-NAME :? COMPONENT *...* COMPONENT ! COMPONENT ::= ( FUN-NAME,...,FUN-NAME : SORT ) | SORT ! | ( FUN-NAME,...,FUN-NAME :? SORT ) SUBSORTS ::= SORT-S SORT,...,SORT ! OP-ITEMS ::= OP-S OP-ITEM;... OP-S ::= op | ops ! OP-ITEM ::= FUN-DECL | FUN-DEFN | PRED-DECL | PRED-DEFN ! FUN-DECL ::= FUN-NAME,...,FUN-NAME : FUN-TYPE FUN-ATTRS ! FUN-TYPE ::= TOTAL-FUN-TYPE | PARTIAL-FUN-TYPE | ( FUN-TYPE ) TOTAL-FUN-TYPE ::= SORTS -> SORT | SORT PARTIAL-FUN-TYPE ::= SORTS ->? SORT | ? SORT SORTS ::= SORT *...* SORT FUN-DEFN ::= FUN-NAME FUN-HEAD = TERM FUN-HEAD ::= TOTAL-FUN-HEAD | PARTIAL-FUN-HEAD TOTAL-FUN-HEAD ::= ( ARG-DECLS ) : SORT | : SORT PARTIAL-FUN-HEAD ::= ( ARG-DECLS ) :? SORT | :? SORT ARG-DECLS ::= ARG-DECL;...;ARG-DECL ARG-DECL ::= VAR,...,VAR : SORT ! FUN-ATTRS ::= ,FUN-ATTR,...,FUN-ATTR | EMPTY ! FUN-ATTR ::= assoc | comm | idem | unit FUN-SYMB PRED-DECL ::= PRED-NAME,...,PRED-NAME : PRED-TYPE PRED-TYPE ::= pred ( SORTS ) | pred ( ) PRED-DEFN ::= PRED-NAME PRED-HEAD <=> FORMULA PRED-HEAD ::= ( ARG-DECLS ) | EMPTY ! SORT-GEN-ITEMS ::= OPT-FREELY generated SIG-DECL-GROUP ! OPT-FREELY ::= freely | EMPTY ! SIG-DECL-GROUP ::= { SIG-DECL-ITEMS;... } | SORT-S SORT-ITEM | OP-S OP-ITEM SIG-DECL-ITEMS ::= SORT-ITEMS | OP-ITEMS ! VAR-ITEMS ::= VAR-S VAR-DECL;... VAR-S ::= var | vars VAR-DECL ::= VAR,...,VAR : SORT ! AXIOM-ITEMS ::= AXIOM-S; ATOM;... | AXIOM-S; | AXIOM-S ! AXIOM-S ::= axiom AXIOM | axioms AXIOM | QUANTIFICATION AXIOM ::= FORMULA ! FORMULA ::= QUANTIFICATION | CONJUNCTION | DISJUNCTION ! | IMPLICATION | EQUIVALENCE | NEGATION | ATOM | (FORMULA) ! QUANTIFICATION ::= QUANTIFIER VAR-DECL;... . FORMULA . ... . FORMULA ! QUANTIFIER ::= forall | exists | exists! CONJUNCTION ::= FORMULA /\ FORMULA /\.../\ FORMULA DISJUNCTION ::= FORMULA \/ FORMULA \/...\/ FORMULA IMPLICATION ::= FORMULA => FORMULA | FORMULA if FORMULA EQUIVALENCE ::= FORMULA <=> FORMULA NEGATION ::= not FORMULA ATOM ::= TRUTH | PREDICATION | DEFINEDNESS | EXISTL-EQUATION | STRONG-EQUATION | MEMBERSHIP TRUTH ::= true | false PREDICATION ::= PRED-SYMB ( TERMS ) | PRED-SYMB | MIXFIX-TERMS ! PRED-SYMB ::= PRED-NAME : PRED-TYPE | PRED-NAME | ( PRED-SYMB ) ! DEFINEDNESS ::= defined TERM ! EXISTL-EQUATION ::= TERM =.= TERM STRONG-EQUATION ::= TERM = TERM MEMBERSHIP ::= TERM in SORT TERMS ::= TERM,...,TERM ! MIXFIX-TERMS ::= MIX-TERM MIX-TERM ... MIX-TERM ! MIX-TERM ::= MIX-ID | TERM TERM ::= VAR | APPLICATION | SORTED-TERM | CAST | ( TERM ) APPLICATION ::= FUN-SYMB ( TERMS ) | FUN-SYMB | MIXFIX-TERMS ! FUN-SYMB ::= FUN-NAME : FUN-TYPE | FUN-NAME | ( FUN-SYMB ) SORTED-TERM ::= TERM : SORT CAST ::= TERM as SORT ! SORT ::= WORDS-ID FUN-NAME ::= ID PRED-NAME ::= ID ! VAR ::= WORDS EMPTY ::=