Module Type LocalNat.
Inductive nat : Set :=
| O : nat
| S : nat->nat.
Check nat.
Check O.
Check S.
End LocalNat.
Print nat.
Print le.
Print zero_leq_three.
repeat constructor.
Qed.
Print list.
Check list.
Check (nil (A:=nat)).
Check (nil (A:= nat -> nat)).
Check (fun A: Set => (cons (A:=A))).
Check (cons 3 (cons 2 nil)).
Print Vector.t.
Check (Vector.nil nat).
Check (fun (A:Set)(a:A)=> Vector.cons _ a _ (Vector.nil _)).
Check (Vector.cons _ 5 _ (Vector.cons _ 3 _ (Vector.nil _))).
Print eq_3_3.
Print eq_proof_proof.
Check (2 + 1 = 3).
Check (Type = Type).
Goal Type = Type.
reflexivity.
Qed.
Print or.
Print and.
Print sumbool.
Print ex.
Check le_lt_dec.
Definition max (n p :nat) := match le_lt_dec n p with
| left _ => p
| right _ => n
end.

Theorem le_max : forall n p, n <= p -> max n p = p.