Skip to content

Commit cf05248

Browse files
yosakaonaffeldt-aist
authored andcommitted
rsubmx and lsubmx diff lemmas
1 parent 423a562 commit cf05248

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

theories/derive.v

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -693,6 +693,45 @@ have @f : {linear 'M[R]_(m, n) -> R}.
693693
rewrite (_ : (fun _ => _) = f) //; exact/linear_differentiable/coord_continuous.
694694
Qed.
695695

696+
Lemma differentiable_rsubmx0 {n1 n2} t :
697+
differentiable (@rsubmx R 1 n1 n2) t.
698+
Proof.
699+
have lin_rsubmx : linear (@rsubmx R 1 n1 n2).
700+
move=> a b c.
701+
by rewrite linearD//= linearZ.
702+
pose build_lin_rsubmx := GRing.isLinear.Build _ _ _ _ _ lin_rsubmx.
703+
pose Rsubmx : {linear 'rV[R^o]_(n1 + n2) -> 'rV[R^o]_n2} := HB.pack (@rsubmx R _ _ _) build_lin_rsubmx.
704+
apply: (@linear_differentiable _ _ _ _).
705+
move=> /= u A /=.
706+
move/nbhs_ballP=> [e /= e0 eA].
707+
apply/nbhs_ballP; exists e => //= v [? uv].
708+
apply: eA; split => //.
709+
(* TODO: lemma *)
710+
move: uv; rewrite /ball/= /mx_ball/ball /= => uv i j.
711+
apply: (le_lt_trans _ (uv i (rshift n1 j))).
712+
by rewrite !mxE.
713+
Qed.
714+
715+
Lemma differentiable_lsubmx0{n1 n2} t :
716+
differentiable (@lsubmx R 1 n1 n2) t.
717+
Proof.
718+
have lin_lsubmx : linear (@lsubmx R 1 n1 n2).
719+
move=> a b c.
720+
by rewrite linearD//= linearZ.
721+
pose build_lin_lsubmx := GRing.isLinear.Build _ _ _ _ _ lin_lsubmx.
722+
pose Lsubmx : {linear 'rV[R^o]_(n1 + n2) -> 'rV[R^o]_n1} :=
723+
HB.pack (@lsubmx R _ _ _) build_lin_lsubmx.
724+
apply: (@linear_differentiable _ _ _ _).
725+
move=> /= u A /=.
726+
move/nbhs_ballP=> [e /= e0 eA].
727+
apply/nbhs_ballP; exists e => //= v [? uv].
728+
apply: eA; split => //.
729+
(* TODO: lemma *)
730+
move: uv; rewrite /ball/= /mx_ball/ball /= => uv i j.
731+
apply: (le_lt_trans _ (uv i (lshift n2 j))).
732+
by rewrite !mxE.
733+
Qed.
734+
696735
Lemma linear_lipschitz (V' W' : normedModType R) (f : {linear V' -> W'}) :
697736
continuous f -> exists2 k, k > 0 & forall x, `|f x| <= k * `|x|.
698737
Proof.
@@ -760,6 +799,26 @@ move=> dfx dgfx; apply: DiffDef; first exact: differentiable_comp.
760799
by rewrite diff_comp // !diff_val.
761800
Qed.
762801

802+
Lemma differentiable_rsubmx {n1 n2}
803+
(f : V -> 'rV[R]_(n1 + n2)) t :
804+
(forall x, differentiable f x) ->
805+
differentiable (fun x => rsubmx (f x)) t.
806+
Proof.
807+
move=> /= => df1.
808+
apply: differentiable_comp => //.
809+
exact: differentiable_rsubmx0.
810+
Qed.
811+
812+
Lemma differentiable_lsubmx {n1 n2}
813+
(f : V -> 'rV[R]_(n1 + n2)) t :
814+
(forall x, differentiable f x) ->
815+
differentiable (fun x => lsubmx (f x)) t.
816+
Proof.
817+
move=> /= => df1.
818+
apply: differentiable_comp => //.
819+
exact: differentiable_lsubmx0.
820+
Qed.
821+
763822
Lemma bilinear_schwarz (U V' W' : normedModType R)
764823
(f : {bilinear U -> V' -> W'}) : continuous (fun p => f p.1 p.2) ->
765824
exists2 k, k > 0 & forall u v, `|f u v| <= k * `|u| * `|v|.

0 commit comments

Comments
 (0)