doc-src/Ref/theories.tex
author wenzelm
Thu, 24 Mar 2011 13:54:39 +0100
changeset 42081 21697a5cb34a
parent 39838 eb47307ab930
child 42840 e87888b4152f
permissions -rw-r--r--
indentation;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
145
422197c5a078 added subsection 'Classes and types';
wenzelm
parents: 141
diff changeset
     1
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
     2
\chapter{Theories, Terms and Types} \label{theories}
30184
37969710e61f removed parts of the manual that are clearly obsolete, or covered by
wenzelm
parents: 19627
diff changeset
     3
\index{theories|(}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
     4
6568
b38bc78d9a9d theory loader stuff updated and improved;
wenzelm
parents: 5390
diff changeset
     5
\section{The theory loader}\label{sec:more-theories}
b38bc78d9a9d theory loader stuff updated and improved;
wenzelm
parents: 5390
diff changeset
     6
\index{theories!reading}\index{files!reading}
b38bc78d9a9d theory loader stuff updated and improved;
wenzelm
parents: 5390
diff changeset
     7
b38bc78d9a9d theory loader stuff updated and improved;
wenzelm
parents: 5390
diff changeset
     8
Isabelle's theory loader manages dependencies of the internal graph of theory
b38bc78d9a9d theory loader stuff updated and improved;
wenzelm
parents: 5390
diff changeset
     9
nodes (the \emph{theory database}) and the external view of the file system.
138
9ba8bff1addc added chapter "Defining Theories" and made changes for new Readthy functions
clasohm
parents: 104
diff changeset
    10
6568
b38bc78d9a9d theory loader stuff updated and improved;
wenzelm
parents: 5390
diff changeset
    11
\medskip Theory and {\ML} files are located by skimming through the
b38bc78d9a9d theory loader stuff updated and improved;
wenzelm
parents: 5390
diff changeset
    12
directories listed in Isabelle's internal load path, which merely contains the
b38bc78d9a9d theory loader stuff updated and improved;
wenzelm
parents: 5390
diff changeset
    13
current directory ``\texttt{.}'' by default.  The load path may be accessed by
b38bc78d9a9d theory loader stuff updated and improved;
wenzelm
parents: 5390
diff changeset
    14
the following operations.
332
01b87a921967 final Springer copy
lcp
parents: 324
diff changeset
    15
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
    16
\begin{ttbox}
6568
b38bc78d9a9d theory loader stuff updated and improved;
wenzelm
parents: 5390
diff changeset
    17
show_path: unit -> string list
b38bc78d9a9d theory loader stuff updated and improved;
wenzelm
parents: 5390
diff changeset
    18
add_path: string -> unit
b38bc78d9a9d theory loader stuff updated and improved;
wenzelm
parents: 5390
diff changeset
    19
del_path: string -> unit
b38bc78d9a9d theory loader stuff updated and improved;
wenzelm
parents: 5390
diff changeset
    20
reset_path: unit -> unit
7440
c1829208180f added with_path;
wenzelm
parents: 7168
diff changeset
    21
with_path: string -> ('a -> 'b) -> 'a -> 'b
11052
1379e49c0ee9 added no_document;
wenzelm
parents: 9695
diff changeset
    22
no_document: ('a -> 'b) -> 'a -> 'b
286
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
    23
\end{ttbox}
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
    24
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
    25
\begin{ttdescription}
6568
b38bc78d9a9d theory loader stuff updated and improved;
wenzelm
parents: 5390
diff changeset
    26
\item[\ttindexbold{show_path}();] displays the load path components in
6571
wenzelm
parents: 6569
diff changeset
    27
  canonical string representation (which is always according to Unix rules).
6568
b38bc78d9a9d theory loader stuff updated and improved;
wenzelm
parents: 5390
diff changeset
    28
  
6569
wenzelm
parents: 6568
diff changeset
    29
\item[\ttindexbold{add_path} "$dir$";] adds component $dir$ to the beginning
wenzelm
parents: 6568
diff changeset
    30
  of the load path.
6568
b38bc78d9a9d theory loader stuff updated and improved;
wenzelm
parents: 5390
diff changeset
    31
  
6569
wenzelm
parents: 6568
diff changeset
    32
\item[\ttindexbold{del_path} "$dir$";] removes any occurrences of component
6568
b38bc78d9a9d theory loader stuff updated and improved;
wenzelm
parents: 5390
diff changeset
    33
  $dir$ from the load path.
b38bc78d9a9d theory loader stuff updated and improved;
wenzelm
parents: 5390
diff changeset
    34
  
b38bc78d9a9d theory loader stuff updated and improved;
wenzelm
parents: 5390
diff changeset
    35
\item[\ttindexbold{reset_path}();] resets the load path to ``\texttt{.}''
b38bc78d9a9d theory loader stuff updated and improved;
wenzelm
parents: 5390
diff changeset
    36
  (current directory) only.
7440
c1829208180f added with_path;
wenzelm
parents: 7168
diff changeset
    37
  
c1829208180f added with_path;
wenzelm
parents: 7168
diff changeset
    38
\item[\ttindexbold{with_path} "$dir$" $f$ $x$;] temporarily adds component
11052
1379e49c0ee9 added no_document;
wenzelm
parents: 9695
diff changeset
    39
  $dir$ to the beginning of the load path while executing $(f~x)$.
1379e49c0ee9 added no_document;
wenzelm
parents: 9695
diff changeset
    40
  
1379e49c0ee9 added no_document;
wenzelm
parents: 9695
diff changeset
    41
\item[\ttindexbold{no_document} $f$ $x$;] temporarily disables {\LaTeX}
1379e49c0ee9 added no_document;
wenzelm
parents: 9695
diff changeset
    42
  document generation while executing $(f~x)$.
7440
c1829208180f added with_path;
wenzelm
parents: 7168
diff changeset
    43
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
    44
\end{ttdescription}
286
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
    45
7440
c1829208180f added with_path;
wenzelm
parents: 7168
diff changeset
    46
Furthermore, in operations referring indirectly to some file (e.g.\ 
c1829208180f added with_path;
wenzelm
parents: 7168
diff changeset
    47
\texttt{use_dir}) the argument may be prefixed by a directory that will be
c1829208180f added with_path;
wenzelm
parents: 7168
diff changeset
    48
temporarily appended to the load path, too.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    49
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    50
866
2d3d020eef11 added documentation of bind_thm, qed, qed_goal, get_thm, thms_of
clasohm
parents: 864
diff changeset
    51
\section{Basic operations on theories}\label{BasicOperationsOnTheories}
4384
429cba89b4c8 \subsection{*Theory inclusion};
wenzelm
parents: 4374
diff changeset
    52
429cba89b4c8 \subsection{*Theory inclusion};
wenzelm
parents: 4374
diff changeset
    53
\subsection{*Theory inclusion}
429cba89b4c8 \subsection{*Theory inclusion};
wenzelm
parents: 4374
diff changeset
    54
\begin{ttbox}
429cba89b4c8 \subsection{*Theory inclusion};
wenzelm
parents: 4374
diff changeset
    55
transfer    : theory -> thm -> thm
429cba89b4c8 \subsection{*Theory inclusion};
wenzelm
parents: 4374
diff changeset
    56
\end{ttbox}
429cba89b4c8 \subsection{*Theory inclusion};
wenzelm
parents: 4374
diff changeset
    57
39838
eb47307ab930 removed some obsolete reference material;
wenzelm
parents: 30184
diff changeset
    58
Transferring theorems to super theories has no logical significance,
eb47307ab930 removed some obsolete reference material;
wenzelm
parents: 30184
diff changeset
    59
but may affect some operations in subtle ways (e.g.\ implicit merges
eb47307ab930 removed some obsolete reference material;
wenzelm
parents: 30184
diff changeset
    60
of signatures when applying rules, or pretty printing of theorems).
4384
429cba89b4c8 \subsection{*Theory inclusion};
wenzelm
parents: 4374
diff changeset
    61
429cba89b4c8 \subsection{*Theory inclusion};
wenzelm
parents: 4374
diff changeset
    62
\begin{ttdescription}
429cba89b4c8 \subsection{*Theory inclusion};
wenzelm
parents: 4374
diff changeset
    63
429cba89b4c8 \subsection{*Theory inclusion};
wenzelm
parents: 4374
diff changeset
    64
\item[\ttindexbold{transfer} $thy$ $thm$] transfers theorem $thm$ to
429cba89b4c8 \subsection{*Theory inclusion};
wenzelm
parents: 4374
diff changeset
    65
  theory $thy$, provided the latter includes the theory of $thm$.
429cba89b4c8 \subsection{*Theory inclusion};
wenzelm
parents: 4374
diff changeset
    66
  
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
    67
\end{ttdescription}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    68
1369
b82815e61b30 corrected documentation of pseudo theories;
clasohm
parents: 866
diff changeset
    69
11623
9c95b6a76e15 Added label for section on terms.
berghofe
parents: 11052
diff changeset
    70
\section{Terms}\label{sec:terms}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    71
\index{terms|bold}
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
    72
Terms belong to the \ML\ type \mltydx{term}, which is a concrete datatype
3108
335efc3f5632 misc updates, tuning, cleanup;
wenzelm
parents: 1905
diff changeset
    73
with six constructors:
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    74
\begin{ttbox}
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    75
type indexname = string * int;
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    76
infix 9 $;
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    77
datatype term = Const of string * typ
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    78
              | Free  of string * typ
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    79
              | Var   of indexname * typ
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    80
              | Bound of int
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    81
              | Abs   of string * typ * term
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    82
              | op $  of term * term;
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    83
\end{ttbox}
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
    84
\begin{ttdescription}
4317
7264fa2ff2ec several minor updates;
wenzelm
parents: 3485
diff changeset
    85
\item[\ttindexbold{Const} ($a$, $T$)] \index{constants|bold}
8136
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
    86
  is the \textbf{constant} with name~$a$ and type~$T$.  Constants include
286
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
    87
  connectives like $\land$ and $\forall$ as well as constants like~0
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
    88
  and~$Suc$.  Other constants may be required to define a logic's concrete
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
    89
  syntax.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    90
4317
7264fa2ff2ec several minor updates;
wenzelm
parents: 3485
diff changeset
    91
\item[\ttindexbold{Free} ($a$, $T$)] \index{variables!free|bold}
8136
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
    92
  is the \textbf{free variable} with name~$a$ and type~$T$.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    93
4317
7264fa2ff2ec several minor updates;
wenzelm
parents: 3485
diff changeset
    94
\item[\ttindexbold{Var} ($v$, $T$)] \index{unknowns|bold}
8136
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
    95
  is the \textbf{scheme variable} with indexname~$v$ and type~$T$.  An
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
    96
  \mltydx{indexname} is a string paired with a non-negative index, or
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
    97
  subscript; a term's scheme variables can be systematically renamed by
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
    98
  incrementing their subscripts.  Scheme variables are essentially free
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
    99
  variables, but may be instantiated during unification.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   100
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   101
\item[\ttindexbold{Bound} $i$] \index{variables!bound|bold}
8136
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
   102
  is the \textbf{bound variable} with de Bruijn index~$i$, which counts the
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   103
  number of lambdas, starting from zero, between a variable's occurrence
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   104
  and its binding.  The representation prevents capture of variables.  For
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   105
  more information see de Bruijn \cite{debruijn72} or
6592
c120262044b6 Now uses manual.bib; some references updated
paulson
parents: 6571
diff changeset
   106
  Paulson~\cite[page~376]{paulson-ml2}.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   107
4317
7264fa2ff2ec several minor updates;
wenzelm
parents: 3485
diff changeset
   108
\item[\ttindexbold{Abs} ($a$, $T$, $u$)]
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   109
  \index{lambda abs@$\lambda$-abstractions|bold}
8136
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
   110
  is the $\lambda$-\textbf{abstraction} with body~$u$, and whose bound
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   111
  variable has name~$a$ and type~$T$.  The name is used only for parsing
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   112
  and printing; it has no logical significance.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   113
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   114
\item[$t$ \$ $u$] \index{$@{\tt\$}|bold} \index{function applications|bold}
8136
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
   115
is the \textbf{application} of~$t$ to~$u$.
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   116
\end{ttdescription}
9695
ec7d7f877712 proper setup of iman.sty/extra.sty/ttbox.sty;
wenzelm
parents: 8136
diff changeset
   117
Application is written as an infix operator to aid readability.  Here is an
ec7d7f877712 proper setup of iman.sty/extra.sty/ttbox.sty;
wenzelm
parents: 8136
diff changeset
   118
\ML\ pattern to recognize FOL formulae of the form~$A\imp B$, binding the
ec7d7f877712 proper setup of iman.sty/extra.sty/ttbox.sty;
wenzelm
parents: 8136
diff changeset
   119
subformulae to~$A$ and~$B$:
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   120
\begin{ttbox}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   121
Const("Trueprop",_) $ (Const("op -->",_) $ A $ B)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   122
\end{ttbox}
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   123
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   124
4317
7264fa2ff2ec several minor updates;
wenzelm
parents: 3485
diff changeset
   125
\section{*Variable binding}
286
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   126
\begin{ttbox}
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   127
loose_bnos     : term -> int list
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   128
incr_boundvars : int -> term -> term
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   129
abstract_over  : term*term -> term
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   130
variant_abs    : string * typ * term -> string * term
8136
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
   131
aconv          : term * term -> bool\hfill\textbf{infix}
286
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   132
\end{ttbox}
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   133
These functions are all concerned with the de Bruijn representation of
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   134
bound variables.
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   135
\begin{ttdescription}
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   136
\item[\ttindexbold{loose_bnos} $t$]
286
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   137
  returns the list of all dangling bound variable references.  In
6669
5f1ce866c497 locale documentation (from Florian)
paulson
parents: 6658
diff changeset
   138
  particular, \texttt{Bound~0} is loose unless it is enclosed in an
5f1ce866c497 locale documentation (from Florian)
paulson
parents: 6658
diff changeset
   139
  abstraction.  Similarly \texttt{Bound~1} is loose unless it is enclosed in
286
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   140
  at least two abstractions; if enclosed in just one, the list will contain
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   141
  the number 0.  A well-formed term does not contain any loose variables.
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   142
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   143
\item[\ttindexbold{incr_boundvars} $j$]
332
01b87a921967 final Springer copy
lcp
parents: 324
diff changeset
   144
  increases a term's dangling bound variables by the offset~$j$.  This is
286
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   145
  required when moving a subterm into a context where it is enclosed by a
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   146
  different number of abstractions.  Bound variables with a matching
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   147
  abstraction are unaffected.
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   148
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   149
\item[\ttindexbold{abstract_over} $(v,t)$]
286
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   150
  forms the abstraction of~$t$ over~$v$, which may be any well-formed term.
6669
5f1ce866c497 locale documentation (from Florian)
paulson
parents: 6658
diff changeset
   151
  It replaces every occurrence of \(v\) by a \texttt{Bound} variable with the
286
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   152
  correct index.
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   153
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   154
\item[\ttindexbold{variant_abs} $(a,T,u)$]
286
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   155
  substitutes into $u$, which should be the body of an abstraction.
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   156
  It replaces each occurrence of the outermost bound variable by a free
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   157
  variable.  The free variable has type~$T$ and its name is a variant
332
01b87a921967 final Springer copy
lcp
parents: 324
diff changeset
   158
  of~$a$ chosen to be distinct from all constants and from all variables
286
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   159
  free in~$u$.
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   160
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   161
\item[$t$ \ttindexbold{aconv} $u$]
286
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   162
  tests whether terms~$t$ and~$u$ are \(\alpha\)-convertible: identical up
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   163
  to renaming of bound variables.
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   164
\begin{itemize}
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   165
  \item
6669
5f1ce866c497 locale documentation (from Florian)
paulson
parents: 6658
diff changeset
   166
    Two constants, \texttt{Free}s, or \texttt{Var}s are \(\alpha\)-convertible
286
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   167
    if their names and types are equal.
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   168
    (Variables having the same name but different types are thus distinct.
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   169
    This confusing situation should be avoided!)
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   170
  \item
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   171
    Two bound variables are \(\alpha\)-convertible
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   172
    if they have the same number.
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   173
  \item
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   174
    Two abstractions are \(\alpha\)-convertible
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   175
    if their bodies are, and their bound variables have the same type.
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   176
  \item
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   177
    Two applications are \(\alpha\)-convertible
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   178
    if the corresponding subterms are.
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   179
\end{itemize}
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   180
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   181
\end{ttdescription}
286
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   182
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   183
\section{Certified terms}\index{terms!certified|bold}\index{signatures}
8136
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
   184
A term $t$ can be \textbf{certified} under a signature to ensure that every type
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   185
in~$t$ is well-formed and every constant in~$t$ is a type instance of a
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   186
constant declared in the signature.  The term must be well-typed and its use
6669
5f1ce866c497 locale documentation (from Florian)
paulson
parents: 6658
diff changeset
   187
of bound variables must be well-formed.  Meta-rules such as \texttt{forall_elim}
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   188
take certified terms as arguments.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   189
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   190
Certified terms belong to the abstract type \mltydx{cterm}.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   191
Elements of the type can only be created through the certification process.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   192
In case of error, Isabelle raises exception~\ttindex{TERM}\@.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   193
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   194
\subsection{Printing terms}
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   195
\index{terms!printing of}
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   196
\begin{ttbox}
275
933ec96c522e update towards LNCS
nipkow
parents: 273
diff changeset
   197
     string_of_cterm :           cterm -> string
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   198
Sign.string_of_term  : Sign.sg -> term -> string
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   199
\end{ttbox}
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   200
\begin{ttdescription}
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   201
\item[\ttindexbold{string_of_cterm} $ct$]
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   202
displays $ct$ as a string.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   203
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   204
\item[\ttindexbold{Sign.string_of_term} $sign$ $t$]
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   205
displays $t$ as a string, using the syntax of~$sign$.
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   206
\end{ttdescription}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   207
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   208
\subsection{Making and inspecting certified terms}
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   209
\begin{ttbox}
8136
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
   210
cterm_of       : Sign.sg -> term -> cterm
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
   211
read_cterm     : Sign.sg -> string * typ -> cterm
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
   212
cert_axm       : Sign.sg -> string * term -> string * term
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
   213
read_axm       : Sign.sg -> string * string -> string * term
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
   214
rep_cterm      : cterm -> \{T:typ, t:term, sign:Sign.sg, maxidx:int\}
4543
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   215
Sign.certify_term : Sign.sg -> term -> term * typ * int
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   216
\end{ttbox}
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   217
\begin{ttdescription}
4543
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   218
  
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   219
\item[\ttindexbold{cterm_of} $sign$ $t$] \index{signatures} certifies
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   220
  $t$ with respect to signature~$sign$.
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   221
  
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   222
\item[\ttindexbold{read_cterm} $sign$ ($s$, $T$)] reads the string~$s$
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   223
  using the syntax of~$sign$, creating a certified term.  The term is
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   224
  checked to have type~$T$; this type also tells the parser what kind
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   225
  of phrase to parse.
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   226
  
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   227
\item[\ttindexbold{cert_axm} $sign$ ($name$, $t$)] certifies $t$ with
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   228
  respect to $sign$ as a meta-proposition and converts all exceptions
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   229
  to an error, including the final message
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   230
\begin{ttbox}
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   231
The error(s) above occurred in axiom "\(name\)"
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   232
\end{ttbox}
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   233
4543
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   234
\item[\ttindexbold{read_axm} $sign$ ($name$, $s$)] similar to {\tt
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   235
    cert_axm}, but first reads the string $s$ using the syntax of
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   236
  $sign$.
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   237
  
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   238
\item[\ttindexbold{rep_cterm} $ct$] decomposes $ct$ as a record
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   239
  containing its type, the term itself, its signature, and the maximum
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   240
  subscript of its unknowns.  The type and maximum subscript are
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   241
  computed during certification.
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   242
  
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   243
\item[\ttindexbold{Sign.certify_term}] is a more primitive version of
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   244
  \texttt{cterm_of}, returning the internal representation instead of
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   245
  an abstract \texttt{cterm}.
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   246
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   247
\end{ttdescription}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   248
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   249
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   250
\section{Types}\index{types|bold}
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   251
Types belong to the \ML\ type \mltydx{typ}, which is a concrete datatype with
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   252
three constructor functions.  These correspond to type constructors, free
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   253
type variables and schematic type variables.  Types are classified by sorts,
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   254
which are lists of classes (representing an intersection).  A class is
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   255
represented by a string.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   256
\begin{ttbox}
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   257
type class = string;
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   258
type sort  = class list;
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   259
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   260
datatype typ = Type  of string * typ list
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   261
             | TFree of string * sort
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   262
             | TVar  of indexname * sort;
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   263
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   264
infixr 5 -->;
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   265
fun S --> T = Type ("fun", [S, T]);
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   266
\end{ttbox}
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   267
\begin{ttdescription}
4317
7264fa2ff2ec several minor updates;
wenzelm
parents: 3485
diff changeset
   268
\item[\ttindexbold{Type} ($a$, $Ts$)] \index{type constructors|bold}
8136
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
   269
  applies the \textbf{type constructor} named~$a$ to the type operand list~$Ts$.
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   270
  Type constructors include~\tydx{fun}, the binary function space
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   271
  constructor, as well as nullary type constructors such as~\tydx{prop}.
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   272
  Other type constructors may be introduced.  In expressions, but not in
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   273
  patterns, \hbox{\tt$S$-->$T$} is a convenient shorthand for function
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   274
  types.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   275
4317
7264fa2ff2ec several minor updates;
wenzelm
parents: 3485
diff changeset
   276
\item[\ttindexbold{TFree} ($a$, $s$)] \index{type variables|bold}
8136
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
   277
  is the \textbf{type variable} with name~$a$ and sort~$s$.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   278
4317
7264fa2ff2ec several minor updates;
wenzelm
parents: 3485
diff changeset
   279
\item[\ttindexbold{TVar} ($v$, $s$)] \index{type unknowns|bold}
8136
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
   280
  is the \textbf{type unknown} with indexname~$v$ and sort~$s$.
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   281
  Type unknowns are essentially free type variables, but may be
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   282
  instantiated during unification.
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   283
\end{ttdescription}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   284
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   285
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   286
\section{Certified types}
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   287
\index{types!certified|bold}
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   288
Certified types, which are analogous to certified terms, have type
275
933ec96c522e update towards LNCS
nipkow
parents: 273
diff changeset
   289
\ttindexbold{ctyp}.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   290
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   291
\subsection{Printing types}
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   292
\index{types!printing of}
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   293
\begin{ttbox}
275
933ec96c522e update towards LNCS
nipkow
parents: 273
diff changeset
   294
     string_of_ctyp :           ctyp -> string
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   295
Sign.string_of_typ  : Sign.sg -> typ -> string
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   296
\end{ttbox}
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   297
\begin{ttdescription}
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   298
\item[\ttindexbold{string_of_ctyp} $cT$]
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   299
displays $cT$ as a string.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   300
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   301
\item[\ttindexbold{Sign.string_of_typ} $sign$ $T$]
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   302
displays $T$ as a string, using the syntax of~$sign$.
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   303
\end{ttdescription}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   304
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   305
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   306
\subsection{Making and inspecting certified types}
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   307
\begin{ttbox}
4543
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   308
ctyp_of          : Sign.sg -> typ -> ctyp
8136
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
   309
rep_ctyp         : ctyp -> \{T: typ, sign: Sign.sg\}
4543
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   310
Sign.certify_typ : Sign.sg -> typ -> typ
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   311
\end{ttbox}
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   312
\begin{ttdescription}
4543
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   313
  
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   314
\item[\ttindexbold{ctyp_of} $sign$ $T$] \index{signatures} certifies
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   315
  $T$ with respect to signature~$sign$.
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   316
  
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   317
\item[\ttindexbold{rep_ctyp} $cT$] decomposes $cT$ as a record
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   318
  containing the type itself and its signature.
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   319
  
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   320
\item[\ttindexbold{Sign.certify_typ}] is a more primitive version of
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   321
  \texttt{ctyp_of}, returning the internal representation instead of
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   322
  an abstract \texttt{ctyp}.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   323
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   324
\end{ttdescription}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   325
1846
763f08fb194f Documentation of oracles and their syntax
paulson
parents: 1650
diff changeset
   326
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   327
\index{theories|)}
5369
8384e01b6cf8 added nonterminals, setup;
wenzelm
parents: 4597
diff changeset
   328
8384e01b6cf8 added nonterminals, setup;
wenzelm
parents: 4597
diff changeset
   329
8384e01b6cf8 added nonterminals, setup;
wenzelm
parents: 4597
diff changeset
   330
%%% Local Variables: 
8384e01b6cf8 added nonterminals, setup;
wenzelm
parents: 4597
diff changeset
   331
%%% mode: latex
8384e01b6cf8 added nonterminals, setup;
wenzelm
parents: 4597
diff changeset
   332
%%% TeX-master: "ref"
8384e01b6cf8 added nonterminals, setup;
wenzelm
parents: 4597
diff changeset
   333
%%% End: