{-# OPTIONS --cubical --no-import-sorts --no-exact-split --safe #-} module Cubical.Data.Nat.Base where open import Cubical.Core.Primitives open import Agda.Builtin.Nat public using (zero; suc; _+_) renaming (Nat to ; _-_ to _∸_; _*_ to _·_) open import Cubical.Data.Nat.Literals public predℕ : predℕ zero = zero predℕ (suc n) = n caseNat : {} {A : Type } (a0 aS : A) A caseNat a0 aS zero = a0 caseNat a0 aS (suc n) = aS doubleℕ : doubleℕ zero = zero doubleℕ (suc x) = suc (suc (doubleℕ x)) -- doublesℕ n m = 2^n · m doublesℕ : doublesℕ zero m = m doublesℕ (suc n) m = doublesℕ n (doubleℕ m) -- iterate iter : {} {A : Type } (A A) A A iter zero f z = z iter (suc n) f z = f (iter n f z) elim : {} {A : Type } A zero ((n : ) A n A (suc n)) (n : ) A n elim a₀ _ zero = a₀ elim a₀ f (suc n) = f n (elim a₀ f n)