doc-src/Ref/theories.tex
author nipkow
Wed, 01 Jun 2011 11:51:25 +0200
changeset 43137 32b888e1a170
parent 42840 e87888b4152f
child 42932 34ed34804d90
permissions -rw-r--r--
new lemmas
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
866
2d3d020eef11 added documentation of bind_thm, qed, qed_goal, get_thm, thms_of
clasohm
parents: 864
diff changeset
     5
\section{Basic operations on theories}\label{BasicOperationsOnTheories}
4384
429cba89b4c8 \subsection{*Theory inclusion};
wenzelm
parents: 4374
diff changeset
     6
429cba89b4c8 \subsection{*Theory inclusion};
wenzelm
parents: 4374
diff changeset
     7
\subsection{*Theory inclusion}
429cba89b4c8 \subsection{*Theory inclusion};
wenzelm
parents: 4374
diff changeset
     8
\begin{ttbox}
429cba89b4c8 \subsection{*Theory inclusion};
wenzelm
parents: 4374
diff changeset
     9
transfer    : theory -> thm -> thm
429cba89b4c8 \subsection{*Theory inclusion};
wenzelm
parents: 4374
diff changeset
    10
\end{ttbox}
429cba89b4c8 \subsection{*Theory inclusion};
wenzelm
parents: 4374
diff changeset
    11
39838
eb47307ab930 removed some obsolete reference material;
wenzelm
parents: 30184
diff changeset
    12
Transferring theorems to super theories has no logical significance,
eb47307ab930 removed some obsolete reference material;
wenzelm
parents: 30184
diff changeset
    13
but may affect some operations in subtle ways (e.g.\ implicit merges
eb47307ab930 removed some obsolete reference material;
wenzelm
parents: 30184
diff changeset
    14
of signatures when applying rules, or pretty printing of theorems).
4384
429cba89b4c8 \subsection{*Theory inclusion};
wenzelm
parents: 4374
diff changeset
    15
429cba89b4c8 \subsection{*Theory inclusion};
wenzelm
parents: 4374
diff changeset
    16
\begin{ttdescription}
429cba89b4c8 \subsection{*Theory inclusion};
wenzelm
parents: 4374
diff changeset
    17
429cba89b4c8 \subsection{*Theory inclusion};
wenzelm
parents: 4374
diff changeset
    18
\item[\ttindexbold{transfer} $thy$ $thm$] transfers theorem $thm$ to
429cba89b4c8 \subsection{*Theory inclusion};
wenzelm
parents: 4374
diff changeset
    19
  theory $thy$, provided the latter includes the theory of $thm$.
429cba89b4c8 \subsection{*Theory inclusion};
wenzelm
parents: 4374
diff changeset
    20
  
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
    21
\end{ttdescription}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    22
1369
b82815e61b30 corrected documentation of pseudo theories;
clasohm
parents: 866
diff changeset
    23
11623
9c95b6a76e15 Added label for section on terms.
berghofe
parents: 11052
diff changeset
    24
\section{Terms}\label{sec:terms}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    25
\index{terms|bold}
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
    26
Terms belong to the \ML\ type \mltydx{term}, which is a concrete datatype
3108
335efc3f5632 misc updates, tuning, cleanup;
wenzelm
parents: 1905
diff changeset
    27
with six constructors:
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    28
\begin{ttbox}
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    29
type indexname = string * int;
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    30
infix 9 $;
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    31
datatype term = Const of string * typ
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    32
              | Free  of string * typ
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    33
              | Var   of indexname * typ
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    34
              | Bound of int
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    35
              | Abs   of string * typ * term
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    36
              | op $  of term * term;
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    37
\end{ttbox}
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
    38
\begin{ttdescription}
4317
7264fa2ff2ec several minor updates;
wenzelm
parents: 3485
diff changeset
    39
\item[\ttindexbold{Const} ($a$, $T$)] \index{constants|bold}
8136
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
    40
  is the \textbf{constant} with name~$a$ and type~$T$.  Constants include
286
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
    41
  connectives like $\land$ and $\forall$ as well as constants like~0
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
    42
  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
    43
  syntax.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    44
4317
7264fa2ff2ec several minor updates;
wenzelm
parents: 3485
diff changeset
    45
\item[\ttindexbold{Free} ($a$, $T$)] \index{variables!free|bold}
8136
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
    46
  is the \textbf{free variable} with name~$a$ and type~$T$.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    47
4317
7264fa2ff2ec several minor updates;
wenzelm
parents: 3485
diff changeset
    48
\item[\ttindexbold{Var} ($v$, $T$)] \index{unknowns|bold}
8136
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
    49
  is the \textbf{scheme variable} with indexname~$v$ and type~$T$.  An
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
    50
  \mltydx{indexname} is a string paired with a non-negative index, or
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
    51
  subscript; a term's scheme variables can be systematically renamed by
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
    52
  incrementing their subscripts.  Scheme variables are essentially free
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
    53
  variables, but may be instantiated during unification.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    54
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
    55
\item[\ttindexbold{Bound} $i$] \index{variables!bound|bold}
8136
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
    56
  is the \textbf{bound variable} with de Bruijn index~$i$, which counts the
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
    57
  number of lambdas, starting from zero, between a variable's occurrence
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
    58
  and its binding.  The representation prevents capture of variables.  For
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
    59
  more information see de Bruijn \cite{debruijn72} or
6592
c120262044b6 Now uses manual.bib; some references updated
paulson
parents: 6571
diff changeset
    60
  Paulson~\cite[page~376]{paulson-ml2}.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    61
4317
7264fa2ff2ec several minor updates;
wenzelm
parents: 3485
diff changeset
    62
\item[\ttindexbold{Abs} ($a$, $T$, $u$)]
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
    63
  \index{lambda abs@$\lambda$-abstractions|bold}
8136
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
    64
  is the $\lambda$-\textbf{abstraction} with body~$u$, and whose bound
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
    65
  variable has name~$a$ and type~$T$.  The name is used only for parsing
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
    66
  and printing; it has no logical significance.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    67
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
    68
\item[$t$ \$ $u$] \index{$@{\tt\$}|bold} \index{function applications|bold}
8136
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
    69
is the \textbf{application} of~$t$ to~$u$.
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
    70
\end{ttdescription}
9695
ec7d7f877712 proper setup of iman.sty/extra.sty/ttbox.sty;
wenzelm
parents: 8136
diff changeset
    71
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
    72
\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
    73
subformulae to~$A$ and~$B$:
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
    74
\begin{ttbox}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    75
Const("Trueprop",_) $ (Const("op -->",_) $ A $ B)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    76
\end{ttbox}
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    77
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    78
4317
7264fa2ff2ec several minor updates;
wenzelm
parents: 3485
diff changeset
    79
\section{*Variable binding}
286
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
    80
\begin{ttbox}
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
    81
loose_bnos     : term -> int list
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
    82
incr_boundvars : int -> term -> term
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
    83
abstract_over  : term*term -> term
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
    84
variant_abs    : string * typ * term -> string * term
8136
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
    85
aconv          : term * term -> bool\hfill\textbf{infix}
286
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
    86
\end{ttbox}
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
    87
These functions are all concerned with the de Bruijn representation of
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
    88
bound variables.
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
    89
\begin{ttdescription}
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
    90
\item[\ttindexbold{loose_bnos} $t$]
286
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
    91
  returns the list of all dangling bound variable references.  In
6669
5f1ce866c497 locale documentation (from Florian)
paulson
parents: 6658
diff changeset
    92
  particular, \texttt{Bound~0} is loose unless it is enclosed in an
5f1ce866c497 locale documentation (from Florian)
paulson
parents: 6658
diff changeset
    93
  abstraction.  Similarly \texttt{Bound~1} is loose unless it is enclosed in
286
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
    94
  at least two abstractions; if enclosed in just one, the list will contain
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
    95
  the number 0.  A well-formed term does not contain any loose variables.
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
    96
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
    97
\item[\ttindexbold{incr_boundvars} $j$]
332
01b87a921967 final Springer copy
lcp
parents: 324
diff changeset
    98
  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
    99
  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
   100
  different number of abstractions.  Bound variables with a matching
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   101
  abstraction are unaffected.
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   102
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   103
\item[\ttindexbold{abstract_over} $(v,t)$]
286
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   104
  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
   105
  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
   106
  correct index.
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   107
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   108
\item[\ttindexbold{variant_abs} $(a,T,u)$]
286
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   109
  substitutes into $u$, which should be the body of an abstraction.
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   110
  It replaces each occurrence of the outermost bound variable by a free
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   111
  variable.  The free variable has type~$T$ and its name is a variant
332
01b87a921967 final Springer copy
lcp
parents: 324
diff changeset
   112
  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
   113
  free in~$u$.
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   114
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   115
\item[$t$ \ttindexbold{aconv} $u$]
286
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   116
  tests whether terms~$t$ and~$u$ are \(\alpha\)-convertible: identical up
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   117
  to renaming of bound variables.
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   118
\begin{itemize}
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   119
  \item
6669
5f1ce866c497 locale documentation (from Florian)
paulson
parents: 6658
diff changeset
   120
    Two constants, \texttt{Free}s, or \texttt{Var}s are \(\alpha\)-convertible
286
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   121
    if their names and types are equal.
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   122
    (Variables having the same name but different types are thus distinct.
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   123
    This confusing situation should be avoided!)
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   124
  \item
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   125
    Two bound variables are \(\alpha\)-convertible
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   126
    if they have the same number.
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   127
  \item
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   128
    Two abstractions are \(\alpha\)-convertible
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   129
    if their bodies are, and their bound variables have the same type.
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   130
  \item
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   131
    Two applications are \(\alpha\)-convertible
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   132
    if the corresponding subterms are.
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   133
\end{itemize}
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   134
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   135
\end{ttdescription}
286
e7efbf03562b first draft of Springer book
lcp
parents: 275
diff changeset
   136
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   137
\section{Certified terms}\index{terms!certified|bold}\index{signatures}
8136
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
   138
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
   139
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
   140
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
   141
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
   142
take certified terms as arguments.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   143
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   144
Certified terms belong to the abstract type \mltydx{cterm}.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   145
Elements of the type can only be created through the certification process.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   146
In case of error, Isabelle raises exception~\ttindex{TERM}\@.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   147
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   148
\subsection{Printing terms}
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   149
\index{terms!printing of}
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   150
\begin{ttbox}
275
933ec96c522e update towards LNCS
nipkow
parents: 273
diff changeset
   151
     string_of_cterm :           cterm -> string
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   152
Sign.string_of_term  : Sign.sg -> term -> string
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   153
\end{ttbox}
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   154
\begin{ttdescription}
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   155
\item[\ttindexbold{string_of_cterm} $ct$]
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   156
displays $ct$ as a string.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   157
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   158
\item[\ttindexbold{Sign.string_of_term} $sign$ $t$]
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   159
displays $t$ as a string, using the syntax of~$sign$.
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   160
\end{ttdescription}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   161
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   162
\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
   163
\begin{ttbox}
8136
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
   164
cterm_of       : Sign.sg -> term -> cterm
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
   165
read_cterm     : Sign.sg -> string * typ -> cterm
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
   166
cert_axm       : Sign.sg -> string * term -> string * term
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
   167
read_axm       : Sign.sg -> string * string -> string * term
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
   168
rep_cterm      : cterm -> \{T:typ, t:term, sign:Sign.sg, maxidx:int\}
4543
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   169
Sign.certify_term : Sign.sg -> term -> term * typ * int
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   170
\end{ttbox}
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   171
\begin{ttdescription}
4543
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   172
  
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   173
\item[\ttindexbold{cterm_of} $sign$ $t$] \index{signatures} certifies
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   174
  $t$ with respect to signature~$sign$.
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   175
  
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   176
\item[\ttindexbold{read_cterm} $sign$ ($s$, $T$)] reads the string~$s$
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   177
  using the syntax of~$sign$, creating a certified term.  The term is
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   178
  checked to have type~$T$; this type also tells the parser what kind
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   179
  of phrase to parse.
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   180
  
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   181
\item[\ttindexbold{cert_axm} $sign$ ($name$, $t$)] certifies $t$ with
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   182
  respect to $sign$ as a meta-proposition and converts all exceptions
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   183
  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
   184
\begin{ttbox}
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   185
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
   186
\end{ttbox}
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   187
4543
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   188
\item[\ttindexbold{read_axm} $sign$ ($name$, $s$)] similar to {\tt
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   189
    cert_axm}, but first reads the string $s$ using the syntax of
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   190
  $sign$.
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   191
  
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   192
\item[\ttindexbold{rep_cterm} $ct$] decomposes $ct$ as a record
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   193
  containing its type, the term itself, its signature, and the maximum
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   194
  subscript of its unknowns.  The type and maximum subscript are
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   195
  computed during certification.
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   196
  
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   197
\item[\ttindexbold{Sign.certify_term}] is a more primitive version of
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   198
  \texttt{cterm_of}, returning the internal representation instead of
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   199
  an abstract \texttt{cterm}.
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   200
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   201
\end{ttdescription}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   202
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
\section{Types}\index{types|bold}
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   205
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
   206
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
   207
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
   208
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
   209
represented by a string.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   210
\begin{ttbox}
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   211
type class = string;
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   212
type sort  = class list;
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   213
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   214
datatype typ = Type  of string * typ list
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   215
             | TFree of string * sort
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   216
             | TVar  of indexname * sort;
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   217
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   218
infixr 5 -->;
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   219
fun S --> T = Type ("fun", [S, T]);
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   220
\end{ttbox}
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   221
\begin{ttdescription}
4317
7264fa2ff2ec several minor updates;
wenzelm
parents: 3485
diff changeset
   222
\item[\ttindexbold{Type} ($a$, $Ts$)] \index{type constructors|bold}
8136
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
   223
  applies the \textbf{type constructor} named~$a$ to the type operand list~$Ts$.
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   224
  Type constructors include~\tydx{fun}, the binary function space
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   225
  constructor, as well as nullary type constructors such as~\tydx{prop}.
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   226
  Other type constructors may be introduced.  In expressions, but not in
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   227
  patterns, \hbox{\tt$S$-->$T$} is a convenient shorthand for function
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   228
  types.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   229
4317
7264fa2ff2ec several minor updates;
wenzelm
parents: 3485
diff changeset
   230
\item[\ttindexbold{TFree} ($a$, $s$)] \index{type variables|bold}
8136
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
   231
  is the \textbf{type variable} with name~$a$ and sort~$s$.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   232
4317
7264fa2ff2ec several minor updates;
wenzelm
parents: 3485
diff changeset
   233
\item[\ttindexbold{TVar} ($v$, $s$)] \index{type unknowns|bold}
8136
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
   234
  is the \textbf{type unknown} with indexname~$v$ and sort~$s$.
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   235
  Type unknowns are essentially free type variables, but may be
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   236
  instantiated during unification.
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   237
\end{ttdescription}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   238
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   239
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   240
\section{Certified types}
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   241
\index{types!certified|bold}
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   242
Certified types, which are analogous to certified terms, have type
275
933ec96c522e update towards LNCS
nipkow
parents: 273
diff changeset
   243
\ttindexbold{ctyp}.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   244
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   245
\subsection{Printing types}
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   246
\index{types!printing of}
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   247
\begin{ttbox}
275
933ec96c522e update towards LNCS
nipkow
parents: 273
diff changeset
   248
     string_of_ctyp :           ctyp -> string
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   249
Sign.string_of_typ  : Sign.sg -> typ -> string
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   250
\end{ttbox}
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   251
\begin{ttdescription}
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   252
\item[\ttindexbold{string_of_ctyp} $cT$]
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   253
displays $cT$ as a string.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   254
864
d63b111b917a quite a lot of minor and major revisions (inspecting theories, read_axm,
wenzelm
parents: 478
diff changeset
   255
\item[\ttindexbold{Sign.string_of_typ} $sign$ $T$]
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   256
displays $T$ as a string, using the syntax of~$sign$.
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   257
\end{ttdescription}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   258
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   259
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   260
\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
   261
\begin{ttbox}
4543
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   262
ctyp_of          : Sign.sg -> typ -> ctyp
8136
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7440
diff changeset
   263
rep_ctyp         : ctyp -> \{T: typ, sign: Sign.sg\}
4543
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   264
Sign.certify_typ : Sign.sg -> typ -> typ
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   265
\end{ttbox}
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   266
\begin{ttdescription}
4543
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   267
  
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   268
\item[\ttindexbold{ctyp_of} $sign$ $T$] \index{signatures} certifies
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   269
  $T$ with respect to signature~$sign$.
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   270
  
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   271
\item[\ttindexbold{rep_ctyp} $cT$] decomposes $cT$ as a record
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   272
  containing the type itself and its signature.
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   273
  
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   274
\item[\ttindexbold{Sign.certify_typ}] is a more primitive version of
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   275
  \texttt{ctyp_of}, returning the internal representation instead of
82a45bdd0e80 several minor updates;
wenzelm
parents: 4384
diff changeset
   276
  an abstract \texttt{ctyp}.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   277
324
34bc15b546e6 penultimate Springer draft
lcp
parents: 286
diff changeset
   278
\end{ttdescription}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   279
1846
763f08fb194f Documentation of oracles and their syntax
paulson
parents: 1650
diff changeset
   280
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   281
\index{theories|)}
5369
8384e01b6cf8 added nonterminals, setup;
wenzelm
parents: 4597
diff changeset
   282
8384e01b6cf8 added nonterminals, setup;
wenzelm
parents: 4597
diff changeset
   283
8384e01b6cf8 added nonterminals, setup;
wenzelm
parents: 4597
diff changeset
   284
%%% Local Variables: 
8384e01b6cf8 added nonterminals, setup;
wenzelm
parents: 4597
diff changeset
   285
%%% mode: latex
8384e01b6cf8 added nonterminals, setup;
wenzelm
parents: 4597
diff changeset
   286
%%% TeX-master: "ref"
8384e01b6cf8 added nonterminals, setup;
wenzelm
parents: 4597
diff changeset
   287
%%% End: