doc-src/Codegen/Thy/document/Refinement.tex
author wenzelm
Tue, 21 Feb 2012 13:10:13 +0100
changeset 46563 0ad69b30b39c
parent 46523 7ca897381b26
child 48501 e59778bc71a0
permissions -rw-r--r--
updated generated files (cf. 8d51b375e926);
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
38406
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
     1
%
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
     2
\begin{isabellebody}%
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
     3
\def\isabellecontext{Refinement}%
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
     4
%
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
     5
\isadelimtheory
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
     6
%
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
     7
\endisadelimtheory
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
     8
%
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
     9
\isatagtheory
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
    10
\isacommand{theory}\isamarkupfalse%
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
    11
\ Refinement\isanewline
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
    12
\isakeyword{imports}\ Setup\isanewline
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
    13
\isakeyword{begin}%
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
    14
\endisatagtheory
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
    15
{\isafoldtheory}%
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
    16
%
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
    17
\isadelimtheory
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
    18
%
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
    19
\endisadelimtheory
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
    20
%
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
    21
\isamarkupsection{Program and datatype refinement \label{sec:refinement}%
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
    22
}
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
    23
\isamarkuptrue%
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
    24
%
38451
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    25
\begin{isamarkuptext}%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    26
Code generation by shallow embedding (cf.~\secref{sec:principle})
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    27
  allows to choose code equations and datatype constructors freely,
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    28
  given that some very basic syntactic properties are met; this
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    29
  flexibility opens up mechanisms for refinement which allow to extend
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    30
  the scope and quality of generated code dramatically.%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    31
\end{isamarkuptext}%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    32
\isamarkuptrue%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    33
%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    34
\isamarkupsubsection{Program refinement%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    35
}
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    36
\isamarkuptrue%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    37
%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    38
\begin{isamarkuptext}%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    39
Program refinement works by choosing appropriate code equations
40352
8fd36f8a5cb7 more precise text
haftmann
parents: 39745
diff changeset
    40
  explicitly (cf.~\secref{sec:equations}); as example, we use Fibonacci
38451
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    41
  numbers:%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    42
\end{isamarkuptext}%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    43
\isamarkuptrue%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    44
%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    45
\isadelimquote
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    46
%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    47
\endisadelimquote
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    48
%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    49
\isatagquote
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    50
\isacommand{fun}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
    51
\ fib\ {\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: 40352
diff changeset
    52
\ \ \ \ {\isaliteral{22}{\isachardoublequoteopen}}fib\ {\isadigit{0}}\ {\isaliteral{3D}{\isacharequal}}\ {\isadigit{0}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
    53
\ \ {\isaliteral{7C}{\isacharbar}}\ {\isaliteral{22}{\isachardoublequoteopen}}fib\ {\isaliteral{28}{\isacharparenleft}}Suc\ {\isadigit{0}}{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ Suc\ {\isadigit{0}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
    54
\ \ {\isaliteral{7C}{\isacharbar}}\ {\isaliteral{22}{\isachardoublequoteopen}}fib\ {\isaliteral{28}{\isacharparenleft}}Suc\ {\isaliteral{28}{\isacharparenleft}}Suc\ n{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ fib\ n\ {\isaliteral{2B}{\isacharplus}}\ fib\ {\isaliteral{28}{\isacharparenleft}}Suc\ n{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequoteclose}}%
38451
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    55
\endisatagquote
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    56
{\isafoldquote}%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    57
%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    58
\isadelimquote
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    59
%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    60
\endisadelimquote
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    61
%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    62
\begin{isamarkuptext}%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    63
\noindent The runtime of the corresponding code grows exponential due
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    64
  to two recursive calls:%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    65
\end{isamarkuptext}%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    66
\isamarkuptrue%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    67
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
    68
\isadelimquotetypewriter
38451
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    69
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
    70
\endisadelimquotetypewriter
38451
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    71
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
    72
\isatagquotetypewriter
38451
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    73
%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    74
\begin{isamarkuptext}%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
    75
fib\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ Nat\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ Nat{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
    76
fib\ Zero{\isaliteral{5F}{\isacharunderscore}}nat\ {\isaliteral{3D}{\isacharequal}}\ Zero{\isaliteral{5F}{\isacharunderscore}}nat{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
    77
fib\ {\isaliteral{28}{\isacharparenleft}}Suc\ Zero{\isaliteral{5F}{\isacharunderscore}}nat{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ Suc\ Zero{\isaliteral{5F}{\isacharunderscore}}nat{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
    78
fib\ {\isaliteral{28}{\isacharparenleft}}Suc\ {\isaliteral{28}{\isacharparenleft}}Suc\ n{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ plus{\isaliteral{5F}{\isacharunderscore}}nat\ {\isaliteral{28}{\isacharparenleft}}fib\ n{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{28}{\isacharparenleft}}fib\ {\isaliteral{28}{\isacharparenleft}}Suc\ n{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline%
38451
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    79
\end{isamarkuptext}%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    80
\isamarkuptrue%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    81
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
    82
\endisatagquotetypewriter
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
    83
{\isafoldquotetypewriter}%
38451
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    84
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
    85
\isadelimquotetypewriter
38451
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    86
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
    87
\endisadelimquotetypewriter
38451
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    88
%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    89
\begin{isamarkuptext}%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    90
\noindent A more efficient implementation would use dynamic
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    91
  programming, e.g.~sharing of common intermediate results between
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    92
  recursive calls.  This idea is expressed by an auxiliary operation
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    93
  which computes a Fibonacci number and its successor simultaneously:%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    94
\end{isamarkuptext}%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    95
\isamarkuptrue%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    96
%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    97
\isadelimquote
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    98
%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
    99
\endisadelimquote
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   100
%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   101
\isatagquote
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   102
\isacommand{definition}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   103
\ fib{\isaliteral{5F}{\isacharunderscore}}step\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}nat\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ nat\ {\isaliteral{5C3C74696D65733E}{\isasymtimes}}\ nat{\isaliteral{22}{\isachardoublequoteclose}}\ \isakeyword{where}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   104
\ \ {\isaliteral{22}{\isachardoublequoteopen}}fib{\isaliteral{5F}{\isacharunderscore}}step\ n\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{28}{\isacharparenleft}}fib\ {\isaliteral{28}{\isacharparenleft}}Suc\ n{\isaliteral{29}{\isacharparenright}}{\isaliteral{2C}{\isacharcomma}}\ fib\ n{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequoteclose}}%
38451
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   105
\endisatagquote
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   106
{\isafoldquote}%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   107
%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   108
\isadelimquote
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   109
%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   110
\endisadelimquote
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   111
%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   112
\begin{isamarkuptext}%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   113
\noindent This operation can be implemented by recursion using
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   114
  dynamic programming:%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   115
\end{isamarkuptext}%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   116
\isamarkuptrue%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   117
%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   118
\isadelimquote
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   119
%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   120
\endisadelimquote
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   121
%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   122
\isatagquote
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   123
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   124
\ {\isaliteral{5B}{\isacharbrackleft}}code{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{3A}{\isacharcolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   125
\ \ {\isaliteral{22}{\isachardoublequoteopen}}fib{\isaliteral{5F}{\isacharunderscore}}step\ {\isadigit{0}}\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{28}{\isacharparenleft}}Suc\ {\isadigit{0}}{\isaliteral{2C}{\isacharcomma}}\ {\isadigit{0}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   126
\ \ {\isaliteral{22}{\isachardoublequoteopen}}fib{\isaliteral{5F}{\isacharunderscore}}step\ {\isaliteral{28}{\isacharparenleft}}Suc\ n{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{28}{\isacharparenleft}}let\ {\isaliteral{28}{\isacharparenleft}}m{\isaliteral{2C}{\isacharcomma}}\ q{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ fib{\isaliteral{5F}{\isacharunderscore}}step\ n\ in\ {\isaliteral{28}{\isacharparenleft}}m\ {\isaliteral{2B}{\isacharplus}}\ q{\isaliteral{2C}{\isacharcomma}}\ m{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
38451
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   127
\ \ \isacommand{by}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   128
\ {\isaliteral{28}{\isacharparenleft}}simp{\isaliteral{5F}{\isacharunderscore}}all\ add{\isaliteral{3A}{\isacharcolon}}\ fib{\isaliteral{5F}{\isacharunderscore}}step{\isaliteral{5F}{\isacharunderscore}}def{\isaliteral{29}{\isacharparenright}}%
38451
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   129
\endisatagquote
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   130
{\isafoldquote}%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   131
%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   132
\isadelimquote
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   133
%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   134
\endisadelimquote
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   135
%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   136
\begin{isamarkuptext}%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   137
\noindent What remains is to implement \isa{fib} by \isa{fib{\isaliteral{5F}{\isacharunderscore}}step} as follows:%
38451
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   138
\end{isamarkuptext}%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   139
\isamarkuptrue%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   140
%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   141
\isadelimquote
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   142
%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   143
\endisadelimquote
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   144
%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   145
\isatagquote
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   146
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   147
\ {\isaliteral{5B}{\isacharbrackleft}}code{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{3A}{\isacharcolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   148
\ \ {\isaliteral{22}{\isachardoublequoteopen}}fib\ {\isadigit{0}}\ {\isaliteral{3D}{\isacharequal}}\ {\isadigit{0}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   149
\ \ {\isaliteral{22}{\isachardoublequoteopen}}fib\ {\isaliteral{28}{\isacharparenleft}}Suc\ n{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ fst\ {\isaliteral{28}{\isacharparenleft}}fib{\isaliteral{5F}{\isacharunderscore}}step\ n{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
38451
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   150
\ \ \isacommand{by}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   151
\ {\isaliteral{28}{\isacharparenleft}}simp{\isaliteral{5F}{\isacharunderscore}}all\ add{\isaliteral{3A}{\isacharcolon}}\ fib{\isaliteral{5F}{\isacharunderscore}}step{\isaliteral{5F}{\isacharunderscore}}def{\isaliteral{29}{\isacharparenright}}%
38451
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   152
\endisatagquote
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   153
{\isafoldquote}%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   154
%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   155
\isadelimquote
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   156
%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   157
\endisadelimquote
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   158
%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   159
\begin{isamarkuptext}%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   160
\noindent The resulting code shows only linear growth of runtime:%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   161
\end{isamarkuptext}%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   162
\isamarkuptrue%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   163
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   164
\isadelimquotetypewriter
38451
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   165
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   166
\endisadelimquotetypewriter
38451
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   167
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   168
\isatagquotetypewriter
38451
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   169
%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   170
\begin{isamarkuptext}%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   171
fib{\isaliteral{5F}{\isacharunderscore}}step\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ Nat\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{28}{\isacharparenleft}}Nat{\isaliteral{2C}{\isacharcomma}}\ Nat{\isaliteral{29}{\isacharparenright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   172
fib{\isaliteral{5F}{\isacharunderscore}}step\ {\isaliteral{28}{\isacharparenleft}}Suc\ n{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ let\ {\isaliteral{7B}{\isacharbraceleft}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   173
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\isaliteral{28}{\isacharparenleft}}m{\isaliteral{2C}{\isacharcomma}}\ q{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ fib{\isaliteral{5F}{\isacharunderscore}}step\ n{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   174
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\isaliteral{7D}{\isacharbraceright}}\ in\ {\isaliteral{28}{\isacharparenleft}}plus{\isaliteral{5F}{\isacharunderscore}}nat\ m\ q{\isaliteral{2C}{\isacharcomma}}\ m{\isaliteral{29}{\isacharparenright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   175
fib{\isaliteral{5F}{\isacharunderscore}}step\ Zero{\isaliteral{5F}{\isacharunderscore}}nat\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{28}{\isacharparenleft}}Suc\ Zero{\isaliteral{5F}{\isacharunderscore}}nat{\isaliteral{2C}{\isacharcomma}}\ Zero{\isaliteral{5F}{\isacharunderscore}}nat{\isaliteral{29}{\isacharparenright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39599
diff changeset
   176
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   177
fib\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ Nat\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ Nat{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   178
fib\ {\isaliteral{28}{\isacharparenleft}}Suc\ n{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ fst\ {\isaliteral{28}{\isacharparenleft}}fib{\isaliteral{5F}{\isacharunderscore}}step\ n{\isaliteral{29}{\isacharparenright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   179
fib\ Zero{\isaliteral{5F}{\isacharunderscore}}nat\ {\isaliteral{3D}{\isacharequal}}\ Zero{\isaliteral{5F}{\isacharunderscore}}nat{\isaliteral{3B}{\isacharsemicolon}}\isanewline%
38451
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   180
\end{isamarkuptext}%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   181
\isamarkuptrue%
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   182
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   183
\endisatagquotetypewriter
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   184
{\isafoldquotetypewriter}%
38451
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   185
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   186
\isadelimquotetypewriter
38451
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   187
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   188
\endisadelimquotetypewriter
38451
4c065e97ecee added section on program refinement
haftmann
parents: 38437
diff changeset
   189
%
38459
cfe74b0eecb1 reworked section on simple datatype refinement
haftmann
parents: 38451
diff changeset
   190
\isamarkupsubsection{Datatype refinement%
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   191
}
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   192
\isamarkuptrue%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   193
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   194
\begin{isamarkuptext}%
38459
cfe74b0eecb1 reworked section on simple datatype refinement
haftmann
parents: 38451
diff changeset
   195
Selecting specific code equations \emph{and} datatype constructors
cfe74b0eecb1 reworked section on simple datatype refinement
haftmann
parents: 38451
diff changeset
   196
  leads to datatype refinement.  As an example, we will develop an
cfe74b0eecb1 reworked section on simple datatype refinement
haftmann
parents: 38451
diff changeset
   197
  alternative representation of the queue example given in
cfe74b0eecb1 reworked section on simple datatype refinement
haftmann
parents: 38451
diff changeset
   198
  \secref{sec:queue_example}.  The amortised representation is
cfe74b0eecb1 reworked section on simple datatype refinement
haftmann
parents: 38451
diff changeset
   199
  convenient for generating code but exposes its \qt{implementation}
cfe74b0eecb1 reworked section on simple datatype refinement
haftmann
parents: 38451
diff changeset
   200
  details, which may be cumbersome when proving theorems about it.
cfe74b0eecb1 reworked section on simple datatype refinement
haftmann
parents: 38451
diff changeset
   201
  Therefore, here is a simple, straightforward representation of
cfe74b0eecb1 reworked section on simple datatype refinement
haftmann
parents: 38451
diff changeset
   202
  queues:%
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   203
\end{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   204
\isamarkuptrue%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   205
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   206
\isadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   207
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   208
\endisadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   209
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   210
\isatagquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   211
\isacommand{datatype}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   212
\ {\isaliteral{27}{\isacharprime}}a\ queue\ {\isaliteral{3D}{\isacharequal}}\ Queue\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{27}{\isacharprime}}a\ list{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   213
\isanewline
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   214
\isacommand{definition}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   215
\ 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: 40352
diff changeset
   216
\ \ {\isaliteral{22}{\isachardoublequoteopen}}empty\ {\isaliteral{3D}{\isacharequal}}\ Queue\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   217
\isanewline
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   218
\isacommand{primrec}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   219
\ 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: 40352
diff changeset
   220
\ \ {\isaliteral{22}{\isachardoublequoteopen}}enqueue\ x\ {\isaliteral{28}{\isacharparenleft}}Queue\ xs{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ Queue\ {\isaliteral{28}{\isacharparenleft}}xs\ {\isaliteral{40}{\isacharat}}\ {\isaliteral{5B}{\isacharbrackleft}}x{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   221
\isanewline
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   222
\isacommand{fun}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   223
\ 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: 40352
diff changeset
   224
\ \ \ \ {\isaliteral{22}{\isachardoublequoteopen}}dequeue\ {\isaliteral{28}{\isacharparenleft}}Queue\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{28}{\isacharparenleft}}None{\isaliteral{2C}{\isacharcomma}}\ Queue\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   225
\ \ {\isaliteral{7C}{\isacharbar}}\ {\isaliteral{22}{\isachardoublequoteopen}}dequeue\ {\isaliteral{28}{\isacharparenleft}}Queue\ {\isaliteral{28}{\isacharparenleft}}x\ {\isaliteral{23}{\isacharhash}}\ xs{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{28}{\isacharparenleft}}Some\ x{\isaliteral{2C}{\isacharcomma}}\ Queue\ xs{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequoteclose}}%
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   226
\endisatagquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   227
{\isafoldquote}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   228
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   229
\isadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   230
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   231
\endisadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   232
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   233
\begin{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   234
\noindent This we can use directly for proving;  for executing,
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   235
  we provide an alternative characterisation:%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   236
\end{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   237
\isamarkuptrue%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   238
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   239
\isadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   240
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   241
\endisadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   242
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   243
\isatagquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   244
\isacommand{definition}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   245
\ AQueue\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{27}{\isacharprime}}a\ list\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{27}{\isacharprime}}a\ list\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{27}{\isacharprime}}a\ queue{\isaliteral{22}{\isachardoublequoteclose}}\ \isakeyword{where}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   246
\ \ {\isaliteral{22}{\isachardoublequoteopen}}AQueue\ xs\ ys\ {\isaliteral{3D}{\isacharequal}}\ Queue\ {\isaliteral{28}{\isacharparenleft}}ys\ {\isaliteral{40}{\isacharat}}\ rev\ xs{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   247
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   248
\isacommand{code{\isaliteral{5F}{\isacharunderscore}}datatype}\isamarkupfalse%
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   249
\ AQueue%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   250
\endisatagquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   251
{\isafoldquote}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   252
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   253
\isadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   254
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   255
\endisadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   256
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   257
\begin{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   258
\noindent Here we define a \qt{constructor} \isa{AQueue} which
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   259
  is defined in terms of \isa{Queue} and interprets its arguments
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   260
  according to what the \emph{content} of an amortised queue is supposed
38459
cfe74b0eecb1 reworked section on simple datatype refinement
haftmann
parents: 38451
diff changeset
   261
  to be.
cfe74b0eecb1 reworked section on simple datatype refinement
haftmann
parents: 38451
diff changeset
   262
cfe74b0eecb1 reworked section on simple datatype refinement
haftmann
parents: 38451
diff changeset
   263
  The prerequisite for datatype constructors is only syntactical: a
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   264
  constructor must be of type \isa{{\isaliteral{5C3C7461753E}{\isasymtau}}\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{5C3C6B617070613E}{\isasymkappa}}\ {\isaliteral{5C3C616C7068613E}{\isasymalpha}}\isaliteral{5C3C5E697375623E}{}\isactrlisub {\isadigit{1}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}\ {\isaliteral{5C3C616C7068613E}{\isasymalpha}}\isaliteral{5C3C5E697375623E}{}\isactrlisub n} where \isa{{\isaliteral{7B}{\isacharbraceleft}}{\isaliteral{5C3C616C7068613E}{\isasymalpha}}\isaliteral{5C3C5E697375623E}{}\isactrlisub {\isadigit{1}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C616C7068613E}{\isasymalpha}}\isaliteral{5C3C5E697375623E}{}\isactrlisub n{\isaliteral{7D}{\isacharbraceright}}} is exactly the set of \emph{all} type variables in
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   265
  \isa{{\isaliteral{5C3C7461753E}{\isasymtau}}}; then \isa{{\isaliteral{5C3C6B617070613E}{\isasymkappa}}} is its corresponding datatype.  The
38459
cfe74b0eecb1 reworked section on simple datatype refinement
haftmann
parents: 38451
diff changeset
   266
  HOL datatype package by default registers any new datatype with its
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   267
  constructors, but this may be changed using \indexdef{}{command}{code\_datatype}\hypertarget{command.code-datatype}{\hyperlink{command.code-datatype}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}datatype}}}}}; the currently chosen constructors can be inspected
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   268
  using the \hyperlink{command.print-codesetup}{\mbox{\isa{\isacommand{print{\isaliteral{5F}{\isacharunderscore}}codesetup}}}} command.
38459
cfe74b0eecb1 reworked section on simple datatype refinement
haftmann
parents: 38451
diff changeset
   269
cfe74b0eecb1 reworked section on simple datatype refinement
haftmann
parents: 38451
diff changeset
   270
  Equipped with this, we are able to prove the following equations
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   271
  for our primitive queue operations which \qt{implement} the simple
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   272
  queues in an amortised fashion:%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   273
\end{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   274
\isamarkuptrue%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   275
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   276
\isadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   277
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   278
\endisadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   279
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   280
\isatagquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   281
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   282
\ empty{\isaliteral{5F}{\isacharunderscore}}AQueue\ {\isaliteral{5B}{\isacharbrackleft}}code{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{3A}{\isacharcolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   283
\ \ {\isaliteral{22}{\isachardoublequoteopen}}empty\ {\isaliteral{3D}{\isacharequal}}\ AQueue\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
40755
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   284
\ \ \isacommand{by}\isamarkupfalse%
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   285
\ {\isaliteral{28}{\isacharparenleft}}simp\ add{\isaliteral{3A}{\isacharcolon}}\ AQueue{\isaliteral{5F}{\isacharunderscore}}def\ empty{\isaliteral{5F}{\isacharunderscore}}def{\isaliteral{29}{\isacharparenright}}\isanewline
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   286
\isanewline
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   287
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   288
\ enqueue{\isaliteral{5F}{\isacharunderscore}}AQueue\ {\isaliteral{5B}{\isacharbrackleft}}code{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{3A}{\isacharcolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   289
\ \ {\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
40755
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   290
\ \ \isacommand{by}\isamarkupfalse%
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   291
\ {\isaliteral{28}{\isacharparenleft}}simp\ add{\isaliteral{3A}{\isacharcolon}}\ AQueue{\isaliteral{5F}{\isacharunderscore}}def{\isaliteral{29}{\isacharparenright}}\isanewline
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   292
\isanewline
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   293
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   294
\ dequeue{\isaliteral{5F}{\isacharunderscore}}AQueue\ {\isaliteral{5B}{\isacharbrackleft}}code{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{3A}{\isacharcolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   295
\ \ {\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: 40352
diff changeset
   296
\ \ \ \ {\isaliteral{28}{\isacharparenleft}}if\ xs\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}\ then\ {\isaliteral{28}{\isacharparenleft}}None{\isaliteral{2C}{\isacharcomma}}\ AQueue\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{29}{\isacharparenright}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   297
\ \ \ \ else\ dequeue\ {\isaliteral{28}{\isacharparenleft}}AQueue\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}\ {\isaliteral{28}{\isacharparenleft}}rev\ xs{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   298
\ \ {\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
40755
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   299
\ \ \isacommand{by}\isamarkupfalse%
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   300
\ {\isaliteral{28}{\isacharparenleft}}simp{\isaliteral{5F}{\isacharunderscore}}all\ add{\isaliteral{3A}{\isacharcolon}}\ AQueue{\isaliteral{5F}{\isacharunderscore}}def{\isaliteral{29}{\isacharparenright}}%
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   301
\endisatagquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   302
{\isafoldquote}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   303
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   304
\isadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   305
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   306
\endisadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   307
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   308
\begin{isamarkuptext}%
40755
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   309
\noindent It is good style, although no absolute requirement, to
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   310
  provide code equations for the original artefacts of the implemented
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   311
  type, if possible; in our case, these are the datatype constructor
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   312
  \isa{Queue} and the case combinator \isa{queue{\isaliteral{5F}{\isacharunderscore}}case}:%
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   313
\end{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   314
\isamarkuptrue%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   315
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   316
\isadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   317
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   318
\endisadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   319
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   320
\isatagquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   321
\isacommand{lemma}\isamarkupfalse%
40755
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   322
\ Queue{\isaliteral{5F}{\isacharunderscore}}AQueue\ {\isaliteral{5B}{\isacharbrackleft}}code{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{3A}{\isacharcolon}}\isanewline
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   323
\ \ {\isaliteral{22}{\isachardoublequoteopen}}Queue\ {\isaliteral{3D}{\isacharequal}}\ AQueue\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   324
\ \ \isacommand{by}\isamarkupfalse%
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   325
\ {\isaliteral{28}{\isacharparenleft}}simp\ add{\isaliteral{3A}{\isacharcolon}}\ AQueue{\isaliteral{5F}{\isacharunderscore}}def\ fun{\isaliteral{5F}{\isacharunderscore}}eq{\isaliteral{5F}{\isacharunderscore}}iff{\isaliteral{29}{\isacharparenright}}\isanewline
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   326
\isanewline
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   327
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   328
\ queue{\isaliteral{5F}{\isacharunderscore}}case{\isaliteral{5F}{\isacharunderscore}}AQueue\ {\isaliteral{5B}{\isacharbrackleft}}code{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{3A}{\isacharcolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   329
\ \ {\isaliteral{22}{\isachardoublequoteopen}}queue{\isaliteral{5F}{\isacharunderscore}}case\ f\ {\isaliteral{28}{\isacharparenleft}}AQueue\ xs\ ys{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ f\ {\isaliteral{28}{\isacharparenleft}}ys\ {\isaliteral{40}{\isacharat}}\ rev\ xs{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
40755
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   330
\ \ \isacommand{by}\isamarkupfalse%
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   331
\ {\isaliteral{28}{\isacharparenleft}}simp\ add{\isaliteral{3A}{\isacharcolon}}\ AQueue{\isaliteral{5F}{\isacharunderscore}}def{\isaliteral{29}{\isacharparenright}}%
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   332
\endisatagquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   333
{\isafoldquote}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   334
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   335
\isadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   336
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   337
\endisadelimquote
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   338
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   339
\begin{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   340
\noindent The resulting code looks as expected:%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   341
\end{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   342
\isamarkuptrue%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   343
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   344
\isadelimquotetypewriter
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   345
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   346
\endisadelimquotetypewriter
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   347
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   348
\isatagquotetypewriter
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   349
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   350
\begin{isamarkuptext}%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   351
structure\ Example\ {\isaliteral{3A}{\isacharcolon}}\ sig\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   352
\ \ 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: 40352
diff changeset
   353
\ \ 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: 40352
diff changeset
   354
\ \ 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: 40352
diff changeset
   355
\ \ val\ null\ {\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{27}{\isacharprime}}a\ list\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ bool\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   356
\ \ 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: 40352
diff changeset
   357
\ \ val\ empty\ {\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{27}{\isacharprime}}a\ queue\isanewline
40755
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   358
\ \ val\ queue\ {\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{27}{\isacharprime}}a\ list\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{27}{\isacharprime}}a\ queue\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   359
\ \ 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: 40352
diff changeset
   360
\ \ 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
40755
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   361
\ \ val\ queue{\isaliteral{5F}{\isacharunderscore}}case\ {\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{27}{\isacharprime}}a\ list\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{27}{\isacharprime}}b{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{27}{\isacharprime}}a\ queue\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{27}{\isacharprime}}b\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   362
end\ {\isaliteral{3D}{\isacharequal}}\ struct\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39599
diff changeset
   363
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   364
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: 39599
diff changeset
   365
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   366
fun\ fold\ f\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}\ {\isaliteral{3D}{\isacharequal}}\ id\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   367
\ \ {\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: 39599
diff changeset
   368
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   369
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: 39599
diff changeset
   370
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   371
fun\ null\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}\ {\isaliteral{3D}{\isacharequal}}\ true\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   372
\ \ {\isaliteral{7C}{\isacharbar}}\ null\ {\isaliteral{28}{\isacharparenleft}}x\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ xs{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ false{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39599
diff changeset
   373
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   374
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: 39599
diff changeset
   375
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   376
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: 39599
diff changeset
   377
\isanewline
40755
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   378
fun\ queue\ x\ {\isaliteral{3D}{\isacharequal}}\ AQueue\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{2C}{\isacharcomma}}\ x{\isaliteral{29}{\isacharparenright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   379
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   380
fun\ 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: 40352
diff changeset
   381
\ \ {\isaliteral{7C}{\isacharbar}}\ dequeue\ {\isaliteral{28}{\isacharparenleft}}AQueue\ {\isaliteral{28}{\isacharparenleft}}xs{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   382
\ \ \ \ {\isaliteral{28}{\isacharparenleft}}if\ null\ xs\ then\ {\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: 40352
diff changeset
   383
\ \ \ \ \ \ else\ dequeue\ {\isaliteral{28}{\isacharparenleft}}AQueue\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{2C}{\isacharcomma}}\ rev\ xs{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39599
diff changeset
   384
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   385
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: 39599
diff changeset
   386
\isanewline
40755
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   387
fun\ queue{\isaliteral{5F}{\isacharunderscore}}case\ f\ {\isaliteral{28}{\isacharparenleft}}AQueue\ {\isaliteral{28}{\isacharparenleft}}xs{\isaliteral{2C}{\isacharcomma}}\ ys{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ f\ {\isaliteral{28}{\isacharparenleft}}ys\ {\isaliteral{40}{\isacharat}}\ rev\ xs{\isaliteral{29}{\isacharparenright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
d73659e8ccdd updated generated documents
haftmann
parents: 40406
diff changeset
   388
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   389
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: 38406
diff changeset
   390
\end{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   391
\isamarkuptrue%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   392
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   393
\endisatagquotetypewriter
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   394
{\isafoldquotetypewriter}%
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   395
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   396
\isadelimquotetypewriter
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   397
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   398
\endisadelimquotetypewriter
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   399
%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   400
\begin{isamarkuptext}%
38459
cfe74b0eecb1 reworked section on simple datatype refinement
haftmann
parents: 38451
diff changeset
   401
The same techniques can also be applied to types which are not
cfe74b0eecb1 reworked section on simple datatype refinement
haftmann
parents: 38451
diff changeset
   402
  specified as datatypes, e.g.~type \isa{int} is originally specified
38511
abf95b39d65c use command_def more consciously
haftmann
parents: 38502
diff changeset
   403
  as quotient type by means of \indexdef{}{command}{typedef}\hypertarget{command.typedef}{\hyperlink{command.typedef}{\mbox{\isa{\isacommand{typedef}}}}}, but for code
38459
cfe74b0eecb1 reworked section on simple datatype refinement
haftmann
parents: 38451
diff changeset
   404
  generation constants allowing construction of binary numeral values
cfe74b0eecb1 reworked section on simple datatype refinement
haftmann
parents: 38451
diff changeset
   405
  are used as constructors for \isa{int}.
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   406
38459
cfe74b0eecb1 reworked section on simple datatype refinement
haftmann
parents: 38451
diff changeset
   407
  This approach however fails if the representation of a type demands
cfe74b0eecb1 reworked section on simple datatype refinement
haftmann
parents: 38451
diff changeset
   408
  invariants; this issue is discussed in the next section.%
cfe74b0eecb1 reworked section on simple datatype refinement
haftmann
parents: 38451
diff changeset
   409
\end{isamarkuptext}%
cfe74b0eecb1 reworked section on simple datatype refinement
haftmann
parents: 38451
diff changeset
   410
\isamarkuptrue%
cfe74b0eecb1 reworked section on simple datatype refinement
haftmann
parents: 38451
diff changeset
   411
%
39599
d9c247f7afa3 continued section abut evaluation
haftmann
parents: 39210
diff changeset
   412
\isamarkupsubsection{Datatype refinement involving invariants \label{sec:invariant}%
38459
cfe74b0eecb1 reworked section on simple datatype refinement
haftmann
parents: 38451
diff changeset
   413
}
cfe74b0eecb1 reworked section on simple datatype refinement
haftmann
parents: 38451
diff changeset
   414
\isamarkuptrue%
cfe74b0eecb1 reworked section on simple datatype refinement
haftmann
parents: 38451
diff changeset
   415
%
cfe74b0eecb1 reworked section on simple datatype refinement
haftmann
parents: 38451
diff changeset
   416
\begin{isamarkuptext}%
38502
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   417
Datatype representation involving invariants require a dedicated
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   418
  setup for the type and its primitive operations.  As a running
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   419
  example, we implement a type \isa{{\isaliteral{27}{\isacharprime}}a\ dlist} of list consisting
38502
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   420
  of distinct elements.
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   421
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   422
  The first step is to decide on which representation the abstract
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   423
  type (in our example \isa{{\isaliteral{27}{\isacharprime}}a\ dlist}) should be implemented.
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   424
  Here we choose \isa{{\isaliteral{27}{\isacharprime}}a\ list}.  Then a conversion from the concrete
38502
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   425
  type to the abstract type must be specified, here:%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   426
\end{isamarkuptext}%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   427
\isamarkuptrue%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   428
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   429
\isadelimquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   430
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   431
\endisadelimquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   432
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   433
\isatagquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   434
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   435
\begin{isamarkuptext}%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   436
\isa{Dlist\ {\isaliteral{5C3C436F6C6F6E3E}{\isasymColon}}\ {\isaliteral{27}{\isacharprime}}a\ list\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{27}{\isacharprime}}a\ dlist}%
38502
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   437
\end{isamarkuptext}%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   438
\isamarkuptrue%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   439
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   440
\endisatagquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   441
{\isafoldquote}%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   442
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   443
\isadelimquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   444
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   445
\endisadelimquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   446
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   447
\begin{isamarkuptext}%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   448
\noindent Next follows the specification of a suitable \emph{projection},
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   449
  i.e.~a conversion from abstract to concrete type:%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   450
\end{isamarkuptext}%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   451
\isamarkuptrue%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   452
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   453
\isadelimquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   454
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   455
\endisadelimquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   456
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   457
\isatagquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   458
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   459
\begin{isamarkuptext}%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   460
\isa{list{\isaliteral{5F}{\isacharunderscore}}of{\isaliteral{5F}{\isacharunderscore}}dlist\ {\isaliteral{5C3C436F6C6F6E3E}{\isasymColon}}\ {\isaliteral{27}{\isacharprime}}a\ dlist\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{27}{\isacharprime}}a\ list}%
38502
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   461
\end{isamarkuptext}%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   462
\isamarkuptrue%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   463
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   464
\endisatagquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   465
{\isafoldquote}%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   466
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   467
\isadelimquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   468
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   469
\endisadelimquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   470
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   471
\begin{isamarkuptext}%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   472
\noindent This projection must be specified such that the following
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   473
  \emph{abstract datatype certificate} can be proven:%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   474
\end{isamarkuptext}%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   475
\isamarkuptrue%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   476
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   477
\isadelimquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   478
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   479
\endisadelimquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   480
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   481
\isatagquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   482
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   483
\ {\isaliteral{5B}{\isacharbrackleft}}code\ abstype{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{3A}{\isacharcolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   484
\ \ {\isaliteral{22}{\isachardoublequoteopen}}Dlist\ {\isaliteral{28}{\isacharparenleft}}list{\isaliteral{5F}{\isacharunderscore}}of{\isaliteral{5F}{\isacharunderscore}}dlist\ dxs{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ dxs{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
38502
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   485
\ \ \isacommand{by}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   486
\ {\isaliteral{28}{\isacharparenleft}}fact\ Dlist{\isaliteral{5F}{\isacharunderscore}}list{\isaliteral{5F}{\isacharunderscore}}of{\isaliteral{5F}{\isacharunderscore}}dlist{\isaliteral{29}{\isacharparenright}}%
38502
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   487
\endisatagquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   488
{\isafoldquote}%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   489
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   490
\isadelimquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   491
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   492
\endisadelimquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   493
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   494
\begin{isamarkuptext}%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   495
\noindent Note that so far the invariant on representations
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   496
  (\isa{distinct\ {\isaliteral{5C3C436F6C6F6E3E}{\isasymColon}}\ {\isaliteral{27}{\isacharprime}}a\ list\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ bool}) has never been mentioned explicitly:
38502
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   497
  the invariant is only referred to implicitly: all values in
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   498
  set \isa{{\isaliteral{7B}{\isacharbraceleft}}xs{\isaliteral{2E}{\isachardot}}\ list{\isaliteral{5F}{\isacharunderscore}}of{\isaliteral{5F}{\isacharunderscore}}dlist\ {\isaliteral{28}{\isacharparenleft}}Dlist\ xs{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ xs{\isaliteral{7D}{\isacharbraceright}}} are invariant,
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   499
  and in our example this is exactly \isa{{\isaliteral{7B}{\isacharbraceleft}}xs{\isaliteral{2E}{\isachardot}}\ distinct\ xs{\isaliteral{7D}{\isacharbraceright}}}.
38502
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   500
  
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   501
  The primitive operations on \isa{{\isaliteral{27}{\isacharprime}}a\ dlist} are specified
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   502
  indirectly using the projection \isa{list{\isaliteral{5F}{\isacharunderscore}}of{\isaliteral{5F}{\isacharunderscore}}dlist}.  For
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   503
  the empty \isa{dlist}, \isa{Dlist{\isaliteral{2E}{\isachardot}}empty}, we finally want
38502
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   504
  the code equation%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   505
\end{isamarkuptext}%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   506
\isamarkuptrue%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   507
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   508
\isadelimquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   509
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   510
\endisadelimquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   511
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   512
\isatagquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   513
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   514
\begin{isamarkuptext}%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   515
\isa{Dlist{\isaliteral{2E}{\isachardot}}empty\ {\isaliteral{3D}{\isacharequal}}\ Dlist\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}}%
38502
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   516
\end{isamarkuptext}%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   517
\isamarkuptrue%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   518
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   519
\endisatagquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   520
{\isafoldquote}%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   521
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   522
\isadelimquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   523
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   524
\endisadelimquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   525
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   526
\begin{isamarkuptext}%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   527
\noindent This we have to prove indirectly as follows:%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   528
\end{isamarkuptext}%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   529
\isamarkuptrue%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   530
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   531
\isadelimquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   532
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   533
\endisadelimquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   534
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   535
\isatagquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   536
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   537
\ {\isaliteral{5B}{\isacharbrackleft}}code\ abstract{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{3A}{\isacharcolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   538
\ \ {\isaliteral{22}{\isachardoublequoteopen}}list{\isaliteral{5F}{\isacharunderscore}}of{\isaliteral{5F}{\isacharunderscore}}dlist\ Dlist{\isaliteral{2E}{\isachardot}}empty\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
38502
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   539
\ \ \isacommand{by}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   540
\ {\isaliteral{28}{\isacharparenleft}}fact\ list{\isaliteral{5F}{\isacharunderscore}}of{\isaliteral{5F}{\isacharunderscore}}dlist{\isaliteral{5F}{\isacharunderscore}}empty{\isaliteral{29}{\isacharparenright}}%
38502
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   541
\endisatagquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   542
{\isafoldquote}%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   543
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   544
\isadelimquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   545
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   546
\endisadelimquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   547
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   548
\begin{isamarkuptext}%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   549
\noindent This equation logically encodes both the desired code
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   550
  equation and that the expression \isa{Dlist} is applied to obeys
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   551
  the implicit invariant.  Equations for insertion and removal are
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   552
  similar:%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   553
\end{isamarkuptext}%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   554
\isamarkuptrue%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   555
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   556
\isadelimquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   557
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   558
\endisadelimquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   559
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   560
\isatagquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   561
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   562
\ {\isaliteral{5B}{\isacharbrackleft}}code\ abstract{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{3A}{\isacharcolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   563
\ \ {\isaliteral{22}{\isachardoublequoteopen}}list{\isaliteral{5F}{\isacharunderscore}}of{\isaliteral{5F}{\isacharunderscore}}dlist\ {\isaliteral{28}{\isacharparenleft}}Dlist{\isaliteral{2E}{\isachardot}}insert\ x\ dxs{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ List{\isaliteral{2E}{\isachardot}}insert\ x\ {\isaliteral{28}{\isacharparenleft}}list{\isaliteral{5F}{\isacharunderscore}}of{\isaliteral{5F}{\isacharunderscore}}dlist\ dxs{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
38502
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   564
\ \ \isacommand{by}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   565
\ {\isaliteral{28}{\isacharparenleft}}fact\ list{\isaliteral{5F}{\isacharunderscore}}of{\isaliteral{5F}{\isacharunderscore}}dlist{\isaliteral{5F}{\isacharunderscore}}insert{\isaliteral{29}{\isacharparenright}}\isanewline
38502
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   566
\isanewline
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   567
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   568
\ {\isaliteral{5B}{\isacharbrackleft}}code\ abstract{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{3A}{\isacharcolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   569
\ \ {\isaliteral{22}{\isachardoublequoteopen}}list{\isaliteral{5F}{\isacharunderscore}}of{\isaliteral{5F}{\isacharunderscore}}dlist\ {\isaliteral{28}{\isacharparenleft}}Dlist{\isaliteral{2E}{\isachardot}}remove\ x\ dxs{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ remove{\isadigit{1}}\ x\ {\isaliteral{28}{\isacharparenleft}}list{\isaliteral{5F}{\isacharunderscore}}of{\isaliteral{5F}{\isacharunderscore}}dlist\ dxs{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
38502
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   570
\ \ \isacommand{by}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   571
\ {\isaliteral{28}{\isacharparenleft}}fact\ list{\isaliteral{5F}{\isacharunderscore}}of{\isaliteral{5F}{\isacharunderscore}}dlist{\isaliteral{5F}{\isacharunderscore}}remove{\isaliteral{29}{\isacharparenright}}%
38502
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   572
\endisatagquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   573
{\isafoldquote}%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   574
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   575
\isadelimquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   576
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   577
\endisadelimquote
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   578
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   579
\begin{isamarkuptext}%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   580
\noindent Then the corresponding code is as follows:%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   581
\end{isamarkuptext}%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   582
\isamarkuptrue%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   583
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   584
\isadelimquotetypewriter
38502
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   585
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   586
\endisadelimquotetypewriter
38502
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   587
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   588
\isatagquotetypewriter
38502
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   589
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   590
\begin{isamarkuptext}%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   591
module\ Example\ where\ {\isaliteral{7B}{\isacharbraceleft}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39599
diff changeset
   592
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   593
newtype\ Dlist\ a\ {\isaliteral{3D}{\isacharequal}}\ Dlist\ {\isaliteral{5B}{\isacharbrackleft}}a{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39599
diff changeset
   594
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   595
empty\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ forall\ a{\isaliteral{2E}{\isachardot}}\ Dlist\ a{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   596
empty\ {\isaliteral{3D}{\isacharequal}}\ Dlist\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39599
diff changeset
   597
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   598
member\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ forall\ a{\isaliteral{2E}{\isachardot}}\ {\isaliteral{28}{\isacharparenleft}}Eq\ a{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{5B}{\isacharbrackleft}}a{\isaliteral{5D}{\isacharbrackright}}\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ a\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ Bool{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   599
member\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}\ y\ {\isaliteral{3D}{\isacharequal}}\ False{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   600
member\ {\isaliteral{28}{\isacharparenleft}}x\ {\isaliteral{3A}{\isacharcolon}}\ xs{\isaliteral{29}{\isacharparenright}}\ y\ {\isaliteral{3D}{\isacharequal}}\ x\ {\isaliteral{3D}{\isacharequal}}{\isaliteral{3D}{\isacharequal}}\ y\ {\isaliteral{7C}{\isacharbar}}{\isaliteral{7C}{\isacharbar}}\ member\ xs\ y{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39599
diff changeset
   601
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   602
insert\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ forall\ a{\isaliteral{2E}{\isachardot}}\ {\isaliteral{28}{\isacharparenleft}}Eq\ a{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}{\isaliteral{3E}{\isachargreater}}\ a\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{5B}{\isacharbrackleft}}a{\isaliteral{5D}{\isacharbrackright}}\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{5B}{\isacharbrackleft}}a{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   603
insert\ x\ xs\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{28}{\isacharparenleft}}if\ member\ xs\ x\ then\ xs\ else\ x\ {\isaliteral{3A}{\isacharcolon}}\ xs{\isaliteral{29}{\isacharparenright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39599
diff changeset
   604
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   605
list{\isaliteral{5F}{\isacharunderscore}}of{\isaliteral{5F}{\isacharunderscore}}dlist\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ forall\ a{\isaliteral{2E}{\isachardot}}\ Dlist\ a\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{5B}{\isacharbrackleft}}a{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   606
list{\isaliteral{5F}{\isacharunderscore}}of{\isaliteral{5F}{\isacharunderscore}}dlist\ {\isaliteral{28}{\isacharparenleft}}Dlist\ x{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ x{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39599
diff changeset
   607
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   608
inserta\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ forall\ a{\isaliteral{2E}{\isachardot}}\ {\isaliteral{28}{\isacharparenleft}}Eq\ a{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}{\isaliteral{3E}{\isachargreater}}\ a\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ Dlist\ a\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ Dlist\ a{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   609
inserta\ x\ dxs\ {\isaliteral{3D}{\isacharequal}}\ Dlist\ {\isaliteral{28}{\isacharparenleft}}insert\ x\ {\isaliteral{28}{\isacharparenleft}}list{\isaliteral{5F}{\isacharunderscore}}of{\isaliteral{5F}{\isacharunderscore}}dlist\ dxs{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39599
diff changeset
   610
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   611
remove{\isadigit{1}}\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ forall\ a{\isaliteral{2E}{\isachardot}}\ {\isaliteral{28}{\isacharparenleft}}Eq\ a{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}{\isaliteral{3E}{\isachargreater}}\ a\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{5B}{\isacharbrackleft}}a{\isaliteral{5D}{\isacharbrackright}}\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ {\isaliteral{5B}{\isacharbrackleft}}a{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   612
remove{\isadigit{1}}\ x\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{5B}{\isacharbrackleft}}{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   613
remove{\isadigit{1}}\ x\ {\isaliteral{28}{\isacharparenleft}}y\ {\isaliteral{3A}{\isacharcolon}}\ xs{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{28}{\isacharparenleft}}if\ x\ {\isaliteral{3D}{\isacharequal}}{\isaliteral{3D}{\isacharequal}}\ y\ then\ xs\ else\ y\ {\isaliteral{3A}{\isacharcolon}}\ remove{\isadigit{1}}\ x\ xs{\isaliteral{29}{\isacharparenright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39599
diff changeset
   614
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   615
remove\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ forall\ a{\isaliteral{2E}{\isachardot}}\ {\isaliteral{28}{\isacharparenleft}}Eq\ a{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}{\isaliteral{3E}{\isachargreater}}\ a\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ Dlist\ a\ {\isaliteral{2D}{\isacharminus}}{\isaliteral{3E}{\isachargreater}}\ Dlist\ a{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   616
remove\ x\ dxs\ {\isaliteral{3D}{\isacharequal}}\ Dlist\ {\isaliteral{28}{\isacharparenleft}}remove{\isadigit{1}}\ x\ {\isaliteral{28}{\isacharparenleft}}list{\isaliteral{5F}{\isacharunderscore}}of{\isaliteral{5F}{\isacharunderscore}}dlist\ dxs{\isaliteral{29}{\isacharparenright}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{3B}{\isacharsemicolon}}\isanewline
39664
0afaf89ab591 more canonical type setting of type writer code examples
haftmann
parents: 39599
diff changeset
   617
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 40352
diff changeset
   618
{\isaliteral{7D}{\isacharbraceright}}\isanewline%
38502
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   619
\end{isamarkuptext}%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   620
\isamarkuptrue%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   621
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   622
\endisatagquotetypewriter
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   623
{\isafoldquotetypewriter}%
38502
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   624
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   625
\isadelimquotetypewriter
38502
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   626
%
39745
3aa2bc9c5478 combine quote and typewriter/tt tag
haftmann
parents: 39683
diff changeset
   627
\endisadelimquotetypewriter
38502
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   628
%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   629
\begin{isamarkuptext}%
c4b7ae8ea82e added quick and dirty section on invariants
haftmann
parents: 38459
diff changeset
   630
Typical data structures implemented by representations involving
46563
0ad69b30b39c updated generated files (cf. 8d51b375e926);
wenzelm
parents: 46523
diff changeset
   631
  invariants are available in the library, theory \isa{Mapping}
46523
7ca897381b26 update of generated documents
haftmann
parents: 40755
diff changeset
   632
  specifies key-value-mappings (type \isa{{\isaliteral{28}{\isacharparenleft}}{\isaliteral{27}{\isacharprime}}a{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{27}{\isacharprime}}b{\isaliteral{29}{\isacharparenright}}\ mapping});
46563
0ad69b30b39c updated generated files (cf. 8d51b375e926);
wenzelm
parents: 46523
diff changeset
   633
  these can be implemented by red-black-trees (theory \isa{RBT}).%
38437
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   634
\end{isamarkuptext}%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   635
\isamarkuptrue%
ffb1c5bf0425 adaptation to new outline
haftmann
parents: 38406
diff changeset
   636
%
38406
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
   637
\isadelimtheory
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
   638
%
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
   639
\endisadelimtheory
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
   640
%
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
   641
\isatagtheory
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
   642
\isacommand{end}\isamarkupfalse%
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
   643
%
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
   644
\endisatagtheory
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
   645
{\isafoldtheory}%
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
   646
%
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
   647
\isadelimtheory
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
   648
%
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
   649
\endisadelimtheory
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
   650
\isanewline
46523
7ca897381b26 update of generated documents
haftmann
parents: 40755
diff changeset
   651
\isanewline
38406
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
   652
\end{isabellebody}%
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
   653
%%% Local Variables:
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
   654
%%% mode: latex
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
   655
%%% TeX-master: "root"
bbb02b67caac sketch of new outline
haftmann
parents:
diff changeset
   656
%%% End: