annotate agda/finiteSet.agda @ 114:a7364dfcc51e

finite-or
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 18 Nov 2019 23:53:47 +0900
parents 58b009043733
children 1b54c0623d01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
1 {-# OPTIONS --allow-unsolved-metas #-}
44
aa15eff1aeb3 seprate finite
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 module finiteSet where
aa15eff1aeb3 seprate finite
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3
69
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 46
diff changeset
4 open import Data.Nat hiding ( _≟_ )
83
92f396c3a1d7 add end function
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
5 open import Data.Fin renaming ( _<_ to _<<_ ) hiding (_≤_)
69
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 46
diff changeset
6 open import Data.Fin.Properties
76
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
7 open import Data.Empty
69
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 46
diff changeset
8 open import Relation.Nullary
44
aa15eff1aeb3 seprate finite
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 open import Relation.Binary.Core
46
964e4bd0272a add coinduction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
10 open import Relation.Binary.PropositionalEquality
69
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 46
diff changeset
11 open import logic
78
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
12 open import nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
13 open import Data.Nat.Properties hiding ( _≟_ )
44
aa15eff1aeb3 seprate finite
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14
79
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
15 open import Relation.Binary.HeterogeneousEquality as HE using (_≅_ )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
16
85
9911911b77cb all foundables
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
17 record Found ( Q : Set ) (p : Q → Bool ) : Set where
9911911b77cb all foundables
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
18 field
92
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
19 found-q : Q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
20 found-p : p found-q ≡ true
79
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
21
85
9911911b77cb all foundables
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
22 record FiniteSet ( Q : Set ) { n : ℕ } : Set where
44
aa15eff1aeb3 seprate finite
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 field
aa15eff1aeb3 seprate finite
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 Q←F : Fin n → Q
aa15eff1aeb3 seprate finite
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 F←Q : Q → Fin n
aa15eff1aeb3 seprate finite
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 finiso→ : (q : Q) → Q←F ( F←Q q ) ≡ q
aa15eff1aeb3 seprate finite
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 finiso← : (f : Fin n ) → F←Q ( Q←F f ) ≡ f
70
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
28 finℕ : ℕ
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
29 finℕ = n
44
aa15eff1aeb3 seprate finite
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 lt0 : (n : ℕ) → n Data.Nat.≤ n
aa15eff1aeb3 seprate finite
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 lt0 zero = z≤n
aa15eff1aeb3 seprate finite
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 lt0 (suc n) = s≤s (lt0 n)
aa15eff1aeb3 seprate finite
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 lt2 : {m n : ℕ} → m < n → m Data.Nat.≤ n
aa15eff1aeb3 seprate finite
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 lt2 {zero} lt = z≤n
aa15eff1aeb3 seprate finite
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 lt2 {suc m} {zero} ()
aa15eff1aeb3 seprate finite
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 lt2 {suc m} {suc n} (s≤s lt) = s≤s (lt2 lt)
76
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
37 exists1 : (m : ℕ ) → m Data.Nat.≤ n → (Q → Bool) → Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
38 exists1 zero _ _ = false
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
39 exists1 ( suc m ) m<n p = p (Q←F (fromℕ≤ {m} {n} m<n)) \/ exists1 m (lt2 m<n) p
44
aa15eff1aeb3 seprate finite
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 exists : ( Q → Bool ) → Bool
76
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
41 exists p = exists1 n (lt0 n) p
104
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
42
114
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
43 open import Data.List
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
44 list1 : (m : ℕ ) → m Data.Nat.≤ n → (Q → Bool) → List Q
104
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
45 list1 zero _ _ = []
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
46 list1 ( suc m ) m<n p with bool-≡-? (p (Q←F (fromℕ≤ {m} {n} m<n))) true
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
47 ... | yes _ = Q←F (fromℕ≤ {m} {n} m<n) ∷ list1 m (lt2 m<n) p
114
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
48 ... | no _ = list1 m (lt2 m<n) p
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
49 to-list : ( Q → Bool ) → List Q
104
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
50 to-list p = list1 n (lt0 n) p
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
51
69
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 46
diff changeset
52 equal? : Q → Q → Bool
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 46
diff changeset
53 equal? q0 q1 with F←Q q0 ≟ F←Q q1
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 46
diff changeset
54 ... | yes p = true
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 46
diff changeset
55 ... | no ¬p = false
95
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
56 equal→refl : { x y : Q } → equal? x y ≡ true → x ≡ y
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
57 equal→refl {q0} {q1} eq with F←Q q0 ≟ F←Q q1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
58 equal→refl {q0} {q1} refl | yes eq = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
59 q0
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
60 ≡⟨ sym ( finiso→ q0) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
61 Q←F (F←Q q0)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
62 ≡⟨ cong (λ k → Q←F k ) eq ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
63 Q←F (F←Q q1)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
64 ≡⟨ finiso→ q1 ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
65 q1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
66 ∎ where open ≡-Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
67 equal→refl {q0} {q1} () | no ne
87
217ef727574a reverse direction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
68 equal?-refl : {q : Q} → equal? q q ≡ true
217ef727574a reverse direction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
69 equal?-refl {q} with F←Q q ≟ F←Q q
217ef727574a reverse direction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
70 ... | yes p = refl
217ef727574a reverse direction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
71 ... | no ne = ⊥-elim (ne refl)
77
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
72 fin<n : {n : ℕ} {f : Fin n} → toℕ f < n
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
73 fin<n {_} {zero} = s≤s z≤n
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 76
diff changeset
74 fin<n {suc n} {suc f} = s≤s (fin<n {n} {f})
84
29d81bcff049 found done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
75 i=j : {n : ℕ} (i j : Fin n) → toℕ i ≡ toℕ j → i ≡ j
29d81bcff049 found done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
76 i=j {suc n} zero zero refl = refl
29d81bcff049 found done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
77 i=j {suc n} (suc i) (suc j) eq = cong ( λ k → suc k ) ( i=j i j (cong ( λ k → Data.Nat.pred k ) eq) )
85
9911911b77cb all foundables
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
78 -- ¬∀⟶∃¬ : ∀ n {p} (P : Pred (Fin n) p) → Decidable P → ¬ (∀ i → P i) → (∃ λ i → ¬ P i)
9911911b77cb all foundables
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
79 End : (m : ℕ ) → (p : Q → Bool ) → Set
9911911b77cb all foundables
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
80 End m p = (i : Fin n) → m ≤ toℕ i → p (Q←F i ) ≡ false
9911911b77cb all foundables
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
81 next-end : {m : ℕ } → ( p : Q → Bool ) → End (suc m) p
83
92f396c3a1d7 add end function
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
82 → (m<n : m < n ) → p (Q←F (fromℕ≤ m<n )) ≡ false
85
9911911b77cb all foundables
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
83 → End m p
9911911b77cb all foundables
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
84 next-end {m} p prev m<n np i m<i with Data.Nat.Properties.<-cmp m (toℕ i)
9911911b77cb all foundables
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
85 next-end p prev m<n np i m<i | tri< a ¬b ¬c = prev i a
9911911b77cb all foundables
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
86 next-end p prev m<n np i m<i | tri> ¬a ¬b c = ⊥-elim ( nat-≤> m<i c )
9911911b77cb all foundables
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
87 next-end {m} p prev m<n np i m<i | tri≈ ¬a b ¬c = subst ( λ k → p (Q←F k) ≡ false) (m<n=i i b m<n ) np where
83
92f396c3a1d7 add end function
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
88 m<n=i : {n : ℕ } (i : Fin n) {m : ℕ } → m ≡ (toℕ i) → (m<n : m < n ) → fromℕ≤ m<n ≡ i
84
29d81bcff049 found done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
89 m<n=i i eq m<n = i=j (fromℕ≤ m<n) i (subst (λ k → k ≡ toℕ i) (sym (toℕ-fromℕ≤ m<n)) eq )
85
9911911b77cb all foundables
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
90 first-end : ( p : Q → Bool ) → End n p
9911911b77cb all foundables
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
91 first-end p i i>n = ⊥-elim (nat-≤> i>n (fin<n {n} {i}) )
88
e7b3a2856ccb clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
92 found : { p : Q → Bool } → (q : Q ) → p q ≡ true → exists p ≡ true
e7b3a2856ccb clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
93 found {p} q pt = found1 n (lt0 n) ( first-end p ) where
83
92f396c3a1d7 add end function
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
94 found1 : (m : ℕ ) (m<n : m Data.Nat.≤ n ) → ((i : Fin n) → m ≤ toℕ i → p (Q←F i ) ≡ false ) → exists1 m m<n p ≡ true
92f396c3a1d7 add end function
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
95 found1 0 m<n end = ⊥-elim ( ¬-bool (subst (λ k → k ≡ false ) (cong (λ k → p k) (finiso→ q) ) (end (F←Q q) z≤n )) pt )
84
29d81bcff049 found done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
96 found1 (suc m) m<n end with bool-≡-? (p (Q←F (fromℕ≤ m<n))) true
29d81bcff049 found done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
97 found1 (suc m) m<n end | yes eq = subst (λ k → k \/ exists1 m (lt2 m<n) p ≡ true ) (sym eq) (bool-or-4 {exists1 m (lt2 m<n) p} )
29d81bcff049 found done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
98 found1 (suc m) m<n end | no np = begin
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
99 p (Q←F (fromℕ≤ m<n)) \/ exists1 m (lt2 m<n) p
85
9911911b77cb all foundables
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
100 ≡⟨ bool-or-1 (¬-bool-t np ) ⟩
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
101 exists1 m (lt2 m<n) p
85
9911911b77cb all foundables
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
102 ≡⟨ found1 m (lt2 m<n) (next-end p end m<n (¬-bool-t np )) ⟩
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
103 true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
104 ∎ where open ≡-Reasoning
83
92f396c3a1d7 add end function
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
105 not-found : { p : Q → Bool } → ( (q : Q ) → p q ≡ false ) → exists p ≡ false
92f396c3a1d7 add end function
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
106 not-found {p} pn = not-found2 n (lt0 n) where
92f396c3a1d7 add end function
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
107 not-found2 : (m : ℕ ) → (m<n : m Data.Nat.≤ n ) → exists1 m m<n p ≡ false
92f396c3a1d7 add end function
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
108 not-found2 zero _ = refl
92f396c3a1d7 add end function
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
109 not-found2 ( suc m ) m<n with pn (Q←F (fromℕ≤ {m} {n} m<n))
92f396c3a1d7 add end function
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
110 not-found2 (suc m) m<n | eq = begin
92f396c3a1d7 add end function
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
111 p (Q←F (fromℕ≤ m<n)) \/ exists1 m (lt2 m<n) p
85
9911911b77cb all foundables
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
112 ≡⟨ bool-or-1 eq ⟩
83
92f396c3a1d7 add end function
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
113 exists1 m (lt2 m<n) p
92f396c3a1d7 add end function
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
114 ≡⟨ not-found2 m (lt2 m<n) ⟩
92f396c3a1d7 add end function
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
115 false
92f396c3a1d7 add end function
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
116 ∎ where open ≡-Reasoning
85
9911911b77cb all foundables
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
117 open import Level
9911911b77cb all foundables
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
118 postulate f-extensionality : { n : Level} → Relation.Binary.PropositionalEquality.Extensionality n n -- (Level.suc n)
9911911b77cb all foundables
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
119 found← : { p : Q → Bool } → exists p ≡ true → Found Q p
9911911b77cb all foundables
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
120 found← {p} exst = found2 n (lt0 n) (first-end p ) where
9911911b77cb all foundables
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
121 found2 : (m : ℕ ) (m<n : m Data.Nat.≤ n ) → End m p → Found Q p
9911911b77cb all foundables
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
122 found2 0 m<n end = ⊥-elim ( ¬-bool (not-found (λ q → end (F←Q q) z≤n ) ) (subst (λ k → exists k ≡ true) (sym lemma) exst ) ) where
9911911b77cb all foundables
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
123 lemma : (λ z → p (Q←F (F←Q z))) ≡ p
9911911b77cb all foundables
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
124 lemma = f-extensionality ( λ q → subst (λ k → p k ≡ p q ) (sym (finiso→ q)) refl )
9911911b77cb all foundables
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
125 found2 (suc m) m<n end with bool-≡-? (p (Q←F (fromℕ≤ m<n))) true
92
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
126 found2 (suc m) m<n end | yes eq = record { found-q = Q←F (fromℕ≤ m<n) ; found-p = eq }
85
9911911b77cb all foundables
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
127 found2 (suc m) m<n end | no np =
9911911b77cb all foundables
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
128 found2 m (lt2 m<n) (next-end p end m<n (¬-bool-t np ))
9911911b77cb all foundables
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
129 not-found← : { p : Q → Bool } → exists p ≡ false → (q : Q ) → p q ≡ false
88
e7b3a2856ccb clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
130 not-found← {p} np q = ¬-bool-t ( contra-position {_} {_} {_} {exists p ≡ true} (found q) (λ ep → ¬-bool np ep ) )
44
aa15eff1aeb3 seprate finite
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
131
111
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
132 fin-∨' : {A B : Set} → { a b : ℕ } → FiniteSet A {a} → FiniteSet B {b} → FiniteSet (A ∨ B) {a Data.Nat.+ b}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
133 fin-∨' {A} {B} {a} {b} fa fb = record {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
134 Q←F = Q←F
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
135 ; F←Q = F←Q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
136 ; finiso→ = finiso→
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
137 ; finiso← = finiso←
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
138 } where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
139 n : ℕ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
140 n = a Data.Nat.+ b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
141 Q : Set
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
142 Q = A ∨ B
113
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
143 f-a : ∀{i} → (f : Fin i ) → (a : ℕ ) → toℕ f > a → toℕ f < a Data.Nat.+ b → Fin b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
144 f-a {i} f zero lt lt2 = fromℕ≤ lt2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
145 f-a {suc i} (suc f) (suc a) (s≤s lt) (s≤s lt2) = f-a f a lt lt2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
146 f-a zero (suc x) () _
111
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
147 Q←F : Fin n → Q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
148 Q←F f with Data.Nat.Properties.<-cmp (toℕ f) a
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
149 Q←F f | tri< lt ¬b ¬c = case1 (FiniteSet.Q←F fa (fromℕ≤ lt ))
113
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
150 Q←F f | tri≈ ¬a eq ¬c = case2 (FiniteSet.Q←F fb (fromℕ≤ (0<b a (a<a+b eq ) ))) where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
151 a<a+b : toℕ f ≡ a → a < a Data.Nat.+ b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
152 a<a+b eq = subst (λ k → k < a Data.Nat.+ b) eq ( toℕ<n f )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
153 0<b : (a : ℕ ) → a < a Data.Nat.+ b → 0 < b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
154 0<b zero a<a+b = a<a+b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
155 0<b (suc a) (s≤s a<a+b) = 0<b a a<a+b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
156 Q←F f | tri> ¬a ¬b c = case2 (FiniteSet.Q←F fb (f-a f a c (toℕ<n f) ))
111
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
157 F←Q : Q → Fin n
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
158 F←Q (case1 qa) = inject+ b (FiniteSet.F←Q fa qa)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
159 F←Q (case2 qb) = raise a (FiniteSet.F←Q fb qb)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
160 finiso→ : (q : Q) → Q←F ( F←Q q ) ≡ q
114
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
161 finiso→ (case1 qa) = {!!}
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
162 finiso→ (case2 qb) = {!!}
111
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
163 finiso← : (f : Fin n ) → F←Q ( Q←F f ) ≡ f
114
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
164 finiso← f with Data.Nat.Properties.<-cmp (toℕ f) a
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
165 finiso← f | tri< lt ¬b ¬c = lemma11 where
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
166 lemma11 : inject+ b (FiniteSet.F←Q fa (FiniteSet.Q←F fa (fromℕ≤ lt ) )) ≡ f
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
167 lemma11 = {!!}
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
168 finiso← f | tri≈ ¬a eq ¬c = lemma12 where
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
169 lemma12 : raise a (FiniteSet.F←Q fb (FiniteSet.Q←F fb (fromℕ≤ {!!} ))) ≡ f
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
170 lemma12 = {!!}
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
171 finiso← f | tri> ¬a ¬b c = lemma13 where
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
172 lemma13 : raise a (FiniteSet.F←Q fb ((FiniteSet.Q←F fb (f-a f a c (toℕ<n f))))) ≡ f
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
173 lemma13 = {!!}
111
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
174
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
175 import Data.Nat.DivMod
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
176 import Data.Nat.Properties
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
177
112
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
178 open _∧_
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
179
114
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
180 open import Data.Vec
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
181 import Data.Product
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
182
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
183 exp2 : (n : ℕ ) → exp 2 (suc n) ≡ exp 2 n Data.Nat.+ exp 2 n
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
184 exp2 n = begin
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
185 exp 2 (suc n)
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
186 ≡⟨⟩
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
187 2 * ( exp 2 n )
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
188 ≡⟨ *-comm 2 (exp 2 n) ⟩
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
189 ( exp 2 n ) * 2
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
190 ≡⟨ +-*-suc ( exp 2 n ) 1 ⟩
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
191 (exp 2 n ) Data.Nat.+ ( exp 2 n ) * 1
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
192 ≡⟨ cong ( λ k → (exp 2 n ) Data.Nat.+ k ) (proj₂ *-identity (exp 2 n) ) ⟩
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
193 exp 2 n Data.Nat.+ exp 2 n
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
194 ∎ where
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
195 open ≡-Reasoning
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
196 open Data.Product
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
197
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
198 cast-iso : {n m : ℕ } → (eq : n ≡ m ) → (f : Fin m ) → cast eq ( cast (sym eq ) f) ≡ f
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
199 cast-iso refl zero = refl
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
200 cast-iso refl (suc f) = cong ( λ k → suc k ) ( cast-iso refl f )
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
201
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
202
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
203 fin2List : {n : ℕ } → FiniteSet (Vec Bool n) {exp 2 n }
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
204 fin2List {zero} = record {
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
205 Q←F = λ _ → Vec.[]
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
206 ; F←Q = λ _ → # 0
111
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
207 ; finiso→ = finiso→
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
208 ; finiso← = finiso←
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
209 } where
114
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
210 Q = Vec Bool zero
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
211 finiso→ : (q : Q) → [] ≡ q
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
212 finiso→ [] = refl
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
213 finiso← : (f : Fin (exp 2 zero)) → # 0 ≡ f
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
214 finiso← zero = refl
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
215 fin2List {suc n} = record {
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
216 Q←F = Q←F
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
217 ; F←Q = F←Q
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
218 ; finiso→ = finiso→
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
219 ; finiso← = finiso←
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
220 } where
111
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
221 Q : Set
114
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
222 Q = Vec Bool (suc n)
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
223 QtoR : Vec Bool (suc n) → Vec Bool n ∨ Vec Bool n
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
224 QtoR ( true ∷ x ) = case1 x
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
225 QtoR ( false ∷ x ) = case2 x
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
226 RtoQ : Vec Bool n ∨ Vec Bool n → Vec Bool (suc n)
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
227 RtoQ ( case1 x ) = true ∷ x
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
228 RtoQ ( case2 x ) = false ∷ x
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
229 isoRQ : (x : Vec Bool (suc n) ) → RtoQ ( QtoR x ) ≡ x
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
230 isoRQ (true ∷ _ ) = refl
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
231 isoRQ (false ∷ _ ) = refl
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
232 isoQR : (x : Vec Bool n ∨ Vec Bool n ) → QtoR ( RtoQ x ) ≡ x
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
233 isoQR (case1 x) = refl
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
234 isoQR (case2 x) = refl
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
235 fin∨ = fin-∨' (fin2List {n}) (fin2List {n})
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
236 Q←F : Fin (exp 2 (suc n)) → Q
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
237 Q←F f = RtoQ ( FiniteSet.Q←F fin∨ (cast (exp2 n) f ))
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
238 F←Q : Q → Fin (exp 2 (suc n))
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
239 F←Q q = cast (sym (exp2 n)) ( FiniteSet.F←Q fin∨ ( QtoR q ) )
111
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
240 finiso→ : (q : Q) → Q←F ( F←Q q ) ≡ q
114
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
241 finiso→ q = begin
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
242 RtoQ ( FiniteSet.Q←F fin∨ (cast (exp2 n) (cast (sym (exp2 n)) ( FiniteSet.F←Q fin∨ (QtoR q) )) ))
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
243 ≡⟨ cong (λ k → RtoQ ( FiniteSet.Q←F fin∨ k)) (cast-iso (exp2 n) _ ) ⟩
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
244 RtoQ ( FiniteSet.Q←F fin∨ ( FiniteSet.F←Q fin∨ (QtoR q) ))
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
245 ≡⟨ cong ( λ k → RtoQ k ) ( FiniteSet.finiso→ fin∨ _ ) ⟩
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
246 RtoQ (QtoR _)
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
247 ≡⟨ isoRQ q ⟩
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
248 q
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
249 ∎ where open ≡-Reasoning
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
250 finiso← : (f : Fin (exp 2 (suc n) )) → F←Q ( Q←F f ) ≡ f
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
251 finiso← f = begin
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
252 cast _ (FiniteSet.F←Q fin∨ (QtoR (RtoQ (FiniteSet.Q←F fin∨ (cast _ f )) ) ))
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
253 ≡⟨ cong (λ k → cast (sym (exp2 n)) (FiniteSet.F←Q fin∨ k )) (isoQR (FiniteSet.Q←F fin∨ (cast _ f))) ⟩
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
254 cast (sym (exp2 n)) (FiniteSet.F←Q fin∨ (FiniteSet.Q←F fin∨ (cast (exp2 n) f )))
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
255 ≡⟨ cong (λ k → cast (sym (exp2 n)) k ) ( FiniteSet.finiso← fin∨ _ ) ⟩
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
256 cast _ (cast (exp2 n) f )
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
257 ≡⟨ cast-iso (sym (exp2 n)) _ ⟩
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
258 f
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
259 ∎ where open ≡-Reasoning
111
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
260
114
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
261 Func2List : { Q : Set } → {n : ℕ } → FiniteSet Q {n} → ( Q → Bool ) → Vec Bool n
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
262 Func2List = {!!}
111
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
263
114
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
264 List2Func : { Q : Set } → {n : ℕ } → FiniteSet Q {n} → Vec Bool n → ( Q → Bool )
a7364dfcc51e finite-or
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
265 List2Func = {!!}