@@ -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
6970Definition finite_set {T} (A : set T) := exists n, A #= `I_n.
7071Notation infinite_set A := (~ finite_set A).
72+ Notation cofinite_set A := (finite_set (~` A)).
7173
7274Lemma 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).
516518Proof . 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+
519525Lemma infinite_setN0 {T} (A : set T) : infinite_set A -> A !=set0.
520526Proof . 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.
607613Proof . 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+
609623Lemma finite_set_leP T (A : set T) : finite_set A <-> exists n, A #<= `I_n.
610624Proof .
611625split=> [[n /card_eqPle[]]|[n leAn]]; first by exists n.
@@ -661,6 +675,16 @@ Qed.
661675Lemma finite_setD T (A B : set T) : finite_set A -> finite_set (A `\` B).
662676Proof . 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+
664688Lemma finite_setU T (A B : set T) :
665689 finite_set (A `|` B) = (finite_set A /\ finite_set B).
666690Proof .
@@ -669,6 +693,10 @@ pose fP := @finite_fsetP {classic T}; rewrite propeqE; split.
669693by case=> /fP[X->]/fP[Y->]; apply/fP; exists (X `|` Y)%fset; rewrite set_fsetU.
670694Qed .
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+
672700Lemma finite_set2 T (x y : T) : finite_set [set x; y].
673701Proof . 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.
859887by exists (Tagged G [` Gy]%fset).
860888Qed .
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.
864892Proof . by move=> + ACfin Afin; apply; rewrite -(setvU A) finite_setU. Qed .
865893
866894Lemma trivIset_sum_card (T : choiceType) (F : nat -> set T) n :
@@ -1034,7 +1062,7 @@ by rewrite setUIl setUCl setIT finite_setU => -[].
10341062Qed .
10351063
10361064Lemma 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).
10381066Proof . by move=> /infinite_setD/[apply]; rewrite setDE setCK. Qed .
10391067
10401068Lemma infinite_set_fset {T : choiceType} (A : set T) n :
0 commit comments