(* This code is copyrighted by its authors; it is distributed under  *)
(* the terms of the LGPL license (see LICENSE and description files) *)
(* Contribution to the Coq Library   V6.3 (July 1999)                    *)
(****************************************************************************)
(*                                                                          *)
(*                                                                          *)
(*                   Solange Coupet-Grimal & Line Jakubiec                  *)
(*                                                                          *)
(*                                                                          *)
(*                 Laboratoire d'Informatique de Marseille                  *)
(*                   Technopole de Chateau-Gombert                          *)
(*                   39, Rue F. Joliot Curie                                *)
(*                   13453 MARSEILLE Cedex 13                               *)
(*           e-mail:{Solange.Coupet,Line.Jakubiec}@lim.univ-mrs.fr          *)
(*                                                                          *)
(*                                                                          *)
(*                                Coq V5.10                                 *)
(*                              May 30th 1996                               *)
(*                                                                          *)
(****************************************************************************)
(*                               Lib_Prop.v                                 *)
(****************************************************************************)
Inductive or3 (A B C : Prop) : Set :=
| or3_Left : A -> or3 A B C
| or3_Middle : B -> or3 A B C
| or3_Right : C -> or3 A B C.
intros A B H; elim H; split; auto.
Qed.
Hint Immediate sym_and.
simple induction 1; auto.
Qed.
Hint Immediate sym_or.
unfold not in |- *.
intros A B H G; apply H.
elim G; auto.
Qed.
Hint Resolve no_and_l.
unfold not in |- *.
intros A B H G; apply H.
elim G; auto.
Qed.
Hint Resolve no_and_r.
intros A B H G; elim G; auto.
intro; absurd A; auto.
Qed.
intros A B H G; elim G; auto.
intro; absurd A; auto.
Qed.
intros.
apply no_or with (C /\ D); auto.
Qed.
intros.
apply no_or_inv with (C /\ D); auto.
Qed.
unfold not in |- *; auto.
Qed.
Hint Resolve no_no_A.
unfold not in |- *; auto.
Qed.
intros A B not_A A_or_B.
elim A_or_B; auto.
intro; absurd A; auto.
Qed.

Lemma no_or_l : forall A B : Prop, ~ B -> A \/ B -> A.