module Chapter8.Brady.Fin where open import Level renaming ( zero to zeroL ; suc to sucL ) open import Function open import Data.Empty open import Data.Unit open import Data.Nat open import Data.Fin hiding (lift) open import Data.Vec open import Data.Product open import Relation.Binary.PropositionalEquality open import Chapter2.Logic open import Chapter5.IDesc.Tagged open import Chapter5.IDesc.Fixpoint open import Chapter5.IDesc.Examples.Fin open import Chapter8.Ornament FinO : orn (toDesc Constraint.FinD) id id FinO = orn.mk λ { zero → insert ⊥ ⊥-elim ; (suc n) → `Σ {S = Lift (Fin 2)} λ { (lift zero) → deleteΣ n (deleteΣ refl `1) ; (lift (suc zero)) → deleteΣ n (deleteΣ refl (`var (inv n) `× `1)) ; (lift (suc (suc ()))) } } Fin' : ℕ → Set Fin' = μ ⟦ FinO ⟧orn fz : ∀{n} → Fin' (suc n) fz = ⟨ lift zero , lift tt ⟩ fs : ∀{n} → Fin' n → Fin' (suc n) fs k = ⟨ lift (suc zero) , k , lift tt ⟩