author | wenzelm |
Fri, 17 May 2013 19:04:52 +0200 | |
changeset 52056 | fc458f304f93 |
parent 51417 | d266f9329368 |
child 52735 | 842b5e7dcac8 |
permissions | -rw-r--r-- |
48578 | 1 |
theory Sessions |
2 |
imports Base |
|
3 |
begin |
|
4 |
||
48584 | 5 |
chapter {* Isabelle sessions and build management \label{ch:session} *} |
6 |
||
7 |
text {* An Isabelle \emph{session} consists of a collection of related |
|
51055 | 8 |
theories that may be associated with formal documents |
9 |
(\chref{ch:present}). There is also a notion of \emph{persistent |
|
48604 | 10 |
heap} image to capture the state of a session, similar to |
11 |
object-code in compiled programming languages. Thus the concept of |
|
12 |
session resembles that of a ``project'' in common IDE environments, |
|
13 |
but the specific name emphasizes the connection to interactive |
|
14 |
theorem proving: the session wraps-up the results of |
|
15 |
user-interaction with the prover in a persistent form. |
|
48584 | 16 |
|
48604 | 17 |
Application sessions are built on a given parent session, which may |
18 |
be built recursively on other parents. Following this path in the |
|
19 |
hierarchy eventually leads to some major object-logic session like |
|
20 |
@{text "HOL"}, which itself is based on @{text "Pure"} as the common |
|
21 |
root of all sessions. |
|
48584 | 22 |
|
48604 | 23 |
Processing sessions may take considerable time. Isabelle build |
24 |
management helps to organize this efficiently. This includes |
|
25 |
support for parallel build jobs, in addition to the multithreaded |
|
26 |
theory and proof checking that is already provided by the prover |
|
27 |
process itself. *} |
|
28 |
||
48578 | 29 |
|
30 |
section {* Session ROOT specifications \label{sec:session-root} *} |
|
31 |
||
48579 | 32 |
text {* Session specifications reside in files called @{verbatim ROOT} |
33 |
within certain directories, such as the home locations of registered |
|
34 |
Isabelle components or additional project directories given by the |
|
35 |
user. |
|
36 |
||
37 |
The ROOT file format follows the lexical conventions of the |
|
38 |
\emph{outer syntax} of Isabelle/Isar, see also |
|
39 |
\cite{isabelle-isar-ref}. This defines common forms like |
|
40 |
identifiers, names, quoted strings, verbatim text, nested comments |
|
51417 | 41 |
etc. The grammar for @{syntax session_chapter} and @{syntax |
42 |
session_entry} is given as syntax diagram below; each ROOT file may |
|
43 |
contain multiple specifications like this. Chapters help to |
|
44 |
organize browser info (\secref{sec:info}), but have no formal |
|
45 |
meaning. The default chapter is ``@{text "Unsorted"}''. |
|
48579 | 46 |
|
48582 | 47 |
Isabelle/jEdit (\secref{sec:tool-jedit}) includes a simple editing |
51055 | 48 |
mode @{verbatim "isabelle-root"} for session ROOT files, which is |
49 |
enabled by default for any file of that name. |
|
48579 | 50 |
|
51 |
@{rail " |
|
51417 | 52 |
@{syntax_def session_chapter}: @'chapter' @{syntax name} |
53 |
; |
|
54 |
||
48579 | 55 |
@{syntax_def session_entry}: @'session' spec '=' (@{syntax name} '+')? body |
56 |
; |
|
48916 | 57 |
body: description? options? ( theories + ) files? |
48579 | 58 |
; |
48738
f8c1a5b9488f
simplified session specifications: names are taken verbatim and current directory is default;
wenzelm
parents:
48737
diff
changeset
|
59 |
spec: @{syntax name} groups? dir? |
48579 | 60 |
; |
61 |
groups: '(' (@{syntax name} +) ')' |
|
62 |
; |
|
63 |
dir: @'in' @{syntax name} |
|
64 |
; |
|
65 |
description: @'description' @{syntax text} |
|
66 |
; |
|
67 |
options: @'options' opts |
|
68 |
; |
|
48605
e777363440d6
allow negative int values as well, according to real = int | float;
wenzelm
parents:
48604
diff
changeset
|
69 |
opts: '[' ( (@{syntax name} '=' value | @{syntax name}) + ',' ) ']' |
e777363440d6
allow negative int values as well, according to real = int | float;
wenzelm
parents:
48604
diff
changeset
|
70 |
; |
e777363440d6
allow negative int values as well, according to real = int | float;
wenzelm
parents:
48604
diff
changeset
|
71 |
value: @{syntax name} | @{syntax real} |
48579 | 72 |
; |
48739 | 73 |
theories: @'theories' opts? ( @{syntax name} * ) |
48579 | 74 |
; |
75 |
files: @'files' ( @{syntax name} + ) |
|
76 |
"} |
|
77 |
||
78 |
\begin{description} |
|
79 |
||
80 |
\item \isakeyword{session}~@{text "A = B + body"} defines a new |
|
81 |
session @{text "A"} based on parent session @{text "B"}, with its |
|
82 |
content given in @{text body} (theories and auxiliary source files). |
|
83 |
Note that a parent (like @{text "HOL"}) is mandatory in practical |
|
84 |
applications: only Isabelle/Pure can bootstrap itself from nothing. |
|
85 |
||
86 |
All such session specifications together describe a hierarchy (tree) |
|
48738
f8c1a5b9488f
simplified session specifications: names are taken verbatim and current directory is default;
wenzelm
parents:
48737
diff
changeset
|
87 |
of sessions, with globally unique names. The new session name |
51055 | 88 |
@{text "A"} should be sufficiently long and descriptive to stand on |
89 |
its own in a potentially large library. |
|
48579 | 90 |
|
91 |
\item \isakeyword{session}~@{text "A (groups)"} indicates a |
|
92 |
collection of groups where the new session is a member. Group names |
|
93 |
are uninterpreted and merely follow certain conventions. For |
|
94 |
example, the Isabelle distribution tags some important sessions by |
|
48604 | 95 |
the group name called ``@{text "main"}''. Other projects may invent |
96 |
their own conventions, but this requires some care to avoid clashes |
|
97 |
within this unchecked name space. |
|
48579 | 98 |
|
99 |
\item \isakeyword{session}~@{text "A"}~\isakeyword{in}~@{text "dir"} |
|
48738
f8c1a5b9488f
simplified session specifications: names are taken verbatim and current directory is default;
wenzelm
parents:
48737
diff
changeset
|
100 |
specifies an explicit directory for this session; by default this is |
f8c1a5b9488f
simplified session specifications: names are taken verbatim and current directory is default;
wenzelm
parents:
48737
diff
changeset
|
101 |
the current directory of the @{verbatim ROOT} file. |
48579 | 102 |
|
103 |
All theories and auxiliary source files are located relatively to |
|
104 |
the session directory. The prover process is run within the same as |
|
105 |
its current working directory. |
|
106 |
||
107 |
\item \isakeyword{description}~@{text "text"} is a free-form |
|
108 |
annotation for this session. |
|
109 |
||
110 |
\item \isakeyword{options}~@{text "[x = a, y = b, z]"} defines |
|
48604 | 111 |
separate options (\secref{sec:system-options}) that are used when |
112 |
processing this session, but \emph{without} propagation to child |
|
113 |
sessions. Note that @{text "z"} abbreviates @{text "z = true"} for |
|
114 |
Boolean options. |
|
48579 | 115 |
|
116 |
\item \isakeyword{theories}~@{text "options names"} specifies a |
|
117 |
block of theories that are processed within an environment that is |
|
48604 | 118 |
augmented by the given options, in addition to the global session |
119 |
options given before. Any number of blocks of \isakeyword{theories} |
|
120 |
may be given. Options are only active for each |
|
121 |
\isakeyword{theories} block separately. |
|
48579 | 122 |
|
123 |
\item \isakeyword{files}~@{text "files"} lists additional source |
|
48604 | 124 |
files that are involved in the processing of this session. This |
125 |
should cover anything outside the formal content of the theory |
|
48579 | 126 |
sources, say some auxiliary {\TeX} files that are required for |
51055 | 127 |
document processing. In contrast, files that are loaded formally |
128 |
within a theory, e.g.\ via @{keyword "ML_file"}, need not be |
|
129 |
declared again. |
|
48579 | 130 |
|
131 |
\end{description} |
|
48580 | 132 |
*} |
48579 | 133 |
|
51055 | 134 |
|
48580 | 135 |
subsubsection {* Examples *} |
136 |
||
137 |
text {* See @{file "~~/src/HOL/ROOT"} for a diversity of practically |
|
51055 | 138 |
relevant situations, although it uses relatively complex |
139 |
quasi-hierarchic naming conventions like @{text "HOL\<dash>SPARK"}, |
|
140 |
@{text "HOL\<dash>SPARK\<dash>Examples"}. An alternative is to use |
|
48738
f8c1a5b9488f
simplified session specifications: names are taken verbatim and current directory is default;
wenzelm
parents:
48737
diff
changeset
|
141 |
unqualified names that are relatively long and descriptive, as in |
f8c1a5b9488f
simplified session specifications: names are taken verbatim and current directory is default;
wenzelm
parents:
48737
diff
changeset
|
142 |
the Archive of Formal Proofs (\url{http://afp.sf.net}), for |
f8c1a5b9488f
simplified session specifications: names are taken verbatim and current directory is default;
wenzelm
parents:
48737
diff
changeset
|
143 |
example. *} |
48578 | 144 |
|
145 |
||
146 |
section {* System build options \label{sec:system-options} *} |
|
147 |
||
48580 | 148 |
text {* See @{file "~~/etc/options"} for the main defaults provided by |
48582 | 149 |
the Isabelle distribution. Isabelle/jEdit (\secref{sec:tool-jedit}) |
150 |
includes a simple editing mode @{verbatim "isabelle-options"} for |
|
151 |
this file-format. |
|
48693
ceeea46bdeba
"isabelle options" prints Isabelle system options;
wenzelm
parents:
48684
diff
changeset
|
152 |
|
51055 | 153 |
The following options are particulary relevant to build Isabelle |
154 |
sessions, in particular with document preparation |
|
155 |
(\chref{ch:present}). |
|
156 |
||
157 |
\begin{itemize} |
|
158 |
||
159 |
\item @{system_option_def "browser_info"} controls output of HTML |
|
160 |
browser info, see also \secref{sec:info}. |
|
161 |
||
162 |
\item @{system_option_def "document"} specifies the document output |
|
163 |
format, see @{tool document} option @{verbatim "-o"} in |
|
164 |
\secref{sec:tool-document}. In practice, the most relevant values |
|
165 |
are @{verbatim "document=false"} or @{verbatim "document=pdf"}. |
|
166 |
||
167 |
\item @{system_option_def "document_output"} specifies an |
|
168 |
alternative directory for generated output of the document |
|
169 |
preparation system; the default is within the @{setting |
|
170 |
"ISABELLE_BROWSER_INFO"} hierarchy as explained in |
|
171 |
\secref{sec:info}. See also @{tool mkroot}, which generates a |
|
172 |
default configuration with output readily available to the author of |
|
173 |
the document. |
|
174 |
||
175 |
\item @{system_option_def "document_variants"} specifies document |
|
176 |
variants as a colon-separated list of @{text "name=tags"} entries, |
|
177 |
corresponding to @{tool document} options @{verbatim "-n"} and |
|
178 |
@{verbatim "-t"}. |
|
179 |
||
180 |
For example, @{verbatim |
|
181 |
"document_variants=document:outline=/proof,/ML"} indicates two |
|
182 |
documents: the one called @{verbatim document} with default tags, |
|
183 |
and the other called @{verbatim outline} where proofs and ML |
|
184 |
sections are folded. |
|
185 |
||
186 |
Document variant names are just a matter of conventions. It is also |
|
187 |
possible to use different document variant names (without tags) for |
|
188 |
different document root entries, see also |
|
189 |
\secref{sec:tool-document}. |
|
190 |
||
191 |
\item @{system_option_def "document_graph"} tells whether the |
|
192 |
generated document files should include a theory graph (cf.\ |
|
193 |
\secref{sec:browse} and \secref{sec:info}). The resulting EPS or |
|
194 |
PDF file can be included as graphics in {\LaTeX}. |
|
195 |
||
196 |
Note that this option is usually determined as static parameter of |
|
197 |
some session (e.g.\ within its @{verbatim ROOT} file) and \emph{not} |
|
198 |
given globally or on the command line of @{tool build}. |
|
199 |
||
200 |
\item @{system_option_def "threads"} determines the number of worker |
|
201 |
threads for parallel checking of theories and proofs. The default |
|
202 |
@{text "0"} means that a sensible maximum value is determined by the |
|
203 |
underlying hardware. For machines with many cores or with |
|
204 |
hyperthreading, this is often requires manual adjustment (on the |
|
205 |
command-line or within personal settings or preferences, not within |
|
206 |
a session @{verbatim ROOT}). |
|
207 |
||
208 |
\item @{system_option_def "condition"} specifies a comma-separated |
|
209 |
list of process environment variables (or Isabelle settings) that |
|
210 |
are required for the subsequent theories to be processed. |
|
211 |
Conditions are considered ``true'' if the corresponding environment |
|
212 |
value is defined and non-empty. |
|
213 |
||
214 |
For example, the @{verbatim "condition=ISABELLE_FULL_TEST"} may be |
|
215 |
used to guard extraordinary theories, which are meant to be enabled |
|
216 |
explicitly via some shell prefix @{verbatim "env ISABELLE_FULL_TEST=true"} |
|
217 |
before invoking @{tool build}. |
|
218 |
||
219 |
\item @{system_option_def "timeout"} specifies a real wall-clock |
|
220 |
timeout (in seconds) for the session as a whole. The timer is |
|
221 |
controlled outside the ML process by the JVM that runs |
|
222 |
Isabelle/Scala. Thus it is relatively reliable in canceling |
|
223 |
processes that get out of control, even if there is a deadlock |
|
224 |
without CPU time usage. |
|
225 |
||
226 |
\end{itemize} |
|
227 |
||
48693
ceeea46bdeba
"isabelle options" prints Isabelle system options;
wenzelm
parents:
48684
diff
changeset
|
228 |
The @{tool_def options} tool prints Isabelle system options. Its |
ceeea46bdeba
"isabelle options" prints Isabelle system options;
wenzelm
parents:
48684
diff
changeset
|
229 |
command-line usage is: |
ceeea46bdeba
"isabelle options" prints Isabelle system options;
wenzelm
parents:
48684
diff
changeset
|
230 |
\begin{ttbox} |
ceeea46bdeba
"isabelle options" prints Isabelle system options;
wenzelm
parents:
48684
diff
changeset
|
231 |
Usage: isabelle options [OPTIONS] [MORE_OPTIONS ...] |
ceeea46bdeba
"isabelle options" prints Isabelle system options;
wenzelm
parents:
48684
diff
changeset
|
232 |
|
ceeea46bdeba
"isabelle options" prints Isabelle system options;
wenzelm
parents:
48684
diff
changeset
|
233 |
Options are: |
ceeea46bdeba
"isabelle options" prints Isabelle system options;
wenzelm
parents:
48684
diff
changeset
|
234 |
-b include $ISABELLE_BUILD_OPTIONS |
50531 |