doc-src/TutorialI/Inductive/document/Even.tex
author paulson
Thu, 02 Nov 2000 11:00:29 +0100
changeset 10365 a17cf465d29a
child 10589 b2d1b393b750
permissions -rw-r--r--
auto generated
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10365
a17cf465d29a auto generated
paulson
parents:
diff changeset
     1
%
a17cf465d29a auto generated
paulson
parents:
diff changeset
     2
\begin{isabellebody}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
     3
\def\isabellecontext{Even}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
     4
\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
     5
\isacommand{theory}\ Even\ {\isacharequal}\ Main{\isacharcolon}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
     6
\begin{isamarkuptext}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
     7
We begin with a simple example: the set of even numbers.  Obviously this
a17cf465d29a auto generated
paulson
parents:
diff changeset
     8
concept can be expressed already using the divides relation (dvd).  We shall
a17cf465d29a auto generated
paulson
parents:
diff changeset
     9
prove below that the two formulations coincide.
a17cf465d29a auto generated
paulson
parents:
diff changeset
    10
a17cf465d29a auto generated
paulson
parents:
diff changeset
    11
First, we declare the constant \isa{even} to be a set of natural numbers.
a17cf465d29a auto generated
paulson
parents:
diff changeset
    12
Then, an inductive declaration gives it the desired properties.%
a17cf465d29a auto generated
paulson
parents:
diff changeset
    13
\end{isamarkuptext}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
    14
\isacommand{consts}\ even\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}nat\ set{\isachardoublequote}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
    15
\isacommand{inductive}\ even\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
    16
\isakeyword{intros}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
    17
zero{\isacharbrackleft}intro{\isacharbang}{\isacharbrackright}{\isacharcolon}\ {\isachardoublequote}{\isadigit{0}}\ {\isasymin}\ even{\isachardoublequote}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
    18
step{\isacharbrackleft}intro{\isacharbang}{\isacharbrackright}{\isacharcolon}\ {\isachardoublequote}n\ {\isasymin}\ even\ {\isasymLongrightarrow}\ {\isacharparenleft}Suc\ {\isacharparenleft}Suc\ n{\isacharparenright}{\isacharparenright}\ {\isasymin}\ even{\isachardoublequote}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
    19
\begin{isamarkuptext}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
    20
An inductive definition consists of introduction rules.  The first one
a17cf465d29a auto generated
paulson
parents:
diff changeset
    21
above states that 0 is even; the second states that if $n$ is even, so is
a17cf465d29a auto generated
paulson
parents:
diff changeset
    22
$n+2$.  Given this declaration, Isabelle generates a fixed point definition
a17cf465d29a auto generated
paulson
parents:
diff changeset
    23
for \isa{even} and proves many theorems about it.  These theorems include the
a17cf465d29a auto generated
paulson
parents:
diff changeset
    24
introduction rules specified in the declaration, an elimination rule for case
a17cf465d29a auto generated
paulson
parents:
diff changeset
    25
analysis and an induction rule.  We can refer to these theorems by
a17cf465d29a auto generated
paulson
parents:
diff changeset
    26
automatically-generated names:
a17cf465d29a auto generated
paulson
parents:
diff changeset
    27
a17cf465d29a auto generated
paulson
parents:
diff changeset
    28
\begin{isabelle}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
    29
\ \ \ \ \ n\ {\isasymin}\ even\ {\isasymLongrightarrow}\ Suc\ {\isacharparenleft}Suc\ n{\isacharparenright}\ {\isasymin}\ even%
a17cf465d29a auto generated
paulson
parents:
diff changeset
    30
\end{isabelle}
a17cf465d29a auto generated
paulson
parents:
diff changeset
    31
\rulename{even.step}
a17cf465d29a auto generated
paulson
parents:
diff changeset
    32
a17cf465d29a auto generated
paulson
parents:
diff changeset
    33
\begin{isabelle}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
    34
\ \ \ \ \ {\isasymlbrakk}xa\ {\isasymin}\ even{\isacharsemicolon}\ P\ {\isadigit{0}}{\isacharsemicolon}\ {\isasymAnd}n{\isachardot}\ {\isasymlbrakk}n\ {\isasymin}\ even{\isacharsemicolon}\ P\ n{\isasymrbrakk}\ {\isasymLongrightarrow}\ P\ {\isacharparenleft}Suc\ {\isacharparenleft}Suc\ n{\isacharparenright}{\isacharparenright}{\isasymrbrakk}\ {\isasymLongrightarrow}\ P\ xa%
a17cf465d29a auto generated
paulson
parents:
diff changeset
    35
\end{isabelle}
a17cf465d29a auto generated
paulson
parents:
diff changeset
    36
\rulename{even.induct}
a17cf465d29a auto generated
paulson
parents:
diff changeset
    37
a17cf465d29a auto generated
paulson
parents:
diff changeset
    38
Attributes can be given to the introduction rules.  Here both rules are
a17cf465d29a auto generated
paulson
parents:
diff changeset
    39
specified as \isa{intro!}, which will cause them to be applied aggressively.
a17cf465d29a auto generated
paulson
parents:
diff changeset
    40
Obviously, regarding 0 as even is always safe.  The second rule is also safe
a17cf465d29a auto generated
paulson
parents:
diff changeset
    41
because $n+2$ is even if and only if $n$ is even.  We prove this equivalence
a17cf465d29a auto generated
paulson
parents:
diff changeset
    42
later.%
a17cf465d29a auto generated
paulson
parents:
diff changeset
    43
\end{isamarkuptext}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
    44
%
a17cf465d29a auto generated
paulson
parents:
diff changeset
    45
\begin{isamarkuptext}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
    46
Our first lemma states that numbers of the form $2\times k$ are even.
a17cf465d29a auto generated
paulson
parents:
diff changeset
    47
Introduction rules are used to show that given values belong to the inductive
a17cf465d29a auto generated
paulson
parents:
diff changeset
    48
set.  Often, as here, the proof involves some other sort of induction.%
a17cf465d29a auto generated
paulson
parents:
diff changeset
    49
\end{isamarkuptext}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
    50
\isacommand{lemma}\ two{\isacharunderscore}times{\isacharunderscore}even{\isacharbrackleft}intro{\isacharbang}{\isacharbrackright}{\isacharcolon}\ {\isachardoublequote}{\isacharhash}{\isadigit{2}}{\isacharasterisk}k\ {\isasymin}\ even{\isachardoublequote}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
    51
\isacommand{apply}\ {\isacharparenleft}induct\ {\isachardoublequote}k{\isachardoublequote}{\isacharparenright}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
    52
\ \isacommand{apply}\ auto\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
    53
\isacommand{done}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
    54
\begin{isamarkuptext}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
    55
The first step is induction on the natural number \isa{k}, which leaves
a17cf465d29a auto generated
paulson
parents:
diff changeset
    56
two subgoals:
a17cf465d29a auto generated
paulson
parents:
diff changeset
    57
a17cf465d29a auto generated
paulson
parents:
diff changeset
    58
pr(latex xsymbols symbols);
a17cf465d29a auto generated
paulson
parents:
diff changeset
    59
proof\ {\isacharparenleft}prove{\isacharparenright}{\isacharcolon}\ step\ {\isadigit{1}}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
    60
\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
    61
goal\ {\isacharparenleft}lemma\ two{\isacharunderscore}times{\isacharunderscore}even{\isacharparenright}{\isacharcolon}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
    62
{\isacharhash}{\isadigit{2}}\ {\isacharasterisk}\ k\ {\isasymin}\ even\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
    63
\ {\isadigit{1}}{\isachardot}\ {\isacharhash}{\isadigit{2}}\ {\isacharasterisk}\ {\isadigit{0}}\ {\isasymin}\ even\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
    64
\ {\isadigit{2}}{\isachardot}\ {\isasymAnd}n{\isachardot}\ {\isacharhash}{\isadigit{2}}\ {\isacharasterisk}\ n\ {\isasymin}\ even\ {\isasymLongrightarrow}\ {\isacharhash}{\isadigit{2}}\ {\isacharasterisk}\ Suc\ n\ {\isasymin}\ even
a17cf465d29a auto generated
paulson
parents:
diff changeset
    65
a17cf465d29a auto generated
paulson
parents:
diff changeset
    66
Here \isa{auto} simplifies both subgoals so that they match the introduction
a17cf465d29a auto generated
paulson
parents:
diff changeset
    67
rules, which then are applied automatically.%
a17cf465d29a auto generated
paulson
parents:
diff changeset
    68
\end{isamarkuptext}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
    69
%
a17cf465d29a auto generated
paulson
parents:
diff changeset
    70
\begin{isamarkuptext}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
    71
Our goal is to prove the equivalence between the traditional definition
a17cf465d29a auto generated
paulson
parents:
diff changeset
    72
of even (using the divides relation) and our inductive definition.  Half of
a17cf465d29a auto generated
paulson
parents:
diff changeset
    73
this equivalence is trivial using the lemma just proved, whose \isa{intro!}
a17cf465d29a auto generated
paulson
parents:
diff changeset
    74
attribute ensures it will be applied automatically.%
a17cf465d29a auto generated
paulson
parents:
diff changeset
    75
\end{isamarkuptext}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
    76
\isacommand{lemma}\ dvd{\isacharunderscore}imp{\isacharunderscore}even{\isacharcolon}\ {\isachardoublequote}{\isacharhash}{\isadigit{2}}\ dvd\ n\ {\isasymLongrightarrow}\ n\ {\isasymin}\ even{\isachardoublequote}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
    77
\isacommand{apply}\ {\isacharparenleft}auto\ simp\ add{\isacharcolon}\ dvd{\isacharunderscore}def{\isacharparenright}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
    78
\isacommand{done}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
    79
\begin{isamarkuptext}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
    80
our first rule induction!%
a17cf465d29a auto generated
paulson
parents:
diff changeset
    81
\end{isamarkuptext}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
    82
\isacommand{lemma}\ even{\isacharunderscore}imp{\isacharunderscore}dvd{\isacharcolon}\ {\isachardoublequote}n\ {\isasymin}\ even\ {\isasymLongrightarrow}\ {\isacharhash}{\isadigit{2}}\ dvd\ n{\isachardoublequote}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
    83
\isacommand{apply}\ {\isacharparenleft}erule\ even{\isachardot}induct{\isacharparenright}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
    84
\ \isacommand{apply}\ simp\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
    85
\isacommand{apply}\ {\isacharparenleft}simp\ add{\isacharcolon}\ dvd{\isacharunderscore}def{\isacharparenright}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
    86
\isacommand{apply}\ clarify\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
    87
\isacommand{apply}\ {\isacharparenleft}rule{\isacharunderscore}tac\ x\ {\isacharequal}\ {\isachardoublequote}Suc\ k{\isachardoublequote}\ \isakeyword{in}\ exI{\isacharparenright}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
    88
\isacommand{apply}\ simp\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
    89
\isacommand{done}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
    90
\begin{isamarkuptext}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
    91
proof\ {\isacharparenleft}prove{\isacharparenright}{\isacharcolon}\ step\ {\isadigit{1}}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
    92
\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
    93
goal\ {\isacharparenleft}lemma\ even{\isacharunderscore}imp{\isacharunderscore}dvd{\isacharparenright}{\isacharcolon}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
    94
n\ {\isasymin}\ even\ {\isasymLongrightarrow}\ {\isacharhash}{\isadigit{2}}\ dvd\ n\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
    95
\ {\isadigit{1}}{\isachardot}\ {\isacharhash}{\isadigit{2}}\ dvd\ {\isadigit{0}}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
    96
\ {\isadigit{2}}{\isachardot}\ {\isasymAnd}n{\isachardot}\ {\isasymlbrakk}n\ {\isasymin}\ even{\isacharsemicolon}\ {\isacharhash}{\isadigit{2}}\ dvd\ n{\isasymrbrakk}\ {\isasymLongrightarrow}\ {\isacharhash}{\isadigit{2}}\ dvd\ Suc\ {\isacharparenleft}Suc\ n{\isacharparenright}
a17cf465d29a auto generated
paulson
parents:
diff changeset
    97
a17cf465d29a auto generated
paulson
parents:
diff changeset
    98
proof\ {\isacharparenleft}prove{\isacharparenright}{\isacharcolon}\ step\ {\isadigit{3}}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
    99
\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   100
goal\ {\isacharparenleft}lemma\ even{\isacharunderscore}imp{\isacharunderscore}dvd{\isacharparenright}{\isacharcolon}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   101
n\ {\isasymin}\ even\ {\isasymLongrightarrow}\ {\isacharhash}{\isadigit{2}}\ dvd\ n\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   102
\ {\isadigit{1}}{\isachardot}\ {\isasymAnd}n{\isachardot}\ {\isasymlbrakk}n\ {\isasymin}\ even{\isacharsemicolon}\ {\isasymexists}k{\isachardot}\ n\ {\isacharequal}\ {\isacharhash}{\isadigit{2}}\ {\isacharasterisk}\ k{\isasymrbrakk}\ {\isasymLongrightarrow}\ {\isasymexists}k{\isachardot}\ Suc\ {\isacharparenleft}Suc\ n{\isacharparenright}\ {\isacharequal}\ {\isacharhash}{\isadigit{2}}\ {\isacharasterisk}\ k
a17cf465d29a auto generated
paulson
parents:
diff changeset
   103
a17cf465d29a auto generated
paulson
parents:
diff changeset
   104
proof\ {\isacharparenleft}prove{\isacharparenright}{\isacharcolon}\ step\ {\isadigit{4}}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   105
\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   106
goal\ {\isacharparenleft}lemma\ even{\isacharunderscore}imp{\isacharunderscore}dvd{\isacharparenright}{\isacharcolon}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   107
n\ {\isasymin}\ even\ {\isasymLongrightarrow}\ {\isacharhash}{\isadigit{2}}\ dvd\ n\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   108
\ {\isadigit{1}}{\isachardot}\ {\isasymAnd}n\ k{\isachardot}\ {\isacharhash}{\isadigit{2}}\ {\isacharasterisk}\ k\ {\isasymin}\ even\ {\isasymLongrightarrow}\ {\isasymexists}ka{\isachardot}\ Suc\ {\isacharparenleft}Suc\ {\isacharparenleft}{\isacharhash}{\isadigit{2}}\ {\isacharasterisk}\ k{\isacharparenright}{\isacharparenright}\ {\isacharequal}\ {\isacharhash}{\isadigit{2}}\ {\isacharasterisk}\ ka%
a17cf465d29a auto generated
paulson
parents:
diff changeset
   109
\end{isamarkuptext}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
   110
%
a17cf465d29a auto generated
paulson
parents:
diff changeset
   111
\begin{isamarkuptext}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
   112
no iff-attribute because we don't always want to use it%
a17cf465d29a auto generated
paulson
parents:
diff changeset
   113
\end{isamarkuptext}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
   114
\isacommand{theorem}\ even{\isacharunderscore}iff{\isacharunderscore}dvd{\isacharcolon}\ {\isachardoublequote}{\isacharparenleft}n\ {\isasymin}\ even{\isacharparenright}\ {\isacharequal}\ {\isacharparenleft}{\isacharhash}{\isadigit{2}}\ dvd\ n{\isacharparenright}{\isachardoublequote}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   115
\isacommand{apply}\ {\isacharparenleft}blast\ intro{\isacharcolon}\ dvd{\isacharunderscore}imp{\isacharunderscore}even\ even{\isacharunderscore}imp{\isacharunderscore}dvd{\isacharparenright}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   116
\isacommand{done}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
   117
\begin{isamarkuptext}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
   118
this result ISN'T inductive...%
a17cf465d29a auto generated
paulson
parents:
diff changeset
   119
\end{isamarkuptext}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
   120
\isacommand{lemma}\ Suc{\isacharunderscore}Suc{\isacharunderscore}even{\isacharunderscore}imp{\isacharunderscore}even{\isacharcolon}\ {\isachardoublequote}Suc\ {\isacharparenleft}Suc\ n{\isacharparenright}\ {\isasymin}\ even\ {\isasymLongrightarrow}\ n\ {\isasymin}\ even{\isachardoublequote}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   121
\isacommand{apply}\ {\isacharparenleft}erule\ even{\isachardot}induct{\isacharparenright}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   122
\isacommand{oops}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
   123
\begin{isamarkuptext}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
   124
proof\ {\isacharparenleft}prove{\isacharparenright}{\isacharcolon}\ step\ {\isadigit{1}}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   125
\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   126
goal\ {\isacharparenleft}lemma\ Suc{\isacharunderscore}Suc{\isacharunderscore}even{\isacharunderscore}imp{\isacharunderscore}even{\isacharparenright}{\isacharcolon}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   127
Suc\ {\isacharparenleft}Suc\ n{\isacharparenright}\ {\isasymin}\ even\ {\isasymLongrightarrow}\ n\ {\isasymin}\ even\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   128
\ {\isadigit{1}}{\isachardot}\ n\ {\isasymin}\ even\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   129
\ {\isadigit{2}}{\isachardot}\ {\isasymAnd}na{\isachardot}\ {\isasymlbrakk}na\ {\isasymin}\ even{\isacharsemicolon}\ n\ {\isasymin}\ even{\isasymrbrakk}\ {\isasymLongrightarrow}\ n\ {\isasymin}\ even%
a17cf465d29a auto generated
paulson
parents:
diff changeset
   130
\end{isamarkuptext}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
   131
%
a17cf465d29a auto generated
paulson
parents:
diff changeset
   132
\begin{isamarkuptext}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
   133
...so we need an inductive lemma...%
a17cf465d29a auto generated
paulson
parents:
diff changeset
   134
\end{isamarkuptext}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
   135
\isacommand{lemma}\ even{\isacharunderscore}imp{\isacharunderscore}even{\isacharunderscore}minus{\isacharunderscore}{\isadigit{2}}{\isacharcolon}\ {\isachardoublequote}n\ {\isasymin}\ even\ {\isasymLongrightarrow}\ n{\isacharminus}{\isacharhash}{\isadigit{2}}\ {\isasymin}\ even{\isachardoublequote}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   136
\isacommand{apply}\ {\isacharparenleft}erule\ even{\isachardot}induct{\isacharparenright}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   137
\isacommand{apply}\ auto\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   138
\isacommand{done}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
   139
\begin{isamarkuptext}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
   140
proof\ {\isacharparenleft}prove{\isacharparenright}{\isacharcolon}\ step\ {\isadigit{1}}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   141
\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   142
goal\ {\isacharparenleft}lemma\ even{\isacharunderscore}imp{\isacharunderscore}even{\isacharunderscore}minus{\isacharunderscore}{\isadigit{2}}{\isacharparenright}{\isacharcolon}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   143
n\ {\isasymin}\ even\ {\isasymLongrightarrow}\ n\ {\isacharminus}\ {\isacharhash}{\isadigit{2}}\ {\isasymin}\ even\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   144
\ {\isadigit{1}}{\isachardot}\ {\isadigit{0}}\ {\isacharminus}\ {\isacharhash}{\isadigit{2}}\ {\isasymin}\ even\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   145
\ {\isadigit{2}}{\isachardot}\ {\isasymAnd}n{\isachardot}\ {\isasymlbrakk}n\ {\isasymin}\ even{\isacharsemicolon}\ n\ {\isacharminus}\ {\isacharhash}{\isadigit{2}}\ {\isasymin}\ even{\isasymrbrakk}\ {\isasymLongrightarrow}\ Suc\ {\isacharparenleft}Suc\ n{\isacharparenright}\ {\isacharminus}\ {\isacharhash}{\isadigit{2}}\ {\isasymin}\ even%
a17cf465d29a auto generated
paulson
parents:
diff changeset
   146
\end{isamarkuptext}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
   147
%
a17cf465d29a auto generated
paulson
parents:
diff changeset
   148
\begin{isamarkuptext}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
   149
...and prove it in a separate step%
a17cf465d29a auto generated
paulson
parents:
diff changeset
   150
\end{isamarkuptext}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
   151
\isacommand{lemma}\ Suc{\isacharunderscore}Suc{\isacharunderscore}even{\isacharunderscore}imp{\isacharunderscore}even{\isacharcolon}\ {\isachardoublequote}Suc\ {\isacharparenleft}Suc\ n{\isacharparenright}\ {\isasymin}\ even\ {\isasymLongrightarrow}\ n\ {\isasymin}\ even{\isachardoublequote}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   152
\isacommand{apply}\ {\isacharparenleft}drule\ even{\isacharunderscore}imp{\isacharunderscore}even{\isacharunderscore}minus{\isacharunderscore}{\isadigit{2}}{\isacharparenright}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   153
\isacommand{apply}\ simp\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   154
\isacommand{done}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   155
\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   156
\isacommand{lemma}\ {\isacharbrackleft}iff{\isacharbrackright}{\isacharcolon}\ {\isachardoublequote}{\isacharparenleft}{\isacharparenleft}Suc\ {\isacharparenleft}Suc\ n{\isacharparenright}{\isacharparenright}\ {\isasymin}\ even{\isacharparenright}\ {\isacharequal}\ {\isacharparenleft}n\ {\isasymin}\ even{\isacharparenright}{\isachardoublequote}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   157
\isacommand{apply}\ {\isacharparenleft}blast\ dest{\isacharcolon}\ Suc{\isacharunderscore}Suc{\isacharunderscore}even{\isacharunderscore}imp{\isacharunderscore}even{\isacharparenright}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   158
\isacommand{done}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   159
\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   160
\isacommand{end}\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   161
\isanewline
a17cf465d29a auto generated
paulson
parents:
diff changeset
   162
\end{isabellebody}%
a17cf465d29a auto generated
paulson
parents:
diff changeset
   163
%%% Local Variables:
a17cf465d29a auto generated
paulson
parents:
diff changeset
   164
%%% mode: latex
a17cf465d29a auto generated
paulson
parents:
diff changeset
   165
%%% TeX-master: "root"
a17cf465d29a auto generated
paulson
parents:
diff changeset
   166
%%% End: