{-# OPTIONS --safe #-}
module Tree where
open import Library
data Tree : Set where
ε : Tree
_∙_ : (t₁ t₂ : Tree) → Tree
variable
t t' t₁ t₂ : Tree
rotate : Tree → Maybe Tree
rotate ((t₁ ∙ t₂) ∙ t₃) = just (t₁ ∙ (t₂ ∙ t₃))
rotate _ = nothing
tail : Tree → Maybe Tree
tail (ε ∙ t) = just t
tail _ = nothing
left-spine : ℕ → Tree
left-spine zero = ε
left-spine (suc n) = left-spine n ∙ ε
right-spine : ℕ → Tree
right-spine zero = ε
right-spine (suc n) = ε ∙ right-spine n
module Potential where
open ℕ
Φᵣ : Tree → ℕ
Φᵣ ε = 0
Φᵣ (l ∙ r) = suc (Φᵣ l) ⊔ pred (Φᵣ r)
Φₗ : Tree → ℕ
Φₗ ε = 0
Φₗ (l ∙ r) = suc (Φₗ l) ⊔ Φᵣ r
Φ : Tree → ℕ
Φ ε = 0
Φ (l ∙ r) = suc (Φₗ l) ⊔ pred (Φᵣ r)
record Resourced (A : Set) : Set where
constructor _⨮_
field
resources : ℕ
payload : A
infixl 4 _⨮_