# HG changeset patch # User Shinji KONO # Date 1576418228 -32400 # Node ID 8bf82026e4fe071252a05963fa7ff2825b1182f3 # Parent 52523a6ee221e328a849f25be70940baff9a6f7d simplified env with state condition diff -r 52523a6ee221 -r 8bf82026e4fe whileTestGears.agda --- a/whileTestGears.agda Sun Dec 15 19:22:21 2019 +0900 +++ b/whileTestGears.agda Sun Dec 15 22:57:08 2019 +0900 @@ -14,11 +14,10 @@ field varn : ℕ vari : ℕ - cx : Set open Env -whileTest : {l : Level} {t : Set l} (c : Set ) → (c10 : ℕ) → (Code : Env → t) → t -whileTest c c10 next = next (record {varn = c10 ; vari = 0 ; cx = c} ) +whileTest : {l : Level} {t : Set l} → (c10 : ℕ) → (Code : Env → t) → t +whileTest c10 next = next (record {varn = c10 ; vari = 0 } ) {-# TERMINATING #-} whileLoop : {l : Level} {t : Set l} → Env → (Code : Env → t) → t @@ -27,19 +26,19 @@ whileLoop env next | true = whileLoop (record env {varn = (varn env) - 1 ; vari = (vari env) + 1}) next -test1 : (c : Set ) → Env -test1 c = whileTest c 10 (λ env → whileLoop env (λ env1 → env1 )) +test1 : Env +test1 = whileTest 10 (λ env → whileLoop env (λ env1 → env1 )) -proof1 : (c : Set ) → whileTest c 10 (λ env → whileLoop env (λ e → (vari e) ≡ 10 )) -proof1 c = refl +proof1 : whileTest 10 (λ env → whileLoop env (λ e → (vari e) ≡ 10 )) +proof1 = refl -- ↓PostCondition -whileTest' : {l : Level} {t : Set l} → {c : Set} → {c10 : ℕ } → (Code : (env : Env ) → ((vari env) ≡ 0) /\ ((varn env) ≡ c10) → t) → t -whileTest' {_} {_} {c} {c10} next = next env proof2 +whileTest' : {l : Level} {t : Set l} → {c10 : ℕ } → (Code : (env : Env ) → ((vari env) ≡ 0) /\ ((varn env) ≡ c10) → t) → t +whileTest' {_} {_} {c10} next = next env proof2 where env : Env - env = record {vari = 0 ; varn = c10 ; cx = c } + env = record {vari = 0 ; varn = c10 } proof2 : ((vari env) ≡ 0) /\ ((varn env) ≡ c10) -- PostCondition proof2 = record {pi1 = refl ; pi2 = refl} @@ -75,7 +74,7 @@ -- c10 -- ∎ --- Condition to Invaliant +-- Condition to Invariant conversion1 : {l : Level} {t : Set l } → (env : Env ) → {c10 : ℕ } → ((vari env) ≡ 0) /\ ((varn env) ≡ c10) → (Code : (env1 : Env ) → (varn env1 + vari env1 ≡ c10) → t) → t conversion1 env {c10} p1 next = next env proof4 @@ -93,146 +92,62 @@ ∎ -proofGears : {c10 : ℕ } → Set → Set -proofGears {c10} c = whileTest' {_} {_} {c} {c10} (λ n p1 → conversion1 n p1 (λ n1 p2 → whileLoop' n1 p2 (λ n2 → ( vari n2 ≡ c10 )))) +proofGears : {c10 : ℕ } → Set +proofGears {c10} = whileTest' {_} {_} {c10} (λ n p1 → conversion1 n p1 (λ n1 p2 → whileLoop' n1 p2 (λ n2 → ( vari n2 ≡ c10 )))) -data whileTestState (c10 : ℕ ) (env : Env ) : Set where --- error : whileTestState c10 env - state1 : ((vari env) ≡ 0) /\ ((varn env) ≡ c10) → whileTestState c10 env - state2 : (varn env + vari env ≡ c10) → whileTestState c10 env - finstate : ((vari env) ≡ c10 ) → whileTestState c10 env - -transition : (c10 : ℕ ) (env0 : Env) → (Env → Env) → Set -transition c10 env0 prog = whileTestState c10 env0 → whileTestState c10 (prog env0) - -whileTrans : (c10 : ℕ ) (env0 : Env) → transition c10 env0 {!!} -whileTrans c10 env0 st = {!!} +proofGearsMeta : {c10 : ℕ } → proofGears {c10} +proofGearsMeta {c10} = {!!} -- net yet done -- -- openended Env c <=> Context -- -record Context : Set (succ Zero) where - field - c10 : ℕ - whileDG : Env - whileCond : whileTestState c10 whileDG - -open Context - - - - open import Relation.Nullary open import Relation.Binary --- --- transparency of condition --- - -whileCondP : Env → Set -whileCondP env = (varn env > 0) /\ (vari env > 0) - -whileDec : (cxt : Context) → Dec (whileCondP (whileDG cxt)) -whileDec cxt = {!!} - -whileTestContext : {l : Level} {t : Set l} → Context → (Code : Context → t) → t -whileTestContext cxt next = next (record cxt { whileDG = record (whileDG cxt) {varn = c10 cxt ; vari = 0} ; whileCond = {!!} } ) +data whileTestStateP (c10 i n : ℕ ) : Set where + pstate1 : (i ≡ 0) /\ (n ≡ c10) → whileTestStateP c10 i n -- n ≡ c10 + pstate2 : (n + i ≡ c10) → whileTestStateP c10 i n -- 0 < n < c10 + pfinstate : (i ≡ c10 ) → whileTestStateP c10 i n -- n ≡ 0 -{-# TERMINATING #-} -whileLoopContext : {l : Level} {t : Set l} → Context → (Code : Context → t) → t -whileLoopContext cxt next with lt 0 (varn (whileDG cxt) ) -whileLoopContext cxt next | false = next cxt -whileLoopContext cxt next | true = - whileLoopContext (record cxt { whileDG = record (whileDG cxt) {varn = (varn (whileDG cxt)) - 1 ; vari = (vari (whileDG cxt)) + 1} ; whileCond = state2 (proof3 cxt) } ) next - where - proof3 : (cxt : Context) → (varn (whileDG cxt) - 1) + (vari (whileDG cxt) + 1) ≡ c10 cxt - proof3 cxt = {!!} +record EnvP : Set (succ Zero) where + field + pvarn : ℕ + pvari : ℕ + c10 : ℕ + cx : whileTestStateP c10 pvarn pvari +open EnvP -{-# TERMINATING #-} -whileLoopStep : {l : Level} {t : Set l} → Env → (next : (e : Env ) → t) (exit : (e : Env) → t) → t -whileLoopStep env next exit with <-cmp 0 (varn env) -whileLoopStep env next exit | tri≈ _ eq _ = exit env -whileLoopStep env next exit | tri< gt ¬eq _ = next record env {varn = (varn env) - 1 ; vari = (vari env) + 1} -whileLoopStep env next exit | tri> _ _ c = ⊥-elim (m