nPC7M7XLEv / current /code /claim6_checker.py
DineshAI's picture
Add current claim verification evidence (part 1)
c6eaad2 verified
Raw
History Blame Contribute Delete
4.1 kB
"""Independent raw-witness checker for Claim 6."""
from __future__ import annotations
import json
from pathlib import Path
import numpy as np
from scipy.optimize import linear_sum_assignment
def check(runtime_dir: Path) -> dict[str, object]:
traces = json.loads((runtime_dir / "claim_6_fw_traces.json").read_text())
witnesses = json.loads(
(runtime_dir / "claim_6_witnesses.json").read_text()
)
schedules = json.loads(
(runtime_dir / "claim_6_consistency_rows.json").read_text()
)
controls = json.loads(
(runtime_dir / "claim_6_negative_control.json").read_text()
)
maximum_gap_disagreement = 0.0
maximum_marginal_error = 0.0
schedule_failures = 0
for trace, witness in zip(traces, witnesses, strict=True):
dx = np.asarray(witness["dx"], dtype=np.float64)
dy = np.asarray(witness["dy"], dtype=np.float64)
cost = np.asarray(witness["cost"], dtype=np.float64)
coupling = np.asarray(witness["final_coupling"], dtype=np.float64)
alpha = float(witness["alpha"])
n = coupling.shape[0]
residual = (dx / n) @ coupling - coupling @ (dy / n)
structural_gradient = n * n * (
(dx / n).T @ residual - residual @ (dy / n).T
)
grad = (1.0 - alpha) * cost + alpha * structural_gradient
rows, columns = linear_sum_assignment(grad)
atom = np.zeros_like(coupling)
atom[rows, columns] = 1.0 / n
recomputed_gap = float(np.sum(grad * (coupling - atom)))
recorded_gap = float(trace["final_fw_duality_gap"])
maximum_gap_disagreement = max(
maximum_gap_disagreement, abs(recomputed_gap - recorded_gap)
)
maximum_marginal_error = max(
maximum_marginal_error,
float(np.max(np.abs(coupling.sum(axis=0) - 1 / n))),
float(np.max(np.abs(coupling.sum(axis=1) - 1 / n))),
)
expected_bound = 32.0 * alpha * n / (
int(trace["iterations"]) + 3
)
schedule_failures += int(
abs(
expected_bound
- float(trace["final_theorem_optimization_bound"])
)
> 1e-14
)
valid_grouped: dict[tuple[int, float], list[dict[str, object]]] = {}
for row in schedules:
valid_grouped.setdefault(
(int(row["dimension"]), float(row["alpha"])), []
).append(row)
valid_monotonic_failures = 0
for rows in valid_grouped.values():
ordered = sorted(rows, key=lambda row: int(row["n_min"]))
valid_monotonic_failures += sum(
float(later["n_min_over_T_n"])
>= float(earlier["n_min_over_T_n"])
for earlier, later in zip(ordered, ordered[1:])
)
control_ratio_failures = sum(
abs(float(row["n_min_over_T_n"]) - 1.0) > 1e-15
for row in controls
)
gates = {
"all_raw_witnesses_recomputed": len(traces) == len(witnesses) == 2,
"independent_fw_gap_agrees": maximum_gap_disagreement < 1e-10,
"witness_marginals_exact": maximum_marginal_error < 1e-10,
"theorem_bound_formula_recomputed": schedule_failures == 0,
"valid_schedule_ratio_strictly_decreases": valid_monotonic_failures == 0,
"invalid_control_ratio_stays_one": control_ratio_failures == 0,
}
result = {
"checker": "independent matrix-gradient, assignment, and schedule audit",
"maximum_fw_gap_disagreement": maximum_gap_disagreement,
"maximum_witness_marginal_error": maximum_marginal_error,
"bound_formula_failures": schedule_failures,
"valid_schedule_monotonic_failures": valid_monotonic_failures,
"control_ratio_failures": control_ratio_failures,
"gates": gates,
"all_gates_pass": all(gates.values()),
}
(runtime_dir / "claim_6_independent_checker.json").write_text(
json.dumps(result, indent=2) + "\n", encoding="utf-8"
)
if not result["all_gates_pass"]:
raise RuntimeError("Independent Claim 6 checker failed")
return result