Module mathcomp.analysis.normedtype_theory.tvs
From HB Require Import structures.From mathcomp Require Import boot order ssralg ssrnum vector.
From mathcomp Require Import interval_inference finmap.
#[warning="-warn-library-file-internal-analysis"]
From mathcomp Require Import unstable.
From mathcomp Require Import boolp classical_sets functions cardinality.
From mathcomp Require Import convex set_interval reals topology.
From mathcomp Require Import initial_topology num_normedtype.
From mathcomp Require Import pseudometric_normed_Zmodule.
# Topological vector spaces
This file introduces locally convex topological vector spaces.
`balanced_set A`
: $\forall r, |r|\leq 1 \to rA \subseteq A$
`absolutely_convex_set A`
: convex and balanced set
`absorbing_set A`
: $\forall x, \exists r, r>0 \land rx\in A$
`NbhsLmodule K`
: HB join of `Nbhs` and `Lmodule` over `K`, a `numDomainType`
`preTopologicalLmodType K`
: topological space and `Lmodule` over `K`, a `numDomainType`
: The HB class is `PreTopologicalLmodule`.
`topologicalLmodType K`
: `topologicalNmodule` and `Lmodule` on `K ` with a continuous scaling
: operation
: The HB class is `TopologicalLmodule`.
`convexTvsType R`
: interface type for a locally convex TVS on a `numDomainType` `R`
: A convex TVS is constructed over a uniform space.
: The HB class is `ConvexTvs`.
`subConvexTvsType R V S`
: join of `subTopologicalType`, `convexTvsType`, and `subLmoduleType`
: The HB class is `SubConvexTvs`.
: Instance: in particular, it is shown that a sub-Lmodule is a sub-convex
: TVS.
`init_subconvextvs`
: the subConvexTvs structure on any subLmodule in a convexTvs, endowed
: with the initial topology induced by the embedding
`PreTopologicalLmod_isConvexTvs`
: factory allowing the construction of a convex TVS from an Lmodule which
: is also a topological space
`{linear_continuous E -> F}`
: the type of all linear and continuous functions between E and F, where E
: is a NbhsLmodule.type and F a NbhsZmodule.type over a numDomainType R
: The HB class is called LinearContinuous.
: The notation `{linear_continuous E -> F | s}` also exists.
`lcfun E F s`
: membership predicate for linear continuous functions of type `E -> F` h
: with scalar operator `s : K -> F -> F`
: `E` and `F` have type `convexTvsType K`.
: This is used in particular to attach a type of `lmodType` to
: `{linear_continuous E -> F | s}`.
`lcfun_spec f`
: specification for membership of the linear continuous function f
`gauge_fun`
: Also called the Minkowski functional, the gauge function on an
: absolutely convex and absorbing subset is the distance of a point to
: this subset. It is endowed with a `Seminorm.type` structure.
`seminorm_on`
: builds a `convexTvsType` structure on a `Lmodule` from a nonempty family
: of seminorms
`seminorm_subbasis`
: the subbasis of neighbourhoods for `seminorm_on`, built as the reverse
: image by the seminorms of open balls centered at 0
`gauge_fun_basis`
: a gauge functional for an element of the basis of open neighbourhoods
: for a `convexTvsType`
`seminorm_of`
: the family of gauge functionals for the basis of open neighbourhoods for
: a `convexTvsType`. It is shown to generate through seminorm_on the same
: topology as the one generated by the said basis.
HB instances:
- The type `R^o` (`R : numFieldType`) is endowed with the structure of
`ConvexTvs`.
- The product of two TVS is endowed with the structure of `ConvexTvs`.
- `{linear_continuous E-> F}` is endowed with a lmodType structure when
`E` and `F` are `ConvexTvs`.
Reserved Notation "'{' 'linear_continuous' U '->' V '|' s '}'"
(at level 0, U at level 98, V at level 99,
format "{ 'linear_continuous' U -> V | s }").
Reserved Notation "'{' 'linear_continuous' U '->' V '}'"
(at level 0, U at level 98, V at level 99,
format "{ 'linear_continuous' U -> V }").
Set Implicit Arguments.
Unset Strict Implicit.
Unset Printing Implicit Defensive.
Import Order.TTheory GRing.Theory Num.Def Num.Theory.
Import numFieldTopology.Exports.
Local Open Scope classical_set_scope.
Local Open Scope ring_scope.
Section absolutely_convex.
Context { : numDomainType} { : lmodType K}.
Implicit Type A : set V.
Definition
balanced_set
Used by
Source code
:= forall , `|r| <= 1 -> ( *:%R r) @` A `<=` A.Used by
- mathcomp.analysis.normedtype_theory.normed_module
Source code
Definition
absolutely_convex_set
Used by
Source code
:= convex_set A /\ balanced_set A.Used by
- mathcomp.analysis.normedtype_theory.normed_module
Source code
Lemma
absolutely_convex0Source code
: A !=set0 -> absolutely_convex_set A -> A 0.Proof.
Definition
absorbing_set
Source code
:= forall : V, exists2 , 0 < r & r *: x \in A.Source code
End absolutely_convex.
Lemma
absolutely_convex_setXSource code
( : numDomainType) ( : lmodType K)( : set E) ( : set F) :
absolutely_convex_set A -> absolutely_convex_set B ->
absolutely_convex_set (A `*` B).
Proof.
move=> [convA balA] [convB balB]; split.
- move => [x1 y1] [x2 y2] l /[!inE] /= -[Ax1 By1] [Ax2 By2]; split.
+ by apply/set_mem/convA; exact/mem_set.
+ by apply/set_mem/convB; exact/mem_set.
- move=> r r1 [x1 y1] [[x2 y2]]/= [Ax2 By2] [] <- <-; split.
+ by apply/balA; [exact: r1|exists x2].
+ by apply/balB; [exact: r1|exists y2].
Qed.
- move => [x1 y1] [x2 y2] l /[!inE] /= -[Ax1 By1] [Ax2 By2]; split.
+ by apply/set_mem/convA; exact/mem_set.
+ by apply/set_mem/convB; exact/mem_set.
- move=> r r1 [x1 y1] [[x2 y2]]/= [Ax2 By2] [] <- <-; split.
+ by apply/balA; [exact: r1|exists x2].
+ by apply/balB; [exact: r1|exists y2].
Qed.
.
structureSource code
DefinitionSource code
NbhsLmoduleSource code
( numDomainTypeSource code
) :={ of Nbhs M & GRing.Lmodule K M}.
#[shortSource code
(type=Source code
"preTopologicalLmodType"Source code
).
structureSource code
DefinitionSource code
PreTopologicalLmoduleSource code
( numDomainTypeSource code
) :={ of Topological M & GRing.Lmodule K M}.
Section properties_of_preTopologicalLmodule.
Context ( : numDomainType) ( : preTopologicalLmodType R) ( : set E).
Lemma
nbhsN_subproofSource code
( : continuous (fun : R^o * E => z.1 *: z.2)) ( : E) :nbhs x U -> nbhs (-x) (-%R @` U).
Proof.
Lemma
nbhs0N_subproofSource code
( : continuous (fun : R^o * E => z.1 *: z.2)) :nbhs 0 U -> nbhs 0 (-%R @` U).
Proof.
Lemma
nbhsD_subproofSource code
( : continuous (fun : E * E => x.1 + x.2)) ( : E) :nbhs 0 U -> nbhs x (+%R x @` U).
Proof.
Lemma
nbhsB_subproofSource code
( : continuous (fun : E * E => x.1 + x.2)) ( : E) :nbhs z U -> nbhs (x + z) (+%R x @` U).
Proof.
End properties_of_preTopologicalLmodule.
.
mixinSource code
RecordSource code
TopologicalZmodule_isTopologicalLmoduleSource code
( numDomainTypeSource code
) M& PreTopologicalLmodule R M := {
scale_continuous : continuous (fun : R^o * M => z.1 *: z.2)
}.
#[shortSource code
(type=Source code
"topologicalLmodType"Source code
).
structureSource code
DefinitionSource code
TopologicalLmoduleSource code
( numDomainTypeSource code
) :={ of TopologicalZmodule M & GRing.Lmodule K M
& TopologicalZmodule_isTopologicalLmodule K M}.
Section TopologicalLmodule_theory.
Context { : numFieldType} ( : topologicalLmodType R).
Lemma
fun_cvgZSource code
( : Type) ( : set_system T) { : Filter U} ( : T -> R)( : T -> E) ( : R) :
l @ U --> r -> f @ U --> a ->
l x *: f x @[ --> U] --> r *: a.
Proof.
Lemma
fun_cvgZrSource code
( : Type) ( : set_system T) { : Filter U} ( : T -> E) :f @ U --> a -> k \*: f @ U --> k *: a.
Lemma
nbhs0ZSource code
( : set E) ( : R) : r != 0 -> nbhs 0 U -> nbhs 0 ( *:%R r @` U ).Proof.
Lemma
nbhsZSource code
( : set E) ( : R) ( :E) :r != 0 -> nbhs x U -> nbhs (r *:x) ( *:%R r @` U ).
Proof.
End TopologicalLmodule_theory.
Section TopologicalLmodule_numDomain.
Context { : numDomainType} ( : topologicalLmodType R).
Lemma
nbhs0NSource code
( : set E) : nbhs 0 U -> nbhs 0 (-%R @` U).Proof.
Lemma
nbhsD0Source code
( : set E) ( : E) : nbhs 0 U -> nbhs x (+%R x @` U).Proof.
Lemma
nbhsDSource code
( : set E) ( : E) : nbhs z U -> nbhs (x + z) (+%R x @` U).Proof.
Lemma
openDSource code
( : set E) ( : E) : open V -> open (+%R x @` V).Proof.
Lemma
openBSource code
( : set E) ( : E) : open (+%R x @` V) -> open V.Proof.
Lemma
nbhsE0Source code
( : E) ( : set E): nbhs x b <-> b x /\exists2 , nbhs 0 a & [set x + x0 | in a] `<=` b.
Proof.
End TopologicalLmodule_numDomain.
Section TopologicalLmodule_numField.
Lemma
openZSource code
( : numFieldType) ( : topologicalLmodType R) ( : set E) ( : R) :r != 0 -> open U -> open ( *:%R r @` U ).
Proof.
End TopologicalLmodule_numField.
Section TopologicalLmodule_theory.
Context { : Type} { : numFieldType} { : topologicalLmodType R}.
Lemma
continuousfor0_continuousUsed by
Source code
( : {linear F -> G}) :- mathcomp.analysis.functional_analysis.hahn_banach_theorem
Source code
{for 0, continuous f} -> continuous f.
Proof.
move=> cont0 x.
suff: (f y - f x)@[ --> x] --> (0 : G).
have -> : (fun => f y - f x) = (fun => f (y - x)).
by apply/funext => y; rewrite linearB.
move=> fxfy /= A nA /=.
pose B := [set y - f x | in A].
have /fxfy : nbhs 0 B.
have -> : B = (+%R^~ (- (- f x))) @^-1` A.
rewrite opprK; apply/seteqP; split.
by move=> y [/= g Ag <-]; rewrite subrK.
move=> g/= Agfx; eexists; first exact: Agfx.
by rewrite addrK.
have:= @continuous_shift _ (0 : G) (f x) A.
by rewrite opprK add0r => /(_ nA); exact.
rewrite /nbhs /=; apply/filterS => z /=; rewrite /B /=.
by move=> [y Ay]; rewrite linearB => /subIr <-.
have -> : (fun => f y - f x) = (fun => f (y - x)).
by apply/funext => y; rewrite linearB.
apply: cvg_comp; last by rewrite -(linear0 f); exact: cont0.
by move => A nA /=; apply: continuous_shift; rewrite subrr.
Qed.
suff: (f y - f x)@[ --> x] --> (0 : G).
have -> : (fun => f y - f x) = (fun => f (y - x)).
by apply/funext => y; rewrite linearB.
move=> fxfy /= A nA /=.
pose B := [set y - f x | in A].
have /fxfy : nbhs 0 B.
have -> : B = (+%R^~ (- (- f x))) @^-1` A.
rewrite opprK; apply/seteqP; split.
by move=> y [/= g Ag <-]; rewrite subrK.
move=> g/= Agfx; eexists; first exact: Agfx.
by rewrite addrK.
have:= @continuous_shift _ (0 : G) (f x) A.
by rewrite opprK add0r => /(_ nA); exact.
rewrite /nbhs /=; apply/filterS => z /=; rewrite /B /=.
by move=> [y Ay]; rewrite linearB => /subIr <-.
have -> : (fun => f y - f x) = (fun => f (y - x)).
by apply/funext => y; rewrite linearB.
apply: cvg_comp; last by rewrite -(linear0 f); exact: cont0.
by move => A nA /=; apply: continuous_shift; rewrite subrr.
Qed.
End TopologicalLmodule_theory.
Section topologicalLmodType_realFieldType.
Context { : realFieldType} { : topologicalLmodType R}.
Implicit Type x : E.
Lemma
continuousZlSource code
( : R) : {for s, continuous (fun : R^o => t *: x)}.Proof.
Lemma
continuousZrSource code
( : R) : {for x, continuous (fun : E => s *: y)}.Proof.
End topologicalLmodType_realFieldType.
.
factorySource code
RecordSource code
TopologicalNmodule_isTopologicalLmoduleSource code
( numDomainTypeSource code
) M& PreTopologicalLmodule R M := {
scale_continuous : continuous (fun : R^o * M => z.1 *: z.2) }.
.
buildersSource code
ContextSource code
TopologicalNmodule_isTopologicalLmoduleSource code
R M.Let
opp_continuousSource code
: continuous (-%R : M -> M).Proof.
move=> x; rewrite /continuous_at.
rewrite -(@eq_cvg _ _ _ (fun => -1 *: x)); first by move=> y; rewrite scaleN1r.
rewrite -[- x]scaleN1r.
apply: (@continuous_comp M (R^o * M)%type M (fun => (-1, x))
(fun => x.1 *: x.2)); last exact: scale_continuous.
by apply: (@cvg_pair _ _ _ _ (nbhs (-1 : R^o))); [exact: cvg_cst|exact: cvg_id].
Qed.
rewrite -(@eq_cvg _ _ _ (fun => -1 *: x)); first by move=> y; rewrite scaleN1r.
rewrite -[- x]scaleN1r.
apply: (@continuous_comp M (R^o * M)%type M (fun => (-1, x))
(fun => x.1 *: x.2)); last exact: scale_continuous.
by apply: (@cvg_pair _ _ _ _ (nbhs (-1 : R^o))); [exact: cvg_cst|exact: cvg_id].
Qed.
#[warning=Source code
"-HB.no-new-instance"Source code
.
instanceSource code
DefinitionSource code
TopologicalNmodule_isTopologicalZmodule.Build M opp_continuous.
.
instanceSource code
DefinitionSource code
TopologicalZmodule_isTopologicalLmodule.Build R M scale_continuous.
.
endSource code
..
mixinSource code
RecordSource code
Uniform_isConvexTvsSource code
( numDomainTypeSource code
) E& Uniform E & GRing.Lmodule R E := {
locally_convex : exists2 : set_system E,
(forall , b \in B -> absolutely_convex_set b) & (nbhs_basis 0) B
}.
#[shortUsed by
Source code
(- mathcomp.analysis.normedtype_theory.normed_module
Source code
type=Used by
Source code
- mathcomp.analysis.normedtype_theory.normed_module
Source code
"convexTvsType"Used by
Source code
)- mathcomp.analysis.normedtype_theory.normed_module
Source code
]Used by
Source code
- mathcomp.analysis.normedtype_theory.normed_module
Source code
HBUsed by
Source code
.- mathcomp.analysis.normedtype_theory.normed_module
Source code
structureUsed by
Source code
- mathcomp.analysis.normedtype_theory.normed_module
Source code
DefinitionUsed by
Source code
- mathcomp.analysis.normedtype_theory.normed_module
Source code
ConvexTvsUsed by
Source code
(- mathcomp.analysis.normedtype_theory.normed_module
Source code
RUsed by
Source code
- mathcomp.analysis.normedtype_theory.normed_module
Source code
:Used by
Source code
- mathcomp.analysis.normedtype_theory.normed_module
Source code
numDomainTypeUsed by
Source code
) :=- mathcomp.analysis.normedtype_theory.normed_module
Source code
{ of Uniform_isConvexTvs R E & UniformZmodule E & TopologicalLmodule R E}.
.
mixinSource code
RecordSource code
isSubConvexSpaceSource code
( numDomainTypeSource code
) (V : convType R)(S : pred V) U & SubChoice V S U & ConvexSpace R U := {
valconv : forall ( : {i01 R}) ( : U), val (conv t a b) = conv t (val a) (val b)
}.
#[shortSource code
(type=Source code
"subConvType"Source code
).
structureSource code
DefinitionSource code
SubConvexSpaceSource code
( numDomainTypeSource code
) (V : convType R) S :={ of SubChoice V S U & ConvexSpace R U & isSubConvexSpace R V S U }.