(* Contribution to the Coq Library   V6.3 (July 1999)                    *)
(***************************************************************************)
(* File: useful.v                                                          *)
(* auteur: alex@sysal.ibp.fr                                               *)
(* date: 19/10/95                                                          *)
(***************************************************************************)
(***************************************************************************)
(* Many useful lemmas                                                      *)
(***************************************************************************)
(* Proof of lem_and_fact                                                   *)
intros; tauto.
Qed.
(* End of proof of lem_and_fact                                            *)
(* Proof of lem_and_dist                                                   *)
intros; tauto.
Qed.
(* End of proof of lem_and_dist                                            *)
(* Proof of lem_or_fact                                                    *)
intros; tauto.
Qed.
(* End of proof of lem_or_fact                                             *)
(* Proof of lem_or_dist                                                    *)
intros; tauto.
Qed.
(* End of proof of lem_or_dist                                             *)
(* Proof                                                                   *)
intros; tauto.
Qed.
(* End of proof                                                            *)
(* Proof                                                                   *)
intros; tauto.
Qed.
(* End of proof                                                            *)
(* Proof                                                                   *)
intros; tauto.
Qed.
(* End of proof                                                            *)
(* Proof                                                                   *)
intros; tauto.
Qed.
(* End of proof                                                            *)
(* Proof                                                                   *)
intros; tauto.
Qed.
(* End of proof                                                            *)
(* Note : le /\ est associatif a droite en CoQ don pas de lemme symmetrique*)
(* Proof                                                                   *)
intros; tauto.
Qed.
(* End of proof                                                            *)
(* Proof                                                                   *)
intros; tauto.
Qed.
(* End of proof                                                            *)
(* Proof                                                                   *)
intros; tauto.
Qed.
(* End of proof                                                            *)
(* Note : le \/ est associatif a droite en CoQ don pas de lemme symmetrique*)
(* Proof                                                                   *)
intros; tauto.
Qed.
(* End of proof                                                            *)
(* Proof                                                                   *)
intros; tauto.
Qed.
(* End of proof                                                            *)
(* Proof of lem_iff_sym                                                    *)
intros; tauto.
Qed.
(* End of proof of lem_iff_sym                                             *)
(* Proof of lem_or_sym                                                     *)
intros.
elim H; clear H; intros.
right; assumption.
left; assumption.
Qed.
(* End of proof of lem_or_sym                                              *)
(* Proof of lem_and_sym                                                    *)
intros; tauto.
Qed.
(* End of proof of lem_and_sym                                             *)
(* Proof of lem_or_expand                                                  *)
intros; tauto.
Qed.
(* End of proof of lem_or_expand                                           *)
(* Proof of lem_and_expand                                                 *)
intros; tauto.
Qed.
(* End of proof of lem_and_expand                                          *)
(* Proof of lem_or_contract                                                *)
intros; tauto.
Qed.
(* End of proof of lem_or_contract                                         *)

Lemma lem_and_contract : forall a : Prop, a /\ a -> a.