annotate work.agda @ 919:4d379ebc53c8

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 04 Jun 2024 17:29:33 +0900
parents 858655384dea
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
781
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 module work where
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 open import Level hiding (suc ; zero ; _⊔_ )
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 open import Data.Nat hiding (compare)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 open import Data.Nat.Properties as NatProp
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 open import Data.Maybe
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 -- open import Data.Maybe.Properties
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 open import Data.Empty
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 open import Data.List
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 open import Data.Product
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 open import Function as F hiding (const)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 open import Relation.Binary
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 open import Relation.Binary.PropositionalEquality
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 open import Relation.Nullary
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 open import logic
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18
802
mori
parents: 786
diff changeset
19 zero≢suc : { m : ℕ } → zero ≡ suc m → ⊥
mori
parents: 786
diff changeset
20 zero≢suc ()
mori
parents: 786
diff changeset
21 suc≢zero : {m : ℕ } → suc m ≡ zero → ⊥
mori
parents: 786
diff changeset
22 suc≢zero ()
mori
parents: 786
diff changeset
23 {-# TERMINATING #-}
mori
parents: 786
diff changeset
24 DepthCal : ( l m n : ℕ ) → l ≡ m ⊔ n
mori
parents: 786
diff changeset
25 DepthCal zero zero zero = refl
mori
parents: 786
diff changeset
26 DepthCal zero zero (suc n) = ⊥-elim (zero≢suc (DepthCal zero zero (suc n)))
mori
parents: 786
diff changeset
27 DepthCal zero (suc m) zero = ⊥-elim (zero≢suc (DepthCal zero (suc m) zero))
mori
parents: 786
diff changeset
28 DepthCal zero (suc m) (suc n) = ⊥-elim (zero≢suc (DepthCal zero (suc m) (suc n)))
mori
parents: 786
diff changeset
29 DepthCal (suc l) zero zero = ⊥-elim (suc≢zero (DepthCal (suc l) zero zero ))
mori
parents: 786
diff changeset
30 DepthCal (suc l) zero (suc n) with <-cmp (suc l) (suc n)
mori
parents: 786
diff changeset
31 ... | tri< a ¬b ¬c = ⊥-elim (¬b (DepthCal (suc l) zero (suc n) ))
mori
parents: 786
diff changeset
32 ... | tri≈ ¬a b ¬c = cong suc (suc-injective b)
mori
parents: 786
diff changeset
33 ... | tri> ¬a ¬b c = ⊥-elim (¬b (DepthCal (suc l) zero (suc n) ))
mori
parents: 786
diff changeset
34 DepthCal (suc l) (suc m) zero with <-cmp (suc l) (suc m)
mori
parents: 786
diff changeset
35 ... | tri< a ¬b ¬c = ⊥-elim (¬b (DepthCal (suc l) (suc m) zero ))
mori
parents: 786
diff changeset
36 ... | tri≈ ¬a b ¬c = cong suc (suc-injective b)
mori
parents: 786
diff changeset
37 ... | tri> ¬a ¬b c = ⊥-elim (¬b (DepthCal (suc l) (suc m) zero ))
mori
parents: 786
diff changeset
38 DepthCal (suc l) (suc m) (suc n) = cong suc (DepthCal l m n )
mori
parents: 786
diff changeset
39
mori
parents: 786
diff changeset
40
781
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 data bt {n : Level} (A : Set n) : Set n where
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 leaf : bt A
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 node : (key : ℕ) → (value : A) → (left : bt A) → (right : bt A) → bt A
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
44
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 node-key : {n : Level}{A : Set n} → bt A → Maybe ℕ
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 node-key leaf = nothing
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 node-key (node key value tree tree₁) = just key
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
48
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 node-value : {n : Level} {A : Set n} → bt A → Maybe A
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 node-value leaf = nothing
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 node-value (node key value tree tree₁) = just value
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
52
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 bt-depth : {n : Level} {A : Set n} → (tree : bt A) → ℕ
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 bt-depth leaf = 0
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 bt-depth (node key value tree tree₁) = suc (bt-depth tree ⊔ bt-depth tree₁)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 --一番下のleaf =0から戻るたびにsucをしていく
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 treeTest1 : bt ℕ
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 treeTest1 = node 0 0 leaf (node 3 1 (node 2 5 (node 1 7 leaf leaf ) leaf) (node 5 5 leaf leaf))
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
59
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 -- 0 0
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 -- / \
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 -- leaf 3 1
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 -- / \
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 -- 2 5 2
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 -- / \
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 -- 1 leaf 3
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 -- / \
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 -- leaf leaf 4
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
69
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 treeTest2 : bt ℕ
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 treeTest2 = node 3 1 (node 2 5 (node 1 7 leaf leaf ) leaf) (node 5 5 leaf leaf)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
72
807
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
73
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
74
781
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 testdb : ℕ
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 testdb = bt-depth treeTest1 -- 4
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
77
802
mori
parents: 786
diff changeset
78 import Data.Unit --hiding ( _≟_ ; _≤?_ ; _≤_)
781
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
79
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 data treeInvariant {n : Level} {A : Set n} : (tree : bt A) → Set n where
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 t-leaf : treeInvariant leaf
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
82
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 t-single : (key : ℕ) → (value : A) → treeInvariant (node key value leaf leaf)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
84
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 t-left : {key key1 : ℕ} → {value value1 : A} → {t1 t2 : bt A} → key < key1
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 → treeInvariant (node key value t1 t2)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 → treeInvariant (node key1 value1 (node key value t1 t2) leaf)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
88
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 t-right : {key key1 : ℕ} → {value value1 : A} → {t1 t2 : bt A} → key < key1
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
90 → treeInvariant (node key1 value1 t1 t2)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 → treeInvariant (node key value leaf (node key1 value1 t1 t2))
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
92
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 t-node : {key key1 key2 : ℕ}→ {value value1 value2 : A} → {t1 t2 t3 t4 : bt A} → key1 < key → key < key2
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 → treeInvariant (node key1 value1 t1 t2)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 → treeInvariant (node key2 value2 t3 t4)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 → treeInvariant (node key value (node key1 value1 t1 t2) (node key2 value2 t3 t4))
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
97
802
mori
parents: 786
diff changeset
98 {-
mori
parents: 786
diff changeset
99 treekey : {n : Level} {A : Set n} → {key key1 : ℕ} {value value1 : A} {t1 t2 : bt A} → treeInvariant (node key value (node key1 value1 t1 t2) leaf) → key1 < key
mori
parents: 786
diff changeset
100 treekey (t-left x x₁) = x -- normal level
mori
parents: 786
diff changeset
101 --treekey t-single key value = {!!}
mori
parents: 786
diff changeset
102 -}
mori
parents: 786
diff changeset
103
781
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 data stackInvariant {n : Level} {A : Set n} (key : ℕ ) : (top orig : bt A)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 → (stack : List (bt A)) → Set n where
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
106 s-nil : {tree0 : bt A} → stackInvariant key tree0 tree0 (tree0 ∷ [] )
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
107
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 s-right : {key1 : ℕ } → {value : A } → {tree0 t1 t2 : bt A } → {st : List (bt A)}
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 → key1 < key
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
110 → stackInvariant key (node key1 value t1 t2) tree0 st
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 → stackInvariant key t2 tree0 (t2 ∷ st)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
112
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 s-left : {key1 : ℕ } → {value : A } → {tree0 t1 t2 : bt A } → {st : List (bt A)}
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
114 → key < key1
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 → stackInvariant key (node key1 value t1 t2) tree0 st
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 → stackInvariant key t1 tree0 (t1 ∷ st)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
117
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
118 data replacedTree {n : Level } {A : Set n} (key : ℕ) (value : A) : (before after : bt A) → Set n where
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
119 r-leaf : replacedTree key value leaf (node key value leaf leaf)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
120
783
dca93aef5e36 fix findRBT
Mori
parents: 781
diff changeset
121 r-node : {value₁ : A} → {left right : bt A} → replacedTree key value (node key value₁ left right) (node key value left right)
781
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
122
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
123 -- key is the repl's key , so need comp key and key1
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 r-left : {key1 : ℕ} {value1 : A }→ {left right repl : bt A} → key < key1
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
125 → replacedTree key value left repl → replacedTree key value (node key1 value1 left right) (node key1 value1 repl right)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
126
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
127 r-right : {key1 : ℕ } {value1 : A} → {left right repl : bt A} → key1 < key
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
128 → replacedTree key value right repl → replacedTree key value (node key1 value1 left right) (node key1 value1 left repl)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
129
783
dca93aef5e36 fix findRBT
Mori
parents: 781
diff changeset
130
781
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
131 depth-1< : {i j : ℕ} → suc i ≤ suc (i Data.Nat.⊔ j )
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
132 depth-1< {i} {j} = s≤s (m≤m⊔n _ j)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
133 depth-2< : {i j : ℕ} → suc i ≤ suc (j Data.Nat.⊔ i )
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
134 depth-2< {i} {j} = s≤s (m≤n⊔m j i)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
135 depth-3< : {i : ℕ } → suc i ≤ suc (suc i)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
136 depth-3< {zero} = s≤s ( z≤n )
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
137 depth-3< {suc i} = s≤s (depth-3< {i} )
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
138
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
139 treeLeftDown : {n : Level} {A : Set n} {key : ℕ} {value : A} → (tleft tright : bt A)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
140 → treeInvariant (node key value tleft tright)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
141 → treeInvariant tleft
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
142 treeLeftDown leaf leaf (t-single key value) = t-leaf
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
143 treeLeftDown leaf (node key value t1 t2) (t-right x ti) = t-leaf
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
144 treeLeftDown (node key value t t₁) leaf (t-left x ti) = ti
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
145 treeLeftDown (node key value t t₁) (node key₁ value₁ t1 t2) (t-node x x1 ti ti2 ) = ti
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
146
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
147 treeRightDown : {n : Level} {A : Set n} {key : ℕ} {value : A} → (tleft tright : bt A)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
148 → treeInvariant (node key value tleft tright)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
149 → treeInvariant tright
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
150 treeRightDown leaf leaf (t-single key value) = t-leaf
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
151 treeRightDown leaf (node key value t1 t2) (t-right x ti) = ti
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
152
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
153 treeRightDown (node key value t t₁) leaf (t-left x ti) = t-leaf
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
154 treeRightDown (node key value t t₁) (node key₁ value₁ t1 t2) (t-node x x1 ti ti2 ) = ti2
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
155
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
156
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
157 findP : {n m : Level} {A : Set n} {t : Set n} → (tkey : ℕ) → (top orig : bt A) → (st : List (bt A))
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
158 → (treeInvariant top)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
159 → stackInvariant tkey top orig st
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
160 → (next : (newtop : bt A) → (stack : List (bt A))
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
161 → (treeInvariant newtop)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
162 → (stackInvariant tkey newtop orig stack)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
163 → bt-depth newtop < bt-depth top → t)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
164 → (exit : (newtop : bt A) → (stack : List (bt A))
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
165 → (treeInvariant newtop)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
166 → (stackInvariant tkey newtop orig stack) --need new stack ?
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
167 → (newtop ≡ leaf) ∨ (node-key newtop ≡ just tkey) → t)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
168 → t
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
169 findP tkey leaf orig st ti si next exit = exit leaf st ti si (case1 refl)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
170 findP tkey (node key value tl tr) orig st ti si next exit with <-cmp tkey key
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
171 findP tkey top orig st ti si next exit | tri≈ ¬a refl ¬c = exit top st ti si (case2 refl)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
172 findP tkey (node key value tl tr) orig st ti si next exit | tri< a ¬b ¬c = next tl (tl ∷ st) (treeLeftDown tl tr ti) (s-left a si) (s≤s (m≤m⊔n (bt-depth tl) (bt-depth tr)))
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
173
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
174 findP tkey (node key value tl tr) orig st ti si next exit | tri> ¬a ¬b c = next tr (tr ∷ st) (treeRightDown tl tr ti) (s-right c si) (s≤s (m≤n⊔m (bt-depth tl) (bt-depth tr)))
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
175
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
176
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
177 --RBT
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
178 data Color : Set where
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
179 Red : Color
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
180 Black : Color
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
181
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
182 RB→bt : {n : Level} (A : Set n) → (bt (Color ∧ A)) → bt A
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
183 RB→bt {n} A leaf = leaf
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
184 RB→bt {n} A (node key ⟪ C , value ⟫ tr t1) = (node key value (RB→bt A tr) (RB→bt A t1))
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
185
807
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
186 RBTreeTest : bt (Color ∧ ℕ)
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
187 RBTreeTest = node 8 ⟪ Black , 200 ⟫ (node 5 ⟪ Red , 100 ⟫ (_) (_)) (node 10 ⟪ Red , 300 ⟫ (_) (_))
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
188
781
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
189 color : {n : Level} {A : Set n} → (bt (Color ∧ A)) → Color
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
190 color leaf = Black
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
191 color (node key ⟪ C , value ⟫ rb rb₁) = C
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
192
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
193 black-depth : {n : Level} {A : Set n} → (tree : bt (Color ∧ A) ) → ℕ
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
194 black-depth leaf = 0
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
195 black-depth (node key ⟪ Red , value ⟫ t t₁) = black-depth t ⊔ black-depth t₁
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
196 black-depth (node key ⟪ Black , value ⟫ t t₁) = suc (black-depth t ⊔ black-depth t₁ )
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
197
802
mori
parents: 786
diff changeset
198
mori
parents: 786
diff changeset
199
781
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
200 data RBtreeInvariant {n : Level} {A : Set n} : (tree : bt (Color ∧ A)) → Set n where
786
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents: 783
diff changeset
201 rb-leaf : RBtreeInvariant leaf
807
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
202 rb-single : {c : Color} → (key : ℕ) → (value : A) → RBtreeInvariant (node key ⟪ c , value ⟫ leaf leaf)
781
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
203 rb-right-red : {key key₁ : ℕ} → {value value₁ : A} → {t t₁ : bt (Color ∧ A)} → key < key₁
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
204 → black-depth t ≡ black-depth t₁
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
205 → RBtreeInvariant (node key₁ ⟪ Black , value₁ ⟫ t t₁)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
206 → RBtreeInvariant (node key ⟪ Red , value ⟫ leaf (node key₁ ⟪ Black , value₁ ⟫ t t₁))
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
207 rb-right-black : {key key₁ : ℕ} → {value value₁ : A} → {t t₁ : bt (Color ∧ A)} → key < key₁ → {c : Color}
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
208 → black-depth t ≡ black-depth t₁
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
209 → RBtreeInvariant (node key₁ ⟪ c , value₁ ⟫ t t₁)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
210 → RBtreeInvariant (node key ⟪ Black , value ⟫ leaf (node key₁ ⟪ c , value₁ ⟫ t t₁))
807
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
211 rb-left-red : {key key₁ : ℕ} → {value value₁ : A} → {t t₁ : bt (Color ∧ A)} → key₁ < key
781
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
212 → black-depth t ≡ black-depth t₁
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
213 → RBtreeInvariant (node key₁ ⟪ Black , value₁ ⟫ t t₁)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
214 → RBtreeInvariant (node key ⟪ Red , value ⟫ (node key₁ ⟪ Black , value₁ ⟫ t t₁) leaf )
807
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
215 rb-left-black : {key key₁ : ℕ} → {value value₁ : A} → {t t₁ : bt (Color ∧ A)} → {c : Color} → key₁ < key
781
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
216 → black-depth t ≡ black-depth t₁
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
217 → RBtreeInvariant (node key₁ ⟪ c , value₁ ⟫ t t₁)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
218 → RBtreeInvariant (node key ⟪ Black , value ⟫ (node key₁ ⟪ c , value₁ ⟫ t t₁) leaf)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
219 rb-node-red : {key key₁ key₂ : ℕ} → {value value₁ value₂ : A} → {t₁ t₂ t₃ t₄ : bt (Color ∧ A)} → key < key₁ → key₁ < key₂
807
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
220 → black-depth (node key ⟪ Black , value ⟫ t₁ t₂) ≡ black-depth (node key₂ ⟪ Black , value₂ ⟫ t₃ t₄)
781
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
221 → RBtreeInvariant (node key ⟪ Black , value ⟫ t₁ t₂)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
222 → RBtreeInvariant (node key₂ ⟪ Black , value₂ ⟫ t₃ t₄)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
223 → RBtreeInvariant (node key₁ ⟪ Red , value₁ ⟫ (node key ⟪ Black , value ⟫ t₁ t₂) (node key₂ ⟪ Black , value₂ ⟫ t₃ t₄))
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
224 rb-node-black : {key key₁ key₂ : ℕ} → {value value₁ value₂ : A} → {t₁ t₂ t₃ t₄ : bt (Color ∧ A)} → key < key₁ → key₁ < key₂
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
225 → {c c₁ : Color}
807
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
226 → black-depth (node key ⟪ c , value ⟫ t₁ t₂) ≡ black-depth (node key₂ ⟪ c₁ , value₂ ⟫ t₃ t₄)
781
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
227 → RBtreeInvariant (node key ⟪ c , value ⟫ t₁ t₂)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
228 → RBtreeInvariant (node key₂ ⟪ c₁ , value₂ ⟫ t₃ t₄)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
229 → RBtreeInvariant (node key₁ ⟪ Black , value₁ ⟫ (node key ⟪ c , value ⟫ t₁ t₂) (node key₂ ⟪ c₁ , value₂ ⟫ t₃ t₄))
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
230
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
231
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
232 data rotatedTree {n : Level} {A : Set n} : (before after : bt A) → Set n where
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
233 rtt-node : {t : bt A } → rotatedTree t t
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
234 -- a b
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
235 -- b c d a
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
236 -- d e e c
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
237 --
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
238 rtt-right : {ka kb kc kd ke : ℕ} {va vb vc vd ve : A} → {c d e c1 d1 e1 : bt A} → {ctl ctr dtl dtr etl etr : bt A}
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
239 --kd < kb < ke < ka< kc
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
240 → {ctl1 ctr1 dtl1 dtr1 etl1 etr1 : bt A}
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
241 → kd < kb → kb < ke → ke < ka → ka < kc
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
242 → rotatedTree (node ke ve etl etr) (node ke ve etl1 etr1)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
243 → rotatedTree (node kd vd dtl dtr) (node kd vd dtl1 dtr1)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
244 → rotatedTree (node kc vc ctl ctr) (node kc vc ctl1 ctr1)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
245 → rotatedTree (node ka va (node kb vb (node kd vd dtl dtr) (node ke ve etl etr)) (node kc vc ctl ctr))
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
246 (node kb vb (node kd vd dtl1 dtr1) (node ka va (node ke ve etl1 etr1) (node kc vc ctl1 ctr1)))
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
247
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
248 rtt-left : {ka kb kc kd ke : ℕ} {va vb vc vd ve : A} → {c d e c1 d1 e1 : bt A} → {ctl ctr dtl dtr etl etr : bt A}
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
249 --kd < kb < ke < ka< kc
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
250 → {ctl1 ctr1 dtl1 dtr1 etl1 etr1 : bt A} -- after child
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
251 → kd < kb → kb < ke → ke < ka → ka < kc
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
252 → rotatedTree (node ke ve etl etr) (node ke ve etl1 etr1)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
253 → rotatedTree (node kd vd dtl dtr) (node kd vd dtl1 dtr1)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
254 → rotatedTree (node kc vc ctl ctr) (node kc vc ctl1 ctr1)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
255 → rotatedTree (node kb vb (node kd vd dtl1 dtr1) (node ka va (node ke ve etl1 etr1) (node kc vc ctl1 ctr1)))
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
256 (node ka va (node kb vb (node kd vd dtl dtr) (node ke ve etl etr)) (node kc vc ctl ctr))
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
257
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
258 RBtreeLeftDown : {n : Level} {A : Set n} {key : ℕ} {value : A} {c : Color}
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
259 → (tleft tright : bt (Color ∧ A))
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
260 → RBtreeInvariant (node key ⟪ c , value ⟫ tleft tright)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
261 → RBtreeInvariant tleft
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
262 RBtreeLeftDown leaf leaf (rb-single k1 v) = rb-leaf
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
263 RBtreeLeftDown leaf (node key ⟪ Black , value ⟫ t1 t2 ) (rb-right-red x bde rbti) = rb-leaf
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
264 RBtreeLeftDown leaf (node key ⟪ Black , value ⟫ t1 t2 ) (rb-right-black x bde rbti) = rb-leaf
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
265 RBtreeLeftDown leaf (node key ⟪ Red , value ⟫ t1 t2 ) (rb-right-black x bde rbti)= rb-leaf
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
266 RBtreeLeftDown (node key ⟪ Black , value ⟫ t t₁) leaf (rb-left-black x bde ti) = ti
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
267 RBtreeLeftDown (node key ⟪ Black , value ⟫ t t₁) leaf (rb-left-red x bde ti)= ti
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
268 RBtreeLeftDown (node key ⟪ Red , value ⟫ t t₁) leaf (rb-left-black x bde ti) = ti
807
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
269 RBtreeLeftDown (node key ⟪ Black , value ⟫ t t₁) (node key₁ ⟪ Black , value1 ⟫ t1 t2) (rb-node-black x x1 bde til tir) = til --x x1 bde1 til bde2 tir) = til
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
270 RBtreeLeftDown (node key ⟪ Black , value ⟫ t t₁) (node key₁ ⟪ Black , value1 ⟫ t1 t2) (rb-node-red x x1 bde1 til tir) = til
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
271 RBtreeLeftDown (node key ⟪ Red , value ⟫ t t₁) (node key₁ ⟪ Black , value1 ⟫ t1 t2) (rb-node-black x x1 bde til tir) = til
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
272 RBtreeLeftDown (node key ⟪ Black , value ⟫ t t₁) (node key₁ ⟪ Red , value1 ⟫ t1 t2) (rb-node-black x x1 bde til tir) = til
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
273 RBtreeLeftDown (node key ⟪ Red , value ⟫ t t₁) (node key₁ ⟪ Red , value1 ⟫ t1 t2) (rb-node-black x x1 bde til tir) = til
781
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
274
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
275 RBtreeRightDown : {n : Level} {A : Set n} { key : ℕ} {value : A} {c : Color}
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
276 → (tleft tright : bt (Color ∧ A))
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
277 → RBtreeInvariant (node key ⟪ c , value ⟫ tleft tright)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
278 → RBtreeInvariant tright
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
279 RBtreeRightDown leaf leaf (rb-single k1 v1 ) = rb-leaf
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
280 RBtreeRightDown leaf (node key ⟪ Black , value ⟫ t1 t2 ) (rb-right-red x bde rbti) = rbti
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
281 RBtreeRightDown leaf (node key ⟪ Black , value ⟫ t1 t2 ) (rb-right-black x bde rbti) = rbti
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
282 RBtreeRightDown leaf (node key ⟪ Red , value ⟫ t1 t2 ) (rb-right-black x bde rbti)= rbti
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
283 RBtreeRightDown (node key ⟪ Black , value ⟫ t t₁) leaf (rb-left-black x bde ti) = rb-leaf
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
284 RBtreeRightDown (node key ⟪ Black , value ⟫ t t₁) leaf (rb-left-red x bde ti) = rb-leaf
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
285 RBtreeRightDown (node key ⟪ Red , value ⟫ t t₁) leaf (rb-left-black x bde ti) = rb-leaf
807
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
286 RBtreeRightDown (node key ⟪ Black , value ⟫ t t₁) (node key₁ ⟪ Black , value1 ⟫ t1 t2) (rb-node-black x x1 bde til tir ) = tir --x x1 bde1 til bde2 tir) = tir
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
287 RBtreeRightDown (node key ⟪ Black , value ⟫ t t₁) (node key₁ ⟪ Black , value1 ⟫ t1 t2) (rb-node-red x x1 bde til tir) = tir
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
288 RBtreeRightDown (node key ⟪ Red , value ⟫ t t₁) (node key₁ ⟪ Black , value1 ⟫ t1 t2) (rb-node-black x x1 bde til tir) = tir
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
289 RBtreeRightDown (node key ⟪ Black , value ⟫ t t₁) (node key₁ ⟪ Red , value1 ⟫ t1 t2) (rb-node-black x x1 bde til tir) = tir
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
290 RBtreeRightDown (node key ⟪ Red , value ⟫ t t₁) (node key₁ ⟪ Red , value1 ⟫ t1 t2) (rb-node-black x x1 bde til tir) = tir
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
291
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
292
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
293 blackdepth≡ : {n : Level } {A : Set n} → {C : Color} {key key1 : ℕ} {value value1 : A} → (tree1 tree2 : bt (Color ∧ A))
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
294 → RBtreeInvariant tree1
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
295 → RBtreeInvariant tree2
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
296 → RBtreeInvariant (node key ⟪ C , value ⟫ tree1 tree2)
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
297 → black-depth tree1 ≡ black-depth tree2
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
298 blackdepth≡ leaf leaf ri1 ri2 rip = refl
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
299 blackdepth≡ {n} {A} leaf (node key .(⟪ Black , _ ⟫) t2 t3) ri1 ri2 (rb-right-red x x₁ rip) = DepthCal (black-depth {n} {A} leaf) (black-depth (node key ⟪ Black , _ ⟫ t2 t3)) 0
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
300 blackdepth≡ {n} {A} leaf (node key .(⟪ _ , _ ⟫) t2 t3) ri1 ri2 (rb-right-black x x₁ rip) = DepthCal (black-depth {n} {A} leaf) (black-depth (node key ⟪ _ , _ ⟫ t2 t3) ) (black-depth (node key ⟪ _ , _ ⟫ t2 t3))
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
301 blackdepth≡ {n} {A} (node key .(⟪ Black , _ ⟫) t1 t3) leaf ri1 ri2 (rb-left-red x x₁ rip) = DepthCal (black-depth (node key ⟪ Black , _ ⟫ t1 t3)) (black-depth {n} {A} leaf) 0
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
302 blackdepth≡ {n} {A} (node key .(⟪ _ , _ ⟫) t1 t3) leaf ri1 ri2 (rb-left-black x x₁ rip) = DepthCal (black-depth (node key ⟪ _ , _ ⟫ t1 t3)) (black-depth {n} {A} leaf) 0
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
303 blackdepth≡ (node key .(⟪ Black , _ ⟫) t1 t3) (node key₁ .(⟪ Black , _ ⟫) t2 t4) ri1 ri2 (rb-node-red x x₁ x₂ rip rip₁) = DepthCal (black-depth (node key ⟪ Black , _ ⟫ t1 t3)) (black-depth (node key₁ ⟪ Black , _ ⟫ t2 t4)) 0
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
304 blackdepth≡ (node key .(⟪ _ , _ ⟫) t1 t3) (node key₁ .(⟪ _ , _ ⟫) t2 t4) ri1 ri2 (rb-node-black x x₁ x₂ rip rip₁) = DepthCal (black-depth (node key ⟪ _ , _ ⟫ t1 t3)) ( black-depth (node key₁ ⟪ _ , _ ⟫ t2 t4)) (black-depth (node key₁ (⟪ _ , _ ⟫) t2 t4))
781
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
305
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
306 findRBT : {n m : Level} {A : Set n} {t : Set m} → (key : ℕ) → (tree tree0 : bt (Color ∧ A) )
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
307 → (stack : List (bt (Color ∧ A)))
807
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
308 → RBtreeInvariant tree ∧ stackInvariant key tree tree0 stack
781
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
309 → (next : (tree1 : bt (Color ∧ A) ) → (stack : List (bt (Color ∧ A)))
807
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
310 → RBtreeInvariant tree1 ∧ stackInvariant key tree1 tree0 stack
781
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
311 → bt-depth tree1 < bt-depth tree → t )
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
312 → (exit : (tree1 : bt (Color ∧ A)) → (stack : List (bt (Color ∧ A)))
807
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
313 → RBtreeInvariant tree1 ∧ stackInvariant key tree1 tree0 stack
781
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
314 → (tree1 ≡ leaf ) ∨ ( node-key tree1 ≡ just key ) → t ) → t
807
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
315 findRBT key leaf tree0 stack inv next exit = exit leaf stack inv (case1 refl)
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
316 findRBT key (node key₁ value left right) tree0 stack inv next exit with <-cmp key key₁
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
317 findRBT key (node key₁ value left right) tree0 stack inv next exit | tri< a ¬b ¬c
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
318 = next left (left ∷ stack) ⟪ RBtreeLeftDown left right (_∧_.proj1 inv) , s-left a (_∧_.proj2 inv) ⟫ depth-1<
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
319 findRBT key n tree0 stack inv _ exit | tri≈ ¬a refl ¬c = exit n stack inv (case2 refl)
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
320 findRBT key (node key₁ value left right) tree0 stack inv next exit | tri> ¬a ¬b c
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
321 = next right (right ∷ stack) ⟪ RBtreeRightDown left right (_∧_.proj1 inv) , s-right c (_∧_.proj2 inv) ⟫ depth-2<
781
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
322
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
323 child-replaced : {n : Level} {A : Set n} (key : ℕ) (tree : bt A) → bt A
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
324 child-replaced key leaf = leaf
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
325 child-replaced key (node key₁ value left right) with <-cmp key key₁
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
326 ... | tri< a ¬b ¬c = left
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
327 ... | tri≈ ¬a b ¬c = node key₁ value left right
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
328 ... | tri> ¬a ¬b c = right
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
329
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
330
807
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
331 lemma3 : {i j : ℕ} → 0 ≡ i → j < i → ⊥
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
332 lemma3 refl ()
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
333 lemma5 : {i j : ℕ} → i < 1 → j < i → ⊥
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
334 lemma5 (s≤s z≤n) ()
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
335 ¬x<x : {x : ℕ} → ¬ (x < x)
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
336 ¬x<x (s≤s lt) = ¬x<x lt
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
337 nat-≤> : { x y : ℕ } → x ≤ y → y < x → ⊥
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
338 nat-≤> (s≤s x<y) (s≤s y<x) = nat-≤> x<y y<x
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
339 nat-<> : { x y : ℕ } → x < y → y < x → ⊥
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
340 nat-<> (s≤s x<y) (s≤s y<x) = nat-<> x<y y<x
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
341
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
342 TerminatingLoopS : {l m : Level} {t : Set l} (Index : Set m ) → {Invraiant : Index → Set m } → ( reduce : Index → ℕ)
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
343 → (r : Index) → (p : Invraiant r)
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
344 → (loop : (r : Index) → Invraiant r → (next : (r1 : Index) → Invraiant r1 → reduce r1 < reduce r → t ) → t) → t
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
345 TerminatingLoopS {_} {_} {t} Index {Invraiant} reduce r p loop with <-cmp 0 (reduce r)
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
346 ... | tri≈ ¬a b ¬c = loop r p (λ r1 p1 lt → ⊥-elim (lemma3 b lt) )
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
347 ... | tri< a ¬b ¬c = loop r p (λ r1 p1 lt1 → TerminatingLoop1 (reduce r) r r1 (m≤n⇒m≤1+n lt1) p1 lt1 ) where
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
348 TerminatingLoop1 : (j : ℕ) → (r r1 : Index) → reduce r1 < suc j → Invraiant r1 → reduce r1 < reduce r → t
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
349 TerminatingLoop1 zero r r1 n≤j p1 lt = loop r1 p1 (λ r2 p1 lt1 → ⊥-elim (lemma5 n≤j lt1))
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
350 TerminatingLoop1 (suc j) r r1 n≤j p1 lt with <-cmp (reduce r1) (suc j)
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
351 ... | tri< a ¬b ¬c = TerminatingLoop1 j r r1 a p1 lt
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
352 ... | tri≈ ¬a b ¬c = loop r1 p1 (λ r2 p2 lt1 → TerminatingLoop1 j r1 r2 (subst (λ k → reduce r2 < k ) b lt1 ) p2 lt1 )
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
353 ... | tri> ¬a ¬b c = ⊥-elim ( nat-≤> c n≤j )
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
354 open _∧_
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
355 --findRBTree : (exit : )
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
356 add< : { i : ℕ } (j : ℕ ) → i < suc i + j
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
357 add< {i} j = begin
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
358 suc i ≤⟨ m≤m+n (suc i) j ⟩
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
359 suc i + j ∎ where open ≤-Reasoning
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
360
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
361 findTest : {n m : Level} {A : Set n } {t : Set m }
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
362 → (key : ℕ)
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
363 → (tree0 : bt (Color ∧ A))
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
364 → RBtreeInvariant tree0
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
365 → (exit : (tree1 : bt (Color ∧ A))
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
366 → (stack : List (bt (Color ∧ A)))
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
367 → RBtreeInvariant tree1 ∧ stackInvariant key tree1 tree0 stack
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
368 → (tree1 ≡ leaf ) ∨ ( node-key tree1 ≡ just key ) → t ) → t
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
369 findTest {n} {m} {A} {t} k tr0 rb0 exit = TerminatingLoopS (bt (Color ∧ A) ∧ List (bt (Color ∧ A))) {λ p → RBtreeInvariant (proj1 p) ∧ stackInvariant k (proj1 p) tr0 (proj2 p) } (λ p → bt-depth (proj1 p)) ⟪ tr0 , tr0 ∷ [] ⟫ ⟪ rb0 , s-nil ⟫
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
370 $ λ p P loop → findRBT k (proj1 p) tr0 (proj2 p) P (λ t s P1 lt → loop ⟪ t , s ⟫ P1 lt )
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
371 $ λ tr1 st P2 O → exit tr1 st P2 O
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
372
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
373 testRBTree0 : bt (Color ∧ ℕ)
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
374 testRBTree0 = node 8 ⟪ Black , 800 ⟫ (node 5 ⟪ Red , 500 ⟫ (node 2 ⟪ Black , 200 ⟫ leaf leaf) (node 6 ⟪ Black , 600 ⟫ leaf leaf)) (node 10 ⟪ Red , 1000 ⟫ (leaf) (node 15 ⟪ Black , 1500 ⟫ (node 14 ⟪ Red , 1400 ⟫ leaf leaf) leaf))
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
375 testRBTree : bt (Color ∧ ℕ)
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
376 testRBTree = node 10 ⟪ Red , 1000 ⟫ _ _
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
377
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
378 record result {n : Level} {A : Set n} {key : ℕ} {tree0 : bt (Color ∧ A)} : Set n where
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
379 field
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
380 tree : bt (Color ∧ A)
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
381 stack : List (bt (Color ∧ A))
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
382 ti : RBtreeInvariant tree
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
383 si : stackInvariant key tree tree0 stack
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
384
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
385 testRBI0 : RBtreeInvariant testRBTree0
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
386 testRBI0 = rb-node-black (add< 2) (add< 1) refl (rb-node-red (add< 2) (add< 0) refl (rb-single 2 200) (rb-single 6 600)) (rb-right-red (add< 4) refl (rb-left-black (add< 0) refl (rb-single 14 1400) ))
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
387
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
388 findRBTreeTest : result
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
389 findRBTreeTest = findTest 14 testRBTree0 testRBI0
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
390 $ λ tr s P O → (record {tree = tr ; stack = s ; ti = (proj1 P) ; si = (proj2 P)})
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
391
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
392
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
393 {-
781
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
394 data replacedRBTree {n : Level} {A : Set n} (key : ℕ) (value : A) : (before after : bt (Color ∧ A) ) → Set n where
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
395 rbr-leaf : {ca cb : Color} → replacedRBTree key value leaf (node key ⟪ cb , value ⟫ leaf leaf)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
396 rbr-node : {value₁ : A} → {ca cb : Color } → {t t₁ : bt (Color ∧ A)}
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
397 → replacedRBTree key value (node key ⟪ ca , value₁ ⟫ t t₁) (node key ⟪ cb , value ⟫ t t₁)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
398 rbr-right : {k : ℕ } {v1 : A} → {ca cb : Color} → {t t1 t2 : bt (Color ∧ A)}
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
399 → k < key → replacedRBTree key value t2 t → replacedRBTree key value (node k ⟪ ca , v1 ⟫ t1 t2) (node k ⟪ cb , v1 ⟫ t1 t)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
400 rbr-left : {k : ℕ } {v1 : A} → {ca cb : Color} → {t t1 t2 : bt (Color ∧ A)}
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
401 → k < key → replacedRBTree key value t1 t → replacedRBTree key value (node k ⟪ ca , v1 ⟫ t1 t2) (node k ⟪ cb , v1 ⟫ t t2)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
402
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
403 data ParentGrand {n : Level} {A : Set n} (self : bt A) : (parent uncle grand : bt A) → Set n where
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
404 s2-s1p2 : {kp kg : ℕ} {vp vg : A} → {n1 n2 : bt A} {parent grand : bt A }
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
405 → parent ≡ node kp vp self n1 → grand ≡ node kg vg parent n2 → ParentGrand self parent n2 grand
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
406 s2-1sp2 : {kp kg : ℕ} {vp vg : A} → {n1 n2 : bt A} {parent grand : bt A }
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
407 → parent ≡ node kp vp n1 self → grand ≡ node kg vg parent n2 → ParentGrand self parent n2 grand
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
408 s2-s12p : {kp kg : ℕ} {vp vg : A} → {n1 n2 : bt A} {parent grand : bt A }
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
409 → parent ≡ node kp vp self n1 → grand ≡ node kg vg n2 parent → ParentGrand self parent n2 grand
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
410 s2-1s2p : {kp kg : ℕ} {vp vg : A} → {n1 n2 : bt A} {parent grand : bt A }
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
411 → parent ≡ node kp vp n1 self → grand ≡ node kg vg n2 parent → ParentGrand self parent n2 grand
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
412
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
413 record PG {n : Level } (A : Set n) (self : bt A) (stack : List (bt A)) : Set n where
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
414 field
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
415 parent grand uncle : bt A
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
416 pg : ParentGrand self parent uncle grand
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
417 rest : List (bt A)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
418 stack=gp : stack ≡ ( self ∷ parent ∷ grand ∷ rest )
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
419
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
420 record RBI {n : Level} {A : Set n} (key : ℕ) (value : A) (orig repl : bt (Color ∧ A) ) (stack : List (bt (Color ∧ A))) : Set n where
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
421 field
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
422 od d rd : ℕ
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
423 tree rot : bt (Color ∧ A)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
424 origti : treeInvariant orig
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
425 origrb : RBtreeInvariant orig
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
426 treerb : RBtreeInvariant tree
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
427 replrb : RBtreeInvariant repl
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
428 d=rd : ( d ≡ rd ) ∨ ((suc d ≡ rd ) ∧ (color tree ≡ Red))
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
429 si : stackInvariant key tree orig stack
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
430 rotated : rotatedTree tree rot
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
431 ri : replacedRBTree key value (child-replaced key rot ) repl
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
432
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
433
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
434 rbi-case1 : {n : Level} {A : Set n} → {key : ℕ} → {value : A} → (parent repl : bt (Color ∧ A) )
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
435 → RBtreeInvariant parent
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
436 → RBtreeInvariant repl
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
437 → {left right : bt (Color ∧ A)} → parent ≡ node key ⟪ Black , value ⟫ left right
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
438 → (color right ≡ Red → RBtreeInvariant (node key ⟪ Black , value ⟫ left repl ) )
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
439 ∧ (color left ≡ Red → RBtreeInvariant (node key ⟪ Black , value ⟫ repl right ) )
783
dca93aef5e36 fix findRBT
Mori
parents: 781
diff changeset
440 rbi-case1 {n} {A} {key} parent repl rbtip rbtir x = ⟪ {!!} , {!!} ⟫
781
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
441
802
mori
parents: 786
diff changeset
442 blackdepth≡ : {n : Level } {A : Set n} → {C : Color} {key key1 : ℕ} {value value1 : A} → (tree1 tree2 : bt (Color ∧ A))
781
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
443 → RBtreeInvariant tree1
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
444 → RBtreeInvariant tree2
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
445 → RBtreeInvariant (node key ⟪ C , value ⟫ tree1 tree2)
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
446 → black-depth tree1 ≡ black-depth tree2
802
mori
parents: 786
diff changeset
447 blackdepth≡ leaf leaf ri1 ri2 rip = refl
mori
parents: 786
diff changeset
448 blackdepth≡ {n} {A} leaf (node key .(⟪ Black , _ ⟫) t2 t3) ri1 ri2 (rb-right-red x x₁ rip) = DepthCal (black-depth {n} {A} leaf) (black-depth (node key ⟪ Black , _ ⟫ t2 t3)) 0
mori
parents: 786
diff changeset
449 blackdepth≡ {n} {A} leaf (node key .(⟪ _ , _ ⟫) t2 t3) ri1 ri2 (rb-right-black x x₁ rip) = DepthCal (black-depth {n} {A} leaf) (black-depth (node key ⟪ _ , _ ⟫ t2 t3) ) (black-depth (node key ⟪ _ , _ ⟫ t2 t3) )
mori
parents: 786
diff changeset
450 blackdepth≡ {n} {A} (node key .(⟪ Black , _ ⟫) t1 t3) leaf ri1 ri2 (rb-left-red x x₁ rip) = DepthCal (black-depth (node key ⟪ Black , _ ⟫ t1 t3)) (black-depth {n} {A} leaf) 0
mori
parents: 786
diff changeset
451 blackdepth≡ {n} {A} (node key .(⟪ _ , _ ⟫) t1 t3) leaf ri1 ri2 (rb-left-black x x₁ rip) = DepthCal (black-depth (node key ⟪ _ , _ ⟫ t1 t3)) (black-depth {n} {A} leaf) 0
mori
parents: 786
diff changeset
452 blackdepth≡ (node key .(⟪ Black , _ ⟫) t1 t3) (node key₁ .(⟪ Black , _ ⟫) t2 t4) ri1 ri2 (rb-node-red x x₁ x₂ rip x₃ rip₁) = DepthCal (black-depth (node key ⟪ Black , _ ⟫ t1 t3)) (black-depth (node key₁ ⟪ Black , _ ⟫ t2 t4)) 0
mori
parents: 786
diff changeset
453 blackdepth≡ (node key .(⟪ _ , _ ⟫) t1 t3) (node key₁ .(⟪ _ , _ ⟫) t2 t4) ri1 ri2 (rb-node-black x x₁ x₂ rip x₃ rip₁) = DepthCal (black-depth (node key ⟪ _ , _ ⟫ t1 t3)) ( black-depth (node key₁ ⟪ _ , _ ⟫ t2 t4)) (black-depth (node key₁ (⟪ _ , _ ⟫) t2 t4))
803
Moririn
parents: 802
diff changeset
454
802
mori
parents: 786
diff changeset
455 rb08 : {n : Level } {A : Set n}{key key1 : ℕ} {value value1 : A} {c c1 : Color} {t₁ t₂ t₃ t₄ : bt (Color ∧ A)}
mori
parents: 786
diff changeset
456 → black-depth (node key ⟪ c , value ⟫ t₁ t₂) ≡ black-depth (node key1 ⟪ c1 , value1 ⟫ t₃ t₄)
mori
parents: 786
diff changeset
457 rb08 = {!!}
783
dca93aef5e36 fix findRBT
Mori
parents: 781
diff changeset
458
dca93aef5e36 fix findRBT
Mori
parents: 781
diff changeset
459 {-
dca93aef5e36 fix findRBT
Mori
parents: 781
diff changeset
460 rbi-case1 : {n : Level} {A : Set n} → {key : ℕ} → {value : A} → (parent repl : bt (Color ∧ A) )
dca93aef5e36 fix findRBT
Mori
parents: 781
diff changeset
461 → RBtreeInvariant parent
dca93aef5e36 fix findRBT
Mori
parents: 781
diff changeset
462 → RBtreeInvariant repl → (left right : bt (Color ∧ A)) → parent ≡ node key ⟪ Black , value ⟫ left right
781
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
463 → RBtreeInvariant left
Moririn < Moririn@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
464 → RBtreeInvariant right
783
dca93aef5e36 fix findRBT
Mori
parents: 781
diff changeset
465 → (color right ≡ Red → RBtreeInvariant (node key ⟪ Black , value ⟫ left repl ) ) ∧ (color left ≡ Red → RBtreeInvariant (node key ⟪ Black , value ⟫ repl right ) )
dca93aef5e36 fix findRBT
Mori
parents: 781
diff changeset
466
dca93aef5e36 fix findRBT
Mori
parents: 781
diff changeset
467 rbi-case1 {n} {A} {key} (node key1 ⟪ Black , value1 ⟫ l r) leaf rbip rbir (node key3 ⟪ Red , val3 ⟫ la ra) (node key4-- ⟪ Red , val4 ⟫ lb rb) pa li ri = {!!}
dca93aef5e36 fix findRBT
Mori
parents: 781
diff changeset
468 -}
807
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
469
858655384dea Change RBtreeInvariant
Moririn
parents: 803
diff changeset
470 -}