module Chapter2.IDesc.Examples.Fin where open import Data.Unit open import Data.Nat open import Data.Fin renaming (Fin to FinNative) open import Data.Vec open import Data.Product open import Relation.Binary.PropositionalEquality open import Chapter2.IDesc open import Chapter2.IDesc.Fixpoint open import Chapter2.IDesc.Tagged module Compute where FinD : tagDesc ℕ 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 = ⟨ zero , tt ⟩ su : ∀{n} → Fin n → Fin (suc n) su k = ⟨ suc zero , k , tt ⟩ module Constraint where FinD : tagDesc ℕ 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 = ⟨ zero , _ , refl , tt ⟩ su : ∀{n} → Fin n → Fin (suc n) su k = ⟨ suc zero , _ , refl , k , tt ⟩