Skip to content

Commit c2190a0

Browse files
committed
started working on sorted maps
1 parent 6258945 commit c2190a0

File tree

3 files changed

+84
-0
lines changed

3 files changed

+84
-0
lines changed

src/Data/Map.lagda.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
```agda
2+
module Data.Map where
3+
```
4+
5+
# Lists - index
6+
7+
```agda
8+
open import Data.Map.Base public
9+
open import Data.Map.Properties public
10+
```

src/Data/Map/Base.lagda.md

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
```agda
2+
module Data.Map.Base where
3+
4+
open import 1Lab.Prelude
5+
open import Data.Nat.Solver
6+
open import Data.Sum
7+
open import Order.Base
8+
open import Order.Total
9+
```
10+
11+
```agda
12+
module SortedTrees (P : Poset lzero lzero) (idto : is-decidable-total-order P) where
13+
14+
open is-decidable-total-order idto
15+
16+
record II : Type where
17+
constructor 〚_,_〛
18+
field
19+
l : Ob
20+
r : Ob
21+
22+
open II
23+
24+
record Elt (i : II) : Type where
25+
constructor elt
26+
field
27+
p : Ob
28+
lp : i .l ≤ p
29+
pr : p ≤ i .r
30+
31+
Valid : II -> Type
32+
Valid i = i .l ≤ i .r
33+
34+
variable i : II
35+
36+
interleaved mutual
37+
data Tree : II -> Type
38+
size : Tree i -> Nat
39+
40+
data _ where
41+
Leaf : Valid i -> Tree i
42+
Node : (p : Ob) -> (l : Tree 〚 i .l , p 〛) -> (r : Tree 〚 p , i .r 〛) -> (n : Nat) -> (n ≡ 1 + size l + size r) -> Tree i
43+
44+
size (Leaf _) = 0
45+
size (Node _ _ _ n _) = n
46+
47+
interleaved mutual
48+
insert : Tree i -> Elt i -> Tree i
49+
insertSize : (t : Tree i) -> (e : Elt i) -> 1 + size t ≡ size (insert t e)
50+
51+
insert (Leaf _) (elt p lp pr) = Node p (Leaf lp) (Leaf pr) 1 refl
52+
insert (Node q l r n pf) (elt p lp pr) with compare p q
53+
... | inl pq =
54+
let e' = elt p lp pq in
55+
let l' = insert l e' in
56+
let pf' = 1 + n ≡⟨ ap suc pf ⟩ 1 + (1 + size l + size r)
57+
≡⟨ ap ((λ k -> 1 + k + size r)) (insertSize l e') ⟩ 1 + (size l' + size r) ∎ in
58+
Node q l' r (1 + n) pf'
59+
... | inr qp =
60+
let e' = elt p qp pr in
61+
let r' = insert r e' in
62+
let pf' = 1 + n ≡⟨ ap suc pf ⟩ suc (suc (size l + size r))
63+
≡⟨ nat! ⟩ suc (size l + (suc (size r)))
64+
≡⟨ ap ((λ k -> 1 + size l + k)) (insertSize r e') ⟩ suc (size l + size r') ∎ in
65+
Node q l r' (1 + n) pf'
66+
67+
insertSize (Leaf x) e = refl
68+
insertSize (Node q _ _ _ _) (elt p _ _) with compare p q
69+
... | inl pq = refl
70+
... | inr qp = refl
71+
```

src/Data/Map/Properties.lagda.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```agda
2+
module Data.Map.Properties where
3+
```

0 commit comments

Comments
 (0)