doc-src/Codegen/Thy/document/Introduction.tex
author wenzelm
Mon, 30 Jul 2012 17:03:24 +0200
changeset 48609 0090fab725e3
parent 48501 e59778bc71a0
child 48863 881e8a96e617
permissions -rw-r--r--
removed some old material (inactive since 2002/2003);
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
46563
0ad69b30b39c updated generated files (cf. 8d51b375e926);
wenzelm
parents: 46523
diff changeset
    33
  \isa{HOL} \cite{isa-tutorial} and its basic theories is assumed.%
38437
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
48501
e59778bc71a0 updated generated files;
wenzelm
parents: 46563
diff changeset
   228
import\ Prelude\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{28}{\isacharparenleft}}{\isaliteral{3D}{\isacharequal}}{\isaliteral{3D}{\isacharequal}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{2F}{\isacharslash}}{\isaliteral{3D}{\isacharequal}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{3C}{\isacharless}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{3C}{\isacharless}}{\isaliteral{3D}{\isacharequal}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{3E}{\isachargreater}}{\isaliteral{3D}{\isacharequal}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{3E}{\isachargreater}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{2B}{\isacharplus}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{2D}{\isacharminus}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{2A}{\isacharasterisk}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{2F}{\isacharslash}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\isanewline
e59778bc71a0 updated generated files;
wenzelm
parents: 46563
diff changeset
   229
\ \ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{2A}{\isacharasterisk}}{\isaliteral{2A}{\isacharasterisk}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{3E}{\isachargreater}}{\isaliteral{3E}{\isachargreater}}{\isaliteral{3D}{\isacharequal}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{3E}{\isachargreater}}{\isaliteral{3E}{\isachargreater}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{3D}{\isacharequal}}{\isaliteral{3C}{\isacharless}}{\isaliteral{3C}{\isacharless}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{26}{\isacharampersand}}{\isaliteral{26}{\isacharampersand}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{7C}{\isacharbar}}{\isaliteral{7C}{\isacharbar}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{5E}{\isacharcircum}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{5E}{\isacharcircum}}{\isaliteral{5E}{\isacharcircum}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{2E}{\isachardot}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{24}{\isachardollar}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{24}{\isachardollar}}{\isaliteral{21}{\isacharbang}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{2B}{\isacharplus}}{\isaliteral{2B}{\isacharplus}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\isanewline
e59778bc71a0 updated generated files;
wenzelm
parents: 46563
diff changeset
   230
\ \ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{21}{\isacharbang}}{\isaliteral{21}{\isacharbang}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ Eq{\isaliteral{2C}{\isacharcomma}}\ error{\isaliteral{2C}{\isacharcomma}}\ id{\isaliteral{2C}{\isacharcomma}}\ return{\isaliteral{2C}{\isacharcomma}}\ not{\isaliteral{2C}{\isacharcomma}}\ fst{\isaliteral{2C}{\isacharcomma}}\ snd{\isaliteral{2C}{\isacharcomma}}\ map{\isaliteral{2C}{\isacharcomma}}\ filter{\isaliteral{2C}{\isacharcomma}}\ concat{\isaliteral{2C}{\isacharcomma}}\isanewline
e59778bc71a0 updated generated files;
wenzelm
parents: 46563
diff changeset
   231
\ \ concatMap{\isaliteral{2C}{\isacharcomma}}\ reverse{\isaliteral{2C}{\isacharcomma}}\ zip{\isaliteral{2C}{\isacharcomma}}\ null{\isaliteral{2C}{\isacharcomma}}\ takeWhile{\isaliteral{2C}{\isacharcomma}}\ dropWhile{\isaliteral{2C}{\isacharcomma}}\ all{\isaliteral{2C}{\isacharcomma}}\ any{\isaliteral{2C}{\isacharcomma}}\ Integer{\isaliteral{2C}{\isacharcomma}}\isanewline
e59778bc71a0 updated generated files;
wenzelm
parents: 46563
diff changeset
   232
\ \ negate{\isaliteral{2C}{\isacharcomma}}\ abs{\isaliteral{2C}{\isacharcomma}}\ divMod{\isaliteral{2C}{\isacharcomma}}\ String{\isaliteral{2C}{\isacharcomma}}\ Bool{\isaliteral{28}{\isacharparenleft}}True{\isaliteral{2C}{\isacharcomma}}\ False{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ Maybe{\isaliteral{28}{\isacharparenleft}}Nothing{\isaliteral{2C}{\isacharcomma}}\ Just{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
e59778bc71a0 updated generated files;
wenzelm
parents: 46563
diff changeset
   233
import\ qualified\ Prelude{\isaliteral{3B}{\isacharsemicolon}}\isanewline
e59778bc71a0 updated generated files;
wenzelm
parents: 46563
diff changeset
   234
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   235
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
   236
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   237
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
   238
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
   239
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   240
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
   241
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
   242
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
   243
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
   244
\ \ let\ {\isaliteral{7B}{\isacharbraceleft}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   245
\ \ \ \ {\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
   246
\ \ {\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
   247
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   248
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
   249
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
   250
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   251
{\isaliteral{7D}{\isacharbraceright}}\isanewline%
28447
haftmann
parents:
diff changeset
   252
\end{isamarkuptext}%
haftmann
parents:
diff changeset
   253
\isamarkuptrue%
haftmann
parents:
diff changeset
   254
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   255
\endisatagquotetypewriter
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   256
{\isafoldquotetypewriter}%
28447
haftmann
parents:
diff changeset
   257
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   258
\isadelimquotetypewriter
28447
haftmann
parents:
diff changeset
   259
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   260
\endisadelimquotetypewriter
28447
haftmann
parents:
diff changeset
   261
%
haftmann
parents:
diff changeset
   262
\begin{isamarkuptext}%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   263
\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
   264
  \secref{sec:further}.%
28447
haftmann
parents:
diff changeset
   265
\end{isamarkuptext}%
haftmann
parents:
diff changeset
   266
\isamarkuptrue%
haftmann
parents:
diff changeset
   267
%
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   268
\isamarkupsubsection{Type classes%
28447
haftmann
parents:
diff changeset
   269
}
haftmann
parents:
diff changeset
   270
\isamarkuptrue%
haftmann
parents:
diff changeset
   271
%
haftmann
parents:
diff changeset
   272
\begin{isamarkuptext}%
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   273
Code can also be generated from type classes in a Haskell-like
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   274
  manner.  For illustration here an example from abstract algebra:%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   275
\end{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   276
\isamarkuptrue%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   277
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   278
\isadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   279
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   280
\endisadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   281
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   282
\isatagquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   283
\isacommand{class}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   284
\ semigroup\ {\isaliteral{3D}{\isacharequal}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   285
\ \ \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
   286
\ \ \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
   287
\isanewline
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   288
\isacommand{class}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   289
\ monoid\ {\isaliteral{3D}{\isacharequal}}\ semigroup\ {\isaliteral{2B}{\isacharplus}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   290
\ \ \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
   291
\ \ \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
   292
\ \ \ \ \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
   293
\isanewline
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   294
\isacommand{instantiation}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   295
\ nat\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ monoid\isanewline
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   296
\isakeyword{begin}\isanewline
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   297
\isanewline
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   298
\isacommand{primrec}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   299
\ mult{\isaliteral{5F}{\isacharunderscore}}nat\ \isakeyword{where}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   300
\ \ \ \ {\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
   301
\ \ {\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
   302
\isanewline
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   303
\isacommand{definition}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   304
\ neutral{\isaliteral{5F}{\isacharunderscore}}nat\ \isakeyword{where}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   305
\ \ {\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
   306
\isanewline
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   307
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   308
\ add{\isaliteral{5F}{\isacharunderscore}}mult{\isaliteral{5F}{\isacharunderscore}}distrib{\isaliteral{3A}{\isacharcolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   309
\ \ \isakeyword{fixes}\ n\ m\ q\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ nat\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   310
\ \ \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
   311
\ \ \isacommand{by}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   312
\ {\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
   313
\isanewline
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   314
\isacommand{instance}\isamarkupfalse%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   315
\ \isacommand{proof}\isamarkupfalse%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   316
\isanewline
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   317
\ \ \isacommand{fix}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   318
\ m\ n\ q\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ nat\isanewline
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   319
\ \ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   320
\ {\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
   321
\ \ \ \ \isacommand{by}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   322
\ {\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
   323
\ \ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   324
\ {\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
   325
\ \ \ \ \isacommand{by}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   326
\ {\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
   327
\ \ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   328
\ {\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
   329
\ \ \ \ \isacommand{by}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   330
\ {\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
   331
\isacommand{qed}\isamarkupfalse%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   332
\isanewline
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   333
\isanewline
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   334
\isacommand{end}\isamarkupfalse%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   335
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   336
\endisatagquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   337
{\isafoldquote}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   338
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   339
\isadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   340
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   341
\endisadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   342
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   343
\begin{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   344
\noindent We define the natural operation of the natural numbers
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   345
  on monoids:%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   346
\end{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   347
\isamarkuptrue%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   348
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   349
\isadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   350
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   351
\endisadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   352
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   353
\isatagquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   354
\isacommand{primrec}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   355
\ {\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
   356
\ \ \ \ {\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
   357
\ \ {\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
   358
\endisatagquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   359
{\isafoldquote}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   360
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   361
\isadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   362
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   363
\endisadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   364
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   365
\begin{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   366
\noindent This we use to define the discrete exponentiation
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   367
  function:%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   368
\end{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   369
\isamarkuptrue%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   370
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   371
\isadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   372
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   373
\endisadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   374
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   375
\isatagquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   376
\isacommand{definition}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   377
\ 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
   378
\ \ {\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
   379
\endisatagquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   380
{\isafoldquote}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   381
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   382
\isadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   383
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   384
\endisadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   385
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   386
\begin{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   387
\noindent The corresponding code in Haskell uses that language's
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   388
  native classes:%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   389
\end{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   390
\isamarkuptrue%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   391
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   392
\isadelimquotetypewriter
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   393
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   394
\endisadelimquotetypewriter
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   395
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   396
\isatagquotetypewriter
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   397
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   398
\begin{isamarkuptext}%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   399
module\ Example\ where\ {\isaliteral{7B}{\isacharbraceleft}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   400
\isanewline
48501
e59778bc71a0 updated generated files;
wenzelm
parents: 46563
diff changeset
   401
import\ Prelude\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{28}{\isacharparenleft}}{\isaliteral{3D}{\isacharequal}}{\isaliteral{3D}{\isacharequal}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{2F}{\isacharslash}}{\isaliteral{3D}{\isacharequal}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{3C}{\isacharless}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{3C}{\isacharless}}{\isaliteral{3D}{\isacharequal}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{3E}{\isachargreater}}{\isaliteral{3D}{\isacharequal}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{3E}{\isachargreater}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{2B}{\isacharplus}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{2D}{\isacharminus}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{2A}{\isacharasterisk}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{2F}{\isacharslash}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\isanewline
e59778bc71a0 updated generated files;
wenzelm
parents: 46563
diff changeset
   402
\ \ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{2A}{\isacharasterisk}}{\isaliteral{2A}{\isacharasterisk}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{3E}{\isachargreater}}{\isaliteral{3E}{\isachargreater}}{\isaliteral{3D}{\isacharequal}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{3E}{\isachargreater}}{\isaliteral{3E}{\isachargreater}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{3D}{\isacharequal}}{\isaliteral{3C}{\isacharless}}{\isaliteral{3C}{\isacharless}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{26}{\isacharampersand}}{\isaliteral{26}{\isacharampersand}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{7C}{\isacharbar}}{\isaliteral{7C}{\isacharbar}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{5E}{\isacharcircum}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{5E}{\isacharcircum}}{\isaliteral{5E}{\isacharcircum}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{2E}{\isachardot}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{24}{\isachardollar}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{24}{\isachardollar}}{\isaliteral{21}{\isacharbang}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{2B}{\isacharplus}}{\isaliteral{2B}{\isacharplus}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\isanewline
e59778bc71a0 updated generated files;
wenzelm
parents: 46563
diff changeset
   403
\ \ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{21}{\isacharbang}}{\isaliteral{21}{\isacharbang}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ Eq{\isaliteral{2C}{\isacharcomma}}\ error{\isaliteral{2C}{\isacharcomma}}\ id{\isaliteral{2C}{\isacharcomma}}\ return{\isaliteral{2C}{\isacharcomma}}\ not{\isaliteral{2C}{\isacharcomma}}\ fst{\isaliteral{2C}{\isacharcomma}}\ snd{\isaliteral{2C}{\isacharcomma}}\ map{\isaliteral{2C}{\isacharcomma}}\ filter{\isaliteral{2C}{\isacharcomma}}\ concat{\isaliteral{2C}{\isacharcomma}}\isanewline
e59778bc71a0 updated generated files;
wenzelm
parents: 46563
diff changeset
   404
\ \ concatMap{\isaliteral{2C}{\isacharcomma}}\ reverse{\isaliteral{2C}{\isacharcomma}}\ zip{\isaliteral{2C}{\isacharcomma}}\ null{\isaliteral{2C}{\isacharcomma}}\ takeWhile{\isaliteral{2C}{\isacharcomma}}\ dropWhile{\isaliteral{2C}{\isacharcomma}}\ all{\isaliteral{2C}{\isacharcomma}}\ any{\isaliteral{2C}{\isacharcomma}}\ Integer{\isaliteral{2C}{\isacharcomma}}\isanewline
e59778bc71a0 updated generated files;
wenzelm
parents: 46563
diff changeset
   405
\ \ negate{\isaliteral{2C}{\isacharcomma}}\ abs{\isaliteral{2C}{\isacharcomma}}\ divMod{\isaliteral{2C}{\isacharcomma}}\ String{\isaliteral{2C}{\isacharcomma}}\ Bool{\isaliteral{28}{\isacharparenleft}}True{\isaliteral{2C}{\isacharcomma}}\ False{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ Maybe{\isaliteral{28}{\isacharparenleft}}Nothing{\isaliteral{2C}{\isacharcomma}}\ Just{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
e59778bc71a0 updated generated files;
wenzelm
parents: 46563
diff changeset
   406
import\ qualified\ Prelude{\isaliteral{3B}{\isacharsemicolon}}\isanewline
e59778bc71a0 updated generated files;
wenzelm
parents: 46563
diff changeset
   407
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   408
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
   409
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   410
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
   411
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
   412
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
   413
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   414
class\ Semigroup\ a\ where\ {\isaliteral{7B}{\isacharbraceleft}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   415
\ \ 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
   416
{\isaliteral{7D}{\isacharbraceright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   417
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   418
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
   419
\ \ neutral\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ a{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   420
{\isaliteral{7D}{\isacharbraceright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   421
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   422
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
   423
pow\ Zero{\isaliteral{5F}{\isacharunderscore}}nat\ a\ {\isaliteral{3D}{\isacharequal}}\ neutral{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   424
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
   425
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   426
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
   427
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
   428
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
   429
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   430
instance\ Semigroup\ Nat\ where\ {\isaliteral{7B}{\isacharbraceleft}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   431
\ \ mult\ {\isaliteral{3D}{\isacharequal}}\ mult{\isaliteral{5F}{\isacharunderscore}}nat{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   432
{\isaliteral{7D}{\isacharbraceright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   433
\isanewline
48501
e59778bc71a0 updated generated files;
wenzelm
parents: 46563
diff changeset
   434
neutral{\isaliteral{5F}{\isacharunderscore}}nat\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ Nat{\isaliteral{3B}{\isacharsemicolon}}\isanewline
e59778bc71a0 updated generated files;
wenzelm
parents: 46563
diff changeset
   435
neutral{\isaliteral{5F}{\isacharunderscore}}nat\ {\isaliteral{3D}{\isacharequal}}\ Suc\ Zero{\isaliteral{5F}{\isacharunderscore}}nat{\isaliteral{3B}{\isacharsemicolon}}\isanewline
e59778bc71a0 updated generated files;
wenzelm
parents: 46563
diff changeset
   436
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   437
instance\ Monoid\ Nat\ where\ {\isaliteral{7B}{\isacharbraceleft}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   438
\ \ neutral\ {\isaliteral{3D}{\isacharequal}}\ neutral{\isaliteral{5F}{\isacharunderscore}}nat{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   439
{\isaliteral{7D}{\isacharbraceright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   440
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   441
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
   442
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
   443
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   444
{\isaliteral{7D}{\isacharbraceright}}\isanewline%
38437
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
\endisatagquotetypewriter
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   449
{\isafoldquotetypewriter}%
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   450
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   451
\isadelimquotetypewriter
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   452
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   453
\endisadelimquotetypewriter
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   454
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   455
\begin{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   456
\noindent This is a convenient place to show how explicit dictionary
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   457
  construction manifests in generated code -- the same example in
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   458
  \isa{SML}:%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   459
\end{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   460
\isamarkuptrue%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   461
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   462
\isadelimquotetypewriter
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   463
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   464
\endisadelimquotetypewriter
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   465
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   466
\isatagquotetypewriter
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   467
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   468
\begin{isamarkuptext}%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   469
structure\ Example\ {\isaliteral{3A}{\isacharcolon}}\ sig\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   470
\ \ 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
   471
\ \ 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
   472
\ \ type\ {\isaliteral{27}{\isacharprime}}a\ semigroup\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   473
\ \ 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
   474
\ \ type\ {\isaliteral{27}{\isacharprime}}a\ monoid\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   475
\ \ 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
   476
\ \ 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
   477
\ \ 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
   478
\ \ 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
48501
e59778bc71a0 updated generated files;
wenzelm
parents: 46563
diff changeset
   479
\ \ val\ semigroup{\isaliteral{5F}{\isacharunderscore}}nat\ {\isaliteral{3A}{\isacharcolon}}\ nat\ semigroup\isanewline
44548
51f167047edf updated generated files;
wenzelm
parents: 42096
diff changeset
   480
\ \ val\ neutral{\isaliteral{5F}{\isacharunderscore}}nat\ {\isaliteral{3A}{\isacharcolon}}\ nat\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   481
\ \ val\ monoid{\isaliteral{5F}{\isacharunderscore}}nat\ {\isaliteral{3A}{\isacharcolon}}\ nat\ monoid\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   482
\ \ val\ bexp\ {\isaliteral{3A}{\isacharcolon}}\ nat\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ nat\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   483
end\ {\isaliteral{3D}{\isacharequal}}\ struct\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39210
diff changeset
   484
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   485
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
   486
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   487
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
   488
\ \ {\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
   489
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   490
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
   491
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
   492
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   493
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
   494
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
   495
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
   496
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   497
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
   498
\ \ {\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
   499
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   500
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
   501
\ \ {\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
   502
\isanewline
48501
e59778bc71a0 updated generated files;
wenzelm
parents: 46563
diff changeset
   503
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
   504
\isanewline
48501
e59778bc71a0 updated generated files;
wenzelm
parents: 46563
diff changeset
   505
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
   506
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   507
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
   508
\ \ {\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
   509
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   510
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
   511
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39745
diff changeset
   512
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
   513
\end{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   514
\isamarkuptrue%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   515
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   516
\endisatagquotetypewriter
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   517
{\isafoldquotetypewriter}%
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   518
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   519
\isadelimquotetypewriter
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   520
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   521
\endisadelimquotetypewriter
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   522
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   523
\begin{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   524
\noindent Note the parameters with trailing underscore (\verb|A_|), which are the dictionary parameters.%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   525
\end{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   526
\isamarkuptrue%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   527
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   528
\isamarkupsubsection{How to continue from here%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   529
}
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   530
\isamarkuptrue%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   531
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   532
\begin{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   533
What you have seen so far should be already enough in a lot of
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   534
  cases.  If you are content with this, you can quit reading here.
28447
haftmann
parents:
diff changeset
   535
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   536
  Anyway, to understand situations where problems occur or to increase
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   537
  the scope of code generation beyond default, it is necessary to gain
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   538
  some understanding how the code generator actually works:
28447
haftmann
parents:
diff changeset
   539
haftmann
parents:
diff changeset
   540
  \begin{itemize}
haftmann
parents:
diff changeset
   541
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   542
    \item The foundations of the code generator are described in
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   543
      \secref{sec:foundations}.
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   544
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   545
    \item In particular \secref{sec:utterly_wrong} gives hints how to
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   546
      debug situations where code generation does not succeed as
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   547
      expected.
28447
haftmann
parents:
diff changeset
   548
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   549
    \item The scope and quality of generated code can be increased
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   550
      dramatically by applying refinement techniques, which are
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   551
      introduced in \secref{sec:refinement}.
28447
haftmann
parents:
diff changeset
   552
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   553
    \item Inductive predicates can be turned executable using an
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   554
      extension of the code generator \secref{sec:inductive}.
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   555
40755
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   556
    \item If you want to utilize code generation to obtain fast
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   557
      evaluators e.g.~for decision procedures, have a look at
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   558
      \secref{sec:evaluation}.
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   559
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   560
    \item You may want to skim over the more technical sections
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   561
      \secref{sec:adaptation} and \secref{sec:further}.
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   562
42096
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   563
    \item The target language Scala \cite{scala-overview-tech-report}
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   564
      comes with some specialities discussed in \secref{sec:scala}.
9f6652122963 added subsection on Scala specialities
haftmann
parents: 40755
diff changeset
   565
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   566
    \item For exhaustive syntax diagrams etc. you should visit the
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   567
      Isabelle/Isar Reference Manual \cite{isabelle-isar-ref}.
28447
haftmann
parents:
diff changeset
   568
haftmann
parents:
diff changeset
   569
  \end{itemize}
haftmann
parents:
diff changeset
   570
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   571
  \bigskip
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   572
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   573
  \begin{center}\fbox{\fbox{\begin{minipage}{8cm}
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   574
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   575
    \begin{center}\textit{Happy proving, happy hacking!}\end{center}
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38405
diff changeset
   576
45211
3dd426ae6bea removed some remaining artefacts of ancient SML code generator
haftmann
parents: 44548
diff changeset
   577
  \end{minipage}}}\end{center}%
28447
haftmann
parents:
diff changeset
   578
\end{isamarkuptext}%
haftmann
parents:
diff changeset
   579
\isamarkuptrue%
haftmann
parents:
diff changeset
   580
%
haftmann
parents:
diff changeset
   581
\isadelimtheory
haftmann
parents:
diff changeset
   582
%
haftmann
parents:
diff changeset
   583
\endisadelimtheory
haftmann
parents:
diff changeset
   584
%
haftmann
parents:
diff changeset
   585
\isatagtheory
haftmann
parents:
diff changeset
   586
\isacommand{end}\isamarkupfalse%
haftmann
parents:
diff changeset
   587
%
haftmann
parents:
diff changeset
   588
\endisatagtheory
haftmann
parents:
diff changeset
   589
{\isafoldtheory}%
haftmann
parents:
diff changeset
   590
%
haftmann
parents:
diff changeset
   591
\isadelimtheory
haftmann
parents:
diff changeset
   592
%
haftmann
parents:
diff changeset
   593
\endisadelimtheory
haftmann
parents:
diff changeset
   594
\isanewline
46523
7ca897381b26 update of generated documents
haftmann
parents: 45211
diff changeset
   595
\isanewline
28447
haftmann
parents:
diff changeset
   596
\end{isabellebody}%
haftmann
parents:
diff changeset
   597
%%% Local Variables:
haftmann
parents:
diff changeset
   598
%%% mode: latex
haftmann
parents:
diff changeset
   599
%%% TeX-master: "root"
haftmann
parents:
diff changeset
   600
%%% End: