proposition: Lemma Intersection_is_Complement_Union (classic: forall P: Prop, P \/ ~ P): forall {U: Type} (A B: Ensemble U), Same_set (Intersection _ A B) (Complement _ (Union _ (Complement _ A) (Complement _ B))).
proof: Proof. intros. rewrite Same_set_spec. intros x; unfold Complement, Ensembles.In. rewrite Union_spec, Intersection_spec. destruct (classic (A x)), (classic (B x)); tauto. Qed.
imports: Coq.Classes.Morphisms Coq.Classes.Equivalence Coq.Sets.Ensembles Coq.Sets.Constructive_sets CertiGraph.lib.Coqlib CertiGraph.lib.EquivDec_ext