On this page
Tails of the entries of the GOE matrix
Imports 10 library modules and 26 external
- GaussianAnalysis.gaussian.measurable_matrix
- GaussianAnalysis.gaussian.gauss
- GaussianAnalysis.matrix.euclidean
- GaussianAnalysis.matrix.opnorm
- GaussianAnalysis.comparison.gauss_linear
- GaussianAnalysis.comparison.chi_square
- GaussianAnalysis.comparison.gauss_law
- GaussianAnalysis.comparison.gauss_smoothing
- GaussianAnalysis.random_matrix.goe
- GaussianAnalysis.random_matrix.goe_rotation
External: HB.structures, mathcomp.classical.all_ssreflect_compat, mathcomp.algebra.algebraic_hierarchy.ssralg, mathcomp.algebra.numeric_hierarchy.ssrnum, mathcomp.algebra.matrix, mathcomp.algebra.sesquilinear, mathcomp.classical.boolp, mathcomp.classical.classical_sets, mathcomp.classical.functions, mathcomp.algebra.interval, mathcomp.reals.reals, mathcomp.analysis.ereal, mathcomp.analysis.topology_theory.topology, mathcomp.analysis.normedtype_theory.normedtype, mathcomp.analysis.sequences, mathcomp.analysis.derive, mathcomp.analysis.exp, mathcomp.analysis.measure_theory.measure, mathcomp.analysis.lebesgue_measure, mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral, mathcomp.analysis.numfun, mathcomp.analysis.measurable_realfun, mathcomp.analysis.probability_theory.probability, mathcomp.algebra.arithmetic_tactic, mathcomp.algebra.ring_tactic, mathcomp.algebra.field_tactic
Imported by 1
For a of law gauss (d * d) and the GOE matrix W = goe_mx a of random_matrix/goe.v, each entry of W is a linear form of a: W_ij = <a, goe_coef i j> (goe_mx_mxdot). The coefficient vector of a diagonal entry has squared norm 2 / d (frobenius_goe_coef_diag), and the coefficient vectors of the entries of a row outside the diagonal are orthogonal, of squared norm 1 / d (mxdot_goe_coef_row). Hence, for s >= 0 and u > 0,
P(|W_ii| >= s) <= 2 exp (- d s^2 / 4) (goe_mx_diag_tail), P(|W_ij| >= s) <= 2 exp (- d s^2 / 2) if i != j (goe_mx_offdiag_tail), P(sum_(j != i) W_ij^2 >= 1 + u) <= exp (- d u^2 / (4 (1 + u))),
the last one (goe_mx_row_tail) because d sum_(j != i) W_ij^2 has the law of a chi-square with d - 1 degrees of freedom (gauss_mulmx_law, then gauss_centered_chi2_upper_tail of comparison/chi_square.v). Union bounds over the d diagonal entries, the d^2 entries and the d rows give the tails of the maxima, with the factors 2 d, 2 d^2 and d (goe_mx_diag_max_tail, goe_mx_offdiag_max_tail, goe_mx_row_max_tail); their events are measurable (measurable_goe_diag_max and the next two).
Three general facts are proved on the way: removing the diagonal of a square matrix A costs at most max_i |A_ii| in operator norm (opnorm_sub_diag_le, from opnorm_diag_mx_le); the union bound mu (\bigcup_i F i) <= \sum_i mu (F i) for a measure mu, a finite index type and measurable sets F i (measure_bigcup_fin_le); and x^k exp (- x c) <= 6 / (c^3 x) for c > 0, x >= 1 and k <= 2 (exprn_expRN_le), so that such tails, times at most d^2 events, are of order 1 / d.
Part of target T4 of phase 12: a Rocq formalization of the credited argument of the proof of the proposition 'Good disorder' (rcut:prop:good-disorder) of 'Cutoff throughout the high-temperature Sherrington-Kirkpatrick phase' (family 227 of the OpenAI math collection, revision 1581d4cbd, file appendices/entropy.tex), for the diagonal entries, the off-diagonal entries and the row sums of squares of the GOE matrix; the proposition itself belongs to target T4. It follows the TeX, not a Lean module of the collection. The manuscript bounds a row sum by the exponential Markov bound with E exp (theta (g^2 - 1)) <= exp (C theta^2) for |theta| <= 1/4; the chi-square tail used here has the same form with explicit constants.
Main results
| Results | Statement |
|---|---|
For a of law gauss (d * d) and the GOE matrix W = goe_mx a, every entry is a linear form of a: W_ij = <a, goe_coef i j>. For s >= 0: P(|W_ii| >= s) <= 2 exp (- d s^2 / 4), and P(|W_ij| >= s) <= 2 exp (- d s^2 / 2) if i != j. For u > 0 and every i: P(sum_(j != i) W_ij^2 >= 1 + u) <= exp (- d u^2 / (4 (1 + u))), since d sum_(j != i) W_ij^2 has the law of a chi-square with d - 1 degrees of freedom. A Rocq formalization of the credited argument of a proposition of family 227 of the OpenAI math collection (see the header). | |
Union bounds over the entries and the rows: for s >= 0 and u > 0, P(max_i |W_ii| >= s) <= 2 d exp (- d s^2 / 4), P(max_(i != j) |W_ij| >= s) <= 2 d^2 exp (- d s^2 / 2) and P(max_i sum_(j != i) W_ij^2 >= 1 + u) <= d exp (- d u^2 / (4 (1 + u))). These events, and {opnorm W >= c} for every real c, are measurable. | |
For a square matrix A and b >= 0 with |A_ii| <= b for every i: opnorm (A - diag A) <= opnorm A + b, because opnorm (diag_mx v) <= b when every |v_i| <= b. For a measure mu, a finite index type and measurable sets F i: mu (\bigcup_i F i) <= \sum_i mu (F i). For c > 0, x >= 1 and k <= 2: x^k exp (- x c) <= 6 / (c^3 x). |
Declarations22 exported
Context {R : realType}.
forall {R : realType} [n : nat] [v : 'rV_n] [b : R], 0 <= b -> (forall i : 'I_n, `|v 0 i| <= b) -> opnorm (diag_mx v) <= b
The operator norm of a diagonal matrix is at most a bound of its entries.
Stated in the README together with opnorm_sub_diag_le.
Statement as written in the source
Lemma opnorm_diag_mx_le n (v : 'rV[R]_n) (b : R) : 0 <= b -> (forall i, `|v 0 i| <= b) -> opnorm (diag_mx v) <= b.
Used by 1 declaration in 1 file
- this file: opnorm_sub_diag_le
forall {R : realType} [n : nat] [A : 'M_n] [b : R], 0 <= b -> (forall i : 'I_n, `|A i i| <= b) -> opnorm (A - diag_mx (\row_i A i i)) <= opnorm A + b
Removing the diagonal of A costs at most a bound of its entries.
For a square matrix A and b >= 0 with |A_ii| <= b for every i: opnorm (A - diag A) <= opnorm A + b, because opnorm (diag_mx v) <= b when every |v_i| <= b. For a measure mu, a finite index type and measurable sets F i: mu (\bigcup_i F i) <= \sum_i mu (F i). For c > 0, x >= 1 and k <= 2: x^k exp (- x c) <= 6 / (c^3 x).
Statement as written in the source
Used by 1 declaration in 1 file
- GaussianApplications.SKGap.Disorder: sk_coupling_opnorm_le
Context d (T : measurableType d) (R : realType). Variable mu : {measure set T -> \bar R}. Local Open Scope ereal_scope.
forall [d : measure_display] [T : measurableType d] [R : realType] (mu : measure T R) [I : finType] [F : I -> set T], (forall i : I, d.-measurable (F i)) -> (mu (\bigcup_i F i) <= (\sum_i mu (F i))%R)%E
The union bound for a family indexed by a finite type.
Stated in the README together with opnorm_sub_diag_le.
Statement as written in the source
Lemma measure_bigcup_fin_le (I : finType) (F : I -> set T) : (forall i, measurable (F i)) -> mu (\bigcup_i F i) <= \sum_i mu (F i).
Used by 3 declarations in 1 file
Context {R : realType}.
forall {R : realType} [c x : R] [k : nat], 0 < c -> 1 <= x -> (k <= 2)%N -> x ^+ k * expR (- (x * c)) <= 6 / c ^+ 3 / x
x^k exp (- x c) <= 6 / (c^3 x) for c > 0, x >= 1 and k <= 2.
Stated in the README together with opnorm_sub_diag_le.
Statement as written in the source
Lemma exprn_expRN_le (c x : R) (k : nat) : 0 < c -> 1 <= x -> (k <= 2)%N -> x ^+ k * expR (- (x * c)) <= 6 / c ^+ 3 / x.
Used by 1 declaration in 1 file
- GaussianApplications.SKGap.Disorder: sk_good_disorder_prob
Context {R : realType} (d : nat).
forall {R : realType} [d : nat], 'I_d -> 'I_d -> 'rV_(d * d)Definition goe_coef (i j : 'I_d) : 'rV[R]_(d * d) := (Num.sqrt (2 * d%:R))^-1 *: (delta_mx 0 (mxvec_index i j) + delta_mx 0 (mxvec_index j i)).
Used by 6 declarations in 1 file
forall {R : realType} [d : nat] (a : 'rV_(d * d)) (i j : 'I_d), goe_mx a i j = mxdot a (goe_coef i j)
For a of law gauss (d * d) and the GOE matrix W = goe_mx a, every entry is a linear form of a: W_ij = <a, goe_coef i j>. For s >= 0: P(|W_ii| >= s) <= 2 exp (- d s^2 / 4), and P(|W_ij| >= s) <= 2 exp (- d s^2 / 2) if i != j. For u > 0 and every i: P(sum_(j != i) W_ij^2 >= 1 + u) <= exp (- d u^2 / (4 (1 + u))), since d sum_(j != i) W_ij^2 has the law of a chi-square with d - 1 degrees of freedom. A Rocq formalization of the credited argument of a proposition of family 227 of the OpenAI math collection (see the header).
Statement as written in the source
Used by 3 declarations in 1 file
- this file: goe_mx_diag_tail, goe_mx_offdiag_tail, goe_mx_row_tail
forall {R : realType} [d : nat] (i j i' j' : 'I_d), ('e_(mxvec_index i j) : 'rV_(d * d)) 0 (mxvec_index i' j') = ((i' == i) && (j' == j))%:R
Statement as written in the source
Lemma delta_mxvec_index (i j i' j' : 'I_d) : (delta_mx 0 (mxvec_index i j) : 'rV[R]_(d * d)) 0 (mxvec_index i' j') = ((i' == i) && (j' == j))%:R.
Used by 2 declarations in 1 file
- this file: mxdot_goe_coef_row, frobenius_goe_coef_diag
forall {R : realType} [d : nat] [i j j' : 'I_d], j != i -> j' != i -> mxdot (goe_coef i j) (goe_coef i j') = (j == j')%:R / d%:R
Within the row i, the vectors goe_coef i j, j != i, are orthogonal, of squared norm 1 / d.
Statement as written in the source
Used by 2 declarations in 1 file
- this file: goe_mx_offdiag_tail, goe_mx_row_tail
Statement as written in the source
Used by 1 declaration in 1 file
- this file: goe_mx_diag_tail
forall {R : realType} [d : nat] (i : 'I_d) [s : R], 0 <= s -> (gauss (d * d) [set a | (s <= `|goe_mx a i i|)%R] <= (2 * expR (- (d%:R * s ^+ 2 / 4)))%:E)%E
Gaussian tails of the entries, of variance 2 / d on the diagonal and 1 / d off the diagonal.
Stated in the README together with goe_mx_mxdot.
Statement as written in the source
Used by 1 declaration in 1 file
- this file: goe_mx_diag_max_tail
forall {R : realType} [d : nat] [i j : 'I_d] [s : R], i != j -> 0 <= s -> (gauss (d * d) [set a | (s <= `|goe_mx a i j|)%R] <= (2 * expR (- (d%:R * s ^+ 2 / 2)))%:E)%E
Stated in the README together with goe_mx_mxdot.
Statement as written in the source
Used by 1 declaration in 1 file
- this file: goe_mx_offdiag_max_tail
forall {R : realType} [d : nat] (i : 'I_d) [u : R], 0 < u -> (gauss (d * d) [set a | (1 + u <= \sum_(j | j != i) goe_mx a i j ^+ 2)%R] <= (expR (- (d%:R * u ^+ 2 / (4 * (1 + u)))))%:E)%E
The squares of the row i off the diagonal sum to 1 / d times a chi-square with d - 1 degrees of freedom: their tail above 1 + u.
Stated in the README together with goe_mx_mxdot.
Statement as written in the source
Used by 1 declaration in 1 file
- this file: goe_mx_row_max_tail
forall {R : realType} [d : nat] (i j : 'I_d), measurable_fun [set: 'rV_(d * d)] (fun a : 'rV_(d * d) => goe_mx a i j)
Statement as written in the source
Lemma measurable_goe_entry (i j : 'I_d) : measurable_fun [set: 'rV[R]_(d * d)] (fun a => goe_mx a i j).
Used by 2 declarations in 1 file
- this file: measurable_goe_entry_ge, measurable_goe_row_ge
forall {R : realType} [d : nat] (i j : 'I_d) (c : R), (measure_matrix_display default_measure_display).-measurable [set a | c <= `|goe_mx a i j|]
Statement as written in the source
Lemma measurable_goe_entry_ge (i j : 'I_d) (c : R) : measurable [set a : 'rV[R]_(d * d) | c <= `|goe_mx a i j|]%R.
Used by 4 declarations in 1 file
forall {R : realType} [d : nat] (i : 'I_d) (c : R), (measure_matrix_display default_measure_display).-measurable [set a | c <= \sum_(j | j != i) goe_mx a i j ^+ 2]
Statement as written in the source
Lemma measurable_goe_row_ge (i : 'I_d) (c : R) : measurable [set a : 'rV[R]_(d * d) | c <= \sum_(j | j != i) goe_mx a i j ^+ 2]%R.
Used by 2 declarations in 1 file
- this file: measurable_goe_row_max, goe_mx_row_max_tail
forall {R : realType} [d : nat] (c : R), (measure_matrix_display default_measure_display).-measurable [set a | c <= opnorm (goe_mx a)]
Stated in the README together with goe_mx_diag_max_tail.
Statement as written in the source
Used by 1 declaration in 1 file
- GaussianApplications.SKGap.Disorder: sk_good_disorder_prob
forall {R : realType} [d : nat] (s : R), (measure_matrix_display default_measure_display).-measurable [set a | (exists i : 'I_d, s <= `|goe_mx a i i|)]
The events of the three maxima below are measurable.
Stated in the README together with goe_mx_diag_max_tail.
Statement as written in the source
Lemma measurable_goe_diag_max (s : R) : measurable [set a : 'rV[R]_(d * d) | exists i, s <= `|goe_mx a i i|]%R.
Used by 1 declaration in 1 file
- GaussianApplications.SKGap.Disorder: sk_good_disorder_prob
forall {R : realType} [d : nat] (s : R), (measure_matrix_display default_measure_display).-measurable [set a | (exists i j : 'I_d, i != j /\ s <= `|goe_mx a i j|)]
Stated in the README together with goe_mx_diag_max_tail.
Statement as written in the source
Lemma measurable_goe_offdiag_max (s : R) : measurable [set a : 'rV[R]_(d * d) | exists i j, i != j /\ s <= `|goe_mx a i j|]%R.
Used by 1 declaration in 1 file
- GaussianApplications.SKGap.Disorder: sk_good_disorder_prob
forall {R : realType} [d : nat] (c : R), (measure_matrix_display default_measure_display).-measurable [set a | (exists i : 'I_d, c <= \sum_(j | j != i) goe_mx a i j ^+ 2)]
Stated in the README together with goe_mx_diag_max_tail.
Statement as written in the source
Lemma measurable_goe_row_max (c : R) : measurable [set a : 'rV[R]_(d * d) | exists i, c <= \sum_(j | j != i) goe_mx a i j ^+ 2]%R.
Used by 1 declaration in 1 file
- GaussianApplications.SKGap.Disorder: sk_good_disorder_prob
forall {R : realType} (d : nat) [s : R], 0 <= s -> (gauss (d * d) [set a | (exists i : 'I_d, (s <= `|goe_mx a i i|)%R)] <= (2 * d%:R * expR (- (d%:R * s ^+ 2 / 4)))%:E)%E
The largest diagonal entry, the largest entry off the diagonal and the largest row sum of squares off the diagonal, by the union bound.
Union bounds over the entries and the rows: for s >= 0 and u > 0, P(max_i |W_ii| >= s) <= 2 d exp (- d s^2 / 4), P(max_(i != j) |W_ij| >= s) <= 2 d^2 exp (- d s^2 / 2) and P(max_i sum_(j != i) W_ij^2 >= 1 + u) <= d exp (- d u^2 / (4 (1 + u))). These events, and {opnorm W >= c} for every real c, are measurable.
Statement as written in the source
Used by 1 declaration in 1 file
- GaussianApplications.SKGap.Disorder: sk_good_disorder_prob
forall {R : realType} (d : nat) [s : R], 0 <= s -> (gauss (d * d) [set a | (exists i j : 'I_d, i != j /\ (s <= `|goe_mx a i j|)%R)] <= (2 * d%:R ^+ 2 * expR (- (d%:R * s ^+ 2 / 2)))%:E)%E
Stated in the README together with goe_mx_diag_max_tail.
Statement as written in the source
Used by 1 declaration in 1 file
- GaussianApplications.SKGap.Disorder: sk_good_disorder_prob
forall {R : realType} (d : nat) [u : R], 0 < u -> (gauss (d * d) [set a | (exists i : 'I_d, (1 + u <= \sum_(j | j != i) goe_mx a i j ^+ 2)%R)] <= (d%:R * expR (- (d%:R * u ^+ 2 / (4 * (1 + u)))))%:E)%E
Stated in the README together with goe_mx_diag_max_tail.
Statement as written in the source
Used by 1 declaration in 1 file
- GaussianApplications.SKGap.Disorder: sk_good_disorder_prob