doc-src/IsarOverview/Isar/document/Logic.tex
author wenzelm
Fri, 04 Nov 2011 17:19:33 +0100
changeset 45340 98ec8b51af9c
parent 40406 313a24b66a8d
permissions -rw-r--r--
prefer global Quotient_Info lookup to accomodate Quotient_Term, which is not quite localized yet (cf. 9fd6fce8a230);
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
     1
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
     2
\begin{isabellebody}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
     3
\def\isabellecontext{Logic}%
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
     4
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
     5
\isadelimtheory
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
     6
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
     7
\endisadelimtheory
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
     8
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
     9
\isatagtheory
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
    10
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
    11
\endisatagtheory
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
    12
{\isafoldtheory}%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
    13
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
    14
\isadelimtheory
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
    15
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
    16
\endisadelimtheory
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
    17
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
    18
\isamarkupsection{Logic \label{sec:Logic}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
    19
}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
    20
\isamarkuptrue%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
    21
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
    22
\isamarkupsubsection{Propositional logic%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
    23
}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
    24
\isamarkuptrue%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
    25
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
    26
\isamarkupsubsubsection{Introduction rules%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
    27
}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
    28
\isamarkuptrue%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
    29
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
    30
\begin{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
    31
We start with a really trivial toy proof to introduce the basic
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
    32
features of structured proofs.%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
    33
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
    34
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
    35
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
    36
\ {\isaliteral{22}{\isachardoublequoteopen}}A\ {\isaliteral{5C3C6C6F6E6772696768746172726F773E}{\isasymlongrightarrow}}\ A{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
    37
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
    38
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
    39
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
    40
\endisadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
    41
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
    42
\isatagproof
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
    43
\isacommand{proof}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
    44
\ {\isaliteral{28}{\isacharparenleft}}rule\ impI{\isaliteral{29}{\isacharparenright}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
    45
\ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
    46
\ a{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}A{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
    47
\ \ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
    48
\ {\isaliteral{22}{\isachardoublequoteopen}}A{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{by}\isamarkupfalse%
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
    49
{\isaliteral{28}{\isacharparenleft}}rule\ a{\isaliteral{29}{\isacharparenright}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
    50
\isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
    51
%
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
    52
\endisatagproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
    53
{\isafoldproof}%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
    54
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
    55
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
    56
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
    57
\endisadelimproof
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
    58
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
    59
\begin{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
    60
\noindent
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
    61
The operational reading: the \isakeyword{assume}-\isakeyword{show}
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
    62
block proves \isa{A\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ A} (\isa{a} is a degenerate rule (no
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
    63
assumptions) that proves \isa{A} outright), which rule
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
    64
\isa{impI} (\isa{{\isaliteral{28}{\isacharparenleft}}{\isaliteral{3F}{\isacharquery}}P\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ {\isaliteral{3F}{\isacharquery}}Q{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ {\isaliteral{3F}{\isacharquery}}P\ {\isaliteral{5C3C6C6F6E6772696768746172726F773E}{\isasymlongrightarrow}}\ {\isaliteral{3F}{\isacharquery}}Q}) turns into the desired \isa{A\ {\isaliteral{5C3C6C6F6E6772696768746172726F773E}{\isasymlongrightarrow}}\ A}.  However, this text is much too detailed for comfort. Therefore
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
    65
Isar implements the following principle: \begin{quote}\em Command
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
    66
\isakeyword{proof} automatically tries to select an introduction rule
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
    67
based on the goal and a predefined list of rules.  \end{quote} Here
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
    68
\isa{impI} is applied automatically:%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
    69
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
    70
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
    71
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
    72
\ {\isaliteral{22}{\isachardoublequoteopen}}A\ {\isaliteral{5C3C6C6F6E6772696768746172726F773E}{\isasymlongrightarrow}}\ A{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
    73
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
    74
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
    75
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
    76
\endisadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
    77
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
    78
\isatagproof
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
    79
\isacommand{proof}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
    80
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
    81
\ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
    82
\ a{\isaliteral{3A}{\isacharcolon}}\ A\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
    83
\ \ \isacommand{show}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
    84
\ A\ \isacommand{by}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
    85
{\isaliteral{28}{\isacharparenleft}}rule\ a{\isaliteral{29}{\isacharparenright}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
    86
\isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
    87
%
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
    88
\endisatagproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
    89
{\isafoldproof}%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
    90
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
    91
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
    92
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
    93
\endisadelimproof
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
    94
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
    95
\begin{isamarkuptext}%
30649
57753e0ec1d4 1. New cancellation simprocs for common factors in inequations
nipkow
parents: 29299
diff changeset
    96
\noindent As you see above, single-identifier formulae such as \isa{A}
57753e0ec1d4 1. New cancellation simprocs for common factors in inequations
nipkow
parents: 29299
diff changeset
    97
need not be enclosed in double quotes. However, we will continue to do so for
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
    98
uniformity.
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
    99
29299
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   100
Instead of applying fact \isa{a} via the \isa{rule} method, we can
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   101
also push it directly onto our goal.  The proof is then immediate,
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   102
which is formally written as ``.'' in Isar:%
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   103
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   104
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   105
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   106
\ {\isaliteral{22}{\isachardoublequoteopen}}A\ {\isaliteral{5C3C6C6F6E6772696768746172726F773E}{\isasymlongrightarrow}}\ A{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   107
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   108
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   109
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   110
\endisadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   111
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   112
\isatagproof
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   113
\isacommand{proof}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   114
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   115
\ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   116
\ a{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}A{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
29299
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   117
\ \ \isacommand{from}\isamarkupfalse%
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   118
\ a\ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   119
\ {\isaliteral{22}{\isachardoublequoteopen}}A{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   120
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   121
\isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   122
%
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   123
\endisatagproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   124
{\isafoldproof}%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   125
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   126
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   127
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   128
\endisadelimproof
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   129
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   130
\begin{isamarkuptext}%
29299
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   131
We can also push several facts towards a goal, and put another
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   132
rule in between to establish some result that is one step further
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   133
removed.  We illustrate this by introducing a trivial conjunction:%
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   134
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   135
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   136
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   137
\ {\isaliteral{22}{\isachardoublequoteopen}}A\ {\isaliteral{5C3C6C6F6E6772696768746172726F773E}{\isasymlongrightarrow}}\ A\ {\isaliteral{5C3C616E643E}{\isasymand}}\ A{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   138
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   139
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   140
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   141
\endisadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   142
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   143
\isatagproof
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   144
\isacommand{proof}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   145
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   146
\ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   147
\ a{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}A{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
29299
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   148
\ \ \isacommand{from}\isamarkupfalse%
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   149
\ a\ \isakeyword{and}\ a\ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   150
\ {\isaliteral{22}{\isachardoublequoteopen}}A\ {\isaliteral{5C3C616E643E}{\isasymand}}\ A{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{by}\isamarkupfalse%
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   151
{\isaliteral{28}{\isacharparenleft}}rule\ conjI{\isaliteral{29}{\isacharparenright}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   152
\isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   153
%
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   154
\endisatagproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   155
{\isafoldproof}%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   156
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   157
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   158
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   159
\endisadelimproof
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   160
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   161
\begin{isamarkuptext}%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   162
\noindent Rule \isa{conjI} is of course \isa{{\isaliteral{5C3C6C6272616B6B3E}{\isasymlbrakk}}{\isaliteral{3F}{\isacharquery}}P{\isaliteral{3B}{\isacharsemicolon}}\ {\isaliteral{3F}{\isacharquery}}Q{\isaliteral{5C3C726272616B6B3E}{\isasymrbrakk}}\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ {\isaliteral{3F}{\isacharquery}}P\ {\isaliteral{5C3C616E643E}{\isasymand}}\ {\isaliteral{3F}{\isacharquery}}Q}.
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   163
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   164
Proofs of the form \isakeyword{by}\isa{{\isaliteral{28}{\isacharparenleft}}rule}~\emph{name}\isa{{\isaliteral{29}{\isacharparenright}}}
29299
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   165
can be abbreviated to ``..'' if \emph{name} refers to one of the
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   166
predefined introduction rules (or elimination rules, see below):%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   167
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   168
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   169
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   170
\ {\isaliteral{22}{\isachardoublequoteopen}}A\ {\isaliteral{5C3C6C6F6E6772696768746172726F773E}{\isasymlongrightarrow}}\ A\ {\isaliteral{5C3C616E643E}{\isasymand}}\ A{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   171
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   172
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   173
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   174
\endisadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   175
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   176
\isatagproof
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   177
\isacommand{proof}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   178
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   179
\ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   180
\ a{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}A{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
29299
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   181
\ \ \isacommand{from}\isamarkupfalse%
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   182
\ a\ \isakeyword{and}\ a\ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   183
\ {\isaliteral{22}{\isachardoublequoteopen}}A\ {\isaliteral{5C3C616E643E}{\isasymand}}\ A{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   184
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   185
\isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   186
%
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   187
\endisatagproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   188
{\isafoldproof}%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   189
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   190
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   191
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   192
\endisadelimproof
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   193
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   194
\begin{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   195
\noindent
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   196
This is what happens: first the matching introduction rule \isa{conjI}
29299
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   197
is applied (first ``.''), the remaining problem is solved immediately (second ``.'').%
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   198
\end{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   199
\isamarkuptrue%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   200
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   201
\isamarkupsubsubsection{Elimination rules%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   202
}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   203
\isamarkuptrue%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   204
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   205
\begin{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   206
A typical elimination rule is \isa{conjE}, $\land$-elimination:
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   207
\begin{isabelle}%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   208
\ \ \ \ \ {\isaliteral{5C3C6C6272616B6B3E}{\isasymlbrakk}}{\isaliteral{3F}{\isacharquery}}P\ {\isaliteral{5C3C616E643E}{\isasymand}}\ {\isaliteral{3F}{\isacharquery}}Q{\isaliteral{3B}{\isacharsemicolon}}\ {\isaliteral{5C3C6C6272616B6B3E}{\isasymlbrakk}}{\isaliteral{3F}{\isacharquery}}P{\isaliteral{3B}{\isacharsemicolon}}\ {\isaliteral{3F}{\isacharquery}}Q{\isaliteral{5C3C726272616B6B3E}{\isasymrbrakk}}\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ {\isaliteral{3F}{\isacharquery}}R{\isaliteral{5C3C726272616B6B3E}{\isasymrbrakk}}\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ {\isaliteral{3F}{\isacharquery}}R%
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   209
\end{isabelle}  In the following proof it is applied
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   210
by hand, after its first (\emph{major}) premise has been eliminated via
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   211
\isa{{\isaliteral{5B}{\isacharbrackleft}}OF\ ab{\isaliteral{5D}{\isacharbrackright}}}:%
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   212
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   213
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   214
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   215
\ {\isaliteral{22}{\isachardoublequoteopen}}A\ {\isaliteral{5C3C616E643E}{\isasymand}}\ B\ {\isaliteral{5C3C6C6F6E6772696768746172726F773E}{\isasymlongrightarrow}}\ B\ {\isaliteral{5C3C616E643E}{\isasymand}}\ A{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   216
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   217
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   218
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   219
\endisadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   220
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   221
\isatagproof
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   222
\isacommand{proof}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   223
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   224
\ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   225
\ ab{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}A\ {\isaliteral{5C3C616E643E}{\isasymand}}\ B{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   226
\ \ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   227
\ {\isaliteral{22}{\isachardoublequoteopen}}B\ {\isaliteral{5C3C616E643E}{\isasymand}}\ A{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   228
\ \ \isacommand{proof}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   229
\ {\isaliteral{28}{\isacharparenleft}}rule\ conjE{\isaliteral{5B}{\isacharbrackleft}}OF\ ab{\isaliteral{5D}{\isacharbrackright}}{\isaliteral{29}{\isacharparenright}}\ \ %
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   230
\isamarkupcmt{\isa{conjE{\isaliteral{5B}{\isacharbrackleft}}OF\ ab{\isaliteral{5D}{\isacharbrackright}}}: \isa{{\isaliteral{28}{\isacharparenleft}}{\isaliteral{5C3C6C6272616B6B3E}{\isasymlbrakk}}A{\isaliteral{3B}{\isacharsemicolon}}\ B{\isaliteral{5C3C726272616B6B3E}{\isasymrbrakk}}\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ {\isaliteral{3F}{\isacharquery}}R{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ {\isaliteral{3F}{\isacharquery}}R}%
16459
7efee005e568 updated;
wenzelm
parents: 15909
diff changeset
   231
}
7efee005e568 updated;
wenzelm
parents: 15909
diff changeset
   232
\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   233
\ \ \ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   234
\ a{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}A{\isaliteral{22}{\isachardoublequoteclose}}\ \isakeyword{and}\ b{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}B{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
29299
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   235
\ \ \ \ \isacommand{from}\isamarkupfalse%
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   236
\ b\ \isakeyword{and}\ a\ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   237
\ {\isaliteral{3F}{\isacharquery}}thesis\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   238
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   239
\ \ \isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   240
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   241
\isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   242
%
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   243
\endisatagproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   244
{\isafoldproof}%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   245
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   246
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   247
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   248
\endisadelimproof
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   249
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   250
\begin{isamarkuptext}%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   251
\noindent Note that the term \isa{{\isaliteral{3F}{\isacharquery}}thesis} always stands for the
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   252
``current goal'', i.e.\ the enclosing \isakeyword{show} (or
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   253
\isakeyword{have}) statement.
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   254
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   255
This is too much proof text. Elimination rules should be selected
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   256
automatically based on their major premise, the formula or rather connective
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   257
to be eliminated. In Isar they are triggered by facts being fed
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   258
\emph{into} a proof. Syntax:
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   259
\begin{center}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   260
\isakeyword{from} \emph{fact} \isakeyword{show} \emph{proposition} \emph{proof}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   261
\end{center}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   262
where \emph{fact} stands for the name of a previously proved
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   263
proposition, e.g.\ an assumption, an intermediate result or some global
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   264
theorem, which may also be modified with \isa{OF} etc.
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   265
The \emph{fact} is ``piped'' into the \emph{proof}, which can deal with it
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   266
how it chooses. If the \emph{proof} starts with a plain \isakeyword{proof},
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   267
an elimination rule (from a predefined list) is applied
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   268
whose first premise is solved by the \emph{fact}. Thus the proof above
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   269
is equivalent to the following one:%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   270
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   271
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   272
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   273
\ {\isaliteral{22}{\isachardoublequoteopen}}A\ {\isaliteral{5C3C616E643E}{\isasymand}}\ B\ {\isaliteral{5C3C6C6F6E6772696768746172726F773E}{\isasymlongrightarrow}}\ B\ {\isaliteral{5C3C616E643E}{\isasymand}}\ A{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   274
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   275
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   276
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   277
\endisadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   278
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   279
\isatagproof
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   280
\isacommand{proof}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   281
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   282
\ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   283
\ ab{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}A\ {\isaliteral{5C3C616E643E}{\isasymand}}\ B{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   284
\ \ \isacommand{from}\isamarkupfalse%
29299
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   285
\ ab\ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   286
\ {\isaliteral{22}{\isachardoublequoteopen}}B\ {\isaliteral{5C3C616E643E}{\isasymand}}\ A{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   287
\ \ \isacommand{proof}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   288
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   289
\ \ \ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   290
\ a{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}A{\isaliteral{22}{\isachardoublequoteclose}}\ \isakeyword{and}\ b{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}B{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
29299
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   291
\ \ \ \ \isacommand{from}\isamarkupfalse%
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   292
\ b\ \isakeyword{and}\ a\ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   293
\ {\isaliteral{3F}{\isacharquery}}thesis\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   294
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   295
\ \ \isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   296
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   297
\isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   298
%
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   299
\endisatagproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   300
{\isafoldproof}%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   301
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   302
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   303
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   304
\endisadelimproof
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   305
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   306
\begin{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   307
Now we come to a second important principle:
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   308
\begin{quote}\em
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   309
Try to arrange the sequence of propositions in a UNIX-like pipe,
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   310
such that the proof of each proposition builds on the previous proposition.
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   311
\end{quote}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   312
The previous proposition can be referred to via the fact \isa{this}.
29299
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   313
This greatly reduces the need for explicit naming of propositions.  We also
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   314
rearrange the additional inner assumptions into proper order for immediate use:%
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   315
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   316
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   317
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   318
\ {\isaliteral{22}{\isachardoublequoteopen}}A\ {\isaliteral{5C3C616E643E}{\isasymand}}\ B\ {\isaliteral{5C3C6C6F6E6772696768746172726F773E}{\isasymlongrightarrow}}\ B\ {\isaliteral{5C3C616E643E}{\isasymand}}\ A{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   319
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   320
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   321
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   322
\endisadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   323
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   324
\isatagproof
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   325
\isacommand{proof}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   326
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   327
\ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   328
\ {\isaliteral{22}{\isachardoublequoteopen}}A\ {\isaliteral{5C3C616E643E}{\isasymand}}\ B{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   329
\ \ \isacommand{from}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   330
\ this\ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   331
\ {\isaliteral{22}{\isachardoublequoteopen}}B\ {\isaliteral{5C3C616E643E}{\isasymand}}\ A{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   332
\ \ \isacommand{proof}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   333
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   334
\ \ \ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   335
\ {\isaliteral{22}{\isachardoublequoteopen}}B{\isaliteral{22}{\isachardoublequoteclose}}\ {\isaliteral{22}{\isachardoublequoteopen}}A{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
29299
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   336
\ \ \ \ \isacommand{from}\isamarkupfalse%
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   337
\ this\ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   338
\ {\isaliteral{3F}{\isacharquery}}thesis\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   339
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   340
\ \ \isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   341
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   342
\isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   343
%
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   344
\endisatagproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   345
{\isafoldproof}%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   346
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   347
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   348
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   349
\endisadelimproof
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   350
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   351
\begin{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   352
\noindent Because of the frequency of \isakeyword{from}~\isa{this}, Isar provides two abbreviations:
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   353
\begin{center}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   354
\begin{tabular}{r@ {\quad=\quad}l}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   355
\isakeyword{then} & \isakeyword{from} \isa{this} \\
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   356
\isakeyword{thus} & \isakeyword{then} \isakeyword{show}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   357
\end{tabular}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   358
\end{center}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   359
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   360
Here is an alternative proof that operates purely by forward reasoning:%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   361
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   362
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   363
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   364
\ {\isaliteral{22}{\isachardoublequoteopen}}A\ {\isaliteral{5C3C616E643E}{\isasymand}}\ B\ {\isaliteral{5C3C6C6F6E6772696768746172726F773E}{\isasymlongrightarrow}}\ B\ {\isaliteral{5C3C616E643E}{\isasymand}}\ A{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   365
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   366
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   367
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   368
\endisadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   369
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   370
\isatagproof
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   371
\isacommand{proof}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   372
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   373
\ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   374
\ ab{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}A\ {\isaliteral{5C3C616E643E}{\isasymand}}\ B{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   375
\ \ \isacommand{from}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   376
\ ab\ \isacommand{have}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   377
\ a{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}A{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   378
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   379
\ \ \isacommand{from}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   380
\ ab\ \isacommand{have}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   381
\ b{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}B{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   382
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   383
\ \ \isacommand{from}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   384
\ b\ a\ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   385
\ {\isaliteral{22}{\isachardoublequoteopen}}B\ {\isaliteral{5C3C616E643E}{\isasymand}}\ A{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   386
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   387
\isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   388
%
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   389
\endisatagproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   390
{\isafoldproof}%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   391
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   392
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   393
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   394
\endisadelimproof
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   395
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   396
\begin{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   397
\noindent It is worth examining this text in detail because it
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   398
exhibits a number of new concepts.  For a start, it is the first time
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   399
we have proved intermediate propositions (\isakeyword{have}) on the
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   400
way to the final \isakeyword{show}. This is the norm in nontrivial
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   401
proofs where one cannot bridge the gap between the assumptions and the
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   402
conclusion in one step. To understand how the proof works we need to
25412
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   403
explain more Isar details:
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   404
\begin{itemize}
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   405
\item
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   406
Method \isa{rule} can be given a list of rules, in which case
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   407
\isa{{\isaliteral{28}{\isacharparenleft}}rule}~\textit{rules}\isa{{\isaliteral{29}{\isacharparenright}}} applies the first matching
25412
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   408
rule in the list \textit{rules}.
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   409
\item Command \isakeyword{from} can be
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   410
followed by any number of facts.  Given \isakeyword{from}~\isa{f}$_1$~\dots~\isa{f}$_n$, the proof step
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   411
\isa{{\isaliteral{28}{\isacharparenleft}}rule}~\textit{rules}\isa{{\isaliteral{29}{\isacharparenright}}} following a \isakeyword{have}
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   412
or \isakeyword{show} searches \textit{rules} for a rule whose first
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   413
$n$ premises can be proved by \isa{f}$_1$~\dots~\isa{f}$_n$ in the
25412
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   414
given order.
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   415
\item ``..'' is short for
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   416
\isa{by{\isaliteral{28}{\isacharparenleft}}rule}~\textit{elim-rules intro-rules}\isa{{\isaliteral{29}{\isacharparenright}}}\footnote{or
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   417
merely \isa{{\isaliteral{28}{\isacharparenleft}}rule}~\textit{intro-rules}\isa{{\isaliteral{29}{\isacharparenright}}} if there are no facts
25412
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   418
fed into the proof}, where \textit{elim-rules} and \textit{intro-rules}
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   419
are the predefined elimination and introduction rule. Thus
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   420
elimination rules are tried first (if there are incoming facts).
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   421
\end{itemize}
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   422
Hence in the above proof both \isakeyword{have}s are proved via
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   423
\isa{conjE} triggered by \isakeyword{from}~\isa{ab} whereas
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   424
in the \isakeyword{show} step no elimination rule is applicable and
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   425
the proof succeeds with \isa{conjI}. The latter would fail had
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   426
we written \isakeyword{from}~\isa{a\ b} instead of
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   427
\isakeyword{from}~\isa{b\ a}.
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   428
25412
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   429
A plain \isakeyword{proof} with no argument is short for
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   430
\isakeyword{proof}~\isa{{\isaliteral{28}{\isacharparenleft}}rule}~\textit{elim-rules intro-rules}\isa{{\isaliteral{29}{\isacharparenright}}}\footnotemark[1].
25412
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   431
This means that the matching rule is selected by the incoming facts and the goal exactly as just explained.
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   432
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   433
Although we have only seen a few introduction and elimination rules so
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   434
far, Isar's predefined rules include all the usual natural deduction
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   435
rules. We conclude our exposition of propositional logic with an extended
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   436
example --- which rules are used implicitly where?%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   437
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   438
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   439
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   440
\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C6E6F743E}{\isasymnot}}\ {\isaliteral{28}{\isacharparenleft}}A\ {\isaliteral{5C3C616E643E}{\isasymand}}\ B{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{5C3C6C6F6E6772696768746172726F773E}{\isasymlongrightarrow}}\ {\isaliteral{5C3C6E6F743E}{\isasymnot}}\ A\ {\isaliteral{5C3C6F723E}{\isasymor}}\ {\isaliteral{5C3C6E6F743E}{\isasymnot}}\ B{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   441
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   442
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   443
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   444
\endisadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   445
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   446
\isatagproof
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   447
\isacommand{proof}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   448
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   449
\ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   450
\ n{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C6E6F743E}{\isasymnot}}\ {\isaliteral{28}{\isacharparenleft}}A\ {\isaliteral{5C3C616E643E}{\isasymand}}\ B{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   451
\ \ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   452
\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C6E6F743E}{\isasymnot}}\ A\ {\isaliteral{5C3C6F723E}{\isasymor}}\ {\isaliteral{5C3C6E6F743E}{\isasymnot}}\ B{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   453
\ \ \isacommand{proof}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   454
\ {\isaliteral{28}{\isacharparenleft}}rule\ ccontr{\isaliteral{29}{\isacharparenright}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   455
\ \ \ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   456
\ nn{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C6E6F743E}{\isasymnot}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{5C3C6E6F743E}{\isasymnot}}\ A\ {\isaliteral{5C3C6F723E}{\isasymor}}\ {\isaliteral{5C3C6E6F743E}{\isasymnot}}\ B{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   457
\ \ \ \ \isacommand{have}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   458
\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C6E6F743E}{\isasymnot}}\ A{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   459
\ \ \ \ \isacommand{proof}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   460
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   461
\ \ \ \ \ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   462
\ a{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}A{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   463
\ \ \ \ \ \ \isacommand{have}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   464
\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C6E6F743E}{\isasymnot}}\ B{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   465
\ \ \ \ \ \ \isacommand{proof}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   466
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   467
\ \ \ \ \ \ \ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   468
\ b{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}B{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
29299
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   469
\ \ \ \ \ \ \ \ \isacommand{from}\isamarkupfalse%
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   470
\ a\ \isakeyword{and}\ b\ \isacommand{have}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   471
\ {\isaliteral{22}{\isachardoublequoteopen}}A\ {\isaliteral{5C3C616E643E}{\isasymand}}\ B{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   472
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   473
\ \ \ \ \ \ \ \ \isacommand{with}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   474
\ n\ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   475
\ False\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   476
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   477
\ \ \ \ \ \ \isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   478
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   479
\ \ \ \ \ \ \isacommand{hence}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   480
\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C6E6F743E}{\isasymnot}}\ A\ {\isaliteral{5C3C6F723E}{\isasymor}}\ {\isaliteral{5C3C6E6F743E}{\isasymnot}}\ B{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   481
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   482
\ \ \ \ \ \ \isacommand{with}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   483
\ nn\ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   484
\ False\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   485
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   486
\ \ \ \ \isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   487
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   488
\ \ \ \ \isacommand{hence}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   489
\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C6E6F743E}{\isasymnot}}\ A\ {\isaliteral{5C3C6F723E}{\isasymor}}\ {\isaliteral{5C3C6E6F743E}{\isasymnot}}\ B{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   490
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   491
\ \ \ \ \isacommand{with}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   492
\ nn\ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   493
\ False\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   494
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   495
\ \ \isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   496
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   497
\isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   498
%
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   499
\endisatagproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   500
{\isafoldproof}%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   501
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   502
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   503
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   504
\endisadelimproof
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   505
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   506
\begin{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   507
\noindent
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   508
Rule \isa{ccontr} (``classical contradiction'') is
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   509
\isa{{\isaliteral{28}{\isacharparenleft}}{\isaliteral{5C3C6E6F743E}{\isasymnot}}\ P\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ False{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ P}.
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   510
Apart from demonstrating the strangeness of classical
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   511
arguments by contradiction, this example also introduces two new
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   512
abbreviations:
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   513
\begin{center}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   514
\begin{tabular}{l@ {\quad=\quad}l}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   515
\isakeyword{hence} & \isakeyword{then} \isakeyword{have} \\
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   516
\isakeyword{with}~\emph{facts} &
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   517
\isakeyword{from}~\emph{facts} \isa{this}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   518
\end{tabular}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   519
\end{center}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   520
\end{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   521
\isamarkuptrue%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   522
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   523
\isamarkupsubsection{Avoiding duplication%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   524
}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   525
\isamarkuptrue%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   526
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   527
\begin{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   528
So far our examples have been a bit unnatural: normally we want to
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   529
prove rules expressed with \isa{{\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}}, not \isa{{\isaliteral{5C3C6C6F6E6772696768746172726F773E}{\isasymlongrightarrow}}}. Here is an example:%
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   530
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   531
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   532
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   533
\ {\isaliteral{22}{\isachardoublequoteopen}}A\ {\isaliteral{5C3C616E643E}{\isasymand}}\ B\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ B\ {\isaliteral{5C3C616E643E}{\isasymand}}\ A{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   534
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   535
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   536
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   537
\endisadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   538
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   539
\isatagproof
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   540
\isacommand{proof}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   541
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   542
\ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   543
\ {\isaliteral{22}{\isachardoublequoteopen}}A\ {\isaliteral{5C3C616E643E}{\isasymand}}\ B{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{thus}\isamarkupfalse%
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   544
\ {\isaliteral{22}{\isachardoublequoteopen}}B{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   545
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   546
\isacommand{next}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   547
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   548
\ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   549
\ {\isaliteral{22}{\isachardoublequoteopen}}A\ {\isaliteral{5C3C616E643E}{\isasymand}}\ B{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{thus}\isamarkupfalse%
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   550
\ {\isaliteral{22}{\isachardoublequoteopen}}A{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   551
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   552
\isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   553
%
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   554
\endisatagproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   555
{\isafoldproof}%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   556
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   557
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   558
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   559
\endisadelimproof
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   560
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   561
\begin{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   562
\noindent The \isakeyword{proof} always works on the conclusion,
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   563
\isa{B\ {\isaliteral{5C3C616E643E}{\isasymand}}\ A} in our case, thus selecting $\land$-introduction. Hence
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   564
we must show \isa{B} and \isa{A}; both are proved by
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   565
$\land$-elimination and the proofs are separated by \isakeyword{next}:
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   566
\begin{description}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   567
\item[\isakeyword{next}] deals with multiple subgoals. For example,
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   568
when showing \isa{A\ {\isaliteral{5C3C616E643E}{\isasymand}}\ B} we need to show both \isa{A} and \isa{B}.  Each subgoal is proved separately, in \emph{any} order. The
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   569
individual proofs are separated by \isakeyword{next}.  \footnote{Each
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   570
\isakeyword{show} must prove one of the pending subgoals.  If a
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   571
\isakeyword{show} matches multiple subgoals, e.g.\ if the subgoals
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   572
contain ?-variables, the first one is proved. Thus the order in which
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   573
the subgoals are proved can matter --- see
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   574
\S\ref{sec:CaseDistinction} for an example.}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   575
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   576
Strictly speaking \isakeyword{next} is only required if the subgoals
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   577
are proved in different assumption contexts which need to be
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   578
separated, which is not the case above. For clarity we
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   579
have employed \isakeyword{next} anyway and will continue to do so.
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   580
\end{description}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   581
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   582
This is all very well as long as formulae are small. Let us now look at some
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   583
devices to avoid repeating (possibly large) formulae. A very general method
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   584
is pattern matching:%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   585
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   586
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   587
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   588
\ {\isaliteral{22}{\isachardoublequoteopen}}large{\isaliteral{5F}{\isacharunderscore}}A\ {\isaliteral{5C3C616E643E}{\isasymand}}\ large{\isaliteral{5F}{\isacharunderscore}}B\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ large{\isaliteral{5F}{\isacharunderscore}}B\ {\isaliteral{5C3C616E643E}{\isasymand}}\ large{\isaliteral{5F}{\isacharunderscore}}A{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   589
\ \ \ \ \ \ {\isaliteral{28}{\isacharparenleft}}\isakeyword{is}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{3F}{\isacharquery}}AB\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ {\isaliteral{3F}{\isacharquery}}B\ {\isaliteral{5C3C616E643E}{\isasymand}}\ {\isaliteral{3F}{\isacharquery}}A{\isaliteral{22}{\isachardoublequoteclose}}{\isaliteral{29}{\isacharparenright}}\isanewline
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   590
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   591
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   592
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   593
\endisadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   594
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   595
\isatagproof
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   596
\isacommand{proof}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   597
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   598
\ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   599
\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{3F}{\isacharquery}}AB{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{thus}\isamarkupfalse%
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   600
\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{3F}{\isacharquery}}B{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   601
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   602
\isacommand{next}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   603
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   604
\ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   605
\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{3F}{\isacharquery}}AB{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{thus}\isamarkupfalse%
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   606
\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{3F}{\isacharquery}}A{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   607
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   608
\isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   609
%
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   610
\endisatagproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   611
{\isafoldproof}%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   612
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   613
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   614
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   615
\endisadelimproof
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   616
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   617
\begin{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   618
\noindent Any formula may be followed by
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   619
\isa{{\isaliteral{28}{\isacharparenleft}}}\isakeyword{is}~\emph{pattern}\isa{{\isaliteral{29}{\isacharparenright}}} which causes the pattern
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   620
to be matched against the formula, instantiating the \isa{{\isaliteral{3F}{\isacharquery}}}-variables in
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   621
the pattern. Subsequent uses of these variables in other terms causes
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   622
them to be replaced by the terms they stand for.
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   623
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   624
We can simplify things even more by stating the theorem by means of the
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   625
\isakeyword{assumes} and \isakeyword{shows} elements which allow direct
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   626
naming of assumptions:%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   627
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   628
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   629
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   630
\ \isakeyword{assumes}\ ab{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}large{\isaliteral{5F}{\isacharunderscore}}A\ {\isaliteral{5C3C616E643E}{\isasymand}}\ large{\isaliteral{5F}{\isacharunderscore}}B{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   631
\ \ \isakeyword{shows}\ {\isaliteral{22}{\isachardoublequoteopen}}large{\isaliteral{5F}{\isacharunderscore}}B\ {\isaliteral{5C3C616E643E}{\isasymand}}\ large{\isaliteral{5F}{\isacharunderscore}}A{\isaliteral{22}{\isachardoublequoteclose}}\ {\isaliteral{28}{\isacharparenleft}}\isakeyword{is}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{3F}{\isacharquery}}B\ {\isaliteral{5C3C616E643E}{\isasymand}}\ {\isaliteral{3F}{\isacharquery}}A{\isaliteral{22}{\isachardoublequoteclose}}{\isaliteral{29}{\isacharparenright}}\isanewline
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   632
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   633
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   634
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   635
\endisadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   636
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   637
\isatagproof
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   638
\isacommand{proof}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   639
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   640
\ \ \isacommand{from}\isamarkupfalse%
29299
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   641
\ ab\ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   642
\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{3F}{\isacharquery}}B{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   643
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   644
\isacommand{next}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   645
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   646
\ \ \isacommand{from}\isamarkupfalse%
29299
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   647
\ ab\ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   648
\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{3F}{\isacharquery}}A{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   649
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   650
\isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   651
%
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   652
\endisatagproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   653
{\isafoldproof}%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   654
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   655
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   656
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   657
\endisadelimproof
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   658
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   659
\begin{isamarkuptext}%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   660
\noindent Note the difference between \isa{{\isaliteral{3F}{\isacharquery}}AB}, a term, and
29299
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   661
\isa{ab}, a fact.
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   662
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   663
Finally we want to start the proof with $\land$-elimination so we
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   664
don't have to perform it twice, as above. Here is a slick way to
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   665
achieve this:%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   666
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   667
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   668
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   669
\ \isakeyword{assumes}\ ab{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}large{\isaliteral{5F}{\isacharunderscore}}A\ {\isaliteral{5C3C616E643E}{\isasymand}}\ large{\isaliteral{5F}{\isacharunderscore}}B{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   670
\ \ \isakeyword{shows}\ {\isaliteral{22}{\isachardoublequoteopen}}large{\isaliteral{5F}{\isacharunderscore}}B\ {\isaliteral{5C3C616E643E}{\isasymand}}\ large{\isaliteral{5F}{\isacharunderscore}}A{\isaliteral{22}{\isachardoublequoteclose}}\ {\isaliteral{28}{\isacharparenleft}}\isakeyword{is}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{3F}{\isacharquery}}B\ {\isaliteral{5C3C616E643E}{\isasymand}}\ {\isaliteral{3F}{\isacharquery}}A{\isaliteral{22}{\isachardoublequoteclose}}{\isaliteral{29}{\isacharparenright}}\isanewline
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   671
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   672
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   673
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   674
\endisadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   675
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   676
\isatagproof
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   677
\isacommand{using}\isamarkupfalse%
29299
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   678
\ ab\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   679
\isacommand{proof}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   680
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   681
\ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   682
\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{3F}{\isacharquery}}B{\isaliteral{22}{\isachardoublequoteclose}}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{3F}{\isacharquery}}A{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{thus}\isamarkupfalse%
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   683
\ {\isaliteral{3F}{\isacharquery}}thesis\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   684
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   685
\isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   686
%
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   687
\endisatagproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   688
{\isafoldproof}%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   689
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   690
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   691
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   692
\endisadelimproof
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   693
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   694
\begin{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   695
\noindent Command \isakeyword{using} can appear before a proof
29299
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   696
and adds further facts to those piped into the proof. Here \isa{ab}
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   697
is the only such fact and it triggers $\land$-elimination. Another
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   698
frequent idiom is as follows:
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   699
\begin{center}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   700
\isakeyword{from} \emph{major-facts}~
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   701
\isakeyword{show} \emph{proposition}~
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   702
\isakeyword{using} \emph{minor-facts}~
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   703
\emph{proof}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   704
\end{center}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   705
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   706
Sometimes it is necessary to suppress the implicit application of rules in a
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   707
\isakeyword{proof}. For example \isakeyword{show(s)}~\isa{{\isaliteral{22}{\isachardoublequote}}P\ {\isaliteral{5C3C6F723E}{\isasymor}}\ Q{\isaliteral{22}{\isachardoublequote}}}
27171
nipkow
parents: 25427
diff changeset
   708
would trigger $\lor$-introduction, requiring us to prove \isa{P}, which may
nipkow
parents: 25427
diff changeset
   709
not be what we had in mind.
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   710
A simple ``\isa{{\isaliteral{2D}{\isacharminus}}}'' prevents this \emph{faux pas}:%
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   711
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   712
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   713
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   714
\ \isakeyword{assumes}\ ab{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}A\ {\isaliteral{5C3C6F723E}{\isasymor}}\ B{\isaliteral{22}{\isachardoublequoteclose}}\ \isakeyword{shows}\ {\isaliteral{22}{\isachardoublequoteopen}}B\ {\isaliteral{5C3C6F723E}{\isasymor}}\ A{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   715
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   716
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   717
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   718
\endisadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   719
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   720
\isatagproof
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   721
\isacommand{proof}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   722
\ {\isaliteral{2D}{\isacharminus}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   723
\ \ \isacommand{from}\isamarkupfalse%
29299
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   724
\ ab\ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   725
\ {\isaliteral{3F}{\isacharquery}}thesis\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   726
\ \ \isacommand{proof}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   727
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   728
\ \ \ \ \isacommand{assume}\isamarkupfalse%
29299
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   729
\ A\ \isacommand{thus}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   730
\ {\isaliteral{3F}{\isacharquery}}thesis\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   731
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   732
\ \ \isacommand{next}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   733
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   734
\ \ \ \ \isacommand{assume}\isamarkupfalse%
29299
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   735
\ B\ \isacommand{thus}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   736
\ {\isaliteral{3F}{\isacharquery}}thesis\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   737
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   738
\ \ \isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   739
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   740
\isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   741
%
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   742
\endisatagproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   743
{\isafoldproof}%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   744
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   745
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   746
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   747
\endisadelimproof
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   748
%
19840
600c35fd1b5e added quoting via back quotes
nipkow
parents: 17187
diff changeset
   749
\begin{isamarkuptext}%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   750
\noindent Alternatively one can feed \isa{A\ {\isaliteral{5C3C6F723E}{\isasymor}}\ B} directly
25412
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   751
into the proof, thus triggering the elimination rule:%
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   752
\end{isamarkuptext}%
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   753
\isamarkuptrue%
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   754
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   755
\ \isakeyword{assumes}\ ab{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}A\ {\isaliteral{5C3C6F723E}{\isasymor}}\ B{\isaliteral{22}{\isachardoublequoteclose}}\ \isakeyword{shows}\ {\isaliteral{22}{\isachardoublequoteopen}}B\ {\isaliteral{5C3C6F723E}{\isasymor}}\ A{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
25412
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   756
%
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   757
\isadelimproof
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   758
%
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   759
\endisadelimproof
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   760
%
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   761
\isatagproof
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   762
\isacommand{using}\isamarkupfalse%
29299
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   763
\ ab\isanewline
25412
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   764
\isacommand{proof}\isamarkupfalse%
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   765
\isanewline
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   766
\ \ \isacommand{assume}\isamarkupfalse%
29299
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   767
\ A\ \isacommand{thus}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   768
\ {\isaliteral{3F}{\isacharquery}}thesis\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
25412
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   769
\isanewline
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   770
\isacommand{next}\isamarkupfalse%
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   771
\isanewline
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   772
\ \ \isacommand{assume}\isamarkupfalse%
29299
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   773
\ B\ \isacommand{thus}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   774
\ {\isaliteral{3F}{\isacharquery}}thesis\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
25412
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   775
\isanewline
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   776
\isacommand{qed}\isamarkupfalse%
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   777
%
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   778
\endisatagproof
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   779
{\isafoldproof}%
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   780
%
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   781
\isadelimproof
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   782
%
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   783
\endisadelimproof
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   784
%
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   785
\begin{isamarkuptext}%
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   786
\noindent Remember that eliminations have priority over
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   787
introductions.
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   788
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   789
\subsection{Avoiding names}
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   790
19840
600c35fd1b5e added quoting via back quotes
nipkow
parents: 17187
diff changeset
   791
Too many names can easily clutter a proof.  We already learned
600c35fd1b5e added quoting via back quotes
nipkow
parents: 17187
diff changeset
   792
about \isa{this} as a means of avoiding explicit names. Another
600c35fd1b5e added quoting via back quotes
nipkow
parents: 17187
diff changeset
   793
handy device is to refer to a fact not by name but by contents: for
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   794
example, writing \isa{{\isaliteral{60}{\isacharbackquote}}A\ {\isaliteral{5C3C6F723E}{\isasymor}}\ B{\isaliteral{60}{\isacharbackquote}}} (enclosing the formula in back quotes)
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   795
refers to the fact \isa{A\ {\isaliteral{5C3C6F723E}{\isasymor}}\ B}
19840
600c35fd1b5e added quoting via back quotes
nipkow
parents: 17187
diff changeset
   796
without the need to name it. Here is a simple example, a revised version
600c35fd1b5e added quoting via back quotes
nipkow
parents: 17187
diff changeset
   797
of the previous proof%
600c35fd1b5e added quoting via back quotes
nipkow
parents: 17187
diff changeset
   798
\end{isamarkuptext}%
600c35fd1b5e added quoting via back quotes
nipkow
parents: 17187
diff changeset
   799
\isamarkuptrue%
600c35fd1b5e added quoting via back quotes
nipkow
parents: 17187
diff changeset
   800
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   801
\ \isakeyword{assumes}\ {\isaliteral{22}{\isachardoublequoteopen}}A\ {\isaliteral{5C3C6F723E}{\isasymor}}\ B{\isaliteral{22}{\isachardoublequoteclose}}\ \isakeyword{shows}\ {\isaliteral{22}{\isachardoublequoteopen}}B\ {\isaliteral{5C3C6F723E}{\isasymor}}\ A{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
19840
600c35fd1b5e added quoting via back quotes
nipkow
parents: 17187
diff changeset
   802
%
600c35fd1b5e added quoting via back quotes
nipkow
parents: 17187
diff changeset
   803
\isadelimproof
600c35fd1b5e added quoting via back quotes
nipkow
parents: 17187
diff changeset
   804
%
600c35fd1b5e added quoting via back quotes
nipkow
parents: 17187
diff changeset
   805
\endisadelimproof
600c35fd1b5e added quoting via back quotes
nipkow
parents: 17187
diff changeset
   806
%
600c35fd1b5e added quoting via back quotes
nipkow
parents: 17187
diff changeset
   807
\isatagproof
25412
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   808
\isacommand{using}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   809
\ {\isaliteral{60}{\isacharbackquoteopen}}A\ {\isaliteral{5C3C6F723E}{\isasymor}}\ B{\isaliteral{60}{\isacharbackquoteclose}}%
19840
600c35fd1b5e added quoting via back quotes
nipkow
parents: 17187
diff changeset
   810
\endisatagproof
600c35fd1b5e added quoting via back quotes
nipkow
parents: 17187
diff changeset
   811
{\isafoldproof}%
600c35fd1b5e added quoting via back quotes
nipkow
parents: 17187
diff changeset
   812
%
600c35fd1b5e added quoting via back quotes
nipkow
parents: 17187
diff changeset
   813
\isadelimproof
600c35fd1b5e added quoting via back quotes
nipkow
parents: 17187
diff changeset
   814
%
600c35fd1b5e added quoting via back quotes
nipkow
parents: 17187
diff changeset
   815
\endisadelimproof
600c35fd1b5e added quoting via back quotes
nipkow
parents: 17187
diff changeset
   816
%
600c35fd1b5e added quoting via back quotes
nipkow
parents: 17187
diff changeset
   817
\begin{isamarkuptext}%
600c35fd1b5e added quoting via back quotes
nipkow
parents: 17187
diff changeset
   818
\noindent which continues as before.
600c35fd1b5e added quoting via back quotes
nipkow
parents: 17187
diff changeset
   819
600c35fd1b5e added quoting via back quotes
nipkow
parents: 17187
diff changeset
   820
Clearly, this device of quoting facts by contents is only advisable
600c35fd1b5e added quoting via back quotes
nipkow
parents: 17187
diff changeset
   821
for small formulae. In such cases it is superior to naming because the
600c35fd1b5e added quoting via back quotes
nipkow
parents: 17187
diff changeset
   822
reader immediately sees what the fact is without needing to search for
25412
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   823
it in the preceding proof text.
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   824
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   825
The assumptions of a lemma can also be referred to via their
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   826
predefined name \isa{assms}. Hence the \isa{{\isaliteral{60}{\isacharbackquote}}A\ {\isaliteral{5C3C6F723E}{\isasymor}}\ B{\isaliteral{60}{\isacharbackquote}}} in the
25412
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   827
previous proof can also be replaced by \isa{assms}. Note that \isa{assms} refers to the list of \emph{all} assumptions. To pick out a
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   828
specific one, say the second, write \isa{assms{\isaliteral{28}{\isacharparenleft}}{\isadigit{2}}{\isaliteral{29}{\isacharparenright}}}.
25412
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   829
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   830
This indexing notation $name(.)$ works for any $name$ that stands for
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   831
a list of facts, for example $f$\isa{{\isaliteral{2E}{\isachardot}}simps}, the equations of the
25412
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   832
recursively defined function $f$. You may also select sublists by writing
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   833
$name(2-3)$.
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   834
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   835
Above we recommended the UNIX-pipe model (i.e. \isa{this}) to avoid
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   836
the need to name propositions. But frequently we needed to feed more
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   837
than one previously derived fact into a proof step. Then the UNIX-pipe
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   838
model appears to break down and we need to name the different facts to
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   839
refer to them. But this can be avoided:%
19840
600c35fd1b5e added quoting via back quotes
nipkow
parents: 17187
diff changeset
   840
\end{isamarkuptext}%
600c35fd1b5e added quoting via back quotes
nipkow
parents: 17187
diff changeset
   841
\isamarkuptrue%
25412
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   842
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   843
\ \isakeyword{assumes}\ {\isaliteral{22}{\isachardoublequoteopen}}A\ {\isaliteral{5C3C616E643E}{\isasymand}}\ B{\isaliteral{22}{\isachardoublequoteclose}}\ \isakeyword{shows}\ {\isaliteral{22}{\isachardoublequoteopen}}B\ {\isaliteral{5C3C616E643E}{\isasymand}}\ A{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
19840
600c35fd1b5e added quoting via back quotes
nipkow
parents: 17187
diff changeset
   844
%
25412
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   845
\isadelimproof
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   846
%
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   847
\endisadelimproof
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   848
%
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   849
\isatagproof
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   850
\isacommand{proof}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   851
\ {\isaliteral{2D}{\isacharminus}}\isanewline
25412
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   852
\ \ \isacommand{from}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   853
\ {\isaliteral{60}{\isacharbackquoteopen}}A\ {\isaliteral{5C3C616E643E}{\isasymand}}\ B{\isaliteral{60}{\isacharbackquoteclose}}\ \isacommand{have}\isamarkupfalse%
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   854
\ {\isaliteral{22}{\isachardoublequoteopen}}B{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
25412
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   855
\isanewline
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   856
\ \ \isacommand{moreover}\isamarkupfalse%
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   857
\isanewline
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   858
\ \ \isacommand{from}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   859
\ {\isaliteral{60}{\isacharbackquoteopen}}A\ {\isaliteral{5C3C616E643E}{\isasymand}}\ B{\isaliteral{60}{\isacharbackquoteclose}}\ \isacommand{have}\isamarkupfalse%
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   860
\ {\isaliteral{22}{\isachardoublequoteopen}}A{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
25412
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   861
\isanewline
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   862
\ \ \isacommand{ultimately}\isamarkupfalse%
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   863
\ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   864
\ {\isaliteral{22}{\isachardoublequoteopen}}B\ {\isaliteral{5C3C616E643E}{\isasymand}}\ A{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
25412
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   865
\isanewline
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   866
\isacommand{qed}\isamarkupfalse%
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   867
%
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   868
\endisatagproof
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   869
{\isafoldproof}%
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   870
%
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   871
\isadelimproof
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   872
%
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   873
\endisadelimproof
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   874
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   875
\begin{isamarkuptext}%
25412
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   876
\noindent You can combine any number of facts \isa{A{\isadigit{1}}} \dots\ \isa{An} into a sequence by separating their proofs with
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   877
\isakeyword{moreover}. After the final fact, \isakeyword{ultimately} stands
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   878
for \isakeyword{from}~\isa{A{\isadigit{1}}}~\dots~\isa{An}.  This avoids having to
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   879
introduce names for all of the sequence elements.
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   880
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   881
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   882
\subsection{Predicate calculus}
6f56f0350f6c updates
nipkow
parents: 19840
diff changeset
   883
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   884
Command \isakeyword{fix} introduces new local variables into a
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   885
proof. The pair \isakeyword{fix}-\isakeyword{show} corresponds to \isa{{\isaliteral{5C3C416E643E}{\isasymAnd}}}
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   886
(the universal quantifier at the
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   887
meta-level) just like \isakeyword{assume}-\isakeyword{show} corresponds to
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   888
\isa{{\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}}. Here is a sample proof, annotated with the rules that are
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   889
applied implicitly:%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   890
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   891
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   892
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   893
\ \isakeyword{assumes}\ P{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C666F72616C6C3E}{\isasymforall}}x{\isaliteral{2E}{\isachardot}}\ P\ x{\isaliteral{22}{\isachardoublequoteclose}}\ \isakeyword{shows}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C666F72616C6C3E}{\isasymforall}}x{\isaliteral{2E}{\isachardot}}\ P{\isaliteral{28}{\isacharparenleft}}f\ x{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   894
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   895
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   896
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   897
\endisadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   898
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   899
\isatagproof
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   900
\isacommand{proof}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   901
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ %
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   902
\isamarkupcmt{\isa{allI}: \isa{{\isaliteral{28}{\isacharparenleft}}{\isaliteral{5C3C416E643E}{\isasymAnd}}x{\isaliteral{2E}{\isachardot}}\ {\isaliteral{3F}{\isacharquery}}P\ x{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ {\isaliteral{5C3C666F72616C6C3E}{\isasymforall}}x{\isaliteral{2E}{\isachardot}}\ {\isaliteral{3F}{\isacharquery}}P\ x}%
16459
7efee005e568 updated;
wenzelm
parents: 15909
diff changeset
   903
}
7efee005e568 updated;
wenzelm
parents: 15909
diff changeset
   904
\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   905
\ \ \isacommand{fix}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   906
\ a\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   907
\ \ \isacommand{from}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   908
\ P\ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   909
\ {\isaliteral{22}{\isachardoublequoteopen}}P{\isaliteral{28}{\isacharparenleft}}f\ a{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   910
\ \ %
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   911
\isamarkupcmt{\isa{allE}: \isa{{\isaliteral{5C3C6C6272616B6B3E}{\isasymlbrakk}}{\isaliteral{5C3C666F72616C6C3E}{\isasymforall}}x{\isaliteral{2E}{\isachardot}}\ {\isaliteral{3F}{\isacharquery}}P\ x{\isaliteral{3B}{\isacharsemicolon}}\ {\isaliteral{3F}{\isacharquery}}P\ {\isaliteral{3F}{\isacharquery}}x\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ {\isaliteral{3F}{\isacharquery}}R{\isaliteral{5C3C726272616B6B3E}{\isasymrbrakk}}\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ {\isaliteral{3F}{\isacharquery}}R}%
16459
7efee005e568 updated;
wenzelm
parents: 15909
diff changeset
   912
}
7efee005e568 updated;
wenzelm
parents: 15909
diff changeset
   913
\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   914
\isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   915
%
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   916
\endisatagproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   917
{\isafoldproof}%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   918
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   919
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   920
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   921
\endisadelimproof
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   922
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   923
\begin{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   924
\noindent Note that in the proof we have chosen to call the bound
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   925
variable \isa{a} instead of \isa{x} merely to show that the choice of
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   926
local names is irrelevant.
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   927
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   928
Next we look at \isa{{\isaliteral{5C3C6578697374733E}{\isasymexists}}} which is a bit more tricky.%
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   929
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   930
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   931
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   932
\ \isakeyword{assumes}\ Pf{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C6578697374733E}{\isasymexists}}x{\isaliteral{2E}{\isachardot}}\ P{\isaliteral{28}{\isacharparenleft}}f\ x{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequoteclose}}\ \isakeyword{shows}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C6578697374733E}{\isasymexists}}y{\isaliteral{2E}{\isachardot}}\ P\ y{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   933
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   934
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   935
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   936
\endisadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   937
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   938
\isatagproof
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   939
\isacommand{proof}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   940
\ {\isaliteral{2D}{\isacharminus}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   941
\ \ \isacommand{from}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   942
\ Pf\ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   943
\ {\isaliteral{3F}{\isacharquery}}thesis\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   944
\ \ \isacommand{proof}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   945
\ \ \ \ \ \ \ \ \ \ \ \ \ \ %
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   946
\isamarkupcmt{\isa{exE}: \isa{{\isaliteral{5C3C6C6272616B6B3E}{\isasymlbrakk}}{\isaliteral{5C3C6578697374733E}{\isasymexists}}x{\isaliteral{2E}{\isachardot}}\ {\isaliteral{3F}{\isacharquery}}P\ x{\isaliteral{3B}{\isacharsemicolon}}\ {\isaliteral{5C3C416E643E}{\isasymAnd}}x{\isaliteral{2E}{\isachardot}}\ {\isaliteral{3F}{\isacharquery}}P\ x\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ {\isaliteral{3F}{\isacharquery}}Q{\isaliteral{5C3C726272616B6B3E}{\isasymrbrakk}}\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ {\isaliteral{3F}{\isacharquery}}Q}%
16459
7efee005e568 updated;
wenzelm
parents: 15909
diff changeset
   947
}
7efee005e568 updated;
wenzelm
parents: 15909
diff changeset
   948
\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   949
\ \ \ \ \isacommand{fix}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   950
\ x\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   951
\ \ \ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   952
\ {\isaliteral{22}{\isachardoublequoteopen}}P{\isaliteral{28}{\isacharparenleft}}f\ x{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
29299
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
   953
\ \ \ \ \isacommand{thus}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   954
\ {\isaliteral{3F}{\isacharquery}}thesis\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   955
\ \ %
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   956
\isamarkupcmt{\isa{exI}: \isa{{\isaliteral{3F}{\isacharquery}}P\ {\isaliteral{3F}{\isacharquery}}x\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ {\isaliteral{5C3C6578697374733E}{\isasymexists}}x{\isaliteral{2E}{\isachardot}}\ {\isaliteral{3F}{\isacharquery}}P\ x}%
16459
7efee005e568 updated;
wenzelm
parents: 15909
diff changeset
   957
}
7efee005e568 updated;
wenzelm
parents: 15909
diff changeset
   958
\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   959
\ \ \isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   960
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   961
\isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   962
%
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   963
\endisatagproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   964
{\isafoldproof}%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   965
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   966
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   967
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   968
\endisadelimproof
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   969
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   970
\begin{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   971
\noindent Explicit $\exists$-elimination as seen above can become
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   972
cumbersome in practice.  The derived Isar language element
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   973
\isakeyword{obtain} provides a more appealing form of generalised
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   974
existence reasoning:%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
   975
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   976
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   977
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   978
\ \isakeyword{assumes}\ Pf{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C6578697374733E}{\isasymexists}}x{\isaliteral{2E}{\isachardot}}\ P{\isaliteral{28}{\isacharparenleft}}f\ x{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequoteclose}}\ \isakeyword{shows}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C6578697374733E}{\isasymexists}}y{\isaliteral{2E}{\isachardot}}\ P\ y{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   979
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   980
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   981
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   982
\endisadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   983
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   984
\isatagproof
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   985
\isacommand{proof}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   986
\ {\isaliteral{2D}{\isacharminus}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   987
\ \ \isacommand{from}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   988
\ Pf\ \isacommand{obtain}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   989
\ x\ \isakeyword{where}\ {\isaliteral{22}{\isachardoublequoteopen}}P{\isaliteral{28}{\isacharparenleft}}f\ x{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   990
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   991
\ \ \isacommand{thus}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
   992
\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C6578697374733E}{\isasymexists}}y{\isaliteral{2E}{\isachardot}}\ P\ y{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   993
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   994
\isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
   995
%
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   996
\endisatagproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   997
{\isafoldproof}%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   998
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
   999
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1000
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1001
\endisadelimproof
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1002
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1003
\begin{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1004
\noindent Note how the proof text follows the usual mathematical style
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1005
of concluding $P(x)$ from $\exists x. P(x)$, while carefully introducing $x$
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1006
as a new local variable.  Technically, \isakeyword{obtain} is similar to
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1007
\isakeyword{fix} and \isakeyword{assume} together with a soundness proof of
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1008
the elimination involved.
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1009
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1010
Here is a proof of a well known tautology.
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1011
Which rule is used where?%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1012
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1013
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1014
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1015
\ \isakeyword{assumes}\ ex{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C6578697374733E}{\isasymexists}}x{\isaliteral{2E}{\isachardot}}\ {\isaliteral{5C3C666F72616C6C3E}{\isasymforall}}y{\isaliteral{2E}{\isachardot}}\ P\ x\ y{\isaliteral{22}{\isachardoublequoteclose}}\ \isakeyword{shows}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C666F72616C6C3E}{\isasymforall}}y{\isaliteral{2E}{\isachardot}}\ {\isaliteral{5C3C6578697374733E}{\isasymexists}}x{\isaliteral{2E}{\isachardot}}\ P\ x\ y{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1016
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1017
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1018
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1019
\endisadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1020
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1021
\isatagproof
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1022
\isacommand{proof}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1023
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1024
\ \ \isacommand{fix}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1025
\ y\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1026
\ \ \isacommand{from}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1027
\ ex\ \isacommand{obtain}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1028
\ x\ \isakeyword{where}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C666F72616C6C3E}{\isasymforall}}y{\isaliteral{2E}{\isachardot}}\ P\ x\ y{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1029
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1030
\ \ \isacommand{hence}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1031
\ {\isaliteral{22}{\isachardoublequoteopen}}P\ x\ y{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1032
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1033
\ \ \isacommand{thus}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1034
\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C6578697374733E}{\isasymexists}}x{\isaliteral{2E}{\isachardot}}\ P\ x\ y{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1035
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1036
\isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1037
%
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1038
\endisatagproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1039
{\isafoldproof}%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1040
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1041
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1042
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1043
\endisadelimproof
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1044
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1045
\isamarkupsubsection{Making bigger steps%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1046
}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1047
\isamarkuptrue%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1048
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1049
\begin{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1050
So far we have confined ourselves to single step proofs. Of course
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1051
powerful automatic methods can be used just as well. Here is an example,
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1052
Cantor's theorem that there is no surjective function from a set to its
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1053
powerset:%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1054
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1055
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1056
\isacommand{theorem}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1057
\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C6578697374733E}{\isasymexists}}S{\isaliteral{2E}{\isachardot}}\ S\ {\isaliteral{5C3C6E6F74696E3E}{\isasymnotin}}\ range\ {\isaliteral{28}{\isacharparenleft}}f\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{27}{\isacharprime}}a\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{27}{\isacharprime}}a\ set{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1058
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1059
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1060
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1061
\endisadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1062
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1063
\isatagproof
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1064
\isacommand{proof}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1065
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1066
\ \ \isacommand{let}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1067
\ {\isaliteral{3F}{\isacharquery}}S\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{7B}{\isacharbraceleft}}x{\isaliteral{2E}{\isachardot}}\ x\ {\isaliteral{5C3C6E6F74696E3E}{\isasymnotin}}\ f\ x{\isaliteral{7D}{\isacharbraceright}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1068
\ \ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1069
\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{3F}{\isacharquery}}S\ {\isaliteral{5C3C6E6F74696E3E}{\isasymnotin}}\ range\ f{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1070
\ \ \isacommand{proof}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1071
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1072
\ \ \ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1073
\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{3F}{\isacharquery}}S\ {\isaliteral{5C3C696E3E}{\isasymin}}\ range\ f{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1074
\ \ \ \ \isacommand{then}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1075
\ \isacommand{obtain}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1076
\ y\ \isakeyword{where}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{3F}{\isacharquery}}S\ {\isaliteral{3D}{\isacharequal}}\ f\ y{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1077
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1078
\ \ \ \ \isacommand{show}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1079
\ False\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1080
\ \ \ \ \isacommand{proof}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1081
\ cases\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1082
\ \ \ \ \ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1083
\ {\isaliteral{22}{\isachardoublequoteopen}}y\ {\isaliteral{5C3C696E3E}{\isasymin}}\ {\isaliteral{3F}{\isacharquery}}S{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1084
\ \ \ \ \ \ \isacommand{with}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1085
\ {\isaliteral{60}{\isacharbackquoteopen}}{\isaliteral{3F}{\isacharquery}}S\ {\isaliteral{3D}{\isacharequal}}\ f\ y{\isaliteral{60}{\isacharbackquoteclose}}\ \isacommand{show}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1086
\ False\ \isacommand{by}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1087
\ blast\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1088
\ \ \ \ \isacommand{next}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1089
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1090
\ \ \ \ \ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1091
\ {\isaliteral{22}{\isachardoublequoteopen}}y\ {\isaliteral{5C3C6E6F74696E3E}{\isasymnotin}}\ {\isaliteral{3F}{\isacharquery}}S{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1092
\ \ \ \ \ \ \isacommand{with}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1093
\ {\isaliteral{60}{\isacharbackquoteopen}}{\isaliteral{3F}{\isacharquery}}S\ {\isaliteral{3D}{\isacharequal}}\ f\ y{\isaliteral{60}{\isacharbackquoteclose}}\ \isacommand{show}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1094
\ False\ \isacommand{by}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1095
\ blast\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1096
\ \ \ \ \isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1097
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1098
\ \ \isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1099
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1100
\isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1101
%
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1102
\endisatagproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1103
{\isafoldproof}%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1104
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1105
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1106
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1107
\endisadelimproof
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1108
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1109
\begin{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1110
\noindent
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1111
For a start, the example demonstrates two new constructs:
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1112
\begin{itemize}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1113
\item \isakeyword{let} introduces an abbreviation for a term, in our case
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1114
the witness for the claim.
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1115
\item Proof by \isa{cases} starts a proof by cases. Note that it remains
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1116
implicit what the two cases are: it is merely expected that the two subproofs
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1117
prove \isa{P\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ {\isaliteral{3F}{\isacharquery}}thesis} and \isa{{\isaliteral{5C3C6E6F743E}{\isasymnot}}P\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ {\isaliteral{3F}{\isacharquery}}thesis} (in that order)
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1118
for some \isa{P}.
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1119
\end{itemize}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1120
If you wonder how to \isakeyword{obtain} \isa{y}:
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1121
via the predefined elimination rule \isa{{\isaliteral{5C3C6C6272616B6B3E}{\isasymlbrakk}}b\ {\isaliteral{5C3C696E3E}{\isasymin}}\ range\ f{\isaliteral{3B}{\isacharsemicolon}}\ {\isaliteral{5C3C416E643E}{\isasymAnd}}x{\isaliteral{2E}{\isachardot}}\ b\ {\isaliteral{3D}{\isacharequal}}\ f\ x\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ P{\isaliteral{5C3C726272616B6B3E}{\isasymrbrakk}}\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ P}.
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1122
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1123
Method \isa{blast} is used because the contradiction does not follow easily
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1124
by just a single rule. If you find the proof too cryptic for human
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1125
consumption, here is a more detailed version; the beginning up to
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1126
\isakeyword{obtain} stays unchanged.%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1127
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1128
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1129
\isacommand{theorem}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1130
\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C6578697374733E}{\isasymexists}}S{\isaliteral{2E}{\isachardot}}\ S\ {\isaliteral{5C3C6E6F74696E3E}{\isasymnotin}}\ range\ {\isaliteral{28}{\isacharparenleft}}f\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{27}{\isacharprime}}a\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{27}{\isacharprime}}a\ set{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1131
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1132
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1133
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1134
\endisadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1135
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1136
\isatagproof
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1137
\isacommand{proof}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1138
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1139
\ \ \isacommand{let}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1140
\ {\isaliteral{3F}{\isacharquery}}S\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{7B}{\isacharbraceleft}}x{\isaliteral{2E}{\isachardot}}\ x\ {\isaliteral{5C3C6E6F74696E3E}{\isasymnotin}}\ f\ x{\isaliteral{7D}{\isacharbraceright}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1141
\ \ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1142
\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{3F}{\isacharquery}}S\ {\isaliteral{5C3C6E6F74696E3E}{\isasymnotin}}\ range\ f{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1143
\ \ \isacommand{proof}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1144
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1145
\ \ \ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1146
\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{3F}{\isacharquery}}S\ {\isaliteral{5C3C696E3E}{\isasymin}}\ range\ f{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1147
\ \ \ \ \isacommand{then}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1148
\ \isacommand{obtain}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1149
\ y\ \isakeyword{where}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{3F}{\isacharquery}}S\ {\isaliteral{3D}{\isacharequal}}\ f\ y{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{{\isaliteral{2E}{\isachardot}}{\isaliteral{2E}{\isachardot}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1150
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1151
\ \ \ \ \isacommand{show}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1152
\ False\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1153
\ \ \ \ \isacommand{proof}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1154
\ cases\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1155
\ \ \ \ \ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1156
\ {\isaliteral{22}{\isachardoublequoteopen}}y\ {\isaliteral{5C3C696E3E}{\isasymin}}\ {\isaliteral{3F}{\isacharquery}}S{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1157
\ \ \ \ \ \ \isacommand{hence}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1158
\ {\isaliteral{22}{\isachardoublequoteopen}}y\ {\isaliteral{5C3C6E6F74696E3E}{\isasymnotin}}\ f\ y{\isaliteral{22}{\isachardoublequoteclose}}\ \ \ \isacommand{by}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1159
\ simp\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1160
\ \ \ \ \ \ \isacommand{hence}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1161
\ {\isaliteral{22}{\isachardoublequoteopen}}y\ {\isaliteral{5C3C6E6F74696E3E}{\isasymnotin}}\ {\isaliteral{3F}{\isacharquery}}S{\isaliteral{22}{\isachardoublequoteclose}}\ \ \ \ \isacommand{by}\isamarkupfalse%
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1162
{\isaliteral{28}{\isacharparenleft}}simp\ add{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{60}{\isacharbackquoteopen}}{\isaliteral{3F}{\isacharquery}}S\ {\isaliteral{3D}{\isacharequal}}\ f\ y{\isaliteral{60}{\isacharbackquoteclose}}{\isaliteral{29}{\isacharparenright}}\isanewline
29299
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
  1163
\ \ \ \ \ \ \isacommand{with}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1164
\ {\isaliteral{60}{\isacharbackquoteopen}}y\ {\isaliteral{5C3C696E3E}{\isasymin}}\ {\isaliteral{3F}{\isacharquery}}S{\isaliteral{60}{\isacharbackquoteclose}}\ \isacommand{show}\isamarkupfalse%
29299
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
  1165
\ False\ \isacommand{by}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1166
\ contradiction\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1167
\ \ \ \ \isacommand{next}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1168
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1169
\ \ \ \ \ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1170
\ {\isaliteral{22}{\isachardoublequoteopen}}y\ {\isaliteral{5C3C6E6F74696E3E}{\isasymnotin}}\ {\isaliteral{3F}{\isacharquery}}S{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1171
\ \ \ \ \ \ \isacommand{hence}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1172
\ {\isaliteral{22}{\isachardoublequoteopen}}y\ {\isaliteral{5C3C696E3E}{\isasymin}}\ f\ y{\isaliteral{22}{\isachardoublequoteclose}}\ \ \ \isacommand{by}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1173
\ simp\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1174
\ \ \ \ \ \ \isacommand{hence}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1175
\ {\isaliteral{22}{\isachardoublequoteopen}}y\ {\isaliteral{5C3C696E3E}{\isasymin}}\ {\isaliteral{3F}{\isacharquery}}S{\isaliteral{22}{\isachardoublequoteclose}}\ \ \ \ \isacommand{by}\isamarkupfalse%
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1176
{\isaliteral{28}{\isacharparenleft}}simp\ add{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{60}{\isacharbackquoteopen}}{\isaliteral{3F}{\isacharquery}}S\ {\isaliteral{3D}{\isacharequal}}\ f\ y{\isaliteral{60}{\isacharbackquoteclose}}{\isaliteral{29}{\isacharparenright}}\isanewline
29299
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
  1177
\ \ \ \ \ \ \isacommand{with}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1178
\ {\isaliteral{60}{\isacharbackquoteopen}}y\ {\isaliteral{5C3C6E6F74696E3E}{\isasymnotin}}\ {\isaliteral{3F}{\isacharquery}}S{\isaliteral{60}{\isacharbackquoteclose}}\ \isacommand{show}\isamarkupfalse%
29299
df4300a1acd3 updated generated files;
wenzelm
parents: 27171
diff changeset
  1179
\ False\ \isacommand{by}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1180
\ contradiction\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1181
\ \ \ \ \isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1182
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1183
\ \ \isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1184
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1185
\isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1186
%
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1187
\endisatagproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1188
{\isafoldproof}%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1189
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1190
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1191
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1192
\endisadelimproof
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1193
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1194
\begin{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1195
\noindent Method \isa{contradiction} succeeds if both $P$ and
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1196
$\neg P$ are among the assumptions and the facts fed into that step, in any order.
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1197
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1198
As it happens, Cantor's theorem can be proved automatically by best-first
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1199
search. Depth-first search would diverge, but best-first search successfully
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1200
navigates through the large search space:%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1201
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1202
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1203
\isacommand{theorem}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1204
\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C6578697374733E}{\isasymexists}}S{\isaliteral{2E}{\isachardot}}\ S\ {\isaliteral{5C3C6E6F74696E3E}{\isasymnotin}}\ range\ {\isaliteral{28}{\isacharparenleft}}f\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{27}{\isacharprime}}a\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{27}{\isacharprime}}a\ set{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1205
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1206
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1207
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1208
\endisadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1209
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1210
\isatagproof
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1211
\isacommand{by}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1212
\ best%
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1213
\endisatagproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1214
{\isafoldproof}%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1215
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1216
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1217
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1218
\endisadelimproof
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1219
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1220
\isamarkupsubsection{Raw proof blocks%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1221
}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1222
\isamarkuptrue%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1223
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1224
\begin{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1225
Although we have shown how to employ powerful automatic methods like
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1226
\isa{blast} to achieve bigger proof steps, there may still be the
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1227
tendency to use the default introduction and elimination rules to
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1228
decompose goals and facts. This can lead to very tedious proofs:%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1229
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1230
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1231
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1232
\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C666F72616C6C3E}{\isasymforall}}x\ y{\isaliteral{2E}{\isachardot}}\ A\ x\ y\ {\isaliteral{5C3C616E643E}{\isasymand}}\ B\ x\ y\ {\isaliteral{5C3C6C6F6E6772696768746172726F773E}{\isasymlongrightarrow}}\ C\ x\ y{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1233
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1234
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1235
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1236
\endisadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1237
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1238
\isatagproof
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1239
\isacommand{proof}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1240
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1241
\ \ \isacommand{fix}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1242
\ x\ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1243
\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C666F72616C6C3E}{\isasymforall}}y{\isaliteral{2E}{\isachardot}}\ A\ x\ y\ {\isaliteral{5C3C616E643E}{\isasymand}}\ B\ x\ y\ {\isaliteral{5C3C6C6F6E6772696768746172726F773E}{\isasymlongrightarrow}}\ C\ x\ y{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1244
\ \ \isacommand{proof}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1245
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1246
\ \ \ \ \isacommand{fix}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1247
\ y\ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1248
\ {\isaliteral{22}{\isachardoublequoteopen}}A\ x\ y\ {\isaliteral{5C3C616E643E}{\isasymand}}\ B\ x\ y\ {\isaliteral{5C3C6C6F6E6772696768746172726F773E}{\isasymlongrightarrow}}\ C\ x\ y{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1249
\ \ \ \ \isacommand{proof}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1250
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1251
\ \ \ \ \ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1252
\ {\isaliteral{22}{\isachardoublequoteopen}}A\ x\ y\ {\isaliteral{5C3C616E643E}{\isasymand}}\ B\ x\ y{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1253
\ \ \ \ \ \ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1254
\ {\isaliteral{22}{\isachardoublequoteopen}}C\ x\ y{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{sorry}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1255
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1256
\ \ \ \ \isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1257
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1258
\ \ \isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1259
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1260
\isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1261
%
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1262
\endisatagproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1263
{\isafoldproof}%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1264
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1265
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1266
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1267
\endisadelimproof
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1268
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1269
\begin{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1270
\noindent Since we are only interested in the decomposition and not the
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1271
actual proof, the latter has been replaced by
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1272
\isakeyword{sorry}. Command \isakeyword{sorry} proves anything but is
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1273
only allowed in quick and dirty mode, the default interactive mode. It
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1274
is very convenient for top down proof development.
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1275
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1276
Luckily we can avoid this step by step decomposition very easily:%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1277
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1278
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1279
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1280
\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C666F72616C6C3E}{\isasymforall}}x\ y{\isaliteral{2E}{\isachardot}}\ A\ x\ y\ {\isaliteral{5C3C616E643E}{\isasymand}}\ B\ x\ y\ {\isaliteral{5C3C6C6F6E6772696768746172726F773E}{\isasymlongrightarrow}}\ C\ x\ y{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1281
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1282
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1283
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1284
\endisadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1285
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1286
\isatagproof
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1287
\isacommand{proof}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1288
\ {\isaliteral{2D}{\isacharminus}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1289
\ \ \isacommand{have}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1290
\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C416E643E}{\isasymAnd}}x\ y{\isaliteral{2E}{\isachardot}}\ {\isaliteral{5C3C6C6272616B6B3E}{\isasymlbrakk}}\ A\ x\ y{\isaliteral{3B}{\isacharsemicolon}}\ B\ x\ y\ {\isaliteral{5C3C726272616B6B3E}{\isasymrbrakk}}\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ C\ x\ y{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1291
\ \ \isacommand{proof}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1292
\ {\isaliteral{2D}{\isacharminus}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1293
\ \ \ \ \isacommand{fix}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1294
\ x\ y\ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1295
\ {\isaliteral{22}{\isachardoublequoteopen}}A\ x\ y{\isaliteral{22}{\isachardoublequoteclose}}\ {\isaliteral{22}{\isachardoublequoteopen}}B\ x\ y{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1296
\ \ \ \ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1297
\ {\isaliteral{22}{\isachardoublequoteopen}}C\ x\ y{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{sorry}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1298
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1299
\ \ \isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1300
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1301
\ \ \isacommand{thus}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1302
\ {\isaliteral{3F}{\isacharquery}}thesis\ \isacommand{by}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1303
\ blast\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1304
\isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1305
%
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1306
\endisatagproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1307
{\isafoldproof}%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1308
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1309
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1310
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1311
\endisadelimproof
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1312
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1313
\begin{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1314
\noindent
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1315
This can be simplified further by \emph{raw proof blocks}, i.e.\
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1316
proofs enclosed in braces:%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1317
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1318
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1319
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1320
\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C666F72616C6C3E}{\isasymforall}}x\ y{\isaliteral{2E}{\isachardot}}\ A\ x\ y\ {\isaliteral{5C3C616E643E}{\isasymand}}\ B\ x\ y\ {\isaliteral{5C3C6C6F6E6772696768746172726F773E}{\isasymlongrightarrow}}\ C\ x\ y{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1321
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1322
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1323
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1324
\endisadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1325
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1326
\isatagproof
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1327
\isacommand{proof}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1328
\ {\isaliteral{2D}{\isacharminus}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1329
\ \ \isacommand{{\isaliteral{7B}{\isacharbraceleft}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1330
\ \isacommand{fix}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1331
\ x\ y\ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1332
\ {\isaliteral{22}{\isachardoublequoteopen}}A\ x\ y{\isaliteral{22}{\isachardoublequoteclose}}\ {\isaliteral{22}{\isachardoublequoteopen}}B\ x\ y{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1333
\ \ \ \ \isacommand{have}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1334
\ {\isaliteral{22}{\isachardoublequoteopen}}C\ x\ y{\isaliteral{22}{\isachardoublequoteclose}}\ \isacommand{sorry}\isamarkupfalse%
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1335
\ \isacommand{{\isaliteral{7D}{\isacharbraceright}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1336
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1337
\ \ \isacommand{thus}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1338
\ {\isaliteral{3F}{\isacharquery}}thesis\ \isacommand{by}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1339
\ blast\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1340
\isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1341
%
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1342
\endisatagproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1343
{\isafoldproof}%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1344
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1345
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1346
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1347
\endisadelimproof
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1348
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1349
\begin{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1350
\noindent The result of the raw proof block is the same theorem
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1351
as above, namely \isa{{\isaliteral{5C3C416E643E}{\isasymAnd}}x\ y{\isaliteral{2E}{\isachardot}}\ {\isaliteral{5C3C6C6272616B6B3E}{\isasymlbrakk}}A\ x\ y{\isaliteral{3B}{\isacharsemicolon}}\ B\ x\ y{\isaliteral{5C3C726272616B6B3E}{\isasymrbrakk}}\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ C\ x\ y}.  Raw
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1352
proof blocks are like ordinary proofs except that they do not prove
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1353
some explicitly stated property but that the property emerges directly
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1354
out of the \isakeyword{fixe}s, \isakeyword{assume}s and
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1355
\isakeyword{have} in the block. Thus they again serve to avoid
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1356
duplication. Note that the conclusion of a raw proof block is stated with
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1357
\isakeyword{have} rather than \isakeyword{show} because it is not the
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1358
conclusion of some pending goal but some independent claim.
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1359
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1360
The general idea demonstrated in this subsection is very
25427
8ba39d2d9d0b updated
nipkow
parents: 25412
diff changeset
  1361
important in Isar and distinguishes it from \isa{apply}-style proofs:
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1362
\begin{quote}\em
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1363
Do not manipulate the proof state into a particular form by applying
25427
8ba39d2d9d0b updated
nipkow
parents: 25412
diff changeset
  1364
proof methods but state the desired form explicitly and let the proof
8ba39d2d9d0b updated
nipkow
parents: 25412
diff changeset
  1365
methods verify that from this form the original goal follows.
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1366
\end{quote}
14617
a2bcb11ce445 Added case distinction proof pattern.
nipkow
parents: 13999
diff changeset
  1367
This yields more readable and also more robust proofs.
a2bcb11ce445 Added case distinction proof pattern.
nipkow
parents: 13999
diff changeset
  1368
a2bcb11ce445 Added case distinction proof pattern.
nipkow
parents: 13999
diff changeset
  1369
\subsubsection{General case distinctions}
a2bcb11ce445 Added case distinction proof pattern.
nipkow
parents: 13999
diff changeset
  1370
a2bcb11ce445 Added case distinction proof pattern.
nipkow
parents: 13999
diff changeset
  1371
As an important application of raw proof blocks we show how to deal
a2bcb11ce445 Added case distinction proof pattern.
nipkow
parents: 13999
diff changeset
  1372
with general case distinctions --- more specific kinds are treated in
a2bcb11ce445 Added case distinction proof pattern.
nipkow
parents: 13999
diff changeset
  1373
\S\ref{sec:CaseDistinction}. Imagine that you would like to prove some
a2bcb11ce445 Added case distinction proof pattern.
nipkow
parents: 13999
diff changeset
  1374
goal by distinguishing $n$ cases $P_1$, \dots, $P_n$. You show that
a2bcb11ce445 Added case distinction proof pattern.
nipkow
parents: 13999
diff changeset
  1375
the $n$ cases are exhaustive (i.e.\ $P_1 \lor \dots \lor P_n$) and
a2bcb11ce445 Added case distinction proof pattern.
nipkow
parents: 13999
diff changeset
  1376
that each case $P_i$ implies the goal. Taken together, this proves the
a2bcb11ce445 Added case distinction proof pattern.
nipkow
parents: 13999
diff changeset
  1377
goal. The corresponding Isar proof pattern (for $n = 3$) is very handy:%
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1378
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1379
\isamarkuptrue%
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1380
%
14617
a2bcb11ce445 Added case distinction proof pattern.
nipkow
parents: 13999
diff changeset
  1381
\renewcommand{\isamarkupcmt}[1]{#1}
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1382
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1383
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1384
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1385
\endisadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1386
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1387
\isatagproof
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1388
\isacommand{proof}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1389
\ {\isaliteral{2D}{\isacharminus}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1390
\ \ \isacommand{have}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1391
\ {\isaliteral{22}{\isachardoublequoteopen}}P\isaliteral{5C3C5E697375623E}{}\isactrlisub {\isadigit{1}}\ {\isaliteral{5C3C6F723E}{\isasymor}}\ P\isaliteral{5C3C5E697375623E}{}\isactrlisub {\isadigit{2}}\ {\isaliteral{5C3C6F723E}{\isasymor}}\ P\isaliteral{5C3C5E697375623E}{}\isactrlisub {\isadigit{3}}{\isaliteral{22}{\isachardoublequoteclose}}\ \ %
16459
7efee005e568 updated;
wenzelm
parents: 15909
diff changeset
  1392
\isamarkupcmt{\dots%
7efee005e568 updated;
wenzelm
parents: 15909
diff changeset
  1393
}
7efee005e568 updated;
wenzelm
parents: 15909
diff changeset
  1394
\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1395
\ \ \isacommand{moreover}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1396
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1397
\ \ \isacommand{{\isaliteral{7B}{\isacharbraceleft}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1398
\ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1399
\ P\isaliteral{5C3C5E697375623E}{}\isactrlisub {\isadigit{1}}\isanewline
16459
7efee005e568 updated;
wenzelm
parents: 15909
diff changeset
  1400
\ \ \ \ %
7efee005e568 updated;
wenzelm
parents: 15909
diff changeset
  1401
\isamarkupcmt{\dots%
7efee005e568 updated;
wenzelm
parents: 15909
diff changeset
  1402
}
7efee005e568 updated;
wenzelm
parents: 15909
diff changeset
  1403
\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1404
\ \ \ \ \isacommand{have}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1405
\ {\isaliteral{3F}{\isacharquery}}thesis\ \ %
16459
7efee005e568 updated;
wenzelm
parents: 15909
diff changeset
  1406
\isamarkupcmt{\dots%
7efee005e568 updated;
wenzelm
parents: 15909
diff changeset
  1407
}
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1408
\ \isacommand{{\isaliteral{7D}{\isacharbraceright}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1409
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1410
\ \ \isacommand{moreover}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1411
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1412
\ \ \isacommand{{\isaliteral{7B}{\isacharbraceleft}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1413
\ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1414
\ P\isaliteral{5C3C5E697375623E}{}\isactrlisub {\isadigit{2}}\isanewline
16459
7efee005e568 updated;
wenzelm
parents: 15909
diff changeset
  1415
\ \ \ \ %
7efee005e568 updated;
wenzelm
parents: 15909
diff changeset
  1416
\isamarkupcmt{\dots%
7efee005e568 updated;
wenzelm
parents: 15909
diff changeset
  1417
}
7efee005e568 updated;
wenzelm
parents: 15909
diff changeset
  1418
\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1419
\ \ \ \ \isacommand{have}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1420
\ {\isaliteral{3F}{\isacharquery}}thesis\ \ %
16459
7efee005e568 updated;
wenzelm
parents: 15909
diff changeset
  1421
\isamarkupcmt{\dots%
7efee005e568 updated;
wenzelm
parents: 15909
diff changeset
  1422
}
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1423
\ \isacommand{{\isaliteral{7D}{\isacharbraceright}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1424
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1425
\ \ \isacommand{moreover}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1426
\isanewline
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1427
\ \ \isacommand{{\isaliteral{7B}{\isacharbraceleft}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1428
\ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1429
\ P\isaliteral{5C3C5E697375623E}{}\isactrlisub {\isadigit{3}}\isanewline
16459
7efee005e568 updated;
wenzelm
parents: 15909
diff changeset
  1430
\ \ \ \ %
7efee005e568 updated;
wenzelm
parents: 15909
diff changeset
  1431
\isamarkupcmt{\dots%
7efee005e568 updated;
wenzelm
parents: 15909
diff changeset
  1432
}
7efee005e568 updated;
wenzelm
parents: 15909
diff changeset
  1433
\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1434
\ \ \ \ \isacommand{have}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1435
\ {\isaliteral{3F}{\isacharquery}}thesis\ \ %
16459
7efee005e568 updated;
wenzelm
parents: 15909
diff changeset
  1436
\isamarkupcmt{\dots%
7efee005e568 updated;
wenzelm
parents: 15909
diff changeset
  1437
}
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1438
\ \isacommand{{\isaliteral{7D}{\isacharbraceright}}}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1439
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1440
\ \ \isacommand{ultimately}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1441
\ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1442
\ {\isaliteral{3F}{\isacharquery}}thesis\ \isacommand{by}\isamarkupfalse%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1443
\ blast\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1444
\isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1445
%
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1446
\endisatagproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1447
{\isafoldproof}%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1448
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1449
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1450
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1451
\endisadelimproof
14617
a2bcb11ce445 Added case distinction proof pattern.
nipkow
parents: 13999
diff changeset
  1452
%
a2bcb11ce445 Added case distinction proof pattern.
nipkow
parents: 13999
diff changeset
  1453
\renewcommand{\isamarkupcmt}[1]{{\isastylecmt--- #1}}
a2bcb11ce445 Added case distinction proof pattern.
nipkow
parents: 13999
diff changeset
  1454
%
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1455
\isamarkupsubsection{Further refinements%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1456
}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1457
\isamarkuptrue%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1458
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1459
\begin{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1460
This subsection discusses some further tricks that can make
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1461
life easier although they are not essential.%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1462
\end{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1463
\isamarkuptrue%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1464
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1465
\isamarkupsubsubsection{\isakeyword{and}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1466
}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1467
\isamarkuptrue%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1468
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1469
\begin{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1470
Propositions (following \isakeyword{assume} etc) may but need not be
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1471
separated by \isakeyword{and}. This is not just for readability
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1472
(\isakeyword{from} \isa{A} \isakeyword{and} \isa{B} looks nicer than
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1473
\isakeyword{from} \isa{A} \isa{B}) but for structuring lists of propositions
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1474
into possibly named blocks. In
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1475
\begin{center}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1476
\isakeyword{assume} \isa{A:} $A_1$ $A_2$ \isakeyword{and} \isa{B:} $A_3$
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1477
\isakeyword{and} $A_4$
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1478
\end{center}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1479
label \isa{A} refers to the list of propositions $A_1$ $A_2$ and
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1480
label \isa{B} to $A_3$.%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1481
\end{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1482
\isamarkuptrue%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1483
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1484
\isamarkupsubsubsection{\isakeyword{note}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1485
}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1486
\isamarkuptrue%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1487
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1488
\begin{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1489
If you want to remember intermediate fact(s) that cannot be
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1490
named directly, use \isakeyword{note}. For example the result of raw
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1491
proof block can be named by following it with
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1492
\isakeyword{note}~\isa{some{\isaliteral{5F}{\isacharunderscore}}name\ {\isaliteral{3D}{\isacharequal}}\ this}.  As a side effect,
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1493
\isa{this} is set to the list of facts on the right-hand side. You
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1494
can also say \isa{note\ some{\isaliteral{5F}{\isacharunderscore}}fact}, which simply sets \isa{this},
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1495
i.e.\ recalls \isa{some{\isaliteral{5F}{\isacharunderscore}}fact}, e.g.\ in a \isakeyword{moreover} sequence.%
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1496
\end{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1497
\isamarkuptrue%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1498
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1499
\isamarkupsubsubsection{\isakeyword{fixes}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1500
}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1501
\isamarkuptrue%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1502
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1503
\begin{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1504
Sometimes it is necessary to decorate a proposition with type
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1505
constraints, as in Cantor's theorem above. These type constraints tend
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1506
to make the theorem less readable. The situation can be improved a
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1507
little by combining the type constraint with an outer \isa{{\isaliteral{5C3C416E643E}{\isasymAnd}}}:%
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1508
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1509
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1510
\isacommand{theorem}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1511
\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C416E643E}{\isasymAnd}}f\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{27}{\isacharprime}}a\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{27}{\isacharprime}}a\ set{\isaliteral{2E}{\isachardot}}\ {\isaliteral{5C3C6578697374733E}{\isasymexists}}S{\isaliteral{2E}{\isachardot}}\ S\ {\isaliteral{5C3C6E6F74696E3E}{\isasymnotin}}\ range\ f{\isaliteral{22}{\isachardoublequoteclose}}%
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1512
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1513
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1514
\endisadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1515
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1516
\isatagproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1517
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1518
\endisatagproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1519
{\isafoldproof}%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1520
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1521
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1522
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1523
\endisadelimproof
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1524
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1525
\begin{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1526
\noindent However, now \isa{f} is bound and we need a
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1527
\isakeyword{fix}~\isa{f} in the proof before we can refer to \isa{f}.
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1528
This is avoided by \isakeyword{fixes}:%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1529
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1530
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1531
\isacommand{theorem}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1532
\ \isakeyword{fixes}\ f\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{27}{\isacharprime}}a\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{27}{\isacharprime}}a\ set{\isaliteral{22}{\isachardoublequoteclose}}\ \isakeyword{shows}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C6578697374733E}{\isasymexists}}S{\isaliteral{2E}{\isachardot}}\ S\ {\isaliteral{5C3C6E6F74696E3E}{\isasymnotin}}\ range\ f{\isaliteral{22}{\isachardoublequoteclose}}%
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1533
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1534
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1535
\endisadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1536
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1537
\isatagproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1538
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1539
\endisatagproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1540
{\isafoldproof}%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1541
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1542
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1543
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1544
\endisadelimproof
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1545
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1546
\begin{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1547
\noindent
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1548
Even better, \isakeyword{fixes} allows to introduce concrete syntax locally:%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1549
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1550
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1551
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1552
\ comm{\isaliteral{5F}{\isacharunderscore}}mono{\isaliteral{3A}{\isacharcolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1553
\ \ \isakeyword{fixes}\ r\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{27}{\isacharprime}}a\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{27}{\isacharprime}}a\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ bool{\isaliteral{22}{\isachardoublequoteclose}}\ {\isaliteral{28}{\isacharparenleft}}\isakeyword{infix}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{3E}{\isachargreater}}{\isaliteral{22}{\isachardoublequoteclose}}\ {\isadigit{6}}{\isadigit{0}}{\isaliteral{29}{\isacharparenright}}\ \isakeyword{and}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1554
\ \ \ \ \ \ \ f\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{27}{\isacharprime}}a\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{27}{\isacharprime}}a\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{27}{\isacharprime}}a{\isaliteral{22}{\isachardoublequoteclose}}\ \ \ {\isaliteral{28}{\isacharparenleft}}\isakeyword{infixl}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{2B}{\isacharplus}}{\isaliteral{2B}{\isacharplus}}{\isaliteral{22}{\isachardoublequoteclose}}\ {\isadigit{7}}{\isadigit{0}}{\isaliteral{29}{\isacharparenright}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1555
\ \ \isakeyword{assumes}\ comm{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C416E643E}{\isasymAnd}}x\ y{\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}{\isaliteral{27}{\isacharprime}}a{\isaliteral{2E}{\isachardot}}\ x\ {\isaliteral{2B}{\isacharplus}}{\isaliteral{2B}{\isacharplus}}\ y\ {\isaliteral{3D}{\isacharequal}}\ y\ {\isaliteral{2B}{\isacharplus}}{\isaliteral{2B}{\isacharplus}}\ x{\isaliteral{22}{\isachardoublequoteclose}}\ \isakeyword{and}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1556
\ \ \ \ \ \ \ \ \ \ mono{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C416E643E}{\isasymAnd}}x\ y\ z{\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}{\isaliteral{27}{\isacharprime}}a{\isaliteral{2E}{\isachardot}}\ x\ {\isaliteral{3E}{\isachargreater}}\ y\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ x\ {\isaliteral{2B}{\isacharplus}}{\isaliteral{2B}{\isacharplus}}\ z\ {\isaliteral{3E}{\isachargreater}}\ y\ {\isaliteral{2B}{\isacharplus}}{\isaliteral{2B}{\isacharplus}}\ z{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1557
\ \ \isakeyword{shows}\ {\isaliteral{22}{\isachardoublequoteopen}}x\ {\isaliteral{3E}{\isachargreater}}\ y\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ z\ {\isaliteral{2B}{\isacharplus}}{\isaliteral{2B}{\isacharplus}}\ x\ {\isaliteral{3E}{\isachargreater}}\ z\ {\isaliteral{2B}{\isacharplus}}{\isaliteral{2B}{\isacharplus}}\ y{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1558
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1559
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1560
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1561
\endisadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1562
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1563
\isatagproof
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1564
\isacommand{by}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1565
{\isaliteral{28}{\isacharparenleft}}simp\ add{\isaliteral{3A}{\isacharcolon}}\ comm\ mono{\isaliteral{29}{\isacharparenright}}%
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1566
\endisatagproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1567
{\isafoldproof}%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1568
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1569
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1570
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1571
\endisadelimproof
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1572
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1573
\begin{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1574
\noindent The concrete syntax is dropped at the end of the proof and the
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1575
theorem becomes \begin{isabelle}%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1576
{\isaliteral{5C3C6C6272616B6B3E}{\isasymlbrakk}}{\isaliteral{5C3C416E643E}{\isasymAnd}}x\ y{\isaliteral{2E}{\isachardot}}\ {\isaliteral{3F}{\isacharquery}}f\ x\ y\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{3F}{\isacharquery}}f\ y\ x{\isaliteral{3B}{\isacharsemicolon}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1577
\isaindent{\ }{\isaliteral{5C3C416E643E}{\isasymAnd}}x\ y\ z{\isaliteral{2E}{\isachardot}}\ {\isaliteral{3F}{\isacharquery}}r\ x\ y\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ {\isaliteral{3F}{\isacharquery}}r\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{3F}{\isacharquery}}f\ x\ z{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{3F}{\isacharquery}}f\ y\ z{\isaliteral{29}{\isacharparenright}}{\isaliteral{3B}{\isacharsemicolon}}\ {\isaliteral{3F}{\isacharquery}}r\ {\isaliteral{3F}{\isacharquery}}x\ {\isaliteral{3F}{\isacharquery}}y{\isaliteral{5C3C726272616B6B3E}{\isasymrbrakk}}\isanewline
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1578
{\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ {\isaliteral{3F}{\isacharquery}}r\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{3F}{\isacharquery}}f\ {\isaliteral{3F}{\isacharquery}}z\ {\isaliteral{3F}{\isacharquery}}x{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{3F}{\isacharquery}}f\ {\isaliteral{3F}{\isacharquery}}z\ {\isaliteral{3F}{\isacharquery}}y{\isaliteral{29}{\isacharparenright}}%
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1579
\end{isabelle}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1580
\tweakskip%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1581
\end{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1582
\isamarkuptrue%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1583
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1584
\isamarkupsubsubsection{\isakeyword{obtain}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1585
}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1586
\isamarkuptrue%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1587
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1588
\begin{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1589
The \isakeyword{obtain} construct can introduce multiple
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1590
witnesses and propositions as in the following proof fragment:%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1591
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1592
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1593
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1594
\ \isakeyword{assumes}\ A{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{5C3C6578697374733E}{\isasymexists}}x\ y{\isaliteral{2E}{\isachardot}}\ P\ x\ y\ {\isaliteral{5C3C616E643E}{\isasymand}}\ Q\ x\ y{\isaliteral{22}{\isachardoublequoteclose}}\ \isakeyword{shows}\ {\isaliteral{22}{\isachardoublequoteopen}}R{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1595
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1596
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1597
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1598
\endisadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1599
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1600
\isatagproof
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1601
\isacommand{proof}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1602
\ {\isaliteral{2D}{\isacharminus}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1603
\ \ \isacommand{from}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1604
\ A\ \isacommand{obtain}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1605
\ x\ y\ \isakeyword{where}\ P{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}P\ x\ y{\isaliteral{22}{\isachardoublequoteclose}}\ \isakeyword{and}\ Q{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}Q\ x\ y{\isaliteral{22}{\isachardoublequoteclose}}\ \ \isacommand{by}\isamarkupfalse%
17181
5f42dd5e6570 updated;
wenzelm
parents: 17175
diff changeset
  1606
\ blast%
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1607
\endisatagproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1608
{\isafoldproof}%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1609
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1610
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1611
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1612
\endisadelimproof
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1613
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1614
\begin{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1615
Remember also that one does not even need to start with a formula
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1616
containing \isa{{\isaliteral{5C3C6578697374733E}{\isasymexists}}} as we saw in the proof of Cantor's theorem.%
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1617
\end{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1618
\isamarkuptrue%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1619
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1620
\isamarkupsubsubsection{Combining proof styles%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1621
}
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1622
\isamarkuptrue%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1623
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1624
\begin{isamarkuptext}%
25427
8ba39d2d9d0b updated
nipkow
parents: 25412
diff changeset
  1625
Finally, whole \isa{apply}-scripts may appear in the leaves of the
8ba39d2d9d0b updated
nipkow
parents: 25412
diff changeset
  1626
proof tree, although this is best avoided.  Here is a contrived example:%
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1627
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1628
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1629
\isacommand{lemma}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1630
\ {\isaliteral{22}{\isachardoublequoteopen}}A\ {\isaliteral{5C3C6C6F6E6772696768746172726F773E}{\isasymlongrightarrow}}\ {\isaliteral{28}{\isacharparenleft}}A\ {\isaliteral{5C3C6C6F6E6772696768746172726F773E}{\isasymlongrightarrow}}\ B{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{5C3C6C6F6E6772696768746172726F773E}{\isasymlongrightarrow}}\ B{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1631
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1632
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1633
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1634
\endisadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1635
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1636
\isatagproof
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1637
\isacommand{proof}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1638
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1639
\ \ \isacommand{assume}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1640
\ a{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{22}{\isachardoublequoteopen}}A{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1641
\ \ \isacommand{show}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1642
\ {\isaliteral{22}{\isachardoublequoteopen}}{\isaliteral{28}{\isacharparenleft}}A\ {\isaliteral{5C3C6C6F6E6772696768746172726F773E}{\isasymlongrightarrow}}B{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{5C3C6C6F6E6772696768746172726F773E}{\isasymlongrightarrow}}\ B{\isaliteral{22}{\isachardoublequoteclose}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1643
\ \ \ \ \isacommand{apply}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1644
{\isaliteral{28}{\isacharparenleft}}rule\ impI{\isaliteral{29}{\isacharparenright}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1645
\ \ \ \ \isacommand{apply}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1646
{\isaliteral{28}{\isacharparenleft}}erule\ impE{\isaliteral{29}{\isacharparenright}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1647
\ \ \ \ \isacommand{apply}\isamarkupfalse%
40406
313a24b66a8d updated generated files;
wenzelm
parents: 32836
diff changeset
  1648
{\isaliteral{28}{\isacharparenleft}}rule\ a{\isaliteral{29}{\isacharparenright}}\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1649
\ \ \ \ \isacommand{apply}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1650
\ assumption\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1651
\ \ \ \ \isacommand{done}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1652
\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1653
\isacommand{qed}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1654
%
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1655
\endisatagproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1656
{\isafoldproof}%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1657
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1658
\isadelimproof
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1659
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1660
\endisadelimproof
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1661
%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1662
\begin{isamarkuptext}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1663
\noindent You may need to resort to this technique if an
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1664
automatic step fails to prove the desired proposition.
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1665
25427
8ba39d2d9d0b updated
nipkow
parents: 25412
diff changeset
  1666
When converting a proof from \isa{apply}-style into Isar you can proceed
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1667
in a top-down manner: parts of the proof can be left in script form
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1668
while the outer structure is already expressed in Isar.%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1669
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17125
diff changeset
  1670
\isamarkuptrue%
17125
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1671
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1672
\isadelimtheory
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1673
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1674
\endisadelimtheory
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1675
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1676
\isatagtheory
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1677
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1678
\endisatagtheory
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1679
{\isafoldtheory}%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1680
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1681
\isadelimtheory
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1682
%
e6a82d1a1829 updated;
wenzelm
parents: 16459
diff changeset
  1683
\endisadelimtheory
13999
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1684
\end{isabellebody}%
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1685
%%% Local Variables:
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1686
%%% mode: latex
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1687
%%% TeX-master: "root"
454a2ad0c381 IsarOverview moved one level up
kleing
parents:
diff changeset
  1688
%%% End: