# HG changeset patch # User Shinji KONO # Date 1576825037 -32400 # Node ID 03235251b3a70ba2ce3ff1dfe8e0e518c422db1d # Parent 0bde332e121598dfb00f3bea44c93232b0276842 discrete state diff -r 0bde332e1215 -r 03235251b3a7 whileTestGears.agda --- a/whileTestGears.agda Thu Dec 19 15:48:11 2019 +0900 +++ b/whileTestGears.agda Fri Dec 20 15:57:17 2019 +0900 @@ -105,81 +105,63 @@ open import Relation.Nullary open import Relation.Binary -whileTestP : {l : Level} {t : Set l} → (c10 : ℕ) → (Code : Env → t) → t -whileTestP c10 next = next (record {varn = c10 ; vari = 0 } ) +record Envc : Set (succ Zero) where + field + c10 : ℕ + varn : ℕ + vari : ℕ +open Envc -whileLoopP : {l : Level} {t : Set l} → Env → (next : Env → t) → (exit : Env → t) → t +whileTestP : {l : Level} {t : Set l} → (c10 : ℕ) → (Code : Envc → t) → t +whileTestP c10 next = next (record {varn = c10 ; vari = 0 ; c10 = c10 } ) + +whileLoopP : {l : Level} {t : Set l} → Envc → (next : Envc → t) → (exit : Envc → t) → t whileLoopP env next exit with <-cmp 0 (varn env) whileLoopP env next exit | tri≈ ¬a b ¬c = exit env whileLoopP env next exit | tri< a ¬b ¬c = next (record env {varn = (varn env) - 1 ; vari = (vari env) + 1 }) {-# TERMINATING #-} -loopP : {l : Level} {t : Set l} → Env → (exit : Env → t) → t +loopP : {l : Level} {t : Set l} → Envc → (exit : Envc → t) → t loopP env exit = whileLoopP env (λ env → loopP env exit ) exit -whileTestPCall : {c10 : ℕ } → Set -whileTestPCall {c10} = whileTestP {_} {_} c10 (λ env → loopP env (λ env → ( vari env ≡ c10 ))) - -data whileTestStateP (c10 i n : ℕ ) : Set where - pstate1 : (i ≡ 0) /\ (n ≡ c10) → whileTestStateP c10 i n -- n ≡ c10 - pstate2 : (0 ≤ n) → (n ≤ c10) → (n + i ≡ c10) → whileTestStateP c10 i n -- 0 < n < c10 - pfinstate : (n ≡ 0 ) → (i ≡ c10 ) → whileTestStateP c10 i n -- n ≡ 0 +whileTestPCall : (c10 : ℕ ) → Envc +whileTestPCall c10 = whileTestP {_} {_} c10 (λ env → loopP env (λ env → env)) -record EnvP : Set (succ Zero) where - field - env : Env - c10 : ℕ - cx : whileTestStateP c10 (vari env) (varn env) +data whileTestState : Set where + s1 : whileTestState + s2 : whileTestState + sf : whileTestState -open EnvP - -s1 : (c10 : ℕ) → EnvP -s1 c10 = record {env = record {vari = 0 ; varn = c10} ; c10 = c10 ; cx = pstate1 (record {pi1 = refl ; pi2 = refl})} +whileTestStateP : whileTestState → Envc → Set +whileTestStateP s1 env = (vari env ≡ 0) /\ (varn env ≡ c10 env) +whileTestStateP s2 env = (varn env + vari env ≡ c10 env) +whileTestStateP sf env = (vari env ≡ c10 env) -s2 : (e : EnvP) → varn (env e) > 0 → varn (env e) < c10 e → EnvP -s2 e n>0 n0 n0 n