Skip to content

Commit b119a06

Browse files
committed
Boost near_derive
Simpler proof of a stronger version of near_derive
1 parent c72f982 commit b119a06

File tree

2 files changed

+15
-22
lines changed

2 files changed

+15
-22
lines changed

theories/derive.v

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1863,42 +1863,30 @@ Qed.
18631863

18641864
Lemma near_derive (R : numFieldType) (V W : normedModType R)
18651865
(f g : V -> W) (a v : V) : v != 0 -> {near a, f =1 g} ->
1866-
{near 0^', (fun h => h^-1 *: (f (h *: v + a) - f a)) =1
1867-
(fun h => h^-1 *: (g (h *: v + a) - g a))}.
1868-
Proof.
1869-
move=> v0 nfg; near=> t; congr (_ *: _).
1870-
near: t.
1871-
move: nfg; rewrite {1}/prop_near1/= nbhsE/= => -[B [oB Ba] /[dup] Bfg Bfg'].
1872-
have [e /= e0 eB] := open_subball oB Ba.
1873-
have vv0 : 0 < `|2 *: v| by rewrite normrZ mulr_gt0 ?normr_gt0.
1874-
near=> x.
1875-
have x0 : 0 < `|x| by rewrite normr_gt0//; near: x; exact: nbhs_dnbhs_neq.
1876-
congr (_ - _); last exact: Bfg'.
1877-
apply: Bfg; apply: (eB (`|x| * `|2 *: v|)).
1878-
- rewrite /ball_/= sub0r normrN normrM !normr_id -ltr_pdivlMr//.
1879-
by near: x; apply: dnbhs0_lt; rewrite divr_gt0.
1880-
- by rewrite mulr_gt0.
1881-
- rewrite -ball_normE/= opprD addrCA subrr addr0 normrN normrZ ltr_pM2l//.
1882-
by rewrite normrZ ltr_pMl ?normr_gt0// gtr0_norm ?ltr1n.
1866+
\forall h \near 0,
1867+
h^-1 *: (f (h *: v + a) - f a) = h^-1 *: (g (h *: v + a) - g a).
1868+
Proof.
1869+
move=> v0 fg; near do rewrite (nbhs_singleton fg) (near fg)// addrC.
1870+
apply/(@near0Z _ _ _ [set v | (a + v) \is_near (nbhs a)])=> /=.
1871+
by rewrite (near_shift a)/=; near do rewrite /= sub0r addrC addrNK//.
18831872
Unshelve. all: by end_near. Qed.
18841873

18851874
Lemma near_eq_derivable (R : numFieldType) (V W : normedModType R)
18861875
(f g : V -> W) (a v : V) : v != 0 ->
18871876
{near a, f =1 g} -> derivable f a v -> derivable g a v.
18881877
Proof.
18891878
move=> vn0 nfg /cvg_ex[/= l fl]; apply/cvg_ex; exists l => /=.
1890-
by apply: cvg_trans fl; apply: near_eq_cvg; exact: near_derive.
1879+
by apply: cvg_trans fl; apply: near_eq_cvg; apply/cvg_within/near_derive.
18911880
Qed.
18921881

18931882
Lemma near_eq_derive (R : numFieldType) (V W : normedModType R)
18941883
(f g : V -> W) (a v : V) :
18951884
v != 0 -> (\near a, f a = g a) -> 'D_v f a = 'D_v g a.
18961885
Proof.
18971886
move=> v0 fg; rewrite /derive; congr (lim _).
1898-
have {}fg := near_derive v0 fg.
1899-
rewrite eqEsubset; split; apply: near_eq_cvg=> //.
1900-
by move/filterS : fg; apply => ? /esym.
1901-
Qed.
1887+
rewrite eqEsubset; split; apply/near_eq_cvg; apply/cvg_within/near_derive => //.
1888+
by near do apply/esym.
1889+
Unshelve. all: by end_near. Qed.
19021890

19031891
Lemma near_eq_is_derive (R : numFieldType) (V W : normedModType R)
19041892
(f g : V -> W) (a v : V) (df : W) : v != 0 ->

theories/normedtype.v

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5406,6 +5406,11 @@ rewrite propeqE; split=> /= /nbhs_normP [_/posnumP[e] ye];
54065406
apply/nbhs_normP; exists e%:num => //= t et.
54075407
by apply: ye; rewrite /= distrC addrCA [x + _]addrC addrK distrC.
54085408
by have /= := ye (t - (x - y)); rewrite opprB addrCA subrKA addrNK; exact.
5409+
5410+
Lemma near0Z {R : numFieldType} {V : tvsType R} (y : V) (P : set V) :
5411+
(\forall x \near 0, P x) -> (\forall k \near 0, P (k *: y)).
5412+
Proof.
5413+
by have /= := @scalel_continuous R V y 0 _; rewrite scale0r; apply.
54095414
Qed.
54105415

54115416
Lemma cvg_comp_shift {T : Type} {K : numDomainType} {R : normedModType K}

0 commit comments

Comments
 (0)