Incorporating a variety of changes and pull requests, after things got desync'd a bit

This commit is contained in:
Adam Chlipala 2016-02-09 20:21:19 -05:00
parent 4539409e73
commit 19b98288ca
3 changed files with 18 additions and 18 deletions

View file

@ -1,13 +1,13 @@
.PHONY: all coq install
all: frap.pdf coq
all: frap_book.pdf coq
frap.pdf: frap.tex Makefile
pdflatex frap
pdflatex frap
makeindex frap
pdflatex frap
pdflatex frap
frap_book.pdf: frap_book.tex Makefile
pdflatex frap_book
pdflatex frap_book
makeindex frap_book
pdflatex frap_book
pdflatex frap_book
coq: Makefile.coq
$(MAKE) -f Makefile.coq
@ -24,7 +24,7 @@ frap.tgz: Makefile _CoqProject *.v *.tex *.html
WHERE=chlipala.net:sites/chlipala/adam/frap/
install: index.html frap.pdf frap.tgz
rsync frap.pdf $(WHERE)
install: index.html frap_book.pdf frap.tgz
rsync frap_book.pdf $(WHERE)
rsync frap.tgz $(WHERE)
rsync index.html $(WHERE)

View file

@ -429,22 +429,22 @@ For example, recall that our definition of expression size included this clause.
\size{\mathsf{Plus}(e_1, e_2)} &=& 1 + \size{e_1} + \size{e_2}
\end{eqnarray*}
Now imagine that we are trying to prove this formula.
$$\size{\mathsf{Plus}(e, \mathsf{Const}(7))} = 8 + \size{e}$$
$$\size{\mathsf{Plus}(e, \mathsf{Const}(7))} = 2 + \size{e}$$
We may apply the defining equation to rewrite into a different formula, where we have essential pushed the definition of $\size{\cdot}$ through the $\mathsf{Plus}$.
$$1 + \size{e} + \size{\mathsf{Const}(7)} = 8 + \size{e}$$
$$1 + \size{e} + \size{\mathsf{Const}(7)} = 2 + \size{e}$$
Another application of a different defining equation, this time for $\mathsf{Const}$, takes us to here.
$$1 + \size{e} + 7 = 8 + \size{e}$$
$$1 + \size{e} + 1 = 2 + \size{e}$$
From here, the goal follows by linear arithmetic.
\medskip
Such a proof establishes a theorem $\forall e \in \mathsf{Exp}. \; \size{\mathsf{Plus}(e, \mathsf{Const}(7))} = 8 + \size{e}$.
Such a proof establishes a theorem $\forall e \in \mathsf{Exp}. \; \size{\mathsf{Plus}(e, \mathsf{Const}(7))} = 2 + \size{e}$.
We may use already-proved theorems via a more general \emph{rewriting}\index{rewriting} mechanism, applying whenever we know some quantified equality.
Within a new goal we are proving, we find some subterm that matches the lefthand side of that equality, after we choose the proper values of the quantified variables.
The process of finding those values automatically is called \emph{unification}\index{unification}.
Rewriting enables us to take the subterm we found and replace it with the righthand side of the equation.
As an example, assume that, for some $P$, we know $P(8 + \size{\mathsf{Var}(x)})$ and are trying to prove $P(\size{\mathsf{Plus}(\mathsf{Var}(x), \mathsf{Const}(7))})$.
As an example, assume that, for some $P$, we know $P(2 + \size{\mathsf{Var}(x)})$ and are trying to prove $P(\size{\mathsf{Plus}(\mathsf{Var}(x), \mathsf{Const}(7))})$.
We may use our earlier fact to rewrite the argument of $P$ in what we are trying to show, so that it now matches the argument from what we already know, at which point the proof is trivial to finish.
Here, unification found the assignment $e = \mathsf{Var}(x)$.
@ -517,8 +517,8 @@ It's important to remember that plus \emph{inside} the brackets is syntax, while
\newcommand{\subst}[3]{[#3/#2]#1}
To test our semantics, we define a \emph{variable substitution} function\index{substitution}.
A substitution $\subst{e}{x}{e'}$ stands for the result of running through the syntax of $e$, repla
cing every occurrence of variable $x$ with expression $e'$.
A substitution $\subst{e}{x}{e'}$ stands for the result of running through the syntax of $e$,
replacing every occurrence of variable $x$ with expression $e'$.
\begin{eqnarray*}
\subst{n}{x}{e} &=& n \\
@ -776,7 +776,7 @@ Note that many of these are specific to the \texttt{Frap} library distributed wi
\item[\texttt{f\_equal}] When the goal is an equality between two applications of the same function, switch to proving that the function arguments are pairwise equal.
\item[\texttt{induct} $x$] Where $x$ is a variable in the theorem statement, structure the proof by induction on the structure of $x$. You will get one generated subgoal per constructor in the inductive definition of $x$. (Indeed, it is required that $x$'s type was introduced with \texttt{Inductive}.)
\item[\texttt{invert} $H$] Replace hypothesis $H$ with other facts that can be deduced from the structure of $H$'s statement. More detail to be added here soon!
\item[\texttt{linear\_arithemtic}] A complete decision procedure for linear arithmetic. Relevant formulas are essentially those built up from variables and constant natural numbers and integers using only addition and subtraction, with equality and inequality comparisons on top. (Multiplication by constants is supported, as a shorthand for repeated addition.) See Section \ref{decidable}.
\item[\texttt{linear\_arithmetic}] A complete decision procedure for linear arithmetic. Relevant formulas are essentially those built up from variables and constant natural numbers and integers using only addition and subtraction, with equality and inequality comparisons on top. (Multiplication by constants is supported, as a shorthand for repeated addition.) See Section \ref{decidable}.
\item[\texttt{rewrite} $H$] Where $H$ is a hypothesis or previously proved theorem, establishing \texttt{forall x1 .. xN, e1 = e2}, find a subterm of the goal that equals \texttt{e1}, given the right choices of \texttt{xi} values, and replace that subterm with \texttt{e2}.
\item[\texttt{maps\_equal}] Prove that two finite maps are equal by considering all the relevant cases for mappings of different keys.
\item[\texttt{ring}] Prove goals that are equalities over some registered ring or semiring, in the sense of algebra, where the goal follows solely from the axioms of that algebraic structure. See Section \ref{decidable}.

View file

@ -13,7 +13,7 @@
<h2>Grab a Draft</h2>
<ul>
<li><a href="https://github.com/achlipala/frap">Source on GitHub</a></li>
<li><a href="frap.pdf">Quasi-latest PDF draft</a></li>
<li><a href="frap_book.pdf">Quasi-latest PDF draft</a></li>
<li><a href="frap.tgz">Quasi-latest source-code tarball</a></li>
</ul>
</div>