doc-src/Codegen/Thy/document/Further.tex
author bulwahn
Tue, 08 May 2012 14:31:03 +0200
changeset 47893 4cf901b1089a
parent 46523 7ca897381b26
child 48501 e59778bc71a0
permissions -rw-r--r--
specialised fact in the Record theory should not be appear in proofs discovered by sledgehammer
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
%
42096
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    25
\isamarkupsubsection{Specialities of the \isa{Scala} target language \label{sec:scala}%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    26
}
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    27
\isamarkuptrue%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    28
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    29
\begin{isamarkuptext}%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    30
\isa{Scala} deviates from languages of the ML family in a couple
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    31
  of aspects; those which affect code generation mainly have to do with
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    32
  \isa{Scala}'s type system:
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    33
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    34
  \begin{itemize}
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    35
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    36
    \item \isa{Scala} prefers tupled syntax over curried syntax.
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    37
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    38
    \item \isa{Scala} sacrifices Hindely-Milner type inference for a
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    39
      much more rich type system with subtyping etc.  For this reason
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    40
      type arguments sometimes have to be given explicitly in square
46523
7ca897381b26 update of generated documents
haftmann
parents: 42096
diff changeset
    41
      brackets (mimicking System F syntax).
42096
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    42
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    43
    \item In contrast to \isa{Haskell} where most specialities of
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    44
      the type system are implemented using \emph{type classes},
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    45
      \isa{Scala} provides a sophisticated system of \emph{implicit
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    46
      arguments}.
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    47
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    48
  \end{itemize}
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    49
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    50
  \noindent Concerning currying, the \isa{Scala} serializer counts
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    51
  arguments in code equations to determine how many arguments
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    52
  shall be tupled; remaining arguments and abstractions in terms
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    53
  rather than function definitions are always curried.
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    54
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    55
  The second aspect affects user-defined adaptations with \hyperlink{command.code-const}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}const}}}}.  For regular terms, the \isa{Scala} serializer prints
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    56
  all type arguments explicitly.  For user-defined term adaptations
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    57
  this is only possible for adaptations which take no arguments: here
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    58
  the type arguments are just appended.  Otherwise they are ignored;
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    59
  hence user-defined adaptations for polymorphic constants have to be
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    60
  designed very carefully to avoid ambiguity.
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    61
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    62
  Isabelle's type classes are mapped onto \isa{Scala} implicits; in
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    63
  cases with diamonds in the subclass hierarchy this can lead to
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    64
  ambiguities in the generated code:%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    65
\end{isamarkuptext}%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    66
\isamarkuptrue%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    67
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    68
\isadelimquote
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    69
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    70
\endisadelimquote
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    71
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    72
\isatagquote
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    73
\isacommand{class}\isamarkupfalse%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    74
\ class{\isadigit{1}}\ {\isaliteral{3D}{\isacharequal}}\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    75
\ \ \isakeyword{fixes}\ foo\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{27}{\isacharprime}}a\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{27}{\isacharprime}}a{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    76
\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    77
\isacommand{class}\isamarkupfalse%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    78
\ class{\isadigit{2}}\ {\isaliteral{3D}{\isacharequal}}\ class{\isadigit{1}}\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    79
\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    80
\isacommand{class}\isamarkupfalse%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    81
\ class{\isadigit{3}}\ {\isaliteral{3D}{\isacharequal}}\ class{\isadigit{1}}%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    82
\endisatagquote
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    83
{\isafoldquote}%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    84
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    85
\isadelimquote
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    86
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    87
\endisadelimquote
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    88
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    89
\begin{isamarkuptext}%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    90
\noindent Here both \isa{class{\isadigit{2}}} and \isa{class{\isadigit{3}}} inherit from \isa{class{\isadigit{1}}},
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    91
  forming the upper part of a diamond.%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    92
\end{isamarkuptext}%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    93
\isamarkuptrue%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    94
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    95
\isadelimquote
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    96
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    97
\endisadelimquote
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    98
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
    99
\isatagquote
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   100
\isacommand{definition}\isamarkupfalse%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   101
\ bar\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{27}{\isacharprime}}a\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{7B}{\isacharbraceleft}}class{\isadigit{2}}{\isaliteral{2C}{\isacharcomma}}\ class{\isadigit{3}}{\isaliteral{7D}{\isacharbraceright}}\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{27}{\isacharprime}}a{\isaliteral{22}{\isachardoublequoteclose}}\ \isakeyword{where}\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   102
\ \ {\isaliteral{22}{\isachardoublequoteopen}}bar\ {\isaliteral{3D}{\isacharequal}}\ foo{\isaliteral{22}{\isachardoublequoteclose}}%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   103
\endisatagquote
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   104
{\isafoldquote}%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   105
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   106
\isadelimquote
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   107
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   108
\endisadelimquote
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   109
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   110
\begin{isamarkuptext}%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   111
\noindent This yields the following code:%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   112
\end{isamarkuptext}%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   113
\isamarkuptrue%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   114
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   115
\isadelimquotetypewriter
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   116
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   117
\endisadelimquotetypewriter
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   118
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   119
\isatagquotetypewriter
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   120
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   121
\begin{isamarkuptext}%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   122
object\ Example\ {\isaliteral{7B}{\isacharbraceleft}}\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   123
\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   124
trait\ class{\isadigit{1}}{\isaliteral{5B}{\isacharbrackleft}}A{\isaliteral{5D}{\isacharbrackright}}\ {\isaliteral{7B}{\isacharbraceleft}}\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   125
\ \ val\ {\isaliteral{60}{\isacharbackquote}}Example{\isaliteral{2E}{\isachardot}}foo{\isaliteral{60}{\isacharbackquote}}{\isaliteral{3A}{\isacharcolon}}\ A\ {\isaliteral{3D}{\isacharequal}}{\isaliteral{3E}{\isachargreater}}\ A\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   126
{\isaliteral{7D}{\isacharbraceright}}\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   127
def\ foo{\isaliteral{5B}{\isacharbrackleft}}A{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{28}{\isacharparenleft}}a{\isaliteral{3A}{\isacharcolon}}\ A{\isaliteral{29}{\isacharparenright}}{\isaliteral{28}{\isacharparenleft}}implicit\ A{\isaliteral{3A}{\isacharcolon}}\ class{\isadigit{1}}{\isaliteral{5B}{\isacharbrackleft}}A{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{3A}{\isacharcolon}}\ A\ {\isaliteral{3D}{\isacharequal}}\ A{\isaliteral{2E}{\isachardot}}{\isaliteral{60}{\isacharbackquote}}Example{\isaliteral{2E}{\isachardot}}foo{\isaliteral{60}{\isacharbackquote}}{\isaliteral{28}{\isacharparenleft}}a{\isaliteral{29}{\isacharparenright}}\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   128
\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   129
trait\ class{\isadigit{2}}{\isaliteral{5B}{\isacharbrackleft}}A{\isaliteral{5D}{\isacharbrackright}}\ extends\ class{\isadigit{1}}{\isaliteral{5B}{\isacharbrackleft}}A{\isaliteral{5D}{\isacharbrackright}}\ {\isaliteral{7B}{\isacharbraceleft}}\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   130
{\isaliteral{7D}{\isacharbraceright}}\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   131
\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   132
trait\ class{\isadigit{3}}{\isaliteral{5B}{\isacharbrackleft}}A{\isaliteral{5D}{\isacharbrackright}}\ extends\ class{\isadigit{1}}{\isaliteral{5B}{\isacharbrackleft}}A{\isaliteral{5D}{\isacharbrackright}}\ {\isaliteral{7B}{\isacharbraceleft}}\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   133
{\isaliteral{7D}{\isacharbraceright}}\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   134
\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   135
def\ bar{\isaliteral{5B}{\isacharbrackleft}}A\ {\isaliteral{3A}{\isacharcolon}}\ class{\isadigit{2}}\ {\isaliteral{3A}{\isacharcolon}}\ class{\isadigit{3}}{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{3A}{\isacharcolon}}\ A\ {\isaliteral{3D}{\isacharequal}}{\isaliteral{3E}{\isachargreater}}\ A\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{28}{\isacharparenleft}}a{\isaliteral{3A}{\isacharcolon}}\ A{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}{\isaliteral{3E}{\isachargreater}}\ foo{\isaliteral{5B}{\isacharbrackleft}}A{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{28}{\isacharparenleft}}a{\isaliteral{29}{\isacharparenright}}\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   136
\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   137
{\isaliteral{7D}{\isacharbraceright}}\ {\isaliteral{2F}{\isacharslash}}{\isaliteral{2A}{\isacharasterisk}}\ object\ Example\ {\isaliteral{2A}{\isacharasterisk}}{\isaliteral{2F}{\isacharslash}}\isanewline%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   138
\end{isamarkuptext}%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   139
\isamarkuptrue%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   140
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   141
\endisatagquotetypewriter
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   142
{\isafoldquotetypewriter}%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   143
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   144
\isadelimquotetypewriter
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   145
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   146
\endisadelimquotetypewriter
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   147
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   148
\begin{isamarkuptext}%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   149
\noindent This code is rejected by the \isa{Scala} compiler: in
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   150
  the definition of \isa{bar}, it is not clear from where to derive
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   151
  the implicit argument for \isa{foo}.
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   152
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   153
  The solution to the problem is to close the diamond by a further
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   154
  class with inherits from both \isa{class{\isadigit{2}}} and \isa{class{\isadigit{3}}}:%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   155
\end{isamarkuptext}%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   156
\isamarkuptrue%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   157
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   158
\isadelimquote
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   159
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   160
\endisadelimquote
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   161
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   162
\isatagquote
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   163
\isacommand{class}\isamarkupfalse%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   164
\ class{\isadigit{4}}\ {\isaliteral{3D}{\isacharequal}}\ class{\isadigit{2}}\ {\isaliteral{2B}{\isacharplus}}\ class{\isadigit{3}}%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   165
\endisatagquote
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   166
{\isafoldquote}%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   167
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   168
\isadelimquote
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   169
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   170
\endisadelimquote
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   171
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   172
\begin{isamarkuptext}%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   173
\noindent Then the offending code equation can be restricted to
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   174
  \isa{class{\isadigit{4}}}:%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   175
\end{isamarkuptext}%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   176
\isamarkuptrue%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   177
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   178
\isadelimquote
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   179
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   180
\endisadelimquote
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   181
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   182
\isatagquote
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   183
\isacommand{lemma}\isamarkupfalse%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   184
\ {\isaliteral{5B}{\isacharbrackleft}}code{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{3A}{\isacharcolon}}\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   185
\ \ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{28}{\isacharparenleft}}bar\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{27}{\isacharprime}}a{\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}class{\isadigit{4}}\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{27}{\isacharprime}}a{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ foo{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   186
\ \ \isacommand{by}\isamarkupfalse%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   187
\ {\isaliteral{28}{\isacharparenleft}}simp\ only{\isaliteral{3A}{\isacharcolon}}\ bar{\isaliteral{5F}{\isacharunderscore}}def{\isaliteral{29}{\isacharparenright}}%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   188
\endisatagquote
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   189
{\isafoldquote}%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   190
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   191
\isadelimquote
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   192
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   193
\endisadelimquote
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   194
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   195
\begin{isamarkuptext}%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   196
\noindent with the following code:%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   197
\end{isamarkuptext}%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   198
\isamarkuptrue%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   199
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   200
\isadelimquotetypewriter
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   201
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   202
\endisadelimquotetypewriter
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   203
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   204
\isatagquotetypewriter
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   205
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   206
\begin{isamarkuptext}%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   207
object\ Example\ {\isaliteral{7B}{\isacharbraceleft}}\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   208
\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   209
trait\ class{\isadigit{1}}{\isaliteral{5B}{\isacharbrackleft}}A{\isaliteral{5D}{\isacharbrackright}}\ {\isaliteral{7B}{\isacharbraceleft}}\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   210
\ \ val\ {\isaliteral{60}{\isacharbackquote}}Example{\isaliteral{2E}{\isachardot}}foo{\isaliteral{60}{\isacharbackquote}}{\isaliteral{3A}{\isacharcolon}}\ A\ {\isaliteral{3D}{\isacharequal}}{\isaliteral{3E}{\isachargreater}}\ A\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   211
{\isaliteral{7D}{\isacharbraceright}}\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   212
def\ foo{\isaliteral{5B}{\isacharbrackleft}}A{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{28}{\isacharparenleft}}a{\isaliteral{3A}{\isacharcolon}}\ A{\isaliteral{29}{\isacharparenright}}{\isaliteral{28}{\isacharparenleft}}implicit\ A{\isaliteral{3A}{\isacharcolon}}\ class{\isadigit{1}}{\isaliteral{5B}{\isacharbrackleft}}A{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{3A}{\isacharcolon}}\ A\ {\isaliteral{3D}{\isacharequal}}\ A{\isaliteral{2E}{\isachardot}}{\isaliteral{60}{\isacharbackquote}}Example{\isaliteral{2E}{\isachardot}}foo{\isaliteral{60}{\isacharbackquote}}{\isaliteral{28}{\isacharparenleft}}a{\isaliteral{29}{\isacharparenright}}\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   213
\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   214
trait\ class{\isadigit{2}}{\isaliteral{5B}{\isacharbrackleft}}A{\isaliteral{5D}{\isacharbrackright}}\ extends\ class{\isadigit{1}}{\isaliteral{5B}{\isacharbrackleft}}A{\isaliteral{5D}{\isacharbrackright}}\ {\isaliteral{7B}{\isacharbraceleft}}\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   215
{\isaliteral{7D}{\isacharbraceright}}\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   216
\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   217
trait\ class{\isadigit{3}}{\isaliteral{5B}{\isacharbrackleft}}A{\isaliteral{5D}{\isacharbrackright}}\ extends\ class{\isadigit{1}}{\isaliteral{5B}{\isacharbrackleft}}A{\isaliteral{5D}{\isacharbrackright}}\ {\isaliteral{7B}{\isacharbraceleft}}\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   218
{\isaliteral{7D}{\isacharbraceright}}\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   219
\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   220
trait\ class{\isadigit{4}}{\isaliteral{5B}{\isacharbrackleft}}A{\isaliteral{5D}{\isacharbrackright}}\ extends\ class{\isadigit{2}}{\isaliteral{5B}{\isacharbrackleft}}A{\isaliteral{5D}{\isacharbrackright}}\ with\ class{\isadigit{3}}{\isaliteral{5B}{\isacharbrackleft}}A{\isaliteral{5D}{\isacharbrackright}}\ {\isaliteral{7B}{\isacharbraceleft}}\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   221
{\isaliteral{7D}{\isacharbraceright}}\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   222
\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   223
def\ bar{\isaliteral{5B}{\isacharbrackleft}}A\ {\isaliteral{3A}{\isacharcolon}}\ class{\isadigit{4}}{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{3A}{\isacharcolon}}\ A\ {\isaliteral{3D}{\isacharequal}}{\isaliteral{3E}{\isachargreater}}\ A\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{28}{\isacharparenleft}}a{\isaliteral{3A}{\isacharcolon}}\ A{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}{\isaliteral{3E}{\isachargreater}}\ foo{\isaliteral{5B}{\isacharbrackleft}}A{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{28}{\isacharparenleft}}a{\isaliteral{29}{\isacharparenright}}\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   224
\isanewline
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   225
{\isaliteral{7D}{\isacharbraceright}}\ {\isaliteral{2F}{\isacharslash}}{\isaliteral{2A}{\isacharasterisk}}\ object\ Example\ {\isaliteral{2A}{\isacharasterisk}}{\isaliteral{2F}{\isacharslash}}\isanewline%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   226
\end{isamarkuptext}%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   227
\isamarkuptrue%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   228
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   229
\endisatagquotetypewriter
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   230
{\isafoldquotetypewriter}%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   231
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   232
\isadelimquotetypewriter
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   233
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   234
\endisadelimquotetypewriter
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   235
%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   236
\begin{isamarkuptext}%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   237
\noindent which exposes no ambiguity.
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   238
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   239
  Since the preprocessor (cf.~\secref{sec:preproc}) propagates sort
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   240
  constraints through a system of code equations, it is usually not
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   241
  very difficult to identify the set of code equations which actually
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   242
  needs more restricted sort constraints.%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   243
\end{isamarkuptext}%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   244
\isamarkuptrue%
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   245
%
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   246
\isamarkupsubsection{Modules namespace%
28447
haftmann
parents:
diff changeset
   247
}
haftmann
parents:
diff changeset
   248
\isamarkuptrue%
haftmann
parents:
diff changeset
   249
%
haftmann
parents:
diff changeset
   250
\begin{isamarkuptext}%
40755
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   251
When invoking the \hyperlink{command.export-code}{\mbox{\isa{\isacommand{export{\isaliteral{5F}{\isacharunderscore}}code}}}} command it is possible to
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   252
  leave out the \hyperlink{keyword.module-name}{\mbox{\isa{\isakeyword{module{\isaliteral{5F}{\isacharunderscore}}name}}}} part; then code is
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   253
  distributed over different modules, where the module name space
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   254
  roughly is induced by the Isabelle theory name space.
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   255
40755
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   256
  Then sometimes the awkward situation occurs that dependencies
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   257
  between definitions introduce cyclic dependencies between modules,
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   258
  which in the \isa{Haskell} world leaves you to the mercy of the
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   259
  \isa{Haskell} implementation you are using, while for \isa{SML}/\isa{OCaml} code generation is not possible.
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   260
40755
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   261
  A solution is to declare module names explicitly.  Let use assume
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   262
  the three cyclically dependent modules are named \emph{A}, \emph{B}
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   263
  and \emph{C}.  Then, by stating%
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   264
\end{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   265
\isamarkuptrue%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   266
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   267
\isadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   268
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   269
\endisadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   270
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   271
\isatagquote
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   272
\isacommand{code{\isaliteral{5F}{\isacharunderscore}}modulename}\isamarkupfalse%
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   273
\ SML\isanewline
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   274
\ \ A\ ABC\isanewline
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   275
\ \ B\ ABC\isanewline
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   276
\ \ C\ ABC%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   277
\endisatagquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   278
{\isafoldquote}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   279
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   280
\isadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   281
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   282
\endisadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   283
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   284
\begin{isamarkuptext}%
40755
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   285
\noindent we explicitly map all those modules on \emph{ABC},
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   286
  resulting in an ad-hoc merge of this three modules at serialisation
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   287
  time.%
28447
haftmann
parents:
diff changeset
   288
\end{isamarkuptext}%
haftmann
parents:
diff changeset
   289
\isamarkuptrue%
haftmann
parents:
diff changeset
   290
%
37426
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   291
\isamarkupsubsection{Locales and interpretation%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   292
}
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   293
\isamarkuptrue%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   294
%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   295
\begin{isamarkuptext}%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   296
A technical issue comes to surface when generating code from
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   297
  specifications stemming from locale interpretation.
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   298
40755
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   299
  Let us assume a locale specifying a power operation on arbitrary
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   300
  types:%
37426
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   301
\end{isamarkuptext}%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   302
\isamarkuptrue%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   303
%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   304
\isadelimquote
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   305
%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   306
\endisadelimquote
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   307
%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   308
\isatagquote
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   309
\isacommand{locale}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   310
\ power\ {\isaliteral{3D}{\isacharequal}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   311
\ \ \isakeyword{fixes}\ power\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{27}{\isacharprime}}a\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{27}{\isacharprime}}b\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{27}{\isacharprime}}b{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   312
\ \ \isakeyword{assumes}\ power{\isaliteral{5F}{\isacharunderscore}}commute{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}power\ x\ {\isaliteral{5C3C636972633E}{\isasymcirc}}\ power\ y\ {\isaliteral{3D}{\isacharequal}}\ power\ y\ {\isaliteral{5C3C636972633E}{\isasymcirc}}\ power\ x{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
37426
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   313
\isakeyword{begin}%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   314
\endisatagquote
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   315
{\isafoldquote}%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   316
%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   317
\isadelimquote
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   318
%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   319
\endisadelimquote
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   320
%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   321
\begin{isamarkuptext}%
40755
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   322
\noindent Inside that locale we can lift \isa{power} to exponent
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   323
  lists by means of specification relative to that locale:%
37426
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   324
\end{isamarkuptext}%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   325
\isamarkuptrue%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   326
%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   327
\isadelimquote
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   328
%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   329
\endisadelimquote
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   330
%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   331
\isatagquote
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   332
\isacommand{primrec}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   333
\ powers\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{27}{\isacharprime}}a\ list\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{27}{\isacharprime}}b\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{27}{\isacharprime}}b{\isaliteral{22}{\isachardoublequoteclose}}\ \isakeyword{where}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   334
\ \ {\isaliteral{22}{\isachardoublequoteopen}}powers\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}\ {\isaliteral{3D}{\isacharequal}}\ id{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   335
{\isaliteral{7C}{\isacharbar}}\ {\isaliteral{22}{\isachardoublequoteopen}}powers\ {\isaliteral{28}{\isacharparenleft}}x\ {\isaliteral{23}{\isacharhash}}\ xs{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ power\ x\ {\isaliteral{5C3C636972633E}{\isasymcirc}}\ powers\ xs{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
37426
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   336
\isanewline
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   337
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   338
\ powers{\isaliteral{5F}{\isacharunderscore}}append{\isaliteral{3A}{\isacharcolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   339
\ \ {\isaliteral{22}{\isachardoublequoteopen}}powers\ {\isaliteral{28}{\isacharparenleft}}xs\ {\isaliteral{40}{\isacharat}}\ ys{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ powers\ xs\ {\isaliteral{5C3C636972633E}{\isasymcirc}}\ powers\ ys{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
37426
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   340
\ \ \isacommand{by}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   341
\ {\isaliteral{28}{\isacharparenleft}}induct\ xs{\isaliteral{29}{\isacharparenright}}\ simp{\isaliteral{5F}{\isacharunderscore}}all\isanewline
37426
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   342
\isanewline
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   343
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   344
\ powers{\isaliteral{5F}{\isacharunderscore}}power{\isaliteral{3A}{\isacharcolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   345
\ \ {\isaliteral{22}{\isachardoublequoteopen}}powers\ xs\ {\isaliteral{5C3C636972633E}{\isasymcirc}}\ power\ x\ {\isaliteral{3D}{\isacharequal}}\ power\ x\ {\isaliteral{5C3C636972633E}{\isasymcirc}}\ powers\ xs{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
37426
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   346
\ \ \isacommand{by}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   347
\ {\isaliteral{28}{\isacharparenleft}}induct\ xs{\isaliteral{29}{\isacharparenright}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   348
\ \ \ \ {\isaliteral{28}{\isacharparenleft}}simp{\isaliteral{5F}{\isacharunderscore}}all\ del{\isaliteral{3A}{\isacharcolon}}\ o{\isaliteral{5F}{\isacharunderscore}}apply\ id{\isaliteral{5F}{\isacharunderscore}}apply\ add{\isaliteral{3A}{\isacharcolon}}\ o{\isaliteral{5F}{\isacharunderscore}}assoc\ {\isaliteral{5B}{\isacharbrackleft}}symmetric{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{2C}{\isacharcomma}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   349
\ \ \ \ \ \ simp\ del{\isaliteral{3A}{\isacharcolon}}\ o{\isaliteral{5F}{\isacharunderscore}}apply\ add{\isaliteral{3A}{\isacharcolon}}\ o{\isaliteral{5F}{\isacharunderscore}}assoc\ power{\isaliteral{5F}{\isacharunderscore}}commute{\isaliteral{29}{\isacharparenright}}\isanewline
37426
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   350
\isanewline
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   351
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   352
\ powers{\isaliteral{5F}{\isacharunderscore}}rev{\isaliteral{3A}{\isacharcolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   353
\ \ {\isaliteral{22}{\isachardoublequoteopen}}powers\ {\isaliteral{28}{\isacharparenleft}}rev\ xs{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ powers\ xs{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
37426
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   354
\ \ \ \ \isacommand{by}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   355
\ {\isaliteral{28}{\isacharparenleft}}induct\ xs{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{28}{\isacharparenleft}}simp{\isaliteral{5F}{\isacharunderscore}}all\ add{\isaliteral{3A}{\isacharcolon}}\ powers{\isaliteral{5F}{\isacharunderscore}}append\ powers{\isaliteral{5F}{\isacharunderscore}}power{\isaliteral{29}{\isacharparenright}}\isanewline
37426
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   356
\isanewline
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   357
\isacommand{end}\isamarkupfalse%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   358
%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   359
\endisatagquote
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   360
{\isafoldquote}%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   361
%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   362
\isadelimquote
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   363
%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   364
\endisadelimquote
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   365
%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   366
\begin{isamarkuptext}%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   367
After an interpretation of this locale (say, \indexdef{}{command}{interpretation}\hypertarget{command.interpretation}{\hyperlink{command.interpretation}{\mbox{\isa{\isacommand{interpretation}}}}} \isa{fun{\isaliteral{5F}{\isacharunderscore}}power{\isaliteral{3A}{\isacharcolon}}} \isa{{\isaliteral{22}{\isachardoublequote}}power\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{5C3C6C616D6264613E}{\isasymlambda}}n\ {\isaliteral{28}{\isacharparenleft}}f\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{27}{\isacharprime}}a\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{27}{\isacharprime}}a{\isaliteral{29}{\isacharparenright}}{\isaliteral{2E}{\isachardot}}\ f\ {\isaliteral{5E}{\isacharcircum}}{\isaliteral{5E}{\isacharcircum}}\ n{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequote}}}), one would expect to have a constant \isa{fun{\isaliteral{5F}{\isacharunderscore}}power{\isaliteral{2E}{\isachardot}}powers\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ nat\ list\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{27}{\isacharprime}}a\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{27}{\isacharprime}}a{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{27}{\isacharprime}}a\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{27}{\isacharprime}}a} for which code
37426
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   368
  can be generated.  But this not the case: internally, the term
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   369
  \isa{fun{\isaliteral{5F}{\isacharunderscore}}power{\isaliteral{2E}{\isachardot}}powers} is an abbreviation for the foundational
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   370
  term \isa{{\isaliteral{22}{\isachardoublequote}}power{\isaliteral{2E}{\isachardot}}powers\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{5C3C6C616D6264613E}{\isasymlambda}}n\ {\isaliteral{28}{\isacharparenleft}}f\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{27}{\isacharprime}}a\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{27}{\isacharprime}}a{\isaliteral{29}{\isacharparenright}}{\isaliteral{2E}{\isachardot}}\ f\ {\isaliteral{5E}{\isacharcircum}}{\isaliteral{5E}{\isacharcircum}}\ n{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequote}}}
37426
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   371
  (see \cite{isabelle-locale} for the details behind).
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   372
40755
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   373
  Fortunately, with minor effort the desired behaviour can be
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   374
  achieved.  First, a dedicated definition of the constant on which
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   375
  the local \isa{powers} after interpretation is supposed to be
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   376
  mapped on:%
37426
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   377
\end{isamarkuptext}%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   378
\isamarkuptrue%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   379
%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   380
\isadelimquote
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   381
%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   382
\endisadelimquote
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   383
%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   384
\isatagquote
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   385
\isacommand{definition}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   386
\ funpows\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}nat\ list\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{27}{\isacharprime}}a\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{27}{\isacharprime}}a{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{27}{\isacharprime}}a\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{27}{\isacharprime}}a{\isaliteral{22}{\isachardoublequoteclose}}\ \isakeyword{where}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   387
\ \ {\isaliteral{5B}{\isacharbrackleft}}code\ del{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}funpows\ {\isaliteral{3D}{\isacharequal}}\ power{\isaliteral{2E}{\isachardot}}powers\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{5C3C6C616D6264613E}{\isasymlambda}}n\ f{\isaliteral{2E}{\isachardot}}\ f\ {\isaliteral{5E}{\isacharcircum}}{\isaliteral{5E}{\isacharcircum}}\ n{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequoteclose}}%
37426
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   388
\endisatagquote
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   389
{\isafoldquote}%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   390
%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   391
\isadelimquote
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   392
%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   393
\endisadelimquote
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   394
%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   395
\begin{isamarkuptext}%
40755
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   396
\noindent In general, the pattern is \isa{c\ {\isaliteral{3D}{\isacharequal}}\ t} where \isa{c}
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   397
  is the name of the future constant and \isa{t} the foundational
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   398
  term corresponding to the local constant after interpretation.
37426
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   399
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   400
  The interpretation itself is enriched with an equation \isa{t\ {\isaliteral{3D}{\isacharequal}}\ c}:%
37426
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   401
\end{isamarkuptext}%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   402
\isamarkuptrue%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   403
%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   404
\isadelimquote
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   405
%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   406
\endisadelimquote
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   407
%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   408
\isatagquote
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   409
\isacommand{interpretation}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   410
\ fun{\isaliteral{5F}{\isacharunderscore}}power{\isaliteral{3A}{\isacharcolon}}\ power\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C6C616D6264613E}{\isasymlambda}}n\ {\isaliteral{28}{\isacharparenleft}}f\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{27}{\isacharprime}}a\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{27}{\isacharprime}}a{\isaliteral{29}{\isacharparenright}}{\isaliteral{2E}{\isachardot}}\ f\ {\isaliteral{5E}{\isacharcircum}}{\isaliteral{5E}{\isacharcircum}}\ n{\isaliteral{22}{\isachardoublequoteclose}}\ \isakeyword{where}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   411
\ \ {\isaliteral{22}{\isachardoublequoteopen}}power{\isaliteral{2E}{\isachardot}}powers\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{5C3C6C616D6264613E}{\isasymlambda}}n\ f{\isaliteral{2E}{\isachardot}}\ f\ {\isaliteral{5E}{\isacharcircum}}{\isaliteral{5E}{\isacharcircum}}\ n{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ funpows{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
37426
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   412
\ \ \isacommand{by}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   413
\ unfold{\isaliteral{5F}{\isacharunderscore}}locales\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   414
\ \ \ \ {\isaliteral{28}{\isacharparenleft}}simp{\isaliteral{5F}{\isacharunderscore}}all\ add{\isaliteral{3A}{\isacharcolon}}\ fun{\isaliteral{5F}{\isacharunderscore}}eq{\isaliteral{5F}{\isacharunderscore}}iff\ funpow{\isaliteral{5F}{\isacharunderscore}}mult\ mult{\isaliteral{5F}{\isacharunderscore}}commute\ funpows{\isaliteral{5F}{\isacharunderscore}}def{\isaliteral{29}{\isacharparenright}}%
37426
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   415
\endisatagquote
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   416
{\isafoldquote}%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   417
%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   418
\isadelimquote
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   419
%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   420
\endisadelimquote
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   421
%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   422
\begin{isamarkuptext}%
40755
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   423
\noindent This additional equation is trivially proved by the
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   424
  definition itself.
37426
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   425
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   426
  After this setup procedure, code generation can continue as usual:%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   427
\end{isamarkuptext}%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   428
\isamarkuptrue%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   429
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   430
\isadelimquotetypewriter
37426
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   431
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   432
\endisadelimquotetypewriter
37426
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   433
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   434
\isatagquotetypewriter
37426
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   435
%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   436
\begin{isamarkuptext}%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   437
funpow\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ forall\ a{\isaliteral{2E}{\isachardot}}\ Nat\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{28}{\isacharparenleft}}a\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ a{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ a\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ a{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   438
funpow\ Zero{\isaliteral{5F}{\isacharunderscore}}nat\ f\ {\isaliteral{3D}{\isacharequal}}\ id{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   439
funpow\ {\isaliteral{28}{\isacharparenleft}}Suc\ n{\isaliteral{29}{\isacharparenright}}\ f\ {\isaliteral{3D}{\isacharequal}}\ f\ {\isaliteral{2E}{\isachardot}}\ funpow\ n\ f{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39559
diff changeset
   440
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   441
funpows\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ forall\ a{\isaliteral{2E}{\isachardot}}\ {\isaliteral{5B}{\isacharbrackleft}}Nat{\isaliteral{5D}{\isacharbrackright}}\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{28}{\isacharparenleft}}a\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ a{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ a\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ a{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   442
funpows\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}\ {\isaliteral{3D}{\isacharequal}}\ id{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   443
funpows\ {\isaliteral{28}{\isacharparenleft}}x\ {\isaliteral{3A}{\isacharcolon}}\ xs{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ funpow\ x\ {\isaliteral{2E}{\isachardot}}\ funpows\ xs{\isaliteral{3B}{\isacharsemicolon}}\isanewline%
37426
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   444
\end{isamarkuptext}%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   445
\isamarkuptrue%
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   446
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   447
\endisatagquotetypewriter
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   448
{\isafoldquotetypewriter}%
37426
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   449
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   450
\isadelimquotetypewriter
37426
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   451
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   452
\endisadelimquotetypewriter
37426
04d58897bf90 subsection on locale interpretation
haftmann
parents: 34155
diff changeset
   453
%
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   454
\isamarkupsubsection{Imperative data structures%
28447
haftmann
parents:
diff changeset
   455
}
haftmann
parents:
diff changeset
   456
\isamarkuptrue%
haftmann
parents:
diff changeset
   457
%
haftmann
parents:
diff changeset
   458
\begin{isamarkuptext}%
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   459
If you consider imperative data structures as inevitable for a
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   460
  specific application, you should consider \emph{Imperative
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   461
  Functional Programming with Isabelle/HOL}
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   462
  \cite{bulwahn-et-al:2008:imperative}; the framework described there
40755
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   463
  is available in session \isa{Imperative{\isaliteral{5F}{\isacharunderscore}}HOL}, together with a
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   464
  short primer document.%
28447
haftmann
parents:
diff changeset
   465
\end{isamarkuptext}%
haftmann
parents:
diff changeset
   466
\isamarkuptrue%
haftmann
parents:
diff changeset
   467
%
38405
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   468
\isamarkupsubsection{ML system interfaces \label{sec:ml}%
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   469
}
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   470
\isamarkuptrue%
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   471
%
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   472
\begin{isamarkuptext}%
38510
ec0408c7328b stub for evaluation chapter
haftmann
parents: 38509
diff changeset
   473
Since the code generator framework not only aims to provide a nice
ec0408c7328b stub for evaluation chapter
haftmann
parents: 38509
diff changeset
   474
  Isar interface but also to form a base for code-generation-based
ec0408c7328b stub for evaluation chapter
haftmann
parents: 38509
diff changeset
   475
  applications, here a short description of the most fundamental ML
ec0408c7328b stub for evaluation chapter
haftmann
parents: 38509
diff changeset
   476
  interfaces.%
38405
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   477
\end{isamarkuptext}%
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   478
\isamarkuptrue%
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   479
%
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   480
\isamarkupsubsubsection{Managing executable content%
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   481
}
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   482
\isamarkuptrue%
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   483
%
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   484
\isadelimmlref
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   485
%
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   486
\endisadelimmlref
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   487
%
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   488
\isatagmlref
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   489
%
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   490
\begin{isamarkuptext}%
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   491
\begin{mldecls}
38510
ec0408c7328b stub for evaluation chapter
haftmann
parents: 38509
diff changeset
   492
  \indexdef{}{ML}{Code.read\_const}\verb|Code.read_const: theory -> string -> string| \\
38405
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   493
  \indexdef{}{ML}{Code.add\_eqn}\verb|Code.add_eqn: thm -> theory -> theory| \\
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   494
  \indexdef{}{ML}{Code.del\_eqn}\verb|Code.del_eqn: thm -> theory -> theory| \\
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   495
  \indexdef{}{ML}{Code\_Preproc.map\_pre}\verb|Code_Preproc.map_pre: (simpset -> simpset) -> theory -> theory| \\
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   496
  \indexdef{}{ML}{Code\_Preproc.map\_post}\verb|Code_Preproc.map_post: (simpset -> simpset) -> theory -> theory| \\
38509
9cea8a0e925a updated generated document
haftmann
parents: 38505
diff changeset
   497
  \indexdef{}{ML}{Code\_Preproc.add\_functrans}\verb|Code_Preproc.add_functrans: |\isasep\isanewline%
9cea8a0e925a updated generated document
haftmann
parents: 38505
diff changeset
   498
\verb|    string * (theory -> (thm * bool) list -> (thm * bool) list option)|\isasep\isanewline%
9cea8a0e925a updated generated document
haftmann
parents: 38505
diff changeset
   499
\verb|      -> theory -> theory| \\
38405
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   500
  \indexdef{}{ML}{Code\_Preproc.del\_functrans}\verb|Code_Preproc.del_functrans: string -> theory -> theory| \\
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   501
  \indexdef{}{ML}{Code.add\_datatype}\verb|Code.add_datatype: (string * typ) list -> theory -> theory| \\
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   502
  \indexdef{}{ML}{Code.get\_type}\verb|Code.get_type: theory -> string|\isasep\isanewline%
40755
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   503
\verb|    -> ((string * sort) list * (string * ((string * sort) list * typ list)) list) * bool| \\
38405
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   504
  \indexdef{}{ML}{Code.get\_type\_of\_constr\_or\_abstr}\verb|Code.get_type_of_constr_or_abstr: theory -> string -> (string * bool) option|
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   505
  \end{mldecls}
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   506
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   507
  \begin{description}
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   508
38510
ec0408c7328b stub for evaluation chapter
haftmann
parents: 38509
diff changeset
   509
  \item \verb|Code.read_const|~\isa{thy}~\isa{s}
ec0408c7328b stub for evaluation chapter
haftmann
parents: 38509
diff changeset
   510
     reads a constant as a concrete term expression \isa{s}.
ec0408c7328b stub for evaluation chapter
haftmann
parents: 38509
diff changeset
   511
38405
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   512
  \item \verb|Code.add_eqn|~\isa{thm}~\isa{thy} adds function
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   513
     theorem \isa{thm} to executable content.
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   514
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   515
  \item \verb|Code.del_eqn|~\isa{thm}~\isa{thy} removes function
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   516
     theorem \isa{thm} from executable content, if present.
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   517
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   518
  \item \verb|Code_Preproc.map_pre|~\isa{f}~\isa{thy} changes
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   519
     the preprocessor simpset.
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   520
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   521
  \item \verb|Code_Preproc.add_functrans|~\isa{{\isaliteral{28}{\isacharparenleft}}name{\isaliteral{2C}{\isacharcomma}}\ f{\isaliteral{29}{\isacharparenright}}}~\isa{thy} adds
38405
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   522
     function transformer \isa{f} (named \isa{name}) to executable content;
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   523
     \isa{f} is a transformer of the code equations belonging
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   524
     to a certain function definition, depending on the
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   525
     current theory context.  Returning \isa{NONE} indicates that no
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   526
     transformation took place;  otherwise, the whole process will be iterated
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   527
     with the new code equations.
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   528
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   529
  \item \verb|Code_Preproc.del_functrans|~\isa{name}~\isa{thy} removes
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   530
     function transformer named \isa{name} from executable content.
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   531
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   532
  \item \verb|Code.add_datatype|~\isa{cs}~\isa{thy} adds
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   533
     a datatype to executable content, with generation
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   534
     set \isa{cs}.
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   535
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   536
  \item \verb|Code.get_type_of_constr_or_abstr|~\isa{thy}~\isa{const}
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   537
     returns type constructor corresponding to
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   538
     constructor \isa{const}; returns \isa{NONE}
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   539
     if \isa{const} is no constructor.
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   540
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   541
  \end{description}%
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   542
\end{isamarkuptext}%
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   543
\isamarkuptrue%
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   544
%
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   545
\endisatagmlref
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   546
{\isafoldmlref}%
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   547
%
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   548
\isadelimmlref
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   549
%
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   550
\endisadelimmlref
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   551
%
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   552
\isamarkupsubsubsection{Data depending on the theory's executable content%
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   553
}
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   554
\isamarkuptrue%
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   555
%
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   556
\begin{isamarkuptext}%
40755
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   557
Implementing code generator applications on top of the framework set
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   558
  out so far usually not only involves using those primitive
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   559
  interfaces but also storing code-dependent data and various other
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   560
  things.
38405
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   561
40755
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   562
  Due to incrementality of code generation, changes in the theory's
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   563
  executable content have to be propagated in a certain fashion.
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   564
  Additionally, such changes may occur not only during theory
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   565
  extension but also during theory merge, which is a little bit nasty
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   566
  from an implementation point of view.  The framework provides a
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   567
  solution to this technical challenge by providing a functorial data
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   568
  slot \verb|Code_Data|; on instantiation of this functor, the
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   569
  following types and operations are required:
38405
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   570
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   571
  \medskip
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   572
  \begin{tabular}{l}
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   573
  \isa{type\ T} \\
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   574
  \isa{val\ empty{\isaliteral{3A}{\isacharcolon}}\ T} \\
38405
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   575
  \end{tabular}
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   576
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   577
  \begin{description}
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   578
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   579
  \item \isa{T} the type of data to store.
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   580
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   581
  \item \isa{empty} initial (empty) data.
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   582
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   583
  \end{description}
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   584
40755
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   585
  \noindent An instance of \verb|Code_Data| provides the
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   586
  following interface:
38405
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   587
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   588
  \medskip
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   589
  \begin{tabular}{l}
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   590
  \isa{change{\isaliteral{3A}{\isacharcolon}}\ theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ {\isaliteral{28}{\isacharparenleft}}T\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ T{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ T} \\
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   591
  \isa{change{\isaliteral{5F}{\isacharunderscore}}yield{\isaliteral{3A}{\isacharcolon}}\ theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ {\isaliteral{28}{\isacharparenleft}}T\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ {\isaliteral{27}{\isacharprime}}a\ {\isaliteral{2A}{\isacharasterisk}}\ T{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ {\isaliteral{27}{\isacharprime}}a\ {\isaliteral{2A}{\isacharasterisk}}\ T}
38405
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   592
  \end{tabular}
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   593
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   594
  \begin{description}
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   595
40755
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   596
  \item \isa{change} update of current data (cached!) by giving a
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   597
    continuation.
38405
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   598
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   599
  \item \isa{change{\isaliteral{5F}{\isacharunderscore}}yield} update with side result.
38405
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   600
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   601
  \end{description}%
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   602
\end{isamarkuptext}%
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   603
\isamarkuptrue%
7935b334893e sketch of new outline
haftmann
parents: 37836
diff changeset
   604
%
28447
haftmann
parents:
diff changeset
   605
\isadelimtheory
haftmann
parents:
diff changeset
   606
%
haftmann
parents:
diff changeset
   607
\endisadelimtheory
haftmann
parents:
diff changeset
   608
%
haftmann
parents:
diff changeset
   609
\isatagtheory
haftmann
parents:
diff changeset
   610
\isacommand{end}\isamarkupfalse%
haftmann
parents:
diff changeset
   611
%
haftmann
parents:
diff changeset
   612
\endisatagtheory
haftmann
parents:
diff changeset
   613
{\isafoldtheory}%
haftmann
parents:
diff changeset
   614
%
haftmann
parents:
diff changeset
   615
\isadelimtheory
haftmann
parents:
diff changeset
   616
%
haftmann
parents:
diff changeset
   617
\endisadelimtheory
haftmann
parents:
diff changeset
   618
\isanewline
46523
7ca897381b26 update of generated documents
haftmann
parents: 42096
diff changeset
   619
\isanewline
28447
haftmann
parents:
diff changeset
   620
\end{isabellebody}%
haftmann
parents:
diff changeset
   621
%%% Local Variables:
haftmann
parents:
diff changeset
   622
%%% mode: latex
haftmann
parents:
diff changeset
   623
%%% TeX-master: "root"
haftmann
parents:
diff changeset
   624
%%% End: