|
1 | | -(* mathcomp analysis (c) 2025 Inria and AIST. License: CeCILL-C. *) |
| 1 | +(* mathcomp analysis (c) 2026 Inria and AIST. License: CeCILL-C. *) |
2 | 2 | From HB Require Import structures. |
3 | 3 | From mathcomp Require Import all_ssreflect ssralg ssrnum matrix interval poly. |
4 | 4 | From mathcomp Require Import sesquilinear. |
@@ -693,45 +693,6 @@ have @f : {linear 'M[R]_(m, n) -> R}. |
693 | 693 | rewrite (_ : (fun _ => _) = f) //; exact/linear_differentiable/coord_continuous. |
694 | 694 | Qed. |
695 | 695 |
|
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 | | - |
735 | 696 | Lemma linear_lipschitz (V' W' : normedModType R) (f : {linear V' -> W'}) : |
736 | 697 | continuous f -> exists2 k, k > 0 & forall x, `|f x| <= k * `|x|. |
737 | 698 | Proof. |
@@ -799,24 +760,18 @@ move=> dfx dgfx; apply: DiffDef; first exact: differentiable_comp. |
799 | 760 | by rewrite diff_comp // !diff_val. |
800 | 761 | Qed. |
801 | 762 |
|
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. |
| 763 | +Lemma differentiable_rsubmx m {n1 n2} (f : V -> 'M[R]_(m, n1 + n2)) v : |
| 764 | + (forall x, differentiable f x) -> differentiable (rsubmx \o f) v. |
806 | 765 | Proof. |
807 | | -move=> /= => df1. |
808 | | -apply: differentiable_comp => //. |
809 | | -exact: differentiable_rsubmx0. |
| 766 | +move=> df; apply: differentiable_comp => //. |
| 767 | +exact/linear_differentiable/continuous_rsubmx. |
810 | 768 | Qed. |
811 | 769 |
|
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. |
| 770 | +Lemma differentiable_lsubmx m {n1 n2} (f : V -> 'M[R]_(m, n1 + n2)) v : |
| 771 | + (forall x, differentiable f x) -> differentiable (lsubmx \o f) v. |
816 | 772 | Proof. |
817 | | -move=> /= => df1. |
818 | | -apply: differentiable_comp => //. |
819 | | -exact: differentiable_lsubmx0. |
| 773 | +move=> df1; apply: differentiable_comp => //. |
| 774 | +exact/linear_differentiable/continuous_lsubmx. |
820 | 775 | Qed. |
821 | 776 |
|
822 | 777 | Lemma bilinear_schwarz (U V' W' : normedModType R) |
|
0 commit comments