summaryrefslogtreecommitdiff
path: root/theories7/Sets/Classical_sets.v
diff options
context:
space:
mode:
Diffstat (limited to 'theories7/Sets/Classical_sets.v')
-rwxr-xr-xtheories7/Sets/Classical_sets.v133
1 files changed, 133 insertions, 0 deletions
diff --git a/theories7/Sets/Classical_sets.v b/theories7/Sets/Classical_sets.v
new file mode 100755
index 00000000..a6928ffd
--- /dev/null
+++ b/theories7/Sets/Classical_sets.v
@@ -0,0 +1,133 @@
+(************************************************************************)
+(* v * The Coq Proof Assistant / The Coq Development Team *)
+(* <O___,, * CNRS-Ecole Polytechnique-INRIA Futurs-Universite Paris Sud *)
+(* \VV/ **************************************************************)
+(* // * This file is distributed under the terms of the *)
+(* * GNU Lesser General Public License Version 2.1 *)
+(************************************************************************)
+(****************************************************************************)
+(* *)
+(* Naive Set Theory in Coq *)
+(* *)
+(* INRIA INRIA *)
+(* Rocquencourt Sophia-Antipolis *)
+(* *)
+(* Coq V6.1 *)
+(* *)
+(* Gilles Kahn *)
+(* Gerard Huet *)
+(* *)
+(* *)
+(* *)
+(* Acknowledgments: This work was started in July 1993 by F. Prost. Thanks *)
+(* to the Newton Institute for providing an exceptional work environment *)
+(* in Summer 1995. Several developments by E. Ledinot were an inspiration. *)
+(****************************************************************************)
+
+(*i $Id: Classical_sets.v,v 1.1.2.1 2004/07/16 19:31:38 herbelin Exp $ i*)
+
+Require Export Ensembles.
+Require Export Constructive_sets.
+Require Export Classical_Type.
+
+(* Hints Unfold not . *)
+
+Section Ensembles_classical.
+Variable U: Type.
+
+Lemma not_included_empty_Inhabited:
+ (A: (Ensemble U)) ~ (Included U A (Empty_set U)) -> (Inhabited U A).
+Proof.
+Intros A NI.
+Elim (not_all_ex_not U [x:U]~(In U A x)).
+Intros x H; Apply Inhabited_intro with x.
+Apply NNPP; Auto with sets.
+Red; Intro.
+Apply NI; Red.
+Intros x H'; Elim (H x); Trivial with sets.
+Qed.
+Hints Resolve not_included_empty_Inhabited.
+
+Lemma not_empty_Inhabited:
+ (A: (Ensemble U)) ~ A == (Empty_set U) -> (Inhabited U A).
+Proof.
+Intros; Apply not_included_empty_Inhabited.
+Red; Auto with sets.
+Qed.
+
+Lemma Inhabited_Setminus :
+(X, Y: (Ensemble U)) (Included U X Y) -> ~ (Included U Y X) ->
+ (Inhabited U (Setminus U Y X)).
+Proof.
+Intros X Y I NI.
+Elim (not_all_ex_not U [x:U](In U Y x)->(In U X x) NI).
+Intros x YX.
+Apply Inhabited_intro with x.
+Apply Setminus_intro.
+Apply not_imply_elim with (In U X x); Trivial with sets.
+Auto with sets.
+Qed.
+Hints Resolve Inhabited_Setminus.
+
+Lemma Strict_super_set_contains_new_element:
+ (X, Y: (Ensemble U)) (Included U X Y) -> ~ X == Y ->
+ (Inhabited U (Setminus U Y X)).
+Proof.
+Auto 7 with sets.
+Qed.
+Hints Resolve Strict_super_set_contains_new_element.
+
+Lemma Subtract_intro:
+ (A: (Ensemble U)) (x, y: U) (In U A y) -> ~ x == y ->
+ (In U (Subtract U A x) y).
+Proof.
+Unfold 1 Subtract; Auto with sets.
+Qed.
+Hints Resolve Subtract_intro.
+
+Lemma Subtract_inv:
+ (A: (Ensemble U)) (x, y: U) (In U (Subtract U A x) y) ->
+ (In U A y) /\ ~ x == y.
+Proof.
+Intros A x y H'; Elim H'; Auto with sets.
+Qed.
+
+Lemma Included_Strict_Included:
+ (X, Y: (Ensemble U)) (Included U X Y) -> (Strict_Included U X Y) \/ X == Y.
+Proof.
+Intros X Y H'; Try Assumption.
+Elim (classic X == Y); Auto with sets.
+Qed.
+
+Lemma Strict_Included_inv:
+ (X, Y: (Ensemble U)) (Strict_Included U X Y) ->
+ (Included U X Y) /\ (Inhabited U (Setminus U Y X)).
+Proof.
+Intros X Y H'; Red in H'.
+Split; [Tauto | Idtac].
+Elim H'; Intros H'0 H'1; Try Exact H'1; Clear H'.
+Apply Strict_super_set_contains_new_element; Auto with sets.
+Qed.
+
+Lemma not_SIncl_empty:
+ (X: (Ensemble U)) ~ (Strict_Included U X (Empty_set U)).
+Proof.
+Intro X; Red; Intro H'; Try Exact H'.
+LApply (Strict_Included_inv X (Empty_set U)); Auto with sets.
+Intro H'0; Elim H'0; Intros H'1 H'2; Elim H'2; Clear H'0.
+Intros x H'0; Elim H'0.
+Intro H'3; Elim H'3.
+Qed.
+
+Lemma Complement_Complement :
+ (A: (Ensemble U)) (Complement U (Complement U A)) == A.
+Proof.
+Unfold Complement; Intros; Apply Extensionality_Ensembles; Auto with sets.
+Red; Split; Auto with sets.
+Red; Intros; Apply NNPP; Auto with sets.
+Qed.
+
+End Ensembles_classical.
+
+Hints Resolve Strict_super_set_contains_new_element Subtract_intro
+ not_SIncl_empty : sets v62.