doc-src/IsarTut/Tutorial/document/Tutorial.tex
author wenzelm
Thu, 06 Jun 2002 15:34:52 +0200
changeset 13206 90e5852e55e6
permissions -rw-r--r--
updated;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13206
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
     1
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
     2
\begin{isabellebody}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
     3
\def\isabellecontext{Tutorial}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
     4
\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
     5
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
     6
\isamarkupchapter{Introduction%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
     7
}
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
     8
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
     9
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    10
\isamarkupsection{Step-by-step examples%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    11
}
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    12
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    13
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    14
\isamarkupsubsection{Summing natural numbers%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    15
}
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    16
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    17
\isacommand{theorem}\ {\isachardoublequote}{\isadigit{2}}\ {\isacharasterisk}\ {\isacharparenleft}{\isasymSum}i\ {\isacharless}\ n\ {\isacharplus}\ {\isadigit{1}}{\isachardot}\ i{\isacharparenright}\ {\isacharequal}\ n\ {\isacharasterisk}\ {\isacharparenleft}n\ {\isacharplus}\ {\isadigit{1}}{\isacharparenright}{\isachardoublequote}\ \ {\isacharparenleft}\isakeyword{is}\ {\isachardoublequote}{\isacharquery}P\ n{\isachardoublequote}{\isacharparenright}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    18
\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    19
\isacommand{proof}\ {\isacharparenleft}induct\ n{\isacharparenright}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    20
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    21
\isacommand{case}\ {\isadigit{0}}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    22
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    23
\isacommand{then}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    24
\isacommand{show}\ {\isachardoublequote}{\isacharquery}P\ {\isadigit{0}}{\isachardoublequote}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    25
\isacommand{by}\ simp\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    26
\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    27
\isacommand{next}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    28
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    29
\isacommand{case}\ {\isacharparenleft}Suc\ n{\isacharparenright}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    30
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    31
\isacommand{let}\ {\isachardoublequote}{\isacharquery}S\ n\ {\isacharequal}\ {\isacharunderscore}{\isachardoublequote}\ {\isacharequal}\ {\isachardoublequote}{\isacharquery}P\ n{\isachardoublequote}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    32
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    33
\isacommand{have}\ {\isachardoublequote}{\isacharquery}S\ {\isacharparenleft}n\ {\isacharplus}\ {\isadigit{1}}{\isacharparenright}\ {\isacharequal}\ {\isacharquery}S\ n\ {\isacharplus}\ {\isadigit{2}}\ {\isacharasterisk}\ {\isacharparenleft}n\ {\isacharplus}\ {\isadigit{1}}{\isacharparenright}{\isachardoublequote}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    34
\isacommand{by}\ simp\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    35
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    36
\isacommand{also}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    37
\isacommand{have}\ {\isachardoublequote}{\isacharquery}S\ n\ {\isacharequal}\ n\ {\isacharasterisk}\ {\isacharparenleft}n\ {\isacharplus}\ {\isadigit{1}}{\isacharparenright}{\isachardoublequote}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    38
\isacommand{{\isachardot}}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    39
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    40
\isacommand{also}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    41
\isacommand{have}\ {\isachardoublequote}{\isasymdots}\ {\isacharplus}\ {\isadigit{2}}\ {\isacharasterisk}\ {\isacharparenleft}n\ {\isacharplus}\ {\isadigit{1}}{\isacharparenright}\ {\isacharequal}\ {\isacharparenleft}n\ {\isacharplus}\ {\isadigit{1}}{\isacharparenright}\ {\isacharasterisk}\ {\isacharparenleft}n\ {\isacharplus}\ {\isadigit{2}}{\isacharparenright}{\isachardoublequote}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    42
\isacommand{by}\ simp\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    43
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    44
\isacommand{finally}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    45
\isacommand{show}\ {\isachardoublequote}{\isacharquery}P\ {\isacharparenleft}Suc\ n{\isacharparenright}{\isachardoublequote}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    46
\isacommand{by}\ simp\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    47
\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    48
\isacommand{qed}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    49
\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    50
\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    51
\isacommand{theorem}\ {\isachardoublequote}{\isadigit{2}}\ {\isacharasterisk}\ {\isacharparenleft}{\isasymSum}i\ {\isacharless}\ n\ {\isacharplus}\ {\isadigit{1}}{\isachardot}\ i{\isacharparenright}\ {\isacharequal}\ n\ {\isacharasterisk}\ {\isacharparenleft}n\ {\isacharplus}\ {\isadigit{1}}{\isacharparenright}{\isachardoublequote}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    52
\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    53
\isacommand{proof}\ {\isacharparenleft}induct\ n{\isacharparenright}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    54
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    55
\isacommand{case}\ {\isadigit{0}}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    56
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    57
\isacommand{then}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    58
\isacommand{show}\ {\isacharquery}case\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    59
\isacommand{by}\ simp\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    60
\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    61
\isacommand{next}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    62
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    63
\isacommand{case}\ Suc\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    64
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    65
\isacommand{then}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    66
\isacommand{show}\ {\isacharquery}case\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    67
\isacommand{by}\ simp\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    68
\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    69
\isacommand{qed}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    70
\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    71
\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    72
\isacommand{theorem}\ {\isachardoublequote}{\isadigit{2}}\ {\isacharasterisk}\ {\isacharparenleft}{\isasymSum}i\ {\isacharless}\ n\ {\isacharplus}\ {\isadigit{1}}{\isachardot}\ i{\isacharparenright}\ {\isacharequal}\ n\ {\isacharasterisk}\ {\isacharparenleft}n\ {\isacharplus}\ {\isadigit{1}}{\isacharparenright}{\isachardoublequote}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    73
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    74
\isacommand{by}\ {\isacharparenleft}induct\ n{\isacharparenright}\ simp{\isacharunderscore}all\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    75
\ \ \ \ \isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    76
\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    77
\isacommand{theorem}\ {\isachardoublequote}{\isadigit{2}}\ {\isacharasterisk}\ {\isacharparenleft}{\isasymSum}i\ {\isacharless}\ n\ {\isacharplus}\ {\isadigit{1}}{\isachardot}\ i{\isacharparenright}\ {\isacharequal}\ n\ {\isacharasterisk}\ {\isacharparenleft}n\ {\isacharplus}\ {\isadigit{1}}{\isacharparenright}{\isachardoublequote}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    78
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    79
\isacommand{apply}\ {\isacharparenleft}induct\ n{\isacharparenright}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    80
\ \ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    81
\isacommand{apply}\ simp{\isacharunderscore}all\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    82
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    83
\isacommand{done}\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    84
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    85
\isamarkupchapter{Interaction and debugging%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    86
}
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    87
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    88
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    89
\isamarkupchapter{Calculational reasoning%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    90
}
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    91
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    92
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    93
\isamarkupchapter{Proof by cases and induction%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    94
}
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    95
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    96
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    97
\isamarkupchapter{General natural deduction%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    98
}
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
    99
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   100
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   101
\isamarkupchapter{Example: FIXME%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   102
}
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   103
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   104
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   105
\isamarkupchapter{FIXME%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   106
}
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   107
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   108
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   109
\isamarkupsection{Formal document preparation%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   110
}
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   111
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   112
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   113
\isamarkupsubsection{Example%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   114
}
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   115
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   116
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   117
\begin{isamarkuptext}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   118
See this very document itself.%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   119
\end{isamarkuptext}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   120
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   121
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   122
\isamarkupsubsection{Getting started%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   123
}
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   124
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   125
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   126
\begin{isamarkuptext}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   127
\verb"isatool mkdir Test && isatool make"%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   128
\end{isamarkuptext}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   129
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   130
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   131
\isamarkupsection{Human-readable proof composition in Isar%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   132
}
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   133
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   134
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   135
\isamarkupsubsection{Getting started%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   136
}
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   137
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   138
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   139
\begin{isamarkuptext}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   140
Claim a trivial goal in order to enter proof mode \isa{{\isasymdots}}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   141
\end{isamarkuptext}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   142
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   143
\isacommand{lemma}\ True\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   144
\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   145
\isacommand{proof}\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   146
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   147
\begin{isamarkuptxt}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   148
After the canonical initial refinement step we are left
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   149
    within an \emph{proof body}.%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   150
\end{isamarkuptxt}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   151
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   152
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   153
\begin{isamarkuptxt}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   154
Here we may augment the present local {proof context} as we
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   155
    please.%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   156
\end{isamarkuptxt}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   157
\ \ \isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   158
\isacommand{fix}\ something\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   159
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   160
\isacommand{assume}\ a{\isacharcolon}\ {\isachardoublequote}anything\ something{\isachardoublequote}\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   161
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   162
\begin{isamarkuptxt}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   163
Note that the present configuration may be inspected by
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   164
  several \emph{diagnostic commands}.%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   165
\end{isamarkuptxt}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   166
\ \ \isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   167
\isacommand{term}\ something\ \ %
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   168
\isamarkupcmt{\isa{something{\isasymColon}{\isacharprime}a}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   169
}
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   170
\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   171
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   172
\isacommand{term}\ anything\ \ %
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   173
\isamarkupcmt{\isa{anything{\isasymColon}{\isacharprime}a\ {\isasymRightarrow}\ bool}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   174
}
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   175
\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   176
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   177
\isacommand{thm}\ a\ \ %
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   178
\isamarkupcmt{\isa{anything\ something}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   179
}
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   180
\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   181
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   182
\begin{isamarkuptxt}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   183
We may state local (auxiliary) results as well.%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   184
\end{isamarkuptxt}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   185
\ \ \isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   186
\isacommand{have}\ True\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   187
\isacommand{proof}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   188
\isacommand{qed}\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   189
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   190
\begin{isamarkuptxt}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   191
We are now satisfied.%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   192
\end{isamarkuptxt}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   193
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   194
\isacommand{qed}\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   195
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   196
\isamarkupsubsection{Calculational Reasoning%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   197
}
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   198
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   199
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   200
\begin{isamarkuptext}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   201
Isar is mainly about Natural Deduction, but Calculational Reasoning
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   202
  turns out as a simplified instance of that, so we demonstrate it
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   203
  first.%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   204
\end{isamarkuptext}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   205
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   206
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   207
\isamarkupsubsubsection{Transitive chains%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   208
}
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   209
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   210
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   211
\begin{isamarkuptext}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   212
Technique: establish a chain of local facts, separated by \cmd{also}
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   213
  and terminated by \cmd{finally}; another goal has to follow to point
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   214
  out the final result.%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   215
\end{isamarkuptext}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   216
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   217
\isacommand{lemma}\ {\isachardoublequote}x{\isadigit{1}}\ {\isacharequal}\ x{\isadigit{4}}{\isachardoublequote}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   218
\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   219
\isacommand{proof}\ {\isacharminus}\ \ %
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   220
\isamarkupcmt{do nothing yet%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   221
}
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   222
\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   223
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   224
\isacommand{have}\ {\isachardoublequote}x{\isadigit{1}}\ {\isacharequal}\ x{\isadigit{2}}{\isachardoublequote}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   225
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   226
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   227
\isacommand{also}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   228
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   229
\isacommand{have}\ {\isachardoublequote}x{\isadigit{2}}\ {\isacharequal}\ x{\isadigit{3}}{\isachardoublequote}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   230
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   231
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   232
\isacommand{also}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   233
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   234
\isacommand{have}\ {\isachardoublequote}x{\isadigit{3}}\ {\isacharequal}\ x{\isadigit{4}}{\isachardoublequote}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   235
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   236
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   237
\isacommand{finally}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   238
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   239
\isacommand{show}\ {\isachardoublequote}x{\isadigit{1}}\ {\isacharequal}\ x{\isadigit{4}}{\isachardoublequote}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   240
\isacommand{{\isachardot}}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   241
\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   242
\isacommand{qed}\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   243
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   244
\begin{isamarkuptext}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   245
This may be written more succinctly, using the special term binds
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   246
  ``\isa{{\isasymdots}}'' (for the right-hand side of the last statement) and
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   247
  ``\isa{{\isacharquery}thesis}'' (for the original claim at the head of the
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   248
  proof).%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   249
\end{isamarkuptext}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   250
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   251
\isacommand{lemma}\ {\isachardoublequote}x{\isadigit{1}}\ {\isacharequal}\ x{\isadigit{4}}{\isachardoublequote}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   252
\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   253
\isacommand{proof}\ {\isacharminus}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   254
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   255
\isacommand{have}\ {\isachardoublequote}x{\isadigit{1}}\ {\isacharequal}\ x{\isadigit{2}}{\isachardoublequote}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   256
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   257
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   258
\isacommand{also}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   259
\isacommand{have}\ {\isachardoublequote}{\isasymdots}\ {\isacharequal}\ x{\isadigit{3}}{\isachardoublequote}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   260
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   261
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   262
\isacommand{also}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   263
\isacommand{have}\ {\isachardoublequote}{\isasymdots}\ {\isacharequal}\ x{\isadigit{4}}{\isachardoublequote}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   264
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   265
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   266
\isacommand{finally}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   267
\isacommand{show}\ {\isacharquery}thesis\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   268
\isacommand{{\isachardot}}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   269
\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   270
\isacommand{qed}\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   271
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   272
\begin{isamarkuptext}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   273
The (implicit) forward-chaining steps involved in \cmd{also} and
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   274
  \cmd{finally} are declared in the current context.  The main library
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   275
  of Isabelle/HOL already knows about (mixed) transitivities of \isa{{\isacharequal}}, \isa{{\isacharless}}, \isa{{\isasymle}} etc.%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   276
\end{isamarkuptext}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   277
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   278
\isacommand{lemma}\ {\isachardoublequote}{\isacharparenleft}x{\isadigit{1}}{\isacharcolon}{\isacharcolon}nat{\isacharparenright}\ {\isacharless}\ x{\isadigit{6}}{\isachardoublequote}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   279
\ \ %
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   280
\isamarkupcmt{restriction to type \isa{nat} ensures that \isa{{\isacharless}} is really transitive%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   281
}
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   282
\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   283
\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   284
\isacommand{proof}\ {\isacharminus}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   285
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   286
\isacommand{have}\ {\isachardoublequote}x{\isadigit{1}}\ {\isacharless}\ x{\isadigit{2}}{\isachardoublequote}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   287
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   288
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   289
\isacommand{also}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   290
\isacommand{have}\ {\isachardoublequote}{\isasymdots}\ {\isasymle}\ x{\isadigit{3}}{\isachardoublequote}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   291
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   292
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   293
\isacommand{also}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   294
\isacommand{have}\ {\isachardoublequote}{\isasymdots}\ {\isacharequal}\ x{\isadigit{4}}{\isachardoublequote}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   295
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   296
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   297
\isacommand{also}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   298
\isacommand{have}\ {\isachardoublequote}{\isasymdots}\ {\isacharless}\ x{\isadigit{5}}{\isachardoublequote}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   299
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   300
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   301
\isacommand{also}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   302
\isacommand{have}\ {\isachardoublequote}{\isasymdots}\ {\isacharequal}\ x{\isadigit{6}}{\isachardoublequote}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   303
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   304
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   305
\isacommand{finally}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   306
\isacommand{show}\ {\isacharquery}thesis\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   307
\isacommand{{\isachardot}}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   308
\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   309
\isacommand{qed}\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   310
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   311
\begin{isamarkuptext}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   312
We may also calculate on propositions.%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   313
\end{isamarkuptext}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   314
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   315
\isacommand{lemma}\ True\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   316
\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   317
\isacommand{proof}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   318
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   319
\isacommand{have}\ {\isachardoublequote}A\ {\isasymlongrightarrow}\ B\ {\isasymlongrightarrow}\ C{\isachardoublequote}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   320
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   321
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   322
\isacommand{also}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   323
\isacommand{have}\ A\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   324
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   325
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   326
\isacommand{also}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   327
\isacommand{have}\ B\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   328
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   329
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   330
\isacommand{finally}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   331
\isacommand{have}\ C\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   332
\isacommand{{\isachardot}}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   333
\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   334
\isacommand{qed}\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   335
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   336
\begin{isamarkuptext}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   337
This is getting pretty close to Dijkstra's preferred proof style.%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   338
\end{isamarkuptext}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   339
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   340
\isacommand{lemma}\ True\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   341
\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   342
\isacommand{proof}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   343
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   344
\isacommand{have}\ {\isacharbrackleft}trans{\isacharbrackright}{\isacharcolon}\ {\isachardoublequote}{\isasymAnd}X\ Y\ Z{\isachardot}\ X\ {\isasymlongrightarrow}\ Y\ {\isasymLongrightarrow}\ Y\ {\isasymlongrightarrow}\ Z\ {\isasymLongrightarrow}\ X\ {\isasymlongrightarrow}\ Z{\isachardoublequote}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   345
\isacommand{by}\ rules\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   346
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   347
\isacommand{have}\ {\isachardoublequote}A\ {\isasymlongrightarrow}\ B{\isachardoublequote}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   348
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   349
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   350
\isacommand{also}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   351
\isacommand{have}\ {\isachardoublequote}{\isasymdots}\ {\isasymlongrightarrow}\ C{\isachardoublequote}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   352
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   353
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   354
\isacommand{also}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   355
\isacommand{have}\ {\isachardoublequote}{\isasymdots}\ {\isasymlongrightarrow}\ D{\isachardoublequote}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   356
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   357
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   358
\isacommand{finally}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   359
\isacommand{have}\ {\isachardoublequote}A\ {\isasymlongrightarrow}\ D{\isachardoublequote}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   360
\isacommand{{\isachardot}}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   361
\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   362
\isacommand{qed}\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   363
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   364
\isamarkupsubsubsection{Degenerate calculations and bigstep reasoning%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   365
}
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   366
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   367
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   368
\begin{isamarkuptext}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   369
Instead of \cmd{also}/\cmd{finally} we may use degenerative steps
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   370
  \cmd{moreover}/\cmd{ultimately} to accumulate facts, without
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   371
  applying any forward rules yet.%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   372
\end{isamarkuptext}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   373
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   374
\isacommand{lemma}\ True\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   375
\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   376
\isacommand{proof}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   377
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   378
\isacommand{have}\ A\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   379
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   380
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   381
\isacommand{moreover}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   382
\isacommand{have}\ B\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   383
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   384
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   385
\isacommand{moreover}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   386
\isacommand{have}\ C\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   387
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   388
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   389
\isacommand{ultimately}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   390
\isacommand{have}\ A\ \isakeyword{and}\ B\ \isakeyword{and}\ C\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   391
\isacommand{{\isachardot}}\ \ %
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   392
\isamarkupcmt{Pretty obvious, right?%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   393
}
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   394
\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   395
\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   396
\isacommand{qed}\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   397
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   398
\begin{isamarkuptext}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   399
Both kinds of calculational elements may be used together.%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   400
\end{isamarkuptext}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   401
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   402
\isacommand{lemma}\ True\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   403
\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   404
\isacommand{proof}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   405
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   406
\isacommand{assume}\ reasoning{\isacharunderscore}pattern\ {\isacharbrackleft}trans{\isacharbrackright}{\isacharcolon}\ {\isachardoublequote}A\ {\isasymLongrightarrow}\ B\ {\isasymLongrightarrow}\ C\ {\isasymLongrightarrow}\ D{\isachardoublequote}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   407
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   408
\isacommand{have}\ A\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   409
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   410
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   411
\isacommand{moreover}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   412
\isacommand{have}\ B\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   413
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   414
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   415
\isacommand{moreover}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   416
\isacommand{have}\ C\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   417
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   418
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   419
\isacommand{finally}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   420
\isacommand{have}\ D\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   421
\isacommand{{\isachardot}}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   422
\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   423
\isacommand{qed}\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   424
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   425
\isamarkupsubsection{Natural deduction%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   426
}
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   427
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   428
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   429
\isamarkupsubsubsection{Primitive patterns%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   430
}
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   431
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   432
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   433
\begin{isamarkuptext}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   434
The default theory context admits to perform canonical single-step
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   435
  reasoning (similar to Gentzen) without further ado.%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   436
\end{isamarkuptext}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   437
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   438
\isacommand{lemma}\ True\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   439
\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   440
\isacommand{proof}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   441
\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   442
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   443
\isacommand{have}\ True\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   444
\isacommand{{\isachardot}{\isachardot}}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   445
\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   446
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   447
\isacommand{{\isacharbraceleft}}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   448
\isacommand{assume}\ False\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   449
\ \ \ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   450
\isacommand{then}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   451
\isacommand{have}\ C\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   452
\isacommand{{\isachardot}{\isachardot}}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   453
\isacommand{{\isacharbraceright}}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   454
\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   455
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   456
\isacommand{have}\ {\isachardoublequote}{\isasymnot}\ A{\isachardoublequote}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   457
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   458
\isacommand{proof}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   459
\ \ \ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   460
\isacommand{assume}\ A\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   461
\ \ \ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   462
\isacommand{show}\ False\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   463
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   464
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   465
\isacommand{qed}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   466
\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   467
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   468
\isacommand{{\isacharbraceleft}}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   469
\isacommand{assume}\ {\isachardoublequote}{\isasymnot}\ A{\isachardoublequote}\ \isakeyword{and}\ A\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   470
\ \ \ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   471
\isacommand{then}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   472
\isacommand{have}\ C\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   473
\isacommand{{\isachardot}{\isachardot}}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   474
\isacommand{{\isacharbraceright}}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   475
\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   476
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   477
\isacommand{have}\ {\isachardoublequote}A\ {\isasymlongrightarrow}\ B{\isachardoublequote}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   478
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   479
\isacommand{proof}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   480
\ \ \ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   481
\isacommand{assume}\ A\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   482
\ \ \ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   483
\isacommand{show}\ B\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   484
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   485
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   486
\isacommand{qed}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   487
\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   488
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   489
\isacommand{{\isacharbraceleft}}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   490
\isacommand{assume}\ {\isachardoublequote}A\ {\isasymlongrightarrow}\ B{\isachardoublequote}\ \isakeyword{and}\ A\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   491
\ \ \ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   492
\isacommand{then}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   493
\isacommand{have}\ B\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   494
\isacommand{{\isachardot}{\isachardot}}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   495
\isacommand{{\isacharbraceright}}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   496
\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   497
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   498
\isacommand{have}\ {\isachardoublequote}A\ {\isasymand}\ B{\isachardoublequote}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   499
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   500
\isacommand{proof}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   501
\ \ \ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   502
\isacommand{show}\ A\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   503
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   504
\ \ \ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   505
\isacommand{show}\ B\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   506
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   507
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   508
\isacommand{qed}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   509
\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   510
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   511
\isacommand{{\isacharbraceleft}}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   512
\isacommand{assume}\ {\isachardoublequote}A\ {\isasymand}\ B{\isachardoublequote}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   513
\ \ \ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   514
\isacommand{then}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   515
\isacommand{have}\ A\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   516
\isacommand{{\isachardot}{\isachardot}}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   517
\isacommand{{\isacharbraceright}}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   518
\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   519
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   520
\isacommand{{\isacharbraceleft}}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   521
\isacommand{assume}\ {\isachardoublequote}A\ {\isasymand}\ B{\isachardoublequote}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   522
\ \ \ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   523
\isacommand{then}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   524
\isacommand{have}\ B\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   525
\isacommand{{\isachardot}{\isachardot}}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   526
\isacommand{{\isacharbraceright}}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   527
\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   528
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   529
\isacommand{{\isacharbraceleft}}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   530
\isacommand{assume}\ A\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   531
\ \ \ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   532
\isacommand{then}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   533
\isacommand{have}\ {\isachardoublequote}A\ {\isasymor}\ B{\isachardoublequote}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   534
\isacommand{{\isachardot}{\isachardot}}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   535
\isacommand{{\isacharbraceright}}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   536
\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   537
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   538
\isacommand{{\isacharbraceleft}}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   539
\isacommand{assume}\ B\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   540
\ \ \ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   541
\isacommand{then}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   542
\isacommand{have}\ {\isachardoublequote}A\ {\isasymor}\ B{\isachardoublequote}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   543
\isacommand{{\isachardot}{\isachardot}}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   544
\isacommand{{\isacharbraceright}}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   545
\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   546
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   547
\isacommand{{\isacharbraceleft}}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   548
\isacommand{assume}\ {\isachardoublequote}A\ {\isasymor}\ B{\isachardoublequote}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   549
\ \ \ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   550
\isacommand{then}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   551
\isacommand{have}\ C\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   552
\ \ \ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   553
\isacommand{proof}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   554
\ \ \ \ \ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   555
\isacommand{assume}\ A\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   556
\ \ \ \ \ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   557
\isacommand{then}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   558
\isacommand{show}\ {\isacharquery}thesis\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   559
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   560
\ \ \ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   561
\isacommand{next}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   562
\ \ \ \ \ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   563
\isacommand{assume}\ B\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   564
\ \ \ \ \ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   565
\isacommand{then}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   566
\isacommand{show}\ {\isacharquery}thesis\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   567
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   568
\ \ \ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   569
\isacommand{qed}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   570
\isacommand{{\isacharbraceright}}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   571
\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   572
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   573
\isacommand{have}\ {\isachardoublequote}{\isasymforall}x{\isachardot}\ P\ x{\isachardoublequote}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   574
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   575
\isacommand{proof}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   576
\ \ \ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   577
\isacommand{fix}\ x\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   578
\ \ \ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   579
\isacommand{show}\ {\isachardoublequote}P\ x{\isachardoublequote}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   580
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   581
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   582
\isacommand{qed}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   583
\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   584
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   585
\isacommand{{\isacharbraceleft}}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   586
\isacommand{assume}\ {\isachardoublequote}{\isasymforall}x{\isachardot}\ P\ x{\isachardoublequote}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   587
\ \ \ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   588
\isacommand{then}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   589
\isacommand{have}\ {\isachardoublequote}P\ t{\isachardoublequote}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   590
\isacommand{{\isachardot}{\isachardot}}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   591
\isacommand{{\isacharbraceright}}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   592
\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   593
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   594
\isacommand{have}\ {\isachardoublequote}{\isasymexists}x{\isachardot}\ P\ x{\isachardoublequote}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   595
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   596
\isacommand{proof}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   597
\ \ \ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   598
\isacommand{show}\ {\isachardoublequote}P\ t{\isachardoublequote}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   599
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   600
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   601
\isacommand{qed}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   602
\ \ \isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   603
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   604
\isacommand{{\isacharbraceleft}}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   605
\isacommand{assume}\ {\isachardoublequote}{\isasymexists}x{\isachardot}\ P\ x{\isachardoublequote}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   606
\ \ \ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   607
\isacommand{then}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   608
\isacommand{obtain}\ x\ \isakeyword{where}\ {\isachardoublequote}P\ x{\isachardoublequote}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   609
\isacommand{{\isachardot}{\isachardot}}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   610
\ \ \ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   611
\isacommand{note}\ nothing\ \ %
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   612
\isamarkupcmt{relax%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   613
}
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   614
\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   615
\isacommand{{\isacharbraceright}}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   616
\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   617
\isacommand{qed}\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   618
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   619
\begin{isamarkuptext}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   620
Certainly, this works with derived rules for defined concepts in the
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   621
  same manner.  E.g.\ use the simple-typed set-theory of Isabelle/HOL.%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   622
\end{isamarkuptext}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   623
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   624
\isacommand{lemma}\ True\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   625
\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   626
\isacommand{proof}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   627
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   628
\isacommand{have}\ {\isachardoublequote}y\ {\isasymin}\ {\isacharparenleft}{\isasymInter}x\ {\isasymin}\ A{\isachardot}\ B\ x{\isacharparenright}{\isachardoublequote}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   629
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   630
\isacommand{proof}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   631
\ \ \ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   632
\isacommand{fix}\ x\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   633
\ \ \ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   634
\isacommand{assume}\ {\isachardoublequote}x\ {\isasymin}\ A{\isachardoublequote}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   635
\ \ \ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   636
\isacommand{show}\ {\isachardoublequote}y\ {\isasymin}\ B\ x{\isachardoublequote}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   637
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   638
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   639
\isacommand{qed}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   640
\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   641
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   642
\isacommand{have}\ {\isachardoublequote}y\ {\isasymin}\ {\isacharparenleft}{\isasymUnion}x\ {\isasymin}\ A{\isachardot}\ B\ x{\isacharparenright}{\isachardoublequote}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   643
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   644
\isacommand{proof}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   645
\ \ \ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   646
\isacommand{show}\ {\isachardoublequote}a\ {\isasymin}\ A{\isachardoublequote}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   647
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   648
\ \ \ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   649
\isacommand{show}\ {\isachardoublequote}y\ {\isasymin}\ B\ a{\isachardoublequote}\ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   650
\isacommand{sorry}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   651
\ \ \isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   652
\isacommand{qed}\isanewline
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   653
\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   654
\isacommand{qed}\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   655
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   656
\isamarkupsubsubsection{Variations in structure%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   657
}
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   658
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   659
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   660
\begin{isamarkuptext}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   661
The design of the Isar language takes the user seriously%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   662
\end{isamarkuptext}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   663
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   664
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   665
\isamarkupsubsubsection{Generalized elimination%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   666
}
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   667
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   668
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   669
\isamarkupsubsubsection{Scalable cases and induction%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   670
}
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   671
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   672
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   673
\isamarkupsection{Assimilating the old tactical style%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   674
}
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   675
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   676
%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   677
\begin{isamarkuptext}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   678
Improper commands: 
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   679
  Observation: every Isar subproof may start with a ``script'' of%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   680
\end{isamarkuptext}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   681
\isamarkuptrue%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   682
\isamarkupfalse%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   683
\end{isabellebody}%
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   684
%%% Local Variables:
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   685
%%% mode: latex
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   686
%%% TeX-master: "root"
90e5852e55e6 updated;
wenzelm
parents:
diff changeset
   687
%%% End: