module Chapter5.Brady.Vec (A : Set) where open import Function open import Data.Unit open import Data.Nat open import Data.Fin open import Data.Product open import Relation.Binary.PropositionalEquality open import Chapter1.Logic open import Chapter2.IDesc.Fixpoint open import Chapter2.IDesc.Examples.Vec open import Chapter5.Ornament VecO : orn (Constraint.VecD A) id id VecO = orn.mk λ { zero → deleteΣ zero (deleteΣ refl `1) ; (suc n) → deleteΣ (suc zero) (`Σ λ _ → deleteΣ n (deleteΣ refl (`var (inv n) `× `1))) } Vec' : ℕ → Set Vec' = μ ⟦ VecO ⟧orn vnil : Vec' 0 vnil = ⟨ tt ⟩ vcons : ∀{n} → A → Vec' n → Vec' (suc n) vcons a vs = ⟨ a , vs , tt ⟩