comparison whileTestGears.agda @ 39:2eb30c8e5a20

whileLoopStep
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 14 Dec 2019 09:25:45 +0900
parents 7049fbaf5e18
children a9cac7960e81
comparison
equal deleted inserted replaced
38:7049fbaf5e18 39:2eb30c8e5a20
124 open import Relation.Nullary 124 open import Relation.Nullary
125 open import Relation.Binary 125 open import Relation.Binary
126 126
127 127
128 {-# TERMINATING #-} 128 {-# TERMINATING #-}
129 whileLoopStep : {l : Level} {t : Set l} → Env → (Code : (e : Env ) → 1 ≤ varn e → t) (Code : (e : Env) → 0 ≡ varn e → t) → t 129 whileLoopStep : {l : Level} {t : Set l} → Env → (next : (e : Env ) → 1 ≤ varn e → t) (exit : (e : Env) → 0 ≡ varn e → t) → t
130 whileLoopStep env next exit with <-cmp 0 (varn env) 130 whileLoopStep env next exit with <-cmp 0 (varn env)
131 whileLoopStep env next exit | tri≈ _ eq _ = exit env eq 131 whileLoopStep env next exit | tri≈ _ eq _ = exit env eq
132 whileLoopStep env next exit | tri< gt ¬eq _ = {!!} 132 whileLoopStep env next exit | tri< gt ¬eq _ = next env gt
133 where 133 whileLoopStep env next exit | tri> _ _ c = ⊥-elim (m<n⇒n≢0 {varn env} {0} c refl)
134 lem : (env : Env) → (1 ≤ varn env) → 1 ≤ (varn env - 1)
135 lem env (s≤s 1<varn) with 1 ≤? varn env
136 lem env (s≤s 1<varn) | no ¬p = {!!}
137 lem env (s≤s 1<varn) | yes p = ⊥-elim (¬eq ({!!}))
138 -- n が 0 の時 は正しい、 n が1の時正しくない
139
140 whileLoopStep env next exit | tri> _ _ c = ⊥-elim (m<n⇒n≢0 {varn env} {0} c refl) -- can't happen
141 134
142 whileTestProof : {l : Level} {t : Set l} → Context → (Code : Context → t) → t 135 whileTestProof : {l : Level} {t : Set l} → Context → (Code : Context → t) → t
143 whileTestProof cxt next = next record cxt { whileDG = out ; whileCond = init } where 136 whileTestProof cxt next = next record cxt { whileDG = out ; whileCond = init } where
144 out : Env 137 out : Env
145 out = whileTest (c10 cxt) ( λ e → e ) 138 out = whileTest (c10 cxt) ( λ e → e )