1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
|
\documentclass[11pt]{article}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\input{./title}
\input{./macros}
\begin{document}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Changes 6.2 ===> 6.3
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\shorttitle{Changes from {\Coq} V6.2 to {\Coq} V6.3}
This document describes the main differences between Coq V6.2 and
V6.3. This new version of Coq is characterized by new tactics and a
more flexible guard condition in fixpoints definitions.
We refer to the reference manual
for a more precise description of the new features.
%See the ASCII file \texttt{CHANGES} available by FTP with \Coq\ for
%the minor changes of the bug-fix releases 6.2.1 and 6.2.2.
\section{Changes overview}
\subsection{New Tactics}
\begin{itemize}
\item The \texttt{AutoRewrite} tactic uses a set of theorems
as rewrite rules that are applied sequentially in order to
solve the goal. This tactic is still experimental and subject to changes.
\item \texttt{First} and \texttt{Solve} are two tacticals which
apply to a sequence of
tactics written \texttt{[ \textit{tac}$_1$ | ... |
\textit{tac}$_n$ ]}.
\texttt{First} applies the first tactic in the given list
which does not fail while
\texttt{Solve} applies the first tactic in the list
which completely solves the goal.
\item \texttt{Quote} this new tactic does automatic inversion of
interpretation function for people using Barengregt's so-called
`2-level approach'. See examples in \texttt{theories/DEMOS/DemoQuote.v}.
\item \texttt{Change} \textit{term} \texttt{in} \textit{hyp} is now
available.
\item \texttt{Move} \textit{hyp} \texttt{after} \textit{hyp} allows
to reorder the hypotheses of the local context.
\end{itemize}
\subsection{Changes in existing tactics}
\begin{itemize}
\item \texttt{Intro} or \texttt{Intros} with explicit names
will force an head reduction of the goal in case it does not start
with a product. \\
\texttt{Intro} or \texttt{Intros} without explicit names
generate automatically names for the hypothesis or
variable to be introduced. The algorithm to generate these names
has been slightly changed, this may be a source of incompatibility in the
proofs script.
The new variant \texttt{Intro \textit{ident} after \textit{hyp}} allows to
tell the place where an hypothesis is introduced in the context.
\item \texttt{Auto} the structure of the hints databases for the Auto
tactic was changed in version V6.2.3.
In version V6.3, the following new features were added to Auto~:
\begin{itemize}
\item \texttt{Print} \textit{HintDbname} prints out the contents of
a the hint database \textit{HintDbname};
\item \texttt{Constructors} \textit{Indname} is a new hint
tactic which is equivalent to introduce the \texttt{Resolve}
hint tactic for each
constructor of the \textit{Indname} inductive definition.
\end{itemize}
\item \texttt{Induction} \textit{var} now also performs induction on
a variable \textit{var} of the local context. This extension is
more ``user-friendly'' in the sense it generalizes automatically
above the other hypotheses dependent on the original variable. It
does not duplicate any longer the name of the variable to which it
applies. It should avantageously replaces "Elim" on an
hypothesis/variable or a typical sequence "Generalize" followed by
"Induction" on the generalized variable. But this extension is
experimental and susceptible of change in next releases.
\item \texttt{Let} \textit{ident} \texttt{:=} \textit{term}
\texttt{in} \textit{occurlist} \textit{hyps} replaces the given
occurrences of \texttt{term} in the hypotheses \textit{hyps} (or in
the goal) by the variable \textit{ident} and keep the equality
\textit{ident=term} in the context. This is actually a variant of
\texttt{Generalize} which keeps track of the original term. As the
new \texttt{Induction} to which it can be combined, it is susceptible
of change in next releases.
\item The \texttt{Ring} tactic has been extended and
works now also when the ring is in the \Type{} sort.
\item The tactic \texttt{Correctness} has been improved.
\end{itemize}
\subsection{New toplevel commands}
\begin{description}
\item[\texttt{Time}] Any vernacular command (including invocation of
tactics) can be prefixed by the word \texttt{Time}; then the time
spent is printed after having executed the command. For example :
\texttt{Time Save.} or \texttt{Time Omega.}
\item[\texttt{Focus} $n$] It is now possible to focus on a specific
goal using the command \texttt{Focus} $n$, with $n$ being the
range of the selected subgoal. All the tactics will be applied to
this goal and only the subgoals inherited from the selected goal
are displayed. When the subgoal is completed, the message
\texttt{"Subtree proved"} is printed out then the focus goes back
to the initial goal and the corresponding remaining subgoals are
printed out. The focus commands are reseted by the
\texttt{Undo} command or \texttt{Unfocus}. \texttt{Focus}
without argument keeps its old meaning to only disply the first
subgoal.
\item[Evaluation in Definition] It is now possible to apply a
reduction function to a term inside a definition. Just replace the
term to be defined by
\[ \texttt{Eval}~ \textit{reduction-function}~ \texttt{in}~
\textit{term}\]
at the right hand side of the \texttt{:=} sign in a definition.
\end{description}
\subsection{Language extensions}
\begin{description}
\item[Type reconstruction] The algorithm to solve incomplete
information in terms has been improved. In particular
question marks can be put
in place of the type of universally quantified variables.
\item[Guarded fixpoints] The condition for well-formed
fixpoints has been extended, it is now possible to define
structural fixpoints for positive inductive definitions with
nested recursion (like \texttt{Inductive term : Set := cons : (list term)->term})
\end{description}
\subsection{Libraries}
\begin{description}
\item[Reals] The library of real numbers has been extended and
obeys to the same naming convention than
ARITH and ZARITH: addition is \texttt{Rplus}, theorems stating commutativity are
postfixed by \texttt{\_sym} like \texttt{plus\_sym},
\texttt{Rmult\_sym}, etc. The tactic \texttt{Ring} has been
instantiated on the reals; one can use it to normalize polynomial
expressions over the reals.
The library \texttt{Reals}
has been completed by a definition of limit, derivative
and by others properties and functions.
\end{description}
\subsection{Documentation}
The documentation includes now an index of errors.
\section{Incompatibilities}
You could have to modify your vernacular source for the following
reasons:
\begin{itemize}
\item Some names of variables have changed. Typically, a sequence
"Generalize n; Induction n" should become a "Generalize n; Induction n0",
or better, simply "Induction n" since Induction now works with
hypotheses of the context and generalizes automatically.
\item In the library ZArith, "Zinv" has been renamed as "Zopp", in
order to be coherent with the Reals library. Theorems whose name
includes "Zinv" have been renamed too. A global search-and-replace
of "Zinv" by "Zopp" should be sufficient to update user's
developments.
\item In the library Reals, some names has been changed.
In the file README of the library, there is a script which can be
used to update user's developments.
\item The definition of Exists has changed in LISTS/Streams.
\end{itemize}
\section{New contributions}
We integrated new contributions :
\begin{description}
\item[Finite sets and graphs]
This contribution is due to J. Goubault-Larrecq from Dyade
(INRIA-Bull). It contains a
development of finite sets implemented efficiently
as trees indexed by binary numbers. This representation is used to
implement graphs corresponding to arithmetic formulas and prove the
correctness of a decision procedure testing the satisfiability of
formula by detecting cycles of positive weigth in the graph
\item[$\pi$-calculus] A development of $\pi$-calculus due to
I. Scagnetto from University of Udine.
\item[The three gap theorem] A Proof of the Three Gap Theorem
(Steinhaus Conjecture) by M. Mayero from INRIA Rocquencourt.
\item[Floating point numbers] An axiomatisation of the IEEE 754
norm for Floating point numbers done by P. Loiseleur fron LRI Orsay.
\item[Algebra] Basic notions of algebra designed by L. Pottier from
INRIA Sophia-Antipolis.
\item[Heapsort] A proof of an imperative version of the
Heapsort sorting algorithm developed by J-C. Filli\^atre from
LRI Orsay.
\end{description}
\section{Installation procedure}
\subsection{Uninstalling Coq}
\paragraph{Warning}
It is strongly recommended to clean-up the V6.2 Coq library directory
before you install the new version.
Use the option to coqtop \texttt{-uninstall} that will remove
the binaries and the library files of Coq V6.2 on a Unix system.
\subsection{OS Issues -- Requirements}
\subsubsection{Unix users}
You need Objective Caml version 2.01 or 2.02, and the corresponding
Camlp4 version to compile the system. Both are available by anonymous ftp
at: \\
\verb|ftp://ftp.inria.fr/Projects/Cristal|.
\bigskip
\noindent
Binary distributions are available for the following architectures:
\bigskip
\begin{tabular}{l|c|r}
{\bf OS } & {\bf Processor} & {name of the package}\\
\hline
Linux & 80386 and higher & coq-6.3-linux-i386.tar.gz \\
Solaris & Sparc & coq-6.3-solaris-sparc.tar.gz\\
Digital & Alpha & coq-6.3-OSF1.tar.gz\\
\end{tabular}
\bigskip
If your configuration is in the above list, you don't need to install
Caml and Camlp4 and to compile the system:
just download the package and install the binaries in the right place.
\subsubsection{MS Windows users}
A binary distribution is available for PC under MS Windows 95/98/NT.
The package is named coq-6.3-win.zip.
For installation information see the
files INSTALL.win and README.win.
%users will get the 6.2 version at the same time than
%Unix users !
%A binary distribution is available for Windows 95/NT. Windows 3.1
%users may run the binaries if they install the Win32s module, freely
%available at \verb|ftp.inria.fr|.
\section{Credits}
B. Barras extended the unification algorithm to complete partial terms
and solved various tricky bugs related to universes.\\
D. Delahaye developed the \texttt{AutoRewrite} tactic. He also designed the new
behavior of \texttt{Intro} and provided the tacticals \texttt{First} and
\texttt{Solve}.\\
J.-C. Filli\^atre developed the \texttt{Correctness} tactic.\\
E. Gim\'enez extended the guard condition in fixpoints.\\
H. Herbelin designed the new syntax for definitions and extended the
\texttt{Induction} tactic.\\
P. Loiseleur developed the \texttt{Quote} tactic and
the new design of the \texttt{Auto}
tactic, he also introduced the index of
errors in the documentation.\\
C. Paulin wrote the \texttt{Focus} command and introduced
the reduction functions in definitions, this last feature
was proposed by J.-F. Monin from CNET Lannion.
\end{document}
% Local Variables:
% mode: LaTeX
% TeX-master: t
% End:
% $Id$
|