Real chapter titles; describe how to get Proof General to use command-line flags
author Adam Chlipala Mon, 08 Sep 2008 12:42:57 -0400 aba1a37394c4 65314ca099ed Makefile src/Intro.v src/StackMachine.v 3 files changed, 26 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile	Mon Sep 08 12:22:22 2008 -0400
+++ b/Makefile	Mon Sep 08 12:42:57 2008 -0400
@@ -27,7 +27,7 @@
doc: latex/cpdt.dvi latex/cpdt.pdf html

latex/cpdt.tex: Makefile $(VS) - cd src ; coqdoc --latex$(VS_DOC) \
+	cd src ; coqdoc --latex -s \$(VS_DOC) \
-p "\usepackage{url}" \
-p "\title{Certified Programming with Dependent Types}" \
-p "\author{Adam Chlipala}" \
--- a/src/Intro.v	Mon Sep 08 12:22:22 2008 -0400
+++ b/src/Intro.v	Mon Sep 08 12:42:57 2008 -0400
@@ -168,9 +168,6 @@
There is also an online HTML version available, with a hyperlink from each use of an identifier to that identifier's definition:
-
-The chapters of this book are named like "Module Foo," rather than having proper names, because literally the entire document is generated by coqdoc, which by default bases chapter structure on the module structure of the development being documented.  The next chapter is headed "Module StackMachine" because it comes from a module named [StackMachine], which comes from a source file %\texttt{%#<tt>#StackMachine.v#</tt>#%}%.
-
The source code to the book is also freely available at:

@@ -178,3 +175,16 @@

I believe that a good graphical interface to Coq is crucial for using it productively.  I use the %Proof General\footnote{\url{http://proofgeneral.inf.ed.ac.uk/}}%#<a href="http://proofgeneral.inf.ed.ac.uk/">Proof General</a># mode for Emacs, which supports a number of other proof assistants besides Coq.  There is also the standalone CoqIDE program developed by the Coq team.  I like being able to combine certified programming and proving with other kinds of work inside the same full-featured editor, and CoqIDE has had a good number of crashes and other annoying bugs in recent history, though I hear that it is improving.  In the initial part of this book, I will reference Proof General procedures explicitly, in introducing how to use Coq, but most of the book will be interface-agnostic, so feel free to use CoqIDE if you prefer it.
*)
+
+
+(** %\section{Chapter Source Files}
+
+\begin{center} \begin{tabular}{|r|l|}
+\hline
+\textbf{Chapter} & \textbf{Source} \\
+\hline
+Some Quick Examples & \texttt{StackMachine.v} \\
+\hline
+\end{tabular} \end{center}
+
+% *)
--- a/src/StackMachine.v	Mon Sep 08 12:22:22 2008 -0400
+++ b/src/StackMachine.v	Mon Sep 08 12:42:57 2008 -0400
@@ -16,9 +16,20 @@
(* end hide *)

+(** %\chapter{Some Quick Examples}% *)
+
+
(** I will start off by jumping right in to a fully-worked set of examples, building certified compilers from increasingly complicated source languages to stack machines.  We will meet a few useful tactics and see how they can be used in manual proofs, and we will also see how easily these proofs can be automated instead.  I assume that you have installed Coq and Proof General.

-As always, you can step through the source file %\texttt{%#<tt>#StackMachine.v#</tt>#%}% for this chapter interactively in Proof General.  Alternatively, to get a feel for the whole lifecycle of creating a Coq development, you can enter the pieces of source code in this chapter in a new %\texttt{%#<tt>#.v#</tt>#%}% file in an Emacs buffer.  If you do the latter, include a line [Require Import List Tactics] at the start of the file, to match some code hidden from the chapter source, and be sure to run the Coq binary %\texttt{%#<tt>#coqtop#</tt>#%}% with the command-line argument %\texttt{%#<tt>#-I SRC#</tt>#%}%, where %\texttt{%#<tt>#SRC#</tt>#%}% is the path to a directory containing the source for this book.  In either case, if you have installed Proof General properly, it should start automatically when you visit a %\texttt{%#<tt>#.v#</tt>#%}% buffer in Emacs.
+As always, you can step through the source file %\texttt{%#<tt>#StackMachine.v#</tt>#%}% for this chapter interactively in Proof General.  Alternatively, to get a feel for the whole lifecycle of creating a Coq development, you can enter the pieces of source code in this chapter in a new %\texttt{%#<tt>#.v#</tt>#%}% file in an Emacs buffer.  If you do the latter, include a line [Require Import List Tactics.] at the start of the file, to match some code hidden in this rendering of the chapter source, and be sure to run the Coq binary %\texttt{%#<tt>#coqtop#</tt>#%}% with the command-line argument %\texttt{%#<tt>#-I SRC#</tt>#%}%, where %\texttt{%#<tt>#SRC#</tt>#%}% is the path to a directory containing the source for this book.  In either case, you will need to run %\texttt{%#<tt>#make#</tt>#%}% in the root directory of the source distribution for the book before getting started.  If you have installed Proof General properly, it should start automatically when you visit a %\texttt{%#<tt>#.v#</tt>#%}% buffer in Emacs.
+
+There are some minor headaches associated with getting Proof General to pass the proper command line arguments to the %\texttt{%#<tt>#coqtop#</tt>#%}% program.  The best way to add settings that will be shared by many source files is to add a custom variable setting to your %\texttt{%#<tt>#.emacs#</tt>#%}% file, like this:
+%\begin{verbatim}%#<pre>#(custom-set-variables
+  ...
+  '(coq-prog-args '("-impredicative-set" "-I" "/path/to/cpdt/src"))
+  ...
+)#</pre>#%\end{verbatim}%
+The extra arguments demonstrated here are the proper choices for working with the code for this book.  The ellipses stand for other Emacs customization settings you may already have.  It can be helpful to save several alternate sets of flags in your %\texttt{%#<tt>#.emacs#</tt>#%}% file, with all but one commented out within the %\texttt{%#<tt>#custom-set-variables#</tt>#%}% block at any given time.

With Proof General, the portion of a buffer that Coq has processed is highlighted in some way, like being given a blue background.  You step through Coq source files by positioning the point at the position you want Coq to run to and pressing C-C C-RET.  This can be used both for normal step-by-step coding, by placing the point inside some command past the end of the highlighted region; and for undoing, by placing the point inside the highlighted region. *)