@@ -632,6 +632,21 @@ Proof. by apply: subset_card_le; rewrite setDE; apply: subIset; left. Qed.
632632Lemma finite_image T T' A (f : T -> T') : finite_set A -> finite_set (f @` A).
633633Proof . exact/card_le_finite/card_image_le. Qed .
634634
635+ Lemma finite_setX_or T T' (A : set T) (B : set T') :
636+ finite_set (A `*` B) -> finite_set A \/ finite_set B.
637+ Proof .
638+ have [->|/set0P[a Aa]] := eqVneq A set0; first by left.
639+ have /sub_finite_set : [set a] `*` B `<=` A `*` B by move=> x/= [] -> ?; split.
640+ move => /[apply]/(finite_image snd); rewrite (_ : _ @` _ = B); first by right.
641+ by apply/seteqP; split=> [b [[? ?] [? ?] <-//]|b ?]/=; exists (a, b).
642+ Qed .
643+
644+ Lemma infinite_setX {T} {A B : set T} :
645+ infinite_set A -> infinite_set B -> infinite_set (A `*` B).
646+ Proof .
647+ by move=> iA iB; have /not_orP := conj iA iB; exact/contra_not/finite_setX_or.
648+ Qed .
649+
635650Lemma finite_set1 T (x : T) : finite_set [set x].
636651Proof .
637652elim/Pchoice: T => T in x *.
@@ -1099,9 +1114,7 @@ Lemma infinite_nat : ~ finite_set [set: nat].
10991114Proof . exact/infiniteP/card_lexx. Qed .
11001115
11011116Lemma infinite_prod_nat : infinite_set [set: nat * nat].
1102- Proof .
1103- by apply/infiniteP/pcard_leTP/injPex; exists (pair 0%N) => // m n _ _ [].
1104- Qed .
1117+ Proof . by rewrite -setXTT; apply: infinite_setX; exact: infinite_nat. Qed .
11051118
11061119Lemma card_nat2 : [set: nat * nat] #= [set: nat].
11071120Proof . exact/eq_card_nat/infinite_prod_nat/countableP. Qed .
@@ -1118,13 +1131,7 @@ Lemma card_rat : [set: rat] #= [set: nat].
11181131Proof . exact/eq_card_nat/infinite_rat/countableP. Qed .
11191132
11201133Lemma infinite_prod_rat : infinite_set [set: rat * rat].
1121- Proof .
1122- apply/infiniteP/pcard_leTP/injPex => /=.
1123- have /pcard_eqP[/squash/bijPex[f bijf]] : ([set: nat] #= [set: rat])%card.
1124- by rewrite card_eq_sym card_rat.
1125- exists (pair 0%:Q \o f) => m n _ _ [].
1126- by move/bij_inj : (bijf) => /[apply]; exact.
1127- Qed .
1134+ Proof . by rewrite -setXTT; apply: infinite_setX; exact: infinite_rat. Qed .
11281135
11291136Lemma card_rat2 : ([set: rat * rat] #= [set: nat])%card.
11301137Proof . exact/eq_card_nat/infinite_prod_rat/countableP. Qed .
0 commit comments