Commit a38e22e5 authored by Adam Chlipala's avatar Adam Chlipala

Typo fixes

parent 9e88ea6a
...@@ -49,7 +49,7 @@ Fixpoint times (k : nat) (e : exp) : exp := ...@@ -49,7 +49,7 @@ Fixpoint times (k : nat) (e : exp) : exp :=
| Plus e1 e2 => Plus (times k e1) (times k e2) | Plus e1 e2 => Plus (times k e1) (times k e2)
end. end.
(** We can write a very manual proof that [double] really doubles an expression's value. *) (** We can write a very manual proof that [times] really implements multiplication. *)
Theorem eval_times : forall k e, Theorem eval_times : forall k e,
eval (times k e) = k * eval e. eval (times k e) = k * eval e.
......
...@@ -550,7 +550,7 @@ Inductive tbinop : type -> type -> type -> Set := ...@@ -550,7 +550,7 @@ Inductive tbinop : type -> type -> type -> Set :=
(** The definition of [tbinop] is different from [binop] in an important way. Where we declared that [binop] has type [Set], here we declare that [tbinop] has type [type -> type -> type -> Set]. We define [tbinop] as an _indexed type family_. Indexed inductive types are at the heart of Coq's expressive power; almost everything else of interest is defined in terms of them. (** The definition of [tbinop] is different from [binop] in an important way. Where we declared that [binop] has type [Set], here we declare that [tbinop] has type [type -> type -> type -> Set]. We define [tbinop] as an _indexed type family_. Indexed inductive types are at the heart of Coq's expressive power; almost everything else of interest is defined in terms of them.
The inuitive explanation of [tbinop] is that a [tbinop t1 t2 t] is a binary operator whose operands should have types [t1] and [t2], and whose result has type [t]. For instance, constructor [TLt] (for less-than comparison of numbers) is assigned type [tbinop Nat Nat Bool], meaning the operator's arguments are naturals and its result is Boolean. The type of [TEq] introduces a small bit of additional complication via polymorphism: we want to allow equality comparison of any two values of any type, as long as they have the _same_ type. The intuitive explanation of [tbinop] is that a [tbinop t1 t2 t] is a binary operator whose operands should have types [t1] and [t2], and whose result has type [t]. For instance, constructor [TLt] (for less-than comparison of numbers) is assigned type [tbinop Nat Nat Bool], meaning the operator's arguments are naturals and its result is Boolean. The type of [TEq] introduces a small bit of additional complication via polymorphism: we want to allow equality comparison of any two values of any type, as long as they have the _same_ type.
ML and Haskell have indexed algebraic datatypes. For instance, their list types are indexed by the type of data that the list carries. However, compared to Coq, ML and Haskell 98 place two important restrictions on datatype definitions. ML and Haskell have indexed algebraic datatypes. For instance, their list types are indexed by the type of data that the list carries. However, compared to Coq, ML and Haskell 98 place two important restrictions on datatype definitions.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment