Double
Double function on natural nuumbers.{-# OPTIONS --safe --without-K #-} module Naturals.Double where open import MLTT.Spartan hiding (_+_) open import Naturals.Properties double : ℕ → ℕ double 0 = 0 double (succ n) = succ (succ (double n)) sdouble : ℕ → ℕ sdouble = succ ∘ double double-is-not-sdouble : {m n : ℕ} → double m ≠ sdouble n double-is-not-sdouble {0} {0} = zero-not-positive 0 double-is-not-sdouble {0} {succ n} = zero-not-positive (succ (succ (double n))) double-is-not-sdouble {succ m} {succ n} = λ p → double-is-not-sdouble (succ-lc (succ-lc p)) double-lc : {m n : ℕ} → double m = double n → m = n double-lc {0} {0} p = refl double-lc {succ m} {succ n} p = ap succ IH where IH : m = n IH = double-lc {m} {n} (succ-lc (succ-lc p)) sdouble-lc : {m n : ℕ} → sdouble m = sdouble n → m = n sdouble-lc = double-lc ∘ succ-lc power2 : ℕ → ℕ power2 0 = 1 power2 (succ n) = double (power2 n)Added 26 September 2025 by Fredrik Nordvall Forsberg.open import Naturals.Order open import Notation.Order double-reflects-≤ : {x y : ℕ} → double x ≤ double y → x ≤ y double-reflects-≤ {zero} {y} _ = ⋆ double-reflects-≤ {succ x} {succ y} p = double-reflects-≤ {x} {y} p double-reflects-< : {x y : ℕ} → double x < double y → x < y double-reflects-< {zero} {succ y} _ = ⋆ double-reflects-< {succ x} {succ y} p = double-reflects-< {x} {y} pAdded 26 September 2025 by Fredrik Nordvall Forsberg.open import Naturals.Addition double-is-self-addition : (n : ℕ) → double n = n + n double-is-self-addition zero = refl double-is-self-addition (succ n) = ap succ (succ (double n) =⟨ ap succ (double-is-self-addition n) ⟩ succ (n + n) =⟨ succ-left n n ⁻¹ ⟩ succ n + n ∎)