Mercurial > hg > Members > ryokka > HoareLogic
changeset 15:8d546766a9a8
Prim variable version done
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 16 Dec 2018 11:20:53 +0900 |
parents | a622d1700a1b |
children | 23cce7437918 |
files | utilities.agda whileTestPrim.agda |
diffstat | 2 files changed, 28 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/utilities.agda Sun Dec 16 08:19:47 2018 +0900 +++ b/utilities.agda Sun Dec 16 11:20:53 2018 +0900 @@ -152,3 +152,9 @@ Equal+1 {x} {.x} | yes refl = refl Equal+1 {x} {y} | no ¬p = refl +open import Data.Empty + +≡→Equal : { x y : ℕ } → x ≡ y → Equal x y ≡ true +≡→Equal {x} {.x} refl with x ≟ x +≡→Equal {x} {.x} refl | yes refl = refl +≡→Equal {x} {.x} refl | no ¬p = ⊥-elim ( ¬p refl )
--- a/whileTestPrim.agda Sun Dec 16 08:19:47 2018 +0900 +++ b/whileTestPrim.agda Sun Dec 16 11:20:53 2018 +0900 @@ -117,6 +117,12 @@ stmt1Cond : {c10 : ℕ} → Cond stmt1Cond {c10} env = Equal (varn env) c10 +init-case : {c10 : ℕ} → (env : Env) → (( λ e → true ⇒ stmt1Cond {c10} e ) (record { varn = c10 ; vari = vari env }) ) ≡ true +init-case {c10} _ = impl⇒ ( λ cond → ≡→Equal refl ) + +init-type : {c10 : ℕ} → Axiom (λ env → true) (λ env → record { varn = c10 ; vari = vari env }) (stmt1Cond {c10}) +init-type {c10} env = init-case env + stmt2Cond : {c10 : ℕ} → Cond stmt2Cond {c10} env = (Equal (varn env) c10) ∧ (Equal (vari env) 0) @@ -129,15 +135,20 @@ termCond : {c10 : ℕ} → Cond termCond {c10} env = Equal (vari env) c10 +lemma1 : {c10 : ℕ} → Axiom (stmt1Cond {c10}) (λ env → record { varn = varn env ; vari = 0 }) (stmt2Cond {c10}) +lemma1 {c10} env = impl⇒ ( λ cond → let open ≡-Reasoning in + begin + (Equal (varn env) c10 ) ∧ true + ≡⟨ ∧true ⟩ + Equal (varn env) c10 + ≡⟨ cond ⟩ + true + ∎ ) + proofs : (c10 : ℕ) → HTProof initCond (simple c10) (stmt2Cond {c10}) proofs c10 = - SeqRule {initCond} ( PrimRule {!!} ) - $ PrimRule {stmt1Cond} {_} {stmt2Cond} (lemma {c10}) - where - lemma : {c10 : ℕ} → Axiom (stmt1Cond {c10}) (λ env → record { varn = varn env ; vari = 0 }) (stmt2Cond {c10}) - lemma env with (stmt1Cond {c10}) env - lemma env | false = {!!} - lemma env | true = {!!} + SeqRule {initCond} ( PrimRule (init-case {c10} )) + $ PrimRule {stmt1Cond} {_} {stmt2Cond} (lemma1 {c10}) open import Data.Empty @@ -145,17 +156,13 @@ proof1 : (c10 : ℕ) → HTProof initCond (program c10 ) (termCond {c10}) proof1 c10 = - SeqRule {λ e → true} ( PrimRule {!!} ) + SeqRule {λ e → true} ( PrimRule (init-case {c10} )) $ SeqRule {λ e → Equal (varn e) c10} ( PrimRule lemma1 ) $ WeakeningRule {λ e → (Equal (varn e) c10) ∧ (Equal (vari e) 0)} lemma2 ( WhileRule {_} {λ e → Equal ((varn e) + (vari e)) c10} $ SeqRule (PrimRule {λ e → whileInv e ∧ lt zero (varn e) } lemma3 ) $ PrimRule {whileInv'} {_} {whileInv} lemma4 ) lemma5 where - lemma1 : {c10 : ℕ} → Axiom (stmt1Cond {c10}) (λ env → record { varn = varn env ; vari = 0 }) (stmt2Cond {c10}) - lemma1 {c10} env with (stmt1Cond {c10}) env - lemma1 {c10} env | false = {!!} - lemma1 {c10} env | true = {!!} lemma21 : {env : Env } → {c10 : ℕ} → stmt2Cond env ≡ true → varn env ≡ c10 lemma21 eq = Equal→≡ (∧-pi1 eq) lemma22 : {env : Env } → {c10 : ℕ} → stmt2Cond {c10} env ≡ true → vari env ≡ 0 @@ -166,7 +173,7 @@ varn env + vari env ≡⟨ cong ( \ x -> x + vari env ) (lemma21 eq ) ⟩ c10 + vari env - ≡⟨ cong ( \ x -> c10 + x) (lemma22 {env} {c10} {!!} ) ⟩ + ≡⟨ cong ( \ x -> c10 + x) (lemma22 {env} {c10} eq ) ⟩ c10 + 0 ≡⟨ +-sym {c10} {0} ⟩ 0 + c10 @@ -182,7 +189,7 @@ (stmt2Cond env) ⇒ ( Equal (varn env + vari env) c10 ) ≡⟨ cong ( \ x -> (stmt2Cond {c10} env) ⇒ ( Equal x c10 ) ) ( lemma23 {env} eq ) ⟩ (stmt2Cond env) ⇒ (Equal c10 c10) - ≡⟨ {!!} ⟩ + ≡⟨ cong ( \ x -> (stmt2Cond {c10} env) ⇒ x ) (≡→Equal refl ) ⟩ (stmt2Cond {c10} env) ⇒ true ≡⟨ ⇒t ⟩ true @@ -230,7 +237,7 @@ Equal (varn env + vari env) (suc c10) ≡⟨ cong ( λ z → (Equal z (suc c10) )) c1 ⟩ Equal (suc c10) (suc c10) - ≡⟨ {!!} ⟩ + ≡⟨ ≡→Equal refl ⟩ true ∎ lemma4 : {c10 : ℕ} → Axiom whileInv' (λ env → record { varn = varn env - 1 ; vari = vari env }) whileInv