doc-src/Exercises/2002/a5/generated/a5.tex
author obua
Sun, 09 May 2004 23:04:36 +0200
changeset 14722 8e739a6eaf11
parent 13841 ed4e97874454
permissions -rw-r--r--
replaced apply-style proof for instance Multiset :: plus_ac0 by recommended Isar proof style
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13841
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
     1
%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
     2
\begin{isabellebody}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
     3
\def\isabellecontext{a{\isadigit{5}}}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
     4
\isamarkupfalse%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
     5
%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
     6
\isamarkupsubsection{Merge sort%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
     7
}
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
     8
\isamarkuptrue%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
     9
%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    10
\begin{isamarkuptext}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    11
Implement \emph{merge sort}: a list is sorted by splitting it
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    12
into two lists, sorting them separately, and merging the results.
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    13
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    14
With the help of \isa{recdef} define two functions%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    15
\end{isamarkuptext}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    16
\isamarkuptrue%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    17
\isacommand{consts}\ merge\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}nat\ list\ {\isasymtimes}\ nat\ list\ {\isasymRightarrow}\ nat\ list{\isachardoublequote}\isanewline
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    18
\ \ \ \ \ \ \ msort\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}nat\ list\ {\isasymRightarrow}\ nat\ list{\isachardoublequote}\isamarkupfalse%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    19
%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    20
\begin{isamarkuptext}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    21
and show%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    22
\end{isamarkuptext}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    23
\isamarkuptrue%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    24
\isacommand{theorem}\ {\isachardoublequote}sorted\ {\isacharparenleft}msort\ xs{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    25
\isanewline
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    26
\isamarkupfalse%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    27
\isacommand{theorem}\ {\isachardoublequote}count\ {\isacharparenleft}msort\ xs{\isacharparenright}\ x\ {\isacharequal}\ count\ xs\ x{\isachardoublequote}\isamarkupfalse%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    28
\isamarkupfalse%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    29
%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    30
\begin{isamarkuptext}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    31
where \isa{sorted} and \isa{count} are defined as in
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    32
section~\ref{psv2002a2}.
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    33
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    34
Hints:
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    35
\begin{itemize}
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    36
\item For \isa{recdef} see section~3.5 of \cite{isabelle-tutorial}.
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    37
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    38
\item To split a list into two halves of almost equal length you can
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    39
use the functions \mbox{\isa{n\ div\ {\isadigit{2}}}}, \isa{take} und \isa{drop},
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    40
where \isa{take\ n\ xs} returns the first \isa{n} elements of
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    41
\isa{xs} and \isa{drop\ n\ xs} the remainder.
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    42
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    43
\item Here are some potentially useful lemmas:\\
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    44
  \isa{linorder{\isacharunderscore}not{\isacharunderscore}le{\isacharcolon}} \isa{{\isacharparenleft}{\isasymnot}\ x\ {\isasymle}\ y{\isacharparenright}\ {\isacharequal}\ {\isacharparenleft}y\ {\isacharless}\ x{\isacharparenright}}\\
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    45
  \isa{order{\isacharunderscore}less{\isacharunderscore}le{\isacharcolon}} \isa{{\isacharparenleft}x\ {\isacharless}\ y{\isacharparenright}\ {\isacharequal}\ {\isacharparenleft}x\ {\isasymle}\ y\ {\isasymand}\ x\ {\isasymnoteq}\ y{\isacharparenright}}\\
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    46
  \isa{min{\isacharunderscore}def{\isacharcolon}} \isa{min\ a\ b\ {\isasymequiv}\ if\ a\ {\isasymle}\ b\ then\ a\ else\ b}
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    47
\end{itemize}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    48
\end{isamarkuptext}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    49
\isamarkuptrue%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    50
\isamarkupfalse%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    51
\end{isabellebody}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    52
%%% Local Variables:
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    53
%%% mode: latex
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    54
%%% TeX-master: "root"
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    55
%%% End: