On this page
The maximizer of a trace-penalized quadratic on a closed convex set
Imports 3 library modules and 14 external
- GaussianAnalysis.matrix.euclidean
- GaussianAnalysis.gaussian.measurable_matrix
- GaussianAnalysis.convex.moreau
External: HB.structures, mathcomp.classical.all_ssreflect_compat, mathcomp.algebra.algebraic_hierarchy.ssralg, mathcomp.algebra.numeric_hierarchy.ssrnum, mathcomp.algebra.matrix, mathcomp.classical.boolp, mathcomp.classical.classical_sets, mathcomp.classical.functions, mathcomp.reals.reals, mathcomp.analysis.topology_theory.topology, mathcomp.analysis.normedtype_theory.normedtype, mathcomp.algebra.ring_tactic, mathcomp.algebra.field_tactic, mathcomp.algebra.arithmetic_tactic
Required by 2 files of the paper proofs
For c > -1 and real n x n matrices H and S, let trace_quad c H S = 2 <H, S> - |S|_F^2 - (c / n) (tr S)^2, with the Frobenius product <., .> and norm |.|_F of matrix/euclidean.v. With A = trace_scale c, that is A S = S + (c / n) tr(S) I, the quadratic part is <S, A S> = |S|_F^2 + (c / n) (tr S)^2. Since (tr S)^2 <= n |S|_F^2, it is coercive: <S, A S> >= min(1, 1 + c) |S|_F^2. So trace_quad c H is strictly concave, and it has a unique maximizer X(H) on every nonempty closed convex set K of matrices. Since trace_quad c H S = <H, A^-1 H> - <S - A^-1 H, A (S - A^-1 H)>, X(H) is the nearest point of K to A^-1 H = H - (c / (1 + c)) (tr H / n) I for the scalar product <S, A T> = <S, T> + (c / n) tr S tr T, with A^-1 = trace_scale (- c / (1 + c)). It is not the nearest point of K to H: for K the whole space, X(H) = A^-1 H. X(H) is computed by the projection of convex/moreau.v. U = trace_scale (sqrt (1 + c) - 1) multiplies the component of a matrix along the identity by sqrt (1 + c) and fixes the matrices of trace 0; U U = A, and X(H) = U^-1 Pi_{U K}(U^-1 H), with Pi_{U K} the Frobenius projection onto U K. The definition applies U^-1 = trace_scale (1 / sqrt (1 + c) - 1) to H, projects onto U K in the coordinates of mxvec, and applies U^-1 to the result.
- trace_scaleK: trace_scale a (trace_scale b S) = trace_scale ((1 + a) (1 + b) - 1) S, so trace_scale a is invertible when a != -1; trace_scale_adj, it is self-adjoint for the Frobenius product; mxtrace_scale, tr (trace_scale a S) = (1 + a) tr S.
- mxtrace_sqr_le: (tr S)^2 / n <= |S|_F^2; trace_pen_ge, the coercivity above, for every real c.
- trace_quad_expand: the exact expansion of trace_quad c H at any X: trace_quad c H S - trace_quad c H X equals 2 <H - X - (c / n) tr(X) I, S - X> minus |S - X|_F^2 + (c / n) (tr (S - X))^2.
In what follows, K is a set of n x n matrices that is closed in the coordinates of mxvec, convex and nonempty, c > -1 and X = trace_argmax K c H.
- trace_argmaxP: X is in K and satisfies the variational inequality <H - X - (c / n) tr(X) I, S - X> <= 0 for every S in K; trace_argmax_eq, X is the only point of K that does.
- trace_argmax_ge: trace_quad c H S + min(1, 1 + c) |S - X|_F^2 <= trace_quad c H X for every S in K; trace_argmax_unique, X is the only maximizer of trace_quad c H on K.
- trace_argmax_lipschitz: |X(H) - X(H')|_F <= |H - H'|_F / min(1, 1 + c).
- trace_argmax0 and trace_argmax_norm: if 0 is in K, then X(0) = 0 and |X(H)|_F <= |H|_F / min(1, 1 + c). trace_argmax_cone: if K is a cone, then <H, X> = |X|_F^2 + (c / n) (tr X)^2 = trace_quad c H X.
- trace_argmax_conj: if K is invariant under the conjugations S |-> Q S Q^T by the orthogonal matrices Q, then X(Q H Q^T) = Q X(H) Q^T.
trace_ | S + a (tr S / n) I |
trace_ | 2 <H, S> - |S|_F^2 - (c / n) (tr S)^2 |
trace_ | the maximizer of trace_quad c H on K |
Main results
| Results | Statement |
|---|---|
trace_scale a S = S + a (tr S / n) I multiplies the component of S along the identity by 1 + a: trace_scale a (trace_scale b S) = trace_scale ((1 + a) (1 + b) - 1) S, it is self-adjoint for the Frobenius product, and tr (trace_scale a S) = (1 + a) tr S. (tr S)^2 / n <= |S|_F^2, so |S|_F^2 + (c / n) (tr S)^2 >= min(1, 1 + c) |S|_F^2 for every real c. trace_quad c H S = 2 <H, S> - |S|_F^2 - (c / n) (tr S)^2 has an exact second-order expansion at every X. | |
For c > -1 and a nonempty convex set K of n x n matrices, closed in the coordinates of mxvec, trace_quad c H has a unique maximizer X = trace_argmax K c H on K. X is the only point of K with <H - X - (c / n) tr(X) I, S - X> <= 0 for every S in K, and trace_quad c H S + min(1, 1 + c) |S - X|_F^2 <= trace_quad c H X for S in K. Proved by the projection of convex/ after trace_scale (sqrt (1 + c) - 1), which turns the quadratic part into |.|_F^2. | |
With the same hypotheses, |X(H) - X(H')|_F <= |H - H'|_F / min(1, 1 + c). If 0 is in K, then X(0) = 0 and |X(H)|_F <= |H|_F / min(1, 1 + c). If K is a cone, then <H, X> = |X|_F^2 + (c / n) (tr X)^2 = trace_quad c H X. If K is invariant under the conjugations S |-> P S P^T by orthogonal matrices, then X(Q H Q^T) = Q X(H) Q^T for every orthogonal Q. |
Declarations31 exported, 11 local
Context {R : realType}.
forall {R : realType} [n : nat] (A : 'M_n), mxdot 1%:M A = \tr A
Statement as written in the source
Lemma mxdot1l n (A : 'M[R]_n) : mxdot 1%:M A = \tr A.
Used by 3 declarations in 1 file
- this file: mxtrace_sqr_le, mxdot_trace_scalel, mxtrace_vec_mx
forall {R : realType} [n : nat] (A : 'M_n), \tr A / n%:R * n%:R = \tr AStatement as written in the source
Lemma mxtrace_divK n (A : 'M[R]_n) : \tr A / n%:R * n%:R = \tr A.
Used by 1 declaration in 1 file
- this file: mxtrace_scale
forall {R : realType} [n : nat] (A : 'M_n), \tr A ^+ 2 / n%:R <= mxdot A A
Cauchy-Schwarz for the Frobenius product with the identity.
Stated in the README together with trace_scale.
Statement as written in the source
Lemma mxtrace_sqr_le n (A : 'M[R]_n) : \tr A ^+ 2 / n%:R <= mxdot A A.
Used by 1 declaration in 1 file
- this file: trace_pen_ge
forall {R : realType} [n : nat] (c : R) (A : 'M_n), minr 1 (1 + c) * mxdot A A <= mxdot A A + c / n%:R * \tr A ^+ 2
The coercivity of the quadratic part, for every real c.
Stated in the README together with trace_scale.
Statement as written in the source
Used by 2 declarations in 1 file
- this file: trace_argmax_ge, trace_argmax_lipschitz
forall {R : realType} [n : nat] (A B : 'M_n), \tr (A - B) = \tr A - \tr BStatement as written in the source
Lemma mxtraceB n (A B : 'M[R]_n) : \tr (A - B) = \tr A - \tr B.
Used by 2 declarations in 1 file
- this file: trace_quad_expand, trace_argmax_lipschitz
forall {R : realType} [n : nat] [Q : 'M_n] (A B : 'M_n), Q \is orthogonalmx -> mxdot (Q *m A *m Q^T) (Q *m B *m Q^T) = mxdot A B
Statement as written in the source
Lemma mxdot_conjmx n (Q A B : 'M[R]_n) : Q \is orthogonalmx -> mxdot (Q *m A *m Q^T) (Q *m B *m Q^T) = mxdot A B.
Used by 1 declaration in 1 file
- this file: trace_argmax_conj
forall {R : realType} [n : nat] [Q : 'M_n] (A : 'M_n), Q \is orthogonalmx -> \tr (Q *m A *m Q^T) = \tr A
Statement as written in the source
Lemma mxtrace_conj n (Q A : 'M[R]_n) : Q \is orthogonalmx -> \tr (Q *m A *m Q^T) = \tr A.
Used by 1 declaration in 1 file
- this file: trace_scale_conj
Context {R : realType} {n : nat}. Implicit Types (a b c k : R) (H S T X : 'M[R]_n).
forall {R : realType} {n : nat}, R -> 'M_n -> 'M_nDefinition trace_scale a S : 'M[R]_n := S + (a * (\tr S / n%:R)) *: 1%:M.
Multiplies the component of S along the identity by 1 + a.
trace_scale a S = S + a (tr S / n) I multiplies the component of S along the identity by 1 + a: trace_scale a (trace_scale b S) = trace_scale ((1 + a) (1 + b) - 1) S, it is self-adjoint for the Frobenius product, and tr (trace_scale a S) = (1 + a) tr S. (tr S)^2 / n <= |S|_F^2, so |S|_F^2 + (c / n) (tr S)^2 >= min(1, 1 + c) |S|_F^2 for every real c. trace_quad c H S = 2 <H, S> - |S|_F^2 - (c / n) (tr S)^2 has an exact second-order expansion at every X.
Used by 25 declarations in 1 file
- this file: trace_argmax, trace_scaleD, trace_scaleZ, trace_scaleN, trace_scaleB, trace_scale0, trace_scale_id, mxtrace_scale, trace_scaleK, mxdot_trace_scalel, trace_scale_adj, trace_scale_conj, trace_quad_expand, UV, VU, UU, Vvec, KU_closed, KU_n0, KU_convex, vi_transfer, trace_argmaxP, trace_argmax_eq, trace_argmax_lipschitz, trace_argmax_cone
forall {R : realType} {n : nat}, R -> 'M_n -> 'M_n -> RUsed by 4 declarations in 1 file
- this file: trace_quad_expand, trace_argmax_ge, trace_argmax_unique, trace_argmax_cone
forall {R : realType} {n : nat}, set 'M_n -> R -> 'M_n -> 'M_n
Definition trace_argmax (K : set 'M[R]_n) c H : 'M[R]_n := trace_scale ((Num.sqrt (1 + c))^-1 - 1) (vec_mx (proj [set v | K (trace_scale ((Num.sqrt (1 + c))^-1 - 1) (vec_mx v))] (mxvec (trace_scale ((Num.sqrt (1 + c))^-1 - 1) H)))).
For c > -1 and a nonempty convex set K of n x n matrices, closed in the coordinates of mxvec, trace_quad c H has a unique maximizer X = trace_argmax K c H on K. X is the only point of K with <H - X - (c / n) tr(X) I, S - X> <= 0 for every S in K, and trace_quad c H S + min(1, 1 + c) |S - X|_F^2 <= trace_quad c H X for S in K. Proved by the projection of convex/ after trace_scale (sqrt (1 + c) - 1), which turns the quadratic part into |.|_F^2.
Used by 9 declarations in 1 file
forall {R : realType} {n : nat} (a : R) (S T : 'M_n), trace_scale a (S + T) = trace_scale a S + trace_scale a T
Statement as written in the source
Lemma trace_scaleD a S T : trace_scale a (S + T) = trace_scale a S + trace_scale a T.
Used by 2 declarations in 1 file
- this file: trace_scaleB, KU_convex
forall {R : realType} {n : nat} (a k : R) (S : 'M_n), trace_scale a (k *: S) = k *: trace_scale a S
Statement as written in the source
Lemma trace_scaleZ a k S : trace_scale a (k *: S) = k *: trace_scale a S.
Used by 2 declarations in 1 file
- this file: trace_scaleN, KU_convex
forall {R : realType} {n : nat} (a : R) (S : 'M_n), trace_scale a (- S) = - trace_scale a S
Statement as written in the source
Lemma trace_scaleN a S : trace_scale a (- S) = - trace_scale a S.
Used by 1 declaration in 1 file
- this file: trace_scaleB
forall {R : realType} {n : nat} (a : R) (S T : 'M_n), trace_scale a (S - T) = trace_scale a S - trace_scale a T
Statement as written in the source
Lemma trace_scaleB a S T : trace_scale a (S - T) = trace_scale a S - trace_scale a T.
Used by 2 declarations in 1 file
- this file: KU_convex, vi_transfer
forall {R : realType} {n : nat} (a : R), trace_scale a 0 = 0
Statement as written in the source
Lemma trace_scale0 a : trace_scale a 0 = 0.
Used by 1 declaration in 1 file
- this file: trace_argmax0
forall {R : realType} {n : nat} (S : 'M_n), trace_scale 0 S = S
Statement as written in the source
Lemma trace_scale_id S : trace_scale 0 S = S.
forall {R : realType} {n : nat} (a : R) (S : 'M_n), \tr (trace_scale a S) = (1 + a) * \tr S
Stated in the README together with trace_scale.
Statement as written in the source
Lemma mxtrace_scale a S : \tr (trace_scale a S) = (1 + a) * \tr S.
Used by 1 declaration in 1 file
- this file: trace_scaleK
forall {R : realType} {n : nat} (a b : R) (S : 'M_n), trace_scale a (trace_scale b S) = trace_scale ((1 + a) * (1 + b) - 1) S
Stated in the README together with trace_scale.
Statement as written in the source
Lemma trace_scaleK a b S : trace_scale a (trace_scale b S) = trace_scale ((1 + a) * (1 + b) - 1) S.
forall {R : realType} {n : nat} (a : R) (S T : 'M_n), mxdot (trace_scale a S) T = mxdot S T + a / n%:R * (\tr S * \tr T)
Statement as written in the source
Lemma mxdot_trace_scalel a S T : mxdot (trace_scale a S) T = mxdot S T + a / n%:R * (\tr S * \tr T).
Used by 4 declarations in 1 file
forall {R : realType} {n : nat} (a : R) (S T : 'M_n), mxdot (trace_scale a S) T = mxdot S (trace_scale a T)
Stated in the README together with trace_scale.
Statement as written in the source
Lemma trace_scale_adj a S T : mxdot (trace_scale a S) T = mxdot S (trace_scale a T).
Used by 1 declaration in 1 file
- this file: vi_transfer
forall {R : realType} {n : nat} (a : R) [Q : 'M_n] (S : 'M_n), Q \is orthogonalmx -> trace_scale a (Q *m S *m Q^T) = Q *m trace_scale a S *m Q^T
Statement as written in the source
Lemma trace_scale_conj a Q S : Q \is orthogonalmx -> trace_scale a (Q *m S *m Q^T) = Q *m trace_scale a S *m Q^T.
Used by 1 declaration in 1 file
- this file: trace_argmax_conj
forall {R : realType} {n : nat} (c : R) (H S0 X : 'M_n), trace_quad c H S0 = trace_quad c H X + 2 * mxdot (H - trace_scale c X) (S0 - X) - (mxdot (S0 - X) (S0 - X) + c / n%:R * \tr (S0 - X) ^+ 2)
The second-order expansion of trace_quad c H at X.
Stated in the README together with trace_scale.
Statement as written in the source
Lemma trace_quad_expand c H S X : trace_quad c H S = trace_quad c H X + 2 * mxdot (H - trace_scale c X) (S - X) - (mxdot (S - X) (S - X) + c / n%:R * \tr (S - X) ^+ 2).
Used by 1 declaration in 1 file
- this file: trace_argmax_ge
Context {R : realType} {n : nat}. Variable K : set 'M[R]_n. Hypothesis Kc : closed [set v : 'rV[R]_(n * n) | K (vec_mx v)]. Hypothesis Kn : K !=set0. Hypothesis Kcvx : forall (S T : 'M[R]_n) (t : R), K S -> K T -> 0 <= t <= 1 -> K (S + t *: (T - S)). Variable c : R. Hypothesis c1 : -1 < c. Implicit Types (H S T X Y : 'M[R]_n). Local Notation sc := (Num.sqrt (1 + c)). Local Notation Uc := (trace_scale (sc - 1)). Local Notation Vc := (trace_scale (sc^-1 - 1)). Local Notation KU := [set v : 'rV[R]_(n * n) | K (Vc (vec_mx v))]. Local Notation Mv := (1%:M + ((sc^-1 - 1) / n%:R) *: ((mxvec (1%:M : 'M[R]_n))^T *m mxvec (1%:M : 'M[R]_n))).
Let sc_gt0 : 0 < sc.
Let UV S : Uc (Vc S) = S.
Used by 3 declarations in 1 file
- this file: vi_transfer, trace_argmaxP, trace_argmax_eq
Let VU S : Vc (Uc S) = S.
Used by 3 declarations in 1 file
- this file: KU_n0, trace_argmaxP, trace_argmax_eq
Let UU S : Uc (Uc S) = trace_scale c S.
Used by 1 declaration in 1 file
- this file: vi_transfer
Used by 2 declarations in 1 file
- this file: mxtrace_vec_mx, vi_transfer
Let mxtrace_vec_mx (v : 'rV[R]_(n * n)) : \tr (vec_mx v) = mxdot v (mxvec 1%:M).
Used by 1 declaration in 1 file
- this file: Vvec
Let Vvec (v : 'rV[R]_(n * n)) : mxvec (Vc (vec_mx v)) = v *m Mv.
In the coordinates of mxvec, Vc is the right multiplication by Mv.
Used by 1 declaration in 1 file
- this file: KU_closed
Let KU_closed : closed KU.
Used by 2 declarations in 1 file
- this file: trace_argmaxP, trace_argmax_eq
Let KU_n0 : KU !=set0.
Used by 2 declarations in 1 file
- this file: trace_argmaxP, trace_argmax_eq
Let KU_convex (x y : 'rV[R]_(n * n)) (t : R) : KU x -> KU y -> 0 <= t <= 1 -> KU (x + t *: (y - x)).
Used by 2 declarations in 1 file
- this file: trace_argmaxP, trace_argmax_eq
Let vi_transfer H X S : mxdot (mxvec (Vc H) - mxvec (Uc X)) (mxvec (Uc S) - mxvec (Uc X)) = mxdot (H - trace_scale c X) (S - X).
The variational inequality of the projection, read on matrices.
Used by 2 declarations in 1 file
- this file: trace_argmaxP, trace_argmax_eq
forall {R : realType} {n : nat} [K : set 'M_n], closed [set v | K (vec_mx v)] -> K !=set0 -> (forall (S T : 'M_n) (t : R), K S -> K T -> 0 <= t <= 1 -> K (S + t *: (T - S))) -> forall [c : R], -1 < c -> forall H : 'M_n, K (trace_argmax K c H) /\ (forall S : 'M_n, K S -> mxdot (H - trace_scale c (trace_argmax K c H)) (S - trace_argmax K c H) <= 0)
The maximizer is in K and satisfies the variational inequality <H - X - (c / n) tr(X) I, S - X> <= 0 for every S in K.
Stated in the README together with trace_argmax.
Statement as written in the source
Theorem trace_argmaxP H : K (trace_argmax K c H) /\ forall S, K S -> mxdot (H - trace_scale c (trace_argmax K c H)) (S - trace_argmax K c H) <= 0.
Used by 5 declarations in 1 file
forall {R : realType} {n : nat} [K : set 'M_n], closed [set v | K (vec_mx v)] -> K !=set0 -> (forall (S T : 'M_n) (t : R), K S -> K T -> 0 <= t <= 1 -> K (S + t *: (T - S))) -> forall [c : R], -1 < c -> forall [H Y : 'M_n], K Y -> (forall S : 'M_n, K S -> mxdot (H - trace_scale c Y) (S - Y) <= 0) -> trace_argmax K c H = Y
The variational inequality characterizes the maximizer.
Stated in the README together with trace_argmax.
Statement as written in the source
Lemma trace_argmax_eq H Y : K Y -> (forall S, K S -> mxdot (H - trace_scale c Y) (S - Y) <= 0) -> trace_argmax K c H = Y.
Used by 2 declarations in 1 file
- this file: trace_argmax0, trace_argmax_conj
forall {R : realType} {n : nat} [K : set 'M_n], closed [set v | K (vec_mx v)] -> K !=set0 -> (forall (S T : 'M_n) (t : R), K S -> K T -> 0 <= t <= 1 -> K (S + t *: (T - S))) -> forall [c : R], -1 < c -> forall (H : 'M_n) [S : 'M_n], K S -> trace_quad c H S + minr 1 (1 + c) * mxdot (S - trace_argmax K c H) (S - trace_argmax K c H) <= trace_quad c H (trace_argmax K c H)
The maximizer beats every point of K by min(1, 1 + c) |S - X|_F^2.
Stated in the README together with trace_argmax.
Statement as written in the source
Lemma trace_argmax_ge H S : K S -> trace_quad c H S + Num.min 1 (1 + c) * mxdot (S - trace_argmax K c H) (S - trace_argmax K c H) <= trace_quad c H (trace_argmax K c H).
Used by 1 declaration in 1 file
- this file: trace_argmax_unique
forall {R : realType} {n : nat} [K : set 'M_n], closed [set v | K (vec_mx v)] -> K !=set0 -> (forall (S T : 'M_n) (t : R), K S -> K T -> 0 <= t <= 1 -> K (S + t *: (T - S))) -> forall [c : R], -1 < c -> forall [H Y : 'M_n], K Y -> (forall S : 'M_n, K S -> trace_quad c H S <= trace_quad c H Y) -> trace_argmax K c H = Y
Stated in the README together with trace_argmax.
Statement as written in the source
Lemma trace_argmax_unique H Y : K Y -> (forall S, K S -> trace_quad c H S <= trace_quad c H Y) -> trace_argmax K c H = Y.
forall {R : realType} {n : nat} [K : set 'M_n], closed [set v | K (vec_mx v)] -> K !=set0 -> (forall (S T : 'M_n) (t : R), K S -> K T -> 0 <= t <= 1 -> K (S + t *: (T - S))) -> forall [c : R], -1 < c -> forall H H' : 'M_n, frobenius (trace_argmax K c H - trace_argmax K c H') <= frobenius (H - H') / minr 1 (1 + c)
With the same hypotheses, |X(H) - X(H')|_F <= |H - H'|_F / min(1, 1 + c). If 0 is in K, then X(0) = 0 and |X(H)|_F <= |H|_F / min(1, 1 + c). If K is a cone, then <H, X> = |X|_F^2 + (c / n) (tr X)^2 = trace_quad c H X. If K is invariant under the conjugations S |-> P S P^T by orthogonal matrices, then X(Q H Q^T) = Q X(H) Q^T for every orthogonal Q.
Statement as written in the source
Lemma trace_argmax_lipschitz H H' : frobenius (trace_argmax K c H - trace_argmax K c H') <= frobenius (H - H') / Num.min 1 (1 + c).
Used by 1 declaration in 1 file
- this file: trace_argmax_norm
forall {R : realType} {n : nat} [K : set 'M_n], closed [set v | K (vec_mx v)] -> K !=set0 -> (forall (S T : 'M_n) (t : R), K S -> K T -> 0 <= t <= 1 -> K (S + t *: (T - S))) -> forall [c : R], -1 < c -> K 0 -> trace_argmax K c 0 = 0
Stated in the README together with trace_argmax_lipschitz.
Statement as written in the source
Lemma trace_argmax0 : K 0 -> trace_argmax K c 0 = 0.
Used by 1 declaration in 1 file
- this file: trace_argmax_norm
forall {R : realType} {n : nat} [K : set 'M_n], closed [set v | K (vec_mx v)] -> K !=set0 -> (forall (S T : 'M_n) (t : R), K S -> K T -> 0 <= t <= 1 -> K (S + t *: (T - S))) -> forall [c : R], -1 < c -> forall H : 'M_n, K 0 -> frobenius (trace_argmax K c H) <= frobenius H / minr 1 (1 + c)
Stated in the README together with trace_argmax_lipschitz.
Statement as written in the source
Lemma trace_argmax_norm H : K 0 -> frobenius (trace_argmax K c H) <= frobenius H / Num.min 1 (1 + c).
forall {R : realType} {n : nat} [K : set 'M_n], closed [set v | K (vec_mx v)] -> K !=set0 -> (forall (S T : 'M_n) (t : R), K S -> K T -> 0 <= t <= 1 -> K (S + t *: (T - S))) -> forall [c : R], -1 < c -> forall H : 'M_n, (forall (S : 'M_n) (k : R), K S -> 0 <= k -> K (k *: S)) -> mxdot H (trace_argmax K c H) = mxdot (trace_argmax K c H) (trace_argmax K c H) + c / n%:R * \tr (trace_argmax K c H) ^+ 2 /\ trace_quad c H (trace_argmax K c H) = mxdot H (trace_argmax K c H)
On a cone, the value of the maximum is <H, X>.
Stated in the README together with trace_argmax_lipschitz.
Statement as written in the source
Lemma trace_argmax_cone H : (forall S (k : R), K S -> 0 <= k -> K (k *: S)) -> mxdot H (trace_argmax K c H) = mxdot (trace_argmax K c H) (trace_argmax K c H) + c / n%:R * \tr (trace_argmax K c H) ^+ 2 /\ trace_quad c H (trace_argmax K c H) = mxdot H (trace_argmax K c H).
forall {R : realType} {n : nat} [K : set 'M_n], closed [set v | K (vec_mx v)] -> K !=set0 -> (forall (S T : 'M_n) (t : R), K S -> K T -> 0 <= t <= 1 -> K (S + t *: (T - S))) -> forall [c : R], -1 < c -> forall (H : 'M_n) [Q : 'M_n], (forall P S : 'M_n, P \is orthogonalmx -> K S -> K (P *m S *m P^T)) -> Q \is orthogonalmx -> trace_argmax K c (Q *m H *m Q^T) = Q *m trace_argmax K c H *m Q^T
Equivariance under the orthogonal conjugations, from uniqueness.
Stated in the README together with trace_argmax_lipschitz.
Statement as written in the source
Lemma trace_argmax_conj H Q : (forall P S, P \is orthogonalmx -> K S -> K (P *m S *m P^T)) -> Q \is orthogonalmx -> trace_argmax K c (Q *m H *m Q^T) = Q *m trace_argmax K c H *m Q^T.