\begin{syntax}
  formula ::= "true" | "false" ;
       | formula "->"  formula ; implication
       | formula "<->" formula ; equivalence
       | formula "/\" formula ; conjunction
       | formula "&&"  formula ; asymmetric conj.
       | formula "\/"  formula ; disjunction
       | formula "||"  formula ; asymmetric disj.
       | formula "by" formula ; proof indication
       | formula "so" formula ; consequence indication
       | "not" formula         ; negation
       | lqualid 	       ; symbol
       | prefix-op term        ;
       | term infix-op term    ;
       | lqualid term+         ; predicate application
       | "if" formula "then" formula ;
         "else" formula        ; conditional
       | "let" pattern "=" term "in" formula ; local binding
       | "match" term ("," term)+ "with" ;
         ("|" formula-case)+ "end" ; pattern matching
       | quantifier binders ("," binders )* ;
         triggers? "." formula              ; quantifier
       | label formula ; label
       | "(" formula ")" ; parentheses
       \
   quantifier ::= "forall" | "exists"
       \
   binders ::= lident+ ":" type
       \
   triggers ::= "[" trigger ("|" trigger)* "]" ;
     \
   trigger ::= tr-term ("," tr-term)*	;
     \
   tr-term ::= term | formula	;
     \
   formula-case ::= pattern "->" formula ; %
\end{syntax}
