On this page
Lindeberg's replacement of uniform signs by Gaussians
Imports 5 library modules and 26 external
- GaussianAnalysis.gaussian.measurable_matrix
- GaussianAnalysis.gaussian.normal_integral
- GaussianAnalysis.gaussian.gauss
- GaussianAnalysis.gaussian.gauss_moments
- GaussianAnalysis.probability.lindeberg
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.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.realfun, 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 bounded measurable F : 'rV[R]_n -> R whose third derivative along the coordinate j is at most c_j in absolute value, the average of F over the 2^n rows of signs and its integral against gauss n differ by at most (1/2) \sum_j c_j (rademacher_gauss_lindeberg). This is the coordinate-replacement form of the Lindeberg principle (Chatterjee, 'A generalization of the Lindeberg principle', Ann. Probab. 34 (2006), Theorem 1.1) for uniform signs and standard Gaussians, which have the same first two moments.
Part of target T6 of phase 12: a Rocq formalization of the credited argument of the first paragraph of the proof of Theorem ext:sign of 'The free energy of the Ising random perceptron' (family 222 of the OpenAI math collection, revision 1581d4cbd, sections/extensions.tex). The collection has no Lean version of it.
The coordinates are replaced one at a time, by induction on n: Fubini along rV_cons for gauss n.+1 (Rintegral_gauss_cons) and the decomposition of the rows of signs by their first coordinate (sum_sign_rowS). In one coordinate, Taylor's formula of order two and the first two moments give the constant (1 + E |g|^3) / 6 <= 1/2.
Proved:
- derive_le_cmp: |g b - g a| <= k b - k a when |g'| <= k' on [a, b]; taylor2_le: |f t - f 0 - f'(0) t - f''(0) t^2 / 2| <= c |t|^3 / 6 when |f'''| <= c everywhere.
- Rintegral_normal_quadratic: E (a + b g + c g^2) = a + c, and Rintegral_normal_abs3: E |g|^3 <= 2, for g of law N(0, 1).
- rademacher_gauss_step: |(f 1 + f (-1)) / 2 - E f(g)| <= c / 2 when |f'''| <= c everywhere.
- Rintegral_gauss_cons: for F bounded and measurable on 'rV[R]_n.+1, the integral of F against gauss n.+1 is the integral against gauss n of y |-> \int[N]_t F (rV_cons (t, y)).
- rademacher_gauss_lindeberg: the comparison above.
Main results
| Results | Statement |
|---|---|
Lindeberg's replacement of uniform signs by Gaussians (Chatterjee 2006, Theorem 1.1, for signs and standard Gaussians): if F : 'rV[R]_n -> R is measurable and bounded, and for every x and j the map t |-> F (t e_j + x) has three derivatives with the third at most c_j in absolute value, then the average of F over the 2^n rows of signs and its integral against gauss n differ by at most (1/2) sum_j c_j. By induction on n, with Fubini along rV_cons for bounded measurable functions (Rintegral_gauss_cons) and the decomposition of the rows of signs by their first coordinate (sum_sign_rowS). | |
The mean value inequality |g b - g a| <= k b - k a for a <= b and g, k differentiable everywhere with |g'| <= k' on [a, b], and Taylor's formula of order two: |f t - f 0 - f'(0) t - f''(0) t^2 / 2| <= c |t|^3 / 6 when |f'''| <= c everywhere. In one coordinate, |(f 1 + f (-1)) / 2 - E f(g)| <= c / 2 for g of law N(0, 1), from E (a + b g + c g^2) = a + c and E |g|^3 <= 2. |
Declarations17 exported
Context {R : realType}.
forall {R : realType} [f f' : R -> R], (forall u : R, is_derive u 1 f (f' u)) -> continuous f
Statement as written in the source
Lemma is_derive_continuous (f f' : R -> R) : (forall u : R, is_derive u 1 f (f' u)) -> continuous f.
Used by 3 declarations in 2 files
- this file: derive_le_cmp, rademacher_gauss_step
- GaussianApplications.Perceptron.Pressure: measurable_perceptron_pressure
forall {R : realType} [g g' k k' : R -> R] [a b : R], a <= b -> (forall u : R, is_derive u 1 g (g' u)) -> (forall u : R, is_derive u 1 k (k' u)) -> (forall u : R, a <= u -> u <= b -> `|g' u| <= k' u) -> `|g b - g a| <= k b - k a
The mean value inequality with a comparison function: if |g'| <= k' on [a, b], then |g b - g a| <= k b - k a.
The mean value inequality |g b - g a| <= k b - k a for a <= b and g, k differentiable everywhere with |g'| <= k' on [a, b], and Taylor's formula of order two: |f t - f 0 - f'(0) t - f''(0) t^2 / 2| <= c |t|^3 / 6 when |f'''| <= c everywhere. In one coordinate, |(f 1 + f (-1)) / 2 - E f(g)| <= c / 2 for g of law N(0, 1), from E (a + b g + c g^2) = a + c and E |g|^3 <= 2.
Statement as written in the source
Lemma derive_le_cmp (g g' k k' : R -> R) (a b : R) : a <= b -> (forall u : R, is_derive u 1 g (g' u)) -> (forall u : R, is_derive u 1 k (k' u)) -> (forall u, a <= u -> u <= b -> `|g' u| <= k' u) -> `|g b - g a| <= k b - k a.
Used by 1 declaration in 1 file
- this file: taylor2_le
forall {R : realType} [f f1 f2 f3 : R -> R] [c : R], (forall t : R, is_derive t 1 f (f1 t)) -> (forall t : R, is_derive t 1 f1 (f2 t)) -> (forall t : R, is_derive t 1 f2 (f3 t)) -> (forall t : R, `|f3 t| <= c) -> forall t : R, `|f t - f 0 - f1 0 * t - f2 0 * t ^+ 2 / 2| <= c * `|t| ^+ 3 / 6
Taylor's formula of order two, with a bound c on the third derivative.
Stated in the README together with derive_le_cmp.
Statement as written in the source
Lemma taylor2_le (f f1 f2 f3 : R -> R) (c : R) : (forall t : R, is_derive t 1 f (f1 t)) -> (forall t : R, is_derive t 1 f1 (f2 t)) -> (forall t : R, is_derive t 1 f2 (f3 t)) -> (forall t, `|f3 t| <= c) -> forall t, `|f t - f 0 - f1 0 * t - f2 0 * t ^+ 2 / 2| <= c * `|t| ^+ 3 / 6.
Used by 1 declaration in 1 file
- this file: rademacher_gauss_step
Context {R : realType}. Local Notation N := (@normal_prob R 0 1).
forall {R : realType} (a b : R), (normal_prob 0 1).-integrable [set: R] (EFin \o (fun t : R => a + b * t))
Statement as written in the source
Lemma integrable_normal_affine (a b : R) : N.-integrable [set: R] (EFin \o (fun t => a + b * t)).
Used by 1 declaration in 1 file
- this file: Rintegral_normal_quadratic
forall {R : realType} (a : R), (normal_prob 0 1).-integrable [set: R] (EFin \o (fun t : R => a * t ^+ 2))
Statement as written in the source
Lemma integrable_normal_sqr (a : R) : N.-integrable [set: R] (EFin \o (fun t => a * t ^+ 2)).
Used by 1 declaration in 1 file
- this file: Rintegral_normal_quadratic
forall {R : realType} (a b c : R), \int[normal_prob 0 1]_t (a + b * t + c * t ^+ 2) = a + cE (a + b g + c g^2) = a + c for g of law N(0, 1).
Stated in the README together with derive_le_cmp.
Statement as written in the source
Lemma Rintegral_normal_quadratic (a b c : R) : \int[N]_t (a + b * t + c * t ^+ 2) = a + c.
Used by 1 declaration in 1 file
- this file: rademacher_gauss_step
forall {R : realType}, \int[normal_prob 0 1]_t `|t| ^+ 3 <= 2E |g|^3 <= 2, from |t|^3 <= (t^2 + t^4) / 2.
Stated in the README together with derive_le_cmp.
Statement as written in the source
Lemma Rintegral_normal_abs3 : \int[N]_t `|t| ^+ 3 <= 2.
Used by 1 declaration in 1 file
- this file: rademacher_gauss_step
forall {R : realType} [f f1 f2 f3 : R -> R] [c : R], (forall t : R, is_derive t 1 f (f1 t)) -> (forall t : R, is_derive t 1 f1 (f2 t)) -> (forall t : R, is_derive t 1 f2 (f3 t)) -> (forall t : R, `|f3 t| <= c) -> `|(f 1 + f (-1)) / 2 - \int[normal_prob 0 1]_t f t| <= c / 2
One coordinate: if |f'''| <= c, then a uniform sign and a standard Gaussian give expectations of f within c / 2.
Stated in the README together with derive_le_cmp.
Statement as written in the source
Lemma rademacher_gauss_step (f f1 f2 f3 : R -> R) (c : R) : (forall t : R, is_derive t 1 f (f1 t)) -> (forall t : R, is_derive t 1 f1 (f2 t)) -> (forall t : R, is_derive t 1 f2 (f3 t)) -> (forall t, `|f3 t| <= c) -> `|(f 1 + f (-1)) / 2 - \int[N]_t f t| <= c / 2.
Used by 1 declaration in 1 file
- this file: rademacher_gauss_lindeberg
Context {R : realType}. Local Notation N := (@normal_prob R 0 1).
forall {R : realType} [n : nat], {ffun 'I_n -> bool} -> 'rV_n
Definition sign_row n (s : {ffun 'I_n -> bool}) : 'rV[R]_n := \row_i (if s i then 1 else -1).
The row of the signs of s.
Used by 4 declarations in 2 files
- this file: sign_row_cons, sum_sign_rowS, rademacher_gauss_lindeberg
- GaussianApplications.Perceptron.Pressure: sign_pressureE
forall [n : nat], bool -> {ffun 'I_n -> bool} -> {ffun 'I_n.+1 -> bool}
Definition ffun_cons n (b : bool) (s : {ffun 'I_n -> bool}) : {ffun 'I_n.+1 -> bool} := [ffun i => if unlift ord0 i is Some j then s j else b].
A function on 'I_n.+1, from its value at 0 and a function on 'I_n.
Used by 3 declarations in 1 file
- this file: ffun_cons_bij, sign_row_cons, sum_sign_rowS
forall n : nat, bijective (fun p : bool * {ffun 'I_n -> bool} => ffun_cons p.1 p.2)
Statement as written in the source
Lemma ffun_cons_bij n : bijective (fun p : bool * {ffun 'I_n -> bool} => ffun_cons p.1 p.2).
Used by 1 declaration in 1 file
- this file: sum_sign_rowS
forall {R : realType} [n : nat] (b : bool) (s : {ffun 'I_n -> bool}), sign_row (ffun_cons b s) = rV_cons (if b then 1 else -1, sign_row s)
Statement as written in the source
Used by 1 declaration in 1 file
- this file: sum_sign_rowS
forall {R : realType} [n : nat] (G : 'rV_n.+1 -> R), \sum_s G (sign_row s) = \sum_s (G (rV_cons (1, sign_row s)) + G (rV_cons (-1, sign_row s)))
Statement as written in the source
Used by 1 declaration in 1 file
- this file: rademacher_gauss_lindeberg
forall {R : realType} [n : nat] (a t : R) (y : 'rV_n) (j : 'I_n), rV_cons (a, t *: delta_mx 0 j + y) = t *: delta_mx 0 (lift ord0 j) + rV_cons (a, y)
Statement as written in the source
Used by 1 declaration in 1 file
- this file: rademacher_gauss_lindeberg
forall {R : realType} [n : nat] (t : R) (y : 'rV_n), rV_cons (t, y) = t *: delta_mx 0 ord0 + rV_cons (0, y)
Statement as written in the source
Used by 1 declaration in 1 file
- this file: rademacher_gauss_lindeberg
forall {R : realType} [n : nat] [F : 'rV_n.+1 -> R] [C : R], measurable_fun [set: 'rV_n.+1] F -> (forall x : 'rV_n.+1, `|F x| <= C) -> \int[gauss n.+1]_x F x = \int[gauss n]_y \int[normal_prob 0 1]_t F (rV_cons (t, y))
Fubini along the first coordinate, for a bounded measurable F.
Statement as written in the source
Used by 1 declaration in 1 file
- this file: rademacher_gauss_lindeberg
forall {R : realType} [n : nat] [F : 'rV_n -> R] [C : R] [c : 'I_n -> R], measurable_fun [set: 'rV_n] F -> (forall x : 'rV_n, `|F x| <= C) -> (forall (j : 'I_n) (x : 'rV_n), exists F1 F2 F3 : R -> R, [/\ forall t : R, is_derive t 1 (fun s : R => F (s *: delta_mx 0 j + x)) (F1 t), forall t : R, is_derive t 1 F1 (F2 t), forall t : R, is_derive t 1 F2 (F3 t) & forall t : R, `|F3 t| <= c j]) -> `|2 ^- n * \sum_s F (sign_row s) - \int[gauss n]_x F x| <= 2^-1 * \sum_j c j
Lindeberg's replacement of uniform signs by Gaussians: if F is bounded and measurable and its third derivative along the coordinate j is at most c_j in absolute value, then the averages of F over the rows of signs and against gauss n differ by at most (1/2) \sum_j c_j.
Lindeberg's replacement of uniform signs by Gaussians (Chatterjee 2006, Theorem 1.1, for signs and standard Gaussians): if F : 'rV[R]_n -> R is measurable and bounded, and for every x and j the map t |-> F (t e_j + x) has three derivatives with the third at most c_j in absolute value, then the average of F over the 2^n rows of signs and its integral against gauss n differ by at most (1/2) sum_j c_j. By induction on n, with Fubini along rV_cons for bounded measurable functions (Rintegral_gauss_cons) and the decomposition of the rows of signs by their first coordinate (sum_sign_rowS).
Statement as written in the source
Theorem rademacher_gauss_lindeberg n (F : 'rV[R]_n -> R) (C : R) (c : 'I_n -> R) : measurable_fun setT F -> (forall x, `|F x| <= C) -> (forall (j : 'I_n) (x : 'rV[R]_n), exists F1 F2 F3 : R -> R, [/\ forall t : R, is_derive t 1 (fun s => F (s *: delta_mx 0 j + x)) (F1 t), forall t : R, is_derive t 1 F1 (F2 t), forall t : R, is_derive t 1 F2 (F3 t) & forall t, `|F3 t| <= c j]) -> `|(2 ^+ n)^-1 * \sum_(s : {ffun 'I_n -> bool}) F (sign_row s) - \int[gauss n]_x F x| <= 2^-1 * \sum_j c j.
Used by 1 declaration in 1 file
- GaussianApplications.Perceptron.Pressure: perceptron_sign_compare