mirror of
https://github.com/Smaug123/agdaproofs
synced 2025-10-11 14:48:42 +00:00
32 lines
953 B
Agda
32 lines
953 B
Agda
{-# OPTIONS --warning=error --safe --without-K #-}
|
||
|
||
open import LogicalFormulae
|
||
|
||
module Numbers.Naturals.Definition where
|
||
|
||
data ℕ : Set where
|
||
zero : ℕ
|
||
succ : ℕ → ℕ
|
||
|
||
infix 100 succ
|
||
|
||
{-# BUILTIN NATURAL ℕ #-}
|
||
|
||
succInjective : {a b : ℕ} → (succ a ≡ succ b) → a ≡ b
|
||
succInjective {a} {.a} refl = refl
|
||
|
||
naughtE : {a : ℕ} → zero ≡ succ a → False
|
||
naughtE ()
|
||
|
||
aIsNotSuccA : (a : ℕ) → (a ≡ succ a) → False
|
||
aIsNotSuccA zero pr = naughtE pr
|
||
aIsNotSuccA (succ a) pr = aIsNotSuccA a (succInjective pr)
|
||
|
||
ℕDecideEquality : (a b : ℕ) → ((a ≡ b) || ((a ≡ b) → False))
|
||
ℕDecideEquality zero zero = inl refl
|
||
ℕDecideEquality zero (succ b) = inr (λ ())
|
||
ℕDecideEquality (succ a) zero = inr (λ ())
|
||
ℕDecideEquality (succ a) (succ b) with ℕDecideEquality a b
|
||
ℕDecideEquality (succ a) (succ b) | inl x = inl (applyEquality succ x)
|
||
ℕDecideEquality (succ a) (succ b) | inr x = inr λ pr → x (succInjective pr)
|