@@ -693,6 +693,45 @@ have @f : {linear 'M[R]_(m, n) -> R}.
693693rewrite (_ : (fun _ => _) = f) //; exact/linear_differentiable/coord_continuous.
694694Qed .
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+
696735Lemma linear_lipschitz (V' W' : normedModType R) (f : {linear V' -> W'}) :
697736 continuous f -> exists2 k, k > 0 & forall x, `|f x| <= k * `|x|.
698737Proof .
@@ -760,6 +799,26 @@ move=> dfx dgfx; apply: DiffDef; first exact: differentiable_comp.
760799by rewrite diff_comp // !diff_val.
761800Qed .
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+
763822Lemma 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