@@ -2130,43 +2130,29 @@ Section pointwise_derivable.
21302130Context {R : realFieldType} {V W : normedModType R} {m n : nat}.
21312131Implicit Types M : V -> 'M[R]_(m, n).
21322132
2133- Definition derivable_mx M t v :=
2134- forall i j, derivable (fun x => M x i j) t v.
2135-
2136- (* NB: from robot-rocq *)
2137- Lemma derivable_mxP M t v : derivable_mx M t v <-> derivable M t v.
2133+ Lemma derivable_mxP M t v :
2134+ derivable M t v <-> forall i j, derivable (fun x => M x i j) t v.
21382135Proof .
2139- split; rewrite /derivable_mx /derivable.
2140- - move=> H.
2141- apply/cvg_ex => /=.
2142- pose l := \matrix_(i < m, j < n) sval (cid ((cvg_ex _).1 (H i j))).
2143- exists l.
2136+ split=> [|Mvt].
2137+ - move=> /cvg_ex[/= l Mvtl] i j; apply/cvg_ex; exists (l i j).
21442138 apply/cvgrPdist_le => /= e e0.
2139+ move/cvgrPdist_le : Mvtl => /(_ _ e0)[/= r r0] rMvte.
21452140 near=> x.
2146- rewrite /Num.Def.normr/= mx_normrE.
2147- apply: (bigmax_le _ (ltW e0)) => /= i _.
2148- rewrite !mxE/=.
2149- move: i.
2150- near: x.
2151- apply: filter_forall => /= i.
2152- exact: ((@cvgrPdist_le _ _ _ _ (dnbhs_filter 0) _ _).1
2153- (svalP (cid ((cvg_ex _).1 (H i.1 i.2)))) _ e0).
2154- - move=> /cvg_ex[/= l Hl] i j.
2155- apply/cvg_ex; exists (l i j).
2141+ apply: le_trans (rMvte x _ _).
2142+ + rewrite [leRHS]/Num.Def.normr/= mx_normrE.
2143+ apply: le_trans; last exact: le_bigmax.
2144+ by rewrite !mxE.
2145+ + rewrite /ball_/= sub0r normrN.
2146+ by near: x; exact: dnbhs0_lt.
2147+ + near: x; exact: nbhs_dnbhs_neq.
2148+ - apply/cvg_ex => /=.
2149+ exists (\matrix_(i < m, j < n) sval (cid ((cvg_ex _).1 (Mvt i j)))).
21562150 apply/cvgrPdist_le => /= e e0.
2157- move/cvgrPdist_le : Hl => /(_ _ e0)[/= r r0] H.
21582151 near=> x.
2159- apply: le_trans; last first.
2160- apply: (H x).
2161- rewrite /ball_/=.
2162- rewrite sub0r normrN.
2163- near: x.
2164- exact: dnbhs0_lt.
2165- near: x.
2166- exact: nbhs_dnbhs_neq.
2167- rewrite [leRHS]/Num.Def.normr/= mx_normrE.
2168- apply: le_trans; last exact: le_bigmax.
2169- by rewrite /= !mxE.
2152+ rewrite /Num.Def.normr/= mx_normrE (bigmax_le _ (ltW e0))//= => i _.
2153+ rewrite !mxE/=.
2154+ move: i; near: x; apply: filter_forall => /= i.
2155+ exact: ((cvgrPdist_le _ _).1 (svalP (cid ((cvg_ex _).1 (Mvt i.1 i.2))))).
21702156Unshelve. all: by end_near. Qed .
21712157
21722158End pointwise_derivable.
@@ -2175,42 +2161,36 @@ Section pointwise_derive.
21752161Local Open Scope classical_set_scope.
21762162Context {R : realFieldType} {V W : normedModType R} .
21772163
2178- (* NB: from robot-rocq *)
21792164Lemma derive_mx {m n : nat} (M : V -> 'M[R]_(m, n)) t v :
21802165 derivable M t v ->
21812166 'D_v M t = \matrix_(i < m, j < n) 'D_v (fun t => M t i j) t.
21822167Proof .
2183- move=> /cvg_ex[/= l Hl]; apply/cvg_lim => //=.
2184- apply/cvgrPdist_le => /= e e0.
2185- move/cvgrPdist_le : (Hl) => /(_ (e / 2)).
2186- rewrite divr_gt0// => /(_ isT)[d /= d0 dle].
2168+ move=> /cvg_ex[/= l Mvtl]; apply/cvg_lim => //=; apply/cvgrPdist_le => /= e e0.
2169+ move/cvgrPdist_le : (Mvtl) => /(_ (e / 2)) /[!divr_gt0]// /(_ isT)[d /= d0 dle].
21872170near=> x.
2188- rewrite [in leLHS]/Num.Def.normr/= mx_normrE.
2189- apply/(bigmax_le _ (ltW e0)) => -[/= i j] _.
2190- rewrite [in leLHS]mxE/= [X in _ + X]mxE -[X in X - _](subrK (l i j)).
2191- rewrite -(addrA (_ - _)) (le_trans (ler_normD _ _))// (splitr e) lerD//.
2171+ rewrite [leLHS]/Num.Def.normr/= mx_normrE (bigmax_le _ (ltW e0))//= => -[i j] _.
2172+ rewrite [in leLHS]mxE/= [X in _ + X]mxE -(subrKA (l i j)).
2173+ rewrite (le_trans (ler_normD _ _))// (splitr e) lerD//.
21922174- rewrite mxE.
21932175 suff : (h^-1 *: (M (h *: v + t) i j - M t i j)) @[h --> 0^'] --> l i j.
21942176 move/cvg_lim => /=; rewrite /derive /= => ->//.
21952177 by rewrite subrr normr0 divr_ge0// ltW.
21962178 apply/cvgrPdist_le => /= r r0.
2197- move/cvgrPdist_le : Hl => /(_ r r0)[/= s s0] sr.
2179+ move/cvgrPdist_le : Mvtl => /(_ r r0)[/= s s0] sr.
21982180 near=> y.
2199- have : `|l - y^-1 *: (M (y *: v + t) - M t)| <= r.
2200- rewrite sr//=; last by near: y; exact: nbhs_dnbhs_neq.
2201- by rewrite sub0r normrN; near: y; exact: dnbhs0_lt.
2202- apply: le_trans.
2203- rewrite [in leRHS]/Num.Def.normr/= mx_normrE.
2204- by under eq_bigr do rewrite !mxE; exact: (le_bigmax _ _ (i, j)).
2181+ apply: (@le_trans _ _ (`|l - y^-1 *: (M (y *: v + t) - M t)|)).
2182+ rewrite [in leRHS]/Num.Def.normr/= mx_normrE.
2183+ by under eq_bigr do rewrite !mxE; exact: (le_bigmax _ _ (i, j)).
2184+ rewrite sr//=; last by near: y; exact: nbhs_dnbhs_neq.
2185+ by rewrite sub0r normrN; near: y; exact: dnbhs0_lt.
22052186- rewrite mxE.
2206- have : `|l - x^-1 *: (M (x *: v + t) - M t)| <= e / 2.
2207- apply: dle => //=; last by near: x; exact: nbhs_dnbhs_neq.
2208- by rewrite sub0r normrN; near: x; exact: dnbhs0_lt.
2209- apply: le_trans.
2210- rewrite [in leRHS]/Num.Def.normr/= mx_normrE/=.
2211- under eq_bigr do rewrite !mxE.
2212- apply: le_trans; last exact: le_bigmax.
2213- by rewrite !mxE.
2187+ apply: (@le_trans _ _ `|l - x^-1 *: (M (x *: v + t) - M t)|).
2188+ rewrite [in leRHS]/Num.Def.normr/= mx_normrE/=.
2189+ under eq_bigr do rewrite !mxE.
2190+ apply: le_trans; last exact: le_bigmax.
2191+ by rewrite !mxE.
2192+ apply: dle => //=; last by near: x; exact: nbhs_dnbhs_neq.
2193+ by rewrite sub0r normrN; near: x; exact: dnbhs0_lt.
22142194Unshelve. all: by end_near. Qed .
22152195
22162196End pointwise_derive.
0 commit comments