Mercurial > cpdt > repo
diff src/StackMachine.v @ 16:4d8ca6845e67
Source language examples
author | Adam Chlipala <adamc@hcoop.net> |
---|---|
date | Wed, 03 Sep 2008 15:05:21 -0400 |
parents | d8c81e19e7d3 |
children | 2c5a2a221b85 |
line wrap: on
line diff
--- a/src/StackMachine.v Wed Sep 03 15:00:56 2008 -0400 +++ b/src/StackMachine.v Wed Sep 03 15:05:21 2008 -0400 @@ -93,6 +93,12 @@ (** We declare explicitly that this is a recursive definition, using the keyword [Fixpoint]. The rest should be old hat for functional programmers. *) +(** It is convenient to be able to test definitions before starting to prove things about them. We can verify that our semantics is sensible by evaluating some sample uses. *) + +Eval simpl in expDenote (Const 42). +Eval simpl in expDenote (Binop Plus (Const 2) (Const 2)). +Eval simpl in expDenote (Binop Times (Binop Plus (Const 2) (Const 2)) (Const 7)). + (** ** Target language *) @@ -145,6 +151,19 @@ end. +(** Before we set about proving that this compiler is correct, we can try a few test runs, using our sample programs from earlier. *) + +Eval simpl in compile (Const 42). +Eval simpl in compile (Binop Plus (Const 2) (Const 2)). +Eval simpl in compile (Binop Times (Binop Plus (Const 2) (Const 2)) (Const 7)). + +(** We can also run our compiled programs and chedk that they give the right results. *) + +Eval simpl in progDenote (compile (Const 42)) nil. +Eval simpl in progDenote (compile (Binop Plus (Const 2) (Const 2))) nil. +Eval simpl in progDenote (compile (Binop Times (Binop Plus (Const 2) (Const 2)) (Const 7))) nil. + + (** ** Translation correctness *) (** We are ready to prove that our compiler is implemented correctly. We can use a new vernacular command [Theorem] to start a correctness proof, in terms of the semantics we defined earlier: *)