(*
Lemma bool_to_nat_negb : (b:bool)
	(bool_to_nat (negb b))=(minus (S O) (bool_to_nat b)).
Induction b;Auto.
Qed. Hints Resolve bool_to_nat_negb.
*)


(****************************************************************)
(* Conditionnelle polymorphique: le test est un booleen,        *)
(* les clauses d'un type quelconque (le meme pour les 2 clauses *)

Definition If (T : Set) (b : bool) (x y : T) :=
  match b with
  | true => x
  | false => y
  end.

Lemma F_If : forall (T T' : Set) (a : bool) (x y : T) (F : T -> T'), F (If T a x y) = If T' a (F x) (F y).