Module mathcomp.analysis.normedtype_theory.normed_module
From HB Require Import structures.From mathcomp Require Import all_ssreflect_compat finmap ssralg ssrnum ssrint.
From mathcomp Require Import archimedean rat interval zmodp vector.
From mathcomp Require Import interval_inference fieldext falgebra.
#[warning="-warn-library-file-internal-analysis"]
From mathcomp Require Import unstable.
From mathcomp Require Import boolp classical_sets filter functions cardinality.
From mathcomp Require Import set_interval ereal reals topology real_interval.
From mathcomp Require Import convex prodnormedzmodule tvs num_normedtype.
From mathcomp Require Import ereal_normedtype pseudometric_normed_Zmodule.
Reserved Notation "k .-lipschitz_on f"
(at level 2, format "k .-lipschitz_on f").
Reserved Notation "k .-lipschitz_ A f"
(at level 2, A at level 0, format "k .-lipschitz_ A f").
Reserved Notation "k .-lipschitz f" (at level 2, format "k .-lipschitz f").
Reserved Notation "[ 'lipschitz' E | x 'in' A ]"
(at level 0, x name, format "[ 'lipschitz' E | x 'in' A ]").
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.
.
Source code
Source code
Source code
Source code
normrZ : forall ( : K) ( : V), `| l *: x | = `| l | * `| x |;
}.
Source code
Source code
Source code
.
Source code
Source code
Source code
Source code
{ of PseudoMetricNormedZmod K T & Tvs K T
& PseudoMetricNormedZmod_Tvs_isNormedModule K T}.
.
Source code
Source code
Source code
Source code
& PseudoMetricNormedZmod K V & GRing.Lmodule K V := {
normrZ : forall ( : K) ( : V), `| l *: x | = `| l | * `| x |;
}.
.
Source code
Source code
Source code
Let
Source code
Proof.
Source code
Proof.
near=> l z => /=; have M0 : 0 < M by [].
rewrite (@distm_lt_split _ _ (k *: z)) // -?(scalerBr, scalerBl) normrZ.
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; apply: cvg_bounded (@cvg_refl _ _).
by near: l; apply: cvgr_dist_lt; rewrite // divr_gt0.
Unshelve. all: by end_near. Qed.
Local Open Scope convex_scope.
Let
Source code
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 _ _))// !normrZ.
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.
Source code
exists2 : set_system (convex_lmodType V),
(forall , b \in B -> convex_set b) & basis B.
Proof.
by move=> b; rewrite inE => [[x]] [r] ->; exact: ball_convex_set.
split; first by move=> B [x] [r] ->; exact: ball_open.
move=> x B; rewrite -nbhs_ballE/= => -[r] r0 Bxr /=.
by exists (ball x r) => //; split; [exists x, r|exact: ballxx].
Qed.
.
Source code
Source code
PreTopologicalNmodule_isTopologicalNmodule.Build V add_continuous.
.
Source code
Source code
TopologicalNmodule_isTopologicalLmodule.Build K V scale_continuous.
.
Source code
Source code
Source code
.
Source code
Source code
PseudoMetricNormedZmod_Tvs_isNormedModule.Build K V normrZ.
.
Source code
Variable : numFieldType.
.
Source code
Source code
PseudoMetricNormedZmod_Tvs_isNormedModule.Build R R^o (@normrM _).
End standard_topology_normedMod.
Module
Source code
Section realType.
Variable ( : realType).
Source code
Source code
.
Source code
Source code
Source code
Source code
Source code
.
Source code
Source code
Source code
Source code
Source code
.
Source code
Source code
Source code
End realType.
Section rcfType.
Variable ( : rcfType).
Source code
Source code
.
Source code
Source code
Source code
Source code
Source code
.
Source code
Source code
Source code
Source code
Source code
.
Source code
Source code
Source code
End rcfType.
Section archiFieldType.
Variable ( : archiRealFieldType).
Source code
Source code
.
Source code
Source code
Source code
Source code
Source code
.
Source code
Source code
Source code
Source code
Source code
.
Source code
Source code
Source code
End archiFieldType.
Section realFieldType.
Variable ( : realFieldType).
Source code
Source code
.
Source code
Source code
Source code
Source code
Source code
.
Source code
Source code
Source code
Source code
Source code
.
Source code
Source code
Source code
Source code
Source code
.
Source code
Source code
Source code
End realFieldType.
Section numClosedFieldType.
Variable ( : numClosedFieldType).
Source code
Source code
.
Source code
Source code
Source code
Source code
Source code
.
Source code
Source code
Source code
Source code
Source code
.
Source code
Source code
Source code
Source code
Source code
.
Source code
Source code
Source code
End numClosedFieldType.
Section numFieldType.
Variable ( : numFieldType).
Source code
Source code
.
Source code
Source code
Source code
Source code
Source code
.
Source code
Source code
Source code
Source code
Source code
.
Source code
Source code
Source code
Source code
Source code
.
Source code
Source code
Source code
End numFieldType.
Module
Source code
End numFieldNormedType.
Import numFieldNormedType.Exports.
Lemma
Source code
{ : pseudoMetricNormedZmodType K} ( : R -> U) ( : R) :
{within `[- b, - a], continuous f} -> {within `[a, b], continuous f \o -%R}.
Proof.
by rewrite set_itv_ge ?bnd_simp -?ltNge//; exact: continuous_subspace0.
by rewrite set_itv1; exact: continuous_subspace1.
move/continuous_within_itvP; rewrite ltrN2 => /(_ ab)[cf fb fa].
apply/(continuous_within_itvP _ ab); split.
- move=> t tab.
apply: (@cvg_comp _ _ _ -%R f); first exact: oppr_continuous.
by apply: cf; rewrite oppr_itvoo !opprK.
- by rewrite -{1}(opprK a); apply/cvg_at_leftNP; exact: fa.
- by rewrite -{1}(opprK b); apply/cvg_at_rightNP; exact: fb.
Qed.
Definition
pair_triangle : forall [K : numDomainType] (x y : K * K), (`|x + y| <= `|x| + `|y|)%R pair_triangle is not universe polymorphic Arguments pair_triangle [K] x y pair_triangle is opaque Expands to: Constant mathcomp.analysis.normedtype_theory.matrix_normedtype.pair_triangle Declared in library mathcomp.analysis.normedtype_theory.matrix_normedtype, line 193, characters 8-21
Source code
.
Source code
Source code
Source code
Choice.on (pseudoMetric_normed M).
.
Source code
Source code
Source code
Num.NormedZmodule.on (pseudoMetric_normed M).
Module
Source code
Section pseudoMetric_from_normedZmodType.
Variables ( : numFieldType) ( : normedZmodType K).
Notation := (pseudoMetric_normed M).
Definition
Source code
Definition
Source code
Definition
Source code
Lemma
Source code
Proof.
Source code
Source code
Source code
Source code
Lemma
Source code
Lemma
Source code
Lemma
Source code
ball x (e1 + e2) z.
Proof.
Lemma
Source code
Proof.
Source code
Source code
Source code
Source code
ent nbhsE ball ball_center ball_sym ball_triangle entourageE.
End pseudoMetric_from_normedZmodType.
Module
Source code
End pseudoMetric_from_normedZmodType.
Export pseudoMetric_from_normedZmodType.Exports.
.
Source code
Source code
Source code
Source code
& GRing.Lmodule R M := {
norm : M -> R;
ler_normD : forall , norm (x + y) <= norm x + norm y ;
normrZ : forall ( : R) ( : M), norm (l *: x) = `|l| * norm x ;
normr0_eq0 : forall : M, norm x = 0 -> x = 0
}.
.
Source code
Source code
Source code
Lemma
Source code
Proof.
Lemma
Source code
.
Source code
Source code
Source code
R M ler_normD normr0_eq0 normrMn normrN.
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
PseudoMetricNormedZmod_Lmodule_isNormedModule.Build R M normrZ.
.
Source code
Lemma
Source code
Lemma
Source code
limf_esup f a^' = limf_esup (fun => f (- x)%R) (- a)%R^'.
Proof.
Lemma
Source code
x \in `]a, b[ ->
f @ (x : subspace `[a, b]) --> f x ->
(f \_ `[a, b] x) @[ --> x] --> f x.
Proof.
move/cvgrPdist_lt : xf => /(_ e e0) xf.
near=> z.
rewrite patchE ifT//; last first.
rewrite inE; apply: subset_itv_oo_cc.
by near: z; exact: near_in_itvoo.
near: z.
rewrite /prop_near1 /nbhs/= /nbhs_subspace ifT// in xf; last first.
by rewrite inE/=; exact: subset_itv_oo_cc xab.
case: xf => x0 /= x00 xf.
near=> z.
apply: xf => //=.
rewrite inE; apply: subset_itv_oo_cc.
by near: z; exact: near_in_itvoo.
Unshelve. all: by end_near. Qed.
Lemma
Source code
`|x| \in GRing.unit -> `| `| x |^-1 *: x | = 1.
Definition
Source code
( : V -> W) ( : V * V) : W := f x.1 - f x.2.
Arguments self_sub {K V W} f x /.
Section NormedModule_numFieldType.
Variables ( : numFieldType) ( : normedModType K).
Lemma
Source code
Lemma
Source code
cvg (f @ x^') -> lim (f @ x^') = lim (f @ x^'+).
Proof.
Lemma
Source code
cvg (f @ x^') -> lim (f @ x^') = lim (f @ x^'-).
Proof.
Arguments scale_continuous _ _ : clear implicits.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
End NormedModule_numFieldType.
Arguments cvg_at_rightE {K V} f x.
Arguments cvg_at_leftE {K V} f x.
Section NormedModule_continuous.
Variables ( : numFieldType) ( : normedModType K).
Lemma
Source code
{for u, continuous f} = {for 0, continuous (f \o shift u)}.
Proof.
Lemma
Source code
f \o shift u @ 0^' --> f u <-> {for u, continuous f}.
Proof.
by apply/(continuous_withinNx _ _).2/(cvg_trans cfu); rewrite /= add0r.
by move/(continuous_withinNx _ _).1/cvg_trans; apply; rewrite /= add0r.
Qed.
End NormedModule_continuous.
Lemma
Source code
(\forall \near 0, P x) -> (\forall \near 0, P (k *: y)).
Proof.
Section NVS_continuity_mul.
Context { : numFieldType}.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
apply/(@cvgrPdist_ltp _ _ _ (nbhs x)); near (0 : K)^'+ => d. near=> e.
near=> y; have y_neq0 : y != 0 by near: y; apply: (cvgr_neq0 x).
rewrite /= -div1r -[y^-1]div1r -mulNr addf_div// mul1r mulN1r normrM normfV.
rewrite ltr_pdivrMr ?normr_gt0 ?mulf_neq0// (@lt_le_trans _ _ (e * d))//.
by near: y; apply: cvgr_distC_lt => //; rewrite mulr_gt0.
rewrite ler_pM2l => //=; rewrite normrM -ler_pdivrMl//.
near: y; apply: (cvgr_norm_ge x) => //; rewrite ltr_pdivrMl//.
by near: d; apply: nbhs_right_lt; rewrite mulr_gt0.
Unshelve. all: by end_near. Qed.
End NVS_continuity_mul.
Section cvg_composition_normed.
Context { : numFieldType} { : normedModType K} { : Type}.
Context ( : set_system T) { : Filter F}.
Implicit Types (f g : T -> V) (s : T -> K) (k : K) (x : T) (a b : V).
Lemma
Source code
s x *: f x @[ --> F] --> k *: a.
Proof.
have := (@scale_continuous K V (k, a)).
rewrite /continuous_at/=.
exact.
Qed.
Lemma
Source code
cvg (f @ F) -> cvg ((fun => s x *: f x) @ F).
Lemma
Source code
Lemma
Source code
Lemma
Source code
Lemma
Source code
Lemma
Source code
Proof.
End cvg_composition_normed.
#[deprecated(since="mathcomp-analysis 1.12.0", note="renamed to `cvgZr_tmp`")]
Notation
Source code
#[deprecated(since="mathcomp-analysis 1.12.0", note="renamed to `is_cvgZr_tmp`")]
Notation
Source code
#[deprecated(since="mathcomp-analysis 1.12.0", note="renamed to `cvgZl_tmp`")]
Notation
Source code
#[deprecated(since="mathcomp-analysis 1.12.0", note="renamed to `is_cvgZl_tmp`")]
Notation
Source code
#[deprecated(since="mathcomp-analysis 1.12.0", note="renamed to `is_cvgZlE`")]
Notation
Source code
Section cvg_composition_field.
Context { : numFieldType} { : Type}.
Context ( : set_system T) { : Filter F}.
Implicit Types (f g : T -> K) (a b : K).
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
End cvg_composition_field.
#[deprecated(since="mathcomp-analysis 1.12.0", note="renamed to `cvgMr_tmp`")]
Notation
Source code
#[deprecated(since="mathcomp-analysis 1.12.0", note="renamed to `cvgMl_tmp`")]
Notation
Source code
#[deprecated(since="mathcomp-analysis 1.12.0", note="renamed to `is_cvgMl_tmp`")]
Notation
Source code
#[deprecated(since="mathcomp-analysis 1.12.0", note="renamed to `is_cvgMr_tmp`")]
Notation
Source code
#[deprecated(since="mathcomp-analysis 1.12.0", note="renamed to `is_cvgMrE_tmp`")]
Notation
Source code
#[deprecated(since="mathcomp-analysis 1.12.0", note="renamed to `is_cvgMlE_tmp`")]
Notation
Source code
Section limit_composition_normed.
Context { : numFieldType} { : normedModType K} { : Type}.
Context ( : set_system T) { : ProperFilter F}.
Implicit Types (f g : T -> V) (s : T -> K) (k : K) (x : T) (a : V).
Lemma
Source code
lim ((fun => s x *: f x) @ F) = lim (s @ F) *: lim (f @ F).
Lemma
Source code
lim ((fun => s x *: a) @ F) = lim (s @ F) *: a.
Lemma
Source code
End limit_composition_normed.
#[deprecated(since="mathcomp-analysis 1.12.0", note="renamed to `limZr_tmp`")]
Notation
Source code
#[deprecated(since="mathcomp-analysis 1.12.0", note="renamed to `limZl_tmp`")]
Notation
Source code
Section limit_composition_field.
Context { : numFieldType} { : Type}.
Context ( : set_system T) { : ProperFilter F}.
Implicit Types (f g : T -> K).
Lemma
Source code
lim (f \* g @ F) = lim (f @ F) * lim (g @ F).
End limit_composition_field.
Section cvg_composition_field_proper.
Context { : numFieldType} { : Type}.
Context ( : set_system T) { : ProperFilter F}.
Implicit Types (f g : T -> K) (a b : K).
Lemma
Source code
Lemma
Source code
Proof.
End cvg_composition_field_proper.
Section ProperFilterRealType.
Context { : Type} { : set_system T} { : ProperFilter F} { : realFieldType}.
Implicit Types (f g h : T -> R) (a b : R).
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
End ProperFilterRealType.
Section local_continuity.
Context { : numFieldType} { : normedModType K} { : topologicalType}.
Implicit Types (f g : T -> V) (s t : T -> K) (x : T) (k : K) (a : V).
Lemma
Source code
{for x, continuous f} -> {for x, continuous (fun => - f x)}.
Proof.
Lemma
Source code
{for x, continuous f} -> {for x, continuous g} ->
{for x, continuous (f + g)}.
Proof.
Lemma
Source code
{for x, continuous f} -> {for x, continuous g} ->
{for x, continuous (f - g)}.
Proof.
Lemma
Source code
{for x, continuous s} -> {for x, continuous f} ->
{for x, continuous (fun => s x *: f x)}.
Proof.
Lemma
Source code
{for x, continuous f} -> {for x, continuous (k \*: f)}.
Proof.
Lemma
Source code
{for x, continuous s} -> {for x, continuous (fun => s z *: a)}.
Proof.
Lemma
Source code
{for x, continuous s} -> {for x, continuous t} ->
{for x, continuous (s \* t)}.
Proof.
Lemma
Source code
{for x, continuous s} -> {for x, continuous (fun => (s x)^-1%R)}.
Proof.
End local_continuity.
#[deprecated(since="mathcomp-analysis 1.12.0", note="renamed to `continuousZl_tmp`")]
Notation
Source code
#[deprecated(since="mathcomp-analysis 1.12.0", note="renamed to `continuousZr_tmp`")]
Notation
Source code
Section cvg_fin.
Context { : numFieldType}.
Section filter.
Context { : set_system \bar R} { : Filter F}.
Lemma
Source code
Proof.
by apply: Fa; apply/nbhs_EFin => /=; apply: (@cvgr_dist_lt _ _ _ (nbhs a)).
(* BUG: using cvgr_dist_lt without (nbhs _) expands the definition of nbhs, *)
(* so that it is not recognized as a filter anymore *)
Qed.
Lemma
Source code
Proof.
End filter.
Section limit.
Context { : Type} { : set_system I} { : Filter F} ( : I -> \bar R).
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
f @ F --> a%:E.
Proof.
Lemma
Source code
f @ F --> a%:E <-> (\near , f F \is a fin_num) /\ fine \o f @ F --> a.
Proof.
Lemma
Source code
Proof.
apply: cvg_EFin=> //; near (0 : R)^'+ => e.
have lea : e <= `|a| by near: e; apply: nbhs_right_le; rewrite normr_gt0.
near=> x; have : `|a - fine (f x)| < e by near: x; apply: cvgr_dist_lt.
by case: f=> //=; rewrite subr0; apply: contra_ltT.
Unshelve. all: by end_near. Qed.
End limit.
End cvg_fin.
Section ecvg_realFieldType.
Context {} { : set_system I} { : Filter F} { : realFieldType}.
Implicit Types f g u v : I -> \bar R.
Local Open Scope ereal_scope.
Lemma
Source code
a +? b -> f @ F --> a -> g @ F --> b -> f \+ g @ F --> a + b.
Proof.
move=> /cvgeyPge/= foo /fine_cvgP[Fg gb]; apply/cvgeyPgey.
near=> A; near=> n; have /(_ _)/wrap[//|Fgn] := near Fg n.
rewrite -leeBlDr// (@le_trans _ _ (A - (x - 1))%:E)//; last by near: n.
rewrite ?EFinB leeB// leeBlDr// -[v n]fineK// -EFinD lee_fin.
by rewrite ler_distlDr// ltW//; near: n; apply: cvgr_dist_lt.
have NyE u v x : u @ F --> -oo -> v @ F --> x%:E -> u \+ v @ F --> -oo.
move=> /cvgeNyPle/= foo /fine_cvgP -[Fg gb]; apply/cvgeNyPleNy.
near=> A; near=> n; have /(_ _)/wrap[//|Fgn] := near Fg n.
rewrite -leeBrDr// (@le_trans _ _ (A - (x + 1))%:E)//; first by near: n.
rewrite ?EFinB ?EFinD leeB// -[v n]fineK// -EFinD lee_fin.
by rewrite ler_distlCDr// ltW//; near: n; apply: cvgr_dist_lt.
have yyE u v : u @ F --> +oo -> v @ F --> +oo -> u \+ v @ F --> +oo.
move=> /cvgeyPge foo /cvgeyPge goo; apply/cvgeyPge => A; near=> y.
by rewrite -[leLHS]adde0 leeD//; near: y; [apply: foo|apply: goo].
have NyNyE u v : u @ F --> -oo -> v @ F --> -oo -> u \+ v @ F --> -oo.
move=> /cvgeNyPle foo /cvgeNyPle goo; apply/cvgeNyPle => A; near=> y.
by rewrite -[leRHS]adde0 leeD//; near: y; [apply: foo|apply: goo].
have addfC u v : u \+ v = v \+ u.
by apply/funeqP => x; rewrite /= addeC.
move: a b => [a| |] [b| |] //= _; rewrite ?(addey, addye, addeNy, addNye)//=;
do ?by [apply: yE|apply: NyE|apply: yyE|apply: NyNyE].
- move=> /fine_cvgP[Ff fa] /fine_cvgP[Fg ga]; rewrite -EFinD.
apply/fine_cvgP; split.
by near do [rewrite fin_numD; apply/andP; split].
apply: (@cvg_trans _ ((fine \o f) \+ (fine \o g) @ F))%R; last exact: cvgD.
by apply: near_eq_cvg; near do rewrite /= fineD//.
- by move=> /[swap]; rewrite addfC; apply: yE.
- by move=> /[swap]; rewrite addfC; apply: NyE.
Unshelve. all: by end_near. Qed.
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
a +? - b -> f @ F --> a -> g @ F --> b -> f \- g @ F --> a - b.
Lemma
Source code
k \is a fin_num -> (fun => f x - k) @ F --> 0 <-> f @ F --> k.
Proof.
Lemma
Source code
Proof.
- exact/(cvg_comp _ _ (@norm_continuous _ R r)).
- by exists r; split => // y ry; apply: rA; rewrite (lt_le_trans ry)// lee_abs.
- exists (- r)%R; rewrite realN; split => // y; rewrite EFinN -lteNr => yr.
by apply: rA; rewrite (lt_le_trans yr)// -abseN lee_abs.
Qed.
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
Proof.
have [r0|r0|->] := ltrgtP r 0; do ?exact: hwlog; last first.
by move=> x; rewrite mul0e; apply: cvg_near_cst; near=> y; rewrite mul0e.
have -> : *%E r%:E = \- ( *%E (- r)%:E ).
by apply/funeqP=> x /=; rewrite EFinN mulNe oppeK.
move=> x; apply: (continuous_comp (hwlog (- r)%R _ _)); rewrite ?oppr_gt0//.
exact: oppe_continuous.
move=> [s||]/=.
- rewrite -EFinM; apply: cvg_EFin => /=.
by apply/nbhs_EFin; near do rewrite fin_numM//.
move=> P /= Prs; apply/nbhs_EFin=> //=.
by apply: near_fun => //=; apply: continuousM => //=; apply: cvg_cst.
- rewrite gt0_muley ?lte_fin// => A [u [realu uA]].
exists (r^-1 * u)%R; split; first by rewrite realM// realV realE ltW.
by move=> x rux; apply: uA; move: rux; rewrite EFinM lte_pdivrMl.
- rewrite gt0_muleNy ?lte_fin// => A [u [realu uA]].
exists (r^-1 * u)%R; split; first by rewrite realM// realV realE ltW.
by move=> x xru; apply: uA; move: xru; rewrite EFinM lte_pdivlMl.
Unshelve. all: by end_near. Qed.
Lemma
Source code
f @ F --> x -> (fun => y * f n) @ F --> y * x.
Proof.
Lemma
Source code
cvg (f @ F) -> cvg ((fun => y * f n) @ F).
Lemma
Source code
f @ F --> x -> (fun => f n * y) @ F --> x * y.
Lemma
Source code
cvg (f @ F) -> cvg ((fun => f n * y) @ F).
Lemma
Source code
Proof.
move=> /cvg_ballP f0; apply/cvg_ballP => _/posnumP[e].
have := [elaborate f0 _ (gt0 e)].
rewrite !near_simpl => absf0; rewrite near_simpl.
apply: filterS absf0 => x /=; rewrite /ball/= /ereal_ball !contract0 !sub0r !normrN.
have [fx0|fx0] := leP 0 (f x); first by rewrite gee0_abs.
by rewrite (lte0_abs fx0) contractN normrN.
Qed.
Let
Source code
(0 < b)%R -> f @ F --> +oo -> g @ F --> b%:E -> f \* g @ F --> +oo.
Proof.
near (0%R : R)^'+ => e; near=> A; near=> n.
rewrite (@le_trans _ _ (f n * e%:E))// ?lee_pmul// ?lee_fin//.
- by rewrite -lee_pdivrMr ?divr_gt0//; near: n; apply: foo.
- by rewrite (@le_trans _ _ 1) ?lee_fin//; near: n; apply: foo.
rewrite -(@fineK _ (g n)) ?lee_fin; last by near: n; exact: gfin.
by near: n; apply: (cvgr_ge b).
Unshelve. all: end_near. Qed.
Let
Source code
(b < 0)%R -> f @ F --> +oo -> g @ F --> b%:E -> f \* g @ F --> -oo.
Proof.
near (0%R : R)^'+ => e; near=> A; near=> n.
rewrite -leeN2 -muleN (@le_trans _ _ (f n * e%:E))//.
by rewrite -lee_pdivrMr ?mulr_gt0 ?oppr_gt0//; near: n; apply: foo.
rewrite lee_pmul ?lee_fin//.
by rewrite (@le_trans _ _ 1) ?lee_fin//; near: n; apply: foo.
rewrite -(@fineK _ (g n)) ?lee_fin; last by near: n; exact: gfin.
near: n; apply: (cvgr_ge (- b)); rewrite 1?cvgNP//.
by near: e; apply: nbhs_right_lt; rewrite oppr_gt0.
Unshelve. all: end_near. Qed.
Let
Source code
(0 < b)%R -> f @ F --> -oo -> g @ F --> b%:E -> f \* g @ F --> -oo.
Proof.
Let
Source code
(b < 0)%R -> f @ F --> -oo -> g @ F --> b%:E -> f \* g @ F --> +oo.
Proof.
Lemma
Source code
a *? b -> f @ F --> a -> g @ F --> b -> f \* g @ F --> a * b.
Proof.
- move=> _ /fine_cvgP[finf fa] /fine_cvgP[fing gb].
apply/fine_cvgP; split.
by near do apply: fin_numM; [apply: finf | apply: fing].
apply: (@cvg_trans _ (((fine \o f) \* (fine \o g)) @ F)%R).
apply: near_eq_cvg; near=> n => //=.
rewrite -[in RHS](@fineK _ (f n)); last by near: n; exact: finf.
by rewrite -[in RHS](@fineK _ (g n)) //; near: n; exact: fing.
exact: cvgM.
- move: f g a; abstract: apoo.
move=> {}f {}g {}a + fa goo; have [a0 _|a0 _|->] := ltgtP a 0%R.
+ rewrite mulry ltr0_sg// mulN1e.
by under eq_fun do rewrite muleC; exact: (cvgeM_lt0_pinfty a0).
+ rewrite mulry gtr0_sg// mul1e.
by under eq_fun do rewrite muleC; exact: (cvgeM_gt0_pinfty a0).
+ by rewrite /mule_def eqxx.
- move: f g a; abstract: bnoo.
move=> {}f {}g {}a + fa goo; have [a0 _|a0 _|->] := ltgtP a 0%R.
+ rewrite mulrNy ltr0_sg// mulN1e.
by under eq_fun do rewrite muleC; exact: (cvgeM_lt0_ninfty a0).
+ rewrite mulrNy gtr0_sg// mul1e.
by under eq_fun do rewrite muleC; exact: (cvgeM_gt0_ninfty a0).
+ by rewrite /mule_def eqxx.
- rewrite mule_defC => ? foo gb; rewrite muleC.
by under eq_fun do rewrite muleC; exact: apoo.
- move=> _; move: f g; abstract: poopoo.
move=> {}f {}g /cvgeyPge foo /cvgeyPge goo.
rewrite mulyy; apply/cvgeyPgey; near=> A; near=> n.
have A_gt0 : (0 <= A)%R by [].
by rewrite -[leLHS]mule1 lee_pmul//=; near: n; [apply: foo|apply: goo].
- move=> _; move: f g; abstract: poonoo.
move=> {}f {}g /cvgeyPge foo /cvgeNyPle goo.
rewrite mulyNy; apply/cvgeNyPle => A; near=> n.
rewrite (@le_trans _ _ (g n))//; last by near: n; exact: goo.
apply: lee_nemull; last by near: n; apply: foo.
by rewrite (@le_trans _ _ (- 1)%:E)//; near: n; apply: goo; rewrite ltrN10.
- rewrite mule_defC => ? foo gb; rewrite muleC.
by under eq_fun do rewrite muleC; exact: bnoo.
- move=> _ foo goo.
by under eq_fun do rewrite muleC; exact: poonoo.
- move=> _ foo goo; rewrite mulNyNy -mulyy.
by under eq_fun do rewrite -muleNN; apply: poopoo;
rewrite -/(- -oo); apply: cvgeN.
Unshelve. all: end_near. Qed.
End ecvg_realFieldType.
#[deprecated(since="mathcomp-analysis 1.9.0", note="renamed to `sube_cvg0`")]
Notation
Source code
#[deprecated(since="mathcomp-analysis 1.10.0", note="renamed to `cvgeZl`")]
Notation
Source code
#[deprecated(since="mathcomp-analysis 1.10.0", note="renamed to `is_cvgeZl`")]
Notation
Source code
#[deprecated(since="mathcomp-analysis 1.10.0", note="renamed to `cvgeZr`")]
Notation
Source code
#[deprecated(since="mathcomp-analysis 1.10.0", note="renamed to `is_cvgeZr`")]
Notation
Source code
Section max_cts.
Context { : realType} { : topologicalType}.
Lemma
Source code
{for x, continuous f} -> {for x, continuous g} ->
{for x, continuous (f \min g)}.
Proof.
Lemma
Source code
{for x, continuous f} -> {for x, continuous g} ->
{for x, continuous (f \max g)}.
Proof.
End max_cts.
Lemma
Source code
limit_point A x <-> exists : nat -> T,
[/\ a_ @` setT `<=` A, forall , a_ n != x & a_ @ \oo --> x].
Proof.
move=> U /ax[m _ a_U]; near \oo => n; exists (a_ n); split => //.
by apply aTA; exists n.
by apply a_U; near: n; exists m.
pose U := fun : nat => [set : T | `|x - z| < n.+1%:R^-1].
suff /(_ _)/cid-/all_sig[a_ anx] : forall , exists , a != x /\ (U n `&` A) a.
exists a_; split.
- by move=> a [n _ <-]; have [? []] := anx n.
- by move=> n; have [] := anx n.
- apply/cvgrPdist_lt => _/posnumP[e]; near=> n; have [? [] Uan Aan] := anx n.
by rewrite (lt_le_trans Uan)// ltW//; near: n; exact: near_infty_natSinv_lt.
move=> n; have : nbhs (x : T) (U n).
by apply/(nbhs_ballP (x:T) (U n)); rewrite nbhs_ballE; exists n.+1%:R^-1 => //=.
by move/Ax/cid => [/= an [anx Aan Uan]]; exists an.
Unshelve. all: by end_near. Qed.
Lemma
Source code
limit_point E a <-> (forall , nbhs a U -> infinite_set (U `&` E)).
Proof.
move=> aE U /aE /infiniteP /pcard_leP /injfunPex[/= f funf injf].
have [f0a|f0a] := eqVneq (f O) a; last first.
by exists (f 0); case: (funf 0 Logic.I).
have [Uf1 Ef1]:= funf 1 Logic.I.
exists (f 1); split=> //; apply/eqP => f1a.
have := injf 1 0 (in_setT _) (in_setT _).
by rewrite f1a f0a => /(_ erefl); exact/eqP/oner_neq0.
(* we build 2 sequences a_ and r_ s.t. a_i and r_i have the properties: *)
pose elt_prop ( : R * R) := [/\ ball a ar.2 `<=` V,
ar.1 \in E, ar.1 \in (ball a ar.2 : set R), ar.2 > 0 & ar.1 != a].
pose elt_type := { : R * R | elt_prop ar}.
pose a_ ( : elt_type) := (proj1_sig x).2.
pose r_ ( : elt_type) := (proj1_sig x).1.
(* two successive (a_i, r_i) and (a_j, r_j) satisfy the relation: *)
pose elt_rel := `|a - r_ i| = a_ j /\ ball a (a_ j) `<=` ball a (a_ i) /\
`|a - r_ j| < `|a - r_ i| /\ r_ i != r_ j.
move: aV => -[r0/= r0_gt0 ar0V].
pose V0 : set R := ball a r0.
move/limit_pointP : Ea => [y_ [y_E y_neq_a y_cvg_a]].
have [a0 [a0a a0V0 a0E]] : exists , [/\ a0 != a, a0 \in V0 & a0 \in E].
move/cvgrPdist_lt : y_cvg_a => /(_ _ r0_gt0)[M _ May_r0].
exists (y_ M); split=> //.
- by apply/mem_set/May_r0 => /=.
- by apply/mem_set/y_E/imageT.
have [v [v0 Pv]] : { : nat -> elt_type |
v 0 = exist _ (a0, r0) (And5 ar0V a0E a0V0 r0_gt0 a0a) /\
forall , elt_rel (v n) (v n.+1)}.
apply: dependent_choice => -[[ai ri] [/= ariV xE aiari ri_gt0 aia]].
pose rj : R := `|a - ai|.
have rj_gt0 : 0 < rj by rewrite /rj normr_gt0 subr_eq0 eq_sym.
apply/cid; move/cvgrPdist_lt : y_cvg_a => /(_ _ rj_gt0)[M/= _ May_rj].
pose Vj : set R := ball a rj.
have VjV : Vj `<=` V.
apply: subset_trans ariV => z /lt_trans; apply.
by move: aiari; rewrite inE.
have y_MVj : y_ M \in Vj.
rewrite inE; apply: (@lt_le_trans _ _ rj) => //.
by apply: May_rj => /=.
have y_ME : y_ M \in E by rewrite inE; apply/y_E/imageT.
exists (exist _ (y_ M, rj) (And5 VjV y_ME y_MVj rj_gt0 (y_neq_a M))) => /=.
split; first exact.
split; rewrite /a_ /r_/=.
by apply: le_ball; move: aiari; rewrite inE => /ltW.
split; first by move: y_MVj; rewrite inE.
by apply/eqP => aiyM; move: y_MVj; rewrite -aiyM inE /Vj /ball/= /rj ltxx.
apply/infiniteP/pcard_leP/injfunPex => /=; exists (r_ \o v).
move=> n _; rewrite /r_ /=.
by case: (v n) => -[ai ri] [/= ariV /set_mem Eai /set_mem/ariV aiari _ _].
have arv q p : (p < q)%N -> `|a - r_ (v q)| < `|a - r_ (v p)|.
elim: q p => [[]//|q ih p].
by rewrite ltnS leq_eqVlt => /predU1P[->|/ih]; last apply: lt_trans;
by case: (Pv q) => _ [] _ [].
move=> p q _ _ /=; apply: contraPP => /eqP.
by rewrite neq_lt => /orP[] /arv /[swap] ->; rewrite ltxx.
Qed.
Lemma
Source code
finite_set V -> limit_point A a -> limit_point (A `\` V) a.
Proof.
apply/limit_point_infinite_setP => U aU.
by rewrite setIDA; apply: infinite_setD => //; exact: aA.
Qed.
Lemma
Source code
limn (EFin \o f) = (limn f)%:E.
Proof.
Section ecvg_realFieldType_proper.
Context {} { : set_system I} { : ProperFilter F} { : realFieldType}.
Implicit Types (f g : I -> \bar R) (u v : I -> R) (x : \bar R) (r : R).
Local Open Scope ereal_scope.
Lemma
Source code
lim (f @ F) +? lim (g @ F) -> cvg (f @ F) -> cvg (g @ F) -> cvg (f \+ g @ F).
Lemma
Source code
cvg (f @ F) -> cvg (g @ F) -> lim (f @ F) +? lim (g @ F) ->
lim (f \+ g @ F) = lim (f @ F) + lim (g @ F).
Lemma
Source code
lim ((fun => y * f n) @ F) = y * lim (f @ F).
Lemma
Source code
lim ((fun => f n * y) @ F) = lim (f @ F) * y.
Lemma
Source code
lim (f @ F) *? lim (g @ F) -> cvg (f @ F) -> cvg (g @ F) -> cvg (f \* g @ F).
Lemma
Source code
cvg (f @ F) -> cvg (g @ F) -> lim (f @ F) *? lim (g @ F) ->
lim (f \* g @ F) = lim (f @ F) * lim (g @ F).
Lemma
Source code
Lemma
Source code
Lemma
Source code
Lemma
Source code
( : J -> \bar R) ( : pred J) :
(forall , P j -> \near , 0 <= f j F) ->
(forall , P j -> f j @ F --> l j) ->
\sum_( <- r | P j) f j i @[ --> F] --> \sum_( <- r | P j) l j.
Proof.
elim: r => [|x r IHr]/= f0 fl; rewrite bigsimp; under eq_fun do rewrite bigsimp.
exact: cvg_cst.
case: ifPn => [Px|Pnx]; last exact: IHr.
apply: cvgeD; [|exact: fl|exact: IHr].
by rewrite ge0_adde_def ?inE// ?sume_ge0// => [|j Pj];
rewrite (cvge_ge _ (fl _ _))//; apply: f0.
Qed.
Lemma
Source code
( : J -> \bar R) ( : pred J) :
(forall , P j -> \near , 0 <= f j F) ->
(forall , P j -> cvg (f j @ F)) ->
lim (\sum_( <- r | P j) f j i @[ --> F]) = \sum_( <- r | P j) (lim (f j @ F)).
Proof.
End ecvg_realFieldType_proper.
Section cvg_0_pinfty.
Context { : realFieldType} { : Type} { : set_system I} { : Filter a}.
Implicit Types f : I -> R.
Lemma
Source code
Proof.
move=> /cvgryPgt cvg_f_oo; apply/cvgr0Pnorm_lt => _/posnumP[e].
near=> i; rewrite gtr0_norm ?invr_gt0//=; last by near: i.
by rewrite -ltf_pV2 ?qualifE/= ?invr_gt0 ?invrK//=; near: i.
move=> /cvgr0Pnorm_lt uB; apply/cvgryPgty.
near=> M; near=> i; suff: `|(f i)^-1| < M^-1.
by rewrite gtr0_norm ?ltf_pV2 ?qualifE ?invr_gt0//=; near: i.
by near: i; apply: uB; rewrite ?invr_gt0.
Unshelve. all: by end_near. Qed.
Lemma
Source code
Proof.
Unshelve. all: by end_near. Qed.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Unshelve. all: by end_near. Qed.
End cvg_0_pinfty.
Section FilterRealType.
Context { : Type} { : set_system T} { : Filter a} { : realFieldType}.
Implicit Types f g h : T -> R.
Lemma
Source code
forall ( : R), f @ a --> l -> h @ a --> l -> g @ a --> l.
Proof.
near=> x; have /(_ _)/andP[//|fg gh] := near fgh x.
rewrite distrC ltr_distl (lt_le_trans _ fg) ?(le_lt_trans gh)//=.
by near: x; apply: (cvgr_lt l); rewrite // ltrDl.
by near: x; apply: (cvgr_gt l); rewrite // gtrDl oppr_lt0.
Unshelve. all: end_near. Qed.
Lemma
Source code
f @ a --> +oo -> g @ a --> +oo.
Proof.
Lemma
Source code
f @ a --> -oo -> g @ a --> -oo.
Proof.
End FilterRealType.
Section TopoProperFilterRealType.
Context { : topologicalType} { : set_system T} { : ProperFilter a}.
Context { : realFieldType}.
Implicit Types f g h : T -> R.
Lemma
Source code
(\near , f a <= g a) -> l <= l'.
Proof.
by apply: cvgr_to_ge; apply: cvgB.
Qed.
Lemma
Source code
(\near , f a <= g a) -> lim (f @ a) <= lim (g @ a).
Proof.
End TopoProperFilterRealType.
Section FilterERealType.
Context { : Type} { : set_system T} { : Filter a} { : realFieldType}.
Local Open Scope ereal_scope.
Implicit Types f g h : T -> \bar R.
Lemma
Source code
f @ a --> +oo -> g @ a --> +oo.
Proof.
Lemma
Source code
f @ a --> -oo -> g @ a --> -oo.
Proof.
Lemma
Source code
(\near , f a \is a fin_num) -> (\near , h a \is a fin_num) ->
(\near , g a \is a fin_num).
Proof.
rewrite !fin_numElt => /andP[oof _] /andP[_ hoo].
by rewrite (lt_le_trans oof) ?(le_lt_trans gh).
Qed.
Lemma
Source code
forall ( : \bar R), f @ a --> l -> h @ a --> l -> g @ a --> l.
Proof.
- by move=> + _; apply: gee_cvgy; apply: filterS fgh => ? /andP[].
- by move=> _; apply: lee_cvgNy; apply: filterS fgh => ? /andP[].
move=> /fine_cvgP[Ff fl] /fine_cvgP[Fh hl]; apply/fine_cvgP.
have Fg := squeeze_fin fgh Ff Fh; split=> //.
apply: squeeze_cvgr fl hl; near=> x => /=.
by have /(_ _)/andP[//|fg gh] := near fgh x; rewrite !fine_le//=; near: x.
Unshelve. all: end_near. Qed.
End FilterERealType.
Section TopoProperFilterERealType.
Context { : topologicalType} { : set_system T} { : ProperFilter a}.
Context { : realFieldType}.
Local Open Scope ereal_scope.
Implicit Types f g h : T -> \bar R.
Lemma
Source code
(\near , f a <= g a) -> l <= l'.
Proof.
move=> /= [l'||] [l||]//=; rewrite ?leNye ?leey//=; first 1 last.
- by move=> /(gee_cvgy fg) /cvg_lim<-// /cvg_lim<-.
- by move=> /cvg_lim <-// /(lee_cvgNy fg) /cvg_lim<-.
- by move=> /(gee_cvgy fg) /cvg_lim<-// /cvg_lim<-.
move=> /fine_cvgP[Ff fl] /fine_cvgP[Fg gl].
rewrite lee_fin -(cvg_lim _ fl)// -(cvg_lim _ gl)//.
by apply: ler_lim; [apply: cvgP fl|apply: cvgP gl|near do apply: fine_le].
Unshelve. all: end_near. Qed.
Lemma
Source code
(\near , f a <= g a) -> lim (f @ a) <= lim (g @ a).
Proof.
End TopoProperFilterERealType.
Section Rhull.
Variable : realType.
Definition
Source code
(if `[< has_lbound X >] then BSide `[< X (inf X) >] (inf X)
else BInfty _ true)
(if `[< has_ubound X >] then BSide (~~ `[< X (sup X) >]) (sup X)
else BInfty _ false).
Lemma
Source code
Proof.
by rewrite sup0 inf0.
Qed.
Lemma
Source code
Proof.
case: (asboolP (has_lbound _)) => ?; case: (asboolP (has_ubound _)) => ? //=.
+ by case: asboolP => ?; case: asboolP => ? //=;
rewrite !(lteifF,lteifT,ub_le_sup,ge_inf,sup_ub_strict,inf_lb_strict).
+ by case: asboolP => XinfX; rewrite !(lteifF, lteifT);
[rewrite ge_inf | rewrite inf_lb_strict].
+ by case: asboolP => XsupX; rewrite !(lteifF, lteifT);
[rewrite ub_le_sup | rewrite sup_ub_strict].
Qed.
Lemma
Source code
Proof.
rewrite predeqE => x /=; split; [exact: sub_Rhull | rewrite in_itv/=].
case: (asboolP (has_lbound _)) => ?; case: (asboolP (has_ubound _)) => ? //=.
- case: asboolP => XinfX; case: asboolP => XsupX;
rewrite !(lteifF, lteifT).
+ move=> /andP[]; rewrite le_eqVlt => /orP[/eqP <- //|infXx].
rewrite le_eqVlt => /orP[/eqP -> //|xsupX].
apply: (@interior_subset R).
by rewrite interval_bounded_interior // /mkset infXx.
+ move=> /andP[]; rewrite le_eqVlt => /orP[/eqP <- //|infXx supXx].
apply: (@interior_subset R).
by rewrite interval_bounded_interior // /mkset infXx.
+ move=> /andP[infXx]; rewrite le_eqVlt => /orP[/eqP -> //|xsupX].
apply: (@interior_subset R).
by rewrite interval_bounded_interior // /mkset infXx.
+ move=> ?; apply: (@interior_subset R).
by rewrite interval_bounded_interior // /mkset infXx.
- case: asboolP => XinfX; rewrite !(lteifF, lteifT, andbT).
+ rewrite le_eqVlt => /orP[/eqP<-//|infXx].
apply: (@interior_subset R).
by rewrite interval_right_unbounded_interior.
+ move=> infXx; apply: (@interior_subset R).
by rewrite interval_right_unbounded_interior.
- case: asboolP => XsupX /=.
+ rewrite le_eqVlt => /orP[/eqP->//|xsupX].
apply: (@interior_subset R).
by rewrite interval_left_unbounded_interior.
+ move=> xsupX; apply: (@interior_subset R).
by rewrite interval_left_unbounded_interior.
- by move=> _; rewrite (interval_unbounded_setT iX).
Qed.
Lemma
Source code
Proof.
- apply: contrapT => Ez.
pose Az := E `&` [set | x < z]; pose Bz := E `&` [set | z < x].
apply/connectedPn : cE; exists (fun => if b then Az else Bz); split.
+ move: xz zy Ez.
rewrite !le_eqVlt => /predU1P[<-//|xz] /predU1P[->//|zy] Ez.
by case; [exists x | exists y].
+ rewrite /Az /Bz -setIUr; apply/esym/setIidPl => u Eu.
by apply/orP; rewrite -neq_lt; apply/negP; apply: contraPnot Eu => /eqP <-.
+ split; [|rewrite setIC].
+ apply/disjoints_subset => /= u /closureI[_]; rewrite closure_gt => zu.
by rewrite /Az setCI; right; apply/negP; rewrite -leNgt.
+ apply/disjoints_subset => /= u /closureI[_]; rewrite closure_lt => zu.
by rewrite /Bz setCI; right; apply/negP; rewrite -leNgt.
- apply: contraPP => /connectedPn[A [A0 EU sepA]] intE.
have [/= x A0x] := A0 false; have [/= y A1y] := A0 true.
wlog xy : A A0 EU sepA x A0x y A1y / x < y.
move=> /= wlog_hypo; have [xy|yx|{wlog_hypo}yx] := ltgtP x y.
+ exact: (wlog_hypo _ _ _ _ _ A0x _ A1y).
+ apply: (wlog_hypo (A \o negb) _ _ _ y _ x) => //=;
by [rewrite setUC | rewrite separatedC].
+ move/separated_disjoint : sepA; rewrite predeqE => /(_ x)[] + _; apply.
by split => //; rewrite yx.
pose z := sup (A false `&` [set | x <= z <= y]).
have A1z : ~ (A true) z.
have cA0z : closure (A false) z.
suff : closure (A false `&` [set | x <= z <= y]) z by case/closureI.
apply: closure_sup; last by exists y => u [_] /andP[].
by exists x; split => //; rewrite /mkset lexx /= (ltW xy).
by move: sepA; rewrite /separated => -[] /disjoints_subset + _; apply.
have /andP[xz zy] : x <= z < y.
rewrite ub_le_sup//=; [|by exists y => u [_] /andP[]|].
+ rewrite lt_neqAle ge_sup ?andbT; last by move=> u [_] /andP[].
* by apply/negP; apply: contraPnot A1y => /eqP <-.
* by exists x; split => //; rewrite /mkset /= lexx /= (ltW xy).
+ by split=> //; rewrite /mkset lexx (ltW xy).
have [A0z|A0z] := pselect ((A false) z); last first.
have {}xzy : x <= z <= y by rewrite xz ltW.
have : ~ E z by rewrite EU => -[].
by apply; apply (intE x y) => //; rewrite EU; [left|right].
suff [z1 [/andP[zz1 z1y] Ez1]] : exists : R, z <= z1 <= y /\ ~ E z1.
apply Ez1; apply (intE x y) => //; rewrite ?EU; [by left|by right|].
by rewrite z1y (le_trans _ zz1).
have [r zcA1] : {:{posnum R}| ball z r%:num `<=` ~` closure (A true)}.
have ? : ~ closure (A true) z.
by move: sepA; rewrite /separated => -[] _ /disjoints_subset; apply.
have ? : open (~` closure (A true)) by exact/closed_openC/closed_closure.
exact/nbhsC_ball/open_nbhs_nbhs.
pose z1 : R := z + r%:num / 2; exists z1.
have z1y : z1 <= y.
rewrite leNgt; apply/negP => yz1.
suff : (~` closure (A true)) y by apply; exact: subset_closure.
apply zcA1; rewrite /ball /= ltr_distl (lt_le_trans zy) // ?lerDl //.
rewrite andbT ltrBlDl addrC (lt_trans yz1) // ltrD2l.
by rewrite ltr_pdivrMr // ltr_pMr // ltr1n.
rewrite z1y andbT lerDl; split => //.
have ncA1z1 : (~` closure (A true)) z1.
apply zcA1; rewrite /ball /= /z1 opprD addNKr normrN.
by rewrite ger0_norm // ltr_pdivrMr // ltr_pMr // ltr1n.
have nA0z1 : ~ (A false) z1.
move=> A0z1; have : z < z1 by rewrite /z1 ltrDl.
apply/negP; rewrite -leNgt.
apply: ub_le_sup; first by exists y => u [_] /andP[].
by split => //; rewrite /mkset /z1 (le_trans xz) /= ?lerDl // (ltW z1y).
by rewrite EU => -[//|]; apply: contra_not ncA1z1; exact: subset_closure.
Qed.
Lemma
Source code
Proof.
rewrite /Rhull /= !(in_itv, inE)/= ?bnd_simp => xy.
- rewrite asboolT// inf_itv// lexx/= xy asboolT// asboolT//=.
by rewrite asboolF//= sup_itv//= ltxx ?andbF.
- by rewrite asboolT// inf_itv// ?asboolT// ?sup_itv// ?lexx ?xy.
- by rewrite asboolT//= inf_itv// lexx asboolT// asboolF.
- rewrite asboolT// inf_itv//= ltxx asboolF// asboolT//.
by rewrite sup_itv// ltxx andbF asboolF.
rewrite asboolT // inf_itv // ltxx asboolF // asboolT //.
by rewrite sup_itv // xy lexx asboolT.
- by rewrite asboolT // inf_itv// ltxx asboolF // asboolF.
- by rewrite asboolF // asboolT // sup_itv// ltxx asboolF.
- by rewrite asboolF // asboolT // sup_itv// lexx asboolT.
- by rewrite asboolF // asboolF.
Qed.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
by apply: smallest_sub; [apply: interval_is_interval | apply: sub_Rhull].
move=> x /= + I [Iitv AI]; rewrite /Rhull.
have [|] := asboolP (has_lbound A) => lA; last first.
have /forallNP/(_ x)/existsNP[a] := lA.
move=> /existsNP[Aa /negP]; rewrite -ltNge => ax.
have [|]:= asboolP (has_ubound A) => uA; last first.
move=> ?; have /forallNP/(_ x)/existsNP[b] := uA.
move=> /existsNP[Ab /negP]; rewrite -ltNge => xb.
have /is_intervalPlt/(_ a b) := Iitv; apply; do ?by apply: AI.
by rewrite ax xb.
have [As|NAs]/= := asboolP (A _) => xA.
by apply: (Iitv a (sup A)); by [apply: AI | rewrite ltW ?ax].
have [||b Ab xb] := @sup_gt _ A x; do ?by [exists a | rewrite (itvP xA)].
have /is_intervalPlt/(_ a b) := Iitv; apply; do ?by apply: AI.
by rewrite ax xb.
have [|]:= asboolP (has_ubound A) => uA; last first.
have /forallNP/(_ x)/existsNP[b] := uA.
move=> /existsNP[Ab /negP]; rewrite -ltNge => xb.
have [Ai|NAi]/= := asboolP (A _) => xA.
by apply: (Iitv (inf A) b); by [apply: AI | rewrite (ltW xb)].
have [||a Aa ax] := @inf_lt _ A x; do ?by [exists b | rewrite (itvP xA)].
have /is_intervalPlt/(_ a b) := Iitv; apply; do ?by apply: AI.
by rewrite ax xb.
have [Ai|NAi]/= := asboolP (A _); have [As|NAs]/= := asboolP (A _).
- by apply: Iitv; apply: AI.
- move=> xA.
have [||b Ab xb] := @sup_gt _ A x; do ?by [exists (inf A) | rewrite (itvP xA)].
have /(_ (inf A) b) := Iitv; apply; do ?by apply: AI.
by rewrite (itvP xA) (ltW xb).
- move=> xA.
have [||a Aa ax] := @inf_lt _ A x; do ?by [exists (sup A) | rewrite (itvP xA)].
have /(_ a (sup A)) := Iitv; apply; do ?by apply: AI.
by rewrite (itvP xA) (ltW ax).
have [->|/set0P AN0] := eqVneq A set0.
by rewrite inf0 sup0 itv_ge//= ltBSide/= ltxx.
move=> xA.
have [||a Aa ax] := @inf_lt _ A x; do ?by [|rewrite (itvP xA)].
have [||b Ab xb] := @sup_gt _ A x; do ?by [|rewrite (itvP xA)].
have /is_intervalPlt/(_ a b) := Iitv; apply; do ?by apply: AI.
by rewrite ax xb.
Qed.
Lemma
Source code
Proof.
rewrite Rhull_smallest; apply: smallest_sub; first exact: interval_is_interval.
by rewrite Rhull_smallest; apply: sub_smallest.
Qed.
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
is_interval A -> is_interval B -> disjoint_itv (Rhull A) (Rhull B).
Proof.
End Rhull.
Context { : realType}.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
by move=> F FF /filter_ex [x abx]; move: ltba; rewrite (itvP abx).
rewrite compact_cover => I D f fop sabUf.
set B := [set | exists2 : {fset I}, {subset E <= D} &
`[a, x] `<=` \bigcup_( in [set` E]) f i /\ (\bigcup_( in [set` E]) f i) x].
set A := `[a, b] `&` B.
suff Aeab : A = `[a, b]%classic.
suff [_ [E ? []]] : A b by exists E.
by rewrite Aeab/= inE/=; exact/andP.
apply: segment_connected.
- have aba : a \in `[a, b] by rewrite in_itv /= lexx.
exists a; split=> //; have /sabUf [i /= Di fia] := aba.
exists [fset i]%fset; first by move=> ?; rewrite inE inE => /eqP->.
split; last by exists i => //=; rewrite inE.
move=> x /= aex; exists i; [by rewrite /= inE|suff /eqP-> : x == a by []].
by rewrite eq_le !(itvP aex).
- exists B => //; rewrite openE => x [E sD [saxUf [i Di fx]]].
have : open (f i) by have /sD := Di; rewrite inE => /fop.
rewrite openE => /(_ _ fx) [e egt0 xe_fi]; exists e => // y xe_y.
exists E => //; split; last by exists i => //; apply/xe_fi.
move=> z /= ayz; have [lezx|ltxz] := lerP z x.
by apply/saxUf; rewrite /= in_itv/= (itvP ayz) lezx.
exists i => //; apply/xe_fi; rewrite /ball_/= distrC ger0_norm.
have lezy : z <= y by rewrite (itvP ayz).
rewrite ltrBlDl; apply: le_lt_trans lezy _; rewrite -ltrBlDr.
by have := xe_y; rewrite /ball_ => /ltr_distlCBl.
by rewrite subr_ge0; apply/ltW.
exists A; last by rewrite predeqE => x; split=> [[] | []].
move=> x clAx; have abx : x \in `[a, b].
by apply: interval_closed; have /closureI [] := clAx.
split=> //; have /sabUf [i Di fx] := abx.
have /fop := Di; rewrite openE => /(_ _ fx) [_ /posnumP[e] xe_fi].
have /clAx [y [[aby [E sD [sayUf _]]] xe_y]] :=
nbhsx_ballx x e%:num ltac:(by []).
exists (i |` E)%fset; first by move=> j /fset1UP[->|/sD] //; rewrite inE.
split=> [z axz|]; last first.
exists i; first by rewrite /= !inE eq_refl.
by apply/xe_fi; rewrite /ball_/= subrr normr0.
have [lezy|ltyz] := lerP z y.
have /sayUf [j Dj fjz] : z \in `[a, y] by rewrite in_itv /= (itvP axz) lezy.
by exists j => //=; rewrite inE orbC Dj.
exists i; first by rewrite /= !inE eq_refl.
apply/xe_fi; rewrite /ball_/= ger0_norm; last by rewrite subr_ge0 (itvP axz).
rewrite ltrBlDl -ltrBlDr; apply: lt_trans ltyz.
by apply: ltr_distlCBl; rewrite distrC.
Qed.
End segment.
Lemma
Source code
a <= b -> {within `[a, b], continuous f} ->
minr (f a) (f b) <= v <= maxr (f a) (f b) ->
exists2 , c \in `[a, b] & f c = v.
Proof.
exists2 , c \in `[a, b] & f c = v; last first.
case: (leP (f a) (f b)) => [] _ fabv /=; first exact: ivt.
have [| |c cab /oppr_inj] := ivt (- f) (- v); last by exists c.
- by move=> x /=; apply/continuousN/fcont.
- by rewrite lerNr opprK lerNr opprK andbC.
move=> favfb; suff: is_interval (f @` `[a,b]).
apply; last exact: favfb.
- by exists a => //=; rewrite in_itv/= lexx.
- by exists b => //=; rewrite in_itv/= leab lexx.
apply/connected_intervalP/connected_continuous_connected => //.
exact: segment_connected.
Qed.
Section prod_NormedModule.
Context { : numFieldType} { : normedModType K}.
Lemma
Source code
Proof.
.
Source code
Source code
PseudoMetricNormedZmod_Tvs_isNormedModule.Build K (U * V)%type
prod_norm_scale.
End prod_NormedModule.
Section prod_NormedModule_lemmas.
Context { : Type} { : numDomainType} { : normedModType K}.
Lemma
Source code
{ : Filter F} { : Filter G} ( : U) ( : V) :
(F, G) --> (y, z) <->
forall
Source code
\forall \near F & \near G, `| (y, z) - (y', z') | < eps.
Proof.
Lemma
Source code
{ : Filter F} { : Filter G} ( : I -> U) ( : J -> V) ( : U) ( : V) :
(f @ F, g @ G) --> (y, z) <->
forall
Source code
\forall \near F & \near G, `| (y, z) - (f i, g j) | < eps.
Proof.
by rewrite !near_simpl// => ?; rewrite !near_simpl.
Qed.
Lemma
Source code
{ : Filter F} { : Filter G} ( : I -> U) ( : J -> V) ( : U) ( : V) :
(f @ F, g @ G) --> (y, z) ->
forall
Source code
\forall \near F & \near G, `| (y, z) - (f i, g j) | < eps.
Proof.
End prod_NormedModule_lemmas.
Arguments cvgr2dist_ltP {_ _ _ _ _ F G FF FG}.
Arguments cvgr2dist_lt {_ _ _ _ _ F G FF FG}.
Lemma
Source code
( : numFieldType) ( : normedModType R) ( : set T) ( : T -> V) :
[bounded f x | in A] -> [locally [bounded f x | in A]].
Proof.
Notation
Source code
(dominated_by (self_sub id) k (self_sub f)) : type_scope.
Lemma
Source code
( : V -> W) ( : set_system (V * V)) :
F `=>` G -> k.-lipschitz_on f G -> k.-lipschitz_on f F.
Proof.
Definition
Source code
( : V -> W) ( : set_system (V * V)) :=
\forall \near +oo, M.-lipschitz_on f F.
Lemma
Source code
( : V -> W) ( : set_system (V * V)) :
F `=>` G -> lipschitz_on f G -> lipschitz_on f F.
Proof.
Lemma
Source code
( : V -> W) ( : set_system (V * V)) { : ProperFilter F} :
k.-lipschitz_on f F -> lipschitz_on f F.
Proof.
Notation
Source code
(k.-lipschitz_on f (globally (A `*` A))) : type_scope.
Notation
Source code
Notation
Source code
(lipschitz_on (fun => E) (globally (A `*` A))) : type_scope.
Notation
Source code
Lemma
Source code
( : V -> W) : [lipschitz f x | in set0].
Lemma
Source code
( : V -> W) ( : V) : [lipschitz f x | in [set a]].
Proof.
exact: (@globally_properfilter _ _ (a, a)).
by move=> [x y] /= [] -> ->; rewrite !subrr !normr0 mulr0.
Qed.
Lemma
Source code
( : V -> W) ( : set V) :
k.-lipschitz_A f -> [locally k.-lipschitz_A f].
Proof.
Lemma
Source code
( : set V) ( : V -> W) :
[lipschitz f x | in A] -> [locally [lipschitz f x | in A]].
Proof.
Lemma
Source code
1.-lipschitz (@id V).
Proof.
Section LinearContinuousBounded.
Variables ( : numFieldType) ( : normedModType R).
Lemma
Source code
\forall \near +oo, forall , `|f x| <= r * `|x|.
Proof.
apply/ex_bound; exists r; apply/nbhs_norm0P; exists 1 => //= x /=.
by rewrite -(gtr_pMr _ r0) => /ltW; exact/le_trans/Bf.
rewrite /bounded_near => /pinfty_ex_gt0 [M M0 /nbhs_norm0P [_/posnumP[e] efM]].
near (0 : R)^'+ => d; near=> r => x.
have[->|x0] := eqVneq x 0; first by rewrite raddf0 !normr0 mulr0.
have nd0 : d / `|x| > 0 by rewrite divr_gt0 ?normr_gt0.
have: `|f (d / `|x| *: x)| <= M.
by apply: efM => /=; rewrite normrZ gtr0_norm// divfK ?normr_eq0//.
rewrite linearZ/= normrZ gtr0_norm// -ler_pdivlMl//; move/le_trans; apply.
rewrite invfM invrK mulrAC ler_wpM2r//; near: r; apply: nbhs_pinfty_ge.
by rewrite rpredM// ?rpredV ?gtr0_real.
Unshelve. all: by end_near. Qed.
Lemma
Source code
{for 0, continuous f} -> bounded_near f (nbhs x).
Proof.
near=> M; apply/nbhs0P.
near do rewrite /= linearD (le_trans (ler_normD _ _))// -lerBrDl.
by apply: cvgr0_norm_le; rewrite // subr_gt0.
Unshelve. all: by end_near. Qed.
Lemma
Source code
bounded_near f (nbhs (0 : V)) -> continuous f.
Proof.
apply/(@cvgrPdist_lt _ _ _ (nbhs x)) => e e_gt0; near=> z; rewrite -linearB.
rewrite (le_lt_trans (fr r _ _))// -?ltr_pdivlMl//.
by near: z; apply: cvgr_dist_lt => //; rewrite mulrC divr_gt0.
Unshelve. all: by end_near. Qed.
Lemma
Source code
{for 0, continuous f} -> continuous f.
Proof.
Lemma
Source code
bounded_near f (nbhs 0) <-> continuous f.
Proof.
by move=> /(_ 0); exact: continuous_linear_bounded.
Qed.
Lemma
Source code
(forall , exists , forall , `|x| <= r -> `|f x| <= M) <->
bounded_near f (nbhs (0 : V)).
Proof.
apply/ex_bound; exists M; apply/nbhs_normP => /=; exists 1 => //= x /=.
by rewrite sub0r normrN => x1; exact/Bf/ltW.
near +oo_R => r; exists (r * y) => x xe.
rewrite (@le_trans _ _ (r * `|x|)) //; first by move: {xe} x; near: r.
by rewrite ler_pM.
Unshelve. all: by end_near. Qed.
End LinearContinuousBounded.
Section contractions.
Context { : numDomainType} { : normedModType R} { : set X} { : set Y}.
Definition
Source code
q%:num < 1 /\ q%:num.-lipschitz_U f.
Definition
Source code
End contractions.
Lemma
Source code
{ : normedModType R} ( : set X) ( : {fun U >-> U}) ( : X) :
is_contraction f -> U x -> U y -> x = f x -> y = f y -> x = y.
Proof.
have [->|xyneq] := eqVneq x y; first by rewrite subrr normr0.
have xypos : 0 < `|x - y| by rewrite normr_gt0 subr_eq0.
suff : `|x - y| <= q%:num * `|x - y| by rewrite ler_pMl // leNgt q1.
by rewrite [in leLHS]fixx [in leLHS]fixy; exact: (ctrfq (_, _)).
Qed.
Section cvg_seq_bounded.
Context { : numFieldType}.
Local Notation
Source code
Lemma
Source code
cvgn a -> bounded_fun a.
Proof.
have Moo_real : Moo \is Num.real by rewrite ger0_real ?(le_trans _ (aM N _))/=.
rewrite /bounded_near /=; near=> M => n _.
have [nN|nN]/= := leqP N n; first by apply: (le_trans (aM _ _)).
move: n nN; suff /(_ (Ordinal _)) : forall : 'I_N, `|a n| <= M by [].
by near: M; apply: filter_forall => i; apply: nbhs_pinfty_ge.
Unshelve. all: by end_near. Qed.
End cvg_seq_bounded.
Lemma
Source code
compact A -> bounded_set A.
Proof.
have covA : A `<=` \bigcup_( : int) [set | `|p| < n%:~R].
by move=> p _; exists (truncn `|p|).+1; rewrite //= truncnS_gt.
have /Aco [] := covA.
move=> n _; rewrite openE => p; rewrite /= -subr_gt0 => ltpn.
apply/nbhs_ballP; exists (n%:~R - `|p|) => // q.
rewrite -ball_normE /= ltrBrDr distrC; apply: le_lt_trans.
by rewrite -{1}(subrK p q) ler_normD.
move=> D _ DcovA.
exists (\big[maxr/0]_( : D) (fsval i)%:~R).
rewrite bigmax_real//; split=> // x ltmaxx p /DcovA [n Dn /lt_trans /(_ _)/ltW].
apply; apply: le_lt_trans ltmaxx.
have : n \in enum_fset D by [].
by rewrite enum_fsetE => /mapP[/= i iD ->]; exact/le_bigmax.
Qed.
Lemma
Source code
A !=set0 -> compact A -> has_sup A.
Proof.
by exists (M + 1) => y /MA My; rewrite (le_trans _ (My _ _)) ?ler_norm ?ltrDl.
Qed.
Section Closed_Ball_normedModType.
Lemma
Source code
( : V) ( : R) : closed (closed_ball_ normr x e).
Proof.
apply: (preimage_closed _ (@closed_le _ _)) => y _.
apply: (continuous_comp _ (@norm_continuous _ _ _)).
exact: (continuousB (@cst_continuous _ _ _ _)).
Qed.
Lemma
Source code
( : R) : 0 < r -> closed_ball x r = closed_ball_ normr x r.
Proof.
rewrite /closed_ball closureE; apply; split; first exact: closed_closed_ball_.
by move=> z; rewrite -ball_normE; exact: ltW.
have [-> _|xy] := eqVneq x y; first exact: closed_ballxx.
rewrite /closed_ball closureE -ball_normE.
rewrite /closed_ball_ /= le_eqVlt.
move => /orP[/eqP xye B [Bc Be]|xye _ [_ /(_ _ xye)]//].
apply: Bc => B0 /nbhs_ballP[s s0] B0y.
have [es|se] := leP s e%:num; last first.
exists x; split; first by apply: Be; rewrite ball_normE; apply: ballxx.
by apply: B0y; rewrite -ball_normE /ball_ /= distrC xye.
exists (y + (s / 2) *: (`|x - y|^-1 *: (x - y))); split; [apply: Be|apply: B0y].
rewrite /= opprD addrA -[X in `|X - _|](scale1r (x - y)) scalerA -scalerBl.
rewrite -[X in X - _](@divff _ `|x - y|) ?normr_eq0 ?subr_eq0//.
rewrite -mulrBl -scalerA normrZ normfZV ?subr_eq0// mulr1.
rewrite gtr0_norm; first by rewrite ltrBlDl xye ltrDr mulr_gt0.
by rewrite subr_gt0 xye ltr_pdivrMr // mulr_natr mulr2n ltr_pwDl.
rewrite -ball_normE /ball_ /= opprD addNKr normrN normrZ normfZV ?subr_eq0//.
by rewrite mulr1 normf_div !gtr0_norm// ltr_pdivrMr// ltr_pMr //ltr1n.
Qed.
Lemma
Source code
closed_ball x r = `[x - r, x + r]%classic.
Proof.
rewrite closed_ballE// /closed_ball_ /= in_itv/= ler_distlC.
Qed.
Lemma
Source code
closed_ball x r = [set x - r] `|` ball x r `|` [set x + r].
Proof.
by rewrite setUAC setUC ball_itv.
by rewrite lerD2l ge0_cp// ltW.
Qed.
Lemma
Source code
compact (closed_ball x e).
Proof.
by rewrite closed_ballE//; under eq_set do rewrite in_itv -ler_distlC.
Qed.
Lemma
Source code
( : R) : 0 < r0 -> r0 < r1 -> closed_ball x r0 `<=` ball x r1.
Proof.
by move=> m xm; rewrite -ball_normE /ball_ /= (le_lt_trans _ r01).
Qed.
Lemma
Source code
( : M) : nbhs x B <-> exists : {posnum R}, closed_ball x r%:num `<=` B.
Proof.
apply/nbhs_ballP; exists e%:num => //=.
exact: (subset_trans (@subset_closure _ _) xeB).
exists (r%:num / 2)%:itv.
apply: (subset_trans (closed_ball_subset _ _) xrB) => //=.
by rewrite lter_pdivrMr // ltr_pMr // ltr1n.
Qed.
End Closed_Ball_normedModType.
Lemma
Source code
( : M) : open A -> A x -> \forall \near 0^'+, ball x e `<=` A.
Proof.
apply: filterS => e xeA y exy; apply: xeA.
by rewrite -ball_normE/= in exy; exact: ltW.
Qed.
Lemma
Source code
exists , let : set R := ball (@ratr R c) (ratr r) in x \in B /\ B `<=` S.
Proof.
have [y yxr] : exists , ball x (r / 4) (ratr y).
suff : ball x (r / 4) `&` range ratr !=set0.
by move=> [/= _ []] /[swap] -[y _ <-]; exists y.
apply: dense_rat; last exact: ball_open.
by exists x; apply: ballxx; rewrite divr_gt0.
have [q /andP[rq qr]] : exists , r / 4 < ratr q < r / 2.
have : ball (r / 3) (r / 12) `&` range ratr !=set0.
apply: dense_rat; last exact: ball_open.
by exists (r / 3); apply: ballxx; rewrite divr_gt0.
move=> [/= _ []] /[swap] -[z _ <-].
rewrite ball_itv/= in_itv/= => /andP[rz zr]; exists z; apply/andP; split.
- rewrite (le_lt_trans _ rz)// -mulrBr ler_pM2l// -(@ler_pM2l _ 12)//.
rewrite mulrBr divff// (@natrM _ 3 4) -mulrA divff// mulr1.
by rewrite mulrAC divff// mul1r -lerBlDr opprK natr1.
- rewrite (lt_le_trans zr)// -mulrDr ler_pM2l// -(@ler_pM2l _ 12)//.
rewrite mulrDr divff// (@natrM _ 3 4) mulrAC divff// mul1r.
by rewrite natr1 (@natrM _ 2 2) -!mulrA divff// mulr1 -natrM ler_nat.
have [yqxr xrS] : ball (@ratr R y) (ratr q) `<=` ball x r /\ ball x r `<=` S.
split => [z yqz|z /rat_in_itvoo[p]].
- rewrite /ball/= -(subrK (ratr y) x) -(addrA _ (ratr y)).
rewrite (le_lt_trans (ler_normD _ _))// (splitr r) ltrD//.
by apply: le_ball yxr; rewrite ler_pM2l// lef_pV2 ?posrE// ler_nat.
by rewrite (lt_trans yqz).
- rewrite in_itv/= => /andP[xzp pr]; apply: (rS (ratr p)) => //=.
+ by rewrite sub0r normrN gtr0_norm// (le_lt_trans _ xzp).
+ exact: le_lt_trans xzp.
exists y, q; split; last exact: subset_trans xrS.
exact/mem_set/ball_sym/(le_ball _ yxr)/ltW.
Qed.
Section countable_isolated.
Context { : realType}.
Variable : set R.
Fact
Source code
let : set R := ball (@ratr R cr.1) (ratr cr.2) in
x \in B /\ (forall : R, isolated S y -> y \in B -> x = y).
Proof.
have [e Sxe] : exists : {posnum R},
forall : R, isolated S y -> y \in (ball x e%:num : set R) -> x = y.
case: Sx => [xS/= [V xV /seteqP[VSx _]]].
have [e /= e0 exV] : \forall \near 0^'+, ball x e `<=` V°.
apply: open_subball; first exact: open_interior.
by move/nbhs_interior : xV; exact: nbhs_singleton.
have e20 : 0 < e / 2 by rewrite divr_gt0.
exists (PosNum e20) => y [Sy [/= U yU USy /set_mem xey]].
apply/eqP/negPn/negP => xy.
suff : (V `&` S) y by move/VSx/esym; exact/eqP.
split => //; last exact/set_mem.
apply: interior_subset; apply: exV xey => //.
by rewrite /ball_/= sub0r normrN gtr0_norm// gtr_pMr// invf_lt1// ltr1n.
have [c [r [xcr crxe]]] : exists ,
let : set R := ball (@ratr R c) (ratr r) in x \in B /\ B `<=` ball x e%:num.
by apply: open_subball_rat; [exact: ball_open|exact/mem_set/ballxx].
by exists (c, r); split=> //= y /Sxe /[!inE] /[swap] /crxe /[swap] /[apply].
Qed.
Lemma
Source code
Proof.
pose g := if pselect (isolated S r) is left H then
sval (cid (isolated_rat_ball H)) else 0.
have /card_bijP[h /bij_inj injh] := card_rat2.
exists (set_val \o h \o to_setT \o g) => x y /set_mem xS /set_mem yS /=.
rewrite /= /g; case: pselect => // xS'; case: pselect => // yS'.
case: cid => //= [ar [xar Nxar]]{xS'}; case: cid => //= [bd [ybd Nybd]]{yS'} ab.
have /injh/(congr1 (fun => \val x)) : h (to_setT ar) = h (to_setT bd).
move: (h (to_setT ar)) (h (to_setT bd)) ab => [n nT] [m mT].
by rewrite !set_valE/= => ->; congr exist.
by rewrite -inv_to_setT !funK ?inE// => {}ab; apply: Nxar => //; rewrite ab.
Qed.
End countable_isolated.
Lemma
Source code
( : set M) : closed K -> ~ K z ->
\forall \near 0^'+, closed_ball z d `&` K = set0.
Proof.
move=> /(_ (e / 2)) /= ; rewrite sub0r normrN gtr0_norm ?divr_gt0//.
rewrite ltr_pdivrMr// ltr_pMr// ltr1n => /(_ erefl isT).
move/subsets_disjoint; rewrite setCK => ze2K0.
exists (e / 2); first by rewrite /= divr_gt0.
move=> x /= + x0; rewrite sub0r normrN gtr0_norm// => xe.
by move: ze2K0; apply: subsetI_eq0 => //=; exact: closed_ball_subset.
Qed.
Lemma
Source code
( : R) : 0 < r -> (closed_ball x r)° = ball x r.
Proof.
by rewrite -open_subsetE; [exact: subset_closure | exact: ball_open].
move=> /= t; rewrite closed_ballE // /interior /= -nbhs_ballE => [[]] s s0.
have [-> _|nxt] := eqVneq t x; first exact: ballxx.
near ((0 : R^o)^') => e; rewrite -ball_normE /closed_ball_ => tsxr.
pose z := t + `|e| *: (t - x); have /tsxr /= : `|t - z| < s.
rewrite opprD addNKr normrN normrZ normr_id.
rewrite -ltr_pdivlMr ?(normr_gt0,subr_eq0) //.
by near: e; apply/dnbhs0_lt; rewrite divr_gt0 // normr_gt0 subr_eq0.
rewrite /z opprD addrA -scalerN -{1}(scale1r (x - t)) opprB -scalerDl normrZ.
apply lt_le_trans; rewrite ltr_pMl; last by rewrite normr_gt0 subr_eq0 eq_sym.
by rewrite ger0_norm // ltrDl normr_gt0; near: e; exists 1 => /=.
Unshelve. all: by end_near. Qed.
Lemma
Source code
( : R) : 0 < r -> open_nbhs x (closed_ball x r)°.
Proof.
by rewrite interior_closed_ballE //; exact: ballxx.
Qed.
Lemma
Source code
Proof.
by apply/nbhs_closedballP; exists 1%:pos.
by split; [apply: closed_ballR_compact | apply: closed_ball_closed].
Qed.
Section bigcup_ointsub_lemmas.
Context { : realType} { : set R}.
Lemma
Source code
ratr q \in bigcup_ointsub U q.
Proof.
have [e /= e0 eU] := open_subball oU Uq.
pose B := ball (@ratr R q) (e / 2).
have Bq : B (ratr q) by apply: ballxx; rewrite divr_gt0.
apply/mem_set; exists B => //; split => //; split.
- exact: ball_open.
- by rewrite /B ball_itv; exact: interval_is_interval.
- apply: eU => //; last by rewrite divr_gt0.
rewrite ball_normE/= /ball/= sub0r normrN gtr0_norm ?divr_gt0//.
by rewrite gtr_pMr// invf_lt1// ltr1n.
Qed.
Lemma
Source code
bigcup_ointsub U p `&` bigcup_ointsub U q !=set0 ->
bigcup_ointsub U p = bigcup_ointsub U q.
Proof.
rewrite eqEsubset; split.
- apply: bigcup_ointsub_sup.
+ exact: open_bigcup_ointsub.
+ exact: is_interval_bigcup_ointsub.
+ exact: bigcup_ointsub_sub.
+ exists (A `|` B) => /= ; last by right.
split; last by left.
split; [exact: openU| |by rewrite subUset].
apply/connected_intervalP/connectedU; [|exact/connected_intervalP..].
by exists x.
- apply: bigcup_ointsub_sup.
+ exact: open_bigcup_ointsub.
+ exact: is_interval_bigcup_ointsub.
+ exact: bigcup_ointsub_sub.
+ exists (A `|` B) => /= ; last by left.
split; last by right.
split; [exact: openU| |by rewrite subUset].
apply/connected_intervalP/connectedU; [|exact/connected_intervalP..].
by exists x.
Qed.
End bigcup_ointsub_lemmas.
Source code
Section opensetdisjointitvs.
Context { : realType}.
Variable : set R.
Hypothesis : open U.
Variables ( : rat -> nat) ( : nat -> rat).
Hypotheses (
Source code
Source code
Definition
Source code
(f p < f q)%N -> bigcup_ointsub U q `&` bigcup_ointsub U p = set0].
Let
Source code
U = \bigcup_( in lt_disjoint) bigcup_ointsub U q.
Proof.
by move=> r [q/= ?] Uqr; exists q => //=; exact: bigcup_ointsub_mem Uqr.
move=> r [q/= Uq] Uqr.
suff [p_idx [pUq Up]] : exists
Source code
let := g p_idx in ratr p \in bigcup_ointsub U q /\
forall , ratr q' \in bigcup_ointsub U q -> (f p <= f q')%N.
have q_p : bigcup_ointsub U q `&` bigcup_ointsub U (g p_idx) !=set0.
exists (ratr (g p_idx)); split; first exact/set_mem.
apply/set_mem; rewrite bigcup_ointsubxx//.
by move/set_mem : pUq; exact: bigcup_ointsub_sub.
exists (g p_idx).
- rewrite /= => q' Uq' q'p.
apply/not_notP => /eqP/set0P[s [ps ts]].
suff : ratr q' \in bigcup_ointsub U q by move/Up; rewrite leqNgt q'p.
rewrite (@nondisjoint_bigcup_ointsub _ _ _ (g p_idx))//.
rewrite (@nondisjoint_bigcup_ointsub _ _ _ q') ?bigcup_ointsubxx//.
by exists s.
- by rewrite (@nondisjoint_bigcup_ointsub _ _ _ q)// setIC.
pose P := [pred : 'I_(f q).+1 | ratr (g i) \in bigcup_ointsub U q].
have Pord_max : P ord_max.
by rewrite /P/= cfg// bigcup_ointsubxx//; exact/set_mem.
pose min : 'I_(f q).+1 := [arg min_( < ord_max | P i) idfun i].
exists min => /=; split.
- by rewrite /min; case: arg_minnP.
- move=> q' pUp; rewrite /min; case: arg_minnP => //= i giq ismall.
rewrite cgf.
have [fq'fq|fqfq'] := ltnP (f q') (f q).+1.
have := ismall (Ordinal fq'fq).
by rewrite cfg => /(_ pUp).
by rewrite (leq_trans _ (ltnW fqfq'))// (ismall ord_max).
Qed.
Let
Source code
if pselect (lt_disjoint q) then bigcup_ointsub U q else set0.
Let
Source code
Proof.
wlog : i j Ui Uj / i < j.
move=> wlg; rewrite neq_lt => /orP[|] ij.
by rewrite wlg// lt_eqF.
by rewrite setIC wlg// lt_eqF.
move=> ij _.
rewrite /lt_disjoint_rat_seq0/=.
case: pselect => disj_i; case: pselect => disj_j; rewrite ?(setI0,set0I)//.
have [?|fjfi] := ltnP (f i) (f j); first by rewrite setIC disj_j.
rewrite disj_i// ltn_neqAle fjfi andbT.
have : i != j by rewrite lt_eqF.
apply: contra => /eqP.
by move/can_inj : cfg => /[apply] => /esym/eqP.
Qed.
Let
Source code
trivIset (U \o ratr \o g) (lt_disjoint_rat_seq0 \o g).
Proof.
Let
Source code
ratr q \notin U -> lt_disjoint_rat_seq0 q = set0.
Proof.
rewrite /lt_disjoint_rat_seq0; case: pselect => //= disj_q.
rewrite /bigcup_ointsub bigcup0// => B/=[[]oB iB].
by move=> /[apply] /mem_set; rewrite (negPf qU).
Qed.
Let
Source code
open (lt_disjoint_rat_seq0 q) /\ is_interval (lt_disjoint_rat_seq0 q).
Proof.
- rewrite /lt_disjoint_rat_seq0; case: pselect => //= _.
+ exact: open_bigcup_ointsub.
+ exact: open0.
- rewrite /lt_disjoint_rat_seq0; case: pselect => //= _.
+ exact: is_interval_bigcup_ointsub.
+ by [].
Qed.
Let
Source code
Proof.
rewrite /lt_disjoint_rat_seq0; case: pselect => //= Icondq.
- by rewrite mem_set.
- by rewrite memNset.
Qed.
Let
Source code
U = \bigcup_( in [set | U (ratr n)]) lt_disjoint_rat_seq0 q.
Proof.
apply: eq_bigcupr => q _; case: ifPn => //.
rewrite notin_setE/= => Uq.
by rewrite lt_disjoint_rat_seq0_set0// memNset.
Qed.
Definition
pseudoMetric_normed : Type -> Type pseudoMetric_normed is not universe polymorphic Arguments pseudoMetric_normed M%type_scope pseudoMetric_normed is transparent Expands to: Constant mathcomp.analysis.normedtype_theory.normed_module.pseudoMetric_normed Declared in library mathcomp.analysis.normedtype_theory.normed_module, line 250, characters 11-30
Source code
if ratr q \in U then lt_disjoint_rat_seq0 q else set0.
Lemma
Source code
open (lt_disjoint_rat_seq q) /\ is_interval (lt_disjoint_rat_seq q).
Proof.
Lemma
Source code
Proof.
apply/trivIsetP => i j/= _ _ ij.
rewrite /lt_disjoint_rat_seq; case: ifPn => //; rewrite ?(setI0,set0I)//.
rewrite /lt_disjoint_rat_seq0; case: pselect => /=; rewrite ?(setI0,set0I)//.
case: ifPn => //; rewrite ?(setI0,set0I)//.
case: pselect => /=; rewrite ?(setI0,set0I)//.
move=> disj_gj gjU K3 K4.
have := H (g i) (g j) Logic.I Logic.I.
rewrite !ifT//.
rewrite /lt_disjoint_rat_seq0/=; case: pselect => //=; case: pselect => //= _ _.
apply.
by apply: contra ij => /eqP/(can_inj cgf)/eqP.
Qed.
Lemma
Source code
Proof.
rewrite [in LHS]bigcup_mkcond [in RHS]bigcup_mkcond.
apply: eq_bigcupr => q _.
by rewrite [in RHS]mem_set.
Qed.
End rat_index.
Source code
[/\ forall , open (I q) /\ is_interval (I q),
trivIset setT I & U = \bigcup_ I q].
Proof.
rewrite setTT_bijective => -[g cfg cgf].
exists (lt_disjoint_rat_seq f \o g); split.
- by move=> n; exact: lt_disjoint_rat_seq_open_itv.
- exact: lt_disjoint_rat_seq_trivIset.
- rewrite (bigcup_lt_disjoint_rat_seq cfg cgf) [LHS](reindex_bigcup g setT)//.
by move=> q/= _; exists (f q).
Qed.
End opensetdisjointitvs.
End OpenSetDisjointItvs.
Section open_set_disjoint_real_intervals.
Context { : realType}.
Variable : set R.
Hypothesis : open U.
Definition
pseudoMetric_from_normedZmodType.ball : forall [K : numFieldType] [M : normedZmodType K], pseudoMetric_normed M -> K -> set (pseudoMetric_normed M) pseudoMetric_from_normedZmodType.ball is not universe polymorphic Arguments pseudoMetric_from_normedZmodType.ball [K M] x r%ring_scope _ pseudoMetric_from_normedZmodType.ball is transparent Expands to: Constant mathcomp.analysis.normedtype_theory.normed_module.pseudoMetric_from_normedZmodType.ball Declared in library mathcomp.analysis.normedtype_theory.normed_module, line 263, characters 11-15
Source code
sval (cid (OpenSetDisjointItvs.open_disjoint_itv oU)).
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
End open_set_disjoint_real_intervals.