Mercurial > hg > Members > ryokka > HoareLogic
view whileTest.agda @ 1:ab73094377a2
modify Hoare-Logic base
author | ryokka |
---|---|
date | Thu, 13 Dec 2018 17:45:50 +0900 |
parents | 6d2dc87aaa62 |
children | b05a4156da01 |
line wrap: on
line source
module whileTest where open import Data.Nat open import Data.Bool hiding (_≟_) open import Data.Product open import Relation.Nullary open import Relation.Binary open import SET record Env : Set where field varn : ℕ vari : ℕ open Env neg : (Env → Bool) → (Env → Bool) neg x e = not (x e) and : (Env → Bool) → (Env → Bool) → (Env → Bool) and x y e = (x e) ∧ (y e) enveq : (Env → Bool) → (Env → Bool) → Set enveq x y = {!!} sem : (Env → Bool) → Pred Env sem x y = {!!} tautValid : (b1 b2 : Env → Bool) -> enveq b1 b2 -> (s : Env) -> sem b1 s -> sem b2 s tautValid = {!!} respNeg : (b : Env → Bool) -> (s : Env) -> Iff (sem (neg b) s) (¬ sem b s) respNeg = {!!} respAnd : (b1 b2 : Env → Bool) -> (s : Env) -> Iff (sem (and b1 b2) s) ((sem b1 s) × (sem b2 s)) respAnd = {!!} PrimSemComm : ∀ {l} -> (Env → Env) -> Rel Env l PrimSemComm = {!!} Axiom :( Env → Bool) -> (Env → Env) -> (Env → Bool) -> Set Axiom = {!!} axiomValid : ∀ {l} -> (bPre : Env → Bool ) -> (pcm : (Env → Env)) -> (bPost : Env → Bool) -> (ax : Axiom bPre pcm bPost) -> (s1 s2 : Env) -> sem bPre s1 -> PrimSemComm {l} pcm s1 s2 -> sem bPost s2 axiomValid = {!!} open import Hoare (Env → Bool) (Env → Env) neg and enveq Env sem tautValid respNeg respAnd PrimSemComm Axiom axiomValid lt : ℕ → ℕ → Bool lt x y with x <? y lt x y | yes p = true lt x y | no ¬p = false _-_ : ℕ → ℕ → ℕ x - zero = x zero - (suc _) = zero (suc x) - (suc y) = x - y _==_ : ℕ → ℕ → Bool x == y with x ≟ y (x == y) | yes p = true (x == y) | no ¬p = false program : Comm program = Seq ( PComm (λ env → record env {varn = 10})) (Seq ( PComm (λ env → record env {vari = 0})) (While (λ env → lt 0 (varn env) ) (Seq (PComm (λ env → record env {vari = ((vari env) + 1)} )) (PComm (λ env → record env {varn = ((varn env) - 1)} ))))) {-# TERMINATING #-} interpret : Env → Comm → Env interpret env Skip = env interpret env Abort = env interpret env (PComm x) = x env interpret env (Seq comm comm1) = interpret (interpret env comm) comm1 interpret env (If x then else) with x env ... | true = interpret env then ... | false = interpret env else interpret env (While x comm) with x env ... | true = interpret (interpret env comm) (While x comm) ... | false = env test1 = interpret (record {vari = 0 ; varn = 0}) program initCond : Env → Bool initCond _ = true termCond : Env → Bool termCond env = (vari env) == 10 proof1 : HTProof initCond program termCond proof1 = {!!}