comparison agda/finiteSet.agda @ 104:fba1cd54581d

use exists in cond, nfa example
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Thu, 14 Nov 2019 05:13:49 +0900
parents 86d390666078
children ed0a2dad62f4
comparison
equal deleted inserted replaced
103:a46e0a2a3543 104:fba1cd54581d
8 open import Relation.Binary.Core 8 open import Relation.Binary.Core
9 open import Relation.Binary.PropositionalEquality 9 open import Relation.Binary.PropositionalEquality
10 open import logic 10 open import logic
11 open import nat 11 open import nat
12 open import Data.Nat.Properties hiding ( _≟_ ) 12 open import Data.Nat.Properties hiding ( _≟_ )
13 open import Data.List
13 14
14 open import Relation.Binary.HeterogeneousEquality as HE using (_≅_ ) 15 open import Relation.Binary.HeterogeneousEquality as HE using (_≅_ )
15 16
16 record Found ( Q : Set ) (p : Q → Bool ) : Set where 17 record Found ( Q : Set ) (p : Q → Bool ) : Set where
17 field 18 field
36 exists1 : (m : ℕ ) → m Data.Nat.≤ n → (Q → Bool) → Bool 37 exists1 : (m : ℕ ) → m Data.Nat.≤ n → (Q → Bool) → Bool
37 exists1 zero _ _ = false 38 exists1 zero _ _ = false
38 exists1 ( suc m ) m<n p = p (Q←F (fromℕ≤ {m} {n} m<n)) \/ exists1 m (lt2 m<n) p 39 exists1 ( suc m ) m<n p = p (Q←F (fromℕ≤ {m} {n} m<n)) \/ exists1 m (lt2 m<n) p
39 exists : ( Q → Bool ) → Bool 40 exists : ( Q → Bool ) → Bool
40 exists p = exists1 n (lt0 n) p 41 exists p = exists1 n (lt0 n) p
42
43 list1 : (m : ℕ ) → m Data.Nat.≤ n → (Q → Bool) → List Q
44 list1 zero _ _ = []
45 list1 ( suc m ) m<n p with bool-≡-? (p (Q←F (fromℕ≤ {m} {n} m<n))) true
46 ... | yes _ = Q←F (fromℕ≤ {m} {n} m<n) ∷ list1 m (lt2 m<n) p
47 ... | no _ = list1 m (lt2 m<n) p
48 to-list : ( Q → Bool ) → List Q
49 to-list p = list1 n (lt0 n) p
50
41 equal? : Q → Q → Bool 51 equal? : Q → Q → Bool
42 equal? q0 q1 with F←Q q0 ≟ F←Q q1 52 equal? q0 q1 with F←Q q0 ≟ F←Q q1
43 ... | yes p = true 53 ... | yes p = true
44 ... | no ¬p = false 54 ... | no ¬p = false
45 equal→refl : { x y : Q } → equal? x y ≡ true → x ≡ y 55 equal→refl : { x y : Q } → equal? x y ≡ true → x ≡ y