src/Doc/Ref/document/thm.tex
author wenzelm
Thu, 30 May 2013 17:10:13 +0200
changeset 52244 cb15da7bd550
parent 50085 24ef81a22ee9
child 52406 1e57c3c4e05c
permissions -rw-r--r--
misc tuning;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
30184
37969710e61f removed parts of the manual that are clearly obsolete, or covered by
wenzelm
parents: 11625
diff changeset
     1
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
     2
\chapter{Theorems and Forward Proof}
2040
6db93e6f1b11 Documented sort hypotheses and improved discussion of derivations
paulson
parents: 1876
diff changeset
     3
50085
24ef81a22ee9 updated basic equality rules;
wenzelm
parents: 50083
diff changeset
     4
\section{*Sort hypotheses} \label{sec:sort-hyps}
50082
a025340c4abb removed some historic material that is obsolete or rarely used;
wenzelm
parents: 50074
diff changeset
     5
2040
6db93e6f1b11 Documented sort hypotheses and improved discussion of derivations
paulson
parents: 1876
diff changeset
     6
\begin{ttbox} 
7644
054ecaf3ca22 strip_shyps(_warning);
wenzelm
parents: 6924
diff changeset
     7
strip_shyps         : thm -> thm
054ecaf3ca22 strip_shyps(_warning);
wenzelm
parents: 6924
diff changeset
     8
strip_shyps_warning : thm -> thm
2040
6db93e6f1b11 Documented sort hypotheses and improved discussion of derivations
paulson
parents: 1876
diff changeset
     9
\end{ttbox}
6db93e6f1b11 Documented sort hypotheses and improved discussion of derivations
paulson
parents: 1876
diff changeset
    10
2044
e8d52d05530a Improved discussion of shyps thanks to Markus Wenzel
paulson
parents: 2040
diff changeset
    11
Isabelle's type variables are decorated with sorts, constraining them to
e8d52d05530a Improved discussion of shyps thanks to Markus Wenzel
paulson
parents: 2040
diff changeset
    12
certain ranges of types.  This has little impact when sorts only serve for
e8d52d05530a Improved discussion of shyps thanks to Markus Wenzel
paulson
parents: 2040
diff changeset
    13
syntactic classification of types --- for example, FOL distinguishes between
e8d52d05530a Improved discussion of shyps thanks to Markus Wenzel
paulson
parents: 2040
diff changeset
    14
terms and other types.  But when type classes are introduced through axioms,
e8d52d05530a Improved discussion of shyps thanks to Markus Wenzel
paulson
parents: 2040
diff changeset
    15
this may result in some sorts becoming {\em empty\/}: where one cannot exhibit
4317
7264fa2ff2ec several minor updates;
wenzelm
parents: 4276
diff changeset
    16
a type belonging to it because certain sets of axioms are unsatisfiable.
2044
e8d52d05530a Improved discussion of shyps thanks to Markus Wenzel
paulson
parents: 2040
diff changeset
    17
3108
335efc3f5632 misc updates, tuning, cleanup;
wenzelm
parents: 2044
diff changeset
    18
If a theorem contains a type variable that is constrained by an empty
3485
f27a30a18a17 Now there are TWO spaces after each full stop, so that the Emacs sentence
paulson
parents: 3135
diff changeset
    19
sort, then that theorem has no instances.  It is basically an instance
3108
335efc3f5632 misc updates, tuning, cleanup;
wenzelm
parents: 2044
diff changeset
    20
of {\em ex falso quodlibet}.  But what if it is used to prove another
335efc3f5632 misc updates, tuning, cleanup;
wenzelm
parents: 2044
diff changeset
    21
theorem that no longer involves that sort?  The latter theorem holds
335efc3f5632 misc updates, tuning, cleanup;
wenzelm
parents: 2044
diff changeset
    22
only if under an additional non-emptiness assumption.
2040
6db93e6f1b11 Documented sort hypotheses and improved discussion of derivations
paulson
parents: 1876
diff changeset
    23
3485
f27a30a18a17 Now there are TWO spaces after each full stop, so that the Emacs sentence
paulson
parents: 3135
diff changeset
    24
Therefore, Isabelle's theorems carry around sort hypotheses.  The {\tt
2044
e8d52d05530a Improved discussion of shyps thanks to Markus Wenzel
paulson
parents: 2040
diff changeset
    25
shyps} field is a list of sorts occurring in type variables in the current
e8d52d05530a Improved discussion of shyps thanks to Markus Wenzel
paulson
parents: 2040
diff changeset
    26
{\tt prop} and {\tt hyps} fields.  It may also includes sorts used in the
e8d52d05530a Improved discussion of shyps thanks to Markus Wenzel
paulson
parents: 2040
diff changeset
    27
theorem's proof that no longer appear in the {\tt prop} or {\tt hyps}
3485
f27a30a18a17 Now there are TWO spaces after each full stop, so that the Emacs sentence
paulson
parents: 3135
diff changeset
    28
fields --- so-called {\em dangling\/} sort constraints.  These are the
2044
e8d52d05530a Improved discussion of shyps thanks to Markus Wenzel
paulson
parents: 2040
diff changeset
    29
critical ones, asserting non-emptiness of the corresponding sorts.
e8d52d05530a Improved discussion of shyps thanks to Markus Wenzel
paulson
parents: 2040
diff changeset
    30
 
7644
054ecaf3ca22 strip_shyps(_warning);
wenzelm
parents: 6924
diff changeset
    31
Isabelle automatically removes extraneous sorts from the {\tt shyps} field at
054ecaf3ca22 strip_shyps(_warning);
wenzelm
parents: 6924
diff changeset
    32
the end of a proof, provided that non-emptiness can be established by looking
054ecaf3ca22 strip_shyps(_warning);
wenzelm
parents: 6924
diff changeset
    33
at the theorem's signature: from the {\tt classes} and {\tt arities}
054ecaf3ca22 strip_shyps(_warning);
wenzelm
parents: 6924
diff changeset
    34
information.  This operation is performed by \texttt{strip_shyps} and
054ecaf3ca22 strip_shyps(_warning);
wenzelm
parents: 6924
diff changeset
    35
\texttt{strip_shyps_warning}.
054ecaf3ca22 strip_shyps(_warning);
wenzelm
parents: 6924
diff changeset
    36
054ecaf3ca22 strip_shyps(_warning);
wenzelm
parents: 6924
diff changeset
    37
\begin{ttdescription}
054ecaf3ca22 strip_shyps(_warning);
wenzelm
parents: 6924
diff changeset
    38
  
054ecaf3ca22 strip_shyps(_warning);
wenzelm
parents: 6924
diff changeset
    39
\item[\ttindexbold{strip_shyps} $thm$] removes any extraneous sort hypotheses
054ecaf3ca22 strip_shyps(_warning);
wenzelm
parents: 6924
diff changeset
    40
  that can be witnessed from the type signature.
054ecaf3ca22 strip_shyps(_warning);
wenzelm
parents: 6924
diff changeset
    41
  
054ecaf3ca22 strip_shyps(_warning);
wenzelm
parents: 6924
diff changeset
    42
\item[\ttindexbold{strip_shyps_warning}] is like \texttt{strip_shyps}, but
054ecaf3ca22 strip_shyps(_warning);
wenzelm
parents: 6924
diff changeset
    43
  issues a warning message of any pending sort hypotheses that do not have a
054ecaf3ca22 strip_shyps(_warning);
wenzelm
parents: 6924
diff changeset
    44
  (syntactic) witness.
054ecaf3ca22 strip_shyps(_warning);
wenzelm
parents: 6924
diff changeset
    45
054ecaf3ca22 strip_shyps(_warning);
wenzelm
parents: 6924
diff changeset
    46
\end{ttdescription}
2040
6db93e6f1b11 Documented sort hypotheses and improved discussion of derivations
paulson
parents: 1876
diff changeset
    47
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    48
11622
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    49
\section{Proof terms}\label{sec:proofObjects}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    50
\index{proof terms|(} Isabelle can record the full meta-level proof of each
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    51
theorem.  The proof term contains all logical inferences in detail.
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    52
%while
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    53
%omitting bookkeeping steps that have no logical meaning to an outside
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    54
%observer.  Rewriting steps are recorded in similar detail as the output of
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    55
%simplifier tracing. 
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    56
Resolution and rewriting steps are broken down to primitive rules of the
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    57
meta-logic. The proof term can be inspected by a separate proof-checker,
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    58
for example.
1590
1547174673e1 Describes proof objects and Deriv module
paulson
parents: 1119
diff changeset
    59
11622
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    60
According to the well-known {\em Curry-Howard isomorphism}, a proof can
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    61
be viewed as a $\lambda$-term. Following this idea, proofs
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    62
in Isabelle are internally represented by a datatype similar to the one for
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    63
terms described in \S\ref{sec:terms}.
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    64
\begin{ttbox}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    65
infix 8 % %%;
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    66
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    67
datatype proof =
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    68
   PBound of int
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    69
 | Abst of string * typ option * proof
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    70
 | AbsP of string * term option * proof
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    71
 | op % of proof * term option
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    72
 | op %% of proof * proof
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    73
 | Hyp of term
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    74
 | PThm of (string * (string * string list) list) *
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    75
           proof * term * typ list option
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    76
 | PAxm of string * term * typ list option
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    77
 | Oracle of string * term * typ list option
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    78
 | MinProof of proof list;
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    79
\end{ttbox}
1590
1547174673e1 Describes proof objects and Deriv module
paulson
parents: 1119
diff changeset
    80
11622
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    81
\begin{ttdescription}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    82
\item[\ttindexbold{Abst} ($a$, $\tau$, $prf$)] is the abstraction over
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    83
a {\it term variable} of type $\tau$ in the body $prf$. Logically, this
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    84
corresponds to $\bigwedge$ introduction. The name $a$ is used only for
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    85
parsing and printing.
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    86
\item[\ttindexbold{AbsP} ($a$, $\varphi$, $prf$)] is the abstraction
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    87
over a {\it proof variable} standing for a proof of proposition $\varphi$
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    88
in the body $prf$. This corresponds to $\Longrightarrow$ introduction.
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    89
\item[$prf$ \% $t$] \index{\%@{\tt\%}|bold}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    90
is the application of proof $prf$ to term $t$
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    91
which corresponds to $\bigwedge$ elimination.
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    92
\item[$prf@1$ \%\% $prf@2$] \index{\%\%@{\tt\%\%}|bold}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    93
is the application of proof $prf@1$ to
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    94
proof $prf@2$ which corresponds to $\Longrightarrow$ elimination.
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    95
\item[\ttindexbold{PBound} $i$] is a {\em proof variable} with de Bruijn
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    96
\cite{debruijn72} index $i$.
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    97
\item[\ttindexbold{Hyp} $\varphi$] corresponds to the use of a meta level
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    98
hypothesis $\varphi$.
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
    99
\item[\ttindexbold{PThm} (($name$, $tags$), $prf$, $\varphi$, $\overline{\tau}$)]
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   100
stands for a pre-proved theorem, where $name$ is the name of the theorem,
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   101
$prf$ is its actual proof, $\varphi$ is the proven proposition,
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   102
and $\overline{\tau}$ is
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   103
a type assignment for the type variables occurring in the proposition.
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   104
\item[\ttindexbold{PAxm} ($name$, $\varphi$, $\overline{\tau}$)]
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   105
corresponds to the use of an axiom with name $name$ and proposition
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   106
$\varphi$, where $\overline{\tau}$ is a type assignment for the type
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   107
variables occurring in the proposition.
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   108
\item[\ttindexbold{Oracle} ($name$, $\varphi$, $\overline{\tau}$)]
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   109
denotes the invocation of an oracle with name $name$ which produced
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   110
a proposition $\varphi$, where $\overline{\tau}$ is a type assignment
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   111
for the type variables occurring in the proposition.
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   112
\item[\ttindexbold{MinProof} $prfs$]
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   113
represents a {\em minimal proof} where $prfs$ is a list of theorems,
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   114
axioms or oracles.
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   115
\end{ttdescription}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   116
Note that there are no separate constructors
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   117
for abstraction and application on the level of {\em types}, since
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   118
instantiation of type variables is accomplished via the type assignments
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   119
attached to {\tt Thm}, {\tt Axm} and {\tt Oracle}.
1590
1547174673e1 Describes proof objects and Deriv module
paulson
parents: 1119
diff changeset
   120
1547174673e1 Describes proof objects and Deriv module
paulson
parents: 1119
diff changeset
   121
Each theorem's derivation is stored as the {\tt der} field of its internal
1547174673e1 Describes proof objects and Deriv module
paulson
parents: 1119
diff changeset
   122
record: 
1547174673e1 Describes proof objects and Deriv module
paulson
parents: 1119
diff changeset
   123
\begin{ttbox} 
11622
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   124
#2 (#der (rep_thm conjI));
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   125
{\out PThm (("HOL.conjI", []),}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   126
{\out   AbsP ("H", None, AbsP ("H", None, \dots)), \dots, None) %}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   127
{\out     None % None : Proofterm.proof}
1590
1547174673e1 Describes proof objects and Deriv module
paulson
parents: 1119
diff changeset
   128
\end{ttbox}
11622
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   129
This proof term identifies a labelled theorem, {\tt conjI} of theory
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   130
\texttt{HOL}, whose underlying proof is
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   131
{\tt AbsP ("H", None, AbsP ("H", None, $\dots$))}. 
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   132
The theorem is applied to two (implicit) term arguments, which correspond
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   133
to the two variables occurring in its proposition.
1590
1547174673e1 Describes proof objects and Deriv module
paulson
parents: 1119
diff changeset
   134
11622
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   135
Isabelle's inference kernel can produce proof objects with different
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   136
levels of detail. This is controlled via the global reference variable
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   137
\ttindexbold{proofs}:
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   138
\begin{ttdescription}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   139
\item[proofs := 0;] only record uses of oracles
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   140
\item[proofs := 1;] record uses of oracles as well as dependencies
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   141
  on other theorems and axioms
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   142
\item[proofs := 2;] record inferences in full detail
1590
1547174673e1 Describes proof objects and Deriv module
paulson
parents: 1119
diff changeset
   143
\end{ttdescription}
11622
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   144
Reconstruction and checking of proofs as described in \S\ref{sec:reconstruct_proofs}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   145
will not work for proofs constructed with {\tt proofs} set to
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   146
{\tt 0} or {\tt 1}.
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   147
Theorems involving oracles will be printed with a
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   148
suffixed \verb|[!]| to point out the different quality of confidence achieved.
5371
e27558a68b8d emacs local vars;
wenzelm
parents: 4607
diff changeset
   149
7871
30fb773113a1 Documented thm_deps.
berghofe
parents: 7644
diff changeset
   150
\medskip
30fb773113a1 Documented thm_deps.
berghofe
parents: 7644
diff changeset
   151
11622
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   152
The dependencies of theorems can be viewed using the function
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   153
\ttindexbold{thm_deps}\index{theorems!dependencies}:
7871
30fb773113a1 Documented thm_deps.
berghofe
parents: 7644
diff changeset
   154
\begin{ttbox}
30fb773113a1 Documented thm_deps.
berghofe
parents: 7644
diff changeset
   155
thm_deps [\(thm@1\), \(\ldots\), \(thm@n\)];
30fb773113a1 Documented thm_deps.
berghofe
parents: 7644
diff changeset
   156
\end{ttbox}
30fb773113a1 Documented thm_deps.
berghofe
parents: 7644
diff changeset
   157
generates the dependency graph of the theorems $thm@1$, $\ldots$, $thm@n$ and
11622
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   158
displays it using Isabelle's graph browser. For this to work properly,
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   159
the theorems in question have to be proved with {\tt proofs} set to a value
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   160
greater than {\tt 0}. You can use
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   161
\begin{ttbox}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   162
ThmDeps.enable : unit -> unit
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   163
ThmDeps.disable : unit -> unit
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   164
\end{ttbox}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   165
to set \texttt{proofs} appropriately.
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   166
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   167
\subsection{Reconstructing and checking proof terms}\label{sec:reconstruct_proofs}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   168
\index{proof terms!reconstructing}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   169
\index{proof terms!checking}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   170
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   171
When looking at the above datatype of proofs more closely, one notices that
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   172
some arguments of constructors are {\it optional}. The reason for this is that
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   173
keeping a full proof term for each theorem would result in enormous memory
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   174
requirements. Fortunately, typical proof terms usually contain quite a lot of
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   175
redundant information that can be reconstructed from the context. Therefore,
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   176
Isabelle's inference kernel creates only {\em partial} (or {\em implicit})
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   177
\index{proof terms!partial} proof terms, in which
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   178
all typing information in terms, all term and type labels of abstractions
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   179
{\tt AbsP} and {\tt Abst}, and (if possible) some argument terms of
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   180
\verb!%! are omitted. The following functions are available for
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   181
reconstructing and checking proof terms:
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   182
\begin{ttbox}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   183
Reconstruct.reconstruct_proof :
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   184
  Sign.sg -> term -> Proofterm.proof -> Proofterm.proof
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   185
Reconstruct.expand_proof :
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   186
  Sign.sg -> string list -> Proofterm.proof -> Proofterm.proof
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   187
ProofChecker.thm_of_proof : theory -> Proofterm.proof -> thm
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   188
\end{ttbox}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   189
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   190
\begin{ttdescription}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   191
\item[Reconstruct.reconstruct_proof $sg$ $t$ $prf$]
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   192
turns the partial proof $prf$ into a full proof of the
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   193
proposition denoted by $t$, with respect to signature $sg$.
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   194
Reconstruction will fail with an error message if $prf$
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   195
is not a proof of $t$, is ill-formed, or does not contain
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   196
sufficient information for reconstruction by
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   197
{\em higher order pattern unification}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   198
\cite{nipkow-patterns, Berghofer-Nipkow:2000:TPHOL}.
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   199
The latter may only happen for proofs
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   200
built up ``by hand'' but not for those produced automatically
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   201
by Isabelle's inference kernel.
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   202
\item[Reconstruct.expand_proof $sg$
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   203
  \ttlbrack$name@1$, $\ldots$, $name@n${\ttrbrack} $prf$]
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   204
expands and reconstructs the proofs of all theorems with names
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   205
$name@1$, $\ldots$, $name@n$ in the (full) proof $prf$.
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   206
\item[ProofChecker.thm_of_proof $thy$ $prf$] turns the (full) proof
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   207
$prf$ into a theorem with respect to theory $thy$ by replaying
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   208
it using only primitive rules from Isabelle's inference kernel.
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   209
\end{ttdescription}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   210
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   211
\subsection{Parsing and printing proof terms}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   212
\index{proof terms!parsing}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   213
\index{proof terms!printing}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   214
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   215
Isabelle offers several functions for parsing and printing
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   216
proof terms. The concrete syntax for proof terms is described
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   217
in Fig.\ts\ref{fig:proof_gram}.
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   218
Implicit term arguments in partial proofs are indicated
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   219
by ``{\tt _}''.
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   220
Type arguments for theorems and axioms may be specified using
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   221
\verb!%! or ``$\cdot$'' with an argument of the form {\tt TYPE($type$)}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   222
(see \S\ref{sec:basic_syntax}).
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   223
They must appear before any other term argument of a theorem
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   224
or axiom. In contrast to term arguments, type arguments may
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   225
be completely omitted.
7871
30fb773113a1 Documented thm_deps.
berghofe
parents: 7644
diff changeset
   226
\begin{ttbox}
11625
74cdf24724ea Tuned section about parsing and printing proof terms.
berghofe
parents: 11622
diff changeset
   227
ProofSyntax.read_proof : theory -> bool -> string -> Proofterm.proof
74cdf24724ea Tuned section about parsing and printing proof terms.
berghofe
parents: 11622
diff changeset
   228
ProofSyntax.pretty_proof : Sign.sg -> Proofterm.proof -> Pretty.T
74cdf24724ea Tuned section about parsing and printing proof terms.
berghofe
parents: 11622
diff changeset
   229
ProofSyntax.pretty_proof_of : bool -> thm -> Pretty.T
74cdf24724ea Tuned section about parsing and printing proof terms.
berghofe
parents: 11622
diff changeset
   230
ProofSyntax.print_proof_of : bool -> thm -> unit
7871
30fb773113a1 Documented thm_deps.
berghofe
parents: 7644
diff changeset
   231
\end{ttbox}
11622
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   232
\begin{figure}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   233
\begin{center}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   234
\begin{tabular}{rcl}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   235
$proof$  & $=$ & {\tt Lam} $params${\tt .} $proof$ ~~$|$~~
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   236
                 $\Lambda params${\tt .} $proof$ \\
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   237
         & $|$ & $proof$ \verb!%! $any$ ~~$|$~~
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   238
                 $proof$ $\cdot$ $any$ \\
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   239
         & $|$ & $proof$ \verb!%%! $proof$ ~~$|$~~
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   240
                 $proof$ {\boldmath$\cdot$} $proof$ \\
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   241
         & $|$ & $id$ ~~$|$~~ $longid$ \\\\
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   242
$param$  & $=$ & $idt$ ~~$|$~~ $idt$ {\tt :} $prop$ ~~$|$~~
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   243
                 {\tt (} $param$ {\tt )} \\\\
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   244
$params$ & $=$ & $param$ ~~$|$~~ $param$ $params$
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   245
\end{tabular}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   246
\end{center}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   247
\caption{Proof term syntax}\label{fig:proof_gram}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   248
\end{figure}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   249
The function {\tt read_proof} reads in a proof term with
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   250
respect to a given theory. The boolean flag indicates whether
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   251
the proof term to be parsed contains explicit typing information
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   252
to be taken into account.
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   253
Usually, typing information is left implicit and
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   254
is inferred during proof reconstruction. The pretty printing
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   255
functions operating on theorems take a boolean flag as an
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   256
argument which indicates whether the proof term should
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   257
be reconstructed before printing.
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   258
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   259
The following example (based on Isabelle/HOL) illustrates how
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   260
to parse and check proof terms. We start by parsing a partial
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   261
proof term
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   262
\begin{ttbox}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   263
val prf = ProofSyntax.read_proof Main.thy false
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   264
  "impI % _ % _ %% (Lam H : _. conjE % _ % _ % _ %% H %%
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   265
     (Lam (H1 : _) H2 : _. conjI % _ % _ %% H2 %% H1))";
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   266
{\out val prf = PThm (("HOL.impI", []), \dots, \dots, None) % None % None %%}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   267
{\out   AbsP ("H", None, PThm (("HOL.conjE", []), \dots, \dots, None) %}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   268
{\out     None % None % None %% PBound 0 %%}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   269
{\out     AbsP ("H1", None, AbsP ("H2", None, \dots))) : Proofterm.proof}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   270
\end{ttbox}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   271
The statement to be established by this proof is
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   272
\begin{ttbox}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   273
val t = term_of
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   274
  (read_cterm (sign_of Main.thy) ("A & B --> B & A", propT));
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   275
{\out val t = Const ("Trueprop", "bool => prop") $}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   276
{\out   (Const ("op -->", "[bool, bool] => bool") $}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   277
{\out     \dots $ \dots : Term.term}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   278
\end{ttbox}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   279
Using {\tt t} we can reconstruct the full proof
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   280
\begin{ttbox}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   281
val prf' = Reconstruct.reconstruct_proof (sign_of Main.thy) t prf;
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   282
{\out val prf' = PThm (("HOL.impI", []), \dots, \dots, Some []) %}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   283
{\out   Some (Const ("op &", \dots) $ Free ("A", \dots) $ Free ("B", \dots)) %}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   284
{\out   Some (Const ("op &", \dots) $ Free ("B", \dots) $ Free ("A", \dots)) %%}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   285
{\out   AbsP ("H", Some (Const ("Trueprop", \dots) $ \dots), \dots)}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   286
{\out     : Proofterm.proof}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   287
\end{ttbox}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   288
This proof can finally be turned into a theorem
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   289
\begin{ttbox}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   290
val thm = ProofChecker.thm_of_proof Main.thy prf';
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   291
{\out val thm = "A & B --> B & A" : Thm.thm}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   292
\end{ttbox}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   293
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   294
\index{proof terms|)}
27f858e70b3f Added documentation for proof terms.
berghofe
parents: 11163
diff changeset
   295
\index{theorems|)}
7871
30fb773113a1 Documented thm_deps.
berghofe
parents: 7644
diff changeset
   296
5371
e27558a68b8d emacs local vars;
wenzelm
parents: 4607
diff changeset
   297
e27558a68b8d emacs local vars;
wenzelm
parents: 4607
diff changeset
   298
%%% Local Variables: 
e27558a68b8d emacs local vars;
wenzelm
parents: 4607
diff changeset
   299
%%% mode: latex
e27558a68b8d emacs local vars;
wenzelm
parents: 4607
diff changeset
   300
%%% TeX-master: "ref"
e27558a68b8d emacs local vars;
wenzelm
parents: 4607
diff changeset
   301
%%% End: