\documentclass[11pt]{article}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}

\input{./title}
\input{./macros}

\begin{document}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Changes 6.3.1 ===> 7.0
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\shorttitle{Changes from {\Coq} V6.3.1 to {\Coq} V7}


%This document describes the main differences between {\Coq} V6.3.1 and
%V7. This new version of {\Coq} is characterized by fixed bugs, and
%improvement of implicit arguments synthesis and speed in tactic
%applications.

\def\ltac{{\cal L}_{tac}}

\section*{Overview}

The new major version number is justified by a deep restructuration of
the implementation code of \Coq. For the end-user, {\Coq}
V7 provides the following novelties:

\begin{itemize}
\item A more high-level tactic language called $\ltac$ (see
section~\ref{Tactics})
\item A primitive let-in construction (see section \ref{Letin})
which can also be used in \texttt{Record} definitions
    (as suggested by Randy Pollack)
\item Structuration of the developments in libraries and use of the
dot notation to access names (see section \ref{Names})
\item A search facilities by pattern
provided by Yves Bertot (see section \ref{Search})
\item A ``natural'' syntax for real numbers (see section
\ref{SyntaxExtensions}) 
\item New tactics (and developments) for real numbers 
(see section~\ref{NewTactics})
\item The tactic {\tt Field} which solves equalities using commutative field
theory (see section~\ref{NewTactics})
\item The tactic {\tt Fourier} to solve inequalities, developed by
  Loïc Pottier has been integrated
\item A command to export theories to XML to
be used with Helm's publishing and rendering tools (see section
\ref{XML})
\item A new implementation of extraction (see section \ref{Extraction})
%\item As usual, several bugs fixed and a lot of new ones introduced
\end{itemize}

Incompatibilities are described in section
\ref{Incompatibilities}. Please notice that 
{\tt Program/Realizer} is no more available in {\Coq} V7.

Developers of tactics in ML are invited to read section
\ref{Developers}.

\paragraph{Changes between \Coq{} V7beta and \Coq{} V7}
Some functionalities of \Coq{} V6.3 that were not available in \Coq{}
V7beta has been restored~:
\begin{itemize}
\item A new mechanism for extraction of ML programs has been introduced.
\item \texttt{Correctness} is now supported.
\item Syntax for user-defined tactics calls does not require extra
    parenthesis.
\item \texttt{Elim} can be called even for non-inductive objects
    when the apropriate elimination lemma exists.
\item User defined tokens with arbitrary combination of letters and
    symbols have been reintroduced.
\end{itemize}
\section{Language}
\label{Language}
\subsection{Primitive {\tt let ... in ...} construction}
\label{Letin}
The {\tt let ... in ...} syntax in V6.3.1 was implemented as a
macro. It is now a first-class construction.

\begin{coq_example}
Require ZArith.
Definition eight := [two:=`1 + 1`][four:=`two + two`]`four + four`. 
Print eight.
\end{coq_example}

{\tt Local} definitions and {\tt Remark} inside a section now behaves
as local definitions outside the section.

\begin{coq_example}
Section A.
Local two := `1 + 1`.
Definition four := `two + two`.
End A.
Print four.
\end{coq_example}

The unfolding of a reference with respect to a definition local to a section
is performed by $\delta$ rule. But a ``{\tt let ... in ...}'' inside a term
is not concerned by $\delta$ reduction. Commands to finely reduce this
kind of expression remain to be provided.
\medskip

\paragraph{Alternative syntax}
 A less symbolic but equivalent syntax is available as~:\\ {\tt let
two = `1 + 1` in `two + two`}.

\paragraph{Local definitions in records}
{\tt Local} definitions can be used inside record definitions as
suggested by Randy Pollack~:
\begin{coq_example}
Record local_record : Set := {x:nat; y:=O; H:x=y}.
Print local_record.
Print x.
Print y.
Check H.
\end{coq_example}

\subsection{Libraries and qualified names}
\label{Names}

\paragraph{Identifiers} An identifier is any string beginning by a
letter and followed by letters, digits or simple quotes. The bug
with identifiers ended by a number greater than $2^{30}$ is fixed!

\paragraph{Libraries}

The theories developed in {\Coq} are now stored in {\it libraries}.  A
library is characterized by a name called {\it root} of the
library. By default, two libraries are defined at the beginning of a
{\Coq} session. The first library has root name {\tt Coq} and contains the
standard library of \Coq. The second has root name {\tt Scratch} and
contains all definitions and theorems not explicitly put in a specific
library. 

Libraries have a tree structure. Typically, the {\tt Coq} library
contains the (sub-)libraries {\tt Init}, {\tt Logic}, {\tt Arith},
{\tt Lists}, ... The ``dot notation'' is used to write
(sub-)libraries. Typically, the {\tt Arith} library of {\Coq} standard
library is written ``{\tt Coq.Arith}''.

\smallskip
Remark: no space is allowed
between the dot and the following identifier, otherwise the dot is
interpreted as the final dot of the command!
\smallskip

Libraries and sublibraries can be mapped to physical directories of the
operating system using the command

\begin{quote}
{\tt Add LoadPath {\it physical\_dir} as {\it (sub-)library}}.
\end{quote}

Incidentally, if a {\it (sub-)library} does not already
exists, it is created by the command. This allows users to define new
root libraries.

A library can inherit the tree structure of a physical directory by
using the command

\begin{quote}
{\tt Add Rec LoadPath {\it physical\_dir} as {\it (sub-)library}}.
\end{quote}

At some point, (sub-)libraries contain {\it modules} which coincides
with files at the physical level. Modules themselves may contain
sections, subsections, ... and eventually definitions and theorems.

As for sublibraries, the dot notation is used to denote a specific
module, section, definition or theorem of a library. Typically, {\tt
Coq.Init.Logic.Equality.eq} denotes the Leibniz' equality defined in
section {\tt Equality} of the module {\tt Logic} in the
sublibrary {\tt Init} of the standard library of \Coq. By
this way, a module, section, definition or theorem name is now unique
in \Coq.

\paragraph{Absolute and short names}

The full name of a library, module, section, definition or theorem is
called {\it absolute}. The final identifier {\tt eq} is called the
{\it base name}. We call {\it short name} a name reduced to a single
identifier.  {\Coq} maintains a {\it name table} mapping short names
to absolute names. This greatly simplifies the notations and preserves
compatibility with the previous versions of \Coq.

\paragraph{Visibility and qualified names}
An absolute path is called {\it visible} when its base name suffices
to denote it. This means the base name is mapped to the absolute name
in {\Coq} name table.

All the base names of sublibraries, modules, sections, definitions and
theorems are automatically put in the {\Coq} name table. But sometimes,
names used in a module can hide names defined in another module.
Instead of just distinguishing the clashing names by using the
absolute names, it is enough to prefix the base name just by the name
of its containing section (or module or library). 
% CP : L'exemple avec Equality.eq ne semble pas fonctionner
% E.g. if {\tt eq}
% above is hidden by another definition of same base name, it is enough
% to write {\tt Equality.eq} to access it... unless section {\tt
% Equality} itself has been hidden in which case, it is necessary to
% write {\tt Logic.Equality.eq} and so on. 
Such a name built from
single identifiers separated by dots is called a {\it qualified}
name. Especially, both absolute names and short names are qualified
names. Root names cannot be hidden in such a way fully qualified
(i.e. absolute names) cannot be hidden.

Examples:

\begin{coq_eval}
Reset Initial.
\end{coq_eval}

\begin{coq_example}
Check O.
Definition nat := bool.
Check O.
Check Datatypes.nat.
\end{coq_example}

\paragraph{Requiring a file}

When a ``.vo'' file is required in a physical directory mapped to some
(sub-)library, it is adequately mapped in the whole library structure
known by \Coq. However, no consistency check is currently done to
ensure the required module has actually been compiled with the same
absolute name (e.g. a module can be compiled with absolute name
{\tt Mycontrib.Arith.Plus} but required with absolute name
{\tt HisContrib.ZArith.Plus}).

The command {\tt Add Rec LoadPath} is also available from {\tt coqtop}
and {\tt coqc} by using option \verb=-R= (see section \ref{Tools}).

\subsection{Syntax extensions}
\label{SyntaxExtensions}

\paragraph{``Natural'' syntax for real numbers}
A ``natural'' syntax for real numbers and operations on reals is now
available by putting expressions inside pairs of backquotes.

\begin{coq_example}
Require Reals.
Check ``2*3/(4+2)``.
\end{coq_example}
Remark: A constant, say \verb:``4``:, is equivalent to
\verb:``(1+(1+(1+1)))``:.

\paragraph{{\tt Infix}} was inactive on pretty-printer. Now it works.

\paragraph{Consecutive symbols} are now considered as an unique token.
Exceptions have been coded in the lexer to separate tokens we do not want to
separate (for example \verb:A->~B:), but this is not exhaustive and some spaces
may have to be inserted in some cases which have not been treated
(e.g. \verb:~<nat>O=O: should now be written \verb:~ <nat>O=O:).

%should now be separated (e.g. by a
%space). Typically, the string \verb:A->~<nat>O=O: is no longer
%recognized. It should be written \verb:A-> ~ <nat>O=O:... or simply
%\verb:A->~ <nat>O=O: because of a special treatment for \verb:->:!

\paragraph{The {\tt command} syntactic class for {\tt Grammar}} has
been renamed {\tt constr} consistently with the usage for {\tt Syntax}
extensions. Entries {\tt command1}, {\tt command2}, ... are renamed
accordingly. The type {\tt List} in {\tt Grammar} rules has been
renamed {\tt ast list}.

\paragraph{Default parser in {\tt Grammar} and {\tt Syntax}}
\label{GrammarSyntax}

The default parser for right-hand-side of {\tt Grammar} rules and for
left-hand-side of {\tt Syntax} rule was the {\tt ast} parser.  Now it
is the one of same name as the syntactic class extended (i.e. {\tt
constr}, {\tt tactic} or {\tt vernac}). As a consequence, 
{\verb:<< ... >>:} should be removed.

On the opposite, in rules expecting the {\tt ast} parser,
{\verb:<< ... >>:} should be added in the left-hand-side of {\tt Syntax} rule.
As for {\tt Grammar} rule, a typing constraint, {\tt ast} or {\tt ast
list} needs to be explicitly given to force the use of the {\tt ast}
parser. For {\tt Grammar} rule building a new syntactic class,
different from {\tt constr}, {\tt tactic}, {\tt vernac} or {\tt ast},
any of the previous keyword can be used as type (and therefore as
parser).

See examples in appendix.

\paragraph{Syntax overloading}

 Binding of constructions in Grammar rules is now done with absolute
  paths. This means overloading of syntax for different constructions
  having the same base name is no longer possible.

\paragraph{Timing or abbreviating a sequence of commands}

The syntax {\tt [ {\it phrase$_1$} ... {\it phrase$_n$} ].} is now
available to group several commands into a single one (useful for
{\tt Time} or for grammar extensions abbreviating sequence of commands).

\subsection{Miscellaneous}

\paragraph{Pattern aliases} of dependent type in \verb=Cases=
expressions are currently not supported.

\subsection{Libraries}
The names of directories in \texttt{theories} has been changed. The
directory \texttt{theories/Zarith} has been renamed
\texttt{theories/ZArith} between \Coq{} V7.0beta and V7.0.

A new directory \texttt{theories/IntMap} has been added which
contains an efficient representation of finite sets 
as maps indexed by binary integers. This development has been
developed by J. Goubault and was previously an external contribution.

Some definitions, lemmas and theorems have been added or reorganised,
see the Library documentation for more information.

\section{Tactics}
\label{Tactics}
\def\oc{\textsc{Objective~Caml}}

\subsection{A tactic language: $\ltac$}

$\ltac$ is a new layer of metalanguage to write tactics and especially to deal
with small automations for which the use of the full programmable metalanguage
(\oc{}) would be excessive. $\ltac$ is mainly a small functional core with
recursors and elaborated matching operators for terms but also for proof
contexts. This language can be directly used in proof scripts or in toplevel
definitions ({\tt Tactic~Definition}). It has been noticed that non-trivial
tactics can be written with $\ltac$ and to provide a Turing-complete
programming framework, a quotation has been built to use $\ltac$ in \oc{}.
$\ltac$ has been contributed by David Delahaye and, for more details, see the
Reference Manual. Regarding the foundations of this language, the author page
can be visited at the following URL:\\

\url{http://logical.inria.fr/~delahaye/}

\paragraph{Tactic debugger}

  \paragraph{{\tt Debug $($ On $|$ Off $)$}} turns on/off the tactic
  debugger for $\ltac$.
  This is still very experimental and no documentation is provided yet.


\subsection{New tactics}
\label{NewTactics}
\def\ml{\textsc{ML}}

   \paragraph{{\tt Field}} written by David~Delahaye and Micaela~Mayero solves
equalities using commutative field theory. This tactic is reflexive and has
been implemented using essentially the new tactic language $\ltac$. Only the
table of field theories (as for the tactic {\tt Ring}) is dealt by means of an
\ml{} part. This tactic is currently used in the real number theory. For more
details, see the Reference Manual.

   \paragraph{{\tt Fourier}} written by Loïc Pottier solves linear inequations.

   \paragraph{Other tactics and developments} has been included in the real
numbers library: {\tt DiscrR} proves that a real integer constant $c_1$ is non 
equal to another real integer constant $c_2$; {\tt SplitAbsolu} allows us to 
unfold {\tt Rabsolu} contants and split corresponding conjonctions; 
{\tt SplitRmult} allows us to split a condition that a product is non equal to 
zero into subgoals corresponding to the condition on each subterm of the 
product. All these tactics have been written with the tactic language 
$\ltac$.\\ 
A development on Cauchy series, power series,... has been also added.\\
For more details, see the Reference Manual.

\subsection{Changes in pre-existing tactics}
\label{TacticChanges}

   \paragraph{{\tt Tauto} and {\tt Intuition}} have been rewritten using the
   new tactic language $\ltac$. The code is now quite shorter and a significant
   increase in performances has been noticed. {\tt Tauto} has exactly the same
   behavior. {\tt Intuition} is slightly less powerful (w.r.t. to dependent
   types which are now considered as atomic formulas) but it has clearer
   semantics. This may lead to some incompatibilities.

  \paragraph{{\tt Simpl}} now simplifies mutually defined fixpoints
  as expected (i.e. it does not introduce {\tt Fix id
  \{...\}} expressions).

  \paragraph{{\tt AutoRewrite}} now applies only on main goal and the remaining
  subgoals are handled by\break{}{\tt Hint~Rewrite}. The syntax is now:\\

  {\tt Hint Rewrite $($ -> $|$ <- $)*$ [ $term_1$ $...$ $term_n$ ] in
    $ident$ using $tac$}\\

  Adds the terms $term_1$ $...$ $term_n$ (their types must be equalities) in
  the rewriting database $ident$ with the corresponding orientation (given by
  the arrows; default is left to right) and the tactic $tac$ which is applied
  to the subgoals generated by a rewriting, the main subgoal excluded.\\

  {\tt AutoRewrite  [ $ident_1$ $...$ $ident_n$ ] using $tac$}\\

  Performs all the rewritings given by the databases $ident_1$ $...$ $ident_n$
  applying $tac$ to the main subgoal after each rewriting step.\\

  See the contribution \texttt{contrib/Rocq/DEMOS/Demo\_AutoRewrite.v} for
  examples.

  \paragraph{{\tt Intro $hyp$} and {\bf \tt Intros $hyp_1$ ... $hyp_n$}}
  now fail if the hypothesis/variable name provided already exists.

  \paragraph{{\tt Prolog}} is now part of the core
  system. Don't use {\tt Require Prolog}.

  \paragraph{{\tt Unfold}} now fails when its argument is not an
  unfoldable constant.

  \paragraph{Tactic {\tt Let}} has been renamed into {\tt LetTac}
  and it now relies on the primitive {\tt let-in} constructions

  \paragraph{{\tt Apply ... with ...}} when instantiations are
  redundant or incompatible now behaves smoothly.

  \paragraph{{\tt Decompose}} has now less bugs. Also hypotheses
  are now numbered in order.

  \paragraph{{\tt Linear}} seems to be very rarely used. It has not
  been ported in {\Coq} V7.

  \paragraph{{\tt Program/Realizer}} has not been ported in {\Coq} V7.

\section{Toplevel commands}

\subsection{Searching the environment}
\label{Search}
A new searching mechanism by pattern has been contributed by Yves Bertot.


\paragraph{{\tt SearchPattern {\term}}}
displays the name and type of all theorems of the current
context whose statement's conclusion matches the expression {\term}
where holes in the latter are denoted by ``{\tt ?}''.

\begin{coq_eval}
Reset Initial.
\end{coq_eval}
\begin{coq_example}
Require Arith.
SearchPattern (plus ? ?)=?.
\end{coq_example}

Patterns need not be linear: you can express that the same
expression must occur in two places by using indexed ``{\tt ?}''.

\begin{coq_example}
Require Arith.
SearchPattern (plus ? ?1)=(mult ?1 ?).
\end{coq_example}

\paragraph{{\tt SearchRewrite {\term}}}
displays the name and type of all theorems of the current
context whose statement's conclusion is an equality of which one side matches
the expression {\term}. Holes in {\term} are denoted by ``{\tt ?}''.

\begin{coq_example}
Require Arith.
SearchRewrite (plus ? (plus ? ?)).
\end{coq_example}

\begin{Variants}

\item {\tt SearchPattern {\term} inside {\module$_1$}...{\module$_n$}}\\
{\tt SearchRewrite {\term} inside
{\module$_1$}...{\module$_n$}.}

  This restricts the search to constructions defined in modules {\module$_1$}...{\module$_n$}.

\item {\tt SearchPattern {\term} outside {\module}.}\\
{\tt SearchRewrite {\term} outside {\module$_1$}...{\module$_n$}.}

  This restricts the search to constructions not defined in modules {\module$_1$}...{\module$_n$}.

\end{Variants}

\paragraph{{\tt Search {\ident}.}} has been extended to accept qualified
identifiers and the {\tt inside} and {\tt outside} restrictions as
{\tt SearchPattern} and {\tt SearchRewrite}.

\paragraph{{\tt SearchIsos {\term}.}} has not been ported yet.

\subsection{XML output}
\label{XML}

A printer of {\Coq} theories into XML syntax has been contributed by
Claudio Sacerdoti Coen. Various printing commands (such as {\tt Print
XML Module {\ident}}) allow to produce XML files from
``.vo'' files. In order to experiment these possibilities, you need to
require the \Coq{} \texttt{Xml} module first.

These XML files can be published on the Web, retrieved
and rendered by tools developed in the HELM project (see
http://www.cs.unibo.it/helm).

\subsection{Other new commands}


  \paragraph{{\tt Implicits {\ident}}} associate to \ident{}  
  implicit arguments as if the implicit arguments mode was on.

  \paragraph{{\tt Implicits {\ident} [{\num} \ldots {\num}]}}
        allows to explicitly give what arguments
        have to be considered as implicit in {\ident}.

\begin{coq_example}
Parameter exists : (A:Set)(P:A->Prop)(x:A)(P x)->(EX x:A |(P x)).
Implicits exists.
Print exists.
Implicits exists [1].
Print exists.
\end{coq_example}

\subsection{Syntax standardisation}

The commands on the left are now equivalent to (old) commands on
the right.

\medskip

\begin{tt}
\begin{tabular}{ll}
Set Implicit Arguments & Implicit Arguments On \\
Unset Implicit Arguments ~~~~~ & Implicit Arguments Off \\
Add LoadPath & AddPath \\
Add Rec LoadPath & AddRecPath \\
Remove LoadPath & DelPath \\
Set Silent & Begin Silent \\
Unset Silent & End Silent \\
Print Coercion Paths & Print Path\\
\end{tabular}
\end{tt}

\medskip

Commands on the right remains available for compatibility reasons (except for
{\tt Begin Silent} and {\tt End Silent} which interfere with
section closing, and for the misunderstandable {\tt Print Path}).

\subsection{Other Changes}


\paragraph{Final dot} Commands should now be ended by a final dot ``.'' followed by a blank
(space, return, line feed or tabulation). This is to distinguish from
the dot notation for qualified names where the dot must immediately be
followed by a letter (see section \ref{Names}).

\paragraph{Eval Cbv Delta ... in ...} The {\tt [- {\it
const}]}, if any, should now immediately follow the {\tt Delta} keyword.


\section{Tools}
\label{Tools}

\paragraph{Consistency check for {\tt .vo} files} A check-sum test
avoids to require inconsistent {\tt .vo} files.

\paragraph{Optimal compiler} If your architecture supports it, the native
version of {\tt coqtop} and {\tt coqc} is used by default.

\paragraph{Option -R} The {\tt -R} option to {\tt coqtop} and {\tt
coqc} now serves to link physical path to logical paths (see
\ref{Names}). It expects two arguments, the first being the physical
path and the second its logical alias. It still recursively scans
subdirectories.

\paragraph{Makefile automatic generation} {\tt coq\_makefile} is the
new name for {\tt do\_Makefile}.

\paragraph{Error localisation} Several kind of typing errors are now
located in the source file.

\section{Extraction}\label{Extraction}
Extraction code has been completely rewritten by J.-C. Filliâtre and
P. Letouzey since version V6.3. 
This work is still not finished, but most parts of it are already
usable. It was successfully tested on the \Coq{} theories.

The new mechanism is able to extract programs from any \Coq{} term
(including terms at the Type level). 
A new mechanism to extract Ocaml modules from Coq files has been
added. 

However, the resulting ML term is not guaranteed to be typable in ML
(the next version should incorporate automatically appropriate conversions).

Only extraction towards Ocaml programs is currently available. 
The \verb=ML import= command is not available anymore, the command
\verb=Extract Constant=  can be used to realize a \Coq{} axiom by 
an ML program.

More
information can be found in \verb=$COQTOP/contrib/extraction/README=. 
The syntax of commands is described in the Reference Manual.


\section{Developers}
\label{Developers}
The internals of {\Coq} has changed a lot and will continue to change
significantly in the next months. We recommend tactic developers to
take contact with us for adapting their code. A document describing
the interfaces of the ML modules constituting {\Coq} is available
thanks to J.-C. Filliatre's ocamlweb
documentation tool (see the ``doc'' directory in {\Coq} source).

\section{Incompatibilities}
\label{Incompatibilities}

  You could have to modify your vernacular source for the following
  reasons:

  \begin{itemize}
 
  \item Any of the tactic changes mentioned in section \ref{TacticChanges}.

  \item The ``.vo'' files are not compatible and all ``.v'' files should
  be recompiled.

  \item Consecutive symbols may have to be separated in some cases (see
  section~\ref{SyntaxExtensions}).

  \item Default parsers in {\tt Grammar} and {\tt Syntax} are
  different (see section \ref{GrammarSyntax}).
  
  \item Definition of {\tt D\_in} (Rderiv.v) is now with Rdiv and not 
        with Rmult and Rinv as before.

  \item Pattern aliases of dependent type in \verb=Cases=
        expressions are currently not supported.

  \end{itemize}

A shell script \verb=translate_V6-3-1_to_V7= is available in the archive to
automatically translate V6.3.1 ``.v'' files to V7.0 syntax
(incompatibilities due to changes in tactics semantics are not
treated).

%\section{New users contributions}

\section{Installation procedure}

%\subsection{Operating System Issues -- Requirements}

{\Coq} is available as a source package at 

\begin{quote}
\verb|ftp://ftp.inria.fr/INRIA/coq/V7|\\
\verb|http://coq.inria.fr|
\end{quote}

You need Objective Caml version 3.00 or later, and the corresponding 
Camlp4 version to compile the system. Both are available by anonymous ftp
at:

\begin{quote}
\verb|ftp://ftp.inria.fr/Projects/Cristal|\\
\verb|http://caml.inria.fr|
\end{quote}

\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.1-Linux-i386.tar.gz \\
%Solaris & Sparc & coq-6.3.1-solaris-sparc.tar.gz\\
%Digital & Alpha & coq-6.3.1-OSF1-alpha.tar.gz\\
%\end{tabular}
%\bigskip

%A rpm package is available for i386 Linux users. No other binary
%package is available for this beta release.

%\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.

%\paragraph{MS Windows users}
%
%A binary distribution is available for PC under MS Windows 95/98/NT.
%The package is named coq-6.3.1-win.zip.
%
%For installation information see the 
%files INSTALL.win and README.win.

\section*{Appendix}
\label{Appendix}
We detail the differences between {\Coq} V6.3.1 and V7.0 for the {\tt
Syntax} and {\tt Grammar} default parsers.

\medskip

{\bf Examples in V6.3.1}

\begin{verbatim}
Grammar command command0 :=
  pair [ "(" lcommand($lc1) "," lcommand($lc2) ")" ] ->
         [<<(pair ? ? $lc1 $lc2)>>].

Syntax constr
  level 1:
  pair [<<(pair $_ $_ $t3 $t4)>>] -> [[<hov 0> "(" $t3:E ","[0 1] $t4:E ")" ]].

Grammar znatural formula :=
  form_expr [ expr($p) ] -> [$p]
| form_eq [ expr($p) "=" expr($c) ] -> [<<(eq Z $p $c)>>].

Syntax constr
  level 0:
    Zeq [<<(eq Z $n1 $n2)>>] -> 
      [[<hov 0> "`" (ZEXPR $n1) [1 0] "= "(ZEXPR $n2)"`"]].

Grammar tactic simple_tactic :=
  tauto [ "Tauto" ] -> [(Tauto)].
\end{verbatim}

\medskip

{\bf New form in V7.0beta}

\begin{verbatim}
Grammar constr constr0 :=
  pair [ "(" lconstr($lc1) "," lconstr($lc2) ")" ] -> [ (pair ? ? $lc1 $lc2) ].

Syntax constr
  level 1:
    pair [ (pair $_ $_ $t3 $t4) ] -> [[<hov 0> "(" $t3:E ","[0 1] $t4:E ")" ]].

Grammar znatural formula : constr :=
  form_expr [ expr($p) ] -> [ $p ]
| form_eq [ expr($p) "=" expr($c) ] -> [ (eq Z $p $c) ].

Syntax constr
 level 0:
  Zeq [ (eq Z $n1 $n2) ] -> 
    [<hov 0> "`" (ZEXPR $n1) [1 0] "= "(ZEXPR $n2)"`"]].

Grammar tactic simple_tactic: ast :=
  tauto [ "Tauto" ] -> [(Tauto)].
\end{verbatim}

\end{document}

% Local Variables: 
% mode: LaTeX
% TeX-master: t
% End: 


% $Id$ 

