@@ -109,6 +109,17 @@ The critical ingredient for this technique, many of whose instances are referred
*)
(***WhyNotaDifferentDependently-TypedLanguage?*)
(**
ThelogicandprogramminglanguagebehindCoqbelongstoatype-theoryecosystemwithagoodnumberofotherthrivingmembers.%Agda\footnote{\url{http://appserv.cs.chalmers.se/users/ulfn/wiki/agda.php}}%#<a href="http://appserv.cs.chalmers.se/users/ulfn/wiki/agda.php">Agda</a># and %Epigram\footnote{\url{http://www.e-pig.org/}}%#<a href="http://www.e-pig.org/">Epigram</a># are the most developed tools among the alternatives to Coq, and there are others that are earlier in their lifecycles. All of the languages in this family feel sort of like different historical offshoots of Latin. The hardest conceptual epiphanies are, for the most part, portable among all the languages. Given this, why choose Coq for certified programming?
IbelievethatagoodgraphicalinterfacetoCoqiscrucialforusingitproductively.Iusethe%ProofGeneral\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.
(**Thoughapencil-and-paperproofmightclockoutatthispoint,writing"by a routine induction on [e],"itturnsoutnottomakesensetoattackthisproofdirectly.Weneedtousethestandardtrickof%\textit{%#<i>#strengtheningtheinductionhypothesis#</i>#%}%.Wedothatbyprovinganauxiliarylemma: