Built with Alectryon, running Coq+SerAPI v8.10.0+0.7.0. Coq sources are in this panel; goals and messages will appear in the other. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus.
(************************************************************************) (* * The Coq Proof Assistant / The Coq Development Team *) (* v * INRIA, CNRS and contributors - Copyright 1999-2018 *) (* <O___,, * (see CREDITS file for the list of authors) *) (* \VV/ **************************************************************) (* // * This file is distributed under the terms of the *) (* * GNU Lesser General Public License Version 2.1 *) (* * (see LICENSE file for the text of the license) *) (************************************************************************) (****************************************************************************) (* *) (* 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. *) (****************************************************************************) Require Export Ensembles. Require Export Constructive_sets. Require Export Relations_1. Require Export Relations_1_facts. Require Export Partial_Order. Require Export Cpo. Require Export Powerset. Require Export Powerset_facts. Require Export Classical. Require Export Classical_sets. Section Sets_as_an_algebra. Variable U : Type.U:Typeforall (A B : Ensemble U) (x : U), ~ In U A x -> Strict_Included U (Add U A x) (Add U B x) -> Strict_Included U A BU:Typeforall (A B : Ensemble U) (x : U), ~ In U A x -> Strict_Included U (Add U A x) (Add U B x) -> Strict_Included U A BU:TypeA, B:Ensemble Ux:UH':~ In U A xH'0:Strict_Included U (Add U A x) (Add U B x)Included U A B /\ A <> BU:TypeA, B:Ensemble Ux:UH':~ In U A xH'0:Strict_Included U (Add U A x) (Add U B x)Included U (Add U A x) (Add U B x) /\ Inhabited U (Setminus U (Add U B x) (Add U A x)) -> Included U A B /\ A <> BU:TypeA, B:Ensemble Ux:UH':~ In U A xH'0:Included U (Add U A x) (Add U B x) /\ Inhabited U (Setminus U (Add U B x) (Add U A x))Included U A BU:TypeA, B:Ensemble Ux:UH':~ In U A xH'0:Included U (Add U A x) (Add U B x) /\ Inhabited U (Setminus U (Add U B x) (Add U A x))A <> BU:TypeA, B:Ensemble Ux:UH':~ In U A xH'0:Included U (Add U A x) (Add U B x) /\ Inhabited U (Setminus U (Add U B x) (Add U A x))A <> BU:TypeA, B:Ensemble Ux:UH':~ In U A xH'1:Included U (Add U A x) (Add U B x)forall x0 : U, In U (Setminus U (Add U B x) (Add U A x)) x0 -> A <> BU:TypeA, B:Ensemble Ux:UH':~ In U A xH'1:Included U (Add U A x) (Add U B x)x0:UH'0:In U (Setminus U (Add U B x) (Add U A x)) x0A <> BU:TypeA, B:Ensemble Ux:UH':~ In U A xH'1:Included U (Add U A x) (Add U B x)x0:UH'0:In U (Setminus U (Add U B x) (Add U A x)) x0H'2:A = BFalserewrite <- H'2; auto with sets. Qed.U:TypeA, B:Ensemble Ux:UH':~ In U A xH'1:Included U (Add U A x) (Add U B x)x0:UH'2:A = BIn U (Add U B x) x0 -> ~ In U (Add U A x) x0 -> FalseU:Typeforall (X : Ensemble U) (x : U), In U X x -> Included U (Subtract U X x) XU:Typeforall (X : Ensemble U) (x : U), In U X x -> Included U (Subtract U X x) Xintros x0 H'0; elim H'0; auto with sets. Qed.U:TypeX:Ensemble Ux:UH':In U X xforall x0 : U, In U (Subtract U X x) x0 -> In U X x0U:Typeforall (X Y : Ensemble U) (x : U), Included U X Y -> Included U (Subtract U X x) (Subtract U Y x)U:Typeforall (X Y : Ensemble U) (x : U), Included U X Y -> Included U (Subtract U X x) (Subtract U Y x)U:TypeX, Y:Ensemble Ux:UH':Included U X Yforall x0 : U, In U (Subtract U X x) x0 -> In U (Subtract U Y x) x0U:TypeX, Y:Ensemble Ux:UH':Included U X Yx0:UH'0:In U (Subtract U X x) x0In U X x0 -> ~ In U (Singleton U x) x0 -> In U (Subtract U Y x) x0apply Subtract_intro; auto with sets. Qed.U:TypeX, Y:Ensemble Ux:UH':Included U X Yx0:UH'0:In U (Subtract U X x) x0H'1:In U X x0H'2:~ In U (Singleton U x) x0In U (Subtract U Y x) x0U:Typeforall (X : Ensemble U) (x : U), Included U (Subtract U (Add U X x) x) XU:Typeforall (X : Ensemble U) (x : U), Included U (Subtract U (Add U X x) x) XU:TypeX:Ensemble Ux:Uforall x0 : U, In U (Subtract U (Add U X x) x) x0 -> In U X x0U:TypeX:Ensemble Ux, x0:UH':In U (Subtract U (Add U X x) x) x0In U (Add U X x) x0 -> ~ In U (Singleton U x) x0 -> In U X x0intros t H'1 H'2; elim H'2; auto with sets. Qed.U:TypeX:Ensemble Ux, x0:UH':In U (Subtract U (Add U X x) x) x0H'0:In U (Add U X x) x0forall x1 : U, In U (Singleton U x) x1 -> ~ In U (Singleton U x) x1 -> In U X x1U:Typeforall (X : Ensemble U) (x : U), ~ In U X x -> Included U X (Subtract U (Add U X x) x)U:Typeforall (X : Ensemble U) (x : U), ~ In U X x -> Included U X (Subtract U (Add U X x) x)U:TypeX:Ensemble Ux:UH':~ In U X xforall x0 : U, In U X x0 -> In U (Subtract U (Add U X x) x) x0U:TypeX:Ensemble Ux:UH':~ In U X xx0:UH'0:In U X x0In U (Subtract U (Add U X x) x) x0red; intro H'1; apply H'; rewrite H'1; auto with sets. Qed. Hint Resolve incl_soustr_add_r: sets.U:TypeX:Ensemble Ux:UH':~ In U X xx0:UH'0:In U X x0x <> x0U:Typeforall (X : Ensemble U) (x : U), In U X x -> Included U X (Add U (Subtract U X x) x)U:Typeforall (X : Ensemble U) (x : U), In U X x -> Included U X (Add U (Subtract U X x) x)U:TypeX:Ensemble Ux:UH':In U X xforall x0 : U, In U X x0 -> In U (Add U (Subtract U X x) x) x0U:TypeX:Ensemble Ux:UH':In U X xx0:UH'0:In U X x0In U (Add U (Subtract U X x) x) x0elim K; auto with sets. Qed.U:TypeX:Ensemble Ux:UH':In U X xx0:UH'0:In U X x0K:x = x0In U (Add U (Subtract U X x) x) x0U:Typeforall (X : Ensemble U) (x : U), In U X x -> Included U (Add U (Subtract U X x) x) XU:Typeforall (X : Ensemble U) (x : U), In U X x -> Included U (Add U (Subtract U X x) x) XU:TypeX:Ensemble Ux:UH':In U X xforall x0 : U, In U (Add U (Subtract U X x) x) x0 -> In U X x0U:TypeX:Ensemble Ux:UH':In U X xx0:UH'0:In U (Add U (Subtract U X x) x) x0forall x1 : U, In U (Subtract U X x) x1 -> In U X x1U:TypeX:Ensemble Ux:UH':In U X xx0:UH'0:In U (Add U (Subtract U X x) x) x0forall x1 : U, In U (Singleton U x) x1 -> In U X x1U:TypeX:Ensemble Ux:UH':In U X xx0:UH'0:In U (Add U (Subtract U X x) x) x0forall x1 : U, In U (Singleton U x) x1 -> In U X x1rewrite <- (Singleton_inv U x t); auto with sets. Qed.U:TypeX:Ensemble Ux:UH':In U X xx0:UH'0:In U (Add U (Subtract U X x) x) x0t:UH'1:In U (Singleton U x) tIn U X tU:Typeforall (X : Ensemble U) (x y : U), x <> y -> Subtract U (Add U X x) y = Add U (Subtract U X y) xU:Typeforall (X : Ensemble U) (x y : U), x <> y -> Subtract U (Add U X x) y = Add U (Subtract U X y) xU:TypeX:Ensemble Ux, y:UH':x <> ySame_set U (Subtract U (Add U X x) y) (Add U (Subtract U X y) x)U:TypeX:Ensemble Ux, y:UH':x <> yforall x0 : U, In U (Subtract U (Add U X x) y) x0 -> In U (Add U (Subtract U X y) x) x0U:TypeX:Ensemble Ux, y:UH':x <> yforall x0 : U, In U (Add U (Subtract U X y) x) x0 -> In U (Subtract U (Add U X x) y) x0U:TypeX:Ensemble Ux, y:UH':x <> yx0:UH'0:In U (Subtract U (Add U X x) y) x0In U (Add U X x) x0 -> ~ In U (Singleton U y) x0 -> In U (Add U (Subtract U X y) x) x0U:TypeX:Ensemble Ux, y:UH':x <> yforall x0 : U, In U (Add U (Subtract U X y) x) x0 -> In U (Subtract U (Add U X x) y) x0U:TypeX:Ensemble Ux, y:UH':x <> yx0:UH'0:In U (Subtract U (Add U X x) y) x0H'1:In U (Add U X x) x0forall x1 : U, In U X x1 -> ~ In U (Singleton U y) x1 -> In U (Add U (Subtract U X y) x) x1U:TypeX:Ensemble Ux, y:UH':x <> yx0:UH'0:In U (Subtract U (Add U X x) y) x0H'1:In U (Add U X x) x0forall x1 : U, In U (Singleton U x) x1 -> ~ In U (Singleton U y) x1 -> In U (Add U (Subtract U X y) x) x1U:TypeX:Ensemble Ux, y:UH':x <> yforall x0 : U, In U (Add U (Subtract U X y) x) x0 -> In U (Subtract U (Add U X x) y) x0U:TypeX:Ensemble Ux, y:UH':x <> yx0:UH'0:In U (Subtract U (Add U X x) y) x0H'1:In U (Add U X x) x0u:UH'2:In U X uH'3:~ In U (Singleton U y) uIn U (Add U (Subtract U X y) x) uU:TypeX:Ensemble Ux, y:UH':x <> yx0:UH'0:In U (Subtract U (Add U X x) y) x0H'1:In U (Add U X x) x0forall x1 : U, In U (Singleton U x) x1 -> ~ In U (Singleton U y) x1 -> In U (Add U (Subtract U X y) x) x1U:TypeX:Ensemble Ux, y:UH':x <> yforall x0 : U, In U (Add U (Subtract U X y) x) x0 -> In U (Subtract U (Add U X x) y) x0U:TypeX:Ensemble Ux, y:UH':x <> yx0:UH'0:In U (Subtract U (Add U X x) y) x0H'1:In U (Add U X x) x0u:UH'2:In U X uH'3:~ In U (Singleton U y) uIn U (Subtract U X y) uU:TypeX:Ensemble Ux, y:UH':x <> yx0:UH'0:In U (Subtract U (Add U X x) y) x0H'1:In U (Add U X x) x0forall x1 : U, In U (Singleton U x) x1 -> ~ In U (Singleton U y) x1 -> In U (Add U (Subtract U X y) x) x1U:TypeX:Ensemble Ux, y:UH':x <> yforall x0 : U, In U (Add U (Subtract U X y) x) x0 -> In U (Subtract U (Add U X x) y) x0U:TypeX:Ensemble Ux, y:UH':x <> yx0:UH'0:In U (Subtract U (Add U X x) y) x0H'1:In U (Add U X x) x0forall x1 : U, In U (Singleton U x) x1 -> ~ In U (Singleton U y) x1 -> In U (Add U (Subtract U X y) x) x1U:TypeX:Ensemble Ux, y:UH':x <> yforall x0 : U, In U (Add U (Subtract U X y) x) x0 -> In U (Subtract U (Add U X x) y) x0U:TypeX:Ensemble Ux, y:UH':x <> yx0:UH'0:In U (Subtract U (Add U X x) y) x0H'1:In U (Add U X x) x0t:UH'2:In U (Singleton U x) tH'3:~ In U (Singleton U y) tIn U (Add U (Subtract U X y) x) tU:TypeX:Ensemble Ux, y:UH':x <> yforall x0 : U, In U (Add U (Subtract U X y) x) x0 -> In U (Subtract U (Add U X x) y) x0U:TypeX:Ensemble Ux, y:UH':x <> yforall x0 : U, In U (Add U (Subtract U X y) x) x0 -> In U (Subtract U (Add U X x) y) x0U:TypeX:Ensemble Ux, y:UH':x <> yu:UH'2:In U (Add U (Subtract U X y) x) uIn U (Subtract U (Add U X x) y) uU:TypeX:Ensemble Ux, y:UH':x <> yu:UH'2:In U (Add U (Subtract U X y) x) uIn U (Subtract U X y) u -> In U (Subtract U (Add U X x) y) uU:TypeX:Ensemble Ux, y:UH':x <> yu:UH'2:In U (Add U (Subtract U X y) x) ux = u -> In U (Subtract U (Add U X x) y) uintro H'0; rewrite <- H'0; auto with sets. Qed.U:TypeX:Ensemble Ux, y:UH':x <> yu:UH'2:In U (Add U (Subtract U X y) x) ux = u -> In U (Subtract U (Add U X x) y) uU:Typeforall (X Y : Ensemble U) (x : U), ~ In U X x -> Strict_Included U (Add U X x) Y -> Strict_Included U X (Subtract U Y x)U:Typeforall (X Y : Ensemble U) (x : U), ~ In U X x -> Strict_Included U (Add U X x) Y -> Strict_Included U X (Subtract U Y x)U:TypeX, Y:Ensemble Ux:UH':~ In U X xH'0:Strict_Included U (Add U X x) YStrict_Included U (Add U X x) (Add U (Subtract U Y x) x)U:TypeX, Y:Ensemble Ux:UH':~ In U X xH'0:Strict_Included U (Add U X x) YIncluded U (Add U X x) (Add U (Subtract U Y x) x)U:TypeX, Y:Ensemble Ux:UH':~ In U X xH'0:Strict_Included U (Add U X x) YAdd U X x <> Add U (Subtract U Y x) xU:TypeX, Y:Ensemble Ux:UH':~ In U X xH'0:Strict_Included U (Add U X x) YIncluded U (Add U X x) Y -> Add U X x <> Y -> Included U (Add U X x) (Add U (Subtract U Y x) x)U:TypeX, Y:Ensemble Ux:UH':~ In U X xH'0:Strict_Included U (Add U X x) YAdd U X x <> Add U (Subtract U Y x) xU:TypeX, Y:Ensemble Ux:UH':~ In U X xH'0:Strict_Included U (Add U X x) YH'1:Included U (Add U X x) YH'2:Add U X x <> YIncluded U (Add U X x) (Add U (Subtract U Y x) x)U:TypeX, Y:Ensemble Ux:UH':~ In U X xH'0:Strict_Included U (Add U X x) YAdd U X x <> Add U (Subtract U Y x) xU:TypeX, Y:Ensemble Ux:UH':~ In U X xH'0:Strict_Included U (Add U X x) YH'1:Included U (Add U X x) YH'2:Add U X x <> YTransitive (Ensemble U) (Included U) -> Included U (Add U X x) (Add U (Subtract U Y x) x)U:TypeX, Y:Ensemble Ux:UH':~ In U X xH'0:Strict_Included U (Add U X x) YAdd U X x <> Add U (Subtract U Y x) xU:TypeX, Y:Ensemble Ux:UH':~ In U X xH'0:Strict_Included U (Add U X x) YH'1:Included U (Add U X x) YH'2:Add U X x <> YH'4:forall x0 y z : Ensemble U, Included U x0 y -> Included U y z -> Included U x0 zIncluded U (Add U X x) (Add U (Subtract U Y x) x)U:TypeX, Y:Ensemble Ux:UH':~ In U X xH'0:Strict_Included U (Add U X x) YAdd U X x <> Add U (Subtract U Y x) xU:TypeX, Y:Ensemble Ux:UH':~ In U X xH'0:Strict_Included U (Add U X x) YAdd U X x <> Add U (Subtract U Y x) xU:TypeX, Y:Ensemble Ux:UH':~ In U X xH'0:Included U (Add U X x) Y /\ Add U X x <> YAdd U X x <> Add U (Subtract U Y x) xU:TypeX, Y:Ensemble Ux:UH':~ In U X xH'1:Included U (Add U X x) YH'2:Add U X x <> YAdd U X x <> Add U (Subtract U Y x) xrewrite H'0; auto 8 using add_soustr_xy, add_soustr_1, add_soustr_2 with sets. Qed.U:TypeX, Y:Ensemble Ux:UH':~ In U X xH'1:Included U (Add U X x) YH'2:Add U X x <> YH'0:Add U X x = Add U (Subtract U Y x) xAdd U X x = YU:Typeforall (X : Ensemble U) (x : U), ~ In U X x -> X = Subtract U (Add U X x) xauto using incl_soustr_add_l with sets. Qed.U:Typeforall (X : Ensemble U) (x : U), ~ In U X x -> X = Subtract U (Add U X x) xU:Typeforall (X X0 : Ensemble U) (x : U), ~ In U X x -> ~ In U X0 x -> Add U X x = Add U X0 x -> X = X0U:Typeforall (X X0 : Ensemble U) (x : U), ~ In U X x -> ~ In U X0 x -> Add U X x = Add U X0 x -> X = X0U:TypeX, X0:Ensemble Ux:UH':~ In U X xH'0:~ In U X0 xH'1:Add U X x = Add U X0 xX = X0U:TypeX, X0:Ensemble Ux:UH':~ In U X xH'0:~ In U X0 xH'1:Add U X x = Add U X0 xSubtract U (Add U X x) x = X0rewrite H'1; auto with sets. Qed.U:TypeX, X0:Ensemble Ux:UH':~ In U X xH'0:~ In U X0 xH'1:Add U X x = Add U X0 xSubtract U (Add U X x) x = Subtract U (Add U X0 x) xU:Typeforall (X A : Ensemble U) (x : U), Included U X (Add U A x) -> Included U X A \/ (exists A' : Ensemble U, X = Add U A' x /\ Included U A' A)U:Typeforall (X A : Ensemble U) (x : U), Included U X (Add U A x) -> Included U X A \/ (exists A' : Ensemble U, X = Add U A' x /\ Included U A' A)U:TypeX, A:Ensemble Ux:UH'0:Included U X (Add U A x)Included U X A \/ (exists A' : Ensemble U, X = Add U A' x /\ Included U A' A)U:TypeX, A:Ensemble Ux:UH'0:Included U X (Add U A x)In U X x -> Included U X A \/ (exists A' : Ensemble U, X = Add U A' x /\ Included U A' A)U:TypeX, A:Ensemble Ux:UH'0:Included U X (Add U A x)~ In U X x -> Included U X A \/ (exists A' : Ensemble U, X = Add U A' x /\ Included U A' A)U:TypeX, A:Ensemble Ux:UH'0:Included U X (Add U A x)H'1:In U X xexists A' : Ensemble U, X = Add U A' x /\ Included U A' AU:TypeX, A:Ensemble Ux:UH'0:Included U X (Add U A x)~ In U X x -> Included U X A \/ (exists A' : Ensemble U, X = Add U A' x /\ Included U A' A)U:TypeX, A:Ensemble Ux:UH'0:Included U X (Add U A x)H'1:In U X xX = Add U (Subtract U X x) x /\ Included U (Subtract U X x) AU:TypeX, A:Ensemble Ux:UH'0:Included U X (Add U A x)~ In U X x -> Included U X A \/ (exists A' : Ensemble U, X = Add U A' x /\ Included U A' A)U:TypeX, A:Ensemble Ux:UH'0:Included U X (Add U A x)H'1:In U X xIncluded U (Subtract U X x) AU:TypeX, A:Ensemble Ux:UH'0:Included U X (Add U A x)~ In U X x -> Included U X A \/ (exists A' : Ensemble U, X = Add U A' x /\ Included U A' A)U:TypeX, A:Ensemble Ux:UH'0:forall x0 : U, In U X x0 -> In U (Add U A x) x0H'1:In U X xIncluded U (Subtract U X x) AU:TypeX, A:Ensemble Ux:UH'0:Included U X (Add U A x)~ In U X x -> Included U X A \/ (exists A' : Ensemble U, X = Add U A' x /\ Included U A' A)U:TypeX, A:Ensemble Ux:UH'0:forall x0 : U, In U X x0 -> In U (Add U A x) x0H'1:In U X xforall x0 : U, In U (Subtract U X x) x0 -> In U A x0U:TypeX, A:Ensemble Ux:UH'0:Included U X (Add U A x)~ In U X x -> Included U X A \/ (exists A' : Ensemble U, X = Add U A' x /\ Included U A' A)U:TypeX, A:Ensemble Ux:UH'0:forall x1 : U, In U X x1 -> In U (Add U A x) x1H'1:In U X xx0:UH'2:In U (Subtract U X x) x0In U A x0U:TypeX, A:Ensemble Ux:UH'0:Included U X (Add U A x)~ In U X x -> Included U X A \/ (exists A' : Ensemble U, X = Add U A' x /\ Included U A' A)U:TypeX, A:Ensemble Ux:UH'0:forall x1 : U, In U X x1 -> In U (Add U A x) x1H'1:In U X xx0:UH'2:In U (Subtract U X x) x0In U X x0 /\ x <> x0 -> In U A x0U:TypeX, A:Ensemble Ux:UH'0:Included U X (Add U A x)~ In U X x -> Included U X A \/ (exists A' : Ensemble U, X = Add U A' x /\ Included U A' A)U:TypeX, A:Ensemble Ux:UH'0:forall x1 : U, In U X x1 -> In U (Add U A x) x1H'1:In U X xx0:UH'2:In U (Subtract U X x) x0K:In U X x0K':x <> x0In U A x0U:TypeX, A:Ensemble Ux:UH'0:Included U X (Add U A x)~ In U X x -> Included U X A \/ (exists A' : Ensemble U, X = Add U A' x /\ Included U A' A)U:TypeX, A:Ensemble Ux:UH'0:forall x1 : U, In U X x1 -> In U (Add U A x) x1H'1:In U X xx0:UH'2:In U (Subtract U X x) x0K:In U X x0K':x <> x0In U (Add U A x) x0 -> In U A x0U:TypeX, A:Ensemble Ux:UH'0:Included U X (Add U A x)~ In U X x -> Included U X A \/ (exists A' : Ensemble U, X = Add U A' x /\ Included U A' A)U:TypeX, A:Ensemble Ux:UH'0:forall x1 : U, In U X x1 -> In U (Add U A x) x1H'1:In U X xx0:UH'2:In U (Subtract U X x) x0K:In U X x0K':x <> x0H'3:In U (Add U A x) x0In U A x0U:TypeX, A:Ensemble Ux:UH'0:Included U X (Add U A x)~ In U X x -> Included U X A \/ (exists A' : Ensemble U, X = Add U A' x /\ Included U A' A)U:TypeX, A:Ensemble Ux:UH'0:forall x1 : U, In U X x1 -> In U (Add U A x) x1H'1:In U X xx0:UH'2:In U (Subtract U X x) x0K:In U X x0K':x <> x0H'3:In U (Add U A x) x0In U A x0 \/ x = x0 -> In U A x0U:TypeX, A:Ensemble Ux:UH'0:Included U X (Add U A x)~ In U X x -> Included U X A \/ (exists A' : Ensemble U, X = Add U A' x /\ Included U A' A)U:TypeX, A:Ensemble Ux:UH'0:forall x1 : U, In U X x1 -> In U (Add U A x) x1H'1:In U X xx0:UH'2:In U (Subtract U X x) x0K:In U X x0K':x <> x0H'3:In U (Add U A x) x0H'5:x = x0In U A x0U:TypeX, A:Ensemble Ux:UH'0:Included U X (Add U A x)~ In U X x -> Included U X A \/ (exists A' : Ensemble U, X = Add U A' x /\ Included U A' A)U:TypeX, A:Ensemble Ux:UH'0:Included U X (Add U A x)~ In U X x -> Included U X A \/ (exists A' : Ensemble U, X = Add U A' x /\ Included U A' A)U:TypeX, A:Ensemble Ux:UH'0:Included U X (Add U A x)H'1:~ In U X xIncluded U X AU:TypeX, A:Ensemble Ux:UH'0:forall x0 : U, In U X x0 -> In U (Add U A x) x0H'1:~ In U X xIncluded U X AU:TypeX, A:Ensemble Ux:UH'0:forall x0 : U, In U X x0 -> In U (Add U A x) x0H'1:~ In U X xforall x0 : U, In U X x0 -> In U A x0U:TypeX, A:Ensemble Ux:UH'0:forall x1 : U, In U X x1 -> In U (Add U A x) x1H'1:~ In U X xx0:UH'2:In U X x0In U A x0U:TypeX, A:Ensemble Ux:UH'0:forall x1 : U, In U X x1 -> In U (Add U A x) x1H'1:~ In U X xx0:UH'2:In U X x0In U (Add U A x) x0 -> In U A x0U:TypeX, A:Ensemble Ux:UH'0:forall x1 : U, In U X x1 -> In U (Add U A x) x1H'1:~ In U X xx0:UH'2:In U X x0H'3:In U (Add U A x) x0In U A x0U:TypeX, A:Ensemble Ux:UH'0:forall x1 : U, In U X x1 -> In U (Add U A x) x1H'1:~ In U X xx0:UH'2:In U X x0H'3:In U (Add U A x) x0In U A x0 \/ x = x0 -> In U A x0U:TypeX, A:Ensemble Ux:UH'0:forall x1 : U, In U X x1 -> In U (Add U A x) x1H'1:~ In U X xx0:UH'2:In U X x0H'3:In U (Add U A x) x0H'5:x = x0In U A x0rewrite <- H'5; auto with sets. Qed.U:TypeX, A:Ensemble Ux:UH'0:forall x1 : U, In U X x1 -> In U (Add U A x) x1H'1:~ In U X xx0:UH'2:In U X x0H'3:In U (Add U A x) x0H'5:x = x0~ In U X x0U:Typeforall A x y : Ensemble U, covers (Ensemble U) (Power_set_PO U A) y x -> Strict_Included U x y /\ (forall z : Ensemble U, Included U x z -> Included U z y -> x = z \/ z = y)U:Typeforall A x y : Ensemble U, covers (Ensemble U) (Power_set_PO U A) y x -> Strict_Included U x y /\ (forall z : Ensemble U, Included U x z -> Included U z y -> x = z \/ z = y)U:TypeA, x, y:Ensemble UH':covers (Ensemble U) (Power_set_PO U A) y xStrict_Rel_of (Ensemble U) (Power_set_PO U A) x y -> ~ (exists z : Ensemble U, Strict_Rel_of (Ensemble U) (Power_set_PO U A) x z /\ Strict_Rel_of (Ensemble U) (Power_set_PO U A) z y) -> Strict_Included U x y /\ (forall z : Ensemble U, Included U x z -> Included U z y -> x = z \/ z = y)U:TypeA, x, y:Ensemble UH':covers (Ensemble U) (Power_set_PO U A) y xIncluded U x y /\ x <> y -> ~ (exists z : Ensemble U, (Included U x z /\ x <> z) /\ Included U z y /\ z <> y) -> Strict_Included U x y /\ (forall z : Ensemble U, Included U x z -> Included U z y -> x = z \/ z = y)U:TypeA, x, y:Ensemble UH':covers (Ensemble U) (Power_set_PO U A) y xH'0:Included U x y /\ x <> yH'1:~ (exists z : Ensemble U, (Included U x z /\ x <> z) /\ Included U z y /\ z <> y)forall z : Ensemble U, Included U x z -> Included U z y -> x = z \/ z = yU:TypeA, x, y:Ensemble UH':covers (Ensemble U) (Power_set_PO U A) y xH'0:Included U x y /\ x <> yH'1:~ (exists z0 : Ensemble U, (Included U x z0 /\ x <> z0) /\ Included U z0 y /\ z0 <> y)z:Ensemble UH'2:Included U x zH'3:Included U z yx = z \/ z = yU:TypeA, x, y:Ensemble UH':covers (Ensemble U) (Power_set_PO U A) y xH'0:Included U x y /\ x <> yH'1:~ (exists z0 : Ensemble U, (Included U x z0 /\ x <> z0) /\ Included U z0 y /\ z0 <> y)z:Ensemble UH'2:Included U x zH'3:Included U z yx <> z -> x = z \/ z = yU:TypeA, x, y:Ensemble UH':covers (Ensemble U) (Power_set_PO U A) y xH'0:Included U x y /\ x <> yH'1:~ (exists z0 : Ensemble U, (Included U x z0 /\ x <> z0) /\ Included U z0 y /\ z0 <> y)z:Ensemble UH'2:Included U x zH'3:Included U z yH'4:x <> zz = yU:TypeA, x, y:Ensemble UH':covers (Ensemble U) (Power_set_PO U A) y xH'0:Included U x y /\ x <> yH'1:~ (exists z0 : Ensemble U, (Included U x z0 /\ x <> z0) /\ Included U z0 y /\ z0 <> y)z:Ensemble UH'2:Included U x zH'3:Included U z yH'4:x <> zz <> y -> z = yU:TypeA, x, y:Ensemble UH':covers (Ensemble U) (Power_set_PO U A) y xH'0:Included U x y /\ x <> yH'1:~ (exists z0 : Ensemble U, (Included U x z0 /\ x <> z0) /\ Included U z0 y /\ z0 <> y)z:Ensemble UH'2:Included U x zH'3:Included U z yH'4:x <> zH'5:z <> yz = yexists z; auto with sets. Qed.U:TypeA, x, y:Ensemble UH':covers (Ensemble U) (Power_set_PO U A) y xH'0:Included U x y /\ x <> yH'1:~ (exists z0 : Ensemble U, (Included U x z0 /\ x <> z0) /\ Included U z0 y /\ z0 <> y)z:Ensemble UH'2:Included U x zH'3:Included U z yH'4:x <> zH'5:z <> yexists z0 : Ensemble U, (Included U x z0 /\ x <> z0) /\ Included U z0 y /\ z0 <> yU:Typeforall A a : Ensemble U, Included U a A -> forall x : U, In U A x -> ~ In U a x -> covers (Ensemble U) (Power_set_PO U A) (Add U a x) aU:Typeforall A a : Ensemble U, Included U a A -> forall x : U, In U A x -> ~ In U a x -> covers (Ensemble U) (Power_set_PO U A) (Add U a x) aU:TypeA, a:Ensemble UH':Included U a Ax:UH'0:In U A xH'1:~ In U a xcovers (Ensemble U) (Power_set_PO U A) (Add U a x) aU:TypeA, a:Ensemble UH':Included U a Ax:UH'0:In U A xH'1:~ In U a xStrict_Included U a (Add U a x)U:TypeA, a:Ensemble UH':Included U a Ax:UH'0:In U A xH'1:~ In U a x~ (exists z : Ensemble U, Strict_Included U a z /\ Strict_Included U z (Add U a x))U:TypeA, a:Ensemble UH':Included U a Ax:UH'0:In U A xH'1:~ In U a xIncluded U a (Add U a x) /\ a <> Add U a xU:TypeA, a:Ensemble UH':Included U a Ax:UH'0:In U A xH'1:~ In U a x~ (exists z : Ensemble U, Strict_Included U a z /\ Strict_Included U z (Add U a x))U:TypeA, a:Ensemble UH':Included U a Ax:UH'0:In U A xH'1:~ In U a xH'2:a = Add U a xFalseU:TypeA, a:Ensemble UH':Included U a Ax:UH'0:In U A xH'1:~ In U a x~ (exists z : Ensemble U, Strict_Included U a z /\ Strict_Included U z (Add U a x))U:TypeA, a:Ensemble UH':Included U a Ax:UH'0:In U A xH'1:~ In U a xH'2:a = Add U a xIn U a xU:TypeA, a:Ensemble UH':Included U a Ax:UH'0:In U A xH'1:~ In U a x~ (exists z : Ensemble U, Strict_Included U a z /\ Strict_Included U z (Add U a x))U:TypeA, a:Ensemble UH':Included U a Ax:UH'0:In U A xH'1:~ In U a x~ (exists z : Ensemble U, Strict_Included U a z /\ Strict_Included U z (Add U a x))U:TypeA, a:Ensemble UH':Included U a Ax:UH'0:In U A xH'1:~ In U a xforall x0 : Ensemble U, Strict_Included U a x0 /\ Strict_Included U x0 (Add U a x) -> FalseU:TypeA, a:Ensemble UH':Included U a Ax:UH'0:In U A xH'1:~ In U a xz:Ensemble UH'3:Strict_Included U a zH'4:Strict_Included U z (Add U a x)FalseU:TypeA, a:Ensemble UH':Included U a Ax:UH'0:In U A xH'1:~ In U a xz:Ensemble UH'4:Strict_Included U z (Add U a x)Included U a z /\ Inhabited U (Setminus U z a) -> FalseU:TypeA, a:Ensemble UH':Included U a Ax:UH'0:In U A xH'1:~ In U a xz:Ensemble UH'4:Strict_Included U z (Add U a x)H'3:Included U a zforall x0 : U, In U (Setminus U z a) x0 -> FalseU:TypeA, a:Ensemble UH':Included U a Ax:UH'0:In U A xH'1:~ In U a xz:Ensemble UH'4:Strict_Included U z (Add U a x)H'3:Included U a zx0:UH'2:In U (Setminus U z a) x0In U z x0 -> ~ In U a x0 -> FalseU:TypeA, a:Ensemble UH':Included U a Ax:UH'0:In U A xH'1:~ In U a xz:Ensemble UH'4:Strict_Included U z (Add U a x)H'3:Included U a zx0:UH'2:In U (Setminus U z a) x0H'5:In U z x0H'6:~ In U a x0FalseU:TypeA, a:Ensemble UH':Included U a Ax:UH'0:In U A xH'1:~ In U a xz:Ensemble UH'4:Strict_Included U z (Add U a x)H'3:Included U a zx0:UH'2:In U (Setminus U z a) x0H'5:In U z x0H'6:~ In U a x0K:Strict_Included U z (Add U a x)FalseU:TypeA, a:Ensemble UH':Included U a Ax:UH'0:In U A xH'1:~ In U a xz:Ensemble UH'4:Included U z (Add U a x) /\ z <> Add U a xH'3:Included U a zx0:UH'2:In U (Setminus U z a) x0H'5:In U z x0H'6:~ In U a x0K:Strict_Included U z (Add U a x)FalseU:TypeA, a:Ensemble UH':Included U a Ax:UH'0:In U A xH'1:~ In U a xz:Ensemble UH'3:Included U a zx0:UH'2:In U (Setminus U z a) x0H'5:In U z x0H'6:~ In U a x0K:Strict_Included U z (Add U a x)H'8:forall x1 : U, In U z x1 -> In U (Add U a x) x1H'9:z <> Add U a xFalseU:TypeA, a:Ensemble UH':Included U a Ax:UH'0:In U A xH'1:~ In U a xz:Ensemble UH'3:Included U a zx0:UH'2:In U (Setminus U z a) x0H'5:In U z x0H'6:~ In U a x0K:Strict_Included U z (Add U a x)H'8:forall x1 : U, In U z x1 -> In U (Add U a x) x1H'9:z <> Add U a xIn U (Add U a x) x0 -> FalseU:TypeA, a:Ensemble UH':Included U a Ax:UH'0:In U A xH'1:~ In U a xz:Ensemble UH'3:Included U a zx0:UH'2:In U (Setminus U z a) x0H'5:In U z x0H'6:~ In U a x0K:Strict_Included U z (Add U a x)H'8:forall x1 : U, In U z x1 -> In U (Add U a x) x1H'9:z <> Add U a xH'7:In U (Add U a x) x0FalseU:TypeA, a:Ensemble UH':Included U a Ax:UH'0:In U A xH'1:~ In U a xz:Ensemble UH'3:Included U a zx0:UH'2:In U (Setminus U z a) x0H'5:In U z x0H'6:~ In U a x0K:Strict_Included U z (Add U a x)H'8:forall x1 : U, In U z x1 -> In U (Add U a x) x1H'9:z <> Add U a xH'7:In U (Add U a x) x0x = x0 -> FalseU:TypeA, a:Ensemble UH':Included U a Ax:UH'0:In U A xH'1:~ In U a xz:Ensemble UH'3:Included U a zx0:UH'2:In U (Setminus U z a) x0H'5:In U z x0H'6:~ In U a x0K:Strict_Included U z (Add U a x)H'8:forall x1 : U, In U z x1 -> In U (Add U a x) x1H'9:z <> Add U a xH'7:In U (Add U a x) x0H'15:x = x0FalseU:TypeA, a:Ensemble UH':Included U a Ax:UH'0:In U A xH'1:~ In U a xz:Ensemble UH'3:Included U a zx0:UH'2:In U (Setminus U z a) x0H'5:In U z x0H'6:~ In U a x0K:Strict_Included U z (Add U a x)H'8:forall x1 : U, In U z x1 -> In U (Add U a x) x1H'9:z <> Add U a xH'7:In U (Add U a x) x0H'15:x = x0Included U (Add U a x) z -> FalseU:TypeA, a:Ensemble UH':Included U a Ax:UH'0:In U A xH'1:~ In U a xz:Ensemble UH'3:Included U a zx0:UH'2:In U (Setminus U z a) x0H'5:In U z x0H'6:~ In U a x0K:Strict_Included U z (Add U a x)H'8:forall x1 : U, In U z x1 -> In U (Add U a x) x1H'9:z <> Add U a xH'7:In U (Add U a x) x0H'15:x = x0Included U (Add U a x) zU:TypeA, a:Ensemble UH':Included U a Ax:UH'0:In U A xH'1:~ In U a xz:Ensemble UH'3:Included U a zx0:UH'2:In U (Setminus U z a) x0H'5:In U z x0H'6:~ In U a x0K:Strict_Included U z (Add U a x)H'8:forall x1 : U, In U z x1 -> In U (Add U a x) x1H'9:z <> Add U a xH'7:In U (Add U a x) x0H'15:x = x0H'10:Included U (Add U a x) zFalseU:TypeA, a:Ensemble UH':Included U a Ax:UH'0:In U A xH'1:~ In U a xz:Ensemble UH'3:Included U a zx0:UH'2:In U (Setminus U z a) x0H'5:In U z x0H'6:~ In U a x0K:Strict_Included U z (Add U a x)H'8:forall x1 : U, In U z x1 -> In U (Add U a x) x1H'9:z <> Add U a xH'7:In U (Add U a x) x0H'15:x = x0Included U (Add U a x) zU:TypeA, a:Ensemble UH':Included U a Ax:UH'0:In U A xH'1:~ In U a xz:Ensemble UH'3:Included U a zx0:UH'2:In U (Setminus U z a) x0H'5:In U z x0H'6:~ In U a x0K:Included U z (Add U a x) /\ z <> Add U a xH'8:forall x1 : U, In U z x1 -> In U (Add U a x) x1H'9:z <> Add U a xH'7:In U (Add U a x) x0H'15:x = x0H'10:Included U (Add U a x) zFalseU:TypeA, a:Ensemble UH':Included U a Ax:UH'0:In U A xH'1:~ In U a xz:Ensemble UH'3:Included U a zx0:UH'2:In U (Setminus U z a) x0H'5:In U z x0H'6:~ In U a x0K:Strict_Included U z (Add U a x)H'8:forall x1 : U, In U z x1 -> In U (Add U a x) x1H'9:z <> Add U a xH'7:In U (Add U a x) x0H'15:x = x0Included U (Add U a x) zU:TypeA, a:Ensemble UH':Included U a Ax:UH'0:In U A xH'1:~ In U a xz:Ensemble UH'3:Included U a zx0:UH'2:In U (Setminus U z a) x0H'5:In U z x0H'6:~ In U a x0K:Strict_Included U z (Add U a x)H'8:forall x1 : U, In U z x1 -> In U (Add U a x) x1H'9:z <> Add U a xH'7:In U (Add U a x) x0H'15:x = x0Included U (Add U a x) zU:TypeA, a:Ensemble UH':Included U a Ax:UH'0:In U A xH'1:~ In U a xz:Ensemble UH'3:Included U a zx0:UH'2:In U (Setminus U z a) x0H'5:In U z x0H'6:~ In U a x0K:Strict_Included U z (Add U a x)H'8:forall x1 : U, In U z x1 -> In U (Add U a x) x1H'9:z <> Add U a xH'7:In U (Add U a x) x0H'15:x = x0Included U (Add U a x0) zU:TypeA, a:Ensemble UH':Included U a Ax:UH'0:In U A xH'1:~ In U a xz:Ensemble UH'3:Included U a zx0:UH'2:In U (Setminus U z a) x0H'5:In U z x0H'6:~ In U a x0K:Strict_Included U z (Add U a x)H'8:forall x1 : U, In U z x1 -> In U (Add U a x) x1H'9:z <> Add U a xH'7:In U (Add U a x) x0H'15:x = x0forall x1 : U, In U (Add U a x0) x1 -> In U z x1intros x2 H'11; elim H'11; auto with sets. Qed.U:TypeA, a:Ensemble UH':Included U a Ax:UH'0:In U A xH'1:~ In U a xz:Ensemble UH'3:Included U a zx0:UH'2:In U (Setminus U z a) x0H'5:In U z x0H'6:~ In U a x0K:Strict_Included U z (Add U a x)H'8:forall x2 : U, In U z x2 -> In U (Add U a x) x2H'9:z <> Add U a xH'7:In U (Add U a x) x0H'15:x = x0x1:UH'10:In U (Add U a x0) x1forall x2 : U, In U (Singleton U x0) x2 -> In U z x2U:Typeforall A a a' : Ensemble U, Included U a A -> Included U a' A -> covers (Ensemble U) (Power_set_PO U A) a' a -> exists x : U, a' = Add U a x /\ In U A x /\ ~ In U a xU:Typeforall A a a' : Ensemble U, Included U a A -> Included U a' A -> covers (Ensemble U) (Power_set_PO U A) a' a -> exists x : U, a' = Add U a x /\ In U A x /\ ~ In U a xU:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'1:covers (Ensemble U) (Power_set_PO U A) a' aexists x : U, a' = Add U a x /\ In U A x /\ ~ In U a xU:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'1:covers (Ensemble U) (Power_set_PO U A) a' aStrict_Included U a a' -> (forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a') -> exists x : U, a' = Add U a x /\ In U A x /\ ~ In U a xU:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'1:covers (Ensemble U) (Power_set_PO U A) a' aH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'exists x : U, a' = Add U a x /\ In U A x /\ ~ In U a xU:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'exists x : U, a' = Add U a x /\ In U A x /\ ~ In U a xU:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'Included U a a' -> Inhabited U (Setminus U a' a) -> exists x : U, a' = Add U a x /\ In U A x /\ ~ In U a xU:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'H'5:Included U a a'H'8:Inhabited U (Setminus U a' a)forall x : U, In U (Setminus U a' a) x -> exists x0 : U, a' = Add U a x0 /\ In U A x0 /\ ~ In U a x0U:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'H'5:Included U a a'H'8:Inhabited U (Setminus U a' a)x:UH'1:In U (Setminus U a' a) xIn U a' x -> ~ In U a x -> exists x0 : U, a' = Add U a x0 /\ In U A x0 /\ ~ In U a x0U:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'H'5:Included U a a'H'8:Inhabited U (Setminus U a' a)x:UH'1:In U (Setminus U a' a) xH'2:In U a' xH'3:~ In U a xexists x0 : U, a' = Add U a x0 /\ In U A x0 /\ ~ In U a x0U:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'H'5:Included U a a'H'8:Inhabited U (Setminus U a' a)x:UH'1:In U (Setminus U a' a) xH'2:In U a' xH'3:~ In U a xa' = Add U a x /\ In U A x /\ ~ In U a xU:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'H'5:Included U a a'H'8:Inhabited U (Setminus U a' a)x:UH'1:In U (Setminus U a' a) xH'2:In U a' xH'3:~ In U a xa' = Add U a xU:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'H'5:Included U a a'H'8:Inhabited U (Setminus U a' a)x:UH'1:In U (Setminus U a' a) xH'2:In U a' xH'3:~ In U a xIn U A x /\ ~ In U a xU:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'H'5:Included U a a'x:UH'2:In U a' xH'3:~ In U a xa' = Add U a xU:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'H'5:Included U a a'H'8:Inhabited U (Setminus U a' a)x:UH'1:In U (Setminus U a' a) xH'2:In U a' xH'3:~ In U a xIn U A x /\ ~ In U a xU:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'H'5:Included U a a'x:UH'2:In U a' xH'3:~ In U a xa = Add U a x -> a' = Add U a xU:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'H'5:Included U a a'x:UH'2:In U a' xH'3:~ In U a xIncluded U (Add U a x) a'U:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'H'5:Included U a a'H'8:Inhabited U (Setminus U a' a)x:UH'1:In U (Setminus U a' a) xH'2:In U a' xH'3:~ In U a xIn U A x /\ ~ In U a xU:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'H'5:Included U a a'x:UH'2:In U a' xH'3:~ In U a xH'1:a = Add U a xa' = Add U a xU:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'H'5:Included U a a'x:UH'2:In U a' xH'3:~ In U a xIncluded U (Add U a x) a'U:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'H'5:Included U a a'H'8:Inhabited U (Setminus U a' a)x:UH'1:In U (Setminus U a' a) xH'2:In U a' xH'3:~ In U a xIn U A x /\ ~ In U a xU:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'H'5:Included U a a'x:UH'2:In U a' xH'3:~ In U a xH'1:a = Add U a xa <> Add U a xU:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'H'5:Included U a a'x:UH'2:In U a' xH'3:~ In U a xIncluded U (Add U a x) a'U:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'H'5:Included U a a'H'8:Inhabited U (Setminus U a' a)x:UH'1:In U (Setminus U a' a) xH'2:In U a' xH'3:~ In U a xIn U A x /\ ~ In U a xU:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'H'5:Included U a a'x:UH'2:In U a' xH'3:~ In U a xH'1, H'8:a = Add U a xFalseU:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'H'5:Included U a a'x:UH'2:In U a' xH'3:~ In U a xIncluded U (Add U a x) a'U:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'H'5:Included U a a'H'8:Inhabited U (Setminus U a' a)x:UH'1:In U (Setminus U a' a) xH'2:In U a' xH'3:~ In U a xIn U A x /\ ~ In U a xU:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'H'5:Included U a a'x:UH'2:In U a' xH'3:~ In U a xH'1, H'8:a = Add U a xIn U a xU:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'H'5:Included U a a'x:UH'2:In U a' xH'3:~ In U a xIncluded U (Add U a x) a'U:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'H'5:Included U a a'H'8:Inhabited U (Setminus U a' a)x:UH'1:In U (Setminus U a' a) xH'2:In U a' xH'3:~ In U a xIn U A x /\ ~ In U a xU:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'H'5:Included U a a'x:UH'2:In U a' xH'3:~ In U a xIncluded U (Add U a x) a'U:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'H'5:Included U a a'H'8:Inhabited U (Setminus U a' a)x:UH'1:In U (Setminus U a' a) xH'2:In U a' xH'3:~ In U a xIn U A x /\ ~ In U a xU:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'H'5:Included U a a'x:UH'2:In U a' xH'3:~ In U a xIncluded U (Add U a x) a'U:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'H'5:Included U a a'H'8:Inhabited U (Setminus U a' a)x:UH'1:In U (Setminus U a' a) xH'2:In U a' xH'3:~ In U a xIn U A x /\ ~ In U a xU:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'H'5:Included U a a'x:UH'2:In U a' xH'3:~ In U a xforall x0 : U, In U (Add U a x) x0 -> In U a' x0U:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'H'5:Included U a a'H'8:Inhabited U (Setminus U a' a)x:UH'1:In U (Setminus U a' a) xH'2:In U a' xH'3:~ In U a xIn U A x /\ ~ In U a xU:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'H'5:Included U a a'x:UH'2:In U a' xH'3:~ In U a xx0:UH'1:In U (Add U a x) x0forall x1 : U, In U (Singleton U x) x1 -> In U a' x1U:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'H'5:Included U a a'H'8:Inhabited U (Setminus U a' a)x:UH'1:In U (Setminus U a' a) xH'2:In U a' xH'3:~ In U a xIn U A x /\ ~ In U a xU:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'H'5:Included U a a'H'8:Inhabited U (Setminus U a' a)x:UH'1:In U (Setminus U a' a) xH'2:In U a' xH'3:~ In U a xIn U A x /\ ~ In U a xred in H'0; auto with sets. Qed.U:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AH'6:Strict_Included U a a'H'7:forall z : Ensemble U, Included U a z -> Included U z a' -> a = z \/ z = a'H'5:Included U a a'H'8:Inhabited U (Setminus U a' a)x:UH'1:In U (Setminus U a' a) xH'2:In U a' xH'3:~ In U a xIn U A xU:Typeforall A a a' : Ensemble U, Included U a A -> Included U a' A -> covers (Ensemble U) (Power_set_PO U A) a' a <-> (exists x : U, a' = Add U a x /\ In U A x /\ ~ In U a x)U:Typeforall A a a' : Ensemble U, Included U a A -> Included U a' A -> covers (Ensemble U) (Power_set_PO U A) a' a <-> (exists x : U, a' = Add U a x /\ In U A x /\ ~ In U a x)U:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AK:covers (Ensemble U) (Power_set_PO U A) a' aexists x : U, a' = Add U a x /\ In U A x /\ ~ In U a xU:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AK:exists x : U, a' = Add U a x /\ In U A x /\ ~ In U a xcovers (Ensemble U) (Power_set_PO U A) a' aU:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AK:exists x : U, a' = Add U a x /\ In U A x /\ ~ In U a xcovers (Ensemble U) (Power_set_PO U A) a' aU:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AK:exists x : U, a' = Add U a x /\ In U A x /\ ~ In U a xforall x : U, a' = Add U a x /\ In U A x /\ ~ In U a x -> covers (Ensemble U) (Power_set_PO U A) a' aapply Add_covers; intuition. Qed.U:TypeA, a, a':Ensemble UH':Included U a AH'0:Included U a' AK:exists x0 : U, a' = Add U a x0 /\ In U A x0 /\ ~ In U a x0x:UH'2:a' = Add U a xH'3:In U A x /\ ~ In U a xcovers (Ensemble U) (Power_set_PO U A) (Add U a x) aU:Typeforall (x : U) (A : Ensemble U), In U A x -> covers (Ensemble U) (Power_set_PO U A) (Singleton U x) (Empty_set U)U:Typeforall (x : U) (A : Ensemble U), In U A x -> covers (Ensemble U) (Power_set_PO U A) (Singleton U x) (Empty_set U)U:Typex:UA:Ensemble UH':In U A xcovers (Ensemble U) (Power_set_PO U A) (Singleton U x) (Empty_set U)apply Add_covers; auto with sets. Qed.U:Typex:UA:Ensemble UH':In U A xcovers (Ensemble U) (Power_set_PO U A) (Add U (Empty_set U) x) (Empty_set U)U:Typeforall (X : Ensemble U) (x : U), Strict_Included U X (Singleton U x) -> X = Empty_set UU:Typeforall (X : Ensemble U) (x : U), Strict_Included U X (Singleton U x) -> X = Empty_set UU:TypeX:Ensemble Ux:UH':Strict_Included U X (Singleton U x)X = Empty_set UU:TypeX:Ensemble Ux:UH':Included U X (Singleton U x) /\ X <> Singleton U xX = Empty_set UU:TypeX:Ensemble Ux:UH':Included U X (Singleton U x) /\ X <> Singleton U xH'2:covers (Ensemble U) (Power_set_PO U (Full_set U)) (Singleton U x) (Empty_set U)X = Empty_set UU:TypeX:Ensemble Ux:UH'2:covers (Ensemble U) (Power_set_PO U (Full_set U)) (Singleton U x) (Empty_set U)H'0:Included U X (Singleton U x)H'1:X <> Singleton U xX = Empty_set UU:TypeX:Ensemble Ux:UH'2:covers (Ensemble U) (Power_set_PO U (Full_set U)) (Singleton U x) (Empty_set U)H'0:Included U X (Singleton U x)H'1:X <> Singleton U xH'6:Strict_Included U (Empty_set U) (Singleton U x)H'7:forall z : Ensemble U, Included U (Empty_set U) z -> Included U z (Singleton U x) -> Empty_set U = z \/ z = Singleton U xX = Empty_set Uelim H'1; auto with sets. Qed. End Sets_as_an_algebra. Hint Resolve incl_soustr_in: sets. Hint Resolve incl_soustr: sets. Hint Resolve incl_soustr_add_l: sets. Hint Resolve incl_soustr_add_r: sets. Hint Resolve add_soustr_1 add_soustr_2: sets. Hint Resolve add_soustr_xy: sets.U:TypeX:Ensemble Ux:UH'2:covers (Ensemble U) (Power_set_PO U (Full_set U)) (Singleton U x) (Empty_set U)H'0:Included U X (Singleton U x)H'1:X <> Singleton U xH'6:Strict_Included U (Empty_set U) (Singleton U x)H'7:forall z : Ensemble U, Included U (Empty_set U) z -> Included U z (Singleton U x) -> Empty_set U = z \/ z = Singleton U xH'5:X = Singleton U xX = Empty_set U