48 lines
1.3 KiB
Plaintext

%% nat.elf - Natural Numbers (Peano Axioms)
%%
%% We define the natural numbers inductively:
%% - z (zero) is a natural number
%% - s N (successor of N) is a natural number if N is
%%
%% This gives us: z, s z, s (s z), s (s (s z)), ...
%% = 0, 1, 2, 3, ...
nat : type.
z : nat.
s : nat -> nat.
%% Equality on natural numbers (identity)
nat-eq : nat -> nat -> type.
nat-eq/refl : nat-eq N N.
%% Inequality (not equal)
nat-neq : nat -> nat -> type.
nat-neq/zs : nat-neq z (s _).
nat-neq/sz : nat-neq (s _) z.
nat-neq/ss : nat-neq (s N) (s M) <- nat-neq N M.
%% Some convenient abbreviations for small numbers
%abbrev one = s z.
%abbrev two = s (s z).
%abbrev three = s (s (s z)).
%abbrev four = s (s (s (s z))).
%abbrev five = s (s (s (s (s z)))).
%% Predecessor (partial - undefined for zero)
pred : nat -> nat -> type.
pred/s : pred (s N) N.
%% Case analysis principle: every nat is either z or s of something
nat-case : nat -> type.
nat-case/z : nat-case z.
nat-case/s : nat-case (s N).
%% Every natural number has a case
nat-case-total : {N:nat} nat-case N -> type.
%mode nat-case-total +N -C.
nat-case-total/z : nat-case-total z nat-case/z.
nat-case-total/s : nat-case-total (s N) nat-case/s.
%worlds () (nat-case-total _ _).
%total N (nat-case-total N _).