------------------------------------------------------------------------ -- The Agda standard library -- -- Coinductive "natural" numbers: base type and operations ------------------------------------------------------------------------ {-# OPTIONS --safe --without-K --guardedness #-} module Codata.Musical.Conat.Base where open import Codata.Musical.Notation open import Data.Nat.Base using (ℕ; zero; suc) open import Function.Base using (_∋_) ------------------------------------------------------------------------ -- The type data Coℕ : Set where zero : Coℕ suc : (n : ∞ Coℕ) → Coℕ ------------------------------------------------------------------------ -- Constant ∞ℕ : Coℕ ∞ℕ = suc (♯ ∞ℕ) ------------------------------------------------------------------------ -- Some operations pred : Coℕ → Coℕ pred zero = zero pred (suc n) = ♭ n fromℕ : ℕ → Coℕ fromℕ zero = zero fromℕ (suc n) = suc (♯ fromℕ n) infixl 6 _+_ _+_ : Coℕ → Coℕ → Coℕ zero + n = n suc m + n = suc (♯ (♭ m + n))