Module mathcomp.analysis.topology_theory.separation_axioms
From HB Require Import structures.From mathcomp Require Import boot order algebra interval_inference finmap.
From mathcomp Require Import boolp classical_sets functions wochoice.
From mathcomp Require Import cardinality fsbigop set_interval filter reals.
From mathcomp Require Import topology_structure compact subspace_topology
discrete_topology order_topology pseudometric_structure num_topology
one_point_compactification uniform_structure connected supremum_topology
sigT_topology.
Unset SsrOldRewriteGoalsOrder.
Set Implicit Arguments.
Unset Strict Implicit.
Unset Printing Implicit Defensive.
Import Order.TTheory GRing.Theory Num.Theory.
Local Open Scope classical_set_scope.
Local Open Scope ring_scope.
Section set_nbhs.
Context {TSource code : topologicalType} (ASource code : set T).
Definition set_nbhs
Source code := \bigcap_(xSource code in A) nbhs x.
Global Instance set_nbhs_filterSource code : Filter set_nbhs.
Proof.
Global Instance set_nbhs_pfilterSource code : A !=set0 -> ProperFilter set_nbhs.
Proof.
Lemma set_nbhsPUsed by
- mathcomp.analysis.normedtype_theory.urysohn
Source code (BSource code : set T) :
set_nbhs B <-> (exists CSource code, [/\ open C, A `<=` C & C `<=` B]).
Proof.
by case=> V [? AV /filterS +] x /AV ?; apply; apply: open_nbhs_nbhs.
move=> snB; have Ux x : exists USource code, A x -> [/\ U x, open U & U `<=` B].
have [/snB|?] := pselect (A x); last by exists point.
by rewrite nbhsE => -[V [? ? ?]]; exists V.
exists (\bigcup_(xSource code in A) (projT1 (cid (Ux x)))); split.
- by apply: bigcup_open => x Ax; have [] := projT2 (cid (Ux x)).
- by move=> x Ax; exists x => //; have [] := projT2 (cid (Ux x)).
- by move=> x [y Ay]; have [//| _ _] := projT2 (cid (Ux y)); exact.
Qed.
End set_nbhs.
Section point_separation_axioms.
Context {TSource code : topologicalType}.
Definition kolmogorov_space
Source code := forall xSource code ySource code, x != y ->
exists ASource code : set T, (A \in nbhs x /\ y \in ~` A) \/ (A \in nbhs y /\ x \in ~` A).
Definition accessible_space
Used by
- mathcomp.analysis.topology_theory.function_spaces
- mathcomp.analysis.normedtype_theory.urysohn
Source code := forall xSource code ySource code, x != y ->
exists ASource code : set T, [/\ open A, x \in A & y \in ~` A].
Definition hausdorff_space
Used by
- mathcomp.analysis.cantor
- mathcomp.analysis.topology_theory.metric_structure
- mathcomp.analysis.topology_theory.function_spaces
- mathcomp.analysis.homotopy_theory.wedge_sigT
- mathcomp.analysis.lebesgue_integral_theory.measurable_fun_approximation
- mathcomp.analysis.normedtype_theory.pseudometric_normed_Zmodule
- mathcomp.analysis.normedtype_theory.ereal_normedtype
- mathcomp.analysis.normedtype_theory.urysohn
Source code := forall pSource code qSource code : T, cluster (nbhs p) q -> p = q.
Lemma compact_closedUsed by
- mathcomp.analysis.real_measure.measurable_realfun
- mathcomp.analysis.real_measure.lebesgue_measure
- mathcomp.analysis.cantor
- mathcomp.analysis.topology_theory.function_spaces
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_differentiation
- mathcomp.analysis.lebesgue_integral_theory.measurable_fun_approximation
Source code (ASource code : set T) : hausdorff_space -> compact A -> closed A.
Proof.
have [q [Aq clsAp_q]] := [elaborate Aco _ _ pA]; rewrite (hT p q) //.
by apply: cvg_cluster clsAp_q; apply: cvg_within.
Qed.
Lemma compact_cluster_set1Used by
- mathcomp.analysis.cantor
Source code (xSource code : T) FSource code VSource code :
hausdorff_space -> compact V -> nbhs x V ->
ProperFilter F -> F V -> cluster F = [set x] -> F --> x.
Proof.
wlog oU : U nbhsU / open U.
rewrite /= nbhsE in nbhsU; case: nbhsU => O oO OsubU /(_ O) WH.
by apply: (filterS OsubU); apply: WH; [exact: open_nbhs_nbhs | by case: oO].
have /compact_near_coveringP : compact (V `\` U).
apply: (subclosed_compact _ cptV) => //.
by apply: closedI; [exact: compact_closed | exact: open_closedC].
move=> /(_ _ (powerset_filter_from F) (fun WSource code xSource code => ~ W x))[].
move=> z [Vz ?]; have zE : x <> z by move/nbhs_singleton: nbhsU => /[swap] ->.
have : ~ cluster F z by move: zE; apply: contra_not; rewrite clFx1 => ->.
case/existsNP=> C /existsPNP [D] FC /existsNP [Dz] /nonemptyPn.
rewrite setIC => /disjoints_subset CD0; exists (D, [set WSource code | F W /\ W `<=` C]).
by split; rewrite //= nbhs_simpl; exact: powerset_filter_fromP.
by case => t W [Dt] [FW] /subsetCP; apply; apply: CD0.
move=> M [MF ME2 [W] MW /(_ _ MW) VUW].
apply: (@filterS _ _ _ (V `&` W)); last by apply: filterI => //; exact: MF.
by move=> t [Vt Wt]; apply: contrapT => Ut; exact: (VUW t).
Qed.
Lemma compact_precompactSource code (ASource code : set T) :
hausdorff_space -> compact A -> precompact A.
Proof.
Lemma open_hausdorffUsed by
- mathcomp.analysis.cantor
Source code : hausdorff_space =
forall (xSource code ySource code : T), x != y ->
exists2 ABSource code, (x \in AB.1 /\ y \in AB.2) &
[/\ open AB.1, open AB.2 & AB.1 `&` AB.2 == set0].
Proof.
have := contra_not (T_filterT2 x y); rewrite (rwP eqP) (rwP negP).
move=> /[apply] /asboolPn/existsp_asboolPn[A]; rewrite -existsNE => -[B].
rewrite [nbhs _ _ -> _](rwP imply_asboolP) => /negP.
rewrite asbool_imply !negb_imply => /andP[/asboolP xA] /andP[/asboolP yB].
move=> /asboolPn; rewrite -set0P => /negP; rewrite negbK => /eqP AIB_eq0.
move: xA yB; rewrite !nbhsE.
move=> - [oA [oA_open oAx] oAA] [oB [oB_open oBx] oBB].
by exists (oA, oB); rewrite ?inE; split => //; apply: subsetI_eq0 AIB_eq0.
apply: contraPP => /eqP /T_openT2[[/=A B]].
rewrite !inE => - [xA yB] [Aopen Bopen /eqP AIB_eq0].
move=> /(_ A B (open_nbhs_nbhs _) (open_nbhs_nbhs _)).
by rewrite -set0P => /(_ _ _)/negP; apply.
Qed.
Lemma hausdorff_accessibleUsed by
- mathcomp.analysis.cantor
- mathcomp.analysis.borel_hierarchy
- mathcomp.analysis.normedtype_theory.urysohn
Source code : hausdorff_space -> accessible_space.
Proof.
rewrite setIC => /disjoints_subset VUc; exists U; repeat split => //.
by rewrite inE; apply: VUc; rewrite -inE.
Qed.
Lemma accessible_closed_set1Used by
- mathcomp.analysis.cantor
- mathcomp.analysis.borel_hierarchy
- mathcomp.analysis.topology_theory.function_spaces
- mathcomp.analysis.normedtype_theory.urysohn
Source code : accessible_space -> forall xSource code : T, closed [set x].
Proof.
Lemma accessible_kolmogorovSource code : accessible_space -> kolmogorov_space.
Proof.
Lemma accessible_finite_set_closedSource code :
accessible_space <-> forall ASource code : set T, finite_set A -> closed A.
Proof.
rewrite -(fsbig_setU_set1 fA) fsbig_finite//=.
by apply: bigsetU_closed => x xA; exact: accessible_closed_set1.
by exists (~` [set y]); rewrite !inE/=; split;
[rewrite openC; exact: h|exact/eqP|].
Qed.
End point_separation_axioms.
Arguments hausdorff_space : clear implicits.
Arguments accessible_space : clear implicits.
Arguments kolmogorov_space : clear implicits.
Lemma limit_point_closedSource code {TSource code : topologicalType} (ASource code : set T) :
accessible_space T -> closed (limit_point A).
Proof.
rewrite /setC/= not_limit_pointE => -[X].
rewrite nbhsE/= => -[U oaU UX] XAa.
rewrite /interior nbhsE/=.
exists U => // x Ux /=.
rewrite not_limit_pointE.
have [xa|xneqa] := eqVneq x a.
exists U; rewrite xa; first exact: open_nbhs_nbhs.
by apply: subset_trans XAa; exact: setIS.
exists (U `&` [set~ a]).
apply: open_nbhs_nbhs; split.
apply: openI; first by case: oaU.
by rewrite openC; exact: accessible_closed_set1.
by split => //; exact/eqP.
apply: (@subset_trans _ (A `&` (X `&` [set~ a]))).
by apply: setIS; exact: setSI.
apply: (@subset_trans _ ([set a] `&` [set~ a])).
by rewrite setIA; exact: setSI.
by rewrite setICr.
Qed.
Lemma subspace_hausdorffSource code {TSource code : topologicalType} (ASource code : set T) :
hausdorff_space T -> hausdorff_space (subspace A).
Proof.
move=> [[P Q]] /= [Px Qx] /= [/open_subspaceW oP /open_subspaceW oQ].
by move=> ?; exists (P, Q); split => //=; [exact: oP | exact: oQ].
Qed.
Lemma discrete_hausdorffUsed by
- mathcomp.analysis.cantor
Source code {TSource code : discreteTopologicalType} : hausdorff_space T.
Proof.
Lemma order_hausdorffSource code {dSource code} {TSource code : orderTopologicalType d} : hausdorff_space T.
Proof.
have /orP[] := le_total p q; rewrite le_eqVlt => /predU1P[->|].
- by rewrite eqxx.
- by move=> ?; exact.
- by rewrite eqxx.
- move=> qp WH; rewrite eq_sym => /(WH _ _ qp)[[P Q] [? ?] [? ? ?]].
by exists (Q, P); split; rewrite // setIC.
move=> plq ?; have [[z /andP[pz zq]]|] := pselect (exists zSource code, p < z < q)%O.
exists (`]-oo,z[, `]z,+oo[)%classic.
by split => //=; apply/mem_set; rewrite set_itvE.
split => //= ; apply/eqP; rewrite -subset0 => r; rewrite set_itvE => -[/= rz].
by apply/negP; rewrite in_itv/= andbT -leNgt (ltW rz).
move=> npzq; exists (`]-oo, q[, `]p, +oo[)%classic; split => //=.
- by apply /mem_set; rewrite set_itvE.
- by apply /mem_set; rewrite set_itvE.
- apply/eqP; rewrite -subset0 => r; rewrite !set_itvE => -[/= rz zr].
by apply: npzq; exists r; rewrite rz zr.
Qed.
Section ball_hausdorff.
Variables (RSource code : numDomainType) (TSource code : pseudoMetricType R).
Lemma ball_hausdorffUsed by
- mathcomp.analysis.normedtype_theory.pseudometric_normed_Zmodule
Source code : hausdorff_space T =
forall (aSource code bSource code : T), a != b ->
exists rSource code : {posnum R} * {posnum R},
ball a r.1%:num `&` ball b r.2%:num == set0.
Proof.
move=> A B; rewrite 2!inE => [[aA bB] [oA oB /eqP ABeq0]].
have /nbhs_ballP[_/posnumP[r] rA]: nbhs a A by apply: open_nbhs_nbhs.
have /nbhs_ballP[_/posnumP[s] rB]: nbhs b B by apply: open_nbhs_nbhs.
by exists (r, s) => /=; rewrite (subsetI_eq0 _ _ ABeq0).
move=> r s /eqP brs_eq0; exists ((ball a r%:num)°, (ball b s%:num)°) => /=.
split; by rewrite inE; apply: nbhs_singleton; apply: nbhs_interior;
apply/nbhs_ballP; apply: in_filter_from => /=.
split; do ?by apply: open_interior.
by rewrite (subsetI_eq0 _ _ brs_eq0)//; exact: interior_subset.
Qed.
Import numFieldTopology.Exports.
Lemma RhausdorffUsed by
- mathcomp.analysis.real_measure.measurable_realfun
- mathcomp.analysis.real_measure.lebesgue_measure
- mathcomp.analysis.ftc
- mathcomp.analysis.elementary_functions.trigonometry_functions
- mathcomp.analysis.borel_hierarchy
- mathcomp.analysis.numfun
- mathcomp.analysis.sequences
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_differentiation
- mathcomp.analysis.lebesgue_integral_theory.measurable_fun_approximation
- mathcomp.analysis.normedtype_theory.ereal_normedtype
Source code (RSource code : realFieldType) : hausdorff_space R.
Proof.
Lemma one_point_compactification_hausdorffUsed by
- mathcomp.analysis.normedtype_theory.urysohn
Source code {XSource code : topologicalType} :
locally_compact [set: X] ->
hausdorff_space X ->
hausdorff_space (one_point_compactification X).
Proof.
- move=> clxy; congr Some; apply: hsdfX => U V Ux Vy.
have [] := clxy (Some @` U) (Some @` V).
by apply: filterS Ux; exact: preimage_image.
by apply: filterS Vy; exact: preimage_image.
by case=> [_|] [] /= [// p /[swap] -[] <- Up] [q /[swap] -[] -> Vp]; exists p.
- have [U] := lcpt x I; rewrite withinET => Ux [cU clU].
case/(_ (Some @` U) (Some @` (~` U) `|` [set None])).
+ exact: one_point_compactification_some_nbhs.
+ by exists U.
+ by move=> [?|] [][]// z /[swap] -[] <- ? []//= [? /[swap] -[] ->].
- have [U] := lcpt y I; rewrite withinET => Uy [cU clU].
case/(_ (Some @` (~` U) `|` [set None]) (Some @` U)); first by exists U.
exact: one_point_compactification_some_nbhs.
by case=> [?|] [] [] //= + [] ? // /[swap] -[] -> => -[? /[swap] -[] <-].
Qed.
Section hausdorff_topologicalType.
Variable TSource code : topologicalType.
Implicit Types x y : T.
Local Open Scope classical_set_scope.
Definition close
Used by
- mathcomp.analysis.topology_theory.edist
- mathcomp.analysis.topology_theory.function_spaces
- mathcomp.analysis.normedtype_theory.pseudometric_normed_Zmodule
Source code xSource code ySource code : Prop := forall MSource code, open_nbhs y M -> closure M x.
Lemma closeEnbhsSource code xSource code : close x = cluster (nbhs x).
Proof.
by rewrite /cluster; under eq_fun do rewrite -meets_openl.
rewrite clusterEonbhs /close funeqE => y /=; rewrite meetsC /meets.
apply/eq_forall => A; rewrite forall_swap.
by rewrite closureEonbhs/= meets_globallyl.
Qed.
Lemma closeEonbhsSource code xSource code : close x = [set ySource code | open_nbhs x `#` open_nbhs y].
Proof.
Lemma close_symSource code xSource code ySource code : close x y -> close y x.
Proof.
Lemma cvg_closeSource code {FSource code} {FFSource code : ProperFilter F} xSource code ySource code : F --> x -> F --> y -> close x y.
Proof.
Lemma close_reflSource code xSource code : close x x.
Hint Resolve close_refl : core.
Lemma cvgx_closeSource code xSource code ySource code : x --> y -> close x y.
Proof.
Lemma cvgi_closeSource code T'Source code {FSource code} {FFSource code : ProperFilter F} (fSource code : T' -> set T) (lSource code l'Source code : T) :
{near F, is_fun f} -> f `@ F --> l -> f `@ F --> l' -> close l l'.
Proof.
suff f_totalfun: {near F, is_totalfun f}.
by apply: cvg_close fFl fFl'; exact: fmapi_proper_filter.
apply: filter_app f_prop; near do split=> //=.
have: (f `@ F) setT by apply: fFl; apply: filterT.
by rewrite fmapiE; apply: filterS => x [y []]; exists y.
Unshelve. all: by end_near. Qed.
Hypothesis sepSource code : hausdorff_space T.
Lemma closeEUsed by
- mathcomp.analysis.kernel
- mathcomp.analysis.sequences
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_fubini
- mathcomp.analysis.normedtype_theory.pseudometric_normed_Zmodule
Source code xSource code ySource code : close x y = (x = y).
Proof.
by rewrite closeEnbhs; exact: sep.
Qed.
Lemma close_eqUsed by
- mathcomp.analysis.cantor
- mathcomp.analysis.normedtype_theory.pseudometric_normed_Zmodule
Source code xSource code ySource code : close x y -> x = y.
Proof.
Lemma cvg_uniqueUsed by
- mathcomp.analysis.probability_theory.independence
- mathcomp.analysis.probability_theory.random_variable
- mathcomp.analysis.real_measure.lebesgue_stieltjes_measure
- mathcomp.analysis.ftc
- mathcomp.analysis.sequences
- mathcomp.analysis.normedtype_theory.pseudometric_normed_Zmodule
Source code {FSource code} {FFSource code : ProperFilter F} : is_subset1 [set xSource code : T | F --> x].
Lemma cvg_eqUsed by
- mathcomp.analysis.normedtype_theory.pseudometric_normed_Zmodule
Source code xSource code ySource code : x --> y -> x = y.
Lemma cvgi_uniqueUsed by
- mathcomp.analysis.normedtype_theory.pseudometric_normed_Zmodule
Source code {USource code : Type} {FSource code} {FFSource code : ProperFilter F} (fSource code : U -> set T) :
{near F, is_fun f} -> is_subset1 [set xSource code : T | f `@ F --> x].
Proof.
End hausdorff_topologicalType.
Section hausdorff_ptopologicalType.
Variable TSource code : ptopologicalType.
Implicit Types x y : T.
Lemma close_cvgSource code (F1Source code F2Source code : set_system T) {FF2Source code : ProperFilter F2} :
F1 --> F2 -> F2 --> F1 -> close (lim F1) (lim F2).
Proof.
Hypothesis sepSource code : hausdorff_space T.
Lemma cvg_limUsed by
- mathcomp.analysis.ess_sup_inf
- mathcomp.analysis.esum
- mathcomp.analysis.probability_theory.independence
- mathcomp.analysis.probability_theory.uniform_distribution
- mathcomp.analysis.real_measure.measurable_realfun
- mathcomp.analysis.real_measure.lebesgue_measure
- mathcomp.analysis.measure_theory.measure_extension
- mathcomp.analysis.measure_theory.signed_measure
- mathcomp.analysis.measure_theory.measure_function
- mathcomp.analysis.realfun
- mathcomp.analysis.ftc
- mathcomp.analysis.kernel
- mathcomp.analysis.gauss_integral
- mathcomp.analysis.elementary_functions.trigonometry_functions
- mathcomp.analysis.derive
- mathcomp.analysis.numfun
- mathcomp.analysis.sequences
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_nonneg
- mathcomp.analysis.lebesgue_integral_theory.giry
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_Rintegral
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_monotone_convergence
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_definition
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_under
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_fubini
- mathcomp.analysis.lebesgue_integral_theory.counting_lebesgue
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_dominated_convergence
- mathcomp.analysis.lebesgue_integral_theory.radon_nikodym
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integrable
- mathcomp.analysis.lebesgue_integral_theory.measurable_fun_approximation
- mathcomp.analysis.normedtype_theory.pseudometric_normed_Zmodule
- mathcomp.analysis.normedtype_theory.normed_module
- mathcomp.analysis.exp
- mathcomp.analysis_stdlib.Rstruct_topology
Source code {FSource code} {FFSource code : ProperFilter F} (lSource code : T) :
F --> l -> lim F = l.
Proof.
Lemma lim_idUsed by
- mathcomp.analysis.derive
- mathcomp.analysis.normedtype_theory.pseudometric_normed_Zmodule
Source code xSource code : lim (nbhs x) = x.
Proof.
Lemma lim_near_cstUsed by
- mathcomp.analysis.real_measure.lebesgue_measure
- mathcomp.analysis.measure_theory.measure_extension
- mathcomp.analysis.measure_theory.measure_function
- mathcomp.analysis.elementary_functions.trigonometry_functions
- mathcomp.analysis.derive
- mathcomp.analysis.sequences
- mathcomp.analysis.normedtype_theory.pseudometric_normed_Zmodule
- mathcomp.analysis.exp
Source code {USource code} {FSource code} {FFSource code : ProperFilter F} (lSource code : T) (fSource code : U -> T) :
(\forall xSource code \near F, f x = l) -> lim (f @ F) = l.
Proof.
Lemma lim_cstUsed by
- mathcomp.analysis.sequences
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_nonneg
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_monotone_convergence
- mathcomp.analysis.normedtype_theory.pseudometric_normed_Zmodule
Source code {USource code} {FSource code} {FFSource code : ProperFilter F} (kSource code : T) : lim (@cst U _ k @ F) = k.
Proof.
Lemma cvgi_limUsed by
- mathcomp.analysis.normedtype_theory.pseudometric_normed_Zmodule
Source code {USource code} {FSource code} {FFSource code : ProperFilter F} (fSource code : U -> T -> Prop) (lSource code : T) :
F (fun xSource code : U => is_subset1 (f x)) ->
f `@ F --> l -> lim (f `@ F) = l.
Proof.
End hausdorff_ptopologicalType.
#[global] Hint Resolve close_refl : core.
Arguments close_cvg {T} F1 F2 {FF2} _.
Section close_uniform.
Implicit Types (U : uniformType).
Lemma entourage_closeUsed by
- mathcomp.analysis.topology_theory.function_spaces
Source code {USource code} (xSource code ySource code : U) :
close x y = forall ASource code, entourage A -> A (x, y).
Proof.
have /entourage_split_ent entsA := entA; rewrite closeEnbhs in cxy.
have yl := nbhs_entourage _ (entourage_inv entsA).
have yr := nbhs_entourage _ entsA.
have [z [/xsectionP zx /xsectionP zy]] := cxy _ _ (yr x) (yl y).
exact: (entourage_split z).
rewrite closeEnbhs => A B /nbhsP[E1 entE1 sE1A] /nbhsP[E2 entE2 sE2B].
exists y; split.
- by apply/sE1A/xsectionP; exact: cxy.
- by apply/sE2B/xsectionP; exact: entourage_refl.
Qed.
Lemma close_transSource code {USource code} (ySource code xSource code zSource code : U) : close x y -> close y z -> close x z.
Proof.
Lemma close_cvgxxSource code {USource code} (xSource code ySource code : U) : close x y -> x --> y.
Proof.
apply/nbhsP; exists (split_ent A) => // z /xsectionP xz; apply: sAP.
apply/xsectionP; apply: (entourage_split x) => //.
by have := cxy _ (entourage_inv (entourage_split_ent entA)).
Qed.
Lemma cvg_closePUsed by
- mathcomp.analysis.kernel
- mathcomp.analysis.sequences
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_fubini
Source code {USource code : puniformType} (FSource code : set_system U) (lSource code : U) :
ProperFilter F ->
F --> l <-> ([cvg F in U] /\ close (lim F) l).
Proof.
by have /cvgP := Fl; split=> //; apply: (@cvg_close _ F).
by apply: cvg_trans (close_cvgxx Cl).
Qed.
Lemma ball_closeUsed by
- mathcomp.analysis.topology_theory.edist
Source code {RSource code : numFieldType} {MSource code : pseudoMetricType R} (xSource code ySource code : M) :
close x y = forall epsSource code : {posnum R}, ball x eps%:num y.
Proof.
have := [elaborate cxy _ (open_nbhs_ball _ (eps%:num/2)%:pos)].
rewrite closureEonbhs/= meetsC meets_globallyr.
move/(_ _ (open_nbhs_ball _ (eps%:num/2)%:pos)) => [z [zx zy]].
by apply: (@ball_splitl _ _ z); apply: interior_subset.
rewrite closeEnbhs => B A /nbhs_ballP[_/posnumP[e2 e2B]]
/nbhs_ballP[_/posnumP[e1 e1A]].
by exists y; split; [apply/e2B|apply/e1A; exact: ballxx].
Qed.
Section set_separations.
Context {TSource code : topologicalType}.
Definition normal_space
set_nbhs : forall {T : topologicalType}, set T -> set (set T) set_nbhs is not universe polymorphic Arguments set_nbhs {T} A%_classical_set_scope _ set_nbhs is transparent Expands to: Constant mathcomp.analysis.topology_theory.separation_axioms.set_nbhs Declared in library mathcomp.analysis.topology_theory.separation_axioms, line 66, characters 11-19
Used by
- mathcomp.analysis.numfun
- mathcomp.analysis.normedtype_theory.urysohn
Source code :=
forall ASource code : set T, closed A ->
filter_from (set_nbhs A) closure `=>` set_nbhs A.
Definition regular_space
kolmogorov_space : topologicalType -> Prop kolmogorov_space is not universe polymorphic Arguments kolmogorov_space T kolmogorov_space is transparent Expands to: Constant mathcomp.analysis.topology_theory.separation_axioms.kolmogorov_space Declared in library mathcomp.analysis.topology_theory.separation_axioms, line 100, characters 11-27
Used by
- mathcomp.analysis.topology_theory.function_spaces
- mathcomp.analysis.normedtype_theory.urysohn
Source code :=
forall aSource code : T, filter_from (nbhs a) closure --> a.
Lemma compact_regularUsed by
- mathcomp.analysis.topology_theory.function_spaces
Source code (xSource code : T) VSource code : hausdorff_space T -> compact V ->
nbhs x V -> {for x, regular_space}.
Proof.
- apply: filter_from_proper => //; first last.
by move=> ? /nbhs_singleton/subset_closure ?; exists x.
apply: filter_from_filter; first by exists setT; exact: filterT.
move=> P Q Px Qx; exists (P `&` Q); [exact: filterI | exact: closureI].
- by exists V => //; have /closure_id <- : closed V by exact: compact_closed.
rewrite eqEsubset; split; first last.
move=> _ -> A B [C Cx CA /nbhs_singleton Bx]; exists x; split => //.
by apply/CA/subset_closure; exact: nbhs_singleton.
move=> y /=; apply: contraPeq; move: sep; rewrite open_hausdorff => /[apply].
move=> [[B A]]/=; rewrite ?inE; case=> By Ax [oB oA BA0].
apply/existsNP; exists (closure A); apply/existsNP; exists B; apply/not_implyP.
split; first by exists A => //; exact: open_nbhs_nbhs.
apply/not_implyP; split; first exact: open_nbhs_nbhs.
apply/set0P/negP; rewrite negbK; apply/eqP/disjoints_subset.
have /closure_id -> : closed (~` B); first by exact: open_closedC.
by apply/closureS/disjoints_subset; rewrite setIC.
Qed.
Lemma compact_normal_localSource code (KSource code : set T) : hausdorff_space T -> compact K ->
forall ASource code : set T, A `<=` K° -> {for A, normal_space}.
Proof.
apply/(subclosed_compact clA cptV)/(subset_trans AK).
exact: interior_subset.
have snbC (USource code : set T) : Filter (filter_from (set_nbhs U) closure).
apply: filter_from_filter; first by exists setT; apply: filterT.
by move=> P Q sAP sAQ; exists (P `&` Q); [apply filterI|exact: closureI].
have [/(congr1 setC)|/set0P[b0 B0]] := eqVneq (~` B) set0.
by rewrite setCK setC0 => ->; exact: filterT.
have PsnA : ProperFilter (filter_from (set_nbhs (~` B)) closure).
apply: filter_from_proper => ? P.
by exists b0; apply/subset_closure; apply: nbhs_singleton; exact: P.
pose F := powerset_filter_from (filter_from (set_nbhs (~` B)) closure).
have PF : Filter F by exact: powerset_filter_from_filter.
have cvP (xSource code : T) : A x -> \forall x'Source code \near x & iSource code \near F, (~` i) x'.
move=> Ax; case/set_nbhsP : snAB => C [oC AC CB].
have [] := @compact_regular x _ hT cptV _ C; first exact: AK.
by rewrite nbhsE /=; exists C => //; split => //; exact: AC.
move=> D /nbhs_interior nD cDC.
have snBD : filter_from (set_nbhs (~` B)) closure (closure (~` closure D)).
exists (closure (~` closure D)) => [z|].
move=> nBZ; apply: filterS; first exact: subset_closure.
apply: open_nbhs_nbhs; split; first exact/closed_openC/closed_closure.
exact/(subsetC _ nBZ)/(subset_trans cDC).
by have := @closed_closure _ (~` closure D); rewrite closure_id => <-.
near=> y U => /=; have Dy : D° y by exact: (near nD _).
have UclD : U `<=` closure (~` closure D).
exact: (near (small_set_sub snBD) U).
move=> Uy; have [z [/= + Dz]] := UclD _ Uy _ Dy.
by apply; exact: subset_closure.
case/(_ _ _ _ _ cvP) : cvA => R /= [RA Rmono [U RU] RBx].
have [V /set_nbhsP [W [oW cBW WV] clVU]] := RA _ RU; exists (~` W).
apply/set_nbhsP; exists (~` closure W); split.
- exact/closed_openC/closed_closure.
- by move=> y /(RBx _ RU) + Wy; apply; exact/clVU/(closureS WV).
- by apply: subsetC; exact/subset_closure.
have : closed (~` W) by exact: open_closedC.
by rewrite closure_id => <-; exact: subsetCl.
Unshelve. all: by end_near. Qed.
Lemma compact_normalUsed by
- mathcomp.analysis.normedtype_theory.urysohn
Source code : hausdorff_space T -> compact [set: T] -> normal_space.
Proof.
End set_separations.
Arguments normal_space : clear implicits.
Arguments regular_space : clear implicits.
Local Open Scope relation_scope.
Lemma uniform_regularSource code {TSource code : uniformType} : @regular_space T.
Proof.
pose E' := split_ent E; have eE' : entourage E' by exact: entourage_split_ent.
exists (xsection (E' `&` E'^-1) x).
rewrite -nbhs_entourageE; exists (E' `&` E'^-1) => //.
exact: filterI.
move=> z /= clEz; apply/ER/xsectionP; apply: subset_split_ent => //.
have [] := clEz (xsection (E' `&` E'^-1) z).
rewrite -nbhs_entourageE; exists (E' `&` E'^-1) => //.
exact: filterI.
by move=> y /= [/xsectionP[? ?] /xsectionP[? ?]]; exists y.
Qed.
#[global] Hint Resolve uniform_regular : core.
Section totally_disconnected.
Implicit Types T : topologicalType.
Definition totally_disconnected
accessible_space : topologicalType -> Prop accessible_space is not universe polymorphic Arguments accessible_space T accessible_space is transparent Expands to: Constant mathcomp.analysis.topology_theory.separation_axioms.accessible_space Declared in library mathcomp.analysis.topology_theory.separation_axioms, line 103, characters 11-27 hausdorff_space : topologicalType -> Prop hausdorff_space is not universe polymorphic Arguments hausdorff_space T hausdorff_space is transparent Expands to: Constant mathcomp.analysis.topology_theory.separation_axioms.hausdorff_space Declared in library mathcomp.analysis.topology_theory.separation_axioms, line 106, characters 11-26
Used by
- mathcomp.analysis.topology_theory.function_spaces
Source code {TSource code} (ASource code : set T) :=
forall xSource code, A x -> connected_component A x = [set x].
Definition zero_dimensional
close : forall [T : topologicalType], T -> T -> Prop close is not universe polymorphic Arguments close [T] x y close is transparent Expands to: Constant mathcomp.analysis.topology_theory.separation_axioms.close Declared in library mathcomp.analysis.topology_theory.separation_axioms, line 312, characters 11-16
Used by
- mathcomp.analysis.cantor
- mathcomp.analysis.topology_theory.function_spaces
Source code TSource code :=
(forall xSource code ySource code, x != y -> exists USource code : set T, [/\ clopen U, U x & ~ U y]).
Lemma discrete_zero_dimensionUsed by
- mathcomp.analysis.cantor
Source code {TSource code : discreteTopologicalType} : zero_dimensional T.
Proof.
by split; [exact: discrete_open | exact: discrete_closed].
Qed.
Lemma zero_dimension_totally_disconnectedSource code {TSource code} :
zero_dimensional T -> totally_disconnected [set: T].
Proof.
Lemma zero_dimensional_cvgSource code {TSource code} (xSource code : T) :
hausdorff_space T -> zero_dimensional T -> compact [set: T] ->
filter_from [set DSource code : set T | D x /\ clopen D] id --> x.
Proof.
have FF : Filter F.
apply: filter_from_filter; first by exists setT; split => //; exact: clopenT.
by move=> A B [? ?] [? ?]; exists (A `&` B) => //; split=> //; exact: clopenI.
have PF : ProperFilter F by apply: filter_from_proper; move=> ? [? _]; exists x.
move=> hsdfT zdT cmpT U Ux; rewrite nbhs_simpl -/F.
wlog oU : U Ux / open U.
move: Ux; rewrite /= nbhsE => -[] V [? ?] /filterS + /(_ V) P.
by apply; apply: P => //; exists V.
have /(iffLR (compact_near_coveringP _)) : compact (~` U).
by apply: (subclosed_compact _ cmpT) => //; exact: open_closedC.
move=> /(_ _ _ setC (powerset_filter_from_filter PF))[].
move=> y nUy; have /zdT [C [[oC cC] Cx Cy]] : x != y.
by apply: contra_notN nUy => /eqP <-; exact: nbhs_singleton.
exists (~` C, [set USource code | U `<=` C]); first split.
- by apply: open_nbhs_nbhs; split => //; exact: closed_openC.
- apply/near_powerset_filter_fromP; first by move=> ? ?; exact: subset_trans.
by exists C => //; exists C.
- by case=> i j [? /subsetC]; apply.
by move=> D [DF _ [C DC]]/(_ _ DC)/subsetC2/filterS; apply; exact: DF.
Qed.
Lemma zero_dimensional_raySource code {dSource code} {TSource code : orderTopologicalType d} (xSource code ySource code : T) :
(x < y)%O -> zero_dimensional T ->
exists USource code, [/\ clopen U, U y , ~ U x & forall lSource code rSource code, U r -> ~ U l -> l < r]%O.
Proof.
have [U [clU Uy nUx]] := zt y x xNy.
have := clopen_bigcup_clopen clU Uy; set I := (I in clopen I); case=> ? ?.
pose V := I `|` `[y, +oo[; have Iy : I y.
case: clU => + _; rewrite openE => /(_ _ Uy).
rewrite /interior /= itv_nbhsE /= => -[i [] iy yi iU].
by exists i => //; split => //; exact: itv_open_ends_open.
have IU : I `<=` U by move=> ? [? [+ _ _]] => /subset_trans; exact.
exists V; split; first split.
- suff -> : V = I `|` `]y,+oo[ by exact: openU.
have /mem_set := Iy; rewrite -sub1set => /setUidl <-.
by rewrite -setUA setU1itv.
- by apply: closedU => //; exact: rray_closed.
- by left.
- by move=> [/IU //|]; rewrite set_itvE/= leNgt xy.
- move=> l r Vr Vl; rewrite ltNge; apply/negP; move: Vl; apply: contra_not.
move=> rl; case: Vr; first last.
by rewrite set_itvE => yr; right; rewrite set_itvE; exact: (le_trans yr).
have /orP[|ly] := le_total y l; first by move=> + _; right; rewrite set_itvE.
case=> i [iu oi /= yi ri]; left; exists i; first by split.
move: iu oi => _ _; case: i yi ri => p q /= /andP [py yq] /andP[pr rq].
apply/andP; split.
+ by rewrite (le_trans pr)// bnd_simp.
+ by rewrite (le_trans _ yq)// bnd_simp.
Qed.
End totally_disconnected.
Module countable_uniformSource code.
Section countable_uniform.
Local Open Scope relation_scope.
Context {RSource code : realType} {TSource code : uniformType}.
Hypothesis cnt_unifSource code : @countable_uniformity T.
Let f_Source code := projT1 (cid2 (iffLR countable_uniformityP cnt_unif)).
Local Lemma countableBaseSource code : forall ASource code, entourage A -> exists NSource code, f_ N `<=` A.
Proof.
Let entFSource code : forall nSource code, entourage (f_ n).
Proof.
Local Fixpoint g_
normal_space : topologicalType -> Prop normal_space is not universe polymorphic Arguments normal_space T normal_space is transparent Expands to: Constant mathcomp.analysis.topology_theory.separation_axioms.normal_space Declared in library mathcomp.analysis.topology_theory.separation_axioms, line 476, characters 11-23 regular_space : topologicalType -> Prop regular_space is not universe polymorphic Arguments regular_space T regular_space is transparent Expands to: Constant mathcomp.analysis.topology_theory.separation_axioms.regular_space Declared in library mathcomp.analysis.topology_theory.separation_axioms, line 480, characters 11-24
Source code nSource code : set (T * T) :=
if n is n.+1 then let WSource code := split_ent (split_ent (g_ n)) `&` f_ n in W `&` W^-1
else [set: T*T].
Let entGSource code nSource code : entourage (g_ n).
Proof.
by move=> n entg; apply/entourage_invI; exact: filterI.
Qed.
Local Lemma symGSource code nSource code : (g_ n)^-1 = g_ n.
Local Lemma descendG1Source code nSource code : g_ n.+1 `<=` g_ n.
Proof.
by apply: split_ent_subset; exact: entourage_split_ent.
by apply: subset_trans; last exact: split_ent_subset.
Qed.
Local Lemma descendGSource code nSource code mSource code : (m <= n)%N -> g_ n `<=` g_ m.
Proof.
Local Lemma splitG3Source code nSource code : g_ n.+1 \; g_ n.+1 \; g_ n.+1 `<=` g_ n.
Proof.
apply: subset_trans; last exact: subset_split_ent (entG n).
apply: set_compose_subset (g2split); rewrite -[_ n.+1]set_compose_diag.
apply: subset_trans g2split; apply: set_compose_subset => //.
by move=> [_ _] [z _] [<- <-]; exact: entourage_refl.
apply: subset_trans; last exact: subset_split_ent.
by apply: set_compose_subset; apply: subIset; left; apply: subIset; left.
Qed.
Local Lemma gsubfSource code nSource code : g_ n.+1 `<=` f_ n.
Local Lemma countableBaseGSource code ASource code : entourage A -> exists NSource code, g_ N `<=` A.
Proof.
Local Open Scope classical_set_scope.
Local Open Scope ring_scope.
Local Definition distN
totally_disconnected : forall {T : topologicalType}, set T -> Prop totally_disconnected is not universe polymorphic Arguments totally_disconnected {T} A%_classical_set_scope totally_disconnected is transparent Expands to: Constant mathcomp.analysis.topology_theory.separation_axioms.totally_disconnected Declared in library mathcomp.analysis.topology_theory.separation_axioms, line 579, characters 11-31
Source code (eSource code : R) : nat := Num.truncn e^-1.
Local Lemma distN0Source code : distN 0 = 0%N.
Local Lemma distN_natSource code (nSource code : nat) : distN n%:R^-1 = n.
Local Lemma distN_leSource code e1Source code e2Source code : e1 > 0 -> e1 <= e2 -> (distN e2 <= distN e1)%N.
Proof.
Local Fixpoint n_step_ball
zero_dimensional : topologicalType -> Prop zero_dimensional is not universe polymorphic Arguments zero_dimensional T zero_dimensional is transparent Expands to: Constant mathcomp.analysis.topology_theory.separation_axioms.zero_dimensional Declared in library mathcomp.analysis.topology_theory.separation_axioms, line 582, characters 11-27 countable_uniform.g_ not a defined object.
Source code nSource code xSource code eSource code zSource code :=
if n is n.+1 then exists ySource code d1Source code d2Source code,
[/\ n_step_ball n x d1 y,
0 < d1,
0 < d2,
g_ (distN d2) (y, z) &
d1 + d2 = e]
else e > 0 /\ g_ (distN e) (x, z).
Local Definition step_ball
countable_uniform.distN not a defined object. countable_uniform.n_step_ball not a defined object.
Source code xSource code eSource code zSource code := exists iSource code, (n_step_ball i x e z).
Local Lemma n_step_ball_posSource code nSource code xSource code eSource code zSource code : n_step_ball n x e z -> 0 < e.
Proof.
Local Lemma step_ball_posSource code xSource code eSource code zSource code : step_ball x e z -> 0 < e.
Proof.
Local Lemma entourage_nballSource code eSource code :
0 < e -> entourage [set xySource code | step_ball xy.1 e xy.2].
Local Lemma n_step_ball_centerSource code xSource code eSource code : 0 < e -> n_step_ball 0 x e x.
Proof.
Local Lemma step_ball_centerSource code xSource code eSource code : 0 < e -> step_ball x e x.
Proof.
Local Lemma n_step_ball_triangleSource code nSource code mSource code xSource code ySource code zSource code d1Source code d2Source code :
n_step_ball n x d1 y ->
n_step_ball m y d2 z ->
n_step_ball (n + m).+1 x (d1 + d2) z.
Proof.
by exists y, d1, d2; split; rewrite ?addn0 // (n_step_ball_pos Nxy).
move=> [w] [e1] [e2] [Oyw ? ? ? <-].
exists w, (d1 + e1), e2; rewrite addnS addrA.
split => //; last by rewrite addr_gt0//; exact: n_step_ball_pos Oxy.
by case: (IH m w e1 Oxy Oyw) => t [e3] [e4] [] Oxt ? ? ? <-; exists t, e3, e4.
Qed.
Local Lemma step_ball_triangleSource code xSource code ySource code zSource code d1Source code d2Source code :
step_ball x d1 y -> step_ball y d2 z -> step_ball x (d1 + d2) z.
Proof.
Local Lemma n_step_ball_symSource code nSource code xSource code ySource code eSource code :
n_step_ball n x e y -> n_step_ball n y e x.
Proof.
move=> n IH x y e [t] [d1] [d2] [] /IH Oty ? ?.
rewrite addrC -symG -[n]add0n => gty <-; apply: (n_step_ball_triangle _ Oty).
by split => //; exact: gty.
Qed.
Local Lemma step_ball_symSource code xSource code ySource code eSource code : step_ball x e y -> step_ball y e x.
Proof.
Local Lemma n_step_ball_leSource code nSource code xSource code e1Source code e2Source code :
e1 <= e2 -> n_step_ball n x e1 `<=` n_step_ball n x e2.
Proof.
move=> x e1 e2 e1e2 y [?] gxy; split; first exact: (lt_le_trans _ e1e2).
by apply: descendG; last (exact: gxy); exact: distN_le.
move=> n IH x e1 e2 e1e2 z [y] [d1] [d2] [] /IH P d1pos d2pos gyz d1d2e1.
exists y, (e2 - d2), d2; split => //.
- by apply: P; rewrite lerBrDr d1d2e1.
- by apply: lt_le_trans d1pos _; rewrite lerBrDr d1d2e1.
- by rewrite subrK.
Qed.
Local Lemma step_ball_leSource code xSource code e1Source code e2Source code :
e1 <= e2 -> step_ball x e1 `<=` step_ball x e2.
Proof.
Local Lemma distN_halfSource code (nSource code : nat) : n.+1%:R^-1 / (2:R) <= n.+2%:R^-1.
Proof.
Local Lemma split_n_step_ballSource code nSource code xSource code e1Source code e2Source code zSource code :
0 < e1 -> 0 < e2 -> n_step_ball n.+1 x (e1 + e2) z ->
exists t1Source code t2Source code aSource code bSource code,
[/\
n_step_ball a x e1 t1,
n_step_ball 0 t1 (e1 + e2) t2,
n_step_ball b t2 e2 z &
(a + b = n)%N
].
Proof.
move=> e1 e2 x z e1pos e2pos [y] [d1] [d2] [] Oxy ? ? gd2yz deE.
case: (pselect (e1 <= d1)).
move=> e1d1; exists x, y, 0%N, 0%N; split.
- exact: n_step_ball_center.
- apply: n_step_ball_le; last exact: Oxy.
by rewrite -deE lerDl; apply: ltW.
- by apply: (@n_step_ball_le _ _ d2); rewrite // -(lerD2l e1) -deE lerD.
- by rewrite addn0.
move=> /negP; rewrite -ltNge//.
move=> e1d1; exists y, z, 0%N, 0%N; split.
- by apply: n_step_ball_le; last (exact: Oxy); exact: ltW.
- by apply: (@n_step_ball_le _ _ d2); rewrite // -deE lerDr ltW.
- exact: n_step_ball_center.
- by rewrite addn0.
move=> n IH e1 e2 x z e1pos e2pos [y] [d1] [d2] [] Od1xy d1pos d2pos gd2yz deE.
case: (pselect (e2 <= d2)).
move=> e2d2; exists y, z, n.+1, 0%N; split.
- by apply: (@n_step_ball_le _ _ d1); rewrite // -(lerD2r e2) -deE lerD.
- by apply: (@n_step_ball_le _ _ d2); rewrite // -deE lerDr; exact: ltW.
- exact: n_step_ball_center.
- by rewrite addn0.
have d1E' : d1 = e1 + (e2 - d2) by rewrite addrA -deE addrK.
move=> /negP; rewrite -ltNge// => d2lee2.
case: (IH e1 (e2 - d2) x y); rewrite ?subr_gt0 // -d1E' //.
move=> t1 [t2] [c1] [c2] [] Oxy1 gt1t2 t2y <-.
exists t1, t2, c1, c2.+1; split => //.
- by apply: (@n_step_ball_le _ _ d1); rewrite -?deE // ?lerDl; exact: ltW.
- by exists y, (e2 - d2), d2; rewrite // ?subr_gt0// subrK.
- by rewrite addnS.
Qed.
Local Lemma n_step_ball_le_gSource code xSource code nSource code :
n_step_ball 0 x n%:R^-1 `<=` [set ySource code | g_ n (x,y)].
Proof.
Local Lemma subset_n_step_ballSource code nSource code xSource code NSource code :
n_step_ball n x N.+1%:R^-1 `<=` [set ySource code | (g_ N) (x, y)].
Proof.
rewrite leqn0 => /eqP -> N x; apply: subset_trans.
exact: n_step_ball_le_g.
by move=> y ?; exact: descendG.
move=> IH1 + + N x1 x4; case.
by move=> ? [?] P; apply: descendG _ P; rewrite distN_nat.
move=> l ln1 Ox1x4.
case: (@split_n_step_ball l x1 (N.+1%:R^-1/2) (N.+1%:R^-1/2) x4) => //.
by rewrite -splitr.
move=> x2 [x3] [l1] [l2] [] P1 [? +] P3 l1l2; rewrite -splitr distN_nat => ?.
have l1n : (l1 <= n)%N by rewrite (leq_trans (leq_addr l2 l1))// l1l2 -ltnS.
have l2n : (l2 <= n)%N by rewrite (leq_trans (leq_addl l1 l2))// l1l2 -ltnS.
apply: splitG3; exists x3; [exists x2 => //|].
by move/(n_step_ball_le (distN_half N))/(IH1 _ l1n) : P1.
by move/(n_step_ball_le (distN_half N))/(IH1 _ l2n) : P3.
Qed.
Local Lemma subset_step_ballSource code xSource code NSource code :
step_ball x N.+1%:R^-1 `<=` [set ySource code | (g_ N) (x, y)].
Proof.
Local Lemma step_ball_entourageSource code : entourage = entourage_ step_ball.
Proof.
by case=> e /= epos esubE; apply: (filterS esubE); exact: entourage_nball.
move=> entE; case: (countableBase entE) => N fN.
exists N.+2%:R^-1; first by rewrite /= invr_gt0.
apply: (subset_trans _ fN); apply: subset_trans; last apply: gsubf.
by case=> x y /= N1ball; apply: (@subset_step_ball x N.+1).
Qed.
Definition type
countable_uniform.step_ball not a defined object. countable_uniform.type : forall {T : uniformType}, countable_uniformity T -> Type countable_uniform.type is not universe polymorphic Arguments countable_uniform.type {T} cnt_unif countable_uniform.type is transparent Expands to: Constant mathcomp.analysis.topology_theory.separation_axioms.countable_uniform.type Declared in library mathcomp.analysis.topology_theory.separation_axioms, line 955, characters 11-15
Source code : Type := let _ := countableBase in let _ := entF in T.
#[export]Source code HBSource code.instanceSource code DefinitionSource code _Source code :=Source code UniformSource code.on type.
#[export]Source code HBSource code.instanceSource code DefinitionSource code _Source code :=Source code Uniform_isPseudoMetricSource code.Build R type
step_ball_center step_ball_sym step_ball_triangle step_ball_entourage.
#[export]Source code HBSource code.instanceSource code DefinitionSource code _Source code {qSource code :Source code PointedSource code T} :=
Pointed.copy type (Pointed.Pack q).
Lemma countable_uniform_boundedUsed by
- mathcomp.analysis.normedtype_theory.urysohn
Source code (xSource code ySource code : T) : @ball _ type x 2 y.
Proof.
End countable_uniform.
Module ExportsSource code. HB.reexport. End Exports.
End countable_uniform.
Export countable_uniform.Exports.
Notation countable_uniformSource code := countable_uniform.type.
Definition sup_pseudometric
sup_pseudometric : forall [R : realType] [T Ii : Type], (Ii -> PseudoMetric.axioms_ R T) -> countable (T:=Ii) [set: Ii] -> Type sup_pseudometric is not universe polymorphic Arguments sup_pseudometric [R] [T Ii]%_type_scope Tc%_function_scope Icnt sup_pseudometric is transparent Expands to: Constant mathcomp.analysis.topology_theory.separation_axioms.sup_pseudometric Declared in library mathcomp.analysis.topology_theory.separation_axioms, line 978, characters 11-27
Used by
- mathcomp.analysis.topology_theory.function_spaces
Source code (RSource code : realType) (TSource code : Type) (IiSource code : Type)
(TcSource code : Ii -> PseudoMetric R T) (IcntSource code : countable [set: Ii]) : Type := T.
Section sup_pseudometric.
Variable (RSource code : realType) (TSource code : choiceType) (IiSource code : Type).
Variable (TcSource code : Ii -> PseudoMetric R T).
Hypothesis IcntSource code : countable [set: Ii].
Local Notation SSource code := (sup_pseudometric Tc Icnt).
Let TSSource code := fun iSource code => PseudoMetric.Pack (Tc i).
Let countable_uniformityTSource code := @countable_sup_ent T Ii Tc Icnt
(fun iSource code => @countable_uniformity_metric _ (TS i)).
HBSource code.instanceSource code DefinitionSource code _Source code :Source code PseudoMetricSource code R S :=
PseudoMetric.on (countable_uniform countable_uniformityT).
End sup_pseudometric.
Module gaugeSource code.
Section gauge.
Local Open Scope relation_scope.
Let split_symSource code {TSource code : uniformType} (WSource code : set (T * T)) :=
(split_ent W) `&` (split_ent W)^-1.
Section entourage_gauge.
Context {TSource code : uniformType} (ESource code : set (T * T)) (entESource code : entourage E).
Definition gauge
gauge.gauge : forall {T : uniformType}, set (T * T) -> set_system (T * T) gauge.gauge is not universe polymorphic Arguments gauge.gauge {T} E%_classical_set_scope _ gauge.gauge is transparent Expands to: Constant mathcomp.analysis.topology_theory.separation_axioms.gauge.gauge Declared in library mathcomp.analysis.topology_theory.separation_axioms, line 1009, characters 11-16
Source code :=
filter_from [set: nat] (fun nSource code => iter n split_sym (E `&` E^-1)).
Lemma iter_split_entSource code jSource code : entourage (iter j split_sym (E `&` E^-1)).
Proof.
Lemma gauge_entUsed by
- mathcomp.analysis.normedtype_theory.urysohn
Source code ASource code : gauge A -> entourage A.
Proof.
by move=> n ? A _ /filterS; apply; apply: filterI; have ? := iter_split_ent n.
Qed.
Lemma gauge_filterSource code : Filter gauge.
Proof.
move=> i j _ _; wlog ilej : i j / (i <= j)%N.
by move=> WH; have [|/ltnW] := leqP i j;
[|rewrite (setIC (iter _ _ _))]; exact: WH.
exists j => //; rewrite subsetI; split => //; elim: j i ilej => [i|j IH i].
by rewrite leqn0 => /eqP ->.
rewrite leq_eqVlt => /predU1P[<-//|/ltnSE/IH]; apply: subset_trans.
by move=> x/= [jx _]; apply: split_ent_subset => //; exact: iter_split_ent.
Qed.
Lemma gauge_reflSource code ASource code : gauge A -> diagonal `<=` A.
Proof.
by apply: entourage_refl; exact: iter_split_ent.
Qed.
Lemma gauge_invSource code ASource code : gauge A -> gauge A^-1.
Proof.
Lemma gauge_splitSource code ASource code : gauge A -> exists2 BSource code, gauge B & B \; B `<=` A.
Proof.
apply: subset_trans EA; apply: subset_trans; first last.
by apply: subset_split_ent; exact: iter_split_ent.
by case=> a c [b] [] ? ? [] ? ?; exists b.
Qed.
Let gaugedSource code : Type := T.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code ChoiceSource code.on gauged.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code
@isUniformSource code.Build gauged gauge gauge_filter gauge_refl gauge_inv gauge_split.
Lemma gauge_countable_uniformitySource code : countable_uniformity gauged.
Proof.
Definition type
gauge.type : forall {T : uniformType} [E : set (T * T)], entourage E -> Type gauge.type is not universe polymorphic Arguments gauge.type {T} [E]%_classical_set_scope entE gauge.type is transparent Expands to: Constant mathcomp.analysis.topology_theory.separation_axioms.gauge.type Declared in library mathcomp.analysis.topology_theory.separation_axioms, line 1068, characters 11-15
Used by
- mathcomp.analysis.normedtype_theory.urysohn
Source code := countable_uniform.type gauge_countable_uniformity.
End entourage_gauge.
End gauge.
Module ExportsSource code. HB.reexport. End Exports.
End gauge.
Export gauge.Exports.
Lemma uniform_pseudometric_supSource code {RSource code : realType} {TSource code : puniformType} :
@entourage T = @sup_ent T {ESource code : set (T * T) | @entourage T E}
(fun ESource code => Uniform.class (@gauge.type T (projT1 E) (projT2 E))).
Proof.
exists E => //=.
pose pe : {classic {E0Source code : set (T * T) | _}} * _ := (exist _ E entE, E).
have entPE : `[< @entourage (gauge.type entE) E >].
by apply/asboolP; exists 0%N => // ? [].
exists (fset1 (exist _ pe entPE)) => //=; first by move=> ?; rewrite in_setE.
by rewrite set_fset1 bigcap_set1.
case=> W /= [/= J] _ <- /filterS; apply; apply: filter_bigI => -[] [] [] /= D.
move=> entD G /[dup] /asboolP [n _ + _ _] => /filterS; apply.
exact: gauge.iter_split_ent.
Qed.
Section perfect_sets.
Implicit Types (T : topologicalType).
Definition perfect_set
perfect_set : forall {T : topologicalType}, set T -> Prop perfect_set is not universe polymorphic Arguments perfect_set {T} A%_classical_set_scope perfect_set is transparent Expands to: Constant mathcomp.analysis.topology_theory.separation_axioms.perfect_set Declared in library mathcomp.analysis.topology_theory.separation_axioms, line 1096, characters 11-22
Used by
- mathcomp.analysis.cantor
- mathcomp.analysis.topology_theory.function_spaces
Source code {TSource code} (ASource code : set T) := closed A /\ limit_point A = A.
Lemma perfectPSource code {TSource code} (ASource code : set T) :
perfect_set A <-> closed A /\ isolated A = set0.
Proof.
- move=> /(congr1 (fun xSource code => x `\` limit_point A)).
rewrite setUDK.
by apply/disj_setPS; rewrite disj_set_sym disjoint_isolated_limit_point.
by rewrite limA -(closure_id A).1// setDv.
- by rewrite isoA set0U -(closure_id A).1.
Qed.
Lemma perfectTPUsed by
- mathcomp.analysis.topology_theory.function_spaces
Source code {TSource code} : perfect_set [set: T] <-> forall xSource code : T, ~ open [set x].
Proof.
case=> _; rewrite eqEsubset; case=> _ + x Ox => /(_ x I [set x]).
by (case; [by apply: open_nbhs_nbhs; split |]) => y [+ _] => /[swap] -> /eqP.
move=> NOx; split; [exact: closedT |]; rewrite eqEsubset; split => x // _.
move=> U; rewrite nbhsE; case=> V [] oV Vx VU.
have Vnx: V != [set x] by apply/eqP => M; apply: (NOx x); rewrite -M.
have /existsNP [y /existsNP [Vy Ynx]] : ~ forall ySource code, V y -> y = x.
move/negP: Vnx; apply: contra_not => Vxy; apply/eqP; rewrite eqEsubset.
by split => // ? ->.
by exists y; split => //; [exact/eqP | exact: VU].
Qed.
Lemma perfectTP_exUsed by
- mathcomp.analysis.cantor
Source code {TSource code} : perfect_set [set: T] <->
forall (USource code : set T), open U -> U !=set0 ->
exists xSource code ySource code, [/\ U x, U y & x != y] .
Proof.
move=> nx1 U oU [] x Ux; exists x.
have : U <> [set x] by move=> Ux1; apply: (nx1 x); rewrite -Ux1.
apply: contra_notP => /not_existsP/contrapT=> Uyx; rewrite eqEsubset.
by split => [y Uy|? ->//]; have /not_and3P[//|//|/negP/negPn/eqP] := Uyx y.
move=> Unxy x Ox; have [] := Unxy _ Ox; first by exists x.
by move=> y [] ? [->] -> /eqP.
Qed.
End perfect_sets.
Section sigT_separations.
Context {ISource code : choiceType} {XSource code : I -> topologicalType}.
Lemma sigT_hausdorffSource code :
(forall iSource code, hausdorff_space (X i)) -> hausdorff_space {iSource code & X i}.
Proof.
have [] := cl (existT X i @` [set: X i]) (existT X j @` [set: X j]);
[by apply: existT_nbhs; exact: filterT..|].
move=> p [/= [_ _ <-] [_ _ [ji]]] _.
rewrite {}ji {j} in x y cl *.
congr existT; apply: hX => U V Ux Vy.
have [] := cl (existT X i @` U) (existT X i @` V); [exact: existT_nbhs..|].
move=> z [] [l Ul <-] [r Vr lr]; exists l; split => //.
by rewrite -(existT_inj2 lr).
Qed.
End sigT_separations.