@@ -5,8 +5,12 @@ From mathcomp Require Import reals ereal topology normedtype sequences.
55From mathcomp Require Import real_interval esum measure lebesgue_measure numfun.
66
77(**md************************************************************************* *)
8+ (* # Basic facts about G-delta and F-sigma sets *)
9+ (* *)
810(* ``` *)
9- (* Gdelta S == S is a set of countable intersection of open sets *)
11+ (* Gdelta S == S is countable intersection of open sets *)
12+ (* Gdelta_dense S == S is a countable intersection of dense open sets *)
13+ (* Fsigma S == S is countable union of closed sets *)
1014(* ``` *)
1115(* *)
1216(***************************************************************************** *)
@@ -20,17 +24,21 @@ Import numFieldNormedType.Exports.
2024
2125Local Open Scope classical_set_scope.
2226
23- Definition irrational (R : realType) : set R := ~` (ratr @` [set: rat]).
24- Arguments irrational : clear implicits.
25-
26- Definition rational (R : realType) : set R := (ratr @` [set: rat]).
27+ Lemma denseI (T : topologicalType) (A B : set T) :
28+ open A -> dense A -> dense B -> dense (A `&` B).
29+ Proof .
30+ move=> oA dA dB C C0 oC.
31+ have CA0 : C `&` A !=set0 by exact: dA.
32+ suff: (C `&` A) `&` B !=set0 by rewrite setIA.
33+ by apply: dB => //; exact: openI.
34+ Qed .
2735
28- Lemma irratE (R : realType) :
29- irrational R = \bigcap_(q : rat) ~` (ratr @` [set q]).
36+ Lemma dense0 {R : ptopologicalType} : ~ dense (@set0 R).
3037Proof .
31- apply/seteqP; split => [r/= rE q _/=|r/= rE [q] _ qr]; last first.
32- by apply: (rE q Logic.I) => /=; exists q.
33- by apply: contra_not rE => -[_ -> <-{r}]; exists q.
38+ apply/existsNP; exists setT.
39+ apply/not_implyP; split; first exact/set0P/setT0.
40+ apply/not_implyP; split; first exact: openT.
41+ by rewrite setTI => -[].
3442Qed .
3543
3644Lemma dense_set1C {R : realType} (r : R) : dense (~` [set r]).
@@ -49,53 +57,49 @@ rewrite in_itv/= !ltrD2l; apply/andP; split.
4957by rewrite gtr_pMr// invf_lt1// ltr1n.
5058Unshelve. all: by end_near. Qed .
5159
52- Lemma denseI (T : topologicalType) (A B : set T) :
53- open A -> dense A -> dense B -> dense (A `&` B).
54- Proof .
55- move=> oA dA dB C C0 oC.
56- have CA0 : C `&` A !=set0 by exact: dA.
57- suff: (C `&` A) `&` B !=set0 by rewrite setIA.
58- by apply: dB => //; exact: openI.
59- Qed .
60+ Section Gdelta_Fsigma.
61+ Context {T : topologicalType}.
62+ Implicit Type S : set T.
6063
61- Lemma dense0 {R : realType} : ~ dense (@set0 R).
62- Proof .
63- apply/existsNP; exists setT.
64- apply/not_implyP; split; first exact/set0P/setT0.
65- apply/not_implyP; split; first exact: openT.
66- by rewrite setTI => -[].
67- Qed .
64+ Definition Gdelta S :=
65+ exists2 F : (set T)^nat, (forall i, open (F i)) & S = \bigcap_i (F i).
6866
69- Section Fsigma.
67+ Lemma open_Gdelta S : open S -> Gdelta S.
68+ Proof . by exists (fun=> S)=> //; rewrite bigcap_const. Qed .
7069
71- Definition Fsigma (R : topologicalType) (S : set R) :=
72- exists2 A_ : (set R )^nat,
73- (forall i : nat, closed (A_ i)) & S = \bigcup_i (A_ i).
70+ Definition Gdelta_dense S :=
71+ exists2 F : (set T )^nat,
72+ (forall i, open (F i) /\ dense (F i)) & S = \bigcap_i (F i).
7473
75- Lemma closed_Fsigma (R : topologicalType) ( S : set R) : closed S -> Fsigma S.
76- Proof . by exists (fun=> S)=> //; rewrite bigcup_const. Qed .
74+ Definition Fsigma S :=
75+ exists2 F : (set T)^nat, ( forall i, closed (F i)) & S = \bigcup_i (F i) .
7776
78- End Fsigma.
77+ Lemma closed_Fsigma S : closed S -> Fsigma S.
78+ Proof . by exists (fun=> S)=> //; rewrite bigcup_const. Qed .
7979
80- Section Gdelta .
80+ End Gdelta_Fsigma .
8181
82- Definition Gdelta (R : topologicalType) (S : set R) :=
83- exists2 A_ : (set R)^nat,
84- (forall i : nat, open (A_ i)) & S = \bigcap_i (A_ i).
82+ Lemma Gdelta_measurable {R : realType} (S : set R) : Gdelta S -> measurable S.
83+ Proof .
84+ move=> [] B oB ->; apply: bigcapT_measurable => i.
85+ exact: open_measurable.
86+ Qed .
8587
86- Lemma open_Gdelta (R : topologicalType) (S : set R) : open S -> Gdelta S.
87- Proof . by exists (fun=> S)=> //; rewrite bigcap_const. Qed .
88+ Lemma Gdelta_subspace_open {R : realType} (A : set R) (S : set (subspace A)) :
89+ open A -> Gdelta S -> Gdelta (A `&` S).
90+ Proof .
91+ move=> oA [/= S_ oS_ US].
92+ exists (fun n => A `&` (S_ n)).
93+ by move=> ?; rewrite open_setSI.
94+ by rewrite bigcapIr// US.
95+ Qed .
8896
89- Section irrat_Gdelta .
97+ Section irrational_Gdelta .
9098Context {R : realType}.
9199
92- Definition Gdelta_dense (R : topologicalType) (S : set R) :=
93- exists2 A_ : (set R)^nat,
94- (forall i, open (A_ i) /\ dense (A_ i)) & S = \bigcap_i (A_ i).
95-
96- Lemma irrat_Gdelta : Gdelta_dense (irrational R).
100+ Lemma irrational_Gdelta : Gdelta_dense (irrational R).
97101Proof .
98- rewrite irratE .
102+ rewrite irrationalE .
99103have /pcard_eqP/bijPex[f bijf] := card_rat.
100104pose f1 := 'pinv_(fun => 0%R) [set: rat] f.
101105exists (fun n => ~` [set ratr (f1 n)]).
@@ -110,9 +114,9 @@ rewrite /f1 pinvKV ?inE//=.
110114exact: set_bij_inj bijf.
111115Qed .
112116
113- End irrat_Gdelta .
117+ End irrational_Gdelta .
114118
115- Lemma rat_not_Gdelta (R : realType) : ~ Gdelta (@rational R).
119+ Lemma not_rational_Gdelta (R : realType) : ~ Gdelta (@rational R).
116120Proof .
117121apply/forall2NP => A.
118122apply/not_andP => -[oA ratrA].
@@ -123,10 +127,9 @@ have dense_A n : dense (A n).
123127 apply: setIS.
124128 rewrite -/(@rational R) ratrA.
125129 exact: bigcap_inf.
126- have [/= B oB irratB] := @irrat_Gdelta R.
130+ have [/= B oB irratB] := @irrational_Gdelta R.
127131pose C : (set R)^nat := fun n => A n `&` B n.
128- have C0 : set0 = \bigcap_i C i.
129- by rewrite bigcapI -ratrA -irratB setICr.
132+ have C0 : set0 = \bigcap_i C i by rewrite bigcapI -ratrA -irratB setICr.
130133have : forall n, open (C n) /\ dense (C n).
131134 move=> n; split.
132135 by apply: openI => //; apply oB.
@@ -135,18 +138,3 @@ move/Baire.
135138rewrite -C0.
136139exact: dense0.
137140Qed .
138-
139- Lemma Gdelta_measurable {R : realType} (S : set R) : Gdelta S -> (@measurable _ R) S.
140- Proof .
141- move=> [] B oB ->; apply: bigcapT_measurable => i.
142- exact: open_measurable.
143- Qed .
144-
145- Lemma Gdelta_subspace_open {R : realType} (A : set R) (S : set (subspace A)) :
146- open A -> Gdelta S -> @Gdelta R (A `&` S).
147- Proof .
148- move=> oA [/= S_ oS_ US].
149- exists (fun n => A `&` (S_ n)).
150- by move=> ?; rewrite open_setSI.
151- by rewrite bigcapIr// US.
152- Qed .
0 commit comments