%BEGIN LATEX \setheaders{Introduction} %END LATEX \chapter*{Introduction} This document is the Reference Manual of version \coqversion{} of the \Coq\ proof assistant. A companion volume, the \Coq\ Tutorial, is provided for the beginners. It is advised to read the Tutorial first. A book~\cite{CoqArt} on practical uses of the \Coq{} system was published in 2004 and is a good support for both the beginner and the advanced user. %The system \Coq\ is designed to develop mathematical proofs. It can be %used by mathematicians to develop mathematical theories and by %computer scientists to write formal specifications, The \Coq{} system is designed to develop mathematical proofs, and especially to write formal specifications, programs and to verify that programs are correct with respect to their specification. It provides a specification language named \gallina. Terms of \gallina\ can represent programs as well as properties of these programs and proofs of these properties. Using the so-called \textit{Curry-Howard isomorphism}, programs, properties and proofs are formalized in the same language called \textit{Calculus of Inductive Constructions}, that is a $\lambda$-calculus with a rich type system. All logical judgments in \Coq\ are typing judgments. The very heart of the Coq system is the type-checking algorithm that checks the correctness of proofs, in other words that checks that a program complies to its specification. \Coq\ also provides an interactive proof assistant to build proofs using specific programs called \textit{tactics}. All services of the \Coq\ proof assistant are accessible by interpretation of a command language called \textit{the vernacular}. \Coq\ has an interactive mode in which commands are interpreted as the user types them in from the keyboard and a compiled mode where commands are processed from a file. \begin{itemize} \item The interactive mode may be used as a debugging mode in which the user can develop his theories and proofs step by step, backtracking if needed and so on. The interactive mode is run with the {\tt coqtop} command from the operating system (which we shall assume to be some variety of UNIX in the rest of this document). \item The compiled mode acts as a proof checker taking a file containing a whole development in order to ensure its correctness. Moreover, \Coq's compiler provides an output file containing a compact representation of its input. The compiled mode is run with the {\tt coqc} command from the operating system. \end{itemize} These two modes are documented in Chapter~\ref{Addoc-coqc}. Other modes of interaction with \Coq{} are possible: through an emacs shell window, an emacs generic user-interface for proof assistant ({\ProofGeneral}~\cite{ProofGeneral}) or through a customized interface (PCoq~\cite{Pcoq}). These facilities are not documented here. There is also a \Coq{} Integrated Development Environment described in Chapter~\ref{Addoc-coqide}. \section*{How to read this book} This is a Reference Manual, not a User Manual, so it is not made for a continuous reading. However, it has some structure that is explained below. \begin{itemize} \item The first part describes the specification language, Gallina. Chapters~\ref{Gallina} and~\ref{Gallina-extension} describe the concrete syntax as well as the meaning of programs, theorems and proofs in the Calculus of Inductive Constructions. Chapter~\ref{Theories} describes the standard library of \Coq. Chapter~\ref{Cic} is a mathematical description of the formalism. Chapter~\ref{chapter:Modules} describes the module system. \item The second part describes the proof engine. It is divided in five chapters. Chapter~\ref{Vernacular-commands} presents all commands (we call them \emph{vernacular commands}) that are not directly related to interactive proving: requests to the environment, complete or partial evaluation, loading and compiling files. How to start and stop proofs, do multiple proofs in parallel is explained in Chapter~\ref{Proof-handling}. In Chapter~\ref{Tactics}, all commands that realize one or more steps of the proof are presented: we call them \emph{tactics}. The language to combine these tactics into complex proof strategies is given in Chapter~\ref{TacticLanguage}. Examples of tactics are described in Chapter~\ref{Tactics-examples}. %\item The third part describes how to extend the system in two ways: % adding parsing and pretty-printing rules % (Chapter~\ref{Addoc-syntax}) and writing new tactics % (Chapter~\ref{TacticLanguage}). \item The third part describes how to extend the syntax of \Coq. It corresponds to the Chapter~\ref{Addoc-syntax}. \item In the fourth part more practical tools are documented. First in Chapter~\ref{Addoc-coqc}, the usage of \texttt{coqc} (batch mode) and \texttt{coqtop} (interactive mode) with their options is described. Then, in Chapter~\ref{Utilities}, various utilities that come with the \Coq\ distribution are presented. Finally, Chapter~\ref{Addoc-coqide} describes the \Coq{} integrated development environment. \item The fifth part documents a number of advanced features, including coercions, canonical structures, typeclasses, program extraction, and specialized solvers and tactics. See the table of contents for a complete list. \end{itemize} At the end of the document, after the global index, the user can find specific indexes for tactics, vernacular commands, and error messages. \section*{List of additional documentation} This manual does not contain all the documentation the user may need about \Coq{}. Various informations can be found in the following documents: \begin{description} \item[Tutorial] A companion volume to this reference manual, the \Coq{} Tutorial, is aimed at gently introducing new users to developing proofs in \Coq{} without assuming prior knowledge of type theory. In a second step, the user can read also the tutorial on recursive types (document {\tt RecTutorial.ps}). \item[Installation] A text file INSTALL that comes with the sources explains how to install \Coq{}. \item[The \Coq{} standard library] A commented version of sources of the \Coq{} standard library (including only the specifications, the proofs are removed) is given in the additional document {\tt Library.ps}. \end{description} %%% Local Variables: %%% mode: latex %%% TeX-master: "Reference-Manual" %%% End: