@@ -2125,3 +2125,92 @@ exact/derivable1_diffP/derivable_horner.
21252125Qed .
21262126
21272127End derive_horner.
2128+
2129+ Section pointwise_derivable.
2130+ Context {R : realFieldType} {V W : normedModType R} {m n : nat}.
2131+ Implicit Types M : V -> 'M[R]_(m, n).
2132+
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.
2138+ Proof .
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.
2144+ apply/cvgrPdist_le => /= e e0.
2145+ 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).
2156+ apply/cvgrPdist_le => /= e e0.
2157+ move/cvgrPdist_le : Hl => /(_ _ e0)[/= r r0] H.
2158+ 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.
2170+ Unshelve. all: by end_near. Qed .
2171+
2172+ End pointwise_derivable.
2173+
2174+ Section pointwise_derive.
2175+ Local Open Scope classical_set_scope.
2176+ Context {R : realFieldType} {V W : normedModType R} .
2177+
2178+ (* NB: from robot-rocq *)
2179+ Lemma derive_mx {m n : nat} (M : V -> 'M[R]_(m, n)) t v :
2180+ derivable M t v ->
2181+ 'D_v M t = \matrix_(i < m, j < n) 'D_v (fun t => M t i j) t.
2182+ Proof .
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].
2187+ near=> 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//.
2192+ - rewrite mxE.
2193+ suff : (h^-1 *: (M (h *: v + t) i j - M t i j)) @[h --> 0^'] --> l i j.
2194+ move/cvg_lim => /=; rewrite /derive /= => ->//.
2195+ by rewrite subrr normr0 divr_ge0// ltW.
2196+ apply/cvgrPdist_le => /= r r0.
2197+ move/cvgrPdist_le : Hl => /(_ r r0)[/= s s0] sr.
2198+ 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)).
2205+ - 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.
2214+ Unshelve. all: by end_near. Qed .
2215+
2216+ End pointwise_derive.
0 commit comments