Mercurial > hg > Papers > 2020 > soto-midterm
view src/whileLoopPSemSound.agda @ 1:73127e0ab57c
(none)
author | soto@cr.ie.u-ryukyu.ac.jp |
---|---|
date | Tue, 08 Sep 2020 18:38:08 +0900 |
parents | |
children |
line wrap: on
line source
loopPPSem : (input output : Envc ) → output ≡ loopPP (varn input) input refl → (whileTestStateP s2 input ) → (whileTestStateP s2 input ) implies (whileTestStateP sf output) loopPPSem input output refl s2p = loopPPSemInduct (varn input) input refl refl s2p where lem : (n : ℕ) → (env : Envc) → n + suc (vari env) ≡ suc (n + vari env) lem n env = +-suc (n) (vari env) loopPPSemInduct : (n : ℕ) → (current : Envc) → (eq : n ≡ varn current) → (loopeq : output ≡ loopPP n current eq) → (whileTestStateP s2 current ) → (whileTestStateP s2 current ) implies (whileTestStateP sf output) loopPPSemInduct zero current refl loopeq refl rewrite loopeq = proof (λ x → refl) loopPPSemInduct (suc n) current refl loopeq refl rewrite (sym (lem n current)) = whileLoopPSem current refl (λ output x → loopPPSemInduct n (record { c10 = n + suc (vari current) ; varn = n ; vari = suc (vari current) }) refl loopeq refl) (λ output x → loopPPSemInduct n (record { c10 = n + suc (vari current) ; varn = n ; vari = suc (vari current) }) refl loopeq refl) whileLoopPSemSound : {l : Level} → (input output : Envc ) → (varn input + vari input ≡ c10 input) → output ≡ loopPP (varn input) input refl → (varn input + vari input ≡ c10 input) implies (vari output ≡ c10 output) whileLoopPSemSound {l} input output pre eq = loopPPSem input output eq pre