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 Finite_sets. Require Export Constructive_sets. Require Export Classical. Require Export Classical_sets. Require Export Powerset. Require Export Powerset_facts. Require Export Powerset_Classical_facts. Require Export Gt. Require Export Lt. Require Export Le. Require Export Finite_sets_facts. Require Export Image. Require Export Infinite_sets. Require Export Compare_dec. Require Export Relations_1. Require Export Partial_Order. Require Export Cpo. Section Integers_sect. Inductive Integers : Ensemble nat := Integers_defn : forall x:nat, In nat Integers x.Reflexive nat lered; auto with arith. Qed.Reflexive nat leAntisymmetric nat lered; intros x y H H'; rewrite (le_antisym x y); auto. Qed.Antisymmetric nat leTransitive nat lered; intros; apply le_trans with y; auto. Qed.Transitive nat leOrder nat lesplit; [exact le_reflexive | exact le_trans | exact le_antisym]. Qed.Order nat leforall n : nat, In nat Integers nexact Integers_defn. Qed.forall n : nat, In nat Integers nPO natInhabited nat IntegersOrder nat leIn nat Integers 0Order nat leexact le_Order. Defined.Order nat leTotally_ordered nat nat_po IntegersTotally_ordered nat nat_po IntegersIncluded nat Integers (Carrier_of nat nat_po) -> forall x y : nat, Included nat (Couple nat x y) Integers -> Rel_of nat nat_po x y \/ Rel_of nat nat_po y xIncluded nat Integers Integers -> forall x y : nat, Included nat (Couple nat x y) Integers -> x <= y \/ y <= xH':Included nat Integers Integersx, y:natH'0:Included nat (Couple nat x y) Integersx <= y \/ y <= xH':Included nat Integers Integersx, y:natH'0:Included nat (Couple nat x y) Integersx <= y -> x <= y \/ y <= xH':Included nat Integers Integersx, y:natH'0:Included nat (Couple nat x y) Integersy < x -> x <= y \/ y <= xH':Included nat Integers Integersx, y:natH'0:Included nat (Couple nat x y) Integersy < x -> x <= y \/ y <= xcut (y <= x); auto with sets arith. Qed.H':Included nat Integers Integersx, y:natH'0:Included nat (Couple nat x y) IntegersH'1:y < xy <= xforall X : Ensemble nat, Finite nat X -> exists m : nat, Upper_Bound nat nat_po X mforall X : Ensemble nat, Finite nat X -> exists m : nat, Upper_Bound nat nat_po X mX:Ensemble natH':Finite nat Xexists m : nat, Upper_Bound nat nat_po (Empty_set nat) mX:Ensemble natH':Finite nat Xforall A : Ensemble nat, Finite nat A -> (exists m : nat, Upper_Bound nat nat_po A m) -> forall x : nat, ~ In nat A x -> exists m : nat, Upper_Bound nat nat_po (Add nat A x) mX:Ensemble natH':Finite nat XUpper_Bound nat nat_po (Empty_set nat) 0X:Ensemble natH':Finite nat Xforall A : Ensemble nat, Finite nat A -> (exists m : nat, Upper_Bound nat nat_po A m) -> forall x : nat, ~ In nat A x -> exists m : nat, Upper_Bound nat nat_po (Add nat A x) mX:Ensemble natH':Finite nat XIn nat (Carrier_of nat nat_po) 0X:Ensemble natH':Finite nat Xforall y : nat, In nat (Empty_set nat) y -> Rel_of nat nat_po y 0X:Ensemble natH':Finite nat Xforall A : Ensemble nat, Finite nat A -> (exists m : nat, Upper_Bound nat nat_po A m) -> forall x : nat, ~ In nat A x -> exists m : nat, Upper_Bound nat nat_po (Add nat A x) mX:Ensemble natH':Finite nat XIn nat (Carrier_of nat {| Carrier_of := Integers; Rel_of := le; PO_cond1 := Inhabited_intro nat Integers 0 (Integers_defn 0); PO_cond2 := le_Order |}) 0X:Ensemble natH':Finite nat Xforall y : nat, In nat (Empty_set nat) y -> Rel_of nat nat_po y 0X:Ensemble natH':Finite nat Xforall A : Ensemble nat, Finite nat A -> (exists m : nat, Upper_Bound nat nat_po A m) -> forall x : nat, ~ In nat A x -> exists m : nat, Upper_Bound nat nat_po (Add nat A x) mX:Ensemble natH':Finite nat XIn nat Integers 0X:Ensemble natH':Finite nat Xforall y : nat, In nat (Empty_set nat) y -> Rel_of nat nat_po y 0X:Ensemble natH':Finite nat Xforall A : Ensemble nat, Finite nat A -> (exists m : nat, Upper_Bound nat nat_po A m) -> forall x : nat, ~ In nat A x -> exists m : nat, Upper_Bound nat nat_po (Add nat A x) mX:Ensemble natH':Finite nat Xforall y : nat, In nat (Empty_set nat) y -> Rel_of nat nat_po y 0X:Ensemble natH':Finite nat Xforall A : Ensemble nat, Finite nat A -> (exists m : nat, Upper_Bound nat nat_po A m) -> forall x : nat, ~ In nat A x -> exists m : nat, Upper_Bound nat nat_po (Add nat A x) mX:Ensemble natH':Finite nat Xforall A : Ensemble nat, Finite nat A -> (exists m : nat, Upper_Bound nat nat_po A m) -> forall x : nat, ~ In nat A x -> exists m : nat, Upper_Bound nat nat_po (Add nat A x) mX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat AH'1:exists m : nat, Upper_Bound nat nat_po A mx:natH'2:~ In nat A xexists m : nat, Upper_Bound nat nat_po (Add nat A x) mX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0exists m : nat, Upper_Bound nat nat_po (Add nat A x) mX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0(Included nat Integers (Carrier_of nat nat_po) -> forall x1 y : nat, Included nat (Couple nat x1 y) Integers -> Rel_of nat nat_po x1 y \/ Rel_of nat nat_po y x1) -> exists m : nat, Upper_Bound nat nat_po (Add nat A x) mX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0(Included nat Integers Integers -> forall x1 y : nat, Included nat (Couple nat x1 y) Integers -> x1 <= y \/ y <= x1) -> exists m : nat, Upper_Bound nat nat_po (Add nat A x) mX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'1:Included nat Integers Integers -> forall x1 y : nat, Included nat (Couple nat x1 y) Integers -> x1 <= y \/ y <= x1exists m : nat, Upper_Bound nat nat_po (Add nat A x) mX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'1:Included nat Integers Integers -> forall x1 y : nat, Included nat (Couple nat x1 y) Integers -> x1 <= y \/ y <= x1H'4:forall x1 y : nat, Included nat (Couple nat x1 y) Integers -> x1 <= y \/ y <= x1exists m : nat, Upper_Bound nat nat_po (Add nat A x) mX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'1:Included nat Integers Integers -> forall x1 y : nat, Included nat (Couple nat x1 y) Integers -> x1 <= y \/ y <= x1H'4:forall x1 y : nat, Included nat (Couple nat x1 y) Integers -> x1 <= y \/ y <= x1(Included nat (Couple nat x0 x) Integers -> x0 <= x \/ x <= x0) -> exists m : nat, Upper_Bound nat nat_po (Add nat A x) mX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'1:Included nat Integers Integers -> forall x1 y : nat, Included nat (Couple nat x1 y) Integers -> x1 <= y \/ y <= x1(Included nat (Couple nat x0 x) Integers -> x0 <= x \/ x <= x0) -> exists m : nat, Upper_Bound nat nat_po (Add nat A x) mX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0(Included nat (Couple nat x0 x) Integers -> x0 <= x \/ x <= x0) -> exists m : nat, Upper_Bound nat nat_po (Add nat A x) mX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x0 <= xexists m : nat, Upper_Bound nat nat_po (Add nat A x) mX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x <= x0exists m : nat, Upper_Bound nat nat_po (Add nat A x) mX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0Included nat (Couple nat x0 x) IntegersX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x0 <= xUpper_Bound nat nat_po (Add nat A x) xX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x <= x0exists m : nat, Upper_Bound nat nat_po (Add nat A x) mX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0Included nat (Couple nat x0 x) IntegersX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x0 <= xIn nat (Carrier_of nat nat_po) xX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x0 <= xforall y : nat, In nat (Add nat A x) y -> Rel_of nat nat_po y xX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x <= x0exists m : nat, Upper_Bound nat nat_po (Add nat A x) mX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0Included nat (Couple nat x0 x) IntegersX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x0 <= xIn nat Integers xX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x0 <= xforall y : nat, In nat (Add nat A x) y -> Rel_of nat nat_po y xX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x <= x0exists m : nat, Upper_Bound nat nat_po (Add nat A x) mX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0Included nat (Couple nat x0 x) IntegersX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x0 <= xforall y : nat, In nat (Add nat A x) y -> Rel_of nat nat_po y xX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x <= x0exists m : nat, Upper_Bound nat nat_po (Add nat A x) mX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0Included nat (Couple nat x0 x) IntegersX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x0 <= xy:natH'1:In nat (Add nat A x) yforall x1 : nat, In nat A x1 -> Rel_of nat nat_po x1 xX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x0 <= xy:natH'1:In nat (Add nat A x) yforall x1 : nat, In nat (Singleton nat x) x1 -> Rel_of nat nat_po x1 xX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x <= x0exists m : nat, Upper_Bound nat nat_po (Add nat A x) mX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0Included nat (Couple nat x0 x) IntegersX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x0 <= xy:natH'1:In nat (Add nat A x) yTransitive nat le -> forall x1 : nat, In nat A x1 -> Rel_of nat nat_po x1 xX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x0 <= xy:natH'1:In nat (Add nat A x) yforall x1 : nat, In nat (Singleton nat x) x1 -> Rel_of nat nat_po x1 xX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x <= x0exists m : nat, Upper_Bound nat nat_po (Add nat A x) mX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0Included nat (Couple nat x0 x) IntegersX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x0 <= xy:natH'1:In nat (Add nat A x) yH'4:forall x1 y0 z : nat, x1 <= y0 -> y0 <= z -> x1 <= zforall x1 : nat, In nat A x1 -> Rel_of nat nat_po x1 xX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x0 <= xy:natH'1:In nat (Add nat A x) yforall x1 : nat, In nat (Singleton nat x) x1 -> Rel_of nat nat_po x1 xX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x <= x0exists m : nat, Upper_Bound nat nat_po (Add nat A x) mX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0Included nat (Couple nat x0 x) IntegersX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x0 <= xy:natH'1:In nat (Add nat A x) yH'4:forall x2 y0 z : nat, x2 <= y0 -> y0 <= z -> x2 <= zx1:natH'6:In nat A x1Rel_of nat nat_po x1 xX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x0 <= xy:natH'1:In nat (Add nat A x) yforall x1 : nat, In nat (Singleton nat x) x1 -> Rel_of nat nat_po x1 xX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x <= x0exists m : nat, Upper_Bound nat nat_po (Add nat A x) mX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0Included nat (Couple nat x0 x) IntegersX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x0 <= xy:natH'1:In nat (Add nat A x) yH'4:forall x2 y0 z : nat, x2 <= y0 -> y0 <= z -> x2 <= zx1:natH'6:In nat A x1x1 <= x0X:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x0 <= xy:natH'1:In nat (Add nat A x) yH'4:forall x2 y0 z : nat, x2 <= y0 -> y0 <= z -> x2 <= zx1:natH'6:In nat A x1x0 <= xX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x0 <= xy:natH'1:In nat (Add nat A x) yforall x1 : nat, In nat (Singleton nat x) x1 -> Rel_of nat nat_po x1 xX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x <= x0exists m : nat, Upper_Bound nat nat_po (Add nat A x) mX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0Included nat (Couple nat x0 x) IntegersX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x0 <= xy:natH'1:In nat (Add nat A x) yH'4:forall x2 y0 z : nat, x2 <= y0 -> y0 <= z -> x2 <= zx1:natH'6:In nat A x1x0 <= xX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x0 <= xy:natH'1:In nat (Add nat A x) yforall x1 : nat, In nat (Singleton nat x) x1 -> Rel_of nat nat_po x1 xX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x <= x0exists m : nat, Upper_Bound nat nat_po (Add nat A x) mX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0Included nat (Couple nat x0 x) IntegersX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x0 <= xy:natH'1:In nat (Add nat A x) yforall x1 : nat, In nat (Singleton nat x) x1 -> Rel_of nat nat_po x1 xX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x <= x0exists m : nat, Upper_Bound nat nat_po (Add nat A x) mX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0Included nat (Couple nat x0 x) IntegersX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x0 <= xy:natH'1:In nat (Add nat A x) yx1:natH'4:In nat (Singleton nat x) x1Rel_of nat nat_po x xX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x <= x0exists m : nat, Upper_Bound nat nat_po (Add nat A x) mX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0Included nat (Couple nat x0 x) IntegersX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x <= x0exists m : nat, Upper_Bound nat nat_po (Add nat A x) mX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0Included nat (Couple nat x0 x) IntegersX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x <= x0Upper_Bound nat nat_po (Add nat A x) x0X:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0Included nat (Couple nat x0 x) IntegersX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x <= x0In nat (Carrier_of nat nat_po) x0X:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x <= x0forall y : nat, In nat (Add nat A x) y -> Rel_of nat nat_po y x0X:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0Included nat (Couple nat x0 x) IntegersX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x <= x0In nat (Carrier_of nat {| Carrier_of := Integers; Rel_of := le; PO_cond1 := Inhabited_intro nat Integers 0 (Integers_defn 0); PO_cond2 := le_Order |}) x0X:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x <= x0forall y : nat, In nat (Add nat A x) y -> Rel_of nat nat_po y x0X:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0Included nat (Couple nat x0 x) IntegersX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x <= x0In nat Integers x0X:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x <= x0forall y : nat, In nat (Add nat A x) y -> Rel_of nat nat_po y x0X:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0Included nat (Couple nat x0 x) IntegersX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x <= x0forall y : nat, In nat (Add nat A x) y -> Rel_of nat nat_po y x0X:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0Included nat (Couple nat x0 x) IntegersX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x <= x0y:natH'1:In nat (Add nat A x) yforall x1 : nat, In nat A x1 -> Rel_of nat nat_po x1 x0X:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x <= x0y:natH'1:In nat (Add nat A x) yforall x1 : nat, In nat (Singleton nat x) x1 -> Rel_of nat nat_po x1 x0X:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0Included nat (Couple nat x0 x) IntegersX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x <= x0y:natH'1:In nat (Add nat A x) yx1:natH'4:In nat A x1Rel_of nat nat_po x1 x0X:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x <= x0y:natH'1:In nat (Add nat A x) yforall x1 : nat, In nat (Singleton nat x) x1 -> Rel_of nat nat_po x1 x0X:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0Included nat (Couple nat x0 x) IntegersX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0H'5:x <= x0y:natH'1:In nat (Add nat A x) yforall x1 : nat, In nat (Singleton nat x) x1 -> Rel_of nat nat_po x1 x0X:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0Included nat (Couple nat x0 x) IntegersX:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0Included nat (Couple nat x0 x) Integersintros x1 H'1; elim H'1; apply triv_nat. Qed.X:Ensemble natH':Finite nat XA:Ensemble natH'0:Finite nat Ax:natH'2:~ In nat A xx0:natH'3:Upper_Bound nat nat_po A x0forall x1 : nat, In nat (Couple nat x0 x) x1 -> In nat Integers x1~ (exists m : nat, Upper_Bound nat nat_po Integers m)~ (exists m : nat, Upper_Bound nat nat_po Integers m)H':exists m : nat, Upper_Bound nat nat_po Integers mforall x : nat, Upper_Bound nat nat_po Integers x -> FalseH':exists m : nat, Upper_Bound nat nat_po Integers mx:natH'0:Upper_Bound nat nat_po Integers xFalseH':exists m : nat, Upper_Bound nat nat_po Integers mx:natH'0:Upper_Bound nat nat_po Integers xH'1:In nat (Carrier_of nat nat_po) xH'2:forall y : nat, In nat Integers y -> Rel_of nat nat_po y xFalseH':exists m : nat, Upper_Bound nat nat_po Integers mx:natH'0:Upper_Bound nat nat_po Integers xH'1:In nat (Carrier_of nat nat_po) xH'2:forall y : nat, In nat Integers y -> Rel_of nat nat_po y xIn nat Integers (S x) -> FalseH':exists m : nat, Upper_Bound nat nat_po Integers mx:natH'0:Upper_Bound nat nat_po Integers xH'1:In nat (Carrier_of nat nat_po) xH'2:forall y : nat, In nat Integers y -> Rel_of nat nat_po y xIn nat Integers (S x)H':exists m : nat, Upper_Bound nat nat_po Integers mx:natH'0:Upper_Bound nat nat_po Integers xH'1:In nat (Carrier_of nat nat_po) xH'2:forall y : nat, In nat Integers y -> Rel_of nat nat_po y xH'3:In nat Integers (S x)FalseH':exists m : nat, Upper_Bound nat nat_po Integers mx:natH'0:Upper_Bound nat nat_po Integers xH'1:In nat (Carrier_of nat nat_po) xH'2:forall y : nat, In nat Integers y -> Rel_of nat nat_po y xIn nat Integers (S x)H':exists m : nat, Upper_Bound nat nat_po Integers mx:natH'0:Upper_Bound nat nat_po Integers xH'1:In nat (Carrier_of nat nat_po) xH'3:In nat Integers (S x)H'5:Rel_of nat nat_po (S x) xFalseH':exists m : nat, Upper_Bound nat nat_po Integers mx:natH'0:Upper_Bound nat nat_po Integers xH'1:In nat (Carrier_of nat nat_po) xH'2:forall y : nat, In nat Integers y -> Rel_of nat nat_po y xIn nat Integers (S x)H':exists m : nat, Upper_Bound nat nat_po Integers mx:natH'0:Upper_Bound nat nat_po Integers xH'1:In nat (Carrier_of nat nat_po) xH'3:In nat Integers (S x)H'5:S x <= xFalseH':exists m : nat, Upper_Bound nat nat_po Integers mx:natH'0:Upper_Bound nat nat_po Integers xH'1:In nat (Carrier_of nat nat_po) xH'2:forall y : nat, In nat Integers y -> Rel_of nat nat_po y xIn nat Integers (S x)apply triv_nat. Qed.H':exists m : nat, Upper_Bound nat nat_po Integers mx:natH'0:Upper_Bound nat nat_po Integers xH'1:In nat (Carrier_of nat nat_po) xH'2:forall y : nat, In nat Integers y -> Rel_of nat nat_po y xIn nat Integers (S x)~ Finite nat Integers~ Finite nat Integers~ (exists m : nat, Upper_Bound nat nat_po Integers m) -> ~ Finite nat IntegersH':~ (exists m : nat, Upper_Bound nat nat_po Integers m)H'0:Finite nat IntegersFalseapply Finite_subset_has_lub; auto with sets arith. Qed. End Integers_sect.H':~ (exists m : nat, Upper_Bound nat nat_po Integers m)H'0:Finite nat Integersexists m : nat, Upper_Bound nat nat_po Integers m