doc-src/Exercises/2003/a1/generated/a1.tex
author obua
Sun, 09 May 2004 23:04:36 +0200
changeset 14722 8e739a6eaf11
parent 14525 9598f5bdeb9e
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:
14525
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
     1
%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
     2
\begin{isabellebody}%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
     3
\def\isabellecontext{a{\isadigit{1}}}%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
     4
\isamarkupfalse%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
     5
%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
     6
\isamarkupsubsection{Lists%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
     7
}
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
     8
\isamarkuptrue%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
     9
%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    10
\begin{isamarkuptext}%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    11
Define a function \isa{occurs}, such that \isa{occurs\ x\ xs} 
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    12
is the number of occurrences of the element \isa{x} in the list
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    13
\isa{xs}.%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    14
\end{isamarkuptext}%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    15
\isamarkuptrue%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    16
\ \ occurs\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a\ list\ {\isasymRightarrow}\ nat{\isachardoublequote}\isamarkupfalse%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    17
%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    18
\begin{isamarkuptext}%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    19
Prove or disprove (by counter example) the theorems that follow. You may have to prove some lemmas first.
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    20
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    21
Use the \isa{{\isacharbrackleft}simp{\isacharbrackright}}-attribute only if the equation is truly a
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    22
simplification and is necessary for some later proof.
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    23
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    24
In the case of a non-theorem try to find a suitable assumption under which the theorem holds.%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    25
\end{isamarkuptext}%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    26
\isamarkuptrue%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    27
\isacommand{theorem}\ {\isachardoublequote}occurs\ a\ {\isacharparenleft}xs\ {\isacharat}\ ys{\isacharparenright}\ {\isacharequal}\ occurs\ a\ xs\ {\isacharplus}\ occurs\ a\ ys\ {\isachardoublequote}\isamarkupfalse%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    28
\isanewline
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    29
\isamarkupfalse%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    30
\isacommand{theorem}\ {\isachardoublequote}occurs\ a\ xs\ {\isacharequal}\ occurs\ a\ {\isacharparenleft}rev\ xs{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    31
\isanewline
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    32
\isamarkupfalse%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    33
\isacommand{theorem}\ {\isachardoublequote}occurs\ a\ xs\ {\isacharless}{\isacharequal}\ length\ xs{\isachardoublequote}\isamarkupfalse%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    34
\isanewline
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    35
\isamarkupfalse%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    36
\isacommand{theorem}\ {\isachardoublequote}occurs\ a\ {\isacharparenleft}replicate\ n\ a{\isacharparenright}\ {\isacharequal}\ n{\isachardoublequote}\isamarkupfalse%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    37
\isamarkupfalse%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    38
%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    39
\begin{isamarkuptext}%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    40
Define a function \isa{areAll}, such that \isa{areAll\ xs\ x} is true iff all elements of \isa{xs} are equal to \isa{x}.%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    41
\end{isamarkuptext}%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    42
\isamarkuptrue%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    43
\ \ areAll\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharprime}a\ list\ {\isasymRightarrow}\ {\isacharprime}a\ {\isasymRightarrow}\ bool{\isachardoublequote}\isanewline
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    44
\isanewline
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    45
\isamarkupfalse%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    46
\isacommand{theorem}\ {\isachardoublequote}areAll\ xs\ a\ {\isasymlongrightarrow}\ occurs\ a\ xs\ {\isacharequal}\ length\ xs{\isachardoublequote}\isamarkupfalse%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    47
\isanewline
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    48
\isamarkupfalse%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    49
\isacommand{theorem}\ {\isachardoublequote}occurs\ a\ xs\ {\isacharequal}\ length\ xs\ {\isasymlongrightarrow}\ areAll\ xs\ a{\isachardoublequote}\isamarkupfalse%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    50
\isamarkupfalse%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    51
%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    52
\begin{isamarkuptext}%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    53
Define two functions to delete elements from a list:
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    54
\isa{del{\isadigit{1}}\ x\ xs} deletes the first (leftmost) occurrence of \isa{x} from \isa{xs}.
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    55
\isa{delall\ x\ xs} deletes all occurrences of \isa{x} from \isa{xs}.%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    56
\end{isamarkuptext}%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    57
\isamarkuptrue%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    58
\ \ delall\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a\ list\ {\isasymRightarrow}\ {\isacharprime}a\ list{\isachardoublequote}\isanewline
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    59
\ \ del{\isadigit{1}}\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a\ list\ {\isasymRightarrow}\ {\isacharprime}a\ list{\isachardoublequote}\isanewline
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    60
\isanewline
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    61
\isamarkupfalse%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    62
\isacommand{theorem}\ {\isachardoublequote}occurs\ a\ {\isacharparenleft}delall\ a\ xs{\isacharparenright}\ {\isacharequal}\ {\isadigit{0}}{\isachardoublequote}\isamarkupfalse%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    63
\ \isanewline
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    64
\isamarkupfalse%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    65
\isacommand{theorem}\ {\isachardoublequote}Suc\ {\isacharparenleft}occurs\ a\ {\isacharparenleft}del{\isadigit{1}}\ a\ xs{\isacharparenright}{\isacharparenright}\ {\isacharequal}\ occurs\ a\ xs{\isachardoublequote}\isamarkupfalse%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    66
\isamarkupfalse%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    67
%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    68
\begin{isamarkuptext}%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    69
Define a function \isa{replace}, such that \isa{replace\ x\ y\ zs} yields \isa{zs} with every occurrence of \isa{x} replaced by \isa{y}.%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    70
\end{isamarkuptext}%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    71
\isamarkuptrue%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    72
\ \ replace\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a\ list\ {\isasymRightarrow}\ {\isacharprime}a\ list{\isachardoublequote}\isanewline
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    73
\isanewline
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    74
\isamarkupfalse%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    75
\isacommand{theorem}\ {\isachardoublequote}occurs\ a\ xs\ {\isacharequal}\ occurs\ b\ {\isacharparenleft}replace\ a\ b\ xs{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    76
\isamarkupfalse%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    77
%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    78
\begin{isamarkuptext}%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    79
With the help of \isa{occurs}, define a function \isa{remDups} that removes all duplicates from a list.%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    80
\end{isamarkuptext}%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    81
\isamarkuptrue%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    82
\ \ remDups\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharprime}a\ list\ {\isasymRightarrow}\ {\isacharprime}a\ list{\isachardoublequote}\isamarkupfalse%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    83
%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    84
\begin{isamarkuptext}%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    85
Use \isa{occurs} to formulate and prove a lemma that expresses the fact that \isa{remDups} never inserts a new element into a list.%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    86
\end{isamarkuptext}%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    87
\isamarkuptrue%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    88
%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    89
\begin{isamarkuptext}%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    90
Use \isa{occurs} to formulate and prove a lemma that expresses the fact that \isa{remDups} always returns a list without duplicates (i.e.\ the correctness of \isa{remDups}).%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    91
\end{isamarkuptext}%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    92
\isamarkuptrue%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    93
%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    94
\begin{isamarkuptext}%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    95
Now, with the help of \isa{occurs} define a function \isa{unique}, such that \isa{unique\ xs} is true iff every element in \isa{xs} occurs only once.%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    96
\end{isamarkuptext}%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    97
\isamarkuptrue%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    98
\ \ unique\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharprime}a\ list\ {\isasymRightarrow}\ bool{\isachardoublequote}\isamarkupfalse%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
    99
%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
   100
\begin{isamarkuptext}%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
   101
Formulate and prove the correctness of \isa{remDups} with the help of \isa{unique}.%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
   102
\end{isamarkuptext}%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
   103
\isamarkuptrue%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
   104
\isamarkupfalse%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
   105
\end{isabellebody}%
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
   106
%%% Local Variables:
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
   107
%%% mode: latex
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
   108
%%% TeX-master: "root"
9598f5bdeb9e *** empty log message ***
mehta
parents:
diff changeset
   109
%%% End: