diff options
| author | herbelin | 2001-09-25 11:59:26 +0000 |
|---|---|---|
| committer | herbelin | 2001-09-25 11:59:26 +0000 |
| commit | 9c36b5cf5b3be2261e693b30834fe19181b26757 (patch) | |
| tree | c93177a38a05f52f991313eb1e388224907bd446 | |
| parent | 1aa9a588940815c1232c9e2b54b1a497e035663f (diff) | |
Pr�c�dent Changes.tex
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@8228 85f007b7-540e-0410-9357-904b9bb8a0f7
| -rwxr-xr-x | doc/ChangesV7-0.tex | 757 |
1 files changed, 757 insertions, 0 deletions
diff --git a/doc/ChangesV7-0.tex b/doc/ChangesV7-0.tex new file mode 100755 index 0000000000..7b10f4f825 --- /dev/null +++ b/doc/ChangesV7-0.tex @@ -0,0 +1,757 @@ +\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{{\sf 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:\\ + +{\sf 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{{\sf 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$ + |
