@@ -5,8 +5,12 @@ From mathcomp Require Import reals ereal topology normedtype sequences.
5
5
From mathcomp Require Import real_interval esum measure lebesgue_measure numfun.
6
6
7
7
(**md************************************************************************* *)
8
+ (* # Basic facts about G-delta and F-sigma sets *)
9
+ (* *)
8
10
(* ``` *)
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 *)
10
14
(* ``` *)
11
15
(* *)
12
16
(***************************************************************************** *)
@@ -20,17 +24,21 @@ Import numFieldNormedType.Exports.
20
24
21
25
Local Open Scope classical_set_scope.
22
26
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 .
27
35
28
- Lemma irratE (R : realType) :
29
- irrational R = \bigcap_(q : rat) ~` (ratr @` [set q]).
36
+ Lemma dense0 {R : ptopologicalType} : ~ dense (@set0 R).
30
37
Proof .
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 => -[].
34
42
Qed .
35
43
36
44
Lemma dense_set1C {R : realType} (r : R) : dense (~` [set r]).
@@ -49,53 +57,49 @@ rewrite in_itv/= !ltrD2l; apply/andP; split.
49
57
by rewrite gtr_pMr// invf_lt1// ltr1n.
50
58
Unshelve. all: by end_near. Qed .
51
59
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.
60
63
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).
68
66
69
- Section Fsigma.
67
+ Lemma open_Gdelta S : open S -> Gdelta S.
68
+ Proof . by exists (fun=> S)=> //; rewrite bigcap_const. Qed .
70
69
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).
74
73
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) .
77
76
78
- End Fsigma.
77
+ Lemma closed_Fsigma S : closed S -> Fsigma S.
78
+ Proof . by exists (fun=> S)=> //; rewrite bigcup_const. Qed .
79
79
80
- Section Gdelta .
80
+ End Gdelta_Fsigma .
81
81
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 .
85
87
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 .
88
96
89
- Section irrat_Gdelta .
97
+ Section irrational_Gdelta .
90
98
Context {R : realType}.
91
99
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).
97
101
Proof .
98
- rewrite irratE .
102
+ rewrite irrationalE .
99
103
have /pcard_eqP/bijPex[f bijf] := card_rat.
100
104
pose f1 := 'pinv_(fun => 0%R) [set: rat] f.
101
105
exists (fun n => ~` [set ratr (f1 n)]).
@@ -110,9 +114,9 @@ rewrite /f1 pinvKV ?inE//=.
110
114
exact: set_bij_inj bijf.
111
115
Qed .
112
116
113
- End irrat_Gdelta .
117
+ End irrational_Gdelta .
114
118
115
- Lemma rat_not_Gdelta (R : realType) : ~ Gdelta (@rational R).
119
+ Lemma not_rational_Gdelta (R : realType) : ~ Gdelta (@rational R).
116
120
Proof .
117
121
apply/forall2NP => A.
118
122
apply/not_andP => -[oA ratrA].
@@ -123,10 +127,9 @@ have dense_A n : dense (A n).
123
127
apply: setIS.
124
128
rewrite -/(@rational R) ratrA.
125
129
exact: bigcap_inf.
126
- have [/= B oB irratB] := @irrat_Gdelta R.
130
+ have [/= B oB irratB] := @irrational_Gdelta R.
127
131
pose 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.
130
133
have : forall n, open (C n) /\ dense (C n).
131
134
move=> n; split.
132
135
by apply: openI => //; apply oB.
@@ -135,18 +138,3 @@ move/Baire.
135
138
rewrite -C0.
136
139
exact: dense0.
137
140
Qed .
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