| 6120 |      1 | %% $Id$
 | 
|  |      2 | %% THIS FILE IS COMMON TO ALL LOGIC MANUALS
 | 
|  |      3 | 
 | 
|  |      4 | \chapter{Syntax definitions}
 | 
|  |      5 | The syntax of each logic is presented using a context-free grammar.
 | 
|  |      6 | These grammars obey the following conventions:
 | 
|  |      7 | \begin{itemize}
 | 
|  |      8 | \item identifiers denote nonterminal symbols
 | 
|  |      9 | \item \texttt{typewriter} font denotes terminal symbols
 | 
|  |     10 | \item parentheses $(\ldots)$ express grouping
 | 
|  |     11 | \item constructs followed by a Kleene star, such as $id^*$ and $(\ldots)^*$
 | 
|  |     12 | can be repeated~0 or more times 
 | 
|  |     13 | \item alternatives are separated by a vertical bar,~$|$
 | 
|  |     14 | \item the symbol for alphanumeric identifiers is~{\it id\/} 
 | 
|  |     15 | \item the symbol for scheme variables is~{\it var}
 | 
|  |     16 | \end{itemize}
 | 
|  |     17 | To reduce the number of nonterminals and grammar rules required, Isabelle's
 | 
|  |     18 | syntax module employs {\bf priorities},\index{priorities} or precedences.
 | 
|  |     19 | Each grammar rule is given by a mixfix declaration, which has a priority,
 | 
|  |     20 | and each argument place has a priority.  This general approach handles
 | 
|  |     21 | infix operators that associate either to the left or to the right, as well
 | 
|  |     22 | as prefix and binding operators.
 | 
|  |     23 | 
 | 
|  |     24 | In a syntactically valid expression, an operator's arguments never involve
 | 
|  |     25 | an operator of lower priority unless brackets are used.  Consider
 | 
|  |     26 | first-order logic, where $\exists$ has lower priority than $\disj$,
 | 
|  |     27 | which has lower priority than $\conj$.  There, $P\conj Q \disj R$
 | 
|  |     28 | abbreviates $(P\conj Q) \disj R$ rather than $P\conj (Q\disj R)$.  Also,
 | 
|  |     29 | $\exists x.P\disj Q$ abbreviates $\exists x.(P\disj Q)$ rather than
 | 
|  |     30 | $(\exists x.P)\disj Q$.  Note especially that $P\disj(\exists x.Q)$
 | 
|  |     31 | becomes syntactically invalid if the brackets are removed.
 | 
|  |     32 | 
 | 
|  |     33 | A {\bf binder} is a symbol associated with a constant of type
 | 
| 9695 |     34 | $(\sigma\To\tau)\To\tau'$.  For instance, we may declare~$\forall$ as a binder
 | 
|  |     35 | for the constant~$All$, which has type $(\alpha\To o)\To o$.  This defines the
 | 
|  |     36 | syntax $\forall x.t$ to mean $All(\lambda x.t)$.  We can also write $\forall
 | 
|  |     37 | x@1\ldots x@m.t$ to abbreviate $\forall x@1.  \ldots \forall x@m.t$; this is
 | 
|  |     38 | possible for any constant provided that $\tau$ and $\tau'$ are the same type.
 | 
|  |     39 | HOL's description operator $\varepsilon x.P\,x$ has type $(\alpha\To
 | 
|  |     40 | bool)\To\alpha$ and can bind only one variable, except when $\alpha$ is
 | 
|  |     41 | $bool$.  ZF's bounded quantifier $\forall x\in A.P(x)$ cannot be declared as a
 | 
|  |     42 | binder because it has type $[i, i\To o]\To o$.  The syntax for binders allows
 | 
| 6120 |     43 | type constraints on bound variables, as in
 | 
|  |     44 | \[ \forall (x{::}\alpha) \; (y{::}\beta) \; z{::}\gamma. Q(x,y,z) \]
 | 
|  |     45 | 
 | 
|  |     46 | To avoid excess detail, the logic descriptions adopt a semi-formal style.
 | 
|  |     47 | Infix operators and binding operators are listed in separate tables, which
 | 
|  |     48 | include their priorities.  Grammar descriptions do not include numeric
 | 
|  |     49 | priorities; instead, the rules appear in order of decreasing priority.
 | 
|  |     50 | This should suffice for most purposes; for full details, please consult the
 | 
|  |     51 | actual syntax definitions in the {\tt.thy} files.
 | 
|  |     52 | 
 | 
|  |     53 | Each nonterminal symbol is associated with some Isabelle type.  For
 | 
|  |     54 | example, the formulae of first-order logic have type~$o$.  Every
 | 
|  |     55 | Isabelle expression of type~$o$ is therefore a formula.  These include
 | 
|  |     56 | atomic formulae such as $P$, where $P$ is a variable of type~$o$, and more
 | 
|  |     57 | generally expressions such as $P(t,u)$, where $P$, $t$ and~$u$ have
 | 
|  |     58 | suitable types.  Therefore, `expression of type~$o$' is listed as a
 | 
|  |     59 | separate possibility in the grammar for formulae.
 | 
|  |     60 | 
 | 
|  |     61 | 
 |