Skip to content

Commit 0a1e66d

Browse files
authored
derive_mx (#1829)
* derive_mx
1 parent e63da36 commit 0a1e66d

2 files changed

Lines changed: 71 additions & 0 deletions

File tree

CHANGELOG_UNRELEASED.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@
5555
- in `measurable_realfun.v`:
5656
+ lemmas `emeasurable_fun_itv_obnd_cbndP`, `emeasurable_fun_itv_bndo_bndcP`,
5757
`emeasurable_fun_itv_cc`
58+
- in `derive.v`:
59+
+ lemmas `derivable_mxP`, `derive_mx`
5860

5961
- in `subtype_topology.v`:
6062
+ lemma `within_continuous_comp`

theories/derive.v

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

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

0 commit comments

Comments
 (0)