On this page
Restricted isometry of matrices with independent psi_1 columns
Imports 8 library modules and 23 external
- GaussianAnalysis.matrix.euclidean
- GaussianAnalysis.matrix.opnorm
- GaussianAnalysis.matrix.nets
- GaussianAnalysis.gaussian.measurable_matrix
- GaussianAnalysis.probability.lindeberg
- GaussianAnalysis.probability.tuple_rows
- GaussianAnalysis.probability.subgaussian
- GaussianAnalysis.probability.conditioning
External: HB.structures, mathcomp.classical.all_ssreflect_compat, mathcomp.algebra.algebraic_hierarchy.ssralg, mathcomp.algebra.numeric_hierarchy.ssrnum, mathcomp.algebra.matrix, mathcomp.algebra.arithmetic_tactic, mathcomp.algebra.ring_tactic, mathcomp.algebra.field_tactic, mathcomp.classical.boolp, mathcomp.classical.classical_sets, mathcomp.classical.functions, mathcomp.reals.reals, mathcomp.analysis.ereal, mathcomp.analysis.topology_theory.topology, mathcomp.analysis.normedtype_theory.normedtype, mathcomp.analysis.sequences, mathcomp.analysis.exp, mathcomp.analysis.measure_theory.measure, mathcomp.analysis.lebesgue_measure, mathcomp.analysis.measurable_realfun, mathcomp.analysis.numfun, mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral, mathcomp.analysis.probability_theory.probability
Theorem 5.1 of Adamczak, Litvak, Pajor and Tomczak-Jaegermann (Constr. Approx. 2011, arXiv 0904.4723) at r = 1, with explicit constants: the off-diagonal part of the Gram matrix of independent centered psi_1 vectors is small on sparse vectors. Koehler and Sohn (arXiv 2608.27372, lines 2192-2221) cite it for the a priori estimates of their Proposition 3.1. With it, the norms of sparse combinations of independent subgaussian vectors (their second a priori estimate).
Setting: x_1, ..., x_N in 'rV[R]_n are the coordinates of x of law tuple_prod mu N, and every linear form <x_i, y>, |y| = 1, is centered and subexponential with constant psi under mu i. The rows of tuple_mx x are the x_i, so u *m tuple_mx x = sum_i u_i x_i.
tuple_ | the N x n matrix with rows x_1, ..., x_N |
supp u | the support of u : 'rV[R]_N |
restr E u | u restricted to the coordinates in E |
gram_ | <u X, v X> - sum_i u_i v_i |x_i|^2, the off-diagonal part of the Gram form, sum_(i <> j) u_i v_j <x_i, x_j> |
maxnorm x | max_i |x_i| |
sparse_ | the m-sparse vectors of norm at most 1 |
rip_ | B_m^2 = sup over sparse_ball m of |gram_off x u u| |
rip_ | 2100 K psi sqrt m (ln (e N / m) + ln (1 / beta)) |
sqnorm_ | max_i | |x_i|^2 - 1 | |
sparse_ | the vector supported in F with coordinates w, for w : 'cV_#|F| (in the order of enum_val) |
sparse_ | the coordinates of z in F |
tuple_ | the n x |F| matrix with columns x_i, i in F |
sphere_ | a 1/4-net of the unit sphere of 'cV_k of size at most (18 e)^k |
sparse_ | 8 K sqrt (m (1 + ln (N / m)) + 6 (m + n) + s) |
Main results:
- restricted_isometry: for 1 <= m <= N, 0 < beta <= 1/2 and K >= 1, there is a measurable event G with P(not G) <= 2 (log_4 m + 2) exp (- K sqrt m ln (e N / m)) on which B_m^2 <= 256 T^2 + 32 T C + 8 beta C^2, T = rip_T beta K and C = maxnorm x. Hence |u X|^2 - sum_i u_i^2 |x_i|^2 is at most this bound times |u|^2 for every m-sparse u (gram_off_rip).
- sparse_isometry_dev: | |u X|^2 - |u|^2 | <= (B_m^2 + sqnorm_dev x) |u|^2 for every m-sparse u, which bounds the restricted isometry constant.
- tuple_mx_blocks: if |u X| <= L |u| for every m-sparse u, then |u X| <= L sqrt (N %/ m + 1) |u| for every u (blocks of m indices).
- sparse_norm_subgaussian: if the linear forms of the x_i are centered and subgaussian with constant K, then with probability at least 1 - 2 exp (- s), |u X| <= sparse_norm_bound m s |u| for every m-sparse u: Hoeffding's inequality for a fixed pair (tuple_mx_dot_tail), nets of both unit spheres (tuple_submx_net) and a union bound over the supports.
The proof of restricted_isometry, after ALPT with value levels instead of sorted coordinates:
- cross_tail: for a and b with disjoint supports, |a| <= 1 and |a_i| <= al, P(|<a X, b X>| > t |b X|) <= 2 exp (- min (t^2 / (64 psi^2), t / (4 al psi))), by Bernstein's inequality conditionally on the vectors in the support of b (tuple_prod_cond_le of conditioning.v);
- gram_off_decouple: the off-diagonal form is an average of decoupled forms <restr E y X, restr (F \ E) y X> over the subsets E of F;
- the levels of z: level k collects the coordinates with 4^(k-1) < m z_i^2 <= 4^k; it has at most lsize k elements, each at most alpha k = 2^k / sqrt m (level_size, level_alpha), and z is the sum of its restrictions to the levels (level_sum);
- sparse_net: nets of the vectors supported in F with sup norm at most al, of size exponential in |F|; small_sets_le: there are at most (e N / s)^s sets of size at most s;
- rip_const_le: if every decoupled diagonal term of level k and every term of level k against the levels above (upper) is at most t k times the norm of its second vector, then B_m^2 <= 256 T^2 + 32 T C + 8 beta C^2 with T = sum_k t k (the approximation by nets, the triangular expansion gram_off_tri and the bound A_m^2 <= B_m^2 + C^2 in place of the A_m of ALPT);
- bad_event_le, conf_size, tk_exp: the union bound over the finite lists wconf k and xconf k of configurations, whose sizes are at most 2 exp (2 H_k) with H_k = (4 m / 4^k) (9 + ln (N / m) - ln beta + 3 k) (ccount_le); tk_sum: the thresholds t k sum to at most rip_T beta K.
Main results
| Results | Statement |
|---|---|
Theorem 5.1 of Adamczak, Litvak, Pajor and Tomczak-Jaegermann at r = 1, with explicit constants. Let x_1, ..., x_N in 'rV[R]_n be independent (tuple_prod mu N), with every linear form <x_i, y>, |y| = 1, centered and subexponential with constant psi. For 1 <= m <= N, 0 < beta <= 1/2 and K >= 1, outside a measurable event of probability at most 2 (log_4 m + 2) exp (- K sqrt m (1 + ln (N / m))), every m-sparse u of norm at most one satisfies ||sum_i u_i x_i|^2 - sum_i u_i^2 |x_i|^2| <= 256 T^2 + 32 T C + 8 beta C^2, where T = 2100 K psi sqrt m (1 + ln (N / m) - ln beta) and C = max_i |x_i|. | |
With B^2 = rip_const m x (the supremum above) and C = max_i |x_i|, for all m-sparse u and v: |gram_off x u u| <= B^2 |u|^2, |sum_i u_i x_i| <= sqrt (B^2 + C^2) |u| and |gram_off x u v| <= (B^2 + 2 C^2) |u| |v|, where gram_off x u v = sum_(i <> j) u_i v_j <x_i, x_j>. | |
For a and b in 'rV[R]_N with disjoint supports, |a| <= 1 and |a_i| <= al for all i, and t > 0: P(|<sum_i a_i x_i, sum_j b_j x_j>| > t |sum_j b_j x_j|) <= 2 exp (- min (t^2 / (64 psi^2), t / (4 al psi))), by Bernstein's inequality conditionally on the vectors in the support of b. | |
Decoupling: if y is supported in F and |<sum_(i in E) y_i x_i, sum_(j in F \ E) y_j x_j>| <= c for every E included in F, then |gram_off x y y| <= 4 c. Nets: the vectors supported in F with norm at most one and coordinates at most al have an eps-net of at most (2 e (1 + 2 / eps))^|F| points. Counting: there are at most (e N / s)^s subsets of {1, ..., N} with at most s elements, for 1 <= s <= N. | |
The restricted isometry constant: for every m-sparse u, ||sum_i u_i x_i|^2 - |u|^2| <= (rip_const m x + max_i ||x_i|^2 - 1|) |u|^2. Blocks: if |sum_i u_i x_i| <= L |u| for every m-sparse u, then |sum_i u_i x_i| <= L sqrt (N / m + 1) |u| for every u (deterministic). | |
Norms of sparse combinations of independent subgaussian vectors: if x_1, ..., x_N in 'rV[R]_n are independent (tuple_prod mu N) with every linear form <x_i, y>, |y| = 1, centered and subgaussian with constant K, then for 1 <= m <= N and s >= 0, outside a measurable event of probability at most 2 exp (- s), every m-sparse u satisfies |sum_i u_i x_i| <= 8 K sqrt (m (1 + ln (N / m)) + 6 (m + n) + s) |u| (Vershynin's Theorem 4.4.5 with a union bound over the supports). For unit a and y, P(|<sum_i a_i x_i, y>| >= t) <= 2 exp (- t^2 / (16 K^2)). |
Declarations153 exported, 5 local
Context {R : realType} (N n : nat). Implicit Types (x : N.-tuple 'rV[R]_n) (u v a b : 'rV[R]_N).
forall {R : realType} [N n : nat], N.-tuple 'rV_n -> 'M_(N, n)Definition tuple_mx x : 'M[R]_(N, n) := \matrix_(i, j) (tnth x i) 0 j.
The N x n matrix whose rows are the vectors of x: u *m tuple_mx x is the combination sum_i u_i x_i.
Used by 20 declarations in 1 file
- this file: gram_off, tuple_mxE, mxdot_tuple_mx, gram_off_disj, measurable_tuple_mx_comb, cross_event, measurable_cross_event, cross_tail, gram_off_decouple, tuple_mx_rip, gram_off_rip2, gram_off_ball, rip_good, sparse_isometry_dev, tuple_mx_blocks, tuple_submx_mul, tuple_submx_proj, tuple_submx_net, tuple_mx_dot_tail, sparse_norm_subgaussian
forall {R : realType} [N : nat], 'rV_N -> {set 'I_N}Definition supp u : {set 'I_N} := [set i | u 0 i != 0].
Used by 21 declarations in 1 file
- this file: supp_restr, restr_supp, card_supp0, gram_off_decouple, sball, sparse_emb_proj, sparse_proj_dot, sparse_ball, supp_scale, gram_off_rip, tuple_mx_rip, gram_off_rip2, level_supp, level_size, supportedP, supported_card, gram_off_ball, sparse_isometry_dev, tuple_mx_blocks, tuple_submx_proj, sparse_norm_subgaussian
forall {R : realType} [N : nat], {set 'I_N} -> 'rV_N -> 'rV_NDefinition restr (E : {set 'I_N}) u : 'rV[R]_N := \row_i (if i \in E then u 0 i else 0).
Used by 16 declarations in 1 file
forall {R : realType} [N n : nat], N.-tuple 'rV_n -> 'rV_N -> 'rV_N -> RDefinition gram_off x u v : R := mxdot (u *m tuple_mx x) (v *m tuple_mx x) - \sum_i u 0 i * v 0 i * mxdot (tnth x i) (tnth x i).
The off-diagonal part of the Gram form: <u X, v X> - sum_i u_i v_i |x_i|^2, that is sum_(i <> j) u_i v_j <x_i, x_j>.
Used by 19 declarations in 1 file
forall {R : realType} [N n : nat], N.-tuple 'rV_n -> RDefinition maxnorm x : R := \big[Num.max/0]_i frobenius (tnth x i).
Used by 8 declarations in 1 file
- this file: maxnorm_ge0, diag_part_le, tuple_mx_rip, gram_off_rip2, gram_off_ball, rip_const_le, rip_good, restricted_isometry
forall {R : realType} [N n : nat] (x : N.-tuple 'rV_n) (u : 'rV_N), u *m tuple_mx x = \sum_i u 0 i *: tnth x i
Statement as written in the source
Lemma tuple_mxE x u : u *m tuple_mx x = \sum_i u 0 i *: tnth x i.
Used by 4 declarations in 1 file
- this file: mxdot_tuple_mx, measurable_tuple_mx_comb, cross_tail, tuple_mx_dot_tail
forall {R : realType} [N n : nat] (x : N.-tuple 'rV_n) (u v : 'rV_N), mxdot (u *m tuple_mx x) (v *m tuple_mx x) = \sum_i \sum_j u 0 i * v 0 j * mxdot (tnth x i) (tnth x j)
Statement as written in the source
Used by 2 declarations in 1 file
- this file: gram_offE, gram_off_decouple
forall {R : realType} [N n : nat] (x : N.-tuple 'rV_n) (u v : 'rV_N), gram_off x u v = \sum_i \sum_(j | j != i) u 0 i * v 0 j * mxdot (tnth x i) (tnth x j)
Statement as written in the source
Used by 2 declarations in 1 file
- this file: gram_off_decouple, has_sup_rip
Used by 1 declaration in 1 file
- this file: tuple_mx_blocks
forall {R : realType} [N : nat] (E : {set 'I_N}) (u : 'rV_N) (i : 'I_N), restr E u 0 i = (if i \in E then u 0 i else 0)
Statement as written in the source
Lemma restrE E u i : restr E u 0 i = if i \in E then u 0 i else 0.
Used by 8 declarations in 1 file
Statement as written in the source
Used by 1 declaration in 1 file
- this file: gram_off_ball
forall {R : realType} [N n : nat] (x : N.-tuple 'rV_n), 0 <= maxnorm x
Statement as written in the source
Lemma maxnorm_ge0 x : 0 <= maxnorm x.
Used by 5 declarations in 1 file
- this file: diag_part_le, tuple_mx_rip, gram_off_ball, rip_const_le, restricted_isometry
forall {R : realType} (N : nat), #|supp (0 : 'rV_N)| = 0%N
Statement as written in the source
Lemma card_supp0 : #|supp (0 : 'rV[R]_N)| = 0%N.
Used by 2 declarations in 1 file
- this file: has_sup_rip, rip_const_ge0
forall {R : realType} [N : nat], 'rV_N -> 'rV_N -> Prop
Definition disj u v := forall i, u 0 i = 0 \/ v 0 i = 0.
u and v have disjoint supports.
Used by 8 declarations in 1 file
- this file: gram_off_disj, cross_tail, disj_supported, mxdot_disj, mxdot_sum_disj, gram_off_ball, conf_ok, tuple_mx_blocks
Context {R : realType} (N n : nat).
forall {R : realType} [N n : nat] (a : 'rV_N), measurable_fun [set: N.-tuple 'rV_n] (fun x : N.-tuple _ => a *m tuple_mx x)
Statement as written in the source
Lemma measurable_tuple_mx_comb (a : 'rV[R]_N) : measurable_fun [set: N.-tuple 'rV[R]_n] (fun x => a *m tuple_mx x).
Used by 2 declarations in 1 file
- this file: measurable_cross_event, sparse_norm_subgaussian
forall {R : realType} [N n : nat] [f g : N.-tuple 'rV_n -> 'rV_n], measurable_fun [set: N.-tuple _] f -> measurable_fun [set: N.-tuple _] g -> measurable_fun [set: N.-tuple 'rV_n] (fun x : N.-tuple _ => mxdot (f x) (g x))
Statement as written in the source
Lemma measurable_mxdot_comb (f g : N.-tuple 'rV[R]_n -> 'rV[R]_n) : measurable_fun setT f -> measurable_fun setT g -> measurable_fun [set: N.-tuple 'rV[R]_n] (fun x => mxdot (f x) (g x)).
Used by 2 declarations in 1 file
- this file: measurable_cross_event, sparse_norm_subgaussian
forall {R : realType} [N n : nat], R -> 'rV_N -> 'rV_N -> set (N.-tuple 'rV_n)
Definition cross_event (t : R) (a b : 'rV[R]_N) : set (N.-tuple 'rV[R]_n) := [set x | t * frobenius (b *m tuple_mx x) < `|mxdot (a *m tuple_mx x) (b *m tuple_mx x)|].
The event that <a X, b X> exceeds t |b X|.
Used by 3 declarations in 1 file
- this file: measurable_cross_event, cross_tail, bad_event
forall {R : realType} [N n : nat] [t : join_Num_POrderNmodule_between_Algebra_BaseAddUMagma_and_Order_Preorder R] (a b : 'rV_N), 0 <= t -> (measure_tuple_display (measure_matrix_display default_measure_display)).-measurable (cross_event t a b)
Statement as written in the source
Lemma measurable_cross_event t a b : 0 <= t -> measurable (cross_event t a b).
Used by 3 declarations in 1 file
- this file: cross_tail, measurable_bad_event, bad_event_le
Context {R : realType} (N n : nat) (mu : nat -> probability 'rV[R]_n R) (psi : R). Hypothesis psi0 : 0 < psi.
The columns are centered psi_1 vectors.
Hypothesis sub : forall i (y : 'rV[R]_n), (i < N)%N -> mxdot y y = 1 -> subexponential (mu i) (fun v => mxdot v y) psi. Hypothesis cen : forall i (y : 'rV[R]_n), (i < N)%N -> mxdot y y = 1 -> \int[mu i]_v mxdot v y = 0.
Let coef (a : 'rV[R]_N) (k : nat) : R := if insub k is Some i then a 0 i else 0.
Used by 2 declarations in 1 file
- this file: coefE, cross_tail
Let coefE (a : 'rV[R]_N) (i : 'I_N) : coef a i = a 0 i.
Used by 1 declaration in 1 file
- this file: cross_tail
forall {R : realType} [N n : nat] [mu : nat -> probability 'rV_n R] [psi : R], 0 < psi -> (forall (i : nat) (y : 'rV_n), (i < N)%N -> mxdot y y = 1 -> subexponential (mu i) ((mxdot (n:=n))^~ y) psi) -> (forall (i : nat) (y : 'rV_n), (i < N)%N -> mxdot y y = 1 -> \int[mu i]_v mxdot v y = 0) -> forall [a b : 'rV_N] [al t : R], disj a b -> mxdot a a <= 1 -> (forall i : 'I_N, `|a 0 i| <= al) -> 0 < t -> (tuple_prod mu N (cross_event t a b) <= (2 * expR (- minr (t ^+ 2 / (64 * psi ^+ 2)) (t / (4 * (al * psi)))))%:E)%E
Conditionally on the vectors in the support of b, <a X, b X> is a sum of independent centered psi_1 variables: Bernstein's inequality.
For a and b in 'rV[R]_N with disjoint supports, |a| <= 1 and |a_i| <= al for all i, and t > 0: P(|<sum_i a_i x_i, sum_j b_j x_j>| > t |sum_j b_j x_j|) <= 2 exp (- min (t^2 / (64 psi^2), t / (4 al psi))), by Bernstein's inequality conditionally on the vectors in the support of b.
Statement as written in the source
Lemma cross_tail (a b : 'rV[R]_N) (al t : R) : disj a b -> mxdot a a <= 1 -> (forall i, `|a 0 i| <= al) -> 0 < t -> (tuple_prod mu N (cross_event t a b) <= (2 * expR (- Num.min (t ^+ 2 / (64 * psi ^+ 2)) (t / (4 * (al * psi)))))%:E)%E.
Used by 1 declaration in 1 file
- this file: bad_event_le
Context {R : realType} (N n : nat). Implicit Types (x : N.-tuple 'rV[R]_n) (y : 'rV[R]_N).
forall {R : realType} [N : nat] [i j : 'I_N],
i != j -> 4 * \sum_f ((f i && ~~ f j)%:R : R) = 2 ^+ NFor i <> j, a uniform random subset contains i and not j with probability 1/4.
Statement as written in the source
Lemma sum_ffun_sel (i j : 'I_N) : i != j -> 4 * \sum_(f : {ffun 'I_N -> bool}) ((f i && ~~ f j)%:R : R) = 2 ^+ N.
Used by 1 declaration in 1 file
- this file: gram_off_decouple
forall {R : realType} [N n : nat] [x : N.-tuple 'rV_n] [F : {set 'I_N}] [y : 'rV_N] [c : R], supp y \subset F -> (forall E : {set 'I_N}, E \subset F -> `|mxdot (restr E y *m tuple_mx x) (restr (F :\: E) y *m tuple_mx x)| <= c) -> `|gram_off x y y| <= 4 * c
The off-diagonal Gram form is an average of decoupled forms.
Decoupling: if y is supported in F and |<sum_(i in E) y_i x_i, sum_(j in F \ E) y_j x_j>| <= c for every E included in F, then |gram_off x y y| <= 4 c. Nets: the vectors supported in F with norm at most one and coordinates at most al have an eps-net of at most (2 e (1 + 2 / eps))^|F| points. Counting: there are at most (e N / s)^s subsets of {1, ..., N} with at most s elements, for 1 <= s <= N.
Statement as written in the source
Used by 1 declaration in 1 file
- this file: gram_off_ball
Context {R : realType} (N : nat).
forall {R : realType} [N : nat], {set 'I_N} -> R -> set 'rV_N
Definition sball (F : {set 'I_N}) (al : R) : set 'rV[R]_N := [set y | [/\ supp y \subset F, mxdot y y <= 1 & forall i, `|y 0 i| <= al]].
The vectors supported in F of norm at most 1 with coordinates at most al in absolute value.
Used by 3 declarations in 1 file
- this file: sparse_net, gram_off_ball, net_spec
Variable F : {set 'I_N}.
forall {R : realType} [N : nat] [F : {set 'I_N}], 'cV_#|F| -> 'rV_NDefinition sparse_emb (w : 'cV[R]_#|F|) : 'rV[R]_N := \sum_j w j 0 *: delta_mx 0 (enum_val j).
The coordinates of F, in the order of enum_val.
Used by 10 declarations in 1 file
forall {R : realType} [N : nat] (F : {set 'I_N}), 'rV_N -> 'cV_#|F|Definition sparse_proj (z : 'rV[R]_N) : 'cV[R]_#|F| := \col_j z 0 (enum_val j).
Used by 5 declarations in 1 file
forall {R : realType} [N : nat] [F : {set 'I_N}] (w : 'cV_#|F|) (i : 'I_N), sparse_emb w 0 i = \sum_j w j 0 * (enum_val j == i)%:R
Statement as written in the source
Lemma sparse_embE w i : sparse_emb w 0 i = \sum_j w j 0 * (enum_val j == i)%:R.
Used by 4 declarations in 1 file
- this file: sparse_emb_val, sparse_emb_out, sparse_emb_proj, tuple_submx_mul
forall {R : realType} [N : nat] [F : {set 'I_N}] (w : 'cV_#|F|) (j : 'I_#|[eta F]|), sparse_emb w 0 (enum_val j) = w j 0
Statement as written in the source
Lemma sparse_emb_val w j : sparse_emb w 0 (enum_val j) = w j 0.
Used by 2 declarations in 1 file
- this file: sparse_emb_dot, sparse_net
forall {R : realType} [N : nat] [F : {set 'I_N}] (w : 'cV_#|F|) [i : 'I_N], i \notin F -> sparse_emb w 0 i = 0
Statement as written in the source
Lemma sparse_emb_out w i : i \notin F -> sparse_emb w 0 i = 0.
Used by 2 declarations in 1 file
- this file: sparse_emb_dot, sparse_net
forall {R : realType} [N : nat] [F : {set 'I_N}] (w w' : 'cV_#|F|), mxdot (sparse_emb w) (sparse_emb w') = mxdot w w'
Statement as written in the source
Lemma sparse_emb_dot w w' : mxdot (sparse_emb w) (sparse_emb w') = mxdot w w'.
Used by 3 declarations in 1 file
- this file: sparse_proj_dot, sparse_net, sparse_norm_subgaussian
forall {R : realType} [N : nat] [F : {set 'I_N}] [z : 'rV_N], supp z \subset F -> sparse_emb (sparse_proj F z) = z
Statement as written in the source
Lemma sparse_emb_proj z : supp z \subset F -> sparse_emb (sparse_proj z) = z.
Used by 3 declarations in 1 file
- this file: sparse_proj_dot, sparse_net, tuple_submx_proj
forall {R : realType} [N : nat] [F : {set 'I_N}] (w w' : 'cV[R]_#|F|), sparse_emb (w - w') = sparse_emb w - sparse_emb w'
Statement as written in the source
Lemma sparse_embB w w' : sparse_emb (w - w') = sparse_emb w - sparse_emb w'.
Used by 1 declaration in 1 file
- this file: sparse_net
forall {R : realType} [N : nat] [F : {set 'I_N}] [z : 'rV_N], supp z \subset F -> mxdot (sparse_proj F z) (sparse_proj F z) = mxdot z z
Statement as written in the source
Lemma sparse_proj_dot z : supp z \subset F -> mxdot (sparse_proj z) (sparse_proj z) = mxdot z z.
Used by 2 declarations in 1 file
- this file: sparse_net, sparse_norm_subgaussian
forall {R : realType} [N : nat] (F : {set 'I_N}) [al eps : R], 0 <= al -> 0 < eps -> exists S0 : seq 'rV_N, [/\ forall y : 'rV[R]_N, y \in S0 -> sball F al y, forall z : 'rV_N, sball F al z -> exists2 y : 'rV[R]_N, y \in S0 & mxdot (z - y) (z - y) <= eps ^+ 2 & (size S0)%:R <= (2 * expR 1 * (1 + 2 / eps)) ^+ #|F|]
A net of the sparse vectors supported in F, of size exponential in |F|.
Stated in the README together with gram_off_decouple.
Statement as written in the source
Used by 1 declaration in 1 file
- this file: netP
Context {R : realType}.
forall N s : nat, #|[set F | (#|F| <= s)%N]%SET| = (\sum_(j < s.+1) 'C(N, j))%NStatement as written in the source
Lemma card_small_sets N s : #|[set F : {set 'I_N} | (#|F| <= s)%N]%SET| = (\sum_(j < s.+1) 'C(N, j))%N.
Used by 2 declarations in 1 file
- this file: small_sets_le, ccount_le
forall {R : realType} [N s : nat], (0 < s)%N -> (s <= N)%N -> (#|[set F | (#|F| <= s)%N]%SET|%:R : R) <= ((expR 1 * N%:R / s%:R) ^+ s : R)
There are at most (e N / s)^s subsets of size at most s.
Stated in the README together with gram_off_decouple.
Statement as written in the source
Lemma small_sets_le N s : (0 < s)%N -> (s <= N)%N -> (#|[set F : {set 'I_N} | (#|F| <= s)%N]%SET|)%:R <= (expR 1 * N%:R / s%:R) ^+ s :> R.
Used by 2 declarations in 1 file
- this file: ccount_le, sparse_norm_subgaussian
Context {R : realType} (N n : nat) (x : N.-tuple 'rV[R]_n). Implicit Types (u v w : 'rV[R]_N).
forall {R : realType} [N n : nat] (x : N.-tuple 'rV_n) (u v : 'rV_N), gram_off x u v = gram_off x v u
Used by 4 declarations in 1 file
- this file: gram_offDr, gram_off_sumr, gram_off_rip, gram_off_tri
forall {R : realType} [N n : nat] (x : N.-tuple 'rV_n) (u v w : 'rV_N), gram_off x (u + v) w = gram_off x u w + gram_off x v w
Statement as written in the source
Used by 4 declarations in 1 file
- this file: gram_off_suml, gram_offDr, gram_off_tri, gram_off_ball
forall {R : realType} [N n : nat] (x : N.-tuple 'rV_n) (a : R) (u w : 'rV_N), gram_off x (a *: u) w = a * gram_off x u w
Statement as written in the source
Used by 2 declarations in 1 file
- this file: gram_off0l, gram_off_rip
forall {R : realType} [N n : nat] (x : N.-tuple 'rV_n) (w : 'rV_N), gram_off x 0 w = 0
Statement as written in the source
Lemma gram_off0l w : gram_off x 0 w = 0.
Used by 3 declarations in 1 file
- this file: gram_off_suml, gram_off_rip, gram_off_tri
forall {R : realType} [N n : nat] (x : N.-tuple 'rV_n) [I : Type] (r : seq I) (P : pred I) (F : I -> 'rV_N) (w : 'rV_N), gram_off x (\sum_(i <- r | P i) F i) w = \sum_(i <- r | P i) gram_off x (F i) w
Statement as written in the source
Used by 1 declaration in 1 file
- this file: gram_off_sumr
forall {R : realType} [N n : nat] (x : N.-tuple 'rV_n) (u v w : 'rV_N), gram_off x u (v + w) = gram_off x u v + gram_off x u w
Statement as written in the source
Used by 2 declarations in 1 file
- this file: gram_off_tri, gram_off_ball
forall {R : realType} [N n : nat] (x : N.-tuple 'rV_n) (u v : 'rV_N), `|\sum_i u 0 i * v 0 i * mxdot (tnth x i) (tnth x i)| <= maxnorm x ^+ 2 * (frobenius u * frobenius v)
The diagonal part is bounded by the largest squared norm of the x_i.
Statement as written in the source
Used by 2 declarations in 1 file
- this file: tuple_mx_rip, gram_off_rip2
Context {R : realType} (N n m : nat) (x : N.-tuple 'rV[R]_n).
forall {R : realType} [N : nat], nat -> set 'rV_N
The m-sparse vectors of the unit ball.
Used by 4 declarations in 1 file
- this file: rip_const, has_sup_rip, gram_off_rip, gram_off_ball
forall {R : realType} [N n : nat], nat -> N.-tuple 'rV_n -> RDefinition rip_const : R := sup [set `|gram_off x u u| | u in sparse_ball].
B_m^2 of Adamczak, Litvak, Pajor and Tomczak-Jaegermann: the largest off-diagonal part of |sum_i u_i x_i|^2 over the m-sparse unit vectors.
Stated in the README together with restricted_isometry.
Used by 9 declarations in 1 file
forall {R : realType} [N n : nat] (m : nat) (x : N.-tuple 'rV_n), has_sup [set `|gram_off x u u| | u in sparse_ball m]
Statement as written in the source
Lemma has_sup_rip : has_sup [set `|gram_off x u u| | u in sparse_ball].
Used by 3 declarations in 1 file
- this file: rip_const_ge0, gram_off_rip, rip_const_le
forall {R : realType} [N n : nat] (m : nat) (x : N.-tuple 'rV_n), 0 <= rip_const m x
Statement as written in the source
Lemma rip_const_ge0 : 0 <= rip_const.
Used by 4 declarations in 1 file
- this file: tuple_mx_rip, gram_off_rip2, gram_off_ball, rip_const_le
Statement as written in the source
Used by 1 declaration in 1 file
- this file: gram_off_rip
forall {R : realType} [N n m : nat] (x : N.-tuple 'rV_n) [u : 'rV_N], (#|supp u| <= m)%N -> `|gram_off x u u| <= rip_const m x * mxdot u u
Homogeneity: |gram_off x u u| <= B_m^2 |u|^2 for every m-sparse u.
With B^2 = rip_const m x (the supremum above) and C = max_i |x_i|, for all m-sparse u and v: |gram_off x u u| <= B^2 |u|^2, |sum_i u_i x_i| <= sqrt (B^2 + C^2) |u| and |gram_off x u v| <= (B^2 + 2 C^2) |u| |v|, where gram_off x u v = sum_(i <> j) u_i v_j <x_i, x_j>.
Statement as written in the source
Used by 2 declarations in 1 file
- this file: tuple_mx_rip, sparse_isometry_dev
forall {R : realType} [N n m : nat] (x : N.-tuple 'rV_n) [u : 'rV_N], (#|supp u| <= m)%N -> frobenius (u *m tuple_mx x) <= Num.ExtraDef.sqrtr (rip_const m x + maxnorm x ^+ 2) * frobenius u
Stated in the README together with gram_off_rip.
Statement as written in the source
Used by 2 declarations in 1 file
- this file: gram_off_rip2, gram_off_ball
forall {R : realType} [N n m : nat] (x : N.-tuple 'rV_n) [u v : 'rV_N], (#|supp u| <= m)%N -> (#|supp v| <= m)%N -> `|gram_off x u v| <= (rip_const m x + 2 * maxnorm x ^+ 2) * (frobenius u * frobenius v)
Stated in the README together with gram_off_rip.
Statement as written in the source
Used by 1 declaration in 1 file
- this file: gram_off_ball
Context {R : realType} (N m : nat). Implicit Types (z : 'rV[R]_N).
forall {R : realType}, nat -> R
Definition lvl_lo (k : nat) : R := if k is k'.+1 then 4 ^+ k' else 0.
Level k of z collects the coordinates with 4^(k-1) < m z_i^2 <= 4^k (0 < m z_i^2 <= 1 for k = 0): it has at most lsize k elements, each at most alpha k = 2^k / sqrt m in absolute value.
Used by 3 declarations in 1 file
- this file: level, lvl_lo_ge0, level_uniq
forall {R : realType} [N : nat], nat -> 'rV_N -> nat -> {set 'I_N}Definition level z k : {set 'I_N} := [set i | lvl_lo k < m%:R * z 0 i ^+ 2 <= 4 ^+ k].
Used by 7 declarations in 1 file
- this file: level_supp, level_uniq, level_cover, level_size, level_alpha, level_sum, gram_off_ball
nat -> nat -> nat
Definition lsize k : nat := if k is k'.+1 then (m %/ 4 ^ k')%N else m.
Used by 16 declarations in 1 file
- this file: level_size, upper, gram_off_ball, wconf, allnet, xconf, mem_wconf, mem_xconf, mem_allnet, upper_vlist, ccount, ccount_ge1, size_wconf, size_allnet, size_xconf, ccount_le
forall {R : realType}, nat -> nat -> RDefinition alpha k : R := 2 ^+ k / Num.sqrt m%:R.
Used by 10 declarations in 1 file
- this file: level_alpha, gram_off_ball, alpha_ge0, net_spec, conf_ok, bad_event_le, tk, tk_gt0, tk_exp, tk_sum
forall {R : realType} (k : nat), 0 <= lvl_lo k
Statement as written in the source
Lemma lvl_lo_ge0 k : 0 <= lvl_lo k.
Used by 1 declaration in 1 file
- this file: level_supp
Used by 2 declarations in 1 file
- this file: level_size, gram_off_ball
forall {R : realType} [N m : nat] [z : 'rV_N] [k k' : nat] [i : 'I_N], i \in level m z k -> i \in level m z k' -> k = k'
Statement as written in the source
Used by 2 declarations in 1 file
- this file: level_sum, gram_off_ball
forall {R : realType} [N m : nat] [z : 'rV_N] [l : nat], (0 < m)%N -> mxdot z z <= 1 -> (m <= 4 ^ l)%N -> forall [i : 'I_N], z 0 i != 0 -> exists2 k : nat, (k <= l)%N & i \in level m z k
Statement as written in the source
Used by 1 declaration in 1 file
- this file: level_sum
forall {R : realType} [N m : nat] [z : 'rV_N] (k : nat), (#|supp z| <= m)%N -> mxdot z z <= 1 -> (#|level m z k| <= lsize m k)%N
Statement as written in the source
Used by 1 declaration in 1 file
- this file: gram_off_ball
forall {R : realType} [N m : nat] [z : 'rV_N] [k : nat] [i : 'I_N], (0 < m)%N -> i \in level m z k -> `|z 0 i| <= alpha m k
Statement as written in the source
Used by 1 declaration in 1 file
- this file: gram_off_ball
forall {R : realType} [N m : nat] [z : 'rV_N] [l : nat], (0 < m)%N -> mxdot z z <= 1 -> (m <= 4 ^ l)%N -> z = \sum_(k < l.+1) restr (level m z k) z
Statement as written in the source
Used by 1 declaration in 1 file
- this file: gram_off_ball
Context {R : realType} (N : nat). Implicit Types (u v : 'rV[R]_N) (S : {set 'I_N}).
forall {R : realType} [N : nat], {set 'I_N} -> 'rV_N -> Prop
Definition supported S u := forall i, i \notin S -> u 0 i = 0.
u vanishes outside S.
Used by 9 declarations in 1 file
Used by 3 declarations in 1 file
- this file: supported_card, gram_off_ball, conf_ok
forall {R : realType} [N : nat] [I : Type] (r : seq I) [P : pred I] [F : I -> 'rV_N] [S0 : {set 'I_N}], (forall i : I, P i -> supported S0 (F i)) -> supported S0 (\sum_(i <- r | P i) F i)
Statement as written in the source
Used by 1 declaration in 1 file
- this file: gram_off_ball
forall {R : realType} [N : nat] [S0 : {set 'I_N}] [u v : 'rV_N], supported S0 u -> supported S0 v -> supported S0 (u - v)
Statement as written in the source
Used by 1 declaration in 1 file
- this file: gram_off_ball
forall {R : realType} [N : nat] [S0 : {set 'I_N}] (E : {set 'I_N}) [u : 'rV_N], supported S0 u -> supported S0 (restr E u)
Statement as written in the source
Used by 1 declaration in 1 file
- this file: gram_off_ball
Used by 1 declaration in 1 file
- this file: gram_off_ball
forall {R : realType} [N : nat] [S0 S' : {set 'I_N}] [u : 'rV_N], S0 \subset S' -> supported S0 u -> supported S' u
Statement as written in the source
Used by 1 declaration in 1 file
- this file: gram_off_ball
forall {R : realType} [N : nat] [S0 : {set 'I_N}] [u : 'rV_N] [m : nat], supported S0 u -> (#|S0| <= m)%N -> (#|supp u| <= m)%N
Statement as written in the source
Used by 1 declaration in 1 file
- this file: gram_off_ball
forall {R : realType} [N : nat] [S0 S' : {set 'I_N}] [u v : 'rV_N], supported S0 u -> supported S' v -> (forall i : 'I_N, i \in S0 -> i \in S' -> False) -> disj u v
Statement as written in the source
Used by 1 declaration in 1 file
- this file: gram_off_ball
Used by 1 declaration in 1 file
- this file: mxdot_sum_disj
forall {R : realType} [N : nat] (E : {set 'I_N}) (u : 'rV_N), mxdot (restr E u) (restr E u) <= mxdot u u
Statement as written in the source
Used by 2 declarations in 1 file
- this file: gram_off_ball, conf_ok
forall {R : realType} [N : nat] [I : eqType] [r : seq I] [F : I -> 'rV_N], uniq r -> (forall i j : I, i != j -> disj (F i) (F j)) -> mxdot (\sum_(i <- r) F i) (\sum_(i <- r) F i) = \sum_(i <- r) mxdot (F i) (F i)
Pythagoras for vectors with pairwise disjoint supports.
Statement as written in the source
Used by 2 declarations in 1 file
- this file: gram_off_ball, tuple_mx_blocks
Context {R : realType} (N n : nat) (x : N.-tuple 'rV[R]_n).
forall {R : realType} [N n : nat] (x : N.-tuple 'rV_n) (a : nat -> 'rV_N) [k L : nat], (k <= L)%N -> gram_off x (\sum_(k <= r < L) a r) (\sum_(k <= r < L) a r) = \sum_(k <= j < L) (gram_off x (a j) (a j) + 2 * gram_off x (a j) (\sum_(j.+1 <= r < L) a r))
The form of a sum: the diagonal terms and twice the terms of each vector against the sum of the later ones.
Statement as written in the source
Used by 1 declaration in 1 file
- this file: gram_off_ball
Context {R : realType} (N n m l : nat) (x : N.-tuple 'rV[R]_n). Hypotheses (m0 : (0 < m)%N) (ml : (m <= 4 ^ l)%N). Variables (eps t : nat -> R) (beta : R). Variable nt : nat -> {set 'I_N} -> seq 'rV[R]_N.
nt k F is a net of mesh eps k of the vectors supported in F of norm at most 1 and coordinates at most alpha k.
Hypothesis ntP : forall k F y, y \in nt k F -> sball F (alpha m k) y. Hypothesis ntN : forall k F z, sball F (alpha m k) z -> exists2 y, y \in nt k F & mxdot (z - y) (z - y) <= eps k ^+ 2. Hypothesis eps_sum : \sum_(0 <= k < l.+1) eps k ^+ 2 <= beta ^+ 2 / 9. Hypotheses (beta0 : 0 <= beta) (beta1 : beta <= 1 / 2). Hypothesis t0 : forall k, 0 <= t k.
forall {R : realType} [N : nat], nat -> nat -> (nat -> {set 'I_N} -> seq 'rV_N) -> nat -> 'rV_N -> Prop
Definition upper (k : nat) (v : 'rV[R]_N) := exists yr : nat -> 'rV[R]_N, (forall r, (k < r <= l)%N -> exists2 F : {set 'I_N}, (#|F| <= lsize m r)%N & yr r \in nt r F) /\ v = \sum_(k.+1 <= r < l.+1) yr r.
The sums of net points of the levels above k.
Used by 2 declarations in 1 file
- this file: gram_off_ball, upper_vlist
The complement of the bad events of the union bound.
Hypothesis goodW : forall k (F E : {set 'I_N}) y, (k <= l)%N -> (#|F| <= lsize m k)%N -> E \subset F -> y \in nt k F -> `|mxdot (restr E y *m tuple_mx x) (restr (F :\: E) y *m tuple_mx x)| <= t k * frobenius (restr (F :\: E) y *m tuple_mx x). Hypothesis goodX : forall k (F : {set 'I_N}) y v, (k <= l)%N -> (#|F| <= lsize m k)%N -> y \in nt k F -> upper k v -> `|mxdot (y *m tuple_mx x) (restr (~: F) v *m tuple_mx x)| <= t k * frobenius (restr (~: F) v *m tuple_mx x).
forall {R : realType} [N n m l : nat] [x : N.-tuple 'rV_n], (0 < m)%N -> (m <= 4 ^ l)%N -> forall [eps t : nat -> R] [beta : R] [nt : nat -> {set 'I_N} -> seq 'rV_N], (forall (k : nat) (F : {set 'I_N}) (y : 'rV[R]_N), y \in nt k F -> sball F (alpha m k) y) -> (forall (k : nat) (F : {set 'I_N}) (z : 'rV_N), sball F (alpha m k) z -> exists2 y : 'rV[R]_N, y \in nt k F & mxdot (z - y) (z - y) <= eps k ^+ 2) -> \sum_(0 <= k < l.+1) eps k ^+ 2 <= beta ^+ 2 / 9 -> 0 <= beta -> beta <= 1 / 2 -> (forall k : nat, 0 <= t k) -> (forall (k : nat) (F E : {set 'I_N}) (y : 'rV[R]_N), (k <= l)%N -> (#|F| <= lsize m k)%N -> E \subset F -> y \in nt k F -> `|mxdot (restr E y *m tuple_mx x) (restr (F :\: E) y *m tuple_mx x)| <= t k * frobenius (restr (F :\: E) y *m tuple_mx x)) -> (forall (k : nat) (F : {set 'I_N}) (y : 'rV[R]_N) (v : 'rV_N), (k <= l)%N -> (#|F| <= lsize m k)%N -> y \in nt k F -> upper m l nt k v -> `|mxdot (y *m tuple_mx x) (restr (~: F) v *m tuple_mx x)| <= t k * frobenius (restr (~: F) v *m tuple_mx x)) -> forall [z : 'rV_N], sparse_ball m z -> `|gram_off x z z| <= 8 * (\sum_(0 <= k < l.+1) t k) * Num.ExtraDef.sqrtr (rip_const m x + maxnorm x ^+ 2) + beta * (rip_const m x + 2 * maxnorm x ^+ 2)
Statement as written in the source
Used by 1 declaration in 1 file
- this file: rip_const_le
forall {R : realType} [N n m l : nat] [x : N.-tuple 'rV_n], (0 < m)%N -> (m <= 4 ^ l)%N -> forall [eps t : nat -> R] [beta : R] [nt : nat -> {set 'I_N} -> seq 'rV_N], (forall (k : nat) (F : {set 'I_N}) (y : 'rV[R]_N), y \in nt k F -> sball F (alpha m k) y) -> (forall (k : nat) (F : {set 'I_N}) (z : 'rV_N), sball F (alpha m k) z -> exists2 y : 'rV[R]_N, y \in nt k F & mxdot (z - y) (z - y) <= eps k ^+ 2) -> \sum_(0 <= k < l.+1) eps k ^+ 2 <= beta ^+ 2 / 9 -> 0 <= beta -> beta <= 1 / 2 -> (forall k : nat, 0 <= t k) -> (forall (k : nat) (F E : {set 'I_N}) (y : 'rV[R]_N), (k <= l)%N -> (#|F| <= lsize m k)%N -> E \subset F -> y \in nt k F -> `|mxdot (restr E y *m tuple_mx x) (restr (F :\: E) y *m tuple_mx x)| <= t k * frobenius (restr (F :\: E) y *m tuple_mx x)) -> (forall (k : nat) (F : {set 'I_N}) (y : 'rV[R]_N) (v : 'rV_N), (k <= l)%N -> (#|F| <= lsize m k)%N -> y \in nt k F -> upper m l nt k v -> `|mxdot (y *m tuple_mx x) (restr (~: F) v *m tuple_mx x)| <= t k * frobenius (restr (~: F) v *m tuple_mx x)) -> rip_const m x <= 256 * (\sum_(0 <= k < l.+1) t k) ^+ 2 + 32 * (\sum_(0 <= k < l.+1) t k) * maxnorm x + 8 * beta * maxnorm x ^+ 2
Statement as written in the source
Used by 1 declaration in 1 file
- this file: rip_good
forall [d : measure_display] [T : measurableType d] [R : realType] (mu : measure T R) [I : Type] (r : seq I) [F : I -> set T], (forall i : I, d.-measurable (F i)) -> (mu (\big[setU/set0]_(i <- r) F i) <= (\sum_(i <- r) mu (F i))%R)%E
Statement as written in the source
Lemma measure_bigsetU_le d (T : measurableType d) (R : realType) (mu : {measure set T -> \bar R}) (I : Type) (r : seq I) (F : I -> set T) : (forall i, measurable (F i)) -> (mu (\big[setU/set0]_(i <- r) F i) <= \sum_(i <- r) mu (F i))%E.
Used by 2 declarations in 1 file
- this file: bad_event_le, sparse_norm_subgaussian
Context {R : realType}.
forall {R : realType} [x : R], 0 < x -> ln x <= x - 1
Statement as written in the source
Lemma ln_le_sub1 (x : R) : 0 < x -> ln x <= x - 1.
forall {R : realType}, ln (2 : R) <= 1
Statement as written in the source
Lemma ln2_le1 : ln (2 : R) <= 1.
forall {R : realType} [x : R] (k : nat), 0 < x -> ln (x ^+ k) = k%:R * ln x
Statement as written in the source
Lemma lnX_le (x : R) (k : nat) : 0 < x -> ln (x ^+ k) = k%:R * ln x.
forall {R : realType} [s sigma : R], 0 < s -> s <= sigma -> s * ln (sigma / s) <= sigma
s ln (sigma / s) <= sigma.
Statement as written in the source
Lemma slog_le (s sigma : R) : 0 < s -> s <= sigma -> s * ln (sigma / s) <= sigma.
Used by 1 declaration in 1 file
- this file: ccount_le
Context {R : realType} (N m l : nat) (beta : R). Hypotheses (m0 : (0 < m)%N) (beta0 : 0 < beta).
forall {R : realType}, R -> nat -> RDefinition mesh k : R := beta / 2 ^+ k.+2.
The mesh of the net of level k.
forall {R : realType} [beta : R], 0 < beta -> forall k : nat, 0 < mesh beta k
Statement as written in the source
Lemma mesh_gt0 k : 0 < mesh k.
Used by 3 declarations in 1 file
- this file: netP, nbase_ge1, size_xconf
forall {R : realType} (m k : nat), (0 : R) <= (alpha m k : R)Statement as written in the source
Lemma alpha_ge0 k : 0 <= alpha m k :> R.
forall {R : realType} [N : nat], nat -> R -> nat -> {set 'I_N} -> seq 'rV_N -> Prop
forall {R : realType} [N : nat], nat -> R -> nat -> {set 'I_N} -> seq 'rV_N
Definition net k F : seq 'rV[R]_N := xget [::] (net_spec k F).
A net of level k for the vectors supported in F.
Used by 11 declarations in 1 file
- this file: netP, wconf, allnet, xconf, mem_wconf, mem_xconf, mem_allnet, upper_vlist, size_net, size_wconf, rip_good
forall N : nat, nat -> seq {set 'I_N}
Definition sets_le s : seq {set 'I_N} := enum [set F : {set 'I_N} | (#|F| <= s)%N]%SET.
Used by 8 declarations in 1 file
- this file: wconf, allnet, xconf, mem_sets_le, size_wconf, size_allnet, size_xconf, sparse_norm_subgaussian
forall {R : realType} (N : nat), nat -> R -> nat -> seq ('rV_N * 'rV_N)
Definition wconf k : seq ('rV[R]_N * 'rV[R]_N) := flatten [seq flatten [seq [seq (restr E y, restr (F :\: E) y) | y <- net k F] | E <- enum (powerset F)] | F <- sets_le (lsize m k)].
The pairs of the decoupled diagonal terms of level k.
Used by 5 declarations in 1 file
- this file: mem_wconf, size_wconf, conf_ok, conf, conf_size
forall {R : realType} (N : nat), nat -> R -> nat -> seq 'rV_N
Used by 3 declarations in 1 file
- this file: vlist, mem_allnet, size_allnet
forall {R : realType} (N : nat), nat -> nat -> R -> nat -> seq 'rV_N
Fixpoint vlist d : seq 'rV[R]_N := if d is d'.+1 then [seq y + v | y <- allnet (l - d'), v <- vlist d'] else [:: 0].
The sums of net points of the levels l - d + 1, ..., l.
Used by 4 declarations in 1 file
- this file: xconf, mem_xconf, upper_vlist, size_vlist
forall {R : realType} (N : nat), nat -> nat -> R -> nat -> seq ('rV_N * 'rV_N)
Definition xconf k : seq ('rV[R]_N * 'rV[R]_N) := flatten [seq flatten [seq [seq (y, restr (~: F) v) | v <- vlist (l - k)] | y <- net k F] | F <- sets_le (lsize m k)].
The pairs of the terms of level k against the levels above.
Used by 5 declarations in 1 file
- this file: mem_xconf, size_xconf, conf_ok, conf, conf_size
forall [N : nat] (s : nat) (F : {set 'I_N}), (F \in sets_le N s) = (#|F| <= s)%N
Statement as written in the source
Lemma mem_sets_le s F : (F \in sets_le s) = (#|F| <= s)%N.
Used by 7 declarations in 1 file
- this file: mem_wconf, mem_xconf, mem_allnet, size_wconf, size_allnet, size_xconf, sparse_norm_subgaussian
forall {R : realType} [N m : nat] [beta : R] [k : nat] [F E : {set 'I_N}] [y : 'rV[R]_N], (#|F| <= lsize m k)%N -> E \subset F -> y \in net m beta k F -> (restr E y, restr (F :\: E) y) \in wconf N m beta k
Statement as written in the source
Used by 1 declaration in 1 file
- this file: rip_good
forall {R : realType} [N m l : nat] [beta : R] [k : nat] [F : {set 'I_N}] [y v : 'rV[R]_N], (#|F| <= lsize m k)%N -> y \in net m beta k F -> v \in vlist N m l beta (l - k) -> (y, restr (~: F) v) \in xconf N m l beta k
Statement as written in the source
Used by 1 declaration in 1 file
- this file: rip_good
forall {R : realType} [N m : nat] [beta : R] [r : nat] [F : {set 'I_N}] [y : 'rV[R]_N], (#|F| <= lsize m r)%N -> y \in net m beta r F -> y \in allnet N m beta r
Statement as written in the source
Used by 1 declaration in 1 file
- this file: upper_vlist
forall {R : realType} [N m l : nat] [beta : R] [k : nat] [v : 'rV_N], (k <= l)%N -> upper m l (net m beta) k v -> v \in vlist N m l beta (l - k)
Every sum of net points of the levels above k is in vlist (l - k).
Statement as written in the source
Used by 1 declaration in 1 file
- this file: rip_good
forall {R : realType}, R -> nat -> RDefinition nbase k : R := 2 * expR 1 * (1 + 2 / mesh k).
Sizes of the configuration lists.
Used by 9 declarations in 1 file
- this file: nbase_ge1, size_net, ccount, ccount_ge1, size_wconf, size_allnet, size_xconf, lnb2_le, ccount_le
forall {R : realType} [beta : R], 0 < beta -> forall k : nat, 1 <= nbase beta k
Statement as written in the source
Lemma nbase_ge1 k : 1 <= nbase k.
Used by 6 declarations in 1 file
- this file: size_net, ccount_ge1, size_allnet, size_xconf, lnb2_le, ccount_le
forall {R : realType} [N : nat] (m : nat) [beta : R], 0 < beta -> forall (k : nat) [F : {set 'I_N}] [s : nat], (#|F| <= s)%N -> (size (net m beta k F))%:R <= nbase beta k ^+ s
Statement as written in the source
Used by 3 declarations in 1 file
- this file: size_wconf, size_allnet, size_xconf
forall {R : realType}, nat -> nat -> R -> nat -> RDefinition ccount k : R := (#|[set F : {set 'I_N} | (#|F| <= lsize m k)%N]%SET|)%:R * (2 * nbase k) ^+ lsize m k.
Used by 7 declarations in 1 file
- this file: ccount_ge1, size_wconf, size_allnet, size_vlist, size_xconf, ccount_le, conf_size
forall {R : realType} (N m : nat) [beta : R], 0 < beta -> forall k : nat, 1 <= ccount N m beta k
Statement as written in the source
Lemma ccount_ge1 k : 1 <= ccount k.
Used by 2 declarations in 1 file
- this file: size_xconf, conf_size
forall {R : realType} (N m : nat) [beta : R], 0 < beta -> forall k : nat, (size (wconf N m beta k))%:R <= ccount N m beta k
Used by 1 declaration in 1 file
- this file: conf_size
forall {R : realType} (N m : nat) [beta : R], 0 < beta -> forall r : nat, (size (allnet N m beta r))%:R <= ccount N m beta r
Used by 1 declaration in 1 file
- this file: size_vlist
forall {R : realType} (N m l : nat) [beta : R], 0 < beta -> forall d : nat, (size (vlist N m l beta d))%:R <= \prod_(j < d) ccount N m beta (l - j)
Statement as written in the source
Used by 1 declaration in 1 file
- this file: size_xconf
forall {R : realType} (N m l : nat) [beta : R], 0 < beta -> forall k : nat, (size (xconf N m l beta k))%:R <= ccount N m beta k * \prod_(j < l - k) ccount N m beta (l - j)
Statement as written in the source
Used by 1 declaration in 1 file
- this file: conf_size
forall {R : realType} [beta : R], 0 < beta -> forall k : nat, beta <= 1 -> ln (2 * nbase beta k) <= k%:R + 7 - ln beta
Statement as written in the source
Lemma lnb2_le k : beta <= 1 -> ln (2 * nbase k) <= k%:R + 7 - ln beta.
Used by 1 declaration in 1 file
- this file: ccount_le
forall {R : realType} [N m : nat] [beta : R], (0 < m)%N -> 0 < beta -> forall k : nat, (m <= N)%N -> beta <= 1 -> ccount N m beta k <= expR (4 * m%:R / 4 ^+ k * (9 + ln (N%:R / m%:R) - ln beta + 3 * k%:R))
The logarithm of the number of configurations of level k.
Statement as written in the source
Lemma ccount_le k : (m <= N)%N -> beta <= 1 -> ccount k <= expR (4 * m%:R / 4 ^+ k * (9 + ln (N%:R / m%:R) - ln beta + 3 * k%:R)).
Used by 1 declaration in 1 file
- this file: conf_size
forall {R : realType} [beta : R], 0 < beta -> forall n : nat, \sum_(0 <= k < n) mesh beta k ^+ 2 <= beta ^+ 2 / 9
The pairs of the union bound satisfy the hypotheses of cross_tail.
Statement as written in the source
Lemma mesh_sum n : \sum_(0 <= k < n) mesh k ^+ 2 <= beta ^+ 2 / 9.
Used by 1 declaration in 1 file
- this file: rip_good
forall {R : realType} [N m l : nat] [beta : R], 0 < beta -> forall [k : nat] [c : ('rV[R]_N * 'rV[R]_N)], c \in wconf N m beta k ++ xconf N m l beta k -> [/\ disj c.1 c.2, mxdot c.1 c.1 <= 1 & forall i : 'I_N, `|c.1 0 i| <= alpha m k]
Statement as written in the source
Used by 1 declaration in 1 file
- this file: bad_event_le
Context {R : realType} (N n m l : nat) (mu : nat -> probability 'rV[R]_n R) (psi beta : R). Hypothesis psi0 : 0 < psi. Hypothesis sub : forall i (y : 'rV[R]_n), (i < N)%N -> mxdot y y = 1 -> subexponential (mu i) (fun v => mxdot v y) psi. Hypothesis cen : forall i (y : 'rV[R]_n), (i < N)%N -> mxdot y y = 1 -> \int[mu i]_v mxdot v y = 0. Hypotheses (m0 : (0 < m)%N) (ml : (m <= 4 ^ l)%N). Hypotheses (beta0 : 0 < beta) (beta1 : beta <= 1 / 2). Variable t : nat -> R. Hypothesis t0 : forall k, 0 < t k.
Used by 3 declarations in 1 file
- this file: bad_event, bad_event_le, rip_good
forall {R : realType} [N n : nat], nat -> nat -> R -> (nat -> R) -> set (N.-tuple 'rV_n)
Definition bad_event : set (N.-tuple 'rV[R]_n) := \big[setU/set0]_(k < l.+1) \big[setU/set0]_(c <- conf k) cross_event (t k) c.1 c.2.
The union of the bad events of all levels.
Used by 4 declarations in 1 file
- this file: measurable_bad_event, bad_event_le, rip_good, restricted_isometry
forall {R : realType} [N n : nat] (m l : nat) (beta : R) [t : nat -> R], (forall k : nat, 0 < t k) -> (measure_tuple_display (measure_matrix_display default_measure_display)).-measurable (bad_event m l beta t)
Statement as written in the source
Lemma measurable_bad_event : measurable bad_event.
Used by 1 declaration in 1 file
- this file: restricted_isometry
forall {R : realType} [N n : nat] (m l : nat) [mu : nat -> probability 'rV_n R] [psi beta : R], 0 < psi -> (forall (i : nat) (y : 'rV_n), (i < N)%N -> mxdot y y = 1 -> subexponential (mu i) ((mxdot (n:=n))^~ y) psi) -> (forall (i : nat) (y : 'rV_n), (i < N)%N -> mxdot y y = 1 -> \int[mu i]_v mxdot v y = 0) -> 0 < beta -> forall [t : nat -> R], (forall k : nat, 0 < t k) -> (tuple_prod mu N (bad_event m l beta t) <= (\sum_(k < l.+1) (size ((fun k0 : nat => wconf N m beta k0 ++ xconf N m l beta k0) k))%:R * (2 * expR (- minr (t k ^+ 2 / (64 * psi ^+ 2)) (t k / (4 * (alpha m k * psi))))))%:E)%E
Statement as written in the source
Lemma bad_event_le : (tuple_prod mu N bad_event <= (\sum_(k < l.+1) (size (conf k))%:R * (2 * expR (- Num.min (t k ^+ 2 / (64 * psi ^+ 2)) (t k / (4 * (alpha m k * psi))))))%:E)%E.
Used by 1 declaration in 1 file
- this file: restricted_isometry
forall [T : Type] [I : eqType] [r : seq I] [F : I -> set T] [i : I] [z : T], i \in r -> F i z -> (\big[setU/set0]_(j <- r) F j) z
Statement as written in the source
Lemma bigsetU_mem (T : Type) (I : eqType) (r : seq I) (F : I -> set T) i z : i \in r -> F i z -> (\big[setU/set0]_(j <- r) F j) z.
Used by 2 declarations in 1 file
- this file: rip_good, sparse_norm_subgaussian
forall {R : realType} [N n m l : nat] [beta : R], (0 < m)%N -> (m <= 4 ^ l)%N -> 0 < beta -> beta <= 1 / 2 -> forall [t : nat -> R], (forall k : nat, 0 < t k) -> forall [x : N.-tuple 'rV_n], ~ bad_event m l beta t x -> rip_const m x <= 256 * (\sum_(0 <= k < l.+1) t k) ^+ 2 + 32 * (\sum_(0 <= k < l.+1) t k) * maxnorm x + 8 * beta * maxnorm x ^+ 2
Outside the bad event, B_m^2 is bounded by the sum T of the t k.
Statement as written in the source
Used by 1 declaration in 1 file
- this file: restricted_isometry
Context {R : realType}.
forall {R : realType} (n : nat), \sum_(k < n) (2 : R) ^+ k <= 2 ^+ nStatement as written in the source
Lemma sum_pow2 n : \sum_(k < n) (2 : R) ^+ k <= 2 ^+ n.
Used by 1 declaration in 1 file
- this file: tk_sum
forall {R : realType} [a : R] (n : nat),
6 <= a -> \sum_(k < n) (a + 3 * k%:R) / 2 ^+ k <= 4 * asum_k 2^-k (a + 3 k) <= 4 a for a >= 6
Statement as written in the source
Lemma sum_geo_lin (a : R) n : 6 <= a -> \sum_(k < n) (a + 3 * k%:R) / 2 ^+ k <= 4 * a.
Used by 1 declaration in 1 file
- this file: tk_sum
realType -> forall l : nat, (l.+1 ^ 2 <= 8 * 2 ^ l)%NStatement as written in the source
Lemma sq_le_pow2 l : (l.+1 ^ 2 <= 8 * 2 ^ l)%N.
Used by 1 declaration in 1 file
- this file: tk_sum
Context {R : realType} (N n m l : nat) (psi beta K : R). Hypotheses (m0 : (0 < m)%N) (mN : (m <= N)%N). Hypotheses (ml : (m <= 4 ^ l)%N) (lm : (4 ^ l <= 4 * m)%N). Hypotheses (psi0 : 0 < psi) (beta0 : 0 < beta) (beta1 : beta <= 1 / 2). Hypothesis K1 : 1 <= K.
forall {R : realType}, nat -> nat -> RDefinition Lp : R := 1 + ln (N%:R / m%:R).
Lp = ln (e N / m) and the exponent of the count of level k.
Used by 5 declarations in 1 file
- this file: uk, Lp_ge1, uk_gt0, tk_sum, restricted_isometry
forall {R : realType}, nat -> nat -> R -> RDefinition Lz : R := 9 + ln (N%:R / m%:R) - ln beta.
forall {R : realType}, nat -> nat -> R -> nat -> RDefinition Hk k : R := 4 * m%:R / 4 ^+ k * (Lz + 3 * k%:R).
forall {R : realType}, nat -> nat -> R -> R -> nat -> Rforall {R : realType}, nat -> nat -> R -> R -> R -> nat -> RThe thresholds of the union bound.
Used by 4 declarations in 1 file
- this file: tk_gt0, tk_exp, tk_sum, restricted_isometry
forall {R : realType} [N m : nat], (0 < m)%N -> (m <= N)%N -> 1 <= Lp N m
Statement as written in the source
Lemma Lp_ge1 : 1 <= Lp.
forall {R : realType} [N m : nat] [beta : R], (0 < m)%N -> (m <= N)%N -> beta <= 1 / 2 -> 9 <= Lz N m beta
Statement as written in the source
Lemma Lz_ge9 : 9 <= Lz.
forall {R : realType} [N m : nat] [beta : R], (0 < m)%N -> (m <= N)%N -> beta <= 1 / 2 -> forall k : nat, 0 <= Hk N m beta k
Statement as written in the source
Lemma Hk_ge0 k : 0 <= Hk k.
forall {R : realType} [N m : nat] [beta K : R], (0 < m)%N -> (m <= N)%N -> beta <= 1 / 2 -> 1 <= K -> forall k : nat, 0 < uk N m beta K k
Statement as written in the source
Lemma uk_gt0 k : 0 < uk k.
forall {R : realType} [N m : nat] [psi beta K : R], (0 < m)%N -> (m <= N)%N -> 0 < psi -> beta <= 1 / 2 -> 1 <= K -> forall k : nat, 0 < tk N m psi beta K k
Statement as written in the source
Lemma tk_gt0 k : 0 < tk k.
Used by 1 declaration in 1 file
- this file: restricted_isometry
forall {R : realType} [N m : nat] [psi beta K : R], (0 < m)%N -> (m <= N)%N -> 0 < psi -> beta <= 1 / 2 -> 1 <= K -> forall k : nat, expR (- minr (tk N m psi beta K k ^+ 2 / (64 * psi ^+ 2)) (tk N m psi beta K k / (4 * (alpha m k * psi)))) <= expR (- uk N m beta K k)
Statement as written in the source
Used by 1 declaration in 1 file
- this file: restricted_isometry
forall {R : realType} [N m : nat] [beta : R], (0 < m)%N -> (m <= N)%N -> beta <= 1 / 2 -> forall r : nat, Hk N m beta r.+1 <= Hk N m beta r / 2
Each level weighs at most half of the previous one.
forall {R : realType} [N m l : nat] [beta : R], (0 < m)%N -> (m <= N)%N -> beta <= 1 / 2 -> forall [d : nat], (d <= l)%N -> \sum_(j < d) Hk N m beta (l - j) <= 2 * Hk N m beta (l - d).+1
Statement as written in the source
Used by 1 declaration in 1 file
- this file: conf_size
forall {R : realType} [N m l : nat] [beta : R], (0 < m)%N -> (m <= N)%N -> 0 < beta -> beta <= 1 / 2 -> forall [k : nat], (k <= l)%N -> (size (wconf N m beta k ++ xconf N m l beta k))%:R <= 2 * expR (2 * Hk N m beta k)
Statement as written in the source
Used by 1 declaration in 1 file
- this file: restricted_isometry
forall {R : realType} [N m l : nat] [psi beta K : R], (0 < m)%N -> (m <= N)%N -> (4 ^ l <= 4 * m)%N -> 0 < psi -> beta <= 1 / 2 -> 1 <= K -> \sum_(0 <= k < l.+1) tk N m psi beta K k <= 2100 * K * psi * Num.ExtraDef.sqrtr m%:R * (Lp N m - ln beta)
Statement as written in the source
Used by 1 declaration in 1 file
- this file: restricted_isometry
Context {R : realType} (N n m : nat) (mu : nat -> probability 'rV[R]_n R) (psi : R). Hypothesis psi0 : 0 < psi. Hypothesis sub : forall i (y : 'rV[R]_n), (i < N)%N -> mxdot y y = 1 -> subexponential (mu i) (fun v => mxdot v y) psi. Hypothesis cen : forall i (y : 'rV[R]_n), (i < N)%N -> mxdot y y = 1 -> \int[mu i]_v mxdot v y = 0.
forall {R : realType}, nat -> nat -> R -> R -> R -> RDefinition rip_T (beta K : R) : R := 2100 * K * psi * Num.sqrt m%:R * (1 + ln (N%:R / m%:R) - ln beta).
The scale T = 2100 K psi sqrt m (ln (e N / m) + ln (1 / beta)).
Stated in the README together with restricted_isometry.
Used by 1 declaration in 1 file
- this file: restricted_isometry
forall {R : realType} [N n m : nat] [mu : nat -> probability 'rV_n R] [psi : R], 0 < psi -> (forall (i : nat) (y : 'rV_n), (i < N)%N -> mxdot y y = 1 -> subexponential (mu i) ((mxdot (n:=n))^~ y) psi) -> (forall (i : nat) (y : 'rV_n), (i < N)%N -> mxdot y y = 1 -> \int[mu i]_v mxdot v y = 0) -> forall [beta K : R], (0 < m)%N -> (m <= N)%N -> 0 < beta -> beta <= 1 / 2 -> 1 <= K -> exists G : set (N.-tuple 'rV_n), [/\ (measure_tuple_display (measure_matrix_display default_measure_display)).-measurable G, (tuple_prod mu N (~` G) <= (2 * (trunc_log 4 m).+2%:R * expR (- (K * Num.ExtraDef.sqrtr m%:R * (1 + ln (N%:R / m%:R)))))%:E)%E & forall x : N.-tuple 'rV_n, G x -> rip_const m x <= 256 * rip_T N m psi beta K ^+ 2 + 32 * rip_T N m psi beta K * maxnorm x + 8 * beta * maxnorm x ^+ 2]
Theorem 5.1 of Adamczak, Litvak, Pajor and Tomczak-Jaegermann for psi_1 columns, with explicit constants.
Theorem 5.1 of Adamczak, Litvak, Pajor and Tomczak-Jaegermann at r = 1, with explicit constants. Let x_1, ..., x_N in 'rV[R]_n be independent (tuple_prod mu N), with every linear form <x_i, y>, |y| = 1, centered and subexponential with constant psi. For 1 <= m <= N, 0 < beta <= 1/2 and K >= 1, outside a measurable event of probability at most 2 (log_4 m + 2) exp (- K sqrt m (1 + ln (N / m))), every m-sparse u of norm at most one satisfies ||sum_i u_i x_i|^2 - sum_i u_i^2 |x_i|^2| <= 256 T^2 + 32 T C + 8 beta C^2, where T = 2100 K psi sqrt m (1 + ln (N / m) - ln beta) and C = max_i |x_i|.
Statement as written in the source
Theorem restricted_isometry (beta K : R) : (0 < m)%N -> (m <= N)%N -> 0 < beta -> beta <= 1 / 2 -> 1 <= K -> exists G : set (N.-tuple 'rV[R]_n), [/\ measurable G, (tuple_prod mu N (~` G) <= (2 * (trunc_log 4 m).+2%:R * expR (- (K * Num.sqrt m%:R * (1 + ln (N%:R / m%:R)))))%:E)%E & forall x, G x -> rip_const m x <= 256 * rip_T beta K ^+ 2 + 32 * rip_T beta K * maxnorm x + 8 * beta * maxnorm x ^+ 2].
Context {R : realType} (N n : nat) (x : N.-tuple 'rV[R]_n).
forall {R : realType} [N n : nat], N.-tuple 'rV_n -> RDefinition sqnorm_dev : R := \big[Num.max/0]_i `|mxdot (tnth x i) (tnth x i) - 1|.
The largest deviation of the squared norms |x_i|^2 from 1.
Stated in the README together with sparse_isometry_dev.
Used by 3 declarations in 1 file
- this file: sqnorm_dev_ge0, sqnorm_dev_ub, sparse_isometry_dev
forall {R : realType} [N n : nat] (x : N.-tuple 'rV_n), 0 <= sqnorm_dev x
Statement as written in the source
Lemma sqnorm_dev_ge0 : 0 <= sqnorm_dev.
forall {R : realType} [N n : nat] (x : N.-tuple 'rV_n) (i : 'I_N), `|mxdot (tnth x i) (tnth x i) - 1| <= sqnorm_dev x
Statement as written in the source
Lemma sqnorm_dev_ub i : `|mxdot (tnth x i) (tnth x i) - 1| <= sqnorm_dev.
Used by 1 declaration in 1 file
- this file: sparse_isometry_dev
forall {R : realType} [N n : nat] (x : N.-tuple 'rV_n) [m : nat] [u : 'rV_N], (#|supp u| <= m)%N -> `|mxdot (u *m tuple_mx x) (u *m tuple_mx x) - mxdot u u| <= (rip_const m x + sqnorm_dev x) * mxdot u u
The isometry defect on m-sparse vectors: the off-diagonal part is bounded by rip_const and the diagonal part by sqnorm_dev.
The restricted isometry constant: for every m-sparse u, ||sum_i u_i x_i|^2 - |u|^2| <= (rip_const m x + max_i ||x_i|^2 - 1|) |u|^2. Blocks: if |sum_i u_i x_i| <= L |u| for every m-sparse u, then |sum_i u_i x_i| <= L sqrt (N / m + 1) |u| for every u (deterministic).
forall {R : realType} [N n : nat] [x : N.-tuple 'rV_n] [m : nat] [L : R], (0 < m)%N -> 0 <= L -> (forall u : 'rV_N, (#|supp u| <= m)%N -> frobenius (u *m tuple_mx x) <= L * frobenius u) -> forall u : 'rV_N, frobenius (u *m tuple_mx x) <= L * Num.ExtraDef.sqrtr (N %/ m).+1%:R * frobenius u
A bound on the m-sparse vectors extends to all vectors, by cutting the coordinates into N %/ m + 1 blocks of at most m consecutive indices.
Stated in the README together with sparse_isometry_dev.
Context {R : realType}.
forall {R : realType} [k : nat], seq 'cV_k -> Prop
Definition sphere_net_spec k (S : seq 'cV[R]_k) := [/\ forall y, y \in S -> frobenius y = 1, is_net (@unit_sphere R k) S 4^-1 & (size S)%:R <= (18 * expR 1) ^+ k :> R].
A 1/4-net of the unit sphere of 'cV[R]_k, of size at most (18 e)^k.
Used by 3 declarations in 1 file
- this file: sphere_net, sphere_netP, tuple_submx_net
forall {R : realType} (k : nat), seq 'cV_k
Definition sphere_net k : seq 'cV[R]_k := xget [::] (@sphere_net_spec k).
Used by 2 declarations in 1 file
- this file: sphere_netP, sparse_norm_subgaussian
forall {R : realType} (k : nat), sphere_net_spec (sphere_net k)
Statement as written in the source
Lemma sphere_netP k : sphere_net_spec (sphere_net k).
Used by 1 declaration in 1 file
- this file: sparse_norm_subgaussian
Context {R : realType} (N n : nat). Implicit Types (F : {set 'I_N}) (x : N.-tuple 'rV[R]_n).
forall {R : realType} [N n : nat] (F : {set 'I_N}), N.-tuple 'rV_n -> 'M_(n, #|F|)Definition tuple_submx (F : {set 'I_N}) (x : N.-tuple 'rV[R]_n) : 'M[R]_(n, #|F|) := \matrix_(j, k) (tnth x (enum_val k)) 0 j.
The n x |F| matrix whose columns are the x_i, i in F, in the order of enum_val.
Used by 4 declarations in 1 file
forall {R : realType} [N n : nat] [F : {set 'I_N}] (x : N.-tuple 'rV_n) (w : 'cV_#|F|), tuple_submx F x *m w = (sparse_emb w *m tuple_mx x)^T
Statement as written in the source
Lemma tuple_submx_mul F x (w : 'cV[R]_#|F|) : tuple_submx F x *m w = (sparse_emb w *m tuple_mx x)^T.
Used by 2 declarations in 1 file
- this file: tuple_submx_proj, tuple_submx_net
forall {R : realType} [N n : nat] [F : {set 'I_N}] (x : N.-tuple 'rV_n) [z : 'rV_N], supp z \subset F -> tuple_submx F x *m sparse_proj F z = (z *m tuple_mx x)^T
Statement as written in the source
Lemma tuple_submx_proj F x (z : 'rV[R]_N) : supp z \subset F -> tuple_submx F x *m sparse_proj F z = (z *m tuple_mx x)^T.
Used by 1 declaration in 1 file
- this file: sparse_norm_subgaussian
forall {R : realType} [N n : nat] [F : {set 'I_N}] [x : N.-tuple 'rV_n] [U : seq 'cV_n] [V : seq 'cV_#|F|] [t : R], 0 <= t -> sphere_net_spec U -> sphere_net_spec V -> (forall (u : 'cV[R]_n) (w : 'cV[R]_#|F|), u \in U -> w \in V -> `|mxdot (sparse_emb w *m tuple_mx x) u^T| <= t) -> opnorm (tuple_submx F x) <= 2 * t
Bilinear values on nets of the unit spheres bound the operator norm of tuple_submx F x.
Statement as written in the source
Lemma tuple_submx_net F x (U : seq 'cV[R]_n) (V : seq 'cV[R]_#|F|) (t : R) : 0 <= t -> sphere_net_spec U -> sphere_net_spec V -> (forall u w, u \in U -> w \in V -> `|mxdot (sparse_emb w *m tuple_mx x) u^T| <= t) -> opnorm (tuple_submx F x) <= 2 * t.
Used by 1 declaration in 1 file
- this file: sparse_norm_subgaussian
Context {R : realType} (N n : nat) (mu : nat -> probability 'rV[R]_n R) (K : R). Hypothesis K0 : 0 < K.
The vectors have centered subgaussian linear forms.
Hypothesis sub : forall i (y : 'rV[R]_n), (i < N)%N -> mxdot y y = 1 -> subgaussian (mu i) (fun v => mxdot v y) K. Hypothesis cen : forall i (y : 'rV[R]_n), (i < N)%N -> mxdot y y = 1 -> \int[mu i]_v mxdot v y = 0.
Let coef (a : 'rV[R]_N) (k : nat) : R := if insub k is Some i then a 0 i else 0.
Used by 2 declarations in 1 file
- this file: coefE, tuple_mx_dot_tail
Let coefE (a : 'rV[R]_N) (i : 'I_N) : coef a i = a 0 i.
Used by 1 declaration in 1 file
- this file: tuple_mx_dot_tail
forall {R : realType} [N n : nat] [mu : nat -> probability 'rV_n R] [K : R], 0 < K -> (forall (i : nat) (y : 'rV_n), (i < N)%N -> mxdot y y = 1 -> subgaussian (mu i) ((mxdot (n:=n))^~ y) K) -> (forall (i : nat) (y : 'rV_n), (i < N)%N -> mxdot y y = 1 -> \int[mu i]_v mxdot v y = 0) -> forall [a : 'rV_N] [y : 'rV_n] [t : R], mxdot a a = 1 -> mxdot y y = 1 -> 0 <= t -> (tuple_prod mu N [set x | (t <= `|mxdot (a *m tuple_mx x) y|)%R] <= (2 * expR (- (t ^+ 2 / (16 * K ^+ 2))))%:E)%E
Hoeffding's inequality for <sum_i a_i x_i, y> with |a| = |y| = 1.
Stated in the README together with sparse_norm_subgaussian.
Statement as written in the source
Lemma tuple_mx_dot_tail (a : 'rV[R]_N) (y : 'rV[R]_n) (t : R) : mxdot a a = 1 -> mxdot y y = 1 -> 0 <= t -> (tuple_prod mu N [set x | (t <= `|mxdot (a *m tuple_mx x) y|)%R] <= (2 * expR (- (t ^+ 2 / (16 * K ^+ 2))))%:E)%E.
Used by 1 declaration in 1 file
- this file: sparse_norm_subgaussian
forall {R : realType}, nat -> nat -> R -> nat -> R -> R
Definition sparse_norm_bound (m : nat) (s : R) : R := 8 * K * Num.sqrt (m%:R * (1 + ln (N%:R / m%:R)) + 6 * (m + n)%:R + s).
The bound of sparse_norm_subgaussian.
Stated in the README together with sparse_norm_subgaussian.
Used by 1 declaration in 1 file
- this file: sparse_norm_subgaussian
forall {R : realType} [N n : nat] [mu : nat -> probability 'rV_n R] [K : R], 0 < K -> (forall (i : nat) (y : 'rV_n), (i < N)%N -> mxdot y y = 1 -> subgaussian (mu i) ((mxdot (n:=n))^~ y) K) -> (forall (i : nat) (y : 'rV_n), (i < N)%N -> mxdot y y = 1 -> \int[mu i]_v mxdot v y = 0) -> forall [m : nat] [s : R], (0 < m)%N -> (m <= N)%N -> 0 <= s -> exists G : set (N.-tuple 'rV_n), [/\ (measure_tuple_display (measure_matrix_display default_measure_display)).-measurable G, (tuple_prod mu N (~` G) <= (2 * expR (- s))%:E)%E & forall x : N.-tuple 'rV_n, G x -> forall u : 'rV_N, (#|supp u| <= m)%N -> frobenius (u *m tuple_mx x) <= sparse_norm_bound N n K m s * frobenius u]
For independent x_1, ..., x_N with centered K-subgaussian linear forms, with probability at least 1 - 2 exp (- s), every m-sparse u satisfies |sum_i u_i x_i| <= 8 K sqrt (m (1 + ln (N / m)) + 6 (m + n) + s) |u|.
Norms of sparse combinations of independent subgaussian vectors: if x_1, ..., x_N in 'rV[R]_n are independent (tuple_prod mu N) with every linear form <x_i, y>, |y| = 1, centered and subgaussian with constant K, then for 1 <= m <= N and s >= 0, outside a measurable event of probability at most 2 exp (- s), every m-sparse u satisfies |sum_i u_i x_i| <= 8 K sqrt (m (1 + ln (N / m)) + 6 (m + n) + s) |u| (Vershynin's Theorem 4.4.5 with a union bound over the supports). For unit a and y, P(|<sum_i a_i x_i, y>| >= t) <= 2 exp (- t^2 / (16 K^2)).
Statement as written in the source
Theorem sparse_norm_subgaussian (m : nat) (s : R) : (0 < m)%N -> (m <= N)%N -> 0 <= s -> exists G : set (N.-tuple 'rV[R]_n), [/\ measurable G, (tuple_prod mu N (~` G) <= (2 * expR (- s))%:E)%E & forall x, G x -> forall u : 'rV[R]_N, (#|supp u| <= m)%N -> frobenius (u *m tuple_mx x) <= sparse_norm_bound m s * frobenius u].