hCIBCAS1Hi / code /sosmc_repro /theory.py
DineshAI's picture
Publish claim-by-claim SOSMC reproduction
99aac1c verified
Raw
History Blame Contribute Delete
6.9 kB
from __future__ import annotations
import math
from fractions import Fraction
from typing import Any
import numpy as np
import sympy as sp
def verify_proposition_1() -> dict[str, Any]:
"""Machine-check the exact one-step implication behind Proposition 1.
The proof certificate is algebraic. It uses only the descent lemma,
gamma <= 1/L, and the paper's PL convention
||grad l||^2 >= 2 mu (l - inf l).
"""
gamma, L, mu, gap, grad_sq = sp.symbols(
"gamma L mu gap grad_sq", positive=True
)
descent_rhs = -gamma * (1 - L * gamma / 2) * grad_sq
boundary_rhs = -gamma * grad_sq / 2
pl_rhs = -gamma * mu * gap
boundary_identity = sp.simplify(
descent_rhs - boundary_rhs + gamma * (1 - L * gamma) * grad_sq / 2
)
pl_identity = sp.simplify(boundary_rhs - pl_rhs + gamma * (grad_sq - 2 * mu * gap) / 2)
# Exact rational witness over a complete grid of quadratic eigenvalues.
violations: list[dict[str, str]] = []
for l_num in range(1, 13):
for mu_num in range(1, l_num + 1):
Lq = Fraction(l_num, 1)
muq = Fraction(mu_num, 1)
for gamma_fraction in (Fraction(1, 4), Fraction(1, 2), Fraction(1, 1)):
gq = gamma_fraction / Lq
for eigen_num in range(mu_num, l_num + 1):
lam = Fraction(eigen_num, 1)
contraction = (1 - gq * lam) ** 2
bound = 1 - gq * muq
if contraction > bound:
violations.append(
{
"L": str(Lq),
"mu": str(muq),
"gamma": str(gq),
"eigenvalue": str(lam),
}
)
# Negative controls: remove each indispensable assumption.
gamma_bad = Fraction(5, 2) / Fraction(10, 1)
quadratic_bad_contraction = (1 - gamma_bad * 10) ** 2
quadratic_claimed_bound = 1 - gamma_bad * 1
non_pl_ratios = [
float((4 * x**6) / (2 * x**4)) for x in (1.0, 0.1, 0.01, 0.001)
]
controls = {
"gamma_above_1_over_L_breaks_certificate": bool(
quadratic_bad_contraction > quadratic_claimed_bound
),
"gamma_bad": str(gamma_bad),
"bad_contraction": str(quadratic_bad_contraction),
"bad_claimed_bound": str(quadratic_claimed_bound),
"non_pl_gradient_ratio_tends_to_zero": bool(
all(a > b for a, b in zip(non_pl_ratios, non_pl_ratios[1:]))
and non_pl_ratios[-1] < 1e-4
),
"non_pl_ratios": non_pl_ratios,
}
passed = (
boundary_identity == 0
and pl_identity == 0
and not violations
and all(
controls[key]
for key in (
"gamma_above_1_over_L_breaks_certificate",
"non_pl_gradient_ratio_tends_to_zero",
)
)
)
return {
"claim": "Paper Proposition 1 linear convergence under A1",
"verdict": "VERIFIED" if passed else "BLOCKED",
"symbolic_certificate": {
"descent_to_half_step_identity": str(boundary_identity),
"pl_substitution_identity": str(pl_identity),
"assumptions": [
"L-smooth loss",
"mu-PL: ||grad l||^2 >= 2 mu (l-inf l)",
"0 < gamma <= 1/L",
"idealized SOSMC update equals exact gradient descent by Lemma 1",
],
},
"exact_quadratic_grid": {
"L_values": 12,
"mu_per_L": "all integers 1..L",
"gamma_fractions_of_1_over_L": ["1/4", "1/2", "1"],
"eigenvalues": "all integers mu..L",
"violations": violations,
},
"negative_controls": controls,
"passed": passed,
}
def _empirical_chi2(
delta: np.ndarray, covariance: np.ndarray, seed: int, n: int
) -> tuple[float, float]:
rng = np.random.default_rng(seed)
samples = rng.multivariate_normal(np.zeros(delta.size), covariance, size=n)
precision = np.linalg.inv(covariance)
log_ratio = samples @ precision @ delta - 0.5 * delta @ precision @ delta
# chi2(p||q) + 1 = E_q[(p/q)^2].
empirical = float(np.mean(np.exp(2.0 * log_ratio)))
exact = float(np.exp(delta @ precision @ delta))
return empirical, exact
def verify_equation_19(seed: int) -> dict[str, Any]:
"""Verify the exact Gaussian identity and its domain, independently."""
t, d, sigma = sp.symbols("t d sigma", real=True, positive=True)
q = sp.exp(-t**2 / (2 * sigma**2)) / sp.sqrt(2 * sp.pi * sigma**2)
ratio = sp.exp((2 * t * d - d**2) / (2 * sigma**2))
integral = sp.integrate(sp.simplify(q * ratio**2), (t, -sp.oo, sp.oo))
symbolic_identity = sp.simplify(integral - sp.exp(d**2 / sigma**2))
rng = np.random.default_rng(seed)
dimensions = (1, 2, 5, 11)
rows = []
for dim in dimensions:
a = rng.normal(size=(dim, dim))
covariance = a @ a.T + 2.0 * np.eye(dim)
direction = rng.normal(size=dim)
precision = np.linalg.inv(covariance)
norm = math.sqrt(float(direction @ precision @ direction))
delta = direction * (0.45 / max(norm, 1e-12))
empirical, exact = _empirical_chi2(delta, covariance, seed + dim, 250_000)
rows.append(
{
"dimension": dim,
"empirical_chi2_plus_one": empirical,
"exact_chi2_plus_one": exact,
"relative_error": abs(empirical - exact) / exact,
}
)
# Negative control: Equation 19 assumes equal covariance. For zero mean but
# unequal covariance it would predict rho=N, although chi2 is nonzero.
variance_p = 1.2
variance_q = 1.0
chi2_plus_one_mismatch = variance_q / math.sqrt(
variance_p * (2 * variance_q - variance_p)
)
mismatch_chi2 = chi2_plus_one_mismatch - 1.0
controls = {
"unequal_covariance_invalidates_equal_covariance_formula": mismatch_chi2 > 0.01,
"variance_p": variance_p,
"variance_q": variance_q,
"actual_chi2": mismatch_chi2,
"equation_19_wrongly_extended_chi2": 0.0,
}
max_relative_error = max(row["relative_error"] for row in rows)
passed = (
symbolic_identity == 0
and max_relative_error < 0.025
and controls["unequal_covariance_invalidates_equal_covariance_formula"]
)
return {
"claim": "Paper Equation 19 for equal-covariance Gaussian targets",
"verdict": "VERIFIED" if passed else "BLOCKED",
"symbolic_univariate_whitened_identity": str(symbolic_identity),
"independent_monte_carlo": rows,
"max_relative_error": max_relative_error,
"negative_controls": controls,
"passed": passed,
}