@@ -13,12 +13,30 @@ From mathcomp Require Import separation_axioms.
1313(* *)
1414(* This file introduces locally convex topological vector spaces. *)
1515(* ``` *)
16+ (* NbhsNmodule == HB class, join of Nbhs and Nmodule *)
17+ (* NbhsZmodule == HB class, join of Nbhs and Zmodule *)
18+ (* NbhsLmodule K == HB class, join of Nbhs and Lmodule over K *)
19+ (* K is a numDomainType. *)
20+ (* TopologicalNmodule == HB class, joint of Topological and Nmodule *)
21+ (* TopologicalZmodule == HB class, joint of Topological and Zmodule *)
22+ (* topologicalLmodType K == topological space and Lmodule over K *)
23+ (* K is a numDomainType. *)
24+ (* The HB class is TopologicalLmodule. *)
25+ (* UniformZmodule == HB class, joint of Uniform and Zmodule *)
26+ (* UniformLmodule K == HB class, joint of Uniform and Lmodule over K *)
27+ (* K is a numDomainType. *)
28+ (* convex A == A : set M is a convex set of elements of M *)
29+ (* M is an Lmodule over R : numDomainType. *)
1630(* tvsType R == interface type for a locally convex topological *)
1731(* vector space on a numDomain R *)
18- (* A tvs is constructed over a uniform space *)
32+ (* A tvs is constructed over a uniform space. *)
33+ (* The HB class is Tvs. *)
1934(* TopologicalLmod_isTvs == factory allowing the construction of a tvs from *)
20- (* a lmodule which is also a topological space. *)
35+ (* an Lmodule which is also a topological space. *)
2136(* ``` *)
37+ (* HB instances: *)
38+ (* - The type R^o (R : numFieldType) is endowed with the structure of Tvs. *)
39+ (* - The product of two Tvs is endowed with the structure of Tvs. *)
2240(***************************************************************************** *)
2341
2442Set Implicit Arguments .
@@ -45,19 +63,22 @@ HB.structure Definition NbhsZmodule := {M of Nbhs M & GRing.Zmodule M}.
4563HB.structure Definition NbhsLmodule (K : numDomainType) :=
4664 {M of Nbhs M & GRing.Lmodule K M}.
4765
48- HB.structure Definition TopologicalNmodule := {M of Topological M & GRing.Nmodule M}.
66+ HB.structure Definition TopologicalNmodule :=
67+ {M of Topological M & GRing.Nmodule M}.
4968HB.structure Definition TopologicalZmodule :=
5069 {M of Topological M & GRing.Zmodule M}.
70+
71+ #[short(type="topologicalLmodType")]
5172HB.structure Definition TopologicalLmodule (K : numDomainType) :=
5273 {M of Topological M & GRing.Lmodule K M}.
74+
5375HB.structure Definition UniformZmodule := {M of Uniform M & GRing.Zmodule M}.
5476HB.structure Definition UniformLmodule (K : numDomainType) :=
5577 {M of Uniform M & GRing.Lmodule K M}.
5678
5779Definition convex (R : numDomainType) (M : lmodType R) (A : set M) :=
5880 forall x y (lambda : R), x \in A -> y \in A ->
59- (0< lambda) -> (lambda < 1) -> lambda *: x + (1 - lambda) *: y \in A.
60-
81+ 0 < lambda -> lambda < 1 -> lambda *: x + (1 - lambda) *: y \in A.
6182
6283HB.mixin Record Uniform_isTvs (R : numDomainType) E
6384 of Uniform E & GRing.Lmodule R E := {
@@ -71,43 +92,41 @@ HB.mixin Record Uniform_isTvs (R : numDomainType) E
7192HB.structure Definition Tvs (R : numDomainType) :=
7293 {E of Uniform_isTvs R E & Uniform E & GRing.Lmodule R E}.
7394
74- Section properties_of_topologicallmodule.
75- Context (R : numDomainType) (E : topologicalType)
76- (Me : GRing.Lmodule R E) (U : set E).
77- Let ME := GRing.Lmodule.Pack Me.
95+ Section properties_of_topologicalLmodule.
96+ Context (R : numDomainType) (E : topologicalLmodType R) (U : set E).
7897
79- Lemma nbhsN_subproof (f : continuous (fun z : R^o * E => z.1 *: ( z.2 : ME) )) (x : E) :
80- nbhs x U -> nbhs (-(x:ME)) (-%R @` (U : set ME) ).
98+ Lemma nbhsN_subproof (f : continuous (fun z : R^o * E => z.1 *: z.2)) (x : E) :
99+ nbhs x U -> nbhs (-x) (-%R @` U ).
81100Proof .
82- move=> Ux; move: (f (-1, - (x:ME) ) U); rewrite /= scaleN1r opprK => /(_ Ux) [] /=.
83- move=> [B] B12 [B1 B2] BU; near=> y; exists (- (y:ME) ); rewrite ?opprK// -scaleN1r//.
101+ move=> Ux; move: (f (-1, -x ) U); rewrite /= scaleN1r opprK => /(_ Ux) [] /=.
102+ move=> [B] B12 [B1 B2] BU; near=> y; exists (- y ); rewrite ?opprK// -scaleN1r//.
84103apply: (BU (-1, y)); split => /=; last by near: y.
85104by move: B1 => [] ? ?; apply => /=; rewrite subrr normr0.
86105Unshelve. all: by end_near. Qed .
87106
88- Lemma nbhs0N_subproof (f : continuous (fun z : R^o * E => z.1 *: ( z.2:ME) : E )) :
89- nbhs (0 :ME) (U : set ME) -> nbhs (0 : ME) (-%R @` (U : set ME) ).
107+ Lemma nbhs0N_subproof (f : continuous (fun z : R^o * E => z.1 *: z.2)) :
108+ nbhs 0 U -> nbhs 0 (-%R @` U ).
90109Proof . by move => Ux; rewrite -oppr0; exact: nbhsN_subproof. Qed .
91110
92- Lemma nbhsT_subproof (f : continuous (fun x : E * E => ( x.1 : ME) + ( x.2 : ME) )) (x : E) :
93- nbhs (0 : ME) U -> nbhs (x : ME) (+%R (x : ME) @` U).
111+ Lemma nbhsT_subproof (f : continuous (fun x : E * E => x.1 + x.2)) (x : E) :
112+ nbhs 0 U -> nbhs x (+%R x @` U).
94113Proof .
95- move => U0; have /= := f (x, -(x : ME) ) U; rewrite subrr => /(_ U0).
114+ move => U0; have /= := f (x, -x ) U; rewrite subrr => /(_ U0).
96115move=> [B] [B1 B2] BU; near=> x0.
97- exists (( x0 : ME) - (x : ME) ); last by rewrite addrCA subrr addr0.
98- by apply: (BU ((x0 : ME) , -(x : ME) )); split; [near: x0; rewrite nearE|exact: nbhs_singleton].
116+ exists (x0 - x ); last by rewrite addrCA subrr addr0.
117+ by apply: (BU (x0 , -x )); split; [near: x0; rewrite nearE|exact: nbhs_singleton].
99118Unshelve. all: by end_near. Qed .
100119
101- Lemma nbhsB_subproof (f : continuous (fun x : E * E => ( x.1 : ME) + ( x.2 : ME) )) (z x : E) :
102- nbhs (z : ME) U -> nbhs ((x : ME) + (z : ME)) (+%R (x : ME) @` U).
120+ Lemma nbhsB_subproof (f : continuous (fun x : E * E => x.1 + x.2)) (z x : E) :
121+ nbhs z U -> nbhs (x + z) (+%R x @` U).
103122Proof .
104- move=> U0; move: (@ f ((x : ME) + (z : ME) , -(x : ME)) U) ; rewrite /= addrAC subrr add0r.
123+ move=> U0; have /= := f (x + z , -x) U ; rewrite addrAC subrr add0r.
105124move=> /(_ U0)[B] [B1 B2] BU; near=> x0.
106- exists (( x0 : ME) - (x : ME) ); last by rewrite addrCA subrr addr0.
107- by apply: (BU ((x0 : ME) , -(x : ME) )); split; [near: x0; rewrite nearE|exact: nbhs_singleton].
125+ exists (x0 - x ); last by rewrite addrCA subrr addr0.
126+ by apply: (BU (x0 , -x )); split; [near: x0; rewrite nearE|exact: nbhs_singleton].
108127Unshelve. all: by end_near. Qed .
109128
110- End properties_of_topologicallmodule .
129+ End properties_of_topologicalLmodule .
111130
112131HB.factory Record TopologicalLmod_isTvs (R : numDomainType) E
113132 of Topological E & GRing.Lmodule R E := {
@@ -127,9 +146,7 @@ Let nbhs0N (U : set E) : nbhs (0 : E) U -> nbhs (0 : E) (-%R @` U).
127146Proof . by apply: nbhs0N_subproof; exact: scale_continuous. Qed .
128147
129148Lemma nbhsN (U : set E) (x : E) : nbhs x U -> nbhs (-x) (-%R @` U).
130- Proof .
131- by apply: nbhsN_subproof; exact: scale_continuous.
132- Qed .
149+ Proof . by apply: nbhsN_subproof; exact: scale_continuous. Qed .
133150
134151Let nbhsT (U : set E) (x : E) : nbhs (0 : E) U -> nbhs x (+%R x @`U).
135152Proof . by apply: nbhsT_subproof; exact: add_continuous. Qed .
@@ -228,8 +245,8 @@ End Tvs_numDomain.
228245
229246Section Tvs_numField.
230247
231- Lemma nbhs0Z (R : numFieldType) (E : tvsType R) (U : set E) (r : R) :
232- r != 0 -> nbhs 0 U -> nbhs 0 ( *:%R r @` U).
248+ Lemma nbhs0Z (R : numFieldType) (E : tvsType R) (U : set E) (r : R) :
249+ r != 0 -> nbhs 0 U -> nbhs 0 ( *:%R r @` U ).
233250Proof .
234251move=> r0 U0; have /= := scale_continuous (r^-1, 0) U.
235252rewrite scaler0 => /(_ U0)[]/= B [B1 B2] BU.
@@ -238,9 +255,9 @@ by apply: (BU (r^-1, x)); split => //=;[exact: nbhs_singleton|near: x].
238255Unshelve. all: by end_near. Qed .
239256
240257Lemma nbhsZ (R : numFieldType) (E : tvsType R) (U : set E) (r : R) (x :E) :
241- r != 0 -> nbhs x U -> nbhs (r *:x) ( *:%R r @` U).
258+ r != 0 -> nbhs x U -> nbhs (r *:x) ( *:%R r @` U ).
242259Proof .
243- move => r0 U0; have /= := scale_continuous ((r^-1, r *: x)) U.
260+ move=> r0 U0; have /= := scale_continuous ((r^-1, r *: x)) U.
244261rewrite scalerA mulVf// scale1r =>/(_ U0)[] /= B [B1 B2] BU.
245262near=> z; exists (r^-1 *: z); last by rewrite scalerA divff// scale1r.
246263by apply: (BU (r^-1,z)); split; [exact: nbhs_singleton|near: z].
@@ -251,7 +268,7 @@ End Tvs_numField.
251268Section standard_topology.
252269Variable R : numFieldType.
253270
254- Lemma standard_add_continuous : continuous (fun x : R^o * R^o => x.1 + x.2).
271+ Local Lemma standard_add_continuous : continuous (fun x : R^o * R^o => x.1 + x.2).
255272Proof .
256273(* NB(rei): almost the same code as in normedtype.v *)
257274move=> [/= x y]; apply/cvg_ballP => e e0 /=.
@@ -261,7 +278,7 @@ rewrite /ball /ball_/= => xy /= [nx ny].
261278by rewrite opprD addrACA (le_lt_trans (ler_normD _ _)) // (splitr e) ltrD.
262279Qed .
263280
264- Lemma standard_scale_continuous : continuous (fun z : R^o * R^o => z.1 *: z.2).
281+ Local Lemma standard_scale_continuous : continuous (fun z : R^o * R^o => z.1 *: z.2).
265282Proof .
266283(* NB: This lemma is proved once again in normedtype, in a shorter way with much more machinery *)
267284(* To be rewritten once normedtype is split and tvs can depend on these lemmas *)
@@ -312,7 +329,7 @@ rewrite -mulrBl normrM (@le_lt_trans _ _ (`|k - z1| * M)) ?ler_wpM2l//.
312329by rewrite -ltr_pdivlMr ?(lt_le_trans k1r) ?normr_gt0.
313330Qed .
314331
315- Lemma standard_locally_convex :
332+ Local Lemma standard_locally_convex :
316333 exists2 B : set (set R^o), (forall b, b \in B -> convex b) & basis B.
317334Proof .
318335(* NB(rei): almost the same code as in normedtype.v *)
@@ -342,15 +359,15 @@ move=> x B; rewrite -nbhs_ballE/= => -[r] r0 Bxr /=.
342359by exists (ball x r) => //; split; [exists x, r|exact: ballxx].
343360Qed .
344361
345- HB.instance Definition _ := Uniform_isTvs.Build R ( R^o)%type
362+ HB.instance Definition _ := Uniform_isTvs.Build R R^o
346363 standard_add_continuous standard_scale_continuous standard_locally_convex.
347364
348365End standard_topology.
349366
350367Section prod_Tvs.
351368Context (K : numFieldType) (E F : tvsType K).
352369
353- Lemma prod_add_continuous : continuous (fun x : (E * F) * (E * F) => x.1 + x.2).
370+ Local Lemma prod_add_continuous : continuous (fun x : (E * F) * (E * F) => x.1 + x.2).
354371Proof .
355372move => [/= xy1 xy2] /= U /= [] [A B] /= [nA nB] nU.
356373have [/= A0 [A01 A02] nA1] := @add_continuous K E (xy1.1, xy2.1) _ nA.
@@ -361,7 +378,7 @@ move => [[x1 y1][x2 y2]] /= [] [] a1 b1 [] a2 b2.
361378by apply: nU; split; [exact: (nA1 (x1, x2))|exact: (nB1 (y1, y2))].
362379Qed .
363380
364- Lemma prod_scale_continuous : continuous (fun z : K^o * (E * F) => z.1 *: z.2).
381+ Local Lemma prod_scale_continuous : continuous (fun z : K^o * (E * F) => z.1 *: z.2).
365382Proof .
366383move => [/= r [x y]] /= U /= []/= [A B] /= [nA nB] nU.
367384have [/= A0 [A01 A02] nA1] := @scale_continuous K E (r, x) _ nA.
@@ -372,7 +389,7 @@ by move=> [l [e f]] /= [] [Al Bl] [] Ae Be; apply: nU; split;
372389 [exact: (nA1 (l, e))|exact: (nB1 (l, f))].
373390Qed .
374391
375- Lemma prod_locally_convex :
392+ Local Lemma prod_locally_convex :
376393 exists2 B : set (set (E * F)), (forall b, b \in B -> convex b) & basis B.
377394Proof .
378395have [Be Bcb Beb] := @locally_convex K E.
0 commit comments