Module mathcomp.analysis.normedtype_theory.tvs
From HB Require Import structures.From mathcomp Require Import all_ssreflect_compat ssralg ssrnum vector.
From mathcomp Require Import interval_inference.
#[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 num_normedtype.
From mathcomp Require Import pseudometric_normed_Zmodule.
Set SsrOldRewriteGoalsOrder.
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.
.
{ of Nbhs M & GRing.Lmodule K M}.
.
add_continuous : continuous (fun : M * M => x.1 + x.2) ;
}.
.
{ of PreTopologicalNmodule M & PreTopologicalNmodule_isTopologicalNmodule M}.
.
opp_continuous : continuous (-%R : M -> M) ;
}.
.
{ of TopologicalNmodule M & GRing.Zmodule M
& TopologicalNmodule_isTopologicalZmodule M}.
.
sub_continuous : continuous (fun : M * M => x.1 - x.2) ;
}.
.
Lemma
Proof.
Lemma
Proof.
rewrite -(@eq_cvg _ _ _ (fun => x.1 - (- x.2))); last first.
by move=> y; rewrite opprK.
rewrite -[in x.1 + _](opprK x.2).
apply: (@continuous_comp _ _ _ (fun => (x.1, - x.2)) (fun => x.1 - x.2)).
apply: cvg_pair; first exact: cvg_fst.
by apply: continuous_comp; [exact: cvg_snd|exact: opp_continuous].
exact: sub_continuous.
Qed.
.
PreTopologicalNmodule_isTopologicalNmodule.Build M add_continuous.
.
TopologicalNmodule_isTopologicalZmodule.Build M opp_continuous.
.
Section TopologicalZmoduleTheory.
Variables ( : topologicalZmodType).
Lemma
Proof.
End TopologicalZmoduleTheory.
.
{ of Topological M & GRing.Lmodule K M}.
.
& Topological M & GRing.Lmodule R M := {
scale_continuous : continuous (fun : R^o * M => z.1 *: z.2) ;
}.
.
{ of TopologicalZmodule M & GRing.Lmodule K M
& TopologicalZmodule_isTopologicalLmodule K M}.
.
& Topological M & GRing.Lmodule R M := {
scale_continuous : continuous (fun : R^o * M => z.1 *: z.2) ;
}.
.
Lemma
Proof.
rewrite -(@eq_cvg _ _ _ (fun => -1 *: x)); last 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.
.
TopologicalNmodule_isTopologicalZmodule.Build M opp_continuous.
.
TopologicalZmodule_isTopologicalLmodule.Build R M scale_continuous.
.
.
add_unif_continuous : unif_continuous (fun : M * M => x.1 + x.2)
}.
.
{ of PreUniformNmodule M & PreUniformNmodule_isUniformNmodule M}.
.
opp_unif_continuous : unif_continuous (-%R : M -> M)
}.
.
{ of UniformNmodule M & GRing.Zmodule M & UniformNmodule_isUniformZmodule M}.
.
sub_unif_continuous : unif_continuous (fun : M * M => x.1 - x.2)
}.
.
Lemma
Proof.
move=> /= U [[]] /= U1 U2 [] U1e U2e /subsetP U12.
apply: filterS U2e => x xU2/=.
have /U12 : ((0, 0), x) \in U1 `*` U2.
by rewrite in_setX/= (mem_set xU2) andbT inE; exact: entourage_refl.
by rewrite inE/= => -[[[a1 a2] [b1 b2]]]/= /[swap]-[] -> -> <-.
move=> /= U /sub_unif_continuous /unif /=.
rewrite -comp_preimage/= /comp/= /nbhs/=.
by congr entourage => /=; rewrite eqEsubset; split=> x /=; rewrite !sub0r.
Qed.
Lemma
Proof.
move=> /= U [[]]/= U1 U2 [] U1e /opp_unif_continuous.
rewrite /nbhs/= => U2e /subsetP U12.
apply: (@filterS _ _ entourage_filter
((fun => (xy.1.1, xy.2.1, (-xy.1.2, -xy.2.2))) @^-1` (U1 `*` U2))).
move=> /= [] [] a1 a2 [] b1 b2/= [] ab1 ab2.
have /U12 : (a1, b1, (-a2, -b2)) \in U1 `*` U2 by rewrite !inE.
by rewrite inE/= => [] [] [] [] c1 c2 [] d1 d2/= cd [] <- <- <- <-.
exists (U1, ((fun : M * M => (- xy.1, - xy.2)) @^-1` U2)); first by split.
by move=> /= [] [] a1 a2 [] b1 b2/= [] aU bU; exists (a1, b1, (a2, b2)).
move=> /= U /sub_unif_continuous/unif; rewrite /nbhs/=.
rewrite -comp_preimage/=/comp/=.
by congr entourage; rewrite eqEsubset; split=> x /=; rewrite !opprK.
Qed.
.
PreUniformNmodule_isUniformNmodule.Build M add_unif_continuous.
.
UniformNmodule_isUniformZmodule.Build M opp_unif_continuous.
.
Section UniformZmoduleTheory.
Variables ( : UniformZmodule.type).
Lemma
Proof.
by move=> /= U /add_unif_continuous/unif; rewrite /nbhs/= -comp_preimage.
move=> /= U [[]]/= U1 U2 [] U1e /opp_unif_continuous.
rewrite /nbhs/= => U2e /subsetP U12.
apply: (@filterS _ _ entourage_filter
((fun => (xy.1.1, xy.2.1, (- xy.1.2, - xy.2.2))) @^-1` (U1 `*` U2))).
move=> /= [] [] a1 a2 [] b1 b2/= [] ab1 ab2.
have /U12 : (a1, b1, (-a2, -b2)) \in U1 `*` U2 by rewrite !inE.
by rewrite inE/= => [] [] [] [] c1 c2 [] d1 d2/= cd [] <- <- <- <-.
exists (U1, ((fun : M * M => (- xy.1, - xy.2)) @^-1` U2)); first by split.
by move=> /= [] [] a1 a2 [] b1 b2/= [] aU bU; exists (a1, b1, (a2, b2)).
Qed.
End UniformZmoduleTheory.
.
{ of Uniform M & GRing.Lmodule K M}.
.
& PreUniformLmodule R M := {
scale_unif_continuous : unif_continuous (fun : R^o * M => z.1 *: z.2) ;
}.
.
{ of UniformZmodule M & GRing.Lmodule R M
& PreUniformLmodule_isUniformLmodule R M}.
.
& PreUniformLmodule R M := {
scale_unif_continuous : unif_continuous (fun : R^o * M => z.1 *: z.2) ;
}.
.
Lemma
Proof.
move=> /= U [[]] /= U1 U2 [] U1e U2e /subsetP U12.
rewrite /nbhs/=.
apply: filterS U2e => x xU2/=.
have /U12 : ((-1, -1), x) \in U1 `*` U2.
rewrite in_setX/= (mem_set xU2) andbT.
by apply/mem_set; exact: entourage_refl.
by rewrite inE/= => [[[]]] [] a1 a2 [] b1 b2/= abU [] {2}<- <- <-/=.
move=> /= U /scale_unif_continuous/unif/=.
rewrite /nbhs/=.
rewrite -comp_preimage/=/comp/=.
by congr entourage; rewrite eqEsubset; split=> x /=; rewrite !scaleN1r.
Qed.
.
UniformNmodule_isUniformZmodule.Build M opp_unif_continuous.
.
PreUniformLmodule_isUniformLmodule.Build R M scale_unif_continuous.
.
.
& Uniform E & GRing.Lmodule R E := {
locally_convex : exists2 : set_system E,
(forall , b \in B -> convex_set b) & basis B
}.
- mathcomp.analysis.normedtype_theory.normed_module
Source code
- mathcomp.analysis.normedtype_theory.normed_module
Source code
- mathcomp.analysis.normedtype_theory.normed_module
Source code
- mathcomp.analysis.normedtype_theory.normed_module
Source code
- mathcomp.analysis.normedtype_theory.normed_module
Source code
- mathcomp.analysis.normedtype_theory.normed_module
Source code
- mathcomp.analysis.normedtype_theory.normed_module
Source code
- mathcomp.analysis.normedtype_theory.normed_module
Source code
- mathcomp.analysis.normedtype_theory.normed_module
Source code
- mathcomp.analysis.normedtype_theory.normed_module
Source code
- mathcomp.analysis.normedtype_theory.normed_module
Source code
{ of Uniform_isTvs R E & Uniform E & TopologicalLmodule R E}.
Section properties_of_topologicalLmodule.
Context ( : numDomainType) ( : preTopologicalLmodType R) ( : set E).
Lemma
nbhs x U -> nbhs (-x) (-%R @` U).
Proof.
Lemma
nbhs 0 U -> nbhs 0 (-%R @` U).
Proof.
Lemma
nbhs 0 U -> nbhs x (+%R x @` U).
Proof.
Lemma
nbhs z U -> nbhs (x + z) (+%R x @` U).
Proof.
End properties_of_topologicalLmodule.
.
& Topological E & GRing.Lmodule R E := {
add_continuous : continuous (fun : E * E => x.1 + x.2) ;
scale_continuous : continuous (fun : R^o * E => z.1 *: z.2) ;
locally_convex : exists2 : set_system E,
(forall , b \in B -> convex_set b) & basis B
}.
.
Definition
Source code
fun => exists ( : set E), nbhs (0 : E) U /\
(forall : E * E, (xy.1 - xy.2) \in U -> xy \in P).
Let
Proof.
Lemma
Proof.
Let
Proof.
Let
Proof.
Lemma
Proof.
move=> P Q; rewrite /entourage nbhsE /=.
move=> [U [[B B0] BU Bxy]] [V [[C C0] CV Cxy]].
exists (U `&` V); split => [|xy].
by exists (B `&` C); [exact: open_nbhsI|exact: setISS].
by rewrite !in_setI => /andP[/Bxy-> /Cxy->].
by move=> P Q PQ [U [HU Hxy]]; exists U; split=> [|xy /Hxy /[!inE] /PQ].
Qed.
Local Lemma
entourage A -> [set | xy.1 = xy.2] `<=` A.
Proof.
apply/mem_set; exact: nbhs_singleton.
Qed.
Local Lemma
entourage A -> entourage A^-1%relation.
Proof.
Local Lemma
exists2 : set (E * E), entourage B & (B \; B)%relation `<=` A.
Proof.
have := @add_continuous (0, 0); rewrite /continuous_at/= addr0 => /(_ U U0)[]/=.
move=> [W1 W2] []; rewrite nbhsE/= => [[U1 nU1 UW1] [U2 nU2 UW2]] Wadd.
exists [set | (W1 `&` W2) (w.1 - w.2)].
exists (W1 `&` W2); split; last by [].
exists (U1 `&` U2); first exact: open_nbhsI.
by move=> t [U1t U2t]; split; [exact: UW1|exact: UW2].
move => xy /= [z [H1 _] [_ H2]]; apply/set_mem/(Uxy xy)/mem_set.
rewrite [_ - _](_ : _ = (xy.1 - z) + (z - xy.2)); last by rewrite addrA subrK.
exact: (Wadd (xy.1 - z,z - xy.2)).
Qed.
Local Lemma
Proof.
rewrite /nbhs_ /=; apply/funext => x; rewrite /filter_from/=.
apply/funext => U; apply/propext => /=; rewrite /entourage /=; split.
- pose V : set E := [set | x - v \in U].
move=> nU; exists [set | xy.1 - xy.2 \in V]; last first.
by move=> y /xsectionP; rewrite /V /= !inE /= opprB addrC subrK inE.
exists V; split; last by move=> xy; rewrite !inE /= inE.
have /= := nbhsB x (nbhsN nU); rewrite subrr /= /V.
rewrite [X in nbhs _ X -> _](_ : _ = [set | x - v \in U])//.
apply/funext => /= v /=; rewrite inE; apply/propext; split.
by move=> [x0 [x1]] Ux1 <- <-; rewrite opprB addrC subrK.
move=> Uxy; exists (v - x); last by rewrite addrC subrK.
by exists (x - v); rewrite ?opprB.
- move=> [A [U0 [nU UA]] H]; near=> z; apply: H; apply/xsectionP/set_mem/UA.
near: z; rewrite nearE; have := nbhsT x (nbhs0N nU).
rewrite [X in nbhs _ X -> _](_ : _ = [set | x - v \in U0])//.
apply/funext => /= z /=; apply/propext; split.
by move=> [x0] [x1 Ux1 <-] <-; rewrite opprB addrC subrK inE.
rewrite inE => Uxz; exists (z - x); last by rewrite addrC subrK.
by exists (x - z); rewrite ?opprB.
Unshelve. all: by end_near. Qed.
.
entourage_filter entourage_refl
entourage_inv entourage_split_ex
nbhsE.
.
Section Tvs_numDomain.
Context ( : numDomainType) ( : tvsType R) ( : set E).
Lemma
Proof.
Lemma
Proof.
Lemma
Proof.
End Tvs_numDomain.
Section Tvs_numField.
Lemma
r != 0 -> nbhs 0 U -> nbhs 0 ( *:%R r @` U ).
Proof.
Lemma
r != 0 -> nbhs x U -> nbhs (r *:x) ( *:%R r @` U ).
Proof.
End Tvs_numField.
Section standard_topology.
Variable : numFieldType.
Proof.
by rewrite opprD addrACA normm_lt_split.
Unshelve. all: by end_near. Qed.
Let
Proof.
near=> l z => /=; have M0 : 0 < M by [].
rewrite (@distm_lt_split _ _ (k *: z)) // -?(scalerBr, scalerBl) normrM.
rewrite (@le_lt_trans _ _ (M * `|x - z|)) ?ler_wpM2r -?ltr_pdivlMl//.
by near: z; apply: cvgr_dist_lt; rewrite // mulr_gt0 ?invr_gt0.
rewrite (@le_lt_trans _ _ (`|k - l| * M)) ?ler_wpM2l -?ltr_pdivlMr//.
by near: z; near: M; exact: (@cvg_bounded _ R^o _ _ _ _ _ (@cvg_refl _ _)).
by near: l; apply: cvgr_dist_lt; rewrite // divr_gt0.
Unshelve. all: by end_near. Qed.
Local Open Scope convex_scope.
Let
Proof.
rewrite inE/=.
rewrite [X in `|X|](_ : _ = (x - z : convex_lmodType _) <| l |>
(x - y : convex_lmodType _)); last first.
by rewrite opprD -[in LHS](convmm l x) addrACA -scalerBr -scalerBr.
rewrite (le_lt_trans (ler_normD _ _))// !normrM.
rewrite (@ger0_norm _ l%:num)// (@ger0_norm _ l%:num.~) ?onem_ge0//.
rewrite -[ltRHS]mul1r -(add_onemK l%:num) [ltRHS]mulrDl.
by rewrite ltrD// ltr_pM2l// onem_gt0.
Qed.
Let
exists2 : set_system R^o, (forall , b \in B -> convex_set b) & basis B.
Proof.
.
PreTopologicalNmodule_isTopologicalNmodule.Build R^o standard_add_continuous.
.
TopologicalNmodule_isTopologicalLmodule.Build R R^o standard_scale_continuous.
.
Uniform_isTvs.Build R R^o standard_locally_convex_set.
End standard_topology.
Section prod_Tvs.
Context ( : numFieldType) ( : tvsType K).
Local Lemma
continuous (fun : (E * F) * (E * F) => x.1 + x.2).
Proof.
have [/= A0 [A01 A02] nA1] := @add_continuous E (xy1.1, xy2.1) _ nA.
have [/= B0 [B01 B02] nB1] := @add_continuous F (xy1.2, xy2.2) _ nB.
exists ([set | A0.1 xy.1 /\ B0.1 xy.2], [set | A0.2 xy.1 /\ B0.2 xy.2]).
by split; [exists (A0.1, B0.1)|exists (A0.2, B0.2)].
move => [[x1 y1][x2 y2]] /= [] [] a1 b1 [] a2 b2.
by apply: nU; split; [exact: (nA1 (x1, x2))|exact: (nB1 (y1, y2))].
Qed.
Local Lemma
continuous (fun : K^o * (E * F) => z.1 *: z.2).
Proof.
have [/= A0 [A01 A02] nA1] := @scale_continuous K E (r, x) _ nA.
have [/= B0 [B01 B02] nB1] := @scale_continuous K F (r, y) _ nB .
exists (A0.1 `&` B0.1, A0.2 `*` B0.2).
by split; [exact: filterI|exists (A0.2,B0.2)].
by move=> [l [e f]] /= [] [Al Bl] [] Ae Be; apply: nU; split;
[exact: (nA1 (l, e))|exact: (nB1 (l, f))].
Qed.
Local Lemma
exists2 : set_system (E * F), (forall , b \in B -> convex_set b) & basis B.
Proof.
have [Bf Bcf Bfb] := @locally_convex K F.
pose B := [set : set (E * F) | open ef /\
exists , exists2 , Be be & Bf bf /\ be `*` bf = ef].
have : basis B.
rewrite /basis/=; split; first by move=> b => [] [].
move=> /= [x y] ef [[ne nf]] /= [Ne Nf] Nef.
case: Beb => Beo /(_ x ne Ne) /= -[a] [] Bea ax ea.
case: Bfb => Bfo /(_ y nf Nf) /= -[b] [] Beb yb fb.
exists [set | a z.1 /\ b z.2]; last first.
by apply: subset_trans Nef => -[zx zy] /= [] /ea + /fb.
split=> //=; split; last by exists a, b.
rewrite openE => [[z z'] /= [az bz]]; exists (a, b) => /=; last by [].
rewrite !nbhsE /=; split; first by exists a => //; split => //; exact: Beo.
by exists b => //; split => // []; exact: Bfo.
exists B => // => b; rewrite inE /= => [[]] bo [] be [] bf Bee [] Bff <-.
move => [x1 y1] [x2 y2] l /[!inE] /= -[xe1 yf1] [xe2 yf2].
split.
by apply/set_mem/Bcb; [exact/mem_set|exact/mem_set|exact/mem_set].
by apply/set_mem/Bcf; [exact/mem_set|exact/mem_set|exact/mem_set].
Qed.
.
(E * F)%type prod_add_continuous.
.
K (E * F)%type prod_scale_continuous.
.
Uniform_isTvs.Build K (E * F)%type prod_locally_convex.
End prod_Tvs.