doc-src/IsarAdvanced/Codegen/Thy/document/Further.tex
author wenzelm
Thu, 09 Oct 2008 21:34:05 +0200
changeset 28557 6a661aeff564
parent 28447 df77ed974a78
child 28593 f087237af65d
permissions -rw-r--r--
extra Poly/ML toplevel pretty printing in ML-Systems/install_pp_polyml.ML;
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
haftmann
parents:
diff changeset
    32
  constains exhaustive syntax diagrams.%
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
haftmann
parents:
diff changeset
    44
  by the \isa{Isabelle} theory namespace.
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%
haftmann
parents:
diff changeset
    57
\isacommand{code{\isacharunderscore}modulename}\isamarkupfalse%
haftmann
parents:
diff changeset
    58
\ SML\isanewline
haftmann
parents:
diff changeset
    59
\ \ A\ ABC\isanewline
haftmann
parents:
diff changeset
    60
\ \ B\ ABC\isanewline
haftmann
parents:
diff changeset
    61
\ \ C\ ABC%
haftmann
parents:
diff changeset
    62
\begin{isamarkuptext}%
haftmann
parents:
diff changeset
    63
we explicitly map all those modules on \emph{ABC},
haftmann
parents:
diff changeset
    64
  resulting in an ad-hoc merge of this three modules
haftmann
parents:
diff changeset
    65
  at serialisation time.%
haftmann
parents:
diff changeset
    66
\end{isamarkuptext}%
haftmann
parents:
diff changeset
    67
\isamarkuptrue%
haftmann
parents:
diff changeset
    68
%
haftmann
parents:
diff changeset
    69
\isamarkupsubsection{Evaluation oracle%
haftmann
parents:
diff changeset
    70
}
haftmann
parents:
diff changeset
    71
\isamarkuptrue%
haftmann
parents:
diff changeset
    72
%
haftmann
parents:
diff changeset
    73
\isamarkupsubsection{Code antiquotation%
haftmann
parents:
diff changeset
    74
}
haftmann
parents:
diff changeset
    75
\isamarkuptrue%
haftmann
parents:
diff changeset
    76
%
haftmann
parents:
diff changeset
    77
\isamarkupsubsection{Creating new targets%
haftmann
parents:
diff changeset
    78
}
haftmann
parents:
diff changeset
    79
\isamarkuptrue%
haftmann
parents:
diff changeset
    80
%
haftmann
parents:
diff changeset
    81
\begin{isamarkuptext}%
haftmann
parents:
diff changeset
    82
extending targets, adding targets%
haftmann
parents:
diff changeset
    83
\end{isamarkuptext}%
haftmann
parents:
diff changeset
    84
\isamarkuptrue%
haftmann
parents:
diff changeset
    85
%
haftmann
parents:
diff changeset
    86
\isamarkupsubsection{Imperative data structures%
haftmann
parents:
diff changeset
    87
}
haftmann
parents:
diff changeset
    88
\isamarkuptrue%
haftmann
parents:
diff changeset
    89
%
haftmann
parents:
diff changeset
    90
\isadelimtheory
haftmann
parents:
diff changeset
    91
%
haftmann
parents:
diff changeset
    92
\endisadelimtheory
haftmann
parents:
diff changeset
    93
%
haftmann
parents:
diff changeset
    94
\isatagtheory
haftmann
parents:
diff changeset
    95
\isacommand{end}\isamarkupfalse%
haftmann
parents:
diff changeset
    96
%
haftmann
parents:
diff changeset
    97
\endisatagtheory
haftmann
parents:
diff changeset
    98
{\isafoldtheory}%
haftmann
parents:
diff changeset
    99
%
haftmann
parents:
diff changeset
   100
\isadelimtheory
haftmann
parents:
diff changeset
   101
%
haftmann
parents:
diff changeset
   102
\endisadelimtheory
haftmann
parents:
diff changeset
   103
\isanewline
haftmann
parents:
diff changeset
   104
\end{isabellebody}%
haftmann
parents:
diff changeset
   105
%%% Local Variables:
haftmann
parents:
diff changeset
   106
%%% mode: latex
haftmann
parents:
diff changeset
   107
%%% TeX-master: "root"
haftmann
parents:
diff changeset
   108
%%% End: