doc-src/Codegen/Thy/document/Further.tex
author haftmann
Tue, 14 Jul 2009 16:27:32 +0200
changeset 32069 6d28bbd33e2c
parent 31050 555b56b66fcf
child 34155 14aaccb399b3
permissions -rw-r--r--
prefer code_inline over code_unfold; use code_unfold_post where appropriate
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
28447
haftmann
parents:
diff changeset
     1
%
haftmann
parents:
diff changeset
     2
\begin{isabellebody}%
haftmann
parents:
diff changeset
     3
\def\isabellecontext{Further}%
haftmann
parents:
diff changeset
     4
%
haftmann
parents:
diff changeset
     5
\isadelimtheory
haftmann
parents:
diff changeset
     6
%
haftmann
parents:
diff changeset
     7
\endisadelimtheory
haftmann
parents:
diff changeset
     8
%
haftmann
parents:
diff changeset
     9
\isatagtheory
haftmann
parents:
diff changeset
    10
\isacommand{theory}\isamarkupfalse%
haftmann
parents:
diff changeset
    11
\ Further\isanewline
haftmann
parents:
diff changeset
    12
\isakeyword{imports}\ Setup\isanewline
haftmann
parents:
diff changeset
    13
\isakeyword{begin}%
haftmann
parents:
diff changeset
    14
\endisatagtheory
haftmann
parents:
diff changeset
    15
{\isafoldtheory}%
haftmann
parents:
diff changeset
    16
%
haftmann
parents:
diff changeset
    17
\isadelimtheory
haftmann
parents:
diff changeset
    18
%
haftmann
parents:
diff changeset
    19
\endisadelimtheory
haftmann
parents:
diff changeset
    20
%
haftmann
parents:
diff changeset
    21
\isamarkupsection{Further issues \label{sec:further}%
haftmann
parents:
diff changeset
    22
}
haftmann
parents:
diff changeset
    23
\isamarkuptrue%
haftmann
parents:
diff changeset
    24
%
haftmann
parents:
diff changeset
    25
\isamarkupsubsection{Further reading%
haftmann
parents:
diff changeset
    26
}
haftmann
parents:
diff changeset
    27
\isamarkuptrue%
haftmann
parents:
diff changeset
    28
%
haftmann
parents:
diff changeset
    29
\begin{isamarkuptext}%
haftmann
parents:
diff changeset
    30
Do dive deeper into the issue of code generation, you should visit
haftmann
parents:
diff changeset
    31
  the Isabelle/Isar Reference Manual \cite{isabelle-isar-ref} which
28593
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
    32
  contains exhaustive syntax diagrams.%
28447
haftmann
parents:
diff changeset
    33
\end{isamarkuptext}%
haftmann
parents:
diff changeset
    34
\isamarkuptrue%
haftmann
parents:
diff changeset
    35
%
haftmann
parents:
diff changeset
    36
\isamarkupsubsection{Modules%
haftmann
parents:
diff changeset
    37
}
haftmann
parents:
diff changeset
    38
\isamarkuptrue%
haftmann
parents:
diff changeset
    39
%
haftmann
parents:
diff changeset
    40
\begin{isamarkuptext}%
haftmann
parents:
diff changeset
    41
When invoking the \hyperlink{command.export-code}{\mbox{\isa{\isacommand{export{\isacharunderscore}code}}}} command it is possible to leave
haftmann
parents:
diff changeset
    42
  out the \hyperlink{keyword.module-name}{\mbox{\isa{\isakeyword{module{\isacharunderscore}name}}}} part;  then code is distributed over
haftmann
parents:
diff changeset
    43
  different modules, where the module name space roughly is induced
28635
cc53d2ab0170 filled remaining gaps
haftmann
parents: 28593
diff changeset
    44
  by the \isa{Isabelle} theory name space.
28447
haftmann
parents:
diff changeset
    45
haftmann
parents:
diff changeset
    46
  Then sometimes the awkward situation occurs that dependencies between
haftmann
parents:
diff changeset
    47
  definitions introduce cyclic dependencies between modules, which in the
haftmann
parents:
diff changeset
    48
  \isa{Haskell} world leaves you to the mercy of the \isa{Haskell} implementation
haftmann
parents:
diff changeset
    49
  you are using,  while for \isa{SML}/\isa{OCaml} code generation is not possible.
haftmann
parents:
diff changeset
    50
haftmann
parents:
diff changeset
    51
  A solution is to declare module names explicitly.
haftmann
parents:
diff changeset
    52
  Let use assume the three cyclically dependent
haftmann
parents:
diff changeset
    53
  modules are named \emph{A}, \emph{B} and \emph{C}.
haftmann
parents:
diff changeset
    54
  Then, by stating%
haftmann
parents:
diff changeset
    55
\end{isamarkuptext}%
haftmann
parents:
diff changeset
    56
\isamarkuptrue%
28593
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
    57
%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
    58
\isadelimquote
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
    59
%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
    60
\endisadelimquote
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
    61
%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
    62
\isatagquote
28447
haftmann
parents:
diff changeset
    63
\isacommand{code{\isacharunderscore}modulename}\isamarkupfalse%
haftmann
parents:
diff changeset
    64
\ SML\isanewline
haftmann
parents:
diff changeset
    65
\ \ A\ ABC\isanewline
haftmann
parents:
diff changeset
    66
\ \ B\ ABC\isanewline
haftmann
parents:
diff changeset
    67
\ \ C\ ABC%
28593
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
    68
\endisatagquote
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
    69
{\isafoldquote}%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
    70
%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
    71
\isadelimquote
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
    72
%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
    73
\endisadelimquote
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
    74
%
28447
haftmann
parents:
diff changeset
    75
\begin{isamarkuptext}%
haftmann
parents:
diff changeset
    76
we explicitly map all those modules on \emph{ABC},
haftmann
parents:
diff changeset
    77
  resulting in an ad-hoc merge of this three modules
haftmann
parents:
diff changeset
    78
  at serialisation time.%
haftmann
parents:
diff changeset
    79
\end{isamarkuptext}%
haftmann
parents:
diff changeset
    80
\isamarkuptrue%
haftmann
parents:
diff changeset
    81
%
haftmann
parents:
diff changeset
    82
\isamarkupsubsection{Evaluation oracle%
haftmann
parents:
diff changeset
    83
}
haftmann
parents:
diff changeset
    84
\isamarkuptrue%
haftmann
parents:
diff changeset
    85
%
28593
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
    86
\begin{isamarkuptext}%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
    87
Code generation may also be used to \emph{evaluate} expressions
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
    88
  (using \isa{SML} as target language of course).
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
    89
  For instance, the \hyperlink{command.value}{\mbox{\isa{\isacommand{value}}}} allows to reduce an expression to a
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
    90
  normal form with respect to the underlying code equations:%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
    91
\end{isamarkuptext}%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
    92
\isamarkuptrue%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
    93
%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
    94
\isadelimquote
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
    95
%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
    96
\endisadelimquote
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
    97
%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
    98
\isatagquote
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
    99
\isacommand{value}\isamarkupfalse%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   100
\ {\isachardoublequoteopen}{\isadigit{4}}{\isadigit{2}}\ {\isacharslash}\ {\isacharparenleft}{\isadigit{1}}{\isadigit{2}}\ {\isacharcolon}{\isacharcolon}\ rat{\isacharparenright}{\isachardoublequoteclose}%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   101
\endisatagquote
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   102
{\isafoldquote}%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   103
%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   104
\isadelimquote
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   105
%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   106
\endisadelimquote
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   107
%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   108
\begin{isamarkuptext}%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   109
\noindent will display \isa{{\isadigit{7}}\ {\isacharslash}\ {\isadigit{2}}}.
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   110
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   111
  The \hyperlink{method.eval}{\mbox{\isa{eval}}} method tries to reduce a goal by code generation to \isa{True}
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   112
  and solves it in that case, but fails otherwise:%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   113
\end{isamarkuptext}%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   114
\isamarkuptrue%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   115
%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   116
\isadelimquote
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   117
%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   118
\endisadelimquote
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   119
%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   120
\isatagquote
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   121
\isacommand{lemma}\isamarkupfalse%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   122
\ {\isachardoublequoteopen}{\isadigit{4}}{\isadigit{2}}\ {\isacharslash}\ {\isacharparenleft}{\isadigit{1}}{\isadigit{2}}\ {\isacharcolon}{\isacharcolon}\ rat{\isacharparenright}\ {\isacharequal}\ {\isadigit{7}}\ {\isacharslash}\ {\isadigit{2}}{\isachardoublequoteclose}\isanewline
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   123
\ \ \isacommand{by}\isamarkupfalse%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   124
\ eval%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   125
\endisatagquote
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   126
{\isafoldquote}%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   127
%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   128
\isadelimquote
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   129
%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   130
\endisadelimquote
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   131
%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   132
\begin{isamarkuptext}%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   133
\noindent The soundness of the \hyperlink{method.eval}{\mbox{\isa{eval}}} method depends crucially 
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   134
  on the correctness of the code generator;  this is one of the reasons
31050
555b56b66fcf adaptation replaces adaption
haftmann
parents: 30880
diff changeset
   135
  why you should not use adaptation (see \secref{sec:adaptation}) frivolously.%
28593
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   136
\end{isamarkuptext}%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   137
\isamarkuptrue%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   138
%
28447
haftmann
parents:
diff changeset
   139
\isamarkupsubsection{Code antiquotation%
haftmann
parents:
diff changeset
   140
}
haftmann
parents:
diff changeset
   141
\isamarkuptrue%
haftmann
parents:
diff changeset
   142
%
28593
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   143
\begin{isamarkuptext}%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   144
In scenarios involving techniques like reflection it is quite common
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   145
  that code generated from a theory forms the basis for implementing
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   146
  a proof procedure in \isa{SML}.  To facilitate interfacing of generated code
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   147
  with system code, the code generator provides a \isa{code} antiquotation:%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   148
\end{isamarkuptext}%
28447
haftmann
parents:
diff changeset
   149
\isamarkuptrue%
haftmann
parents:
diff changeset
   150
%
28593
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   151
\isadelimquote
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   152
%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   153
\endisadelimquote
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   154
%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   155
\isatagquote
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   156
\isacommand{datatype}\isamarkupfalse%
30880
257cbe43faa8 tuned manual
haftmann
parents: 30227
diff changeset
   157
\ form\ {\isacharequal}\ T\ {\isacharbar}\ F\ {\isacharbar}\ And\ form\ form\ {\isacharbar}\ Or\ form\ form\ %
30227
853abb4853cc tuned manuals
haftmann
parents: 30226
diff changeset
   158
\endisatagquote
853abb4853cc tuned manuals
haftmann
parents: 30226
diff changeset
   159
{\isafoldquote}%
853abb4853cc tuned manuals
haftmann
parents: 30226
diff changeset
   160
%
853abb4853cc tuned manuals
haftmann
parents: 30226
diff changeset
   161
\isadelimquote
853abb4853cc tuned manuals
haftmann
parents: 30226
diff changeset
   162
%
853abb4853cc tuned manuals
haftmann
parents: 30226
diff changeset
   163
\endisadelimquote
853abb4853cc tuned manuals
haftmann
parents: 30226
diff changeset
   164
%
853abb4853cc tuned manuals
haftmann
parents: 30226
diff changeset
   165
\isadelimquotett
30880
257cbe43faa8 tuned manual
haftmann
parents: 30227
diff changeset
   166
\ %
30227
853abb4853cc tuned manuals
haftmann
parents: 30226
diff changeset
   167
\endisadelimquotett
853abb4853cc tuned manuals
haftmann
parents: 30226
diff changeset
   168
%
853abb4853cc tuned manuals
haftmann
parents: 30226
diff changeset
   169
\isatagquotett
28593
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   170
\isacommand{ML}\isamarkupfalse%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   171
\ {\isacharverbatimopen}\isanewline
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   172
\ \ fun\ eval{\isacharunderscore}form\ %
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   173
\isaantiq
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   174
code\ T%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   175
\endisaantiq
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   176
\ {\isacharequal}\ true\isanewline
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   177
\ \ \ \ {\isacharbar}\ eval{\isacharunderscore}form\ %
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   178
\isaantiq
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   179
code\ F%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   180
\endisaantiq
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   181
\ {\isacharequal}\ false\isanewline
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   182
\ \ \ \ {\isacharbar}\ eval{\isacharunderscore}form\ {\isacharparenleft}%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   183
\isaantiq
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   184
code\ And%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   185
\endisaantiq
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   186
\ {\isacharparenleft}p{\isacharcomma}\ q{\isacharparenright}{\isacharparenright}\ {\isacharequal}\isanewline
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   187
\ \ \ \ \ \ \ \ eval{\isacharunderscore}form\ p\ andalso\ eval{\isacharunderscore}form\ q\isanewline
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   188
\ \ \ \ {\isacharbar}\ eval{\isacharunderscore}form\ {\isacharparenleft}%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   189
\isaantiq
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   190
code\ Or%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   191
\endisaantiq
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   192
\ {\isacharparenleft}p{\isacharcomma}\ q{\isacharparenright}{\isacharparenright}\ {\isacharequal}\isanewline
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   193
\ \ \ \ \ \ \ \ eval{\isacharunderscore}form\ p\ orelse\ eval{\isacharunderscore}form\ q{\isacharsemicolon}\isanewline
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   194
{\isacharverbatimclose}%
30227
853abb4853cc tuned manuals
haftmann
parents: 30226
diff changeset
   195
\endisatagquotett
853abb4853cc tuned manuals
haftmann
parents: 30226
diff changeset
   196
{\isafoldquotett}%
28593
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   197
%
30227
853abb4853cc tuned manuals
haftmann
parents: 30226
diff changeset
   198
\isadelimquotett
28593
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   199
%
30227
853abb4853cc tuned manuals
haftmann
parents: 30226
diff changeset
   200
\endisadelimquotett
28593
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   201
%
28447
haftmann
parents:
diff changeset
   202
\begin{isamarkuptext}%
28593
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   203
\noindent \isa{code} takes as argument the name of a constant;  after the
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   204
  whole \isa{SML} is read, the necessary code is generated transparently
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   205
  and the corresponding constant names are inserted.  This technique also
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   206
  allows to use pattern matching on constructors stemming from compiled
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   207
  \isa{datatypes}.
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   208
29798
6df726203e39 proper datatype abstraction example
haftmann
parents: 28635
diff changeset
   209
  For a less simplistic example, theory \hyperlink{theory.Ferrack}{\mbox{\isa{Ferrack}}} is
28593
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   210
  a good reference.%
28447
haftmann
parents:
diff changeset
   211
\end{isamarkuptext}%
haftmann
parents:
diff changeset
   212
\isamarkuptrue%
haftmann
parents:
diff changeset
   213
%
haftmann
parents:
diff changeset
   214
\isamarkupsubsection{Imperative data structures%
haftmann
parents:
diff changeset
   215
}
haftmann
parents:
diff changeset
   216
\isamarkuptrue%
haftmann
parents:
diff changeset
   217
%
28593
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   218
\begin{isamarkuptext}%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   219
If you consider imperative data structures as inevitable for a specific
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   220
  application, you should consider
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   221
  \emph{Imperative Functional Programming with Isabelle/HOL}
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   222
  (\cite{bulwahn-et-al:2008:imperative});
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   223
  the framework described there is available in theory \hyperlink{theory.Imperative-HOL}{\mbox{\isa{Imperative{\isacharunderscore}HOL}}}.%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   224
\end{isamarkuptext}%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   225
\isamarkuptrue%
f087237af65d continued codegen tutorial
haftmann
parents: 28447
diff changeset
   226
%
28447
haftmann
parents:
diff changeset
   227
\isadelimtheory
haftmann
parents:
diff changeset
   228
%
haftmann
parents:
diff changeset
   229
\endisadelimtheory
haftmann
parents:
diff changeset
   230
%
haftmann
parents:
diff changeset
   231
\isatagtheory
haftmann
parents:
diff changeset
   232
\isacommand{end}\isamarkupfalse%
haftmann
parents:
diff changeset
   233
%
haftmann
parents:
diff changeset
   234
\endisatagtheory
haftmann
parents:
diff changeset
   235
{\isafoldtheory}%
haftmann
parents:
diff changeset
   236
%
haftmann
parents:
diff changeset
   237
\isadelimtheory
haftmann
parents:
diff changeset
   238
%
haftmann
parents:
diff changeset
   239
\endisadelimtheory
haftmann
parents:
diff changeset
   240
\isanewline
haftmann
parents:
diff changeset
   241
\end{isabellebody}%
haftmann
parents:
diff changeset
   242
%%% Local Variables:
haftmann
parents:
diff changeset
   243
%%% mode: latex
haftmann
parents:
diff changeset
   244
%%% TeX-master: "root"
haftmann
parents:
diff changeset
   245
%%% End: