Skip to content

Commit 8706715

Browse files
affeldt-aistt6s
andcommitted
infinite_setX
Co-authored-by: Takafumi Saikawa <tscompor@gmail.com>
1 parent e949c9d commit 8706715

File tree

2 files changed

+18
-10
lines changed

2 files changed

+18
-10
lines changed

CHANGELOG_UNRELEASED.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@
8181
+ lemma `perfectP`
8282

8383
- in `cardinality.v`:
84+
+ lemmas `finite_setX_or`, `infinite_setX`
8485
+ lemmas `infinite_prod_rat`, ``card_rat2`
8586

8687
- in `normed_module.v`:

classical/cardinality.v

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -632,6 +632,21 @@ Proof. by apply: subset_card_le; rewrite setDE; apply: subIset; left. Qed.
632632
Lemma finite_image T T' A (f : T -> T') : finite_set A -> finite_set (f @` A).
633633
Proof. 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+
635650
Lemma finite_set1 T (x : T) : finite_set [set x].
636651
Proof.
637652
elim/Pchoice: T => T in x *.
@@ -1099,9 +1114,7 @@ Lemma infinite_nat : ~ finite_set [set: nat].
10991114
Proof. exact/infiniteP/card_lexx. Qed.
11001115

11011116
Lemma 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

11061119
Lemma card_nat2 : [set: nat * nat] #= [set: nat].
11071120
Proof. exact/eq_card_nat/infinite_prod_nat/countableP. Qed.
@@ -1118,13 +1131,7 @@ Lemma card_rat : [set: rat] #= [set: nat].
11181131
Proof. exact/eq_card_nat/infinite_rat/countableP. Qed.
11191132

11201133
Lemma 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

11291136
Lemma card_rat2 : ([set: rat * rat] #= [set: nat])%card.
11301137
Proof. exact/eq_card_nat/infinite_prod_rat/countableP. Qed.

0 commit comments

Comments
 (0)