From 3e53d07aa16853146fceca12eada8cb5ce481654 Mon Sep 17 00:00:00 2001 From: Reynald Affeldt Date: Tue, 30 Jun 2026 16:13:36 +0900 Subject: [PATCH 1/5] make normed module depends on metric --- .../normedtype_theory/matrix_normedtype.v | 3 ++ theories/normedtype_theory/normed_module.v | 34 +++++++++++++++++-- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/theories/normedtype_theory/matrix_normedtype.v b/theories/normedtype_theory/matrix_normedtype.v index 14716afd4a..845a0b9c99 100644 --- a/theories/normedtype_theory/matrix_normedtype.v +++ b/theories/normedtype_theory/matrix_normedtype.v @@ -275,6 +275,9 @@ HB.instance Definition _ (K : numFieldType) m n := PseudoMetricNormedZmod_Lmodule_isNormedModule.Build K 'M[K]_(m, n) (@mx_normZ K m n). +HB.instance Definition _ (K : numFieldType) m n := + isNormedModule.Build _ 'M[K]_(m, n). + End matrix_NormedModule. Lemma continuous_mx {V : topologicalType} {R : realFieldType} {m n : nat} diff --git a/theories/normedtype_theory/normed_module.v b/theories/normedtype_theory/normed_module.v index 8910d1c916..fad3a3a8e3 100644 --- a/theories/normedtype_theory/normed_module.v +++ b/theories/normedtype_theory/normed_module.v @@ -92,11 +92,33 @@ HB.mixin Record PseudoMetricNormedZmod_ConvexTvs_isNormedModule K V normrZ : forall (l : K) (x : V), `| l *: x | = `| l | * `| x |; }. -#[short(type="normedModType")] -HB.structure Definition NormedModule (K : numDomainType) := +HB.structure Definition NormedModule0 (K : numDomainType) := {T of PseudoMetricNormedZmod K T & ConvexTvs K T & PseudoMetricNormedZmod_ConvexTvs_isNormedModule K T}. +#[short(type="normedModType")] +HB.structure Definition NormedModule (K : numDomainType) := + {T of NormedModule0 K T & Metric K T}. + +HB.factory Record isNormedModule (K : numDomainType) T of NormedModule0 K T := { }. + +HB.builders Context K T of isNormedModule K T. + +Let mdist (x y : T) : K := `|x - y|. + +Let mdist_ge0 x y : 0 <= mdist x y. Proof. by rewrite /mdist. Qed. + +Let mdist_positivity x y : mdist x y = 0 -> x = y. +Proof. by move=> /normr0_eq0/subr0_eq. Qed. + +Let ballEmdist x d : ball x d = [set y | mdist x y < d]. +Proof. by rewrite -ball_normE. Qed. + +HB.instance Definition _ := + @PseudoMetric_isMetric.Build K T mdist mdist_ge0 mdist_positivity ballEmdist. + +HB.end. + #[short(type="subNormedModType")] HB.structure Definition SubNormedModule (R : numDomainType) (V : normedModType R) (S : pred V) := @@ -1747,7 +1769,7 @@ Qed. Section prod_NormedModule. Context {K : numFieldType} {U V : normedModType K}. -Lemma prod_norm_scale (l : K) (x : U * V) : `| l *: x | = `|l| * `| x |. +Let prod_norm_scale (l : K) (x : U * V) : `| l *: x | = `|l| * `| x |. Proof. by rewrite prod_normE /= !normrZ maxr_pMr. Qed. HB.instance Definition _ := @@ -1756,6 +1778,9 @@ HB.instance Definition _ := End prod_NormedModule. +HB.instance Definition _ (R : numFieldType) (U V' : normedModType R) := + isNormedModule.Build _ (U * V')%type. + Section prod_NormedModule_lemmas. Context {T : Type} {K : numDomainType} {U V : normedModType K}. @@ -2683,6 +2708,9 @@ HB.instance Definition _ (V : vectType R) := PseudoMetricNormedZmod_Lmodule_isNormedModule.Build R (max_space V) (@Norm.normZ _ _ (@max_norm V)). +HB.instance Definition _ (V : vectType R) := + isNormedModule.Build _ (max_space V). + (* NB: Get Trocq to prove the continuity part automatically. *) Lemma sup_closed_ball_compact (V : vectType R) : compact (closed_ball (0 : max_space V) 1). From c3b143e5ae6c85ef93c60a44b1954355664af796 Mon Sep 17 00:00:00 2001 From: Reynald Affeldt Date: Tue, 30 Jun 2026 19:01:36 +0900 Subject: [PATCH 2/5] fix --- theories/normedtype_theory/normed_module.v | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/theories/normedtype_theory/normed_module.v b/theories/normedtype_theory/normed_module.v index fad3a3a8e3..e928f3513a 100644 --- a/theories/normedtype_theory/normed_module.v +++ b/theories/normedtype_theory/normed_module.v @@ -100,7 +100,7 @@ HB.structure Definition NormedModule0 (K : numDomainType) := HB.structure Definition NormedModule (K : numDomainType) := {T of NormedModule0 K T & Metric K T}. -HB.factory Record isNormedModule (K : numDomainType) T of NormedModule0 K T := { }. +HB.factory Record isNormedModule (K : numDomainType) T & NormedModule0 K T := { }. HB.builders Context K T of isNormedModule K T. From 18a7cfeefd477d524f33b71b5c33c08ceeddd479 Mon Sep 17 00:00:00 2001 From: Reynald Affeldt Date: Tue, 30 Jun 2026 21:12:05 +0900 Subject: [PATCH 3/5] fix --- theories/normedtype_theory/normed_module.v | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/theories/normedtype_theory/normed_module.v b/theories/normedtype_theory/normed_module.v index e928f3513a..55edebc751 100644 --- a/theories/normedtype_theory/normed_module.v +++ b/theories/normedtype_theory/normed_module.v @@ -102,7 +102,7 @@ HB.structure Definition NormedModule (K : numDomainType) := HB.factory Record isNormedModule (K : numDomainType) T & NormedModule0 K T := { }. -HB.builders Context K T of isNormedModule K T. +HB.builders Context K T & isNormedModule K T. Let mdist (x y : T) : K := `|x - y|. From 871d6b4bf75928459ece6c8c6e183ddfc067c382 Mon Sep 17 00:00:00 2001 From: Reynald Affeldt Date: Thu, 16 Jul 2026 17:02:30 +0900 Subject: [PATCH 4/5] gen to pseudoMetricNormedZmodule --- classical/boolp.v | 4 +- .../normedtype_theory/matrix_normedtype.v | 6 +- theories/normedtype_theory/normed_module.v | 55 +++++++++---------- .../pseudometric_normed_Zmodule.v | 45 ++++++++++++--- 4 files changed, 69 insertions(+), 41 deletions(-) diff --git a/classical/boolp.v b/classical/boolp.v index 47fbc0fbf1..46c565b1d1 100644 --- a/classical/boolp.v +++ b/classical/boolp.v @@ -6,7 +6,9 @@ (* -------------------------------------------------------------------- *) From HB Require Import structures. From mathcomp Require Import boot order. -From mathcomp Require Import mathcomp_extra unstable. +#[warning="-warn-library-file-internal-analysis"] +From mathcomp Require Import unstable. +From mathcomp Require Import mathcomp_extra. From mathcomp Require internal_Eqdep_dec. (**md**************************************************************************) diff --git a/theories/normedtype_theory/matrix_normedtype.v b/theories/normedtype_theory/matrix_normedtype.v index 845a0b9c99..c7abc5588f 100644 --- a/theories/normedtype_theory/matrix_normedtype.v +++ b/theories/normedtype_theory/matrix_normedtype.v @@ -221,6 +221,9 @@ HB.instance Definition _ := End matrix_pseudoMetricNormedZmod. +HB.instance Definition _ (K : numFieldType) m n := + isPseudoMetricNormedZmod.Build _ 'M[K]_(m, n). + Section within_continuous_coord. Context {T : topologicalType} {R : realFieldType} {n : nat}. Import numFieldNormedType.Exports. @@ -275,9 +278,6 @@ HB.instance Definition _ (K : numFieldType) m n := PseudoMetricNormedZmod_Lmodule_isNormedModule.Build K 'M[K]_(m, n) (@mx_normZ K m n). -HB.instance Definition _ (K : numFieldType) m n := - isNormedModule.Build _ 'M[K]_(m, n). - End matrix_NormedModule. Lemma continuous_mx {V : topologicalType} {R : realFieldType} {m n : nat} diff --git a/theories/normedtype_theory/normed_module.v b/theories/normedtype_theory/normed_module.v index 55edebc751..8a9032adeb 100644 --- a/theories/normedtype_theory/normed_module.v +++ b/theories/normedtype_theory/normed_module.v @@ -92,32 +92,10 @@ HB.mixin Record PseudoMetricNormedZmod_ConvexTvs_isNormedModule K V normrZ : forall (l : K) (x : V), `| l *: x | = `| l | * `| x |; }. -HB.structure Definition NormedModule0 (K : numDomainType) := - {T of PseudoMetricNormedZmod K T & ConvexTvs K T - & PseudoMetricNormedZmod_ConvexTvs_isNormedModule K T}. - #[short(type="normedModType")] HB.structure Definition NormedModule (K : numDomainType) := - {T of NormedModule0 K T & Metric K T}. - -HB.factory Record isNormedModule (K : numDomainType) T & NormedModule0 K T := { }. - -HB.builders Context K T & isNormedModule K T. - -Let mdist (x y : T) : K := `|x - y|. - -Let mdist_ge0 x y : 0 <= mdist x y. Proof. by rewrite /mdist. Qed. - -Let mdist_positivity x y : mdist x y = 0 -> x = y. -Proof. by move=> /normr0_eq0/subr0_eq. Qed. - -Let ballEmdist x d : ball x d = [set y | mdist x y < d]. -Proof. by rewrite -ball_normE. Qed. - -HB.instance Definition _ := - @PseudoMetric_isMetric.Build K T mdist mdist_ge0 mdist_positivity ballEmdist. - -HB.end. + {T of PseudoMetricNormedZmod K T & ConvexTvs K T + & PseudoMetricNormedZmod_ConvexTvs_isNormedModule K T}. #[short(type="subNormedModType")] HB.structure Definition SubNormedModule (R : numDomainType) @@ -393,6 +371,20 @@ HB.instance Definition _ := isPointed.Build M 0. HB.instance Definition _ := NormedZmod_PseudoMetric_eq.Build R M erefl. +(* TODO: why do we have to repeat this while we already have isPseudoMetricNormedZmod? *) +Let mdist (x y : M) : R := `|x - y|. + +Let mdist_ge0 x y : 0 <= mdist x y. Proof. by rewrite /mdist. Qed. + +Let mdist_positivity x y : mdist x y = 0 -> x = y. +Proof. by move=> /normr0_eq0/subr0_eq. Qed. + +Let ballEmdist x d : ball x d = [set y | mdist x y < d]. +Proof. by rewrite -ball_normE. Qed. + +HB.instance Definition _ := + @PseudoMetric_isMetric.Build R M mdist mdist_ge0 mdist_positivity ballEmdist. + HB.instance Definition _ := PseudoMetricNormedZmod_Lmodule_isNormedModule.Build R M normrZ. @@ -1766,6 +1758,10 @@ apply/connected_intervalP/connected_continuous_connected => //. exact: segment_connected. Qed. +(* TODO: move to pseudometric_normed_Zmodule.v *) +HB.instance Definition _ (R : numDomainType) (U V' : pseudoMetricNormedZmodType R) := + isPseudoMetricNormedZmod.Build _ (U * V')%type. + Section prod_NormedModule. Context {K : numFieldType} {U V : normedModType K}. @@ -1779,10 +1775,11 @@ HB.instance Definition _ := End prod_NormedModule. HB.instance Definition _ (R : numFieldType) (U V' : normedModType R) := - isNormedModule.Build _ (U * V')%type. + NormedModule.on (U * V')%type. +(* TODO: move to pseudometric_normed_Zmodule.v *) Section prod_NormedModule_lemmas. -Context {T : Type} {K : numDomainType} {U V : normedModType K}. +Context {T : Type} {K : numDomainType} {U V : pseudoMetricNormedZmodType K}. Lemma fcvgr2dist_ltP {F : set_system U} {G : set_system V} {FF : Filter F} {FG : Filter G} (y : U) (z : V) : @@ -2705,11 +2702,11 @@ HB.instance Definition _ (V : vectType R) := NormedZmod_PseudoMetric_eq.Build R (max_space V) erefl. HB.instance Definition _ (V : vectType R) := - PseudoMetricNormedZmod_Lmodule_isNormedModule.Build R (max_space V) - (@Norm.normZ _ _ (@max_norm V)). + isPseudoMetricNormedZmod.Build _ (max_space V). HB.instance Definition _ (V : vectType R) := - isNormedModule.Build _ (max_space V). + PseudoMetricNormedZmod_Lmodule_isNormedModule.Build R (max_space V) + (@Norm.normZ _ _ (@max_norm V)). (* NB: Get Trocq to prove the continuity part automatically. *) Lemma sup_closed_ball_compact (V : vectType R) : diff --git a/theories/normedtype_theory/pseudometric_normed_Zmodule.v b/theories/normedtype_theory/pseudometric_normed_Zmodule.v index 68e83d33b3..b35077ebbe 100644 --- a/theories/normedtype_theory/pseudometric_normed_Zmodule.v +++ b/theories/normedtype_theory/pseudometric_normed_Zmodule.v @@ -148,11 +148,45 @@ HB.mixin Record NormedZmod_PseudoMetric_eq (R : numDomainType) T pseudo_metric_ball_norm : ball = ball_ (fun x : T => `| x |) }. -#[short(type="pseudoMetricNormedZmodType")] -HB.structure Definition PseudoMetricNormedZmod (R : numDomainType) := +HB.structure Definition PseudoMetricNormedZmod0 (R : numDomainType) := {T of Num.NormedZmodule R T & PseudoMetric R T & NormedZmod_PseudoMetric_eq R T & isPointed T}. +#[short(type="pseudoMetricNormedZmodType")] +HB.structure Definition PseudoMetricNormedZmod (R : numDomainType) := + {T of PseudoMetricNormedZmod0 R T & Metric R T}. + +Section pseudoMetricNormedZmod_numDomainType. +Context {K : numDomainType} {V : PseudoMetricNormedZmod0.type K}. + +(**md Balls defined by the norm: *) +Local Notation ball_norm := (ball_ (@Num.norm K V)). + +Lemma ball_normE : ball_norm = ball. +Proof. by rewrite pseudo_metric_ball_norm. Qed. + +End pseudoMetricNormedZmod_numDomainType. + +HB.factory Record isPseudoMetricNormedZmod + (K : numDomainType) T & PseudoMetricNormedZmod0 K T := { }. + +HB.builders Context K T & isPseudoMetricNormedZmod K T. + +Let mdist (x y : T) : K := `|x - y|. + +Let mdist_ge0 x y : 0 <= mdist x y. Proof. by rewrite /mdist. Qed. + +Let mdist_positivity x y : mdist x y = 0 -> x = y. +Proof. by move=> /normr0_eq0/subr0_eq. Qed. + +Let ballEmdist x d : ball x d = [set y | mdist x y < d]. +Proof. by rewrite -ball_normE. Qed. + +HB.instance Definition _ := + @PseudoMetric_isMetric.Build K T mdist mdist_ge0 mdist_positivity ballEmdist. + +HB.end. + (* alternative definition of a PseudoMetricNormedZmod *) HB.factory Record NormedZmoduleMetric (R : numDomainType) T & Num.NormedZmodule R T & Metric R T & isPointed T := { @@ -175,12 +209,6 @@ HB.end. Section pseudoMetricNormedZmod_numDomainType. Context {K : numDomainType} {V : pseudoMetricNormedZmodType K}. -(**md Balls defined by the norm: *) -Local Notation ball_norm := (ball_ (@Num.norm K V)). - -Lemma ball_normE : ball_norm = ball. -Proof. by rewrite pseudo_metric_ball_norm. Qed. - Lemma ball_open (x : V) (r : K) : open (ball x r). Proof. rewrite openE/= -ball_normE/= /interior => y /= bxy; rewrite -nbhs_ballE. @@ -193,6 +221,7 @@ Lemma ball_open_nbhs (x : V) (r : K) : 0 < r -> open_nbhs x (ball x r). Proof. by move=> e0; split; [exact: ball_open|exact: ballxx]. Qed. (**md Neighborhoods defined by the norm: *) +Local Notation ball_norm := (ball_ (@Num.norm K V)). Local Notation nbhs_norm := (nbhs_ball_ ball_norm). (* if we do not give the V argument to nbhs, the universally quantified set that From 14d556689305b8b29fd048e5295e7fa332be358d Mon Sep 17 00:00:00 2001 From: Reynald Affeldt Date: Sun, 19 Jul 2026 18:51:22 +0900 Subject: [PATCH 5/5] changelog and doc --- CHANGELOG_UNRELEASED.md | 9 +++ .../normedtype_theory/matrix_normedtype.v | 5 +- theories/normedtype_theory/normed_module.v | 57 +----------------- .../pseudometric_normed_Zmodule.v | 58 +++++++++++++++---- 4 files changed, 60 insertions(+), 69 deletions(-) diff --git a/CHANGELOG_UNRELEASED.md b/CHANGELOG_UNRELEASED.md index 9d34c3bd5e..da5ed206de 100644 --- a/CHANGELOG_UNRELEASED.md +++ b/CHANGELOG_UNRELEASED.md @@ -272,6 +272,10 @@ `dsnd_dswap`, `dsndE`, `pr_dlet` are no longer deprecated +- in `pseudometric_normed_Zmodule.v`: + + factory `isPseudoMetricNormedZmodule` + + structure `PseudoMetricNormedZmod0` + ### Changed - in `realsum.v`: @@ -405,6 +409,11 @@ - in `lebesgue_stieltjes_measure.v`: + lemma `lebesgue_stieltjes_measure_unique` is now about the sigma-algebra generated by open sets +- in `pseudometric_normed_Zmodule.v`: + + structure `PseudoMetricNormedZmod` not inherits from `Metric` + +- moved form `normed_module.v` to `pseudometric_normed_Zmodule.v` and generalized: + + lemmas `fcvgr2dist_ltP`, `cvgr2dist_ltP`, `cvgr2dist_lt` ### Renamed diff --git a/theories/normedtype_theory/matrix_normedtype.v b/theories/normedtype_theory/matrix_normedtype.v index c7abc5588f..44adaa10ce 100644 --- a/theories/normedtype_theory/matrix_normedtype.v +++ b/theories/normedtype_theory/matrix_normedtype.v @@ -219,10 +219,9 @@ Qed. HB.instance Definition _ := NormedZmod_PseudoMetric_eq.Build K 'M[K]_(m, n) mx_norm_ball. -End matrix_pseudoMetricNormedZmod. +HB.instance Definition _ := isPseudoMetricNormedZmodule.Build _ 'M[K]_(m, n). -HB.instance Definition _ (K : numFieldType) m n := - isPseudoMetricNormedZmod.Build _ 'M[K]_(m, n). +End matrix_pseudoMetricNormedZmod. Section within_continuous_coord. Context {T : topologicalType} {R : realFieldType} {n : nat}. diff --git a/theories/normedtype_theory/normed_module.v b/theories/normedtype_theory/normed_module.v index 8a9032adeb..1ce82b902d 100644 --- a/theories/normedtype_theory/normed_module.v +++ b/theories/normedtype_theory/normed_module.v @@ -371,19 +371,7 @@ HB.instance Definition _ := isPointed.Build M 0. HB.instance Definition _ := NormedZmod_PseudoMetric_eq.Build R M erefl. -(* TODO: why do we have to repeat this while we already have isPseudoMetricNormedZmod? *) -Let mdist (x y : M) : R := `|x - y|. - -Let mdist_ge0 x y : 0 <= mdist x y. Proof. by rewrite /mdist. Qed. - -Let mdist_positivity x y : mdist x y = 0 -> x = y. -Proof. by move=> /normr0_eq0/subr0_eq. Qed. - -Let ballEmdist x d : ball x d = [set y | mdist x y < d]. -Proof. by rewrite -ball_normE. Qed. - -HB.instance Definition _ := - @PseudoMetric_isMetric.Build R M mdist mdist_ge0 mdist_positivity ballEmdist. +HB.instance Definition _ := isPseudoMetricNormedZmodule.Build R M. HB.instance Definition _ := PseudoMetricNormedZmod_Lmodule_isNormedModule.Build R M normrZ. @@ -391,7 +379,7 @@ HB.instance Definition _ := HB.end. Definition subLmodule_isSubNormedmodule (R : realFieldType) - (V : normedModType R) (S : pred V) (U : Type) : Type := U. + (V : normedModType R) (S : pred V) (U : Type) : Type := U. Section SubLmodule_isSubNormedmodule. Context (R : realFieldType) (V : normedModType R) (S : pred V) @@ -1758,10 +1746,6 @@ apply/connected_intervalP/connected_continuous_connected => //. exact: segment_connected. Qed. -(* TODO: move to pseudometric_normed_Zmodule.v *) -HB.instance Definition _ (R : numDomainType) (U V' : pseudoMetricNormedZmodType R) := - isPseudoMetricNormedZmod.Build _ (U * V')%type. - Section prod_NormedModule. Context {K : numFieldType} {U V : normedModType K}. @@ -1774,41 +1758,6 @@ HB.instance Definition _ := End prod_NormedModule. -HB.instance Definition _ (R : numFieldType) (U V' : normedModType R) := - NormedModule.on (U * V')%type. - -(* TODO: move to pseudometric_normed_Zmodule.v *) -Section prod_NormedModule_lemmas. -Context {T : Type} {K : numDomainType} {U V : pseudoMetricNormedZmodType K}. - -Lemma fcvgr2dist_ltP {F : set_system U} {G : set_system V} - {FF : Filter F} {FG : Filter G} (y : U) (z : V) : - (F, G) --> (y, z) <-> - forall eps, 0 < eps -> - \forall y' \near F & z' \near G, `| (y, z) - (y', z') | < eps. -Proof. exact: fcvgrPdist_lt. Qed. - -Lemma cvgr2dist_ltP {I J} {F : set_system I} {G : set_system J} - {FF : Filter F} {FG : Filter G} (f : I -> U) (g : J -> V) (y : U) (z : V) : - (f @ F, g @ G) --> (y, z) <-> - forall eps, 0 < eps -> - \forall i \near F & j \near G, `| (y, z) - (f i, g j) | < eps. -Proof. -rewrite fcvgr2dist_ltP; split=> + e e0 => /(_ e e0); - by rewrite !near_simpl// => ?; rewrite !near_simpl. -Qed. - -Lemma cvgr2dist_lt {I J} {F : set_system I} {G : set_system J} - {FF : Filter F} {FG : Filter G} (f : I -> U) (g : J -> V) (y : U) (z : V) : - (f @ F, g @ G) --> (y, z) -> - forall eps, 0 < eps -> - \forall i \near F & j \near G, `| (y, z) - (f i, g j) | < eps. -Proof. by rewrite cvgr2dist_ltP. Qed. - -End prod_NormedModule_lemmas. -Arguments cvgr2dist_ltP {_ _ _ _ _ F G FF FG}. -Arguments cvgr2dist_lt {_ _ _ _ _ F G FF FG}. - (* Local properties in R *) (* Topology on [R]² *) @@ -2702,7 +2651,7 @@ HB.instance Definition _ (V : vectType R) := NormedZmod_PseudoMetric_eq.Build R (max_space V) erefl. HB.instance Definition _ (V : vectType R) := - isPseudoMetricNormedZmod.Build _ (max_space V). + isPseudoMetricNormedZmodule.Build _ (max_space V). HB.instance Definition _ (V : vectType R) := PseudoMetricNormedZmod_Lmodule_isNormedModule.Build R (max_space V) diff --git a/theories/normedtype_theory/pseudometric_normed_Zmodule.v b/theories/normedtype_theory/pseudometric_normed_Zmodule.v index b35077ebbe..5f5260e622 100644 --- a/theories/normedtype_theory/pseudometric_normed_Zmodule.v +++ b/theories/normedtype_theory/pseudometric_normed_Zmodule.v @@ -29,8 +29,9 @@ From mathcomp Require Import prodnormedzmodule num_normedtype. (* *) (* ## Normed topological abelian groups *) (* ``` *) -(* pseudoMetricNormedZmodType R == interface type for a normed topological *) +(* PseudoMetricNormedZmod0 R == interface type for a normed topological *) (* abelian group equipped with a norm *) +(* pseudoMetricNormedZmodType R == PseudoMetricNormedZmod0 R + Metric R *) (* The HB class is PseudoMetricNormedZmod. *) (* NormedZmoduleMetric == factory for pseudoMetricNormedZmodType *) (* based on metric structures *) @@ -149,14 +150,10 @@ HB.mixin Record NormedZmod_PseudoMetric_eq (R : numDomainType) T }. HB.structure Definition PseudoMetricNormedZmod0 (R : numDomainType) := - {T of Num.NormedZmodule R T & PseudoMetric R T - & NormedZmod_PseudoMetric_eq R T & isPointed T}. + {T of Num.NormedZmodule R T & PseudoPointedMetric R T + & NormedZmod_PseudoMetric_eq R T }. -#[short(type="pseudoMetricNormedZmodType")] -HB.structure Definition PseudoMetricNormedZmod (R : numDomainType) := - {T of PseudoMetricNormedZmod0 R T & Metric R T}. - -Section pseudoMetricNormedZmod_numDomainType. +Section PseudoMetricNormedZmod0_numDomainType. Context {K : numDomainType} {V : PseudoMetricNormedZmod0.type K}. (**md Balls defined by the norm: *) @@ -165,12 +162,16 @@ Local Notation ball_norm := (ball_ (@Num.norm K V)). Lemma ball_normE : ball_norm = ball. Proof. by rewrite pseudo_metric_ball_norm. Qed. -End pseudoMetricNormedZmod_numDomainType. +End PseudoMetricNormedZmod0_numDomainType. + +#[short(type="pseudoMetricNormedZmodType")] +HB.structure Definition PseudoMetricNormedZmod (R : numDomainType) := + {T of PseudoMetricNormedZmod0 R T & Metric R T}. -HB.factory Record isPseudoMetricNormedZmod +HB.factory Record isPseudoMetricNormedZmodule (K : numDomainType) T & PseudoMetricNormedZmod0 K T := { }. -HB.builders Context K T & isPseudoMetricNormedZmod K T. +HB.builders Context K T & isPseudoMetricNormedZmodule K T. Let mdist (x y : T) : K := `|x - y|. @@ -498,14 +499,47 @@ rewrite /ball /= /prod_ball -!ball_normE /ball_ /=. by rewrite comparable_gt_max// ?real_comparable//; split=> /andP. Qed. -Lemma prod_norm_ball : @ball _ (U * V)%type = ball_ (fun x => `|x|). +Let prod_norm_ball : @ball _ (U * V)%type = ball_ (fun x => `|x|). Proof. by rewrite /= - ball_prod_normE. Qed. HB.instance Definition _ := NormedZmod_PseudoMetric_eq.Build K (U * V)%type prod_norm_ball. +HB.instance Definition _ := isPseudoMetricNormedZmodule.Build _ (U * V)%type. + End prod_pseudoMetricNormedZmod. +Section prod_NormedModule_lemmas. +Context {T : Type} {K : numDomainType} {U V : pseudoMetricNormedZmodType K}. + +Lemma fcvgr2dist_ltP {F : set_system U} {G : set_system V} + {FF : Filter F} {FG : Filter G} (y : U) (z : V) : + (F, G) --> (y, z) <-> + forall eps, 0 < eps -> + \forall y' \near F & z' \near G, `| (y, z) - (y', z') | < eps. +Proof. exact: fcvgrPdist_lt. Qed. + +Lemma cvgr2dist_ltP {I J} {F : set_system I} {G : set_system J} + {FF : Filter F} {FG : Filter G} (f : I -> U) (g : J -> V) (y : U) (z : V) : + (f @ F, g @ G) --> (y, z) <-> + forall eps, 0 < eps -> + \forall i \near F & j \near G, `| (y, z) - (f i, g j) | < eps. +Proof. +rewrite fcvgr2dist_ltP; split=> + e e0 => /(_ e e0); + by rewrite !near_simpl// => ?; rewrite !near_simpl. +Qed. + +Lemma cvgr2dist_lt {I J} {F : set_system I} {G : set_system J} + {FF : Filter F} {FG : Filter G} (f : I -> U) (g : J -> V) (y : U) (z : V) : + (f @ F, g @ G) --> (y, z) -> + forall eps, 0 < eps -> + \forall i \near F & j \near G, `| (y, z) - (f i, g j) | < eps. +Proof. by rewrite cvgr2dist_ltP. Qed. + +End prod_NormedModule_lemmas. +Arguments cvgr2dist_ltP {_ _ _ _ _ F G FF FG}. +Arguments cvgr2dist_lt {_ _ _ _ _ F G FF FG}. + Section standard_topology_pseudoMetricNormedZmod. Variable R : numFieldType.