annotate prepaper/src/Hoare.agda.replaced @ 0:3dba680da508

init-test
author soto
date Tue, 08 Dec 2020 19:06:49 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3dba680da508 init-test
soto
parents:
diff changeset
1 module Hoare
3dba680da508 init-test
soto
parents:
diff changeset
2 (PrimComm : Set)
3dba680da508 init-test
soto
parents:
diff changeset
3 (Cond : Set)
3dba680da508 init-test
soto
parents:
diff changeset
4 (Axiom : Cond @$\rightarrow$@ PrimComm @$\rightarrow$@ Cond @$\rightarrow$@ Set)
3dba680da508 init-test
soto
parents:
diff changeset
5 (Tautology : Cond @$\rightarrow$@ Cond @$\rightarrow$@ Set)
3dba680da508 init-test
soto
parents:
diff changeset
6 (_and_ : Cond @$\rightarrow$@ Cond @$\rightarrow$@ Cond)
3dba680da508 init-test
soto
parents:
diff changeset
7 (neg : Cond @$\rightarrow$@ Cond )
3dba680da508 init-test
soto
parents:
diff changeset
8 where
3dba680da508 init-test
soto
parents:
diff changeset
9
3dba680da508 init-test
soto
parents:
diff changeset
10 data Comm : Set where
3dba680da508 init-test
soto
parents:
diff changeset
11 Skip : Comm
3dba680da508 init-test
soto
parents:
diff changeset
12 Abort : Comm
3dba680da508 init-test
soto
parents:
diff changeset
13 PComm : PrimComm @$\rightarrow$@ Comm
3dba680da508 init-test
soto
parents:
diff changeset
14 Seq : Comm @$\rightarrow$@ Comm @$\rightarrow$@ Comm
3dba680da508 init-test
soto
parents:
diff changeset
15 If : Cond @$\rightarrow$@ Comm @$\rightarrow$@ Comm @$\rightarrow$@ Comm
3dba680da508 init-test
soto
parents:
diff changeset
16 While : Cond @$\rightarrow$@ Comm @$\rightarrow$@ Comm
3dba680da508 init-test
soto
parents:
diff changeset
17
3dba680da508 init-test
soto
parents:
diff changeset
18 -- Hoare Triple
3dba680da508 init-test
soto
parents:
diff changeset
19 data HT : Set where
3dba680da508 init-test
soto
parents:
diff changeset
20 ht : Cond @$\rightarrow$@ Comm @$\rightarrow$@ Cond @$\rightarrow$@ HT
3dba680da508 init-test
soto
parents:
diff changeset
21
3dba680da508 init-test
soto
parents:
diff changeset
22 {-
3dba680da508 init-test
soto
parents:
diff changeset
23 prPre pr prPost
3dba680da508 init-test
soto
parents:
diff changeset
24 ------------- ------------------ ----------------
3dba680da508 init-test
soto
parents:
diff changeset
25 bPre => bPre' {bPre'} c {bPost'} bPost' => bPost
3dba680da508 init-test
soto
parents:
diff changeset
26 Weakening : ----------------------------------------------------
3dba680da508 init-test
soto
parents:
diff changeset
27 {bPre} c {bPost}
3dba680da508 init-test
soto
parents:
diff changeset
28
3dba680da508 init-test
soto
parents:
diff changeset
29 Assign: ----------------------------
3dba680da508 init-test
soto
parents:
diff changeset
30 {bPost[v<-e]} v:=e {bPost}
3dba680da508 init-test
soto
parents:
diff changeset
31
3dba680da508 init-test
soto
parents:
diff changeset
32 pr1 pr2
3dba680da508 init-test
soto
parents:
diff changeset
33 ----------------- ------------------
3dba680da508 init-test
soto
parents:
diff changeset
34 {bPre} cm1 {bMid} {bMid} cm2 {bPost}
3dba680da508 init-test
soto
parents:
diff changeset
35 Seq: ---------------------------------------
3dba680da508 init-test
soto
parents:
diff changeset
36 {bPre} cm1 ; cm2 {bPost}
3dba680da508 init-test
soto
parents:
diff changeset
37
3dba680da508 init-test
soto
parents:
diff changeset
38 pr1 pr2
3dba680da508 init-test
soto
parents:
diff changeset
39 ----------------------- ---------------------------
3dba680da508 init-test
soto
parents:
diff changeset
40 {bPre @$\wedge$@ c} cm1 {bPost} {bPre @$\wedge$@ neg c} cm2 {bPost}
3dba680da508 init-test
soto
parents:
diff changeset
41 If: ------------------------------------------------------
3dba680da508 init-test
soto
parents:
diff changeset
42 {bPre} If c then cm1 else cm2 fi {bPost}
3dba680da508 init-test
soto
parents:
diff changeset
43
3dba680da508 init-test
soto
parents:
diff changeset
44 pr
3dba680da508 init-test
soto
parents:
diff changeset
45 -------------------
3dba680da508 init-test
soto
parents:
diff changeset
46 {inv @$\wedge$@ c} cm {inv}
3dba680da508 init-test
soto
parents:
diff changeset
47 While: ---------------------------------------
3dba680da508 init-test
soto
parents:
diff changeset
48 {inv} while c do cm od {inv @$\wedge$@ neg c}
3dba680da508 init-test
soto
parents:
diff changeset
49 -}
3dba680da508 init-test
soto
parents:
diff changeset
50
3dba680da508 init-test
soto
parents:
diff changeset
51
3dba680da508 init-test
soto
parents:
diff changeset
52 data HTProof : Cond @$\rightarrow$@ Comm @$\rightarrow$@ Cond @$\rightarrow$@ Set where
3dba680da508 init-test
soto
parents:
diff changeset
53 PrimRule : {bPre : Cond} @$\rightarrow$@ {pcm : PrimComm} @$\rightarrow$@ {bPost : Cond} @$\rightarrow$@
3dba680da508 init-test
soto
parents:
diff changeset
54 (pr : Axiom bPre pcm bPost) @$\rightarrow$@
3dba680da508 init-test
soto
parents:
diff changeset
55 HTProof bPre (PComm pcm) bPost
3dba680da508 init-test
soto
parents:
diff changeset
56 SkipRule : (b : Cond) @$\rightarrow$@ HTProof b Skip b
3dba680da508 init-test
soto
parents:
diff changeset
57 AbortRule : (bPre : Cond) @$\rightarrow$@ (bPost : Cond) @$\rightarrow$@
3dba680da508 init-test
soto
parents:
diff changeset
58 HTProof bPre Abort bPost
3dba680da508 init-test
soto
parents:
diff changeset
59 WeakeningRule : {bPre : Cond} @$\rightarrow$@ {bPre' : Cond} @$\rightarrow$@ {cm : Comm} @$\rightarrow$@
3dba680da508 init-test
soto
parents:
diff changeset
60 {bPost' : Cond} @$\rightarrow$@ {bPost : Cond} @$\rightarrow$@
3dba680da508 init-test
soto
parents:
diff changeset
61 Tautology bPre bPre' @$\rightarrow$@
3dba680da508 init-test
soto
parents:
diff changeset
62 HTProof bPre' cm bPost' @$\rightarrow$@
3dba680da508 init-test
soto
parents:
diff changeset
63 Tautology bPost' bPost @$\rightarrow$@
3dba680da508 init-test
soto
parents:
diff changeset
64 HTProof bPre cm bPost
3dba680da508 init-test
soto
parents:
diff changeset
65 SeqRule : {bPre : Cond} @$\rightarrow$@ {cm1 : Comm} @$\rightarrow$@ {bMid : Cond} @$\rightarrow$@
3dba680da508 init-test
soto
parents:
diff changeset
66 {cm2 : Comm} @$\rightarrow$@ {bPost : Cond} @$\rightarrow$@
3dba680da508 init-test
soto
parents:
diff changeset
67 HTProof bPre cm1 bMid @$\rightarrow$@
3dba680da508 init-test
soto
parents:
diff changeset
68 HTProof bMid cm2 bPost @$\rightarrow$@
3dba680da508 init-test
soto
parents:
diff changeset
69 HTProof bPre (Seq cm1 cm2) bPost
3dba680da508 init-test
soto
parents:
diff changeset
70 IfRule : {cmThen : Comm} @$\rightarrow$@ {cmElse : Comm} @$\rightarrow$@
3dba680da508 init-test
soto
parents:
diff changeset
71 {bPre : Cond} @$\rightarrow$@ {bPost : Cond} @$\rightarrow$@
3dba680da508 init-test
soto
parents:
diff changeset
72 {b : Cond} @$\rightarrow$@
3dba680da508 init-test
soto
parents:
diff changeset
73 HTProof (bPre and b) cmThen bPost @$\rightarrow$@
3dba680da508 init-test
soto
parents:
diff changeset
74 HTProof (bPre and neg b) cmElse bPost @$\rightarrow$@
3dba680da508 init-test
soto
parents:
diff changeset
75 HTProof bPre (If b cmThen cmElse) bPost
3dba680da508 init-test
soto
parents:
diff changeset
76 WhileRule : {cm : Comm} @$\rightarrow$@ {bInv : Cond} @$\rightarrow$@ {b : Cond} @$\rightarrow$@
3dba680da508 init-test
soto
parents:
diff changeset
77 HTProof (bInv and b) cm bInv @$\rightarrow$@
3dba680da508 init-test
soto
parents:
diff changeset
78 HTProof bInv (While b cm) (bInv and neg b)
3dba680da508 init-test
soto
parents:
diff changeset
79