src/Doc/Prog_Prove/Basics.thy
author immler
Sun, 03 Nov 2019 21:46:46 -0500
changeset 71034 e0755162093f
parent 69597 ff784d5a5bfb
child 73511 2cdbb6a2f2a7
permissions -rw-r--r--
replace approximation oracle by less ad-hoc @{computation}s
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
47269
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
     1
(*<*)
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
     2
theory Basics
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
     3
imports Main
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
     4
begin
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
     5
(*>*)
67406
23307fd33906 isabelle update_cartouches -c;
wenzelm
parents: 67399
diff changeset
     6
text\<open>
47269
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
     7
This chapter introduces HOL as a functional programming language and shows
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
     8
how to prove properties of functional programs by induction.
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
     9
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    10
\section{Basics}
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    11
52361
7d5ad23b8245 all headings in upper case
nipkow
parents: 52045
diff changeset
    12
\subsection{Types, Terms and Formulas}
47269
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    13
\label{sec:TypesTermsForms}
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    14
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    15
HOL is a typed logic whose type system resembles that of functional
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    16
programming languages. Thus there are
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    17
\begin{description}
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    18
\item[base types,] 
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 69505
diff changeset
    19
in particular \<^typ>\<open>bool\<close>, the type of truth values,
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 69505
diff changeset
    20
\<^typ>\<open>nat\<close>, the type of natural numbers ($\mathbb{N}$), and \indexed{\<^typ>\<open>int\<close>}{int},
47269
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    21
the type of mathematical integers ($\mathbb{Z}$).
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    22
\item[type constructors,]
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
    23
 in particular \<open>list\<close>, the type of
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
    24
lists, and \<open>set\<close>, the type of sets. Type constructors are written
54467
663a927fdc88 comments by Sean Seefried
nipkow
parents: 53015
diff changeset
    25
postfix, i.e., after their arguments. For example,
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 69505
diff changeset
    26
\<^typ>\<open>nat list\<close> is the type of lists whose elements are natural numbers.
47269
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    27
\item[function types,]
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
    28
denoted by \<open>\<Rightarrow>\<close>.
47269
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    29
\item[type variables,]
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 69505
diff changeset
    30
  denoted by \<^typ>\<open>'a\<close>, \<^typ>\<open>'b\<close>, etc., like in ML\@.
47269
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    31
\end{description}
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 69505
diff changeset
    32
Note that \<^typ>\<open>'a \<Rightarrow> 'b list\<close> means \noquotes{@{typ[source]"'a \<Rightarrow> ('b list)"}},
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 69505
diff changeset
    33
not \<^typ>\<open>('a \<Rightarrow> 'b) list\<close>: postfix type constructors have precedence
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
    34
over \<open>\<Rightarrow>\<close>.
47269
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    35
55317
834a84553e02 started index
nipkow
parents: 54703
diff changeset
    36
\conceptidx{Terms}{term} are formed as in functional programming by
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
    37
applying functions to arguments. If \<open>f\<close> is a function of type
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
    38
\<open>\<tau>\<^sub>1 \<Rightarrow> \<tau>\<^sub>2\<close> and \<open>t\<close> is a term of type
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 69505
diff changeset
    39
\<open>\<tau>\<^sub>1\<close> then \<^term>\<open>f t\<close> is a term of type \<open>\<tau>\<^sub>2\<close>. We write \<open>t :: \<tau>\<close> to mean that term \<open>t\<close> has type \<open>\<tau>\<close>.
47269
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    40
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    41
\begin{warn}
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
    42
There are many predefined infix symbols like \<open>+\<close> and \<open>\<le>\<close>.
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 69505
diff changeset
    43
The name of the corresponding binary function is \<^term>\<open>(+)\<close>,
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 69505
diff changeset
    44
not just \<open>+\<close>. That is, \<^term>\<open>x + y\<close> is nice surface syntax
67399
eab6ce8368fa ran isabelle update_op on all sources
nipkow
parents: 63680
diff changeset
    45
(``syntactic sugar'') for \noquotes{@{term[source]"(+) x y"}}.
47269
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    46
\end{warn}
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    47
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    48
HOL also supports some basic constructs from functional programming:
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    49
\begin{quote}
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
    50
\<open>(if b then t\<^sub>1 else t\<^sub>2)\<close>\\
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
    51
\<open>(let x = t in u)\<close>\\
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
    52
\<open>(case t of pat\<^sub>1 \<Rightarrow> t\<^sub>1 | \<dots> | pat\<^sub>n \<Rightarrow> t\<^sub>n)\<close>
47269
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    53
\end{quote}
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    54
\begin{warn}
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    55
The above three constructs must always be enclosed in parentheses
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    56
if they occur inside other constructs.
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    57
\end{warn}
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
    58
Terms may also contain \<open>\<lambda>\<close>-abstractions. For example,
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 69505
diff changeset
    59
\<^term>\<open>\<lambda>x. x\<close> is the identity function.
47269
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    60
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
    61
\conceptidx{Formulas}{formula} are terms of type \<open>bool\<close>.
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 69505
diff changeset
    62
There are the basic constants \<^term>\<open>True\<close> and \<^term>\<open>False\<close> and
47269
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    63
the usual logical connectives (in decreasing order of precedence):
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
    64
\<open>\<not>\<close>, \<open>\<and>\<close>, \<open>\<or>\<close>, \<open>\<longrightarrow>\<close>.
47269
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    65
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
    66
\conceptidx{Equality}{equality} is available in the form of the infix function \<open>=\<close>
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 69505
diff changeset
    67
of type \<^typ>\<open>'a \<Rightarrow> 'a \<Rightarrow> bool\<close>. It also works for formulas, where
47269
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    68
it means ``if and only if''.
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    69
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 69505
diff changeset
    70
\conceptidx{Quantifiers}{quantifier} are written \<^prop>\<open>\<forall>x. P\<close> and \<^prop>\<open>\<exists>x. P\<close>.
47269
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    71
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    72
Isabelle automatically computes the type of each variable in a term. This is
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    73
called \concept{type inference}.  Despite type inference, it is sometimes
55317
834a84553e02 started index
nipkow
parents: 54703
diff changeset
    74
necessary to attach an explicit \concept{type constraint} (or \concept{type
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
    75
annotation}) to a variable or term.  The syntax is \<open>t :: \<tau>\<close> as in
57804
nipkow
parents: 56989
diff changeset
    76
\mbox{\noquotes{@{term[source] "m + (n::nat)"}}}. Type constraints may be
47269
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    77
needed to
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
    78
disambiguate terms involving overloaded functions such as \<open>+\<close>.
47269
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    79
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
    80
Finally there are the universal quantifier \<open>\<And>\<close>\index{$4@\isasymAnd} and the implication
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
    81
\<open>\<Longrightarrow>\<close>\index{$3@\isasymLongrightarrow}. They are part of the Isabelle framework, not the logic
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
    82
HOL. Logically, they agree with their HOL counterparts \<open>\<forall>\<close> and
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
    83
\<open>\<longrightarrow>\<close>, but operationally they behave differently. This will become
47269
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    84
clearer as we go along.
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    85
\begin{warn}
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    86
Right-arrows of all kinds always associate to the right. In particular,
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    87
the formula
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
    88
\<open>A\<^sub>1 \<Longrightarrow> A\<^sub>2 \<Longrightarrow> A\<^sub>3\<close> means \<open>A\<^sub>1 \<Longrightarrow> (A\<^sub>2 \<Longrightarrow> A\<^sub>3)\<close>.
58655
nipkow
parents: 58521
diff changeset
    89
The (Isabelle-specific\footnote{To display implications in this style in
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
    90
Isabelle/jEdit you need to set Plugins $>$ Plugin Options $>$ Isabelle/General $>$ Print Mode to ``\texttt{brackets}'' and restart.}) notation \mbox{\<open>\<lbrakk> A\<^sub>1; \<dots>; A\<^sub>n \<rbrakk> \<Longrightarrow> A\<close>}
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
    91
is short for the iterated implication \mbox{\<open>A\<^sub>1 \<Longrightarrow> \<dots> \<Longrightarrow> A\<^sub>n \<Longrightarrow> A\<close>}.
47269
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    92
Sometimes we also employ inference rule notation:
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
    93
\inferrule{\mbox{\<open>A\<^sub>1\<close>}\\ \mbox{\<open>\<dots>\<close>}\\ \mbox{\<open>A\<^sub>n\<close>}}
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
    94
{\mbox{\<open>A\<close>}}
47269
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    95
\end{warn}
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    96
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    97
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    98
\subsection{Theories}
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
    99
\label{sec:Basic:Theories}
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
   100
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
   101
Roughly speaking, a \concept{theory} is a named collection of types,
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
   102
functions, and theorems, much like a module in a programming language.
57804
nipkow
parents: 56989
diff changeset
   103
All Isabelle text needs to go into a theory.
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
   104
The general format of a theory \<open>T\<close> is
47269
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
   105
\begin{quote}
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
   106
\indexed{\isacom{theory}}{theory} \<open>T\<close>\\
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
   107
\indexed{\isacom{imports}}{imports} \<open>T\<^sub>1 \<dots> T\<^sub>n\<close>\\
47269
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
   108
\isacom{begin}\\
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
   109
\emph{definitions, theorems and proofs}\\
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
   110
\isacom{end}
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
   111
\end{quote}
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
   112
where \<open>T\<^sub>1 \<dots> T\<^sub>n\<close> are the names of existing
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
   113
theories that \<open>T\<close> is based on. The \<open>T\<^sub>i\<close> are the
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
   114
direct \conceptidx{parent theories}{parent theory} of \<open>T\<close>.
47269
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
   115
Everything defined in the parent theories (and their parents, recursively) is
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
   116
automatically visible. Each theory \<open>T\<close> must
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
   117
reside in a \concept{theory file} named \<open>T.thy\<close>.
47269
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
   118
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
   119
\begin{warn}
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 69505
diff changeset
   120
HOL contains a theory \<^theory>\<open>Main\<close>\index{Main@\<^theory>\<open>Main\<close>}, the union of all the basic
47269
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
   121
predefined theories like arithmetic, lists, sets, etc.
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 68224
diff changeset
   122
Unless you know what you are doing, always include \<open>Main\<close>
47269
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
   123
as a direct or indirect parent of all your theories.
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
   124
\end{warn}
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
   125
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
   126
In addition to the theories that come with the Isabelle/HOL distribution
68224
1f7308050349 prefer HTTPS;
wenzelm
parents: 67605
diff changeset
   127
(see \<^url>\<open>https://isabelle.in.tum.de/library/HOL\<close>)
47269
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
   128
there is also the \emph{Archive of Formal Proofs}
67605
3dd0dfe04fcb corrected some URLs
Lars Hupel <lars.hupel@mytum.de>
parents: 67406
diff changeset
   129
at \<^url>\<open>https://isa-afp.org\<close>, a growing collection of Isabelle theories
47269
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
   130
that everybody can contribute to.
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
   131
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
   132
\subsection{Quotation Marks}
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
   133
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
   134
The textual definition of a theory follows a fixed syntax with keywords like
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
   135
\isacommand{begin} and \isacommand{datatype}.  Embedded in this syntax are
52361
7d5ad23b8245 all headings in upper case
nipkow
parents: 52045
diff changeset
   136
the types and formulas of HOL.  To distinguish the two levels, everything
47269
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
   137
HOL-specific (terms and types) must be enclosed in quotation marks:
61643
712d3d64c38b added proof state output warning
nipkow
parents: 61431
diff changeset
   138
\texttt{"}\dots\texttt{"}. Quotation marks around a
47269
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
   139
single identifier can be dropped.  When Isabelle prints a syntax error
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
   140
message, it refers to the HOL syntax as the \concept{inner syntax} and the
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
   141
enclosing theory language as the \concept{outer syntax}.
61643
712d3d64c38b added proof state output warning
nipkow
parents: 61431
diff changeset
   142
62222
54a7b9422d3e synchronized with book
nipkow
parents: 62129
diff changeset
   143
\ifsem\else
61643
712d3d64c38b added proof state output warning
nipkow
parents: 61431
diff changeset
   144
\subsection{Proof State}
712d3d64c38b added proof state output warning
nipkow
parents: 61431
diff changeset
   145
712d3d64c38b added proof state output warning
nipkow
parents: 61431
diff changeset
   146
\begin{warn}
62222
54a7b9422d3e synchronized with book
nipkow
parents: 62129
diff changeset
   147
By default Isabelle/jEdit does not show the proof state but this tutorial
54a7b9422d3e synchronized with book
nipkow
parents: 62129
diff changeset
   148
refers to it frequently. You should tick the ``Proof state'' box
54a7b9422d3e synchronized with book
nipkow
parents: 62129
diff changeset
   149
to see the proof state in the output window.
61643
712d3d64c38b added proof state output warning
nipkow
parents: 61431
diff changeset
   150
\end{warn}
62222
54a7b9422d3e synchronized with book
nipkow
parents: 62129
diff changeset
   151
\fi
67406
23307fd33906 isabelle update_cartouches -c;
wenzelm
parents: 67399
diff changeset
   152
\<close>
47269
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
   153
(*<*)
29aa0c071875 New manual Programming and Proving in Isabelle/HOL
nipkow
parents:
diff changeset
   154
end
67399
eab6ce8368fa ran isabelle update_op on all sources
nipkow
parents: 63680
diff changeset
   155
(*>*)