2014-08-25 02:58:48 +00:00
|
|
|
import logic
|
2014-09-04 23:36:06 +00:00
|
|
|
open eq_ops
|
2014-07-25 20:49:45 +00:00
|
|
|
|
|
|
|
inductive nat : Type :=
|
2014-08-22 22:46:10 +00:00
|
|
|
zero : nat,
|
|
|
|
succ : nat → nat
|
2014-07-25 20:49:45 +00:00
|
|
|
|
2014-09-04 23:36:06 +00:00
|
|
|
namespace nat
|
2014-09-17 21:39:05 +00:00
|
|
|
definition plus (x y : nat) : nat
|
2014-09-04 22:03:59 +00:00
|
|
|
:= nat.rec x (λn r, succ r) y
|
2014-09-17 21:39:05 +00:00
|
|
|
definition to_nat [coercion] (n : num) : nat
|
2014-09-04 23:36:06 +00:00
|
|
|
:= num.rec zero (λn, pos_num.rec (succ zero) (λn r, plus r (plus r (succ zero))) (λn r, plus r r) n) n
|
2014-07-25 20:49:45 +00:00
|
|
|
definition add (x y : nat) : nat
|
|
|
|
:= plus x y
|
|
|
|
variable le : nat → nat → Prop
|
|
|
|
|
|
|
|
infixl `+`:65 := add
|
|
|
|
infix `≤`:50 := le
|
|
|
|
axiom add_one (n:nat) : n + (succ zero) = succ n
|
|
|
|
axiom add_le_right {n m : nat} (H : n ≤ m) (k : nat) : n + k ≤ m + k
|
|
|
|
|
|
|
|
theorem succ_le {n m : nat} (H : n ≤ m) : succ n ≤ succ m
|
|
|
|
:= add_one m ▸ add_one n ▸ add_le_right H 1
|
2014-09-04 23:36:06 +00:00
|
|
|
|
|
|
|
end nat
|