Skip to content

Commit 760b08e

Browse files
authored
[ refactor ] Infrastructure for Data.Tree.AVL.Indexed.* (#2968)
* add : lemmas about balance factors at height 0 * add: `variable`s; tighten `import`s * fix: qualified module name `Function` * refactor: introduce typedefs, remove parentheses, streamline functions definitions * refactor: use of `variable`s; tighten `import`s * tidy up: use of `variable`s; tighten `import`s * fix: `CHANGELOG` * fix: whitespace * fix: remove `n` as a name for height `h` * add: `private` lemma `tree0` * refactor: rename and deprecate * revert: renaming/deprecation * fix: more things * fix: more things * fix: more things * fix: final things? * tidy up: `Properties.Delete` * tidy up: `Properties.Insert` * tidy up: `Properties.HeadTail` * tidy up: `Properties.Lookup` * tidy up: `Properties.LookupFun` * tidy up: `Properties.Singleton` * refactor: `Properties.Join` and consolidate as one module * add: freshness predicate `_#_` * refactor: consolidate `Lookup` * refactor: use freshness predicate * refactor: standardise bound name for a segment `l < k < u` * refactor: split up `Join` and `JoinLemmas` * refactor: to use `JoinLemmas` * refactor: standardise bound name for a segment `l < k < u` * refactor: standardise notation * refactor: use `variable`s * refactor: use freshness predicate * refactor: cosmetic tweaks * fix: `import`s in `Properties`
1 parent 7847620 commit 760b08e

15 files changed

Lines changed: 578 additions & 496 deletions

File tree

CHANGELOG.md

Lines changed: 40 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ Minor improvements
6868
levels to be used.
6969

7070
* Due to becoming large, `Data.Tree.AVL.Indexed.Relation.Unary.Any.Properties`
71-
has been split into small modules
71+
has been split into smaller modules
7272
`Data.Tree.AVL.Indexed.Relation.Unary.Any.Properties.*`
7373
that are reexported by the original `Properties`.
7474

@@ -114,6 +114,14 @@ Deprecated names
114114
nonPos*nonPos⇒nonPos ↦ nonPos*nonPos⇒nonNeg
115115
```
116116

117+
* In `Data.Tree.AVL.Indexed.Relation.Unary.Any.Properties.Insert`:
118+
```agda
119+
Any-insertWith-nothing ↦ insertWith-nothing
120+
Any-insertWith-just ↦ insertWith-just
121+
Any-insert-nothing ↦ insert-nothing
122+
Any-insert-just ↦ insert-just
123+
```
124+
117125
* In `Data.Vec.Properties`:
118126
```agda
119127
truncate-irrelevant ↦ Relation.Binary.PropositionalEquality.Core.refl
@@ -188,9 +196,8 @@ New modules
188196
Data.Tree.AVL.Indexed.Relation.Unary.Any.Properties.Delete
189197
Data.Tree.AVL.Indexed.Relation.Unary.Any.Properties.HeadTail
190198
Data.Tree.AVL.Indexed.Relation.Unary.Any.Properties.Insert
191-
Data.Tree.AVL.Indexed.Relation.Unary.Any.Properties.JoinConstFuns
192199
Data.Tree.AVL.Indexed.Relation.Unary.Any.Properties.Join
193-
Data.Tree.AVL.Indexed.Relation.Unary.Any.Properties.LookupFun
200+
Data.Tree.AVL.Indexed.Relation.Unary.Any.Properties.JoinLemmas
194201
Data.Tree.AVL.Indexed.Relation.Unary.Any.Properties.Singleton
195202
```
196203

@@ -425,6 +432,27 @@ Additions to existing modules
425432
showAtPrecision : ℕ → ℚᵘ → String
426433
```
427434

435+
* In `Data.Tree.AVL.Height`:
436+
```agda
437+
0∼⊔ : 0 ∼ j ⊔ m → j ≡ m
438+
∼0⊔ : i ∼ 0 ⊔ m → i ≡ m
439+
```
440+
441+
* In `Data.Tree.AVL.Indexed`:
442+
```agda
443+
Tree⁺ Tree⁻ : (V : Value v) (l u : Key⁺) (h : ℕ) → Set _
444+
pattern leaf⁻ l<u = _ , leaf l<u
445+
pattern node⁰ʳ k₁ t₁ k₂ t₂ t₃ = node k₁ t₁ (node k₂ t₂ t₃ ∼0) ∼0
446+
pattern node⁰ˡ k₁ k₂ t₁ t₂ t₃ = node k₁ (node k₂ t₁ t₂ ∼0) t₃ ∼0
447+
```
448+
449+
* In `Data.Tree.AVL.Indexed.Relation.Unary.Any`:
450+
```agda
451+
infix 5 _#[_]_ _#_
452+
_#[_]_ : (k : Key) (P : Pred (K& V) p) → Pred (Any P t) ℓ₁
453+
_#_ : Key → Pred (Any P t) ℓ₁
454+
```
455+
428456
* In `Data.Tree.AVL.Indexed.Relation.Unary.Any.Properties.Cast`:
429457
```agda
430458
castʳ⁺ : Any P lm → Any P (castʳ lm m<u)
@@ -460,47 +488,47 @@ Additions to existing modules
460488
Any P t⁻ → Any P t
461489
```
462490

463-
* In `Data.Tree.AVL.Indexed.Relation.Unary.Any.Properties.JoinConstFuns`:
491+
* In `Data.Tree.AVL.Indexed.Relation.Unary.Any.Properties.JoinLemmas`:
464492
```
465493
joinˡ⁻-here⁺ : (kv : K& V) →
466-
(l : ∃ λ i → Tree V l [ kv .key ] pred[ i ⊕ hˡ ]) →
494+
(l : Tree V l [ kv .key ] ) →
467495
(r : Tree V [ kv .key ] u hʳ) →
468496
(bal : hˡ ∼ hʳ ⊔ h) →
469497
P kv → Any P (proj₂ (joinˡ⁻ hˡ kv l r bal))
470498
joinˡ⁻-left⁺ : (kv : K& V) →
471-
(l : ∃ λ i → Tree V l [ kv .key ] pred[ i ⊕ hˡ ]) →
499+
(l : Tree V l [ kv .key ] ) →
472500
(r : Tree V [ kv .key ] u hʳ) →
473501
(bal : hˡ ∼ hʳ ⊔ h) →
474502
Any P (proj₂ l) → Any P (proj₂ (joinˡ⁻ hˡ kv l r bal))
475503
joinˡ⁻-right⁺ : (kv : K& V) →
476-
(l : ∃ λ i → Tree V l [ kv .key ] pred[ i ⊕ hˡ ]) →
504+
(l : Tree V l [ kv .key ] ) →
477505
(r : Tree V [ kv .key ] u hʳ) →
478506
(bal : hˡ ∼ hʳ ⊔ h) →
479507
Any P r → Any P (proj₂ (joinˡ⁻ hˡ kv l r bal))
480508
joinˡ⁻⁻ : (kv : K& V) →
481-
(l : ∃ λ i → Tree V l [ kv .key ] pred[ i ⊕ hˡ ]) →
509+
(l : Tree V l [ kv .key ] ) →
482510
(r : Tree V [ kv .key ] u hʳ) →
483511
(bal : hˡ ∼ hʳ ⊔ h) →
484512
Any P (proj₂ (joinˡ⁻ hˡ kv l r bal)) →
485513
P kv ⊎ Any P (proj₂ l) ⊎ Any P r
486514
joinʳ⁻-here⁺ : (kv : K& V) →
487515
(l : Tree V l [ kv .key ] hˡ) →
488-
(r : ∃ λ i → Tree V [ kv .key ] u pred[ i ⊕ hʳ ]) →
516+
(r : Tree V [ kv .key ] u ) →
489517
(bal : hˡ ∼ hʳ ⊔ h) →
490518
P kv → Any P (proj₂ (joinʳ⁻ hʳ kv l r bal))
491519
joinʳ⁻-left⁺ : (kv : K& V) →
492520
(l : Tree V l [ kv .key ] hˡ) →
493-
(r : ∃ λ i → Tree V [ kv .key ] u pred[ i ⊕ hʳ ]) →
521+
(r : Tree V [ kv .key ] u ) →
494522
(bal : hˡ ∼ hʳ ⊔ h) →
495523
Any P l → Any P (proj₂ (joinʳ⁻ hʳ kv l r bal))
496524
joinʳ⁻-right⁺ : (kv : K& V) →
497525
(l : Tree V l [ kv .key ] hˡ) →
498-
(r : ∃ λ i → Tree V [ kv .key ] u pred[ i ⊕ hʳ ]) →
526+
(r : Tree V [ kv .key ] u ) →
499527
(bal : hˡ ∼ hʳ ⊔ h) →
500528
Any P (proj₂ r) → Any P (proj₂ (joinʳ⁻ hʳ kv l r bal))
501529
joinʳ⁻⁻ : (kv : K& V) →
502530
(l : Tree V l [ kv .key ] hˡ) →
503-
(r : ∃ λ i → Tree V [ kv .key ] u pred[ i ⊕ hʳ ]) →
531+
(r : Tree V [ kv .key ] u ) →
504532
(bal : hˡ ∼ hʳ ⊔ h) →
505533
Any P (proj₂ (joinʳ⁻ hʳ kv l r bal)) →
506534
P kv ⊎ Any P l ⊎ Any P (proj₂ r)

src/Data/Tree/AVL/Height.agda

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,12 @@ module Data.Tree.AVL.Height where
1111

1212
open import Data.Nat.Base
1313
open import Data.Fin.Base using (Fin; zero; suc)
14+
open import Relation.Binary.PropositionalEquality.Core using (_≡_; refl)
15+
16+
private
17+
variable
18+
i j m n :
19+
1420

1521
ℕ₂ = Fin 2
1622
pattern 0# = zero
@@ -39,18 +45,26 @@ infix 4 _∼_⊔_
3945
-- absolute value of the balance factor is never more than 1.
4046

4147
data _∼_⊔_ : Set where
42-
∼+ : {n} n ∼ 1 + n ⊔ 1 + n
43-
∼0 : {n} n ∼ n ⊔ n
44-
∼- : {n} 1 + n ∼ n ⊔ 1 + n
48+
∼+ : n ∼ 1 + n ⊔ 1 + n
49+
∼0 : n ∼ n ⊔ n
50+
∼- : 1 + n ∼ n ⊔ 1 + n
4551

4652
-- Some lemmas.
4753

48-
max∼ : {i j m} i ∼ j ⊔ m m ∼ i ⊔ m
54+
max∼ : i ∼ j ⊔ m m ∼ i ⊔ m
4955
max∼ ∼+ = ∼-
5056
max∼ ∼0 = ∼0
5157
max∼ ∼- = ∼0
5258

53-
∼max : {i j m} i ∼ j ⊔ m j ∼ m ⊔ m
59+
∼max : i ∼ j ⊔ m j ∼ m ⊔ m
5460
∼max ∼+ = ∼0
5561
∼max ∼0 = ∼0
5662
∼max ∼- = ∼+
63+
64+
0∼⊔ : 0 ∼ j ⊔ m j ≡ m
65+
0∼⊔ ∼+ = refl
66+
0∼⊔ ∼0 = refl
67+
68+
∼0⊔ : i ∼ 0 ⊔ m i ≡ m
69+
∼0⊔ ∼- = refl
70+
∼0⊔ ∼0 = refl

0 commit comments

Comments
 (0)