module Chapter6.IDesc.Examples.Fin where open import Level renaming ( zero to zeroL ; suc to sucL ) open import Data.Unit open import Data.Nat open import Data.Fin hiding (lift) renaming (Fin to FinNative) open import Data.Vec open import Data.Product open import Relation.Binary.PropositionalEquality open import Chapter6.IDesc open import Chapter6.IDesc.Fixpoint open import Chapter6.IDesc.Tagged module Compute where FinD : tagDesc zeroL ℕ FinD = (0 , λ n → []) , ((λ { zero → 0 ; (suc n) → 2 }) , λ { zero → [] ; (suc n) → `1 ∷ `var n `× `1 ∷ []}) Fin : ℕ → Set Fin = μ (toDesc FinD) ze : ∀{n} → Fin (suc n) ze = ⟨ lift zero , lift tt ⟩ su : ∀{n} → Fin n → Fin (suc n) su k = ⟨ lift (suc zero) , k , lift tt ⟩ module Constraint where FinD : tagDesc zeroL ℕ FinD = (2 , λ n → (`Σ ℕ λ m → `Σ (n ≡ suc m) λ _ → `1) ∷ (`Σ ℕ λ m → `Σ (n ≡ suc m) λ _ → `var m `× `1) ∷ []) , (λ n → 0) , λ n → [] Fin : ℕ → Set Fin = μ (toDesc FinD) ze : ∀{n} → Fin (suc n) ze = ⟨ lift zero , _ , refl , lift tt ⟩ su : ∀{n} → Fin n → Fin (suc n) su k = ⟨ lift (suc zero) , _ , refl , k , lift tt ⟩