doc-src/Codegen/Thy/document/Introduction.tex
author haftmann
Sat, 18 Feb 2012 20:13:38 +0100
changeset 46523 7ca897381b26
parent 45211 3dd426ae6bea
child 46563 0ad69b30b39c
permissions -rw-r--r--
update of generated documents
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{Introduction}%
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
\ Introduction\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
%
38405
7935b334893e sketch of new outline
haftmann
parents: 38402
diff changeset
    21
\isamarkupsection{Introduction%
7935b334893e sketch of new outline
haftmann
parents: 38402
diff changeset
    22
}
7935b334893e sketch of new outline
haftmann
parents: 38402
diff changeset
    23
\isamarkuptrue%
7935b334893e sketch of new outline
haftmann
parents: 38402
diff changeset
    24
%
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
    25
\begin{isamarkuptext}%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
    26
This tutorial introduces the code generator facilities of \isa{Isabelle{\isaliteral{2F}{\isacharslash}}HOL}.  It allows to turn (a certain class of) HOL
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
    27
  specifications into corresponding executable code in the programming
38813
f50f0802ba99 updated generated files
haftmann
parents: 38505
diff changeset
    28
  languages \isa{SML} \cite{SML}, \isa{OCaml} \cite{OCaml},
f50f0802ba99 updated generated files
haftmann
parents: 38505
diff changeset
    29
  \isa{Haskell} \cite{haskell-revised-report} and \isa{Scala}
f50f0802ba99 updated generated files
haftmann
parents: 38505
diff changeset
    30
  \cite{scala-overview-tech-report}.
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
    31
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
    32
  To profit from this tutorial, some familiarity and experience with
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
    33
  \hyperlink{theory.HOL}{\mbox{\isa{HOL}}} \cite{isa-tutorial} and its basic theories is assumed.%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
    34
\end{isamarkuptext}%
38405
7935b334893e sketch of new outline
haftmann
parents: 38402
diff changeset
    35
\isamarkuptrue%
7935b334893e sketch of new outline
haftmann
parents: 38402
diff changeset
    36
%
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
    37
\isamarkupsubsection{Code generation principle: shallow embedding \label{sec:principle}%
28447
haftmann
parents:
diff changeset
    38
}
haftmann
parents:
diff changeset
    39
\isamarkuptrue%
haftmann
parents:
diff changeset
    40
%
haftmann
parents:
diff changeset
    41
\begin{isamarkuptext}%
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
    42
The key concept for understanding Isabelle's code generation is
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
    43
  \emph{shallow embedding}: logical entities like constants, types and
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
    44
  classes are identified with corresponding entities in the target
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
    45
  language.  In particular, the carrier of a generated program's
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
    46
  semantics are \emph{equational theorems} from the logic.  If we view
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
    47
  a generated program as an implementation of a higher-order rewrite
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
    48
  system, then every rewrite step performed by the program can be
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
    49
  simulated in the logic, which guarantees partial correctness
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
    50
  \cite{Haftmann-Nipkow:2010:code}.%
28447
haftmann
parents:
diff changeset
    51
\end{isamarkuptext}%
haftmann
parents:
diff changeset
    52
\isamarkuptrue%
haftmann
parents:
diff changeset
    53
%
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
    54
\isamarkupsubsection{A quick start with the Isabelle/HOL toolbox \label{sec:queue_example}%
28447
haftmann
parents:
diff changeset
    55
}
haftmann
parents:
diff changeset
    56
\isamarkuptrue%
haftmann
parents:
diff changeset
    57
%
haftmann
parents:
diff changeset
    58
\begin{isamarkuptext}%
38505
2f8699695cf6 use command_def vs. command more consciously
haftmann
parents: 38460
diff changeset
    59
In a HOL theory, the \indexdef{}{command}{datatype}\hypertarget{command.datatype}{\hyperlink{command.datatype}{\mbox{\isa{\isacommand{datatype}}}}} and \indexdef{}{command}{definition}\hypertarget{command.definition}{\hyperlink{command.definition}{\mbox{\isa{\isacommand{definition}}}}}/\indexdef{}{command}{primrec}\hypertarget{command.primrec}{\hyperlink{command.primrec}{\mbox{\isa{\isacommand{primrec}}}}}/\indexdef{}{command}{fun}\hypertarget{command.fun}{\hyperlink{command.fun}{\mbox{\isa{\isacommand{fun}}}}} declarations
2f8699695cf6 use command_def vs. command more consciously
haftmann
parents: 38460
diff changeset
    60
  form the core of a functional programming language.  By default
2f8699695cf6 use command_def vs. command more consciously
haftmann
parents: 38460
diff changeset
    61
  equational theorems stemming from those are used for generated code,
2f8699695cf6 use command_def vs. command more consciously
haftmann
parents: 38460
diff changeset
    62
  therefore \qt{naive} code generation can proceed without further
2f8699695cf6 use command_def vs. command more consciously
haftmann
parents: 38460
diff changeset
    63
  ado.
28447
haftmann
parents:
diff changeset
    64
haftmann
parents:
diff changeset
    65
  For example, here a simple \qt{implementation} of amortised queues:%
haftmann
parents:
diff changeset
    66
\end{isamarkuptext}%
haftmann
parents:
diff changeset
    67
\isamarkuptrue%
haftmann
parents:
diff changeset
    68
%
28564
haftmann
parents: 28447
diff changeset
    69
\isadelimquote
28447
haftmann
parents:
diff changeset
    70
%
28564
haftmann
parents: 28447
diff changeset
    71
\endisadelimquote
28447
haftmann
parents:
diff changeset
    72
%
28564
haftmann
parents: 28447
diff changeset
    73
\isatagquote
28447
haftmann
parents:
diff changeset
    74
\isacommand{datatype}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
    75
\ {\isaliteral{27}{\isacharprime}}a\ queue\ {\isaliteral{3D}{\isacharequal}}\ AQueue\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{27}{\isacharprime}}a\ list{\isaliteral{22}{\isachardoublequoteclose}}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{27}{\isacharprime}}a\ list{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
28447
haftmann
parents:
diff changeset
    76
\isanewline
haftmann
parents:
diff changeset
    77
\isacommand{definition}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
    78
\ empty\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{27}{\isacharprime}}a\ queue{\isaliteral{22}{\isachardoublequoteclose}}\ \isakeyword{where}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
    79
\ \ {\isaliteral{22}{\isachardoublequoteopen}}empty\ {\isaliteral{3D}{\isacharequal}}\ AQueue\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
28447
haftmann
parents:
diff changeset
    80
\isanewline
haftmann
parents:
diff changeset
    81
\isacommand{primrec}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
    82
\ enqueue\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{27}{\isacharprime}}a\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{27}{\isacharprime}}a\ queue\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{27}{\isacharprime}}a\ queue{\isaliteral{22}{\isachardoublequoteclose}}\ \isakeyword{where}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
    83
\ \ {\isaliteral{22}{\isachardoublequoteopen}}enqueue\ x\ {\isaliteral{28}{\isacharparenleft}}AQueue\ xs\ ys{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ AQueue\ {\isaliteral{28}{\isacharparenleft}}x\ {\isaliteral{23}{\isacharhash}}\ xs{\isaliteral{29}{\isacharparenright}}\ ys{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
28447
haftmann
parents:
diff changeset
    84
\isanewline
haftmann
parents:
diff changeset
    85
\isacommand{fun}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
    86
\ dequeue\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{27}{\isacharprime}}a\ queue\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{27}{\isacharprime}}a\ option\ {\isaliteral{5C3C74696D65733E}{\isasymtimes}}\ {\isaliteral{27}{\isacharprime}}a\ queue{\isaliteral{22}{\isachardoublequoteclose}}\ \isakeyword{where}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
    87
\ \ \ \ {\isaliteral{22}{\isachardoublequoteopen}}dequeue\ {\isaliteral{28}{\isacharparenleft}}AQueue\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{28}{\isacharparenleft}}None{\isaliteral{2C}{\isacharcomma}}\ AQueue\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
    88
\ \ {\isaliteral{7C}{\isacharbar}}\ {\isaliteral{22}{\isachardoublequoteopen}}dequeue\ {\isaliteral{28}{\isacharparenleft}}AQueue\ xs\ {\isaliteral{28}{\isacharparenleft}}y\ {\isaliteral{23}{\isacharhash}}\ ys{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{28}{\isacharparenleft}}Some\ y{\isaliteral{2C}{\isacharcomma}}\ AQueue\ xs\ ys{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
    89
\ \ {\isaliteral{7C}{\isacharbar}}\ {\isaliteral{22}{\isachardoublequoteopen}}dequeue\ {\isaliteral{28}{\isacharparenleft}}AQueue\ xs\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
    90
\ \ \ \ \ \ {\isaliteral{28}{\isacharparenleft}}case\ rev\ xs\ of\ y\ {\isaliteral{23}{\isacharhash}}\ ys\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{28}{\isacharparenleft}}Some\ y{\isaliteral{2C}{\isacharcomma}}\ AQueue\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}\ ys{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequoteclose}}\ %
28564
haftmann
parents: 28447
diff changeset
    91
\endisatagquote
haftmann
parents: 28447
diff changeset
    92
{\isafoldquote}%
28447
haftmann
parents:
diff changeset
    93
%
28564
haftmann
parents: 28447
diff changeset
    94
\isadelimquote
28447
haftmann
parents:
diff changeset
    95
%
28564
haftmann
parents: 28447
diff changeset
    96
\endisadelimquote
28447
haftmann
parents:
diff changeset
    97
%
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
    98
\isadeliminvisible
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
    99
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   100
\endisadeliminvisible
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   101
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   102
\isataginvisible
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   103
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   104
\endisataginvisible
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   105
{\isafoldinvisible}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   106
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   107
\isadeliminvisible
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   108
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   109
\endisadeliminvisible
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   110
%
28447
haftmann
parents:
diff changeset
   111
\begin{isamarkuptext}%
haftmann
parents:
diff changeset
   112
\noindent Then we can generate code e.g.~for \isa{SML} as follows:%
haftmann
parents:
diff changeset
   113
\end{isamarkuptext}%
haftmann
parents:
diff changeset
   114
\isamarkuptrue%
haftmann
parents:
diff changeset
   115
%
28564
haftmann
parents: 28447
diff changeset
   116
\isadelimquote
28447
haftmann
parents:
diff changeset
   117
%
28564
haftmann
parents: 28447
diff changeset
   118
\endisadelimquote
28447
haftmann
parents:
diff changeset
   119
%
28564
haftmann
parents: 28447
diff changeset
   120
\isatagquote
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   121
\isacommand{export{\isaliteral{5F}{\isacharunderscore}}code}\isamarkupfalse%
28447
haftmann
parents:
diff changeset
   122
\ empty\ dequeue\ enqueue\ \isakeyword{in}\ SML\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   123
\ \ \isakeyword{module{\isaliteral{5F}{\isacharunderscore}}name}\ Example\ \isakeyword{file}\ {\isaliteral{22}{\isachardoublequoteopen}}examples{\isaliteral{2F}{\isacharslash}}example{\isaliteral{2E}{\isachardot}}ML{\isaliteral{22}{\isachardoublequoteclose}}%
28564
haftmann
parents: 28447
diff changeset
   124
\endisatagquote
haftmann
parents: 28447
diff changeset
   125
{\isafoldquote}%
28447
haftmann
parents:
diff changeset
   126
%
28564
haftmann
parents: 28447
diff changeset
   127
\isadelimquote
28447
haftmann
parents:
diff changeset
   128
%
28564
haftmann
parents: 28447
diff changeset
   129
\endisadelimquote
28447
haftmann
parents:
diff changeset
   130
%
haftmann
parents:
diff changeset
   131
\begin{isamarkuptext}%
haftmann
parents:
diff changeset
   132
\noindent resulting in the following code:%
haftmann
parents:
diff changeset
   133
\end{isamarkuptext}%
haftmann
parents:
diff changeset
   134
\isamarkuptrue%
haftmann
parents:
diff changeset
   135
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   136
\isadelimquotetypewriter
28447
haftmann
parents:
diff changeset
   137
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   138
\endisadelimquotetypewriter
28447
haftmann
parents:
diff changeset
   139
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   140
\isatagquotetypewriter
28447
haftmann
parents:
diff changeset
   141
%
haftmann
parents:
diff changeset
   142
\begin{isamarkuptext}%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   143
structure\ Example\ {\isaliteral{3A}{\isacharcolon}}\ sig\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   144
\ \ val\ id\ {\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{27}{\isacharprime}}a\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{27}{\isacharprime}}a\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   145
\ \ val\ fold\ {\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{27}{\isacharprime}}a\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{27}{\isacharprime}}b\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{27}{\isacharprime}}b{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{27}{\isacharprime}}a\ list\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{27}{\isacharprime}}b\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{27}{\isacharprime}}b\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   146
\ \ val\ rev\ {\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{27}{\isacharprime}}a\ list\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{27}{\isacharprime}}a\ list\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   147
\ \ datatype\ {\isaliteral{27}{\isacharprime}}a\ queue\ {\isaliteral{3D}{\isacharequal}}\ AQueue\ of\ {\isaliteral{27}{\isacharprime}}a\ list\ {\isaliteral{2A}{\isacharasterisk}}\ {\isaliteral{27}{\isacharprime}}a\ list\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   148
\ \ val\ empty\ {\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{27}{\isacharprime}}a\ queue\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   149
\ \ val\ dequeue\ {\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{27}{\isacharprime}}a\ queue\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{27}{\isacharprime}}a\ option\ {\isaliteral{2A}{\isacharasterisk}}\ {\isaliteral{27}{\isacharprime}}a\ queue\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   150
\ \ val\ enqueue\ {\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{27}{\isacharprime}}a\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{27}{\isacharprime}}a\ queue\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{27}{\isacharprime}}a\ queue\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   151
end\ {\isaliteral{3D}{\isacharequal}}\ struct\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   152
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   153
fun\ id\ x\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{28}{\isacharparenleft}}fn\ xa\ {\isaliteral{3D}{\isacharequal}}{\isaliteral{3E}{\isachargreater}}\ xa{\isaliteral{29}{\isacharparenright}}\ x{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   154
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   155
fun\ fold\ f\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}\ {\isaliteral{3D}{\isacharequal}}\ id\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   156
\ \ {\isaliteral{7C}{\isacharbar}}\ fold\ f\ {\isaliteral{28}{\isacharparenleft}}x\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ xs{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ fold\ f\ xs\ o\ f\ x{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   157
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   158
fun\ rev\ xs\ {\isaliteral{3D}{\isacharequal}}\ fold\ {\isaliteral{28}{\isacharparenleft}}fn\ a\ {\isaliteral{3D}{\isacharequal}}{\isaliteral{3E}{\isachargreater}}\ fn\ b\ {\isaliteral{3D}{\isacharequal}}{\isaliteral{3E}{\isachargreater}}\ a\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ b{\isaliteral{29}{\isacharparenright}}\ xs\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   159
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   160
datatype\ {\isaliteral{27}{\isacharprime}}a\ queue\ {\isaliteral{3D}{\isacharequal}}\ AQueue\ of\ {\isaliteral{27}{\isacharprime}}a\ list\ {\isaliteral{2A}{\isacharasterisk}}\ {\isaliteral{27}{\isacharprime}}a\ list{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   161
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   162
val\ empty\ {\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{27}{\isacharprime}}a\ queue\ {\isaliteral{3D}{\isacharequal}}\ AQueue\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   163
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   164
fun\ dequeue\ {\isaliteral{28}{\isacharparenleft}}AQueue\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{28}{\isacharparenleft}}NONE{\isaliteral{2C}{\isacharcomma}}\ AQueue\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   165
\ \ {\isaliteral{7C}{\isacharbar}}\ dequeue\ {\isaliteral{28}{\isacharparenleft}}AQueue\ {\isaliteral{28}{\isacharparenleft}}xs{\isaliteral{2C}{\isacharcomma}}\ y\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ ys{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{28}{\isacharparenleft}}SOME\ y{\isaliteral{2C}{\isacharcomma}}\ AQueue\ {\isaliteral{28}{\isacharparenleft}}xs{\isaliteral{2C}{\isacharcomma}}\ ys{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   166
\ \ {\isaliteral{7C}{\isacharbar}}\ dequeue\ {\isaliteral{28}{\isacharparenleft}}AQueue\ {\isaliteral{28}{\isacharparenleft}}v\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ va{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   167
\ \ \ \ let\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   168
\ \ \ \ \ \ val\ y\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ ys\ {\isaliteral{3D}{\isacharequal}}\ rev\ {\isaliteral{28}{\isacharparenleft}}v\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ va{\isaliteral{29}{\isacharparenright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   169
\ \ \ \ in\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   170
\ \ \ \ \ \ {\isaliteral{28}{\isacharparenleft}}SOME\ y{\isaliteral{2C}{\isacharcomma}}\ AQueue\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{2C}{\isacharcomma}}\ ys{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   171
\ \ \ \ end{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   172
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   173
fun\ enqueue\ x\ {\isaliteral{28}{\isacharparenleft}}AQueue\ {\isaliteral{28}{\isacharparenleft}}xs{\isaliteral{2C}{\isacharcomma}}\ ys{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ AQueue\ {\isaliteral{28}{\isacharparenleft}}x\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ xs{\isaliteral{2C}{\isacharcomma}}\ ys{\isaliteral{29}{\isacharparenright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   174
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   175
end{\isaliteral{3B}{\isacharsemicolon}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{2A}{\isacharasterisk}}struct\ Example{\isaliteral{2A}{\isacharasterisk}}{\isaliteral{29}{\isacharparenright}}\isanewline%
28447
haftmann
parents:
diff changeset
   176
\end{isamarkuptext}%
haftmann
parents:
diff changeset
   177
\isamarkuptrue%
haftmann
parents:
diff changeset
   178
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   179
\endisatagquotetypewriter
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   180
{\isafoldquotetypewriter}%
28447
haftmann
parents:
diff changeset
   181
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   182
\isadelimquotetypewriter
28447
haftmann
parents:
diff changeset
   183
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   184
\endisadelimquotetypewriter
28447
haftmann
parents:
diff changeset
   185
%
haftmann
parents:
diff changeset
   186
\begin{isamarkuptext}%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   187
\noindent The \indexdef{}{command}{export\_code}\hypertarget{command.export-code}{\hyperlink{command.export-code}{\mbox{\isa{\isacommand{export{\isaliteral{5F}{\isacharunderscore}}code}}}}} command takes a
38505
2f8699695cf6 use command_def vs. command more consciously
haftmann
parents: 38460
diff changeset
   188
  space-separated list of constants for which code shall be generated;
2f8699695cf6 use command_def vs. command more consciously
haftmann
parents: 38460
diff changeset
   189
  anything else needed for those is added implicitly.  Then follows a
2f8699695cf6 use command_def vs. command more consciously
haftmann
parents: 38460
diff changeset
   190
  target language identifier and a freely chosen module name.  A file
2f8699695cf6 use command_def vs. command more consciously
haftmann
parents: 38460
diff changeset
   191
  name denotes the destination to store the generated code.  Note that
2f8699695cf6 use command_def vs. command more consciously
haftmann
parents: 38460
diff changeset
   192
  the semantics of the destination depends on the target language: for
38813
f50f0802ba99 updated generated files
haftmann
parents: 38505
diff changeset
   193
  \isa{SML}, \isa{OCaml} and \isa{Scala} it denotes a \emph{file},
f50f0802ba99 updated generated files
haftmann
parents: 38505
diff changeset
   194
  for \isa{Haskell} it denotes a \emph{directory} where a file named as the
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   195
  module name (with extension \isa{{\isaliteral{2E}{\isachardot}}hs}) is written:%
28447
haftmann
parents:
diff changeset
   196
\end{isamarkuptext}%
haftmann
parents:
diff changeset
   197
\isamarkuptrue%
haftmann
parents:
diff changeset
   198
%
28564
haftmann
parents: 28447
diff changeset
   199
\isadelimquote
28447
haftmann
parents:
diff changeset
   200
%
28564
haftmann
parents: 28447
diff changeset
   201
\endisadelimquote
28447
haftmann
parents:
diff changeset
   202
%
28564
haftmann
parents: 28447
diff changeset
   203
\isatagquote
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   204
\isacommand{export{\isaliteral{5F}{\isacharunderscore}}code}\isamarkupfalse%
28447
haftmann
parents:
diff changeset
   205
\ empty\ dequeue\ enqueue\ \isakeyword{in}\ Haskell\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   206
\ \ \isakeyword{module{\isaliteral{5F}{\isacharunderscore}}name}\ Example\ \isakeyword{file}\ {\isaliteral{22}{\isachardoublequoteopen}}examples{\isaliteral{2F}{\isacharslash}}{\isaliteral{22}{\isachardoublequoteclose}}%
28564
haftmann
parents: 28447
diff changeset
   207
\endisatagquote
haftmann
parents: 28447
diff changeset
   208
{\isafoldquote}%
28447
haftmann
parents:
diff changeset
   209
%
28564
haftmann
parents: 28447
diff changeset
   210
\isadelimquote
28447
haftmann
parents:
diff changeset
   211
%
28564
haftmann
parents: 28447
diff changeset
   212
\endisadelimquote
28447
haftmann
parents:
diff changeset
   213
%
haftmann
parents:
diff changeset
   214
\begin{isamarkuptext}%
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   215
\noindent This is the corresponding code:%
28447
haftmann
parents:
diff changeset
   216
\end{isamarkuptext}%
haftmann
parents:
diff changeset
   217
\isamarkuptrue%
haftmann
parents:
diff changeset
   218
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   219
\isadelimquotetypewriter
28447
haftmann
parents:
diff changeset
   220
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   221
\endisadelimquotetypewriter
28447
haftmann
parents:
diff changeset
   222
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   223
\isatagquotetypewriter
28447
haftmann
parents:
diff changeset
   224
%
haftmann
parents:
diff changeset
   225
\begin{isamarkuptext}%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   226
module\ Example\ where\ {\isaliteral{7B}{\isacharbraceleft}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   227
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   228
data\ Queue\ a\ {\isaliteral{3D}{\isacharequal}}\ AQueue\ {\isaliteral{5B}{\isacharbrackleft}}a{\isaliteral{5D}{\isacharbrackright}}\ {\isaliteral{5B}{\isacharbrackleft}}a{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   229
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   230
empty\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ forall\ a{\isaliteral{2E}{\isachardot}}\ Queue\ a{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   231
empty\ {\isaliteral{3D}{\isacharequal}}\ AQueue\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   232
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   233
dequeue\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ forall\ a{\isaliteral{2E}{\isachardot}}\ Queue\ a\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{28}{\isacharparenleft}}Maybe\ a{\isaliteral{2C}{\isacharcomma}}\ Queue\ a{\isaliteral{29}{\isacharparenright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   234
dequeue\ {\isaliteral{28}{\isacharparenleft}}AQueue\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{28}{\isacharparenleft}}Nothing{\isaliteral{2C}{\isacharcomma}}\ AQueue\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   235
dequeue\ {\isaliteral{28}{\isacharparenleft}}AQueue\ xs\ {\isaliteral{28}{\isacharparenleft}}y\ {\isaliteral{3A}{\isacharcolon}}\ ys{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{28}{\isacharparenleft}}Just\ y{\isaliteral{2C}{\isacharcomma}}\ AQueue\ xs\ ys{\isaliteral{29}{\isacharparenright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   236
dequeue\ {\isaliteral{28}{\isacharparenleft}}AQueue\ {\isaliteral{28}{\isacharparenleft}}v\ {\isaliteral{3A}{\isacharcolon}}\ va{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   237
\ \ let\ {\isaliteral{7B}{\isacharbraceleft}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   238
\ \ \ \ {\isaliteral{28}{\isacharparenleft}}y\ {\isaliteral{3A}{\isacharcolon}}\ ys{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ reverse\ {\isaliteral{28}{\isacharparenleft}}v\ {\isaliteral{3A}{\isacharcolon}}\ va{\isaliteral{29}{\isacharparenright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   239
\ \ {\isaliteral{7D}{\isacharbraceright}}\ in\ {\isaliteral{28}{\isacharparenleft}}Just\ y{\isaliteral{2C}{\isacharcomma}}\ AQueue\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}\ ys{\isaliteral{29}{\isacharparenright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   240
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   241
enqueue\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ forall\ a{\isaliteral{2E}{\isachardot}}\ a\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ Queue\ a\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ Queue\ a{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   242
enqueue\ x\ {\isaliteral{28}{\isacharparenleft}}AQueue\ xs\ ys{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ AQueue\ {\isaliteral{28}{\isacharparenleft}}x\ {\isaliteral{3A}{\isacharcolon}}\ xs{\isaliteral{29}{\isacharparenright}}\ ys{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   243
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   244
{\isaliteral{7D}{\isacharbraceright}}\isanewline%
28447
haftmann
parents:
diff changeset
   245
\end{isamarkuptext}%
haftmann
parents:
diff changeset
   246
\isamarkuptrue%
haftmann
parents:
diff changeset
   247
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   248
\endisatagquotetypewriter
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   249
{\isafoldquotetypewriter}%
28447
haftmann
parents:
diff changeset
   250
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   251
\isadelimquotetypewriter
28447
haftmann
parents:
diff changeset
   252
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   253
\endisadelimquotetypewriter
28447
haftmann
parents:
diff changeset
   254
%
haftmann
parents:
diff changeset
   255
\begin{isamarkuptext}%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   256
\noindent For more details about \hyperlink{command.export-code}{\mbox{\isa{\isacommand{export{\isaliteral{5F}{\isacharunderscore}}code}}}} see
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   257
  \secref{sec:further}.%
28447
haftmann
parents:
diff changeset
   258
\end{isamarkuptext}%
haftmann
parents:
diff changeset
   259
\isamarkuptrue%
haftmann
parents:
diff changeset
   260
%
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   261
\isamarkupsubsection{Type classes%
28447
haftmann
parents:
diff changeset
   262
}
haftmann
parents:
diff changeset
   263
\isamarkuptrue%
haftmann
parents:
diff changeset
   264
%
haftmann
parents:
diff changeset
   265
\begin{isamarkuptext}%
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   266
Code can also be generated from type classes in a Haskell-like
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   267
  manner.  For illustration here an example from abstract algebra:%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   268
\end{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   269
\isamarkuptrue%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   270
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   271
\isadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   272
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   273
\endisadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   274
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   275
\isatagquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   276
\isacommand{class}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   277
\ semigroup\ {\isaliteral{3D}{\isacharequal}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   278
\ \ \isakeyword{fixes}\ mult\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{27}{\isacharprime}}a\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{27}{\isacharprime}}a\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{27}{\isacharprime}}a{\isaliteral{22}{\isachardoublequoteclose}}\ {\isaliteral{28}{\isacharparenleft}}\isakeyword{infixl}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C6F74696D65733E}{\isasymotimes}}{\isaliteral{22}{\isachardoublequoteclose}}\ {\isadigit{7}}{\isadigit{0}}{\isaliteral{29}{\isacharparenright}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   279
\ \ \isakeyword{assumes}\ assoc{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{28}{\isacharparenleft}}x\ {\isaliteral{5C3C6F74696D65733E}{\isasymotimes}}\ y{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{5C3C6F74696D65733E}{\isasymotimes}}\ z\ {\isaliteral{3D}{\isacharequal}}\ x\ {\isaliteral{5C3C6F74696D65733E}{\isasymotimes}}\ {\isaliteral{28}{\isacharparenleft}}y\ {\isaliteral{5C3C6F74696D65733E}{\isasymotimes}}\ z{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   280
\isanewline
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   281
\isacommand{class}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   282
\ monoid\ {\isaliteral{3D}{\isacharequal}}\ semigroup\ {\isaliteral{2B}{\isacharplus}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   283
\ \ \isakeyword{fixes}\ neutral\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{27}{\isacharprime}}a\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C6F6E653E}{\isasymone}}{\isaliteral{22}{\isachardoublequoteclose}}{\isaliteral{29}{\isacharparenright}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   284
\ \ \isakeyword{assumes}\ neutl{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C6F6E653E}{\isasymone}}\ {\isaliteral{5C3C6F74696D65733E}{\isasymotimes}}\ x\ {\isaliteral{3D}{\isacharequal}}\ x{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   285
\ \ \ \ \isakeyword{and}\ neutr{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}x\ {\isaliteral{5C3C6F74696D65733E}{\isasymotimes}}\ {\isaliteral{5C3C6F6E653E}{\isasymone}}\ {\isaliteral{3D}{\isacharequal}}\ x{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   286
\isanewline
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   287
\isacommand{instantiation}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   288
\ nat\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ monoid\isanewline
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   289
\isakeyword{begin}\isanewline
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   290
\isanewline
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   291
\isacommand{primrec}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   292
\ mult{\isaliteral{5F}{\isacharunderscore}}nat\ \isakeyword{where}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   293
\ \ \ \ {\isaliteral{22}{\isachardoublequoteopen}}{\isadigit{0}}\ {\isaliteral{5C3C6F74696D65733E}{\isasymotimes}}\ n\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{28}{\isacharparenleft}}{\isadigit{0}}{\isaliteral{5C3C436F6C6F6E3E}{\isasymColon}}nat{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   294
\ \ {\isaliteral{7C}{\isacharbar}}\ {\isaliteral{22}{\isachardoublequoteopen}}Suc\ m\ {\isaliteral{5C3C6F74696D65733E}{\isasymotimes}}\ n\ {\isaliteral{3D}{\isacharequal}}\ n\ {\isaliteral{2B}{\isacharplus}}\ m\ {\isaliteral{5C3C6F74696D65733E}{\isasymotimes}}\ n{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   295
\isanewline
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   296
\isacommand{definition}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   297
\ neutral{\isaliteral{5F}{\isacharunderscore}}nat\ \isakeyword{where}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   298
\ \ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C6F6E653E}{\isasymone}}\ {\isaliteral{3D}{\isacharequal}}\ Suc\ {\isadigit{0}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   299
\isanewline
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   300
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   301
\ add{\isaliteral{5F}{\isacharunderscore}}mult{\isaliteral{5F}{\isacharunderscore}}distrib{\isaliteral{3A}{\isacharcolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   302
\ \ \isakeyword{fixes}\ n\ m\ q\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ nat\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   303
\ \ \isakeyword{shows}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{28}{\isacharparenleft}}n\ {\isaliteral{2B}{\isacharplus}}\ m{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{5C3C6F74696D65733E}{\isasymotimes}}\ q\ {\isaliteral{3D}{\isacharequal}}\ n\ {\isaliteral{5C3C6F74696D65733E}{\isasymotimes}}\ q\ {\isaliteral{2B}{\isacharplus}}\ m\ {\isaliteral{5C3C6F74696D65733E}{\isasymotimes}}\ q{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   304
\ \ \isacommand{by}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   305
\ {\isaliteral{28}{\isacharparenleft}}induct\ n{\isaliteral{29}{\isacharparenright}}\ simp{\isaliteral{5F}{\isacharunderscore}}all\isanewline
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   306
\isanewline
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   307
\isacommand{instance}\isamarkupfalse%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   308
\ \isacommand{proof}\isamarkupfalse%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   309
\isanewline
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   310
\ \ \isacommand{fix}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   311
\ m\ n\ q\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ nat\isanewline
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   312
\ \ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   313
\ {\isaliteral{22}{\isachardoublequoteopen}}m\ {\isaliteral{5C3C6F74696D65733E}{\isasymotimes}}\ n\ {\isaliteral{5C3C6F74696D65733E}{\isasymotimes}}\ q\ {\isaliteral{3D}{\isacharequal}}\ m\ {\isaliteral{5C3C6F74696D65733E}{\isasymotimes}}\ {\isaliteral{28}{\isacharparenleft}}n\ {\isaliteral{5C3C6F74696D65733E}{\isasymotimes}}\ q{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   314
\ \ \ \ \isacommand{by}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   315
\ {\isaliteral{28}{\isacharparenleft}}induct\ m{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{28}{\isacharparenleft}}simp{\isaliteral{5F}{\isacharunderscore}}all\ add{\isaliteral{3A}{\isacharcolon}}\ add{\isaliteral{5F}{\isacharunderscore}}mult{\isaliteral{5F}{\isacharunderscore}}distrib{\isaliteral{29}{\isacharparenright}}\isanewline
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   316
\ \ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   317
\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C6F6E653E}{\isasymone}}\ {\isaliteral{5C3C6F74696D65733E}{\isasymotimes}}\ n\ {\isaliteral{3D}{\isacharequal}}\ n{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   318
\ \ \ \ \isacommand{by}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   319
\ {\isaliteral{28}{\isacharparenleft}}simp\ add{\isaliteral{3A}{\isacharcolon}}\ neutral{\isaliteral{5F}{\isacharunderscore}}nat{\isaliteral{5F}{\isacharunderscore}}def{\isaliteral{29}{\isacharparenright}}\isanewline
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   320
\ \ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   321
\ {\isaliteral{22}{\isachardoublequoteopen}}m\ {\isaliteral{5C3C6F74696D65733E}{\isasymotimes}}\ {\isaliteral{5C3C6F6E653E}{\isasymone}}\ {\isaliteral{3D}{\isacharequal}}\ m{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   322
\ \ \ \ \isacommand{by}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   323
\ {\isaliteral{28}{\isacharparenleft}}induct\ m{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{28}{\isacharparenleft}}simp{\isaliteral{5F}{\isacharunderscore}}all\ add{\isaliteral{3A}{\isacharcolon}}\ neutral{\isaliteral{5F}{\isacharunderscore}}nat{\isaliteral{5F}{\isacharunderscore}}def{\isaliteral{29}{\isacharparenright}}\isanewline
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   324
\isacommand{qed}\isamarkupfalse%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   325
\isanewline
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   326
\isanewline
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   327
\isacommand{end}\isamarkupfalse%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   328
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   329
\endisatagquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   330
{\isafoldquote}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   331
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   332
\isadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   333
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   334
\endisadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   335
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   336
\begin{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   337
\noindent We define the natural operation of the natural numbers
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   338
  on monoids:%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   339
\end{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   340
\isamarkuptrue%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   341
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   342
\isadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   343
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   344
\endisadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   345
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   346
\isatagquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   347
\isacommand{primrec}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   348
\ {\isaliteral{28}{\isacharparenleft}}\isakeyword{in}\ monoid{\isaliteral{29}{\isacharparenright}}\ pow\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}nat\ {\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: 39745
diff changeset
   349
\ \ \ \ {\isaliteral{22}{\isachardoublequoteopen}}pow\ {\isadigit{0}}\ a\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{5C3C6F6E653E}{\isasymone}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   350
\ \ {\isaliteral{7C}{\isacharbar}}\ {\isaliteral{22}{\isachardoublequoteopen}}pow\ {\isaliteral{28}{\isacharparenleft}}Suc\ n{\isaliteral{29}{\isacharparenright}}\ a\ {\isaliteral{3D}{\isacharequal}}\ a\ {\isaliteral{5C3C6F74696D65733E}{\isasymotimes}}\ pow\ n\ a{\isaliteral{22}{\isachardoublequoteclose}}%
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   351
\endisatagquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   352
{\isafoldquote}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   353
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   354
\isadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   355
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   356
\endisadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   357
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   358
\begin{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   359
\noindent This we use to define the discrete exponentiation
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   360
  function:%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   361
\end{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   362
\isamarkuptrue%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   363
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   364
\isadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   365
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   366
\endisadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   367
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   368
\isatagquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   369
\isacommand{definition}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   370
\ bexp\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}nat\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ nat{\isaliteral{22}{\isachardoublequoteclose}}\ \isakeyword{where}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   371
\ \ {\isaliteral{22}{\isachardoublequoteopen}}bexp\ n\ {\isaliteral{3D}{\isacharequal}}\ pow\ n\ {\isaliteral{28}{\isacharparenleft}}Suc\ {\isaliteral{28}{\isacharparenleft}}Suc\ {\isadigit{0}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequoteclose}}%
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   372
\endisatagquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   373
{\isafoldquote}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   374
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   375
\isadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   376
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   377
\endisadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   378
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   379
\begin{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   380
\noindent The corresponding code in Haskell uses that language's
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   381
  native classes:%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   382
\end{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   383
\isamarkuptrue%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   384
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   385
\isadelimquotetypewriter
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   386
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   387
\endisadelimquotetypewriter
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   388
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   389
\isatagquotetypewriter
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   390
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   391
\begin{isamarkuptext}%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   392
module\ Example\ where\ {\isaliteral{7B}{\isacharbraceleft}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   393
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   394
data\ Nat\ {\isaliteral{3D}{\isacharequal}}\ Zero{\isaliteral{5F}{\isacharunderscore}}nat\ {\isaliteral{7C}{\isacharbar}}\ Suc\ Nat{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   395
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   396
plus{\isaliteral{5F}{\isacharunderscore}}nat\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ Nat\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ Nat\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ Nat{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   397
plus{\isaliteral{5F}{\isacharunderscore}}nat\ {\isaliteral{28}{\isacharparenleft}}Suc\ m{\isaliteral{29}{\isacharparenright}}\ n\ {\isaliteral{3D}{\isacharequal}}\ plus{\isaliteral{5F}{\isacharunderscore}}nat\ m\ {\isaliteral{28}{\isacharparenleft}}Suc\ n{\isaliteral{29}{\isacharparenright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   398
plus{\isaliteral{5F}{\isacharunderscore}}nat\ Zero{\isaliteral{5F}{\isacharunderscore}}nat\ n\ {\isaliteral{3D}{\isacharequal}}\ n{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   399
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   400
class\ Semigroup\ a\ where\ {\isaliteral{7B}{\isacharbraceleft}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   401
\ \ mult\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ a\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ a\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ a{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   402
{\isaliteral{7D}{\isacharbraceright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   403
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   404
class\ {\isaliteral{28}{\isacharparenleft}}Semigroup\ a{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}{\isaliteral{3E}{\isachargreater}}\ Monoid\ a\ where\ {\isaliteral{7B}{\isacharbraceleft}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   405
\ \ neutral\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ a{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   406
{\isaliteral{7D}{\isacharbraceright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   407
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   408
pow\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ forall\ a{\isaliteral{2E}{\isachardot}}\ {\isaliteral{28}{\isacharparenleft}}Monoid\ a{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}{\isaliteral{3E}{\isachargreater}}\ Nat\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ a\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ a{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   409
pow\ Zero{\isaliteral{5F}{\isacharunderscore}}nat\ a\ {\isaliteral{3D}{\isacharequal}}\ neutral{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   410
pow\ {\isaliteral{28}{\isacharparenleft}}Suc\ n{\isaliteral{29}{\isacharparenright}}\ a\ {\isaliteral{3D}{\isacharequal}}\ mult\ a\ {\isaliteral{28}{\isacharparenleft}}pow\ n\ a{\isaliteral{29}{\isacharparenright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   411
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   412
mult{\isaliteral{5F}{\isacharunderscore}}nat\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ Nat\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ Nat\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ Nat{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   413
mult{\isaliteral{5F}{\isacharunderscore}}nat\ Zero{\isaliteral{5F}{\isacharunderscore}}nat\ n\ {\isaliteral{3D}{\isacharequal}}\ Zero{\isaliteral{5F}{\isacharunderscore}}nat{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   414
mult{\isaliteral{5F}{\isacharunderscore}}nat\ {\isaliteral{28}{\isacharparenleft}}Suc\ m{\isaliteral{29}{\isacharparenright}}\ n\ {\isaliteral{3D}{\isacharequal}}\ plus{\isaliteral{5F}{\isacharunderscore}}nat\ n\ {\isaliteral{28}{\isacharparenleft}}mult{\isaliteral{5F}{\isacharunderscore}}nat\ m\ n{\isaliteral{29}{\isacharparenright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   415
\isanewline
44548
51f167047edf updated generated files;
wenzelm
parents: 42096
diff changeset
   416
neutral{\isaliteral{5F}{\isacharunderscore}}nat\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ Nat{\isaliteral{3B}{\isacharsemicolon}}\isanewline
51f167047edf updated generated files;
wenzelm
parents: 42096
diff changeset
   417
neutral{\isaliteral{5F}{\isacharunderscore}}nat\ {\isaliteral{3D}{\isacharequal}}\ Suc\ Zero{\isaliteral{5F}{\isacharunderscore}}nat{\isaliteral{3B}{\isacharsemicolon}}\isanewline
51f167047edf updated generated files;
wenzelm
parents: 42096
diff changeset
   418
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   419
instance\ Semigroup\ Nat\ where\ {\isaliteral{7B}{\isacharbraceleft}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   420
\ \ mult\ {\isaliteral{3D}{\isacharequal}}\ mult{\isaliteral{5F}{\isacharunderscore}}nat{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   421
{\isaliteral{7D}{\isacharbraceright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   422
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   423
instance\ Monoid\ Nat\ where\ {\isaliteral{7B}{\isacharbraceleft}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   424
\ \ neutral\ {\isaliteral{3D}{\isacharequal}}\ neutral{\isaliteral{5F}{\isacharunderscore}}nat{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   425
{\isaliteral{7D}{\isacharbraceright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   426
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   427
bexp\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ Nat\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ Nat{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   428
bexp\ n\ {\isaliteral{3D}{\isacharequal}}\ pow\ n\ {\isaliteral{28}{\isacharparenleft}}Suc\ {\isaliteral{28}{\isacharparenleft}}Suc\ Zero{\isaliteral{5F}{\isacharunderscore}}nat{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   429
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   430
{\isaliteral{7D}{\isacharbraceright}}\isanewline%
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   431
\end{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   432
\isamarkuptrue%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   433
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   434
\endisatagquotetypewriter
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   435
{\isafoldquotetypewriter}%
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   436
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   437
\isadelimquotetypewriter
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   438
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   439
\endisadelimquotetypewriter
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   440
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   441
\begin{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   442
\noindent This is a convenient place to show how explicit dictionary
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   443
  construction manifests in generated code -- the same example in
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   444
  \isa{SML}:%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   445
\end{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   446
\isamarkuptrue%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   447
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   448
\isadelimquotetypewriter
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   449
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   450
\endisadelimquotetypewriter
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   451
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   452
\isatagquotetypewriter
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   453
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   454
\begin{isamarkuptext}%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   455
structure\ Example\ {\isaliteral{3A}{\isacharcolon}}\ sig\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   456
\ \ datatype\ nat\ {\isaliteral{3D}{\isacharequal}}\ Zero{\isaliteral{5F}{\isacharunderscore}}nat\ {\isaliteral{7C}{\isacharbar}}\ Suc\ of\ nat\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   457
\ \ val\ plus{\isaliteral{5F}{\isacharunderscore}}nat\ {\isaliteral{3A}{\isacharcolon}}\ nat\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ nat\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ nat\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   458
\ \ type\ {\isaliteral{27}{\isacharprime}}a\ semigroup\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   459
\ \ val\ mult\ {\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{27}{\isacharprime}}a\ semigroup\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{27}{\isacharprime}}a\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{27}{\isacharprime}}a\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{27}{\isacharprime}}a\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   460
\ \ type\ {\isaliteral{27}{\isacharprime}}a\ monoid\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   461
\ \ val\ semigroup{\isaliteral{5F}{\isacharunderscore}}monoid\ {\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{27}{\isacharprime}}a\ monoid\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{27}{\isacharprime}}a\ semigroup\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   462
\ \ val\ neutral\ {\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{27}{\isacharprime}}a\ monoid\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{27}{\isacharprime}}a\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   463
\ \ val\ pow\ {\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{27}{\isacharprime}}a\ monoid\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ nat\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{27}{\isacharprime}}a\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{27}{\isacharprime}}a\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   464
\ \ val\ mult{\isaliteral{5F}{\isacharunderscore}}nat\ {\isaliteral{3A}{\isacharcolon}}\ nat\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ nat\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ nat\isanewline
44548
51f167047edf updated generated files;
wenzelm
parents: 42096
diff changeset
   465
\ \ val\ neutral{\isaliteral{5F}{\isacharunderscore}}nat\ {\isaliteral{3A}{\isacharcolon}}\ nat\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   466
\ \ val\ semigroup{\isaliteral{5F}{\isacharunderscore}}nat\ {\isaliteral{3A}{\isacharcolon}}\ nat\ semigroup\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   467
\ \ val\ monoid{\isaliteral{5F}{\isacharunderscore}}nat\ {\isaliteral{3A}{\isacharcolon}}\ nat\ monoid\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   468
\ \ val\ bexp\ {\isaliteral{3A}{\isacharcolon}}\ nat\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ nat\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   469
end\ {\isaliteral{3D}{\isacharequal}}\ struct\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   470
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   471
datatype\ nat\ {\isaliteral{3D}{\isacharequal}}\ Zero{\isaliteral{5F}{\isacharunderscore}}nat\ {\isaliteral{7C}{\isacharbar}}\ Suc\ of\ nat{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   472
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   473
fun\ plus{\isaliteral{5F}{\isacharunderscore}}nat\ {\isaliteral{28}{\isacharparenleft}}Suc\ m{\isaliteral{29}{\isacharparenright}}\ n\ {\isaliteral{3D}{\isacharequal}}\ plus{\isaliteral{5F}{\isacharunderscore}}nat\ m\ {\isaliteral{28}{\isacharparenleft}}Suc\ n{\isaliteral{29}{\isacharparenright}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   474
\ \ {\isaliteral{7C}{\isacharbar}}\ plus{\isaliteral{5F}{\isacharunderscore}}nat\ Zero{\isaliteral{5F}{\isacharunderscore}}nat\ n\ {\isaliteral{3D}{\isacharequal}}\ n{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   475
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   476
type\ {\isaliteral{27}{\isacharprime}}a\ semigroup\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{7B}{\isacharbraceleft}}mult\ {\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{27}{\isacharprime}}a\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{27}{\isacharprime}}a\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{27}{\isacharprime}}a{\isaliteral{7D}{\isacharbraceright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   477
val\ mult\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{23}{\isacharhash}}mult\ {\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{27}{\isacharprime}}a\ semigroup\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{27}{\isacharprime}}a\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{27}{\isacharprime}}a\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{27}{\isacharprime}}a{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   478
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   479
type\ {\isaliteral{27}{\isacharprime}}a\ monoid\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{7B}{\isacharbraceleft}}semigroup{\isaliteral{5F}{\isacharunderscore}}monoid\ {\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{27}{\isacharprime}}a\ semigroup{\isaliteral{2C}{\isacharcomma}}\ neutral\ {\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{27}{\isacharprime}}a{\isaliteral{7D}{\isacharbraceright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   480
val\ semigroup{\isaliteral{5F}{\isacharunderscore}}monoid\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{23}{\isacharhash}}semigroup{\isaliteral{5F}{\isacharunderscore}}monoid\ {\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{27}{\isacharprime}}a\ monoid\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{27}{\isacharprime}}a\ semigroup{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   481
val\ neutral\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{23}{\isacharhash}}neutral\ {\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{27}{\isacharprime}}a\ monoid\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{27}{\isacharprime}}a{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   482
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   483
fun\ pow\ A{\isaliteral{5F}{\isacharunderscore}}\ Zero{\isaliteral{5F}{\isacharunderscore}}nat\ a\ {\isaliteral{3D}{\isacharequal}}\ neutral\ A{\isaliteral{5F}{\isacharunderscore}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   484
\ \ {\isaliteral{7C}{\isacharbar}}\ pow\ A{\isaliteral{5F}{\isacharunderscore}}\ {\isaliteral{28}{\isacharparenleft}}Suc\ n{\isaliteral{29}{\isacharparenright}}\ a\ {\isaliteral{3D}{\isacharequal}}\ mult\ {\isaliteral{28}{\isacharparenleft}}semigroup{\isaliteral{5F}{\isacharunderscore}}monoid\ A{\isaliteral{5F}{\isacharunderscore}}{\isaliteral{29}{\isacharparenright}}\ a\ {\isaliteral{28}{\isacharparenleft}}pow\ A{\isaliteral{5F}{\isacharunderscore}}\ n\ a{\isaliteral{29}{\isacharparenright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   485
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   486
fun\ mult{\isaliteral{5F}{\isacharunderscore}}nat\ Zero{\isaliteral{5F}{\isacharunderscore}}nat\ n\ {\isaliteral{3D}{\isacharequal}}\ Zero{\isaliteral{5F}{\isacharunderscore}}nat\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   487
\ \ {\isaliteral{7C}{\isacharbar}}\ mult{\isaliteral{5F}{\isacharunderscore}}nat\ {\isaliteral{28}{\isacharparenleft}}Suc\ m{\isaliteral{29}{\isacharparenright}}\ n\ {\isaliteral{3D}{\isacharequal}}\ plus{\isaliteral{5F}{\isacharunderscore}}nat\ n\ {\isaliteral{28}{\isacharparenleft}}mult{\isaliteral{5F}{\isacharunderscore}}nat\ m\ n{\isaliteral{29}{\isacharparenright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   488
\isanewline
44548
51f167047edf updated generated files;
wenzelm
parents: 42096
diff changeset
   489
val\ neutral{\isaliteral{5F}{\isacharunderscore}}nat\ {\isaliteral{3A}{\isacharcolon}}\ nat\ {\isaliteral{3D}{\isacharequal}}\ Suc\ Zero{\isaliteral{5F}{\isacharunderscore}}nat{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   490
\isanewline
44548
51f167047edf updated generated files;
wenzelm
parents: 42096
diff changeset
   491
val\ semigroup{\isaliteral{5F}{\isacharunderscore}}nat\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{7B}{\isacharbraceleft}}mult\ {\isaliteral{3D}{\isacharequal}}\ mult{\isaliteral{5F}{\isacharunderscore}}nat{\isaliteral{7D}{\isacharbraceright}}\ {\isaliteral{3A}{\isacharcolon}}\ nat\ semigroup{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   492
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   493
val\ monoid{\isaliteral{5F}{\isacharunderscore}}nat\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{7B}{\isacharbraceleft}}semigroup{\isaliteral{5F}{\isacharunderscore}}monoid\ {\isaliteral{3D}{\isacharequal}}\ semigroup{\isaliteral{5F}{\isacharunderscore}}nat{\isaliteral{2C}{\isacharcomma}}\ neutral\ {\isaliteral{3D}{\isacharequal}}\ neutral{\isaliteral{5F}{\isacharunderscore}}nat{\isaliteral{7D}{\isacharbraceright}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   494
\ \ {\isaliteral{3A}{\isacharcolon}}\ nat\ monoid{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   495
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   496
fun\ bexp\ n\ {\isaliteral{3D}{\isacharequal}}\ pow\ monoid{\isaliteral{5F}{\isacharunderscore}}nat\ n\ {\isaliteral{28}{\isacharparenleft}}Suc\ {\isaliteral{28}{\isacharparenleft}}Suc\ Zero{\isaliteral{5F}{\isacharunderscore}}nat{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   497
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   498
end{\isaliteral{3B}{\isacharsemicolon}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{2A}{\isacharasterisk}}struct\ Example{\isaliteral{2A}{\isacharasterisk}}{\isaliteral{29}{\isacharparenright}}\isanewline%
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   499
\end{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   500
\isamarkuptrue%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   501
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   502
\endisatagquotetypewriter
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   503
{\isafoldquotetypewriter}%
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   504
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   505
\isadelimquotetypewriter
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   506
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   507
\endisadelimquotetypewriter
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   508
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   509
\begin{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   510
\noindent Note the parameters with trailing underscore (\verb|A_|), which are the dictionary parameters.%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   511
\end{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   512
\isamarkuptrue%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   513
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   514
\isamarkupsubsection{How to continue from here%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   515
}
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   516
\isamarkuptrue%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   517
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   518
\begin{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   519
What you have seen so far should be already enough in a lot of
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   520
  cases.  If you are content with this, you can quit reading here.
28447
haftmann
parents:
diff changeset
   521
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   522
  Anyway, to understand situations where problems occur or to increase
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   523
  the scope of code generation beyond default, it is necessary to gain
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   524
  some understanding how the code generator actually works:
28447
haftmann
parents:
diff changeset
   525
haftmann
parents:
diff changeset
   526
  \begin{itemize}
haftmann
parents:
diff changeset
   527
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   528
    \item The foundations of the code generator are described in
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   529
      \secref{sec:foundations}.
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   530
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   531
    \item In particular \secref{sec:utterly_wrong} gives hints how to
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   532
      debug situations where code generation does not succeed as
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   533
      expected.
28447
haftmann
parents:
diff changeset
   534
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   535
    \item The scope and quality of generated code can be increased
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   536
      dramatically by applying refinement techniques, which are
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   537
      introduced in \secref{sec:refinement}.
28447
haftmann
parents:
diff changeset
   538
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   539
    \item Inductive predicates can be turned executable using an
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   540
      extension of the code generator \secref{sec:inductive}.
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   541
40755
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   542
    \item If you want to utilize code generation to obtain fast
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   543
      evaluators e.g.~for decision procedures, have a look at
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   544
      \secref{sec:evaluation}.
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   545
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   546
    \item You may want to skim over the more technical sections
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   547
      \secref{sec:adaptation} and \secref{sec:further}.
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   548
42096
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   549
    \item The target language Scala \cite{scala-overview-tech-report}
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   550
      comes with some specialities discussed in \secref{sec:scala}.
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   551
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   552
    \item For exhaustive syntax diagrams etc. you should visit the
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   553
      Isabelle/Isar Reference Manual \cite{isabelle-isar-ref}.
28447
haftmann
parents:
diff changeset
   554
haftmann
parents:
diff changeset
   555
  \end{itemize}
haftmann
parents:
diff changeset
   556
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   557
  \bigskip
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   558
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   559
  \begin{center}\fbox{\fbox{\begin{minipage}{8cm}
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   560
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   561
    \begin{center}\textit{Happy proving, happy hacking!}\end{center}
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   562
45211
3dd426ae6bea removed some remaining artefacts of ancient SML code generator
haftmann
parents: 44548
diff changeset
   563
  \end{minipage}}}\end{center}%
28447
haftmann
parents:
diff changeset
   564
\end{isamarkuptext}%
haftmann
parents:
diff changeset
   565
\isamarkuptrue%
haftmann
parents:
diff changeset
   566
%
haftmann
parents:
diff changeset
   567
\isadelimtheory
haftmann
parents:
diff changeset
   568
%
haftmann
parents:
diff changeset
   569
\endisadelimtheory
haftmann
parents:
diff changeset
   570
%
haftmann
parents:
diff changeset
   571
\isatagtheory
haftmann
parents:
diff changeset
   572
\isacommand{end}\isamarkupfalse%
haftmann
parents:
diff changeset
   573
%
haftmann
parents:
diff changeset
   574
\endisatagtheory
haftmann
parents:
diff changeset
   575
{\isafoldtheory}%
haftmann
parents:
diff changeset
   576
%
haftmann
parents:
diff changeset
   577
\isadelimtheory
haftmann
parents:
diff changeset
   578
%
haftmann
parents:
diff changeset
   579
\endisadelimtheory
haftmann
parents:
diff changeset
   580
\isanewline
46523
7ca897381b26 update of generated documents
haftmann
parents: 45211
diff changeset
   581
\isanewline
28447
haftmann
parents:
diff changeset
   582
\end{isabellebody}%
haftmann
parents:
diff changeset
   583
%%% Local Variables:
haftmann
parents:
diff changeset
   584
%%% mode: latex
haftmann
parents:
diff changeset
   585
%%% TeX-master: "root"
haftmann
parents:
diff changeset
   586
%%% End: