Set Implicit Arguments.
Unset Strict Implicit.
Definition If (T : Set) (b : bool) (t e : T) :=
(* If T b t e  =  if b then t else e *)
match b with
| true => t
| false => e
end.
Set Strict Implicit.
Unset Implicit Arguments.

(* Specifications: *)
Lemma Z_to_inject_nat : forall x : Z, 0 <= x -> Z_of_nat (Zabs_nat x) = x.
simple destruct x. simpl. omega. intros. simpl. symmetry.