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. Section Image. Variables U V : Type. Inductive Im (X:Ensemble U) (f:U -> V) : Ensemble V := Im_intro : forall x:U, In _ X x -> forall y:V, y = f x -> In _ (Im X f) y.U, V:Typeforall (X : Ensemble U) (f : U -> V) (x : U), In U X x -> In V (Im X f) (f x)U, V:Typeforall (X : Ensemble U) (f : U -> V) (x : U), In U X x -> In V (Im X f) (f x)apply Im_intro with (x := x); auto with sets. Qed.U, V:TypeX:Ensemble Uf:U -> Vx:UH':In U X xIn V (Im X f) (f x)U, V:Typeforall (X : Ensemble U) (x : U) (f : U -> V), Im (Add U X x) f = Add V (Im X f) (f x)U, V:Typeforall (X : Ensemble U) (x : U) (f : U -> V), Im (Add U X x) f = Add V (Im X f) (f x)U, V:TypeX:Ensemble Ux:Uf:U -> VIm (Add U X x) f = Add V (Im X f) (f x)U, V:TypeX:Ensemble Ux:Uf:U -> VSame_set V (Im (Add U X x) f) (Add V (Im X f) (f x))U, V:TypeX:Ensemble Ux:Uf:U -> Vx0:VH':In V (Im (Add U X x) f) x0In V (Add V (Im X f) (f x)) x0U, V:TypeX:Ensemble Ux:Uf:U -> Vx0:VH':In V (Add V (Im X f) (f x)) x0In V (Im (Add U X x) f) x0U, V:TypeX:Ensemble Ux:Uf:U -> Vx0:VH':In V (Im (Add U X x) f) x0x1:UH:In U (Add U X x) x1y:VH0:y = f x1In V (Add V (Im X f) (f x)) yU, V:TypeX:Ensemble Ux:Uf:U -> Vx0:VH':In V (Add V (Im X f) (f x)) x0In V (Im (Add U X x) f) x0U, V:TypeX:Ensemble Ux:Uf:U -> Vx0:VH':In V (Im (Add U X x) f) x0x1:UH:In U (Add U X x) x1y:VH0:y = f x1In V (Add V (Im X f) (f x)) (f x1)U, V:TypeX:Ensemble Ux:Uf:U -> Vx0:VH':In V (Add V (Im X f) (f x)) x0In V (Im (Add U X x) f) x0U, V:TypeX:Ensemble Ux:Uf:U -> Vx0:VH':In V (Im (Add U X x) f) x0x1:UH:In U (Add U X x) x1y:VH0:y = f x1x = x1 -> In V (Add V (Im X f) (f x)) (f x1)U, V:TypeX:Ensemble Ux:Uf:U -> Vx0:VH':In V (Add V (Im X f) (f x)) x0In V (Im (Add U X x) f) x0U, V:TypeX:Ensemble Ux:Uf:U -> Vx0:VH':In V (Add V (Im X f) (f x)) x0In V (Im (Add U X x) f) x0U, V:TypeX:Ensemble Ux:Uf:U -> Vx0:VH':In V (Add V (Im X f) (f x)) x0In V (Im X f) x0 -> In V (Im (Add U X x) f) x0U, V:TypeX:Ensemble Ux:Uf:U -> Vx0:VH':In V (Add V (Im X f) (f x)) x0f x = x0 -> In V (Im (Add U X x) f) x0U, V:TypeX:Ensemble Ux:Uf:U -> Vx0:VH':In V (Add V (Im X f) (f x)) x0In V (Add V (Im X f) (f x)) x0U, V:TypeX:Ensemble Ux:Uf:U -> Vy:VH':In V (Add V (Im X f) (f x)) yx0:UH:In U X x0H0:y = f x0In V (Im (Add U X x) f) yU, V:TypeX:Ensemble Ux:Uf:U -> Vx0:VH':In V (Add V (Im X f) (f x)) x0f x = x0 -> In V (Im (Add U X x) f) x0U, V:TypeX:Ensemble Ux:Uf:U -> Vx0:VH':In V (Add V (Im X f) (f x)) x0In V (Add V (Im X f) (f x)) x0U, V:TypeX:Ensemble Ux:Uf:U -> Vx0:VH':In V (Add V (Im X f) (f x)) x0f x = x0 -> In V (Im (Add U X x) f) x0U, V:TypeX:Ensemble Ux:Uf:U -> Vx0:VH':In V (Add V (Im X f) (f x)) x0In V (Add V (Im X f) (f x)) x0trivial. Qed.U, V:TypeX:Ensemble Ux:Uf:U -> Vx0:VH':In V (Add V (Im X f) (f x)) x0In V (Add V (Im X f) (f x)) x0U, V:Typeforall f : U -> V, Im (Empty_set U) f = Empty_set VU, V:Typeforall f : U -> V, Im (Empty_set U) f = Empty_set VU, V:Typef:U -> VIm (Empty_set U) f = Empty_set VU, V:Typef:U -> VSame_set V (Im (Empty_set U) f) (Empty_set V)U, V:Typef:U -> VIncluded V (Im (Empty_set U) f) (Empty_set V)U, V:Typef:U -> Vforall x : V, In V (Im (Empty_set U) f) x -> In V (Empty_set V) xintros x0 H'0; elim H'0; auto with sets. Qed.U, V:Typef:U -> Vx:VH':In V (Im (Empty_set U) f) xforall x0 : U, In U (Empty_set U) x0 -> forall y : V, y = f x0 -> In V (Empty_set V) yU, V:Typeforall (X : Ensemble U) (f : U -> V), Finite U X -> Finite V (Im X f)U, V:Typeforall (X : Ensemble U) (f : U -> V), Finite U X -> Finite V (Im X f)U, V:TypeX:Ensemble Uf:U -> VH':Finite U XFinite V (Im (Empty_set U) f)U, V:TypeX:Ensemble Uf:U -> VH':Finite U Xforall A : Ensemble U, Finite U A -> Finite V (Im A f) -> forall x : U, ~ In U A x -> Finite V (Im (Add U A x) f)U, V:TypeX:Ensemble Uf:U -> VH':Finite U Xforall A : Ensemble U, Finite U A -> Finite V (Im A f) -> forall x : U, ~ In U A x -> Finite V (Im (Add U A x) f)U, V:Typef:U -> VA:Ensemble UH'0:Finite U AH'1:Finite V (Im A f)x:UH'2:~ In U A xFinite V (Im (Add U A x) f)apply Add_preserves_Finite; auto with sets. Qed.U, V:Typef:U -> VA:Ensemble UH'0:Finite U AH'1:Finite V (Im A f)x:UH'2:~ In U A xFinite V (Add V (Im A f) (f x))U, V:Typeforall (X : Ensemble U) (f : U -> V) (y : V), In V (Im X f) y -> exists x : U, In U X x /\ f x = yU, V:Typeforall (X : Ensemble U) (f : U -> V) (y : V), In V (Im X f) y -> exists x : U, In U X x /\ f x = yU, V:TypeX:Ensemble Uf:U -> Vy:VH':In V (Im X f) yforall x : U, In U X x -> forall y0 : V, y0 = f x -> exists x0 : U, In U X x0 /\ f x0 = y0exists x; auto with sets. Qed. Definition injective (f:U -> V) := forall x y:U, f x = f y -> x = y.U, V:TypeX:Ensemble Uf:U -> Vy:VH':In V (Im X f) yx:UH'0:In U X xy0:VH'1:y0 = f xexists x0 : U, In U X x0 /\ f x0 = f xU, V:Typeforall f : U -> V, ~ injective f -> exists x y : U, f x = f y /\ x <> yU, V:Typeforall f : U -> V, ~ injective f -> exists x y : U, f x = f y /\ x <> yU, V:Typef:U -> VH:~ (forall x y : U, f x = f y -> x = y)exists x y : U, f x = f y /\ x <> yU, V:Typef:U -> VH:~ (forall x y : U, f x = f y -> x = y)(exists x : U, ~ (forall y : U, f x = f y -> x = y)) -> exists x y : U, f x = f y /\ x <> yU, V:Typef:U -> VH:~ (forall x y : U, f x = f y -> x = y)exists x : U, ~ (forall y : U, f x = f y -> x = y)U, V:Typef:U -> VH:~ (forall x y : U, f x = f y -> x = y)(exists x : U, ~ (forall y : U, f x = f y -> x = y)) -> exists x y : U, f x = f y /\ x <> yU, V:Typef:U -> VH:~ (forall x0 y : U, f x0 = f y -> x0 = y)x:UC:~ (forall y : U, f x = f y -> x = y)exists y : U, f x = f y /\ x <> yU, V:Typef:U -> VH:~ (forall x0 y : U, f x0 = f y -> x0 = y)x:UC:~ (forall y : U, f x = f y -> x = y)(exists y : U, ~ (f x = f y -> x = y)) -> exists y : U, f x = f y /\ x <> yU, V:Typef:U -> VH:~ (forall x0 y : U, f x0 = f y -> x0 = y)x:UC:~ (forall y : U, f x = f y -> x = y)exists y : U, ~ (f x = f y -> x = y)U, V:Typef:U -> VH:~ (forall x0 y : U, f x0 = f y -> x0 = y)x:UC:~ (forall y : U, f x = f y -> x = y)(exists y : U, ~ (f x = f y -> x = y)) -> exists y : U, f x = f y /\ x <> yapply imply_to_and; trivial with sets. Qed.U, V:Typef:U -> VH:~ (forall x0 y0 : U, f x0 = f y0 -> x0 = y0)x:UC:~ (forall y0 : U, f x = f y0 -> x = y0)y:UD:~ (f x = f y -> x = y)f x = f y /\ x <> yU, V:Typeforall (A : Ensemble U) (f : U -> V) (n : nat), cardinal U A n -> exists p : nat, cardinal V (Im A f) pU, V:Typeforall (A : Ensemble U) (f : U -> V) (n : nat), cardinal U A n -> exists p : nat, cardinal V (Im A f) pU, V:TypeA:Ensemble Uf:U -> Vn:natH:cardinal U A nexists p : nat, cardinal V (Im A f) papply cardinal_finite with n; trivial with sets. Qed.U, V:TypeA:Ensemble Uf:U -> Vn:natH:cardinal U A nFinite U AU, V:Typeforall (A : Ensemble U) (f : U -> V), injective f -> forall x : U, In V (Im A f) (f x) -> In U A xU, V:Typeforall (A : Ensemble U) (f : U -> V), injective f -> forall x : U, In V (Im A f) (f x) -> In U A xU, V:TypeA:Ensemble Uf:U -> VH:injective fx:UH0:In V (Im A f) (f x)In U A xU, V:TypeA:Ensemble Uf:U -> VH:injective fx:UH0:In V (Im A f) (f x)forall x0 : U, In U A x0 /\ f x0 = f x -> In U A xelim (H z x E); trivial with sets. Qed.U, V:TypeA:Ensemble Uf:U -> VH:injective fx:UH0:In V (Im A f) (f x)z:UC:In U A z /\ f z = f xInAz:In U A zE:f z = f xIn U A xU, V:Typeforall (A : Ensemble U) (f : U -> V) (n : nat), injective f -> cardinal U A n -> forall n' : nat, cardinal V (Im A f) n' -> n' = nU, V:Typeforall (A : Ensemble U) (f : U -> V) (n : nat), injective f -> cardinal U A n -> forall n' : nat, cardinal V (Im A f) n' -> n' = nU, V:Typef:U -> VH:injective fforall n' : nat, cardinal V (Im (Empty_set U) f) n' -> n' = 0U, V:Typef:U -> VH:injective fA:Ensemble Un:natH'0:cardinal U A nx:UH'2:~ In U A xH'1:forall n' : nat, cardinal V (Im A f) n' -> n' = nforall n' : nat, cardinal V (Im (Add U A x) f) n' -> n' = S nU, V:Typef:U -> VH:injective fforall n' : nat, cardinal V (Empty_set V) n' -> n' = 0U, V:Typef:U -> VH:injective fA:Ensemble Un:natH'0:cardinal U A nx:UH'2:~ In U A xH'1:forall n' : nat, cardinal V (Im A f) n' -> n' = nforall n' : nat, cardinal V (Im (Add U A x) f) n' -> n' = S nU, V:Typef:U -> VH:injective fn':natCE:cardinal V (Empty_set V) n'n' = 0U, V:Typef:U -> VH:injective fA:Ensemble Un:natH'0:cardinal U A nx:UH'2:~ In U A xH'1:forall n' : nat, cardinal V (Im A f) n' -> n' = nforall n' : nat, cardinal V (Im (Add U A x) f) n' -> n' = S nU, V:Typef:U -> VH:injective fA:Ensemble Un:natH'0:cardinal U A nx:UH'2:~ In U A xH'1:forall n' : nat, cardinal V (Im A f) n' -> n' = nforall n' : nat, cardinal V (Im (Add U A x) f) n' -> n' = S nU, V:Typef:U -> VH:injective fA:Ensemble Un:natH'0:cardinal U A nx:UH'2:~ In U A xH'1:forall n'0 : nat, cardinal V (Im A f) n'0 -> n'0 = nn':natcardinal V (Im (Add U A x) f) n' -> n' = S nU, V:Typef:U -> VH:injective fA:Ensemble Un:natH'0:cardinal U A nx:UH'2:~ In U A xH'1:forall n'0 : nat, cardinal V (Im A f) n'0 -> n'0 = nn':natcardinal V (Add V (Im A f) (f x)) n' -> n' = S nU, V:Typef:U -> VH:injective fA:Ensemble Un:natH'0:cardinal U A nx:UH'2:~ In U A xH'1:forall n'0 : nat, cardinal V (Im A f) n'0 -> n'0 = nn':natH'3:cardinal V (Add V (Im A f) (f x)) n'n' = S nU, V:Typef:U -> VH:injective fA:Ensemble Un:natH'0:cardinal U A nx:UH'2:~ In U A xH'1:forall n'0 : nat, cardinal V (Im A f) n'0 -> n'0 = nn':natH'3:cardinal V (Add V (Im A f) (f x)) n'forall x0 : nat, cardinal V (Im A f) x0 -> n' = S nU, V:Typef:U -> VH:injective fA:Ensemble Un:natH'0:cardinal U A nx:UH'2:~ In U A xH'1:forall n'0 : nat, cardinal V (Im A f) n'0 -> n'0 = nn':natH'3:cardinal V (Add V (Im A f) (f x)) n'i:natCI:cardinal V (Im A f) in' = S nU, V:Typef:U -> VH:injective fA:Ensemble Un:natH'0:cardinal U A nx:UH'2:~ In U A xH'1:forall n'0 : nat, cardinal V (Im A f) n'0 -> n'0 = nn':natH'3:cardinal V (Add V (Im A f) (f x)) n'i:natCI:cardinal V (Im A f) ii = n -> n' = S nU, V:Typef:U -> VH:injective fA:Ensemble Un:natH'0:cardinal U A nx:UH'2:~ In U A xH'1:forall n'0 : nat, cardinal V (Im A f) n'0 -> n'0 = nn':natH'3:cardinal V (Add V (Im A f) (f x)) n'i:natCI:cardinal V (Im A f) i~ In V (Im A f) (f x) -> i = n -> n' = S nU, V:Typef:U -> VH:injective fA:Ensemble Un:natH'0:cardinal U A nx:UH'2:~ In U A xH'1:forall n'0 : nat, cardinal V (Im A f) n'0 -> n'0 = nn':natH'3:cardinal V (Add V (Im A f) (f x)) n'i:natCI:cardinal V (Im A f) i~ In V (Im A f) (f x)U, V:Typef:U -> VH:injective fA:Ensemble Un:natH'0:cardinal U A nx:UH'2:~ In U A xH'1:forall n'0 : nat, cardinal V (Im A f) n'0 -> n'0 = nn':natH'3:cardinal V (Add V (Im A f) (f x)) n'i:natCI:cardinal V (Im A f) iH0:~ In V (Im A f) (f x)H1:i = nn' = S nU, V:Typef:U -> VH:injective fA:Ensemble Un:natH'0:cardinal U A nx:UH'2:~ In U A xH'1:forall n'0 : nat, cardinal V (Im A f) n'0 -> n'0 = nn':natH'3:cardinal V (Add V (Im A f) (f x)) n'i:natCI:cardinal V (Im A f) i~ In V (Im A f) (f x)U, V:Typef:U -> VH:injective fA:Ensemble Un:natH'0:cardinal U A nx:UH'2:~ In U A xH'1:forall n'0 : nat, cardinal V (Im A f) n'0 -> n'0 = nn':natH'3:cardinal V (Add V (Im A f) (f x)) n'i:natCI:cardinal V (Im A f) iH0:~ In V (Im A f) (f x)H1:i = ncardinal V (Add V (Im A f) (f x)) (S n)U, V:Typef:U -> VH:injective fA:Ensemble Un:natH'0:cardinal U A nx:UH'2:~ In U A xH'1:forall n'0 : nat, cardinal V (Im A f) n'0 -> n'0 = nn':natH'3:cardinal V (Add V (Im A f) (f x)) n'i:natCI:cardinal V (Im A f) i~ In V (Im A f) (f x)U, V:Typef:U -> VH:injective fA:Ensemble Un:natH'0:cardinal U A nx:UH'2:~ In U A xH'1:forall n'0 : nat, cardinal V (Im A f) n'0 -> n'0 = nn':natH'3:cardinal V (Add V (Im A f) (f x)) n'i:natCI:cardinal V (Im A f) iH0:~ In V (Im A f) (f x)H1:i = ncardinal V (Im A f) nU, V:Typef:U -> VH:injective fA:Ensemble Un:natH'0:cardinal U A nx:UH'2:~ In U A xH'1:forall n'0 : nat, cardinal V (Im A f) n'0 -> n'0 = nn':natH'3:cardinal V (Add V (Im A f) (f x)) n'i:natCI:cardinal V (Im A f) i~ In V (Im A f) (f x)U, V:Typef:U -> VH:injective fA:Ensemble Un:natH'0:cardinal U A nx:UH'2:~ In U A xH'1:forall n'0 : nat, cardinal V (Im A f) n'0 -> n'0 = nn':natH'3:cardinal V (Add V (Im A f) (f x)) n'i:natCI:cardinal V (Im A f) i~ In V (Im A f) (f x)apply In_Image_elim with f; trivial with sets. Qed.U, V:Typef:U -> VH:injective fA:Ensemble Un:natH'0:cardinal U A nx:UH'2:~ In U A xH'1:forall n'0 : nat, cardinal V (Im A f) n'0 -> n'0 = nn':natH'3:cardinal V (Add V (Im A f) (f x)) n'i:natCI:cardinal V (Im A f) iH0:In V (Im A f) (f x)In U A xU, V:Typeforall (A : Ensemble U) (f : U -> V) (n : nat), cardinal U A n -> forall n' : nat, cardinal V (Im A f) n' -> n' <= nU, V:Typeforall (A : Ensemble U) (f : U -> V) (n : nat), cardinal U A n -> forall n' : nat, cardinal V (Im A f) n' -> n' <= nU, V:Typef:U -> Vforall n' : nat, cardinal V (Im (Empty_set U) f) n' -> n' <= 0U, V:Typef:U -> VA:Ensemble Un:natH'0:cardinal U A nx:UH'2:~ In U A xH'1:forall n' : nat, cardinal V (Im A f) n' -> n' <= nforall n' : nat, cardinal V (Im (Add U A x) f) n' -> n' <= S nU, V:Typef:U -> Vn':natH:cardinal V (Empty_set V) n'n' <= 0U, V:Typef:U -> VA:Ensemble Un:natH'0:cardinal U A nx:UH'2:~ In U A xH'1:forall n' : nat, cardinal V (Im A f) n' -> n' <= nforall n' : nat, cardinal V (Im (Add U A x) f) n' -> n' <= S nU, V:Typef:U -> Vn':natH:cardinal V (Empty_set V) n'n' = 0 -> n' <= 0U, V:Typef:U -> Vn':natH:cardinal V (Empty_set V) n'n' = 0U, V:Typef:U -> VA:Ensemble Un:natH'0:cardinal U A nx:UH'2:~ In U A xH'1:forall n' : nat, cardinal V (Im A f) n' -> n' <= nforall n' : nat, cardinal V (Im (Add U A x) f) n' -> n' <= S nU, V:Typef:U -> Vn':natH:cardinal V (Empty_set V) n'n' = 0U, V:Typef:U -> VA:Ensemble Un:natH'0:cardinal U A nx:UH'2:~ In U A xH'1:forall n' : nat, cardinal V (Im A f) n' -> n' <= nforall n' : nat, cardinal V (Im (Add U A x) f) n' -> n' <= S nU, V:Typef:U -> VA:Ensemble Un:natH'0:cardinal U A nx:UH'2:~ In U A xH'1:forall n' : nat, cardinal V (Im A f) n' -> n' <= nforall n' : nat, cardinal V (Im (Add U A x) f) n' -> n' <= S nU, V:Typef:U -> VA:Ensemble Un:natH'0:cardinal U A nx:UH'2:~ In U A xH'1:forall n'0 : nat, cardinal V (Im A f) n'0 -> n'0 <= nn':natcardinal V (Im (Add U A x) f) n' -> n' <= S nU, V:Typef:U -> VA:Ensemble Un:natH'0:cardinal U A nx:UH'2:~ In U A xH'1:forall n'0 : nat, cardinal V (Im A f) n'0 -> n'0 <= nn':natcardinal V (Add V (Im A f) (f x)) n' -> n' <= S nU, V:Typef:U -> VA:Ensemble Un:natH'0:cardinal U A nx:UH'2:~ In U A xH'1:forall n'0 : nat, cardinal V (Im A f) n'0 -> n'0 <= nn':natforall x0 : nat, cardinal V (Im A f) x0 -> cardinal V (Add V (Im A f) (f x)) n' -> n' <= S nU, V:Typef:U -> VA:Ensemble Un:natH'0:cardinal U A nx:UH'2:~ In U A xH'1:forall n'0 : nat, cardinal V (Im A f) n'0 -> n'0 <= nn', p:natC:cardinal V (Im A f) pH'3:cardinal V (Add V (Im A f) (f x)) n'n' <= S nU, V:Typef:U -> VA:Ensemble Un:natH'0:cardinal U A nx:UH'2:~ In U A xH'1:forall n'0 : nat, cardinal V (Im A f) n'0 -> n'0 <= nn', p:natC:cardinal V (Im A f) pH'3:cardinal V (Add V (Im A f) (f x)) n'n' <= S pU, V:Typef:U -> VA:Ensemble Un:natH'0:cardinal U A nx:UH'2:~ In U A xH'1:forall n'0 : nat, cardinal V (Im A f) n'0 -> n'0 <= nn', p:natC:cardinal V (Im A f) pH'3:cardinal V (Add V (Im A f) (f x)) n'S p <= S napply le_n_S; auto with sets. Qed.U, V:Typef:U -> VA:Ensemble Un:natH'0:cardinal U A nx:UH'2:~ In U A xH'1:forall n'0 : nat, cardinal V (Im A f) n'0 -> n'0 <= nn', p:natC:cardinal V (Im A f) pH'3:cardinal V (Add V (Im A f) (f x)) n'S p <= S nU, V:Typeforall (A : Ensemble U) (f : U -> V) (n : nat), cardinal U A n -> forall n' : nat, cardinal V (Im A f) n' -> n' < n -> ~ injective fU, V:Typeforall (A : Ensemble U) (f : U -> V) (n : nat), cardinal U A n -> forall n' : nat, cardinal V (Im A f) n' -> n' < n -> ~ injective fU, V:TypeA:Ensemble Uf:U -> Vn:natCAn:cardinal U A nn':natCIfn':cardinal V (Im A f) n'ltn'n:n' < nI:injective fFalseU, V:TypeA:Ensemble Uf:U -> Vn:natCAn:cardinal U A nn':natCIfn':cardinal V (Im A f) n'ltn'n:n' < nI:injective fn' = n -> FalseU, V:TypeA:Ensemble Uf:U -> Vn:natCAn:cardinal U A nn':natCIfn':cardinal V (Im A f) n'ltn'n:n' < nI:injective fn' = napply injective_preserves_cardinal with (A := A) (f := f) (n := n); trivial with sets. Qed.U, V:TypeA:Ensemble Uf:U -> Vn:natCAn:cardinal U A nn':natCIfn':cardinal V (Im A f) n'ltn'n:n' < nI:injective fn' = nU, V:Typeforall (A : Ensemble U) (f : U -> V) (n : nat), cardinal U A n -> forall n' : nat, cardinal V (Im A f) n' -> n' < n -> exists x y : U, f x = f y /\ x <> yU, V:Typeforall (A : Ensemble U) (f : U -> V) (n : nat), cardinal U A n -> forall n' : nat, cardinal V (Im A f) n' -> n' < n -> exists x y : U, f x = f y /\ x <> yapply Pigeonhole with A n n'; trivial with sets. Qed. End Image. Hint Resolve Im_def image_empty finite_image: sets.U, V:TypeA:Ensemble Uf:U -> Vn:natH:cardinal U A nn':natH0:cardinal V (Im A f) n'H1:n' < n~ injective f