This file illustrate the last sentence of Section 2 in the paper. It uses the following term of type Bush(List(Ptree(ℕ))):
╔ ╗ ║ ┌ ┐ ║ ║ │ ∙ │ ║ ║ │ ↙ ↘ │ ║ ║ │ ∙ ∙ ∙ │ ║ ║ │ ↙ ↘ , ↙ ↘ ↙ ↘ │ ║ ║ │ 5 2 1 3 2 5 │ ║ ║ └ ┘ ║ ╚ ╝
where the square brackets denote lists and the double square brackets denote bushes.
module deep-by-inst where open import map open import nat using (1Nat ; 2Nat ; 3Nat ; 5Nat) open import ptree using (Ptree[_] ; ⊢Ptree ; pleaf[_] ; pnode[_]) open import bush using (Bush[_] ; ⊢Bush ; bnil[] ; bcons[_,_]) open import list using (List[_] ; ⊢List ; nil[] ; cons[_,_]) open import Data.List using ([] ; _∷_ ; [_]) open import Data.Vec renaming ([] to [||] ; _∷_ to _¦_ ; [_] to [|_|] )
We start with the declaration of variables that will be used in the call to adm.
β₁ : mix-var
β₁ = tvar 0
Γβ₁ : type-context {mix-var}
Γβ₁ = ⟦ [| β₁ |] ⟧
f : mix-var
f = fvar 0
We then define the term given in introduction to this file, and the specification with respect to which we are considering it.
⊢BushListPtree[β₁] : Γβ₁ ∥ ∅ ⊢ Bush[ List[ Ptree[ varᵀ β₁ ] ] ]
⊢BushListPtree[β₁] = ⊢Bush (⊢List (⊢Ptree (var-intro ∋-last)))
t =
bcons[
cons[
pnode[
pleaf[ (5Nat , 2Nat) ]
] ,
cons[
pnode[
pnode[
pleaf[ ((1Nat , 3Nat) , (2Nat , 5Nat)) ]
]
] ,
nil[]
]
] ,
bnil[]
]
C,s = adm t ⊢BushListPtree[β₁] [| varᵀ f |] (record { curr = 1 }) []