285
|
1 |
%% $Id$
|
|
2 |
|
|
3 |
\appendix
|
|
4 |
\newlinechar=-1 %mathsing.sty sets \newlinechar=`\|, which would cause mayhem
|
|
5 |
|
|
6 |
\chapter{Syntax of Isabelle Theories}\label{app:TheorySyntax}
|
3108
|
7 |
|
9695
|
8 |
Below we present the full syntax of theory definition files as provided by
|
|
9 |
Pure Isabelle --- object-logics may add their own sections.
|
|
10 |
\S\ref{sec:ref-defining-theories} explains the meanings of these constructs.
|
|
11 |
The syntax obeys the following conventions:
|
285
|
12 |
\begin{itemize}
|
|
13 |
\item {\tt Typewriter font} denotes terminal symbols.
|
3108
|
14 |
|
|
15 |
\item $id$, $tid$, $nat$, $string$ and $longident$ are the lexical
|
|
16 |
classes of identifiers, type identifiers, natural numbers, quoted
|
|
17 |
strings (without the need for \verb$\$\dots\verb$\$ between lines)
|
|
18 |
and long qualified \ML{} identifiers.
|
|
19 |
The categories $id$, $tid$, $nat$ are fully defined in \iflabelundefined{Defining-Logics}%
|
|
20 |
{{\it The Isabelle Reference Manual}, chapter `Defining Logics'}%
|
|
21 |
{\S\ref{Defining-Logics}}.
|
|
22 |
|
|
23 |
\item $text$ is all text from the current position to the end of file,
|
|
24 |
$verbatim$ is any text enclosed in \verb.{|.\dots\verb.|}.
|
|
25 |
|
|
26 |
\item Comments in theories take the form {\tt (*}\dots{\tt*)} and may
|
|
27 |
be nested, just as in \ML.
|
285
|
28 |
\end{itemize}
|
|
29 |
|
|
30 |
\begin{rail}
|
|
31 |
|
3108
|
32 |
theoryDef : id '=' (name + '+') ('+' extension | ())
|
|
33 |
;
|
285
|
34 |
|
5369
|
35 |
name : id | string
|
|
36 |
;
|
285
|
37 |
|
3108
|
38 |
extension : (section +) 'end' ( () | ml )
|
|
39 |
;
|
285
|
40 |
|
1080
|
41 |
section : classes
|
|
42 |
| default
|
|
43 |
| types
|
|
44 |
| arities
|
5369
|
45 |
| nonterminals
|
1080
|
46 |
| consts
|
3108
|
47 |
| syntax
|
1080
|
48 |
| trans
|
|
49 |
| defs
|
3108
|
50 |
| constdefs
|
1080
|
51 |
| rules
|
3108
|
52 |
| axclass
|
|
53 |
| instance
|
1846
|
54 |
| oracle
|
6669
|
55 |
| locale
|
4543
|
56 |
| local
|
|
57 |
| global
|
5369
|
58 |
| setup
|
1080
|
59 |
;
|
|
60 |
|
3108
|
61 |
classes : 'classes' ( classDecl + )
|
|
62 |
;
|
|
63 |
|
|
64 |
classDecl : (id (() | '<' (id + ',')))
|
5369
|
65 |
;
|
285
|
66 |
|
1080
|
67 |
default : 'default' sort
|
285
|
68 |
;
|
|
69 |
|
|
70 |
sort : id
|
3098
|
71 |
| lbrace (id * ',') rbrace
|
285
|
72 |
;
|
|
73 |
|
1080
|
74 |
types : 'types' ( ( typeDecl ( () | '(' infix ')' ) ) + )
|
285
|
75 |
;
|
|
76 |
|
3215
|
77 |
infix : ( 'infixr' | 'infixl' ) (() | string) nat
|
3108
|
78 |
;
|
1488
|
79 |
|
|
80 |
typeDecl : typevarlist name
|
1385
|
81 |
( () | '=' ( string | type ) );
|
|
82 |
|
1488
|
83 |
typevarlist : () | tid | '(' ( tid + ',' ) ')';
|
|
84 |
|
1385
|
85 |
type : simpleType | '(' type ')' | type '=>' type |
|
|
86 |
'[' ( type + "," ) ']' '=>' type;
|
|
87 |
|
|
88 |
simpleType: id | ( tid ( () | '::' id ) ) |
|
3108
|
89 |
'(' ( type + "," ) ')' id | simpleType id
|
|
90 |
;
|
285
|
91 |
|
3108
|
92 |
arities : 'arities' ((name + ',') '::' arity +)
|
285
|
93 |
;
|
|
94 |
|
3108
|
95 |
arity : ( () | '(' (sort + ',') ')' ) sort
|
|
96 |
;
|
|
97 |
|
5369
|
98 |
nonterminals : 'nonterminals' (name+)
|
|
99 |
;
|
|
100 |
|
3108
|
101 |
consts : 'consts' ( mixfixConstDecl + )
|
|
102 |
;
|
285
|
103 |
|
3108
|
104 |
syntax : 'syntax' (() | mode) ( mixfixConstDecl + );
|
285
|
105 |
|
3108
|
106 |
mode : '(' name (() | 'output') ')'
|
|
107 |
;
|
|
108 |
|
|
109 |
mixfixConstDecl : constDecl (() | ( '(' mixfix ')' ))
|
|
110 |
;
|
285
|
111 |
|
1382
|
112 |
constDecl : ( name + ',') '::' (string | type);
|
285
|
113 |
|
|
114 |
mixfix : string ( () | ( () | ('[' (nat + ',') ']')) nat )
|
3215
|
115 |
| infix
|
285
|
116 |
| 'binder' string nat ;
|
|
117 |
|
1080
|
118 |
trans : 'translations' ( pat ( '==' | '=>' | '<=' ) pat + )
|
285
|
119 |
;
|
|
120 |
|
|
121 |
pat : ( () | ( '(' id ')' ) ) string;
|
|
122 |
|
1080
|
123 |
rules : 'rules' (( id string ) + )
|
285
|
124 |
;
|
|
125 |
|
1080
|
126 |
defs : 'defs' (( id string ) + )
|
|
127 |
;
|
|
128 |
|
4891
|
129 |
constdefs : 'constdefs' (name '::' (string | type) (() | mixfix) string +)
|
3108
|
130 |
;
|
|
131 |
|
|
132 |
axclass : 'axclass' classDecl (() | ( id string ) +)
|
|
133 |
;
|
|
134 |
|
|
135 |
instance : 'instance' ( name '<' name | name '::' arity) witness
|
|
136 |
;
|
|
137 |
|
5369
|
138 |
witness : (() | '(' ((string | id | longident) + ',') ')') (() | verbatim)
|
3108
|
139 |
;
|
|
140 |
|
6669
|
141 |
locale : 'locale' name '=' ( () | name '+' ) localeBody
|
|
142 |
;
|
|
143 |
|
|
144 |
localeBody : localeConsts ( () | localeAsms ) ( () | localeDefs )
|
|
145 |
;
|
|
146 |
|
|
147 |
localeConsts: ( 'fixes' ( ( (name '::' ( string | type )) ( () | '(' mixfix ')' ) ) + ) )
|
|
148 |
;
|
|
149 |
|
|
150 |
|
|
151 |
localeAsms: ( 'assumes' ( ( id string ) + ) )
|
|
152 |
;
|
|
153 |
|
|
154 |
localeDefs: ( 'defines' ( ( id string ) +) )
|
|
155 |
;
|
|
156 |
|
4317
|
157 |
oracle : 'oracle' name '=' name
|
1846
|
158 |
;
|
|
159 |
|
4543
|
160 |
local : 'local'
|
5369
|
161 |
;
|
4543
|
162 |
|
|
163 |
global : 'global'
|
|
164 |
;
|
|
165 |
|
5369
|
166 |
setup : 'setup' (id | longident)
|
|
167 |
;
|
|
168 |
|
1082
|
169 |
ml : 'ML' text
|
285
|
170 |
;
|
|
171 |
|
|
172 |
\end{rail}
|
5369
|
173 |
|
|
174 |
|
|
175 |
%%% Local Variables:
|
|
176 |
%%% mode: latex
|
|
177 |
%%% TeX-master: "ref"
|
|
178 |
%%% End:
|