annotate redBlackTreeTest.agda @ 573:8777baeb90f8

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 06 May 2018 19:35:38 +0900
parents eb75d9971451
children 70b09cbefd45
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
537
fffeaf0b0024 add stackTest redBlackTreeTest
ryokka
parents:
diff changeset
1 module redBlackTreeTest where
fffeaf0b0024 add stackTest redBlackTreeTest
ryokka
parents:
diff changeset
2
fffeaf0b0024 add stackTest redBlackTreeTest
ryokka
parents:
diff changeset
3 open import RedBlackTree
fffeaf0b0024 add stackTest redBlackTreeTest
ryokka
parents:
diff changeset
4 open import stack
554
988c12d7f887 use another nat comparator
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 553
diff changeset
5 open import Level hiding (zero) renaming ( suc to succ )
537
fffeaf0b0024 add stackTest redBlackTreeTest
ryokka
parents:
diff changeset
6
553
7d9af1d4b5af add compareTri
ryokka
parents: 552
diff changeset
7 open import Data.Empty
7d9af1d4b5af add compareTri
ryokka
parents: 552
diff changeset
8
537
fffeaf0b0024 add stackTest redBlackTreeTest
ryokka
parents:
diff changeset
9 open import Data.Nat
553
7d9af1d4b5af add compareTri
ryokka
parents: 552
diff changeset
10 open import Relation.Nullary
537
fffeaf0b0024 add stackTest redBlackTreeTest
ryokka
parents:
diff changeset
11
564
40ab3d39e49d using strict total order
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 563
diff changeset
12
40ab3d39e49d using strict total order
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 563
diff changeset
13 open import Algebra
40ab3d39e49d using strict total order
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 563
diff changeset
14 open import Data.Nat.Properties as NatProp
40ab3d39e49d using strict total order
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 563
diff changeset
15
537
fffeaf0b0024 add stackTest redBlackTreeTest
ryokka
parents:
diff changeset
16 open Tree
fffeaf0b0024 add stackTest redBlackTreeTest
ryokka
parents:
diff changeset
17 open Node
fffeaf0b0024 add stackTest redBlackTreeTest
ryokka
parents:
diff changeset
18 open RedBlackTree.RedBlackTree
fffeaf0b0024 add stackTest redBlackTreeTest
ryokka
parents:
diff changeset
19 open Stack
fffeaf0b0024 add stackTest redBlackTreeTest
ryokka
parents:
diff changeset
20
fffeaf0b0024 add stackTest redBlackTreeTest
ryokka
parents:
diff changeset
21 -- tests
fffeaf0b0024 add stackTest redBlackTreeTest
ryokka
parents:
diff changeset
22
562
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
23 putTree1 : {n m : Level } {a k : Set n} {t : Set m} → RedBlackTree {n} {m} {t} a k → k → a → (RedBlackTree {n} {m} {t} a k → t) → t
543
1595dd84fc3e fix use SingleLinkedStack
ryokka
parents: 542
diff changeset
24 putTree1 {n} {m} {a} {k} {t} tree k1 value next with (root tree)
537
fffeaf0b0024 add stackTest redBlackTreeTest
ryokka
parents:
diff changeset
25 ... | Nothing = next (record tree {root = Just (leafNode k1 value) })
562
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
26 ... | Just n2 = clearSingleLinkedStack (nodeStack tree) (λ s → findNode tree s (leafNode k1 value) n2 (λ tree1 s n1 → replaceNode tree1 s n1 next))
537
fffeaf0b0024 add stackTest redBlackTreeTest
ryokka
parents:
diff changeset
27
fffeaf0b0024 add stackTest redBlackTreeTest
ryokka
parents:
diff changeset
28 open import Relation.Binary.PropositionalEquality
fffeaf0b0024 add stackTest redBlackTreeTest
ryokka
parents:
diff changeset
29 open import Relation.Binary.Core
fffeaf0b0024 add stackTest redBlackTreeTest
ryokka
parents:
diff changeset
30 open import Function
fffeaf0b0024 add stackTest redBlackTreeTest
ryokka
parents:
diff changeset
31
fffeaf0b0024 add stackTest redBlackTreeTest
ryokka
parents:
diff changeset
32
562
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
33 check1 : {m : Level } (n : Maybe (Node ℕ ℕ)) → ℕ → Bool {m}
537
fffeaf0b0024 add stackTest redBlackTreeTest
ryokka
parents:
diff changeset
34 check1 Nothing _ = False
fffeaf0b0024 add stackTest redBlackTreeTest
ryokka
parents:
diff changeset
35 check1 (Just n) x with Data.Nat.compare (value n) x
fffeaf0b0024 add stackTest redBlackTreeTest
ryokka
parents:
diff changeset
36 ... | equal _ = True
fffeaf0b0024 add stackTest redBlackTreeTest
ryokka
parents:
diff changeset
37 ... | _ = False
fffeaf0b0024 add stackTest redBlackTreeTest
ryokka
parents:
diff changeset
38
562
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
39 check2 : {m : Level } (n : Maybe (Node ℕ ℕ)) → ℕ → Bool {m}
549
bc3208d510cd add some
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 548
diff changeset
40 check2 Nothing _ = False
bc3208d510cd add some
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 548
diff changeset
41 check2 (Just n) x with compare2 (value n) x
bc3208d510cd add some
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 548
diff changeset
42 ... | EQ = True
bc3208d510cd add some
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 548
diff changeset
43 ... | _ = False
bc3208d510cd add some
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 548
diff changeset
44
562
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
45 test1 : putTree1 {_} {_} {ℕ} {ℕ} (createEmptyRedBlackTreeℕ ℕ {Set Level.zero} ) 1 1 ( λ t → getRedBlackTree t 1 ( λ t x → check2 x 1 ≡ True ))
537
fffeaf0b0024 add stackTest redBlackTreeTest
ryokka
parents:
diff changeset
46 test1 = refl
fffeaf0b0024 add stackTest redBlackTreeTest
ryokka
parents:
diff changeset
47
fffeaf0b0024 add stackTest redBlackTreeTest
ryokka
parents:
diff changeset
48 test2 : putTree1 {_} {_} {ℕ} {ℕ} (createEmptyRedBlackTreeℕ ℕ {Set Level.zero} ) 1 1 (
562
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
49 λ t → putTree1 t 2 2 (
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
50 λ t → getRedBlackTree t 1 (
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
51 λ t x → check2 x 1 ≡ True )))
537
fffeaf0b0024 add stackTest redBlackTreeTest
ryokka
parents:
diff changeset
52 test2 = refl
fffeaf0b0024 add stackTest redBlackTreeTest
ryokka
parents:
diff changeset
53
545
b180dc78abcf add someTest
ryokka
parents: 544
diff changeset
54 open ≡-Reasoning
542
ee65e69c9b62 puttree1 act
ryokka
parents: 541
diff changeset
55 test3 : putTree1 {_} {_} {ℕ} {ℕ} (createEmptyRedBlackTreeℕ ℕ {Set Level.zero}) 1 1
562
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
56 $ λ t → putTree1 t 2 2
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
57 $ λ t → putTree1 t 3 3
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
58 $ λ t → putTree1 t 4 4
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
59 $ λ t → getRedBlackTree t 1
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
60 $ λ t x → check2 x 1 ≡ True
545
b180dc78abcf add someTest
ryokka
parents: 544
diff changeset
61 test3 = begin
549
bc3208d510cd add some
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 548
diff changeset
62 check2 (Just (record {key = 1 ; value = 1 ; color = Black ; left = Nothing ; right = Just (leafNode 2 2)})) 1
545
b180dc78abcf add someTest
ryokka
parents: 544
diff changeset
63 ≡⟨ refl ⟩
b180dc78abcf add someTest
ryokka
parents: 544
diff changeset
64 True
b180dc78abcf add someTest
ryokka
parents: 544
diff changeset
65
542
ee65e69c9b62 puttree1 act
ryokka
parents: 541
diff changeset
66
ee65e69c9b62 puttree1 act
ryokka
parents: 541
diff changeset
67 test31 = putTree1 {_} {_} {ℕ} {ℕ} (createEmptyRedBlackTreeℕ ℕ ) 1 1
562
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
68 $ λ t → putTree1 t 2 2
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
69 $ λ t → putTree1 t 3 3
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
70 $ λ t → putTree1 t 4 4
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
71 $ λ t → getRedBlackTree t 4
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
72 $ λ t x → x
538
5c001e8ba0d5 add redBlackTreeTest.agda test5,test51. but not work
ryokka
parents: 537
diff changeset
73
540
6a4830c5a514 testing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 539
diff changeset
74 -- test5 : Maybe (Node ℕ ℕ)
541
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 540
diff changeset
75 test5 = putTree1 {_} {_} {ℕ} {ℕ} (createEmptyRedBlackTreeℕ ℕ ) 4 4
562
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
76 $ λ t → putTree1 t 6 6
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
77 $ λ t0 → clearSingleLinkedStack (nodeStack t0)
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
78 $ λ s → findNode1 t0 s (leafNode 3 3) ( root t0 )
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
79 $ λ t1 s n1 → replaceNode t1 s n1
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
80 $ λ t → getRedBlackTree t 3
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
81 -- $ λ t x → SingleLinkedStack.top (stack s)
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
82 -- $ λ t x → n1
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
83 $ λ t x → root t
540
6a4830c5a514 testing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 539
diff changeset
84 where
562
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
85 findNode1 : {n m : Level } {a k : Set n} {t : Set m} → RedBlackTree {n} {m} {t} a k → SingleLinkedStack (Node a k) → (Node a k) → (Maybe (Node a k)) → (RedBlackTree {n} {m} {t} a k → SingleLinkedStack (Node a k) → Node a k → t) → t
540
6a4830c5a514 testing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 539
diff changeset
86 findNode1 t s n1 Nothing next = next t s n1
6a4830c5a514 testing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 539
diff changeset
87 findNode1 t s n1 ( Just n2 ) next = findNode t s n1 n2 next
538
5c001e8ba0d5 add redBlackTreeTest.agda test5,test51. but not work
ryokka
parents: 537
diff changeset
88
562
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
89 -- test51 : putTree1 {_} {_} {ℕ} {ℕ} {_} {Maybe (Node ℕ ℕ)} (createEmptyRedBlackTreeℕ ℕ {Set Level.zero} ) 1 1 $ λ t →
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
90 -- putTree1 t 2 2 $ λ t → putTree1 t 3 3 $ λ t → root t ≡ Just (record { key = 1; value = 1; left = Just (record { key = 2 ; value = 2 } ); right = Nothing} )
538
5c001e8ba0d5 add redBlackTreeTest.agda test5,test51. but not work
ryokka
parents: 537
diff changeset
91 -- test51 = refl
539
39d465c20e5a print contant tree. C-c C-n test.
ryokka
parents: 538
diff changeset
92
39d465c20e5a print contant tree. C-c C-n test.
ryokka
parents: 538
diff changeset
93 test6 : Maybe (Node ℕ ℕ)
39d465c20e5a print contant tree. C-c C-n test.
ryokka
parents: 538
diff changeset
94 test6 = root (createEmptyRedBlackTreeℕ {_} ℕ {Maybe (Node ℕ ℕ)})
39d465c20e5a print contant tree. C-c C-n test.
ryokka
parents: 538
diff changeset
95
39d465c20e5a print contant tree. C-c C-n test.
ryokka
parents: 538
diff changeset
96
39d465c20e5a print contant tree. C-c C-n test.
ryokka
parents: 538
diff changeset
97 test7 : Maybe (Node ℕ ℕ)
562
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
98 test7 = clearSingleLinkedStack (nodeStack tree2) (λ s → replaceNode tree2 s n2 (λ t → root t))
539
39d465c20e5a print contant tree. C-c C-n test.
ryokka
parents: 538
diff changeset
99 where
39d465c20e5a print contant tree. C-c C-n test.
ryokka
parents: 538
diff changeset
100 tree2 = createEmptyRedBlackTreeℕ {_} ℕ {Maybe (Node ℕ ℕ)}
39d465c20e5a print contant tree. C-c C-n test.
ryokka
parents: 538
diff changeset
101 k1 = 1
39d465c20e5a print contant tree. C-c C-n test.
ryokka
parents: 538
diff changeset
102 n2 = leafNode 0 0
39d465c20e5a print contant tree. C-c C-n test.
ryokka
parents: 538
diff changeset
103 value1 = 1
39d465c20e5a print contant tree. C-c C-n test.
ryokka
parents: 538
diff changeset
104
39d465c20e5a print contant tree. C-c C-n test.
ryokka
parents: 538
diff changeset
105 test8 : Maybe (Node ℕ ℕ)
39d465c20e5a print contant tree. C-c C-n test.
ryokka
parents: 538
diff changeset
106 test8 = putTree1 {_} {_} {ℕ} {ℕ} (createEmptyRedBlackTreeℕ ℕ) 1 1
562
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
107 $ λ t → putTree1 t 2 2 (λ t → root t)
544
4f692df9b3db add reference
ryokka
parents: 543
diff changeset
108
4f692df9b3db add reference
ryokka
parents: 543
diff changeset
109
562
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
110 test9 : putRedBlackTree {_} {_} {ℕ} {ℕ} (createEmptyRedBlackTreeℕ ℕ {Set Level.zero} ) 1 1 ( λ t → getRedBlackTree t 1 ( λ t x → check2 x 1 ≡ True ))
544
4f692df9b3db add reference
ryokka
parents: 543
diff changeset
111 test9 = refl
4f692df9b3db add reference
ryokka
parents: 543
diff changeset
112
4f692df9b3db add reference
ryokka
parents: 543
diff changeset
113 test10 : putRedBlackTree {_} {_} {ℕ} {ℕ} (createEmptyRedBlackTreeℕ ℕ {Set Level.zero} ) 1 1 (
562
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
114 λ t → putRedBlackTree t 2 2 (
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
115 λ t → getRedBlackTree t 1 (
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
116 λ t x → check2 x 1 ≡ True )))
544
4f692df9b3db add reference
ryokka
parents: 543
diff changeset
117 test10 = refl
4f692df9b3db add reference
ryokka
parents: 543
diff changeset
118
4f692df9b3db add reference
ryokka
parents: 543
diff changeset
119 test11 = putRedBlackTree {_} {_} {ℕ} {ℕ} (createEmptyRedBlackTreeℕ ℕ) 1 1
562
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
120 $ λ t → putRedBlackTree t 2 2
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
121 $ λ t → putRedBlackTree t 3 3
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
122 $ λ t → getRedBlackTree t 2
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
123 $ λ t x → root t
545
b180dc78abcf add someTest
ryokka
parents: 544
diff changeset
124
b180dc78abcf add someTest
ryokka
parents: 544
diff changeset
125
562
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
126 redBlackInSomeState :{ m : Level } (a : Set Level.zero) (n : Maybe (Node a ℕ)) {t : Set m} → RedBlackTree {Level.zero} {m} {t} a ℕ
564
40ab3d39e49d using strict total order
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 563
diff changeset
127 redBlackInSomeState {m} a n {t} = record { root = n ; nodeStack = emptySingleLinkedStack ; compare = compareT }
545
b180dc78abcf add someTest
ryokka
parents: 544
diff changeset
128
564
40ab3d39e49d using strict total order
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 563
diff changeset
129
40ab3d39e49d using strict total order
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 563
diff changeset
130 compTri : ( x y : ℕ ) -> Tri (x < y) ( x ≡ y ) ( x > y )
40ab3d39e49d using strict total order
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 563
diff changeset
131 compTri = IsStrictTotalOrder.compare (Relation.Binary.StrictTotalOrder.isStrictTotalOrder strictTotalOrder)
565
ba7c5f1c2937 this slightly better
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 564
diff changeset
132 where open import Relation.Binary
564
40ab3d39e49d using strict total order
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 563
diff changeset
133
40ab3d39e49d using strict total order
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 563
diff changeset
134 checkT : {m : Level } (n : Maybe (Node ℕ ℕ)) → ℕ → Bool {m}
40ab3d39e49d using strict total order
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 563
diff changeset
135 checkT Nothing _ = False
40ab3d39e49d using strict total order
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 563
diff changeset
136 checkT (Just n) x with compTri (value n) x
40ab3d39e49d using strict total order
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 563
diff changeset
137 ... | tri≈ _ _ _ = True
40ab3d39e49d using strict total order
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 563
diff changeset
138 ... | _ = False
40ab3d39e49d using strict total order
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 563
diff changeset
139
565
ba7c5f1c2937 this slightly better
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 564
diff changeset
140 checkEQ : {m : Level } ( x : ℕ ) -> ( n : Node ℕ ℕ ) -> (value n ) ≡ x -> checkT {m} (Just n) x ≡ True
ba7c5f1c2937 this slightly better
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 564
diff changeset
141 checkEQ x n refl with compTri (value n) x
566
d9ef8333ff79 use ⊥-elim (neq refl)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 565
diff changeset
142 ... | tri≈ _ refl _ = refl
d9ef8333ff79 use ⊥-elim (neq refl)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 565
diff changeset
143 ... | tri> _ neq gt = ⊥-elim (neq refl)
d9ef8333ff79 use ⊥-elim (neq refl)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 565
diff changeset
144 ... | tri< lt neq _ = ⊥-elim (neq refl)
565
ba7c5f1c2937 this slightly better
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 564
diff changeset
145
566
d9ef8333ff79 use ⊥-elim (neq refl)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 565
diff changeset
146 checkEQ' : {m : Level } ( x y : ℕ ) -> ( eq : x ≡ y ) -> ( x ≟ y ) ≡ yes eq
570
a6aa2ff5fea4 separate clearStack
ryokka
parents: 569
diff changeset
147 checkEQ' x y refl with x ≟ y
566
d9ef8333ff79 use ⊥-elim (neq refl)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 565
diff changeset
148 ... | yes refl = refl
d9ef8333ff79 use ⊥-elim (neq refl)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 565
diff changeset
149 ... | no neq = ⊥-elim ( neq refl )
546
b654ce34c894 add putTest1Lemma1, putTest1
ryokka
parents: 545
diff changeset
150
571
1eccf1f18a59 add more detail
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 570
diff changeset
151 --- search -> checkEQ
1eccf1f18a59 add more detail
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 570
diff changeset
152 --- findNode -> search
1eccf1f18a59 add more detail
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 570
diff changeset
153
573
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 572
diff changeset
154 open stack.SingleLinkedStack
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 572
diff changeset
155 open stack.Element
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 572
diff changeset
156
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 572
diff changeset
157 {-# TERMINATING #-}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 572
diff changeset
158 inStack : {l : Level} (n : Node ℕ ℕ) (s : SingleLinkedStack (Node ℕ ℕ) ) → Bool {l}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 572
diff changeset
159 inStack n s with ( top s )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 572
diff changeset
160 ... | Nothing = True
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 572
diff changeset
161 ... | Just n1 with compTri (key n) (key (datum n1))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 572
diff changeset
162 ... | tri> _ neq _ = inStack n ( record { top = next n1 } )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 572
diff changeset
163 ... | tri< _ neq _ = inStack n ( record { top = next n1 } )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 572
diff changeset
164 ... | tri≈ _ refl _ = False
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 572
diff changeset
165
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 572
diff changeset
166 record StackTreeInvariant ( n : Node ℕ ℕ )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 572
diff changeset
167 ( s : SingleLinkedStack (Node ℕ ℕ) ) ( t : RedBlackTree ℕ ℕ ) : Set where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 572
diff changeset
168 field
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 572
diff changeset
169 sti : replaceNode t s n $ λ t1 → getRedBlackTree t1 (key n) (λ t2 x1 → checkT x1 (value n) ≡ True)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 572
diff changeset
170 notInStack : inStack n s ≡ True → ⊥
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 572
diff changeset
171
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 572
diff changeset
172 open StackTreeInvariant
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 572
diff changeset
173
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 572
diff changeset
174 putTest1 : (n : Maybe (Node ℕ ℕ))
570
a6aa2ff5fea4 separate clearStack
ryokka
parents: 569
diff changeset
175 → (k : ℕ) (x : ℕ)
562
9df8103bc493 dec ≤′ done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 561
diff changeset
176 → putTree1 {_} {_} {ℕ} {ℕ} (redBlackInSomeState {_} ℕ n {Set Level.zero}) k x
570
a6aa2ff5fea4 separate clearStack
ryokka
parents: 569
diff changeset
177 (λ t → getRedBlackTree t k (λ t x1 → checkT x1 x ≡ True))
546
b654ce34c894 add putTest1Lemma1, putTest1
ryokka
parents: 545
diff changeset
178 putTest1 n k x with n
570
a6aa2ff5fea4 separate clearStack
ryokka
parents: 569
diff changeset
179 ... | Just n1 = lemma0
551
8bc39f95c961 fix findNode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 550
diff changeset
180 where
570
a6aa2ff5fea4 separate clearStack
ryokka
parents: 569
diff changeset
181 tree0 : (s : SingleLinkedStack (Node ℕ ℕ) ) → RedBlackTree ℕ ℕ
a6aa2ff5fea4 separate clearStack
ryokka
parents: 569
diff changeset
182 tree0 s = record { root = Just n1 ; nodeStack = s ; compare = compareT }
573
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 572
diff changeset
183 lemma2 : (s : SingleLinkedStack (Node ℕ ℕ) ) → StackTreeInvariant (leafNode k x) s (tree0 s)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 572
diff changeset
184 → findNode (tree0 s) s (leafNode k x) n1 (λ tree1 s n1 → replaceNode tree1 s n1
570
a6aa2ff5fea4 separate clearStack
ryokka
parents: 569
diff changeset
185 (λ t → getRedBlackTree t k (λ t x1 → checkT x1 x ≡ True)))
573
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 572
diff changeset
186 lemma2 s STI with compTri k (key n1)
572
eb75d9971451 use lemma5 to follow stack
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 571
diff changeset
187 ... | tri≈ le refl gt = lemma5 s ( tree0 s ) n1
551
8bc39f95c961 fix findNode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 550
diff changeset
188 where
573
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 572
diff changeset
189 lemma5 : (s : SingleLinkedStack (Node ℕ ℕ) ) → ( t : RedBlackTree ℕ ℕ ) → ( n : Node ℕ ℕ ) → popSingleLinkedStack ( record { top = Just (cons n (SingleLinkedStack.top s)) } )
572
eb75d9971451 use lemma5 to follow stack
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 571
diff changeset
190 ( \ s1 _ -> (replaceNode (tree0 s1) s1 (record n1 { key = k ; value = x } ) (λ t →
eb75d9971451 use lemma5 to follow stack
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 571
diff changeset
191 GetRedBlackTree.checkNode t (key n1) (λ t₁ x1 → checkT x1 x ≡ True) (root t))) )
eb75d9971451 use lemma5 to follow stack
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 571
diff changeset
192 lemma5 s t n with (top s)
573
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 572
diff changeset
193 ... | Just n2 with compTri k k
571
1eccf1f18a59 add more detail
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 570
diff changeset
194 ... | tri< _ neq _ = ⊥-elim (neq refl)
1eccf1f18a59 add more detail
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 570
diff changeset
195 ... | tri> _ neq _ = ⊥-elim (neq refl)
573
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 572
diff changeset
196 ... | tri≈ _ refl _ = ⊥-elim ( (notInStack STI) {!!} )
572
eb75d9971451 use lemma5 to follow stack
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 571
diff changeset
197 lemma5 s t n | Nothing with compTri k k
571
1eccf1f18a59 add more detail
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 570
diff changeset
198 ... | tri≈ _ refl _ = checkEQ x _ refl
1eccf1f18a59 add more detail
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 570
diff changeset
199 ... | tri< _ neq _ = ⊥-elim (neq refl)
1eccf1f18a59 add more detail
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 570
diff changeset
200 ... | tri> _ neq _ = ⊥-elim (neq refl)
573
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 572
diff changeset
201 ... | tri> le eq gt = sti ( record { sti = {!!} ; notInStack = {!!} } )
564
40ab3d39e49d using strict total order
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 563
diff changeset
202 ... | tri< le eq gt = {!!}
570
a6aa2ff5fea4 separate clearStack
ryokka
parents: 569
diff changeset
203 lemma0 : clearSingleLinkedStack (record {top = Nothing}) (\s → findNode (tree0 s) s (leafNode k x) n1 (λ tree1 s n1 → replaceNode tree1 s n1
a6aa2ff5fea4 separate clearStack
ryokka
parents: 569
diff changeset
204 (λ t → getRedBlackTree t k (λ t x1 → checkT x1 x ≡ True))))
573
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 572
diff changeset
205 lemma0 = lemma2 (record {top = Nothing}) ( record { sti = {!!} ; notInStack = {!!} } )
570
a6aa2ff5fea4 separate clearStack
ryokka
parents: 569
diff changeset
206 ... | Nothing = lemma1
549
bc3208d510cd add some
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 548
diff changeset
207 where
bc3208d510cd add some
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 548
diff changeset
208 lemma1 : getRedBlackTree {_} {_} {ℕ} {ℕ} {Set Level.zero} ( record { root = Just ( record {
571
1eccf1f18a59 add more detail
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 570
diff changeset
209 key = k ; value = x ; right = Nothing ; left = Nothing ; color = Red } ) ; nodeStack = record { top = Nothing } ; compare = λ x₁ y → compareT x₁ y } ) k
564
40ab3d39e49d using strict total order
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 563
diff changeset
210 ( λ t x1 → checkT x1 x ≡ True)
567
56a190d3c70a lemma1 done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 566
diff changeset
211 lemma1 with compTri k k
56a190d3c70a lemma1 done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 566
diff changeset
212 ... | tri≈ _ refl _ = checkEQ x _ refl
56a190d3c70a lemma1 done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 566
diff changeset
213 ... | tri< _ neq _ = ⊥-elim (neq refl)
56a190d3c70a lemma1 done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 566
diff changeset
214 ... | tri> _ neq _ = ⊥-elim (neq refl)