doc-src/Exercises/2001/a5/generated/Aufgabe5.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{Aufgabe{\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{Interval lists%
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
Sets of natural numbers can be implemented as lists of
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    12
intervals, where an interval is simply a pair of numbers. For example
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    13
the set \isa{{\isacharbraceleft}{\isadigit{2}}{\isacharcomma}\ {\isadigit{3}}{\isacharcomma}\ {\isadigit{5}}{\isacharcomma}\ {\isadigit{7}}{\isacharcomma}\ {\isadigit{8}}{\isacharcomma}\ {\isadigit{9}}{\isacharbraceright}} can be represented by the
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    14
list \isa{{\isacharbrackleft}{\isacharparenleft}{\isadigit{2}}{\isacharcomma}\ {\isadigit{3}}{\isacharparenright}{\isacharcomma}\ {\isacharparenleft}{\isadigit{5}}{\isacharcomma}\ {\isadigit{5}}{\isacharparenright}{\isacharcomma}\ {\isacharparenleft}{\isadigit{7}}{\isacharcomma}\ {\isadigit{9}}{\isacharparenright}{\isacharbrackright}}. A typical application
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    15
is the list of free blocks of dynamically allocated memory.%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    16
\end{isamarkuptext}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    17
\isamarkuptrue%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    18
%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    19
\isamarkupsubsubsection{Definitions%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    20
}
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    21
\isamarkuptrue%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    22
%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    23
\begin{isamarkuptext}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    24
We introduce the type%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    25
\end{isamarkuptext}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    26
\isamarkuptrue%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    27
\isacommand{types}\ intervals\ {\isacharequal}\ {\isachardoublequote}{\isacharparenleft}nat{\isacharasterisk}nat{\isacharparenright}\ list{\isachardoublequote}\isamarkupfalse%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    28
%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    29
\begin{isamarkuptext}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    30
This type contains all possible lists of pairs of natural
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    31
numbers, even those that we may not recognize as meaningful
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    32
representations of sets. Thus you should introduce an \emph{invariant}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    33
\end{isamarkuptext}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    34
\isamarkuptrue%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    35
\isacommand{consts}\ inv\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}intervals\ {\isacharequal}{\isachargreater}\ bool{\isachardoublequote}\isamarkupfalse%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    36
%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    37
\begin{isamarkuptext}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    38
that characterizes exactly those interval lists representing
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    39
sets.  (The reason why we call this an invariant will become clear
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    40
below.)  For efficiency reasons intervals should be sorted in
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    41
ascending order, the lower bound of each interval should be less or
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    42
equal the upper bound, and the intervals should be chosen as large as
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    43
possible, i.e.\ no two adjecent intervals should overlap or even touch
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    44
each other.  It turns out to be convenient to define \isa{Aufgabe{\isadigit{5}}{\isachardot}inv} in
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    45
terms of a more general function%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    46
\end{isamarkuptext}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    47
\isamarkuptrue%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    48
\isacommand{consts}\ inv{\isadigit{2}}\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}nat\ {\isacharequal}{\isachargreater}\ intervals\ {\isacharequal}{\isachargreater}\ bool{\isachardoublequote}\isamarkupfalse%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    49
%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    50
\begin{isamarkuptext}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    51
such that the additional argument is a lower bound for the
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    52
intervals in the list.
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    53
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    54
To relate intervals back to sets define an \emph{abstraktion funktion}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    55
\end{isamarkuptext}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    56
\isamarkuptrue%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    57
\isacommand{consts}\ set{\isacharunderscore}of\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}intervals\ {\isacharequal}{\isachargreater}\ nat\ set{\isachardoublequote}\isamarkupfalse%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    58
%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    59
\begin{isamarkuptext}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    60
that yields the set corresponding to an interval list (that
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    61
satisfies the invariant).
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    62
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    63
Finally, define two primitive recursive functions%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    64
\end{isamarkuptext}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    65
\isamarkuptrue%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    66
\isacommand{consts}\ add\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharparenleft}nat{\isacharasterisk}nat{\isacharparenright}\ {\isacharequal}{\isachargreater}\ intervals\ {\isacharequal}{\isachargreater}\ intervals{\isachardoublequote}\isanewline
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    67
\ \ \ \ \ \ \ rem\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharparenleft}nat{\isacharasterisk}nat{\isacharparenright}\ {\isacharequal}{\isachargreater}\ intervals\ {\isacharequal}{\isachargreater}\ intervals{\isachardoublequote}\isamarkupfalse%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    68
%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    69
\begin{isamarkuptext}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    70
for inserting and deleting an interval from an interval
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    71
list. The result should again satisfies the invariant. Hence the name:
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    72
\isa{inv} is invariant under the application of the operations
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    73
\isa{add} and \isa{rem} --- if \isa{inv} holds for the input, it
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    74
must also hold for the output.%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    75
\end{isamarkuptext}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    76
\isamarkuptrue%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    77
%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    78
\isamarkupsubsubsection{Proving the invariant%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    79
}
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    80
\isamarkuptrue%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    81
\isacommand{declare}\ Let{\isacharunderscore}def\ {\isacharbrackleft}simp{\isacharbrackright}\isanewline
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    82
\isamarkupfalse%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    83
\isacommand{declare}\ split{\isacharunderscore}split\ {\isacharbrackleft}split{\isacharbrackright}\isamarkupfalse%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    84
%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    85
\begin{isamarkuptext}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    86
Start off by proving the monotonicity of \isa{inv{\isadigit{2}}}:%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    87
\end{isamarkuptext}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    88
\isamarkuptrue%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    89
\isacommand{lemma}\ inv{\isadigit{2}}{\isacharunderscore}monotone{\isacharcolon}\ {\isachardoublequote}inv{\isadigit{2}}\ m\ ins\ {\isasymLongrightarrow}\ n{\isasymle}m\ {\isasymLongrightarrow}\ inv{\isadigit{2}}\ n\ ins{\isachardoublequote}\isamarkupfalse%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    90
\isamarkupfalse%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    91
%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    92
\begin{isamarkuptext}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    93
Now show that \isa{add} and \isa{rem} preserve the invariant:%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    94
\end{isamarkuptext}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    95
\isamarkuptrue%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    96
\isacommand{theorem}\ inv{\isacharunderscore}add{\isacharcolon}\ {\isachardoublequote}{\isasymlbrakk}\ i{\isasymle}j{\isacharsemicolon}\ inv\ ins\ {\isasymrbrakk}\ {\isasymLongrightarrow}\ inv\ {\isacharparenleft}add\ {\isacharparenleft}i{\isacharcomma}j{\isacharparenright}\ ins{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    97
\isanewline
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    98
\isamarkupfalse%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
    99
\isacommand{theorem}\ inv{\isacharunderscore}rem{\isacharcolon}\ {\isachardoublequote}{\isasymlbrakk}\ i{\isasymle}j{\isacharsemicolon}\ inv\ ins\ {\isasymrbrakk}\ {\isasymLongrightarrow}\ inv\ {\isacharparenleft}rem\ {\isacharparenleft}i{\isacharcomma}j{\isacharparenright}\ ins{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   100
\isamarkupfalse%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   101
%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   102
\begin{isamarkuptext}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   103
Hint: you should first prove a more general statement
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   104
(involving \isa{inv{\isadigit{2}}}). This will probably involve some advanced
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   105
forms of induction discussed in section~9.3.1 of
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   106
\cite{isabelle-tutorial}.%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   107
\end{isamarkuptext}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   108
\isamarkuptrue%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   109
%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   110
\isamarkupsubsubsection{Proving correctness of the implementation%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   111
}
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   112
\isamarkuptrue%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   113
%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   114
\begin{isamarkuptext}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   115
Show the correctness of \isa{add} and \isa{rem} wrt.\
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   116
their counterparts \isa{{\isasymunion}} and \isa{{\isacharminus}} on sets:%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   117
\end{isamarkuptext}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   118
\isamarkuptrue%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   119
\isacommand{theorem}\ set{\isacharunderscore}of{\isacharunderscore}add{\isacharcolon}\ \isanewline
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   120
\ \ {\isachardoublequote}{\isasymlbrakk}\ i{\isasymle}j{\isacharsemicolon}\ inv\ ins\ {\isasymrbrakk}\ {\isasymLongrightarrow}\ set{\isacharunderscore}of\ {\isacharparenleft}add\ {\isacharparenleft}i{\isacharcomma}j{\isacharparenright}\ ins{\isacharparenright}\ {\isacharequal}\ set{\isacharunderscore}of\ {\isacharbrackleft}{\isacharparenleft}i{\isacharcomma}j{\isacharparenright}{\isacharbrackright}\ {\isasymunion}\ set{\isacharunderscore}of\ ins{\isachardoublequote}\isamarkupfalse%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   121
\isanewline
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   122
\isamarkupfalse%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   123
\isacommand{theorem}\ set{\isacharunderscore}of{\isacharunderscore}rem{\isacharcolon}\isanewline
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   124
\ \ {\isachardoublequote}{\isasymlbrakk}\ i\ {\isasymle}\ j{\isacharsemicolon}\ inv\ ins\ {\isasymrbrakk}\ {\isasymLongrightarrow}\ set{\isacharunderscore}of\ {\isacharparenleft}rem\ {\isacharparenleft}i{\isacharcomma}j{\isacharparenright}\ ins{\isacharparenright}\ {\isacharequal}\ set{\isacharunderscore}of\ ins\ {\isacharminus}\ set{\isacharunderscore}of\ {\isacharbrackleft}{\isacharparenleft}i{\isacharcomma}j{\isacharparenright}{\isacharbrackright}{\isachardoublequote}\isamarkupfalse%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   125
\isamarkupfalse%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   126
%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   127
\begin{isamarkuptext}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   128
Hints: in addition to the hints above, you may also find it
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   129
useful to prove some relationship between \isa{inv{\isadigit{2}}} and \isa{set{\isacharunderscore}of} as a lemma.%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   130
\end{isamarkuptext}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   131
\isamarkuptrue%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   132
%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   133
\isamarkupsubsubsection{General hints%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   134
}
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   135
\isamarkuptrue%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   136
%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   137
\begin{isamarkuptext}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   138
\begin{itemize}
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   139
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   140
\item You should be familiar both with simplification and predicate
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   141
calculus reasoning. Automatic tactics like \isa{blast} and \isa{force} can simplify the proof.
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   142
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   143
\item
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   144
Equality of two sets can often be proved via the rule \isa{set{\isacharunderscore}ext}:
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   145
\begin{isabelle}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   146
{\isacharparenleft}{\isasymAnd}x{\isachardot}\ {\isacharparenleft}x\ {\isasymin}\ A{\isacharparenright}\ {\isacharequal}\ {\isacharparenleft}x\ {\isasymin}\ B{\isacharparenright}{\isacharparenright}\ {\isasymLongrightarrow}\ A\ {\isacharequal}\ B%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   147
\end{isabelle}
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   148
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   149
\item 
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   150
Potentially useful theorems for the simplification of sets include \\
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   151
\isa{Un{\isacharunderscore}Diff{\isacharcolon}}~\isa{A\ {\isasymunion}\ B\ {\isacharminus}\ C\ {\isacharequal}\ A\ {\isacharminus}\ C\ {\isasymunion}\ {\isacharparenleft}B\ {\isacharminus}\ C{\isacharparenright}} \\
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   152
\isa{Diff{\isacharunderscore}triv{\isacharcolon}}~\isa{A\ {\isasyminter}\ B\ {\isacharequal}\ {\isacharbraceleft}{\isacharbraceright}\ {\isasymLongrightarrow}\ A\ {\isacharminus}\ B\ {\isacharequal}\ A}.
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   153
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   154
\item 
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   155
Theorems can be instantiated and simplified via \isa{of} and
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   156
\isa{{\isacharbrackleft}simplified{\isacharbrackright}} (see \cite{isabelle-tutorial}).
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   157
\end{itemize}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   158
\end{isamarkuptext}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   159
\isamarkuptrue%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   160
\isamarkupfalse%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   161
\end{isabellebody}%
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   162
%%% Local Variables:
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   163
%%% mode: latex
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   164
%%% TeX-master: "root"
ed4e97874454 keep a copy of generated files in repository
kleing
parents:
diff changeset
   165
%%% End: