Skip to content

Commit b3bb90c

Browse files
committed
derive_mx
1 parent 4417f3f commit b3bb90c

1 file changed

Lines changed: 89 additions & 0 deletions

File tree

theories/derive.v

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2153,3 +2153,92 @@ exact/derivable1_diffP/derivable_horner.
21532153
Qed.
21542154

21552155
End derive_horner.
2156+
2157+
Section pointwise_derivable.
2158+
Context {R : realFieldType} {V W : normedModType R} {m n : nat}.
2159+
Implicit Types M : V -> 'M[R]_(m, n).
2160+
2161+
Definition derivable_mx M t v :=
2162+
forall i j, derivable (fun x => M x i j) t v.
2163+
2164+
(* NB: from robot-rocq *)
2165+
Lemma derivable_mxP M t v : derivable_mx M t v <-> derivable M t v.
2166+
Proof.
2167+
split; rewrite /derivable_mx /derivable.
2168+
- move=> H.
2169+
apply/cvg_ex => /=.
2170+
pose l := \matrix_(i < m, j < n) sval (cid ((cvg_ex _).1 (H i j))).
2171+
exists l.
2172+
apply/cvgrPdist_le => /= e e0.
2173+
near=> x.
2174+
rewrite /Num.Def.normr/= mx_normrE.
2175+
apply: (bigmax_le _ (ltW e0)) => /= i _.
2176+
rewrite !mxE/=.
2177+
move: i.
2178+
near: x.
2179+
apply: filter_forall => /= i.
2180+
exact: ((@cvgrPdist_le _ _ _ _ (dnbhs_filter 0) _ _).1
2181+
(svalP (cid ((cvg_ex _).1 (H i.1 i.2)))) _ e0).
2182+
- move=> /cvg_ex[/= l Hl] i j.
2183+
apply/cvg_ex; exists (l i j).
2184+
apply/cvgrPdist_le => /= e e0.
2185+
move/cvgrPdist_le : Hl => /(_ _ e0)[/= r r0] H.
2186+
near=> x.
2187+
apply: le_trans; last first.
2188+
apply: (H x).
2189+
rewrite /ball_/=.
2190+
rewrite sub0r normrN.
2191+
near: x.
2192+
exact: dnbhs0_lt.
2193+
near: x.
2194+
exact: nbhs_dnbhs_neq.
2195+
rewrite [leRHS]/Num.Def.normr/= mx_normrE.
2196+
apply: le_trans; last exact: le_bigmax.
2197+
by rewrite /= !mxE.
2198+
Unshelve. all: by end_near. Qed.
2199+
2200+
End pointwise_derivable.
2201+
2202+
Section pointwise_derive.
2203+
Local Open Scope classical_set_scope.
2204+
Context {R : realFieldType} {V W : normedModType R} .
2205+
2206+
(* NB: from robot-rocq *)
2207+
Lemma derive_mx {m n : nat} (M : V -> 'M[R]_(m, n)) t v :
2208+
derivable M t v ->
2209+
'D_v M t = \matrix_(i < m, j < n) 'D_v (fun t => M t i j) t.
2210+
Proof.
2211+
move=> /cvg_ex[/= l Hl]; apply/cvg_lim => //=.
2212+
apply/cvgrPdist_le => /= e e0.
2213+
move/cvgrPdist_le : (Hl) => /(_ (e / 2)).
2214+
rewrite divr_gt0// => /(_ isT)[d /= d0 dle].
2215+
near=> x.
2216+
rewrite [in leLHS]/Num.Def.normr/= mx_normrE.
2217+
apply/(bigmax_le _ (ltW e0)) => -[/= i j] _.
2218+
rewrite [in leLHS]mxE/= [X in _ + X]mxE -[X in X - _](subrK (l i j)).
2219+
rewrite -(addrA (_ - _)) (le_trans (ler_normD _ _))// (splitr e) lerD//.
2220+
- rewrite mxE.
2221+
suff : (h^-1 *: (M (h *: v + t) i j - M t i j)) @[h --> 0^'] --> l i j.
2222+
move/cvg_lim => /=; rewrite /derive /= => ->//.
2223+
by rewrite subrr normr0 divr_ge0// ltW.
2224+
apply/cvgrPdist_le => /= r r0.
2225+
move/cvgrPdist_le : Hl => /(_ r r0)[/= s s0] sr.
2226+
near=> y.
2227+
have : `|l - y^-1 *: (M (y *: v + t) - M t)| <= r.
2228+
rewrite sr//=; last by near: y; exact: nbhs_dnbhs_neq.
2229+
by rewrite sub0r normrN; near: y; exact: dnbhs0_lt.
2230+
apply: le_trans.
2231+
rewrite [in leRHS]/Num.Def.normr/= mx_normrE.
2232+
by under eq_bigr do rewrite !mxE; exact: (le_bigmax _ _ (i, j)).
2233+
- rewrite mxE.
2234+
have : `|l - x^-1 *: (M (x *: v + t) - M t)| <= e / 2.
2235+
apply: dle => //=; last by near: x; exact: nbhs_dnbhs_neq.
2236+
by rewrite sub0r normrN; near: x; exact: dnbhs0_lt.
2237+
apply: le_trans.
2238+
rewrite [in leRHS]/Num.Def.normr/= mx_normrE/=.
2239+
under eq_bigr do rewrite !mxE.
2240+
apply: le_trans; last exact: le_bigmax.
2241+
by rewrite !mxE.
2242+
Unshelve. all: by end_near. Qed.
2243+
2244+
End pointwise_derive.

0 commit comments

Comments
 (0)