@@ -989,7 +994,7 @@ In addition to the definition of [and] itself, we get information on %\index{imp
...
@@ -989,7 +994,7 @@ In addition to the definition of [and] itself, we get information on %\index{imp
%\medskip%
%\medskip%
Now we create a section for our induction principle, following the same basic plan as in the last section of this chapter. *)
Now we create a section for our induction principle, following the same basic plan as in the previous section of this chapter. *)
Section nat_tree_ind'.
Section nat_tree_ind'.
Variable P : nat_tree -> Prop.
Variable P : nat_tree -> Prop.
...
@@ -1163,7 +1168,7 @@ This is the point in the proof where we apply some creativity. We define a func
...
@@ -1163,7 +1168,7 @@ This is the point in the proof where we apply some creativity. We define a func
Definition toProp (b : bool) := if b then True else False.
Definition toProp (b : bool) := if b then True else False.
(** It is worth recalling the difference between the lowercase and uppercase versions of truth and falsehood: [True] and [False] are logical propositions, while [true] and [false] are boolean values that we can case-analyze. We have defined [toProp] such that our conclusion of [False] is computationally equivalent to [toProp false]. Thus, the %\index{tactics!change}%[change] tactic will let us change the conclusion to [toProp false]. The general form [change e] replaces the conclusion with [e], whenever Coq's built-in computation rules suffice to establish the equivalence of [e] with the original conclusion. *)
(** It is worth recalling the difference between the lowercase and uppercase versions of truth and falsehood: [True] and [False] are logical propositions, while [true] and [false] are Boolean values that we can case-analyze. We have defined [toProp] such that our conclusion of [False] is computationally equivalent to [toProp false]. Thus, the %\index{tactics!change}%[change] tactic will let us change the conclusion to [toProp false]. The general form [change e] replaces the conclusion with [e], whenever Coq's built-in computation rules suffice to establish the equivalence of [e] with the original conclusion. *)
change (toProp false).
change (toProp false).
(** %\vspace{-.15in}%[[
(** %\vspace{-.15in}%[[
...
@@ -1172,7 +1177,7 @@ This is the point in the proof where we apply some creativity. We define a func
...
@@ -1172,7 +1177,7 @@ This is the point in the proof where we apply some creativity. We define a func
toProp false
toProp false
]]
]]
Now the righthand side of [H]'s equality appears in the conclusion, so we can rewrite, using the notation [<-] to request to replace the righthand side the equality with the lefthand side.%\index{tactics!rewrite}% *)
Now the righthand side of [H]'s equality appears in the conclusion, so we can rewrite, using the notation [<-] to request to replace the righthand side of the equality with the lefthand side.%\index{tactics!rewrite}% *)