annotate src/whileTestPrim.agda.replaced @ 1:73127e0ab57c

(none)
author soto@cr.ie.u-ryukyu.ac.jp
date Tue, 08 Sep 2020 18:38:08 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
1 module whileTestPrim where
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
2
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
3 open import Function
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
4 open import Data.Nat
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
5 open import Data.Bool hiding ( _@$\stackrel{?}{=}$@_ )
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
6 open import Level renaming ( suc to succ ; zero to Zero )
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
7 open import Relation.Nullary using (@$\neg$@_; Dec; yes; no)
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
8 open import Relation.Binary.PropositionalEquality
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
9
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
10 open import utilities hiding ( _@$\wedge$@_ )
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
11
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
12 record Env : Set where
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
13 field
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
14 varn : @$\mathbb{N}$@
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
15 vari : @$\mathbb{N}$@
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
16 open Env
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
17
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
18 PrimComm : Set
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
19 PrimComm = Env @$\rightarrow$@ Env
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
20
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
21 Cond : Set
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
22 Cond = (Env @$\rightarrow$@ Bool)
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
23
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
24 Axiom : Cond @$\rightarrow$@ PrimComm @$\rightarrow$@ Cond @$\rightarrow$@ Set
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
25 Axiom pre comm post = @$\forall$@ (env : Env) @$\rightarrow$@ (pre env) @$\Rightarrow$@ ( post (comm env)) @$\equiv$@ true
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
26
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
27 Tautology : Cond @$\rightarrow$@ Cond @$\rightarrow$@ Set
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
28 Tautology pre post = @$\forall$@ (env : Env) @$\rightarrow$@ (pre env) @$\Rightarrow$@ (post env) @$\equiv$@ true
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
29
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
30 _and_ : Cond @$\rightarrow$@ Cond @$\rightarrow$@ Cond
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
31 x and y = @$\lambda$@ env @$\rightarrow$@ x env @$\wedge$@ y env
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
32
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
33 neg : Cond @$\rightarrow$@ Cond
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
34 neg x = @$\lambda$@ env @$\rightarrow$@ not ( x env )
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
35
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
36 open import Hoare PrimComm Cond Axiom Tautology _and_ neg
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
37
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
38 ---------------------------
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
39
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
40 program : @$\mathbb{N}$@ @$\rightarrow$@ Comm
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
41 program c10 =
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
42 Seq ( PComm (@$\lambda$@ env @$\rightarrow$@ record env {varn = c10}))
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
43 $ Seq ( PComm (@$\lambda$@ env @$\rightarrow$@ record env {vari = 0}))
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
44 $ While (@$\lambda$@ env @$\rightarrow$@ lt zero (varn env ) )
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
45 (Seq (PComm (@$\lambda$@ env @$\rightarrow$@ record env {vari = ((vari env) + 1)} ))
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
46 $ PComm (@$\lambda$@ env @$\rightarrow$@ record env {varn = ((varn env) - 1)} ))
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
47
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
48 simple : @$\mathbb{N}$@ @$\rightarrow$@ Comm
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
49 simple c10 =
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
50 Seq ( PComm (@$\lambda$@ env @$\rightarrow$@ record env {varn = c10}))
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
51 $ PComm (@$\lambda$@ env @$\rightarrow$@ record env {vari = 0})
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
52
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
53 {-@$\#$@ TERMINATING @$\#$@-}
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
54 interpret : Env @$\rightarrow$@ Comm @$\rightarrow$@ Env
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
55 interpret env Skip = env
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
56 interpret env Abort = env
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
57 interpret env (PComm x) = x env
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
58 interpret env (Seq comm comm1) = interpret (interpret env comm) comm1
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
59 interpret env (If x then else) with x env
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
60 ... | true = interpret env then
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
61 ... | false = interpret env else
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
62 interpret env (While x comm) with x env
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
63 ... | true = interpret (interpret env comm) (While x comm)
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
64 ... | false = env
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
65
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
66 test1 : Env
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
67 test1 = interpret ( record { vari = 0 ; varn = 0 } ) (program 10)
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
68
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
69
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
70 tests : Env
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
71 tests = interpret ( record { vari = 0 ; varn = 0 } ) (simple 10)