Mercurial > hg > Members > soto > experimental
view WhileTest.agda @ 11:e6a7215fb00c
add while_init_imple
author | soto |
---|---|
date | Thu, 11 Feb 2021 17:23:49 +0900 |
parents | |
children | 77f0530f2eff |
line wrap: on
line source
open import Level renaming (suc to Suc ; zero to Zero ) module WhileTest where open import Relation.Binary.PropositionalEquality open import Relation.Binary.Core open import Data.Nat hiding (compare) open import Data.Maybe open import Data.List open import Function open import logic --open import Data.Bool hiding ( _≟_ ) -- ; _≤?_ ; _≤_ ; _<_) --open import Relation.Binary.PropositionalEquality open import Agda.Builtin.Unit record Env : Set (Suc Zero) where field varn : ℕ vari : ℕ open Env data _implies_ (A B : Set ) : Set (Suc Zero) where proof : ( A → B ) → A implies B data whileTestState : Set where s1 : whileTestState s2 : whileTestState sf : whileTestState whileTestStateP : whileTestState → Env → ℕ → Set whileTestStateP s1 env c10 = (vari env ≡ 0) ∧ (varn env ≡ c10) whileTestStateP s2 env c10 = (varn env + vari env ≡ c10 ) whileTestStateP sf env c10 = (vari env ≡ c10) record WhileTest {m : Level } {t : Set m } : Set (Suc m) where field env : Env whileInit : {m : Level } {t : Set m } → (c10 : ℕ) → (Env → t) → t whileInit c10 next = next (record {varn = c10 ; vari = 0 } ) whileInit-imple : (c10 : ℕ) → whileInit c10 (λ env → ⊤ implies (whileTestStateP s1 env c10) ) whileInit-imple c = proof ( λ _ → record { proj1 = refl ; proj2 = refl } ) whileLoop : Env → (Code : Env → t) → t whileLoop env next = whileLoop1 (varn env) env where whileLoop1 : ℕ → Env → t whileLoop1 zero env = next env whileLoop1 (suc t ) env = whileLoop1 t (record env {varn = t ; vari = (vari env) + 1}) whileTest : (c10 : ℕ) → (Env → t) → t whileTest c10 next = whileInit c10 $ λ env → whileLoop env next open WhileTest createWhileTest : {m : Level} {t : Set m } → WhileTest {m} {t} createWhileTest = record { env = record { varn = 0; vari = 0 } } test2 : ℕ test2 = whileTest createWhileTest 10 $ λ e → vari e --- {- 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) whileTestP : {l : Level} {t : Set l} → (c10 : ℕ) → (Code : Envc → t) → t whileTestP c10 next = next (record {varn = c10 ; vari = 0 ; c10 = c10 } ) whileTestPSem : (c : ℕ) → whileTestP c ( λ env → ⊤ implies (whileTestStateP s1 env) ) whileTestPSem c = proof ( λ _ → record { pi1 = refl ; pi2 = refl } ) -}