annotate src/whileTestProof.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 whileTestProof where
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
2 --
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
3 -- Using imply relation to make soundness explicit
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
4 -- termination is shown by induction on varn
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
5 --
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
6
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
7 data _implies_ (A B : Set ) : Set (succ Zero) where
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
8 proof : ( A @$\rightarrow$@ B ) @$\rightarrow$@ A implies B
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
9
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
10 implies2p : {A B : Set } @$\rightarrow$@ A implies B @$\rightarrow$@ A @$\rightarrow$@ B
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
11 implies2p (proof x) = x
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
12
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
13 whileTestPSem : (c : @$\mathbb{N}$@) @$\rightarrow$@ whileTestP c ( @$\lambda$@ env @$\rightarrow$@ ⊤ implies (whileTestStateP s1 env) )
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
14 whileTestPSem c = proof ( @$\lambda$@ _ @$\rightarrow$@ record { pi1 = refl ; pi2 = refl } )
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
15
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
16 SemGears : (f : {l : Level } {t : Set l } @$\rightarrow$@ (e0 : Envc ) @$\rightarrow$@ ((e : Envc) @$\rightarrow$@ t) @$\rightarrow$@ t ) @$\rightarrow$@ Set (succ Zero)
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
17 SemGears f = Envc @$\rightarrow$@ Envc @$\rightarrow$@ Set
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
18
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
19 GearsUnitSound : (e0 e1 : Envc) {pre : Envc @$\rightarrow$@ Set} {post : Envc @$\rightarrow$@ Set}
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
20 @$\rightarrow$@ (f : {l : Level } {t : Set l } @$\rightarrow$@ (e0 : Envc ) @$\rightarrow$@ (Envc @$\rightarrow$@ t) @$\rightarrow$@ t )
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
21 @$\rightarrow$@ (fsem : (e0 : Envc ) @$\rightarrow$@ f e0 ( @$\lambda$@ e1 @$\rightarrow$@ (pre e0) implies (post e1)))
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
22 @$\rightarrow$@ f e0 (@$\lambda$@ e1 @$\rightarrow$@ pre e0 implies post e1)
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
23 GearsUnitSound e0 e1 f fsem = fsem e0
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
24
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
25 whileTestPSemSound : (c : @$\mathbb{N}$@ ) (output : Envc ) @$\rightarrow$@ output @$\equiv$@ whileTestP c (@$\lambda$@ e @$\rightarrow$@ e) @$\rightarrow$@ ⊤ implies ((vari output @$\equiv$@ 0) @$\wedge$@ (varn output @$\equiv$@ c))
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
26 whileTestPSemSound c output refl = proof (@$\lambda$@ x @$\rightarrow$@ record { pi1 = refl ; pi2 = refl })
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
27 -- whileTestPSem c
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
28
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
29
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
30 whileConvPSemSound : {l : Level} @$\rightarrow$@ (input : Envc) @$\rightarrow$@ (whileTestStateP s1 input ) implies (whileTestStateP s2 input)
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
31 whileConvPSemSound input = proof @$\lambda$@ x @$\rightarrow$@ (conv input x) where
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
32 conv : (env : Envc ) @$\rightarrow$@ (vari env @$\equiv$@ 0) @$\wedge$@ (varn env @$\equiv$@ c10 env) @$\rightarrow$@ varn env + vari env @$\equiv$@ c10 env
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
33 conv e record { pi1 = refl ; pi2 = refl } = +zero
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
34
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
35 loopPP : (n : @$\mathbb{N}$@) @$\rightarrow$@ (input : Envc ) @$\rightarrow$@ (n @$\equiv$@ varn input) @$\rightarrow$@ Envc
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
36 loopPP zero input refl = input
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
37 loopPP (suc n) input refl =
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
38 loopPP n (record input { varn = pred (varn input) ; vari = suc (vari input)}) refl
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
39
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
40 whileLoopPSem : {l : Level} {t : Set l} @$\rightarrow$@ (input : Envc ) @$\rightarrow$@ whileTestStateP s2 input
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
41 @$\rightarrow$@ (next : (output : Envc ) @$\rightarrow$@ (whileTestStateP s2 input ) implies (whileTestStateP s2 output) @$\rightarrow$@ t)
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
42 @$\rightarrow$@ (exit : (output : Envc ) @$\rightarrow$@ (whileTestStateP s2 input ) implies (whileTestStateP sf output) @$\rightarrow$@ t) @$\rightarrow$@ t
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
43 whileLoopPSem env s next exit with varn env | s
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
44 ... | zero | _ = exit env (proof (@$\lambda$@ z @$\rightarrow$@ z))
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
45 ... | (suc varn ) | refl = next ( record env { varn = varn ; vari = suc (vari env) } ) (proof @$\lambda$@ x @$\rightarrow$@ +-suc varn (vari env) )
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
46
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
47 loopPPSem : (input output : Envc ) @$\rightarrow$@ output @$\equiv$@ loopPP (varn input) input refl
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
48 @$\rightarrow$@ (whileTestStateP s2 input ) @$\rightarrow$@ (whileTestStateP s2 input ) implies (whileTestStateP sf output)
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
49 loopPPSem input output refl s2p = loopPPSemInduct (varn input) input refl refl s2p
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
50 where
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
51 lem : (n : @$\mathbb{N}$@) @$\rightarrow$@ (env : Envc) @$\rightarrow$@ n + suc (vari env) @$\equiv$@ suc (n + vari env)
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
52 lem n env = +-suc (n) (vari env)
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
53 loopPPSemInduct : (n : @$\mathbb{N}$@) @$\rightarrow$@ (current : Envc) @$\rightarrow$@ (eq : n @$\equiv$@ varn current) @$\rightarrow$@ (loopeq : output @$\equiv$@ loopPP n current eq)
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
54 @$\rightarrow$@ (whileTestStateP s2 current ) @$\rightarrow$@ (whileTestStateP s2 current ) implies (whileTestStateP sf output)
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
55 loopPPSemInduct zero current refl loopeq refl rewrite loopeq = proof (@$\lambda$@ x @$\rightarrow$@ refl)
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
56 loopPPSemInduct (suc n) current refl loopeq refl rewrite (sym (lem n current)) =
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
57 whileLoopPSem current refl
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
58 (@$\lambda$@ output x @$\rightarrow$@ loopPPSemInduct n (record { c10 = n + suc (vari current) ; varn = n ; vari = suc (vari current) }) refl loopeq refl)
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
59 (@$\lambda$@ output x @$\rightarrow$@ loopPPSemInduct n (record { c10 = n + suc (vari current) ; varn = n ; vari = suc (vari current) }) refl loopeq refl)
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
60
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
61 whileLoopPSemSound : {l : Level} @$\rightarrow$@ (input output : Envc )
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
62 @$\rightarrow$@ whileTestStateP s2 input
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
63 @$\rightarrow$@ output @$\equiv$@ loopPP (varn input) input refl
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
64 @$\rightarrow$@ (whileTestStateP s2 input ) implies ( whileTestStateP sf output )
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
65 whileLoopPSemSound {l} input output pre eq = loopPPSem input output eq pre