Skip to content

Commit a2c4695

Browse files
committed
small clean up using cofinite sets
1 parent a011d0d commit a2c4695

File tree

1 file changed

+31
-3
lines changed

1 file changed

+31
-3
lines changed

classical/cardinality.v

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ From mathcomp Require Import mathcomp_extra boolp classical_sets functions.
2626
(* <-> exists X : {fset T}, A = [set` X] *)
2727
(* <-> ~ ([set: nat] #<= A) *)
2828
(* infinite_set A := ~ finite_set A *)
29+
(* cofinite_set A := finite_set (~` A) *)
2930
(* countable A <-> A is countable *)
3031
(* := A #<= [set: nat] *)
3132
(* fset_set A == the finite set corresponding if A : set T is finite, *)
@@ -68,6 +69,7 @@ Notation "A '#!=' B" := (~~ (card_eq A B)) : card_scope.
6869

6970
Definition finite_set {T} (A : set T) := exists n, A #= `I_n.
7071
Notation infinite_set A := (~ finite_set A).
72+
Notation cofinite_set A := (finite_set (~` A)).
7173

7274
Lemma injPex {T U} {A : set T} :
7375
$|{inj A >-> U}| <-> exists f : T -> U, set_inj A f.
@@ -516,6 +518,10 @@ Lemma finite_set0 T : finite_set (set0 : set T).
516518
Proof. by apply/finite_setP; exists 0%N; rewrite II0. Qed.
517519
#[global] Hint Resolve finite_set0 : core.
518520

521+
Lemma cofinite_setT T : cofinite_set [set: T].
522+
Proof. by rewrite setCT. Qed.
523+
#[global] Hint Resolve cofinite_setT : core.
524+
519525
Lemma infinite_setN0 {T} (A : set T) : infinite_set A -> A !=set0.
520526
Proof. by rewrite -set0P; apply: contra_not_neq => ->. Qed.
521527

@@ -606,6 +612,14 @@ Lemma sub_finite_set T (A B : set T) : A `<=` B ->
606612
finite_set B -> finite_set A.
607613
Proof. by move=> ?; apply/card_le_finite/subset_card_le. Qed.
608614

615+
Lemma sub_cofinite_set T (A B : set T) : A `<=` B ->
616+
cofinite_set A -> cofinite_set A.
617+
Proof. by move=> /subsetC/sub_finite_set. Qed.
618+
619+
Lemma sub_infinite_set T (A B : set T) : A `<=` B ->
620+
infinite_set A -> infinite_set B.
621+
Proof. by move=> AB; apply/contra_not/sub_finite_set. Qed.
622+
609623
Lemma finite_set_leP T (A : set T) : finite_set A <-> exists n, A #<= `I_n.
610624
Proof.
611625
split=> [[n /card_eqPle[]]|[n leAn]]; first by exists n.
@@ -661,6 +675,16 @@ Qed.
661675
Lemma finite_setD T (A B : set T) : finite_set A -> finite_set (A `\` B).
662676
Proof. exact/card_le_finite/card_le_setD. Qed.
663677

678+
Lemma cofinite_setUl T (A B : set T) : cofinite_set A -> cofinite_set (A `|` B).
679+
Proof. by rewrite setCU -setDE; apply: finite_setD. Qed.
680+
681+
Lemma cofinite_setUr T (A B : set T) : cofinite_set B -> cofinite_set (A `|` B).
682+
Proof. by rewrite setUC; apply: cofinite_setUl. Qed.
683+
684+
Lemma cofinite_setU T (A B : set T) :
685+
cofinite_set A \/ cofinite_set B -> cofinite_set (A `|` B).
686+
Proof. by move=> [/cofinite_setUl|/cofinite_setUr]. Qed.
687+
664688
Lemma finite_setU T (A B : set T) :
665689
finite_set (A `|` B) = (finite_set A /\ finite_set B).
666690
Proof.
@@ -669,6 +693,10 @@ pose fP := @finite_fsetP {classic T}; rewrite propeqE; split.
669693
by case=> /fP[X->]/fP[Y->]; apply/fP; exists (X `|` Y)%fset; rewrite set_fsetU.
670694
Qed.
671695

696+
Lemma cofinite_setI T (A B : set T) :
697+
cofinite_set (A `&` B) = (cofinite_set A /\ cofinite_set B).
698+
Proof. by rewrite setCI finite_setU. Qed.
699+
672700
Lemma finite_set2 T (x y : T) : finite_set [set x; y].
673701
Proof. by rewrite !finite_setU; split; apply: finite_set1. Qed.
674702
#[global] Hint Resolve finite_set2 : core.
@@ -859,8 +887,8 @@ have Gy : y \in G k by rewrite in_fset_set ?inE//; apply: Ffin.
859887
by exists (Tagged G [` Gy]%fset).
860888
Qed.
861889

862-
Lemma infinite_setC {T} (A : set T) : infinite_set [set: T] ->
863-
finite_set (~` A) -> infinite_set A.
890+
Lemma cofinite_set_infinite {T} (A : set T) : infinite_set [set: T] ->
891+
cofinite_set A -> infinite_set A.
864892
Proof. by move=> + ACfin Afin; apply; rewrite -(setvU A) finite_setU. Qed.
865893

866894
Lemma trivIset_sum_card (T : choiceType) (F : nat -> set T) n :
@@ -1034,7 +1062,7 @@ by rewrite setUIl setUCl setIT finite_setU => -[].
10341062
Qed.
10351063

10361064
Lemma infinite_setI {T} (A B : set T) :
1037-
infinite_set A -> finite_set (~` B) -> infinite_set (A `&` B).
1065+
infinite_set A -> cofinite_set B -> infinite_set (A `&` B).
10381066
Proof. by move=> /infinite_setD/[apply]; rewrite setDE setCK. Qed.
10391067

10401068
Lemma infinite_set_fset {T : choiceType} (A : set T) n :

0 commit comments

Comments
 (0)