@@ -9,63 +9,64 @@ open import Order.Total
99```
1010
1111``` agda
12- module SortedTrees ( P : Poset lzero lzero) (idto : is-decidable-total-order P) where
12+ module Sorted-trees {o ℓ} { P : Poset o ℓ} (idto : is-decidable-total-order P) where
1313
1414 open is-decidable-total-order idto
1515
16- record II : Type where
16+ record II : Type o where
1717 constructor 〚_,_〛
1818 field
1919 l : Ob
2020 r : Ob
2121
2222 open II
2323
24- record Elt (i : II) : Type where
24+ record Elt (i : II) : Type (o ⊔ ℓ) where
2525 constructor elt
2626 field
2727 p : Ob
2828 lp : i .l ≤ p
2929 pr : p ≤ i .r
3030
31- Valid : II -> Type
31+ Valid : II → Type ℓ
3232 Valid i = i .l ≤ i .r
3333
34- variable i : II
34+ private variable i : II
3535
36- interleaved mutual
37- data Tree : II -> Type
38- size : Tree i -> Nat
36+ data Tree : II → Type (o ⊔ ℓ)
37+ size : Tree i → Nat
3938
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
39+ data Tree where
40+ Leaf : Valid i → Tree i
41+ Node : (p : Ob) (l : Tree 〚 i .l , p 〛) (r : Tree 〚 p , i .r 〛) (n : Nat)
42+ → (n ≡ 1 + size l + size r) → Tree i
4343
44- size (Leaf _) = 0
45- size (Node _ _ _ n _) = n
44+ size (Leaf _) = 0
45+ size (Node _ _ _ n _) = n
4646
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)
47+ insert : Tree i → Elt i → Tree i
48+ size-insert : (t : Tree i) → (e : Elt i) → 1 + size t ≡ size (insert t e)
5049
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'
50+ insert (Leaf _) (elt p lp pr) = Node p (Leaf lp) (Leaf pr) 1 refl
51+ insert (Node q l r n pf) (elt p lp pr) with compare p q
52+ ... | inl pq =
53+ let e' = elt p lp pq in
54+ let l' = insert l e' in
55+ let pf' = 1 + n ≡⟨ ap suc pf ⟩ 1 + (1 + size l + size r)
56+ ≡⟨ ap ((λ k → 1 + k + size r)) (size-insert l e') ⟩
57+ 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)) (size-insert r e') ⟩
65+ suc (size l + size r') ∎ in
66+ Node q l r' (1 + n) pf'
6667
67- insertSize (Leaf x) e = refl
68- insertSize (Node q _ _ _ _) (elt p _ _) with compare p q
69- ... | inl pq = refl
70- ... | inr qp = refl
68+ size-insert (Leaf x) e = refl
69+ size-insert (Node q _ _ _ _) (elt p _ _) with compare p q
70+ ... | inl pq = refl
71+ ... | inr qp = refl
7172```
0 commit comments