Skip to content

Commit 9749c9c

Browse files
committed
docs(perturbation-sim): map the electricity cascade onto compute_dag — same topological recompute, plus the Weyl bound that certifies incrementality
The crates/perturbation-sim outage simulator is the physical instance of the same dependency-driven topological recompute that ClassView::compute_dag + compute_dag_topo_order + write_row express abstractly: simulate_outage round loop ≡ compute_dag_topo_order dispatch trip_round[e] (which round) ≡ topological generation seed trip = rank-1 E on L ≡ the dirty seed write_row(seed, cycle) spectral_perturbation Weyl ≡ the NNUE incremental ≡ full bound PerturbationShape.node_field ≡ the wave/field readoff splat::morton2 ≡ the 2-axis router address sketch::fwht + walsh pyramid ≡ the deterministic field encoder witness::particle_equals_wave≡ the particle/wave click, on a real field The honest framing: the two crates are complementary halves. perturbation-sim does the EXACT FULL recompute each round (robust, no LODF drift) but ships the certification apparatus — its Weyl/Davis-Kahan bounds are exactly what an incremental scheme needs to prove it equals the full recompute. compute_dag is the incremental dispatch; the Weyl bound certifies why it's sound. Stockfish NNUE proves the incremental side at scale. No dependency added: perturbation-sim stays zero-dep / workspace-excluded. This is a doc-level join (COMPUTE_DAG_MAPPING.md) + epiphany, not a contract import. The crate already self-guards every scope line (no measured speed claim in witness.rs; numeric witness arc explicitly NOT the contract WitnessTable per I-VSA-IDENTITIES; Jirak not IID Berry-Esseen per I-NOISE-FLOOR-JIRAK). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CcpLeEC3XK8Eye53GKBVvi
1 parent 478ca2a commit 9749c9c

2 files changed

Lines changed: 103 additions & 0 deletions

File tree

.claude/board/EPIPHANIES.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,28 @@
1+
## 2026-06-18 — E-PERTURBATION-CASCADE-IS-COMPUTE-DAG — the electricity cascade crate is `compute_dag` already running on a real physical field, and it ships the Weyl bound that certifies the incremental recompute
2+
3+
**Status:** FINDING (mechanism mapping; no dependency added). The `crates/perturbation-sim` outage simulator is the physical instance of the SAME topological recompute `ClassView::compute_dag` + `compute_dag_topo_order` + `write_row` express abstractly. Doc-level join only (`crates/perturbation-sim/COMPUTE_DAG_MAPPING.md`); the crate stays zero-dep / workspace-excluded — no `lance-graph-contract` import. Grounds: `E-CHESS-TENSOR-PROVEN`, `E-EXCEL-SHADER-PROJECTION`, `E-OGAR-ROUTER-ENCODER`, `probe-excel-compute-dag-v1`.
4+
5+
**The mapping (mechanism, not rhyme):**
6+
7+
| `perturbation-sim` | `compute_dag` substrate |
8+
|---|---|
9+
| `simulate_outage` round loop (trip → recompute survivors → re-trip) | `compute_dag_topo_order` dispatch (edit → dirty-set → recompute dependents) |
10+
| `PerturbationShape::trip_round[e]` (round each line tripped, `0`=seed) | the topological generation in `compute_dag_topo_order` |
11+
| seed trip = rank-1 `E` on Laplacian `L` | the dirty seed `write_row(seed, cycle)` |
12+
| `spectral_perturbation` Weyl `\|λᵢ(L′)−λᵢ(L)\|≤‖E‖₂` + Davis–Kahan | the **NNUE incremental ≡ full** invariant: bounded local edit → bounded global perturbation → dirty-set is the complete support |
13+
| `PerturbationShape::node_field` | the wave/field readoff (`E-OGAR-ROUTER-ENCODER` field side) |
14+
| `splat::morton2` | the 2-axis router ADDRESS (256×256 tile, GREEN case) |
15+
| `sketch::fwht` + `walsh_pyramid_energy` | the deterministic field ENCODER (Walsh pyramid) |
16+
| `witness::particle_equals_wave` (Parseval over FWHT) | particle (`∑field·arc`) ≡ wave (transform once, many arcs) — proven on a real field |
17+
18+
**The headline (truth-architect honesty):** the two crates are deliberate **complementary halves**. `perturbation-sim` does the EXACT FULL recompute each round (robust, no LODF drift) but ships the **certification apparatus** — its Weyl/Davis–Kahan bounds are precisely the inequalities an incremental scheme needs to prove it equals the full recompute. `compute_dag` is the INCREMENTAL dispatch (recompute only dirty dependents in topo order, gated by `write_row`); the Weyl bound this crate certifies is *why* that incremental recompute is sound. **This crate = proof + full reference + router/field/witness encoders; the `compute_dag` harness = the incremental consumer whose equivalence the bound certifies.** Stockfish NNUE proves the incremental side at scale; perturbation-sim proves the bound holding it together is real.
19+
20+
**Why it strengthens the arc without diluting:** `E-OGAR-ROUTER-ENCODER` flagged OSM → splat → electricity as the 3D *sibling* cascade (N=3 Hilbert, distinct from the 2-axis centroid tile). This says: that 3D cascade is a legitimate `compute_dag` consumer — its recompute order IS `simulate_outage`'s round structure, its incremental-equivalence IS Weyl-bounded. The crate already self-guards every scope line we'd draw: no measured speed claim (`witness.rs`), the numeric witness arc explicitly NOT the contract `WitnessTable` (`I-VSA-IDENTITIES`), significance via Jirak not IID Berry–Esseen (`I-NOISE-FLOOR-JIRAK`). Nothing new to strip; the costume was never put on here.
21+
22+
**Scope guard (unchanged):** per-bus/per-cell evaluation semantics are general compute via the DO arm / `UnifiedStep` — the *recompute structure* transfers, the *formula/injection content* does not. Same line `E-EXCEL` / `E-CHESS` drew. Cross-refs: `crates/perturbation-sim/COMPUTE_DAG_MAPPING.md`, `class_view::{compute_dag, compute_dag_topo_order, compute_dag_is_acyclic}`.
23+
24+
---
25+
126
## 2026-06-18 — E-CHESS-TENSOR-PROVEN — chess AI is the proven-at-scale instance of router(grid)+field(planes)+incremental-recompute(NNUE)+search(MCTS); its 4 species = the session's 4 facets
227

328
**Status:** FINDING (grounding/validation). Makes `E-EXCEL-SHADER-PROJECTION` / `PROBE-EXCEL-COMPUTE-DAG` non-speculative: the architecture it proposes is what production chess engines already run.
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
# perturbation-sim ≡ `compute_dag` — the electricity cascade IS the topological recompute
2+
3+
> **Status:** FINDING (conceptual mapping; no code dependency added). `perturbation-sim`
4+
> stays zero-dep / workspace-excluded — this is a doc-level join, not a `lance-graph-contract`
5+
> import. The two crates share a *mechanism*, proven on opposite ends: this crate ships the
6+
> certified physics + full recompute + the router/field/witness encoders; `compute_dag`
7+
> (`lance-graph-contract::class_view`) ships the incremental dispatch the physics bound certifies.
8+
>
9+
> **Grounds:** `E-CHESS-TENSOR-PROVEN`, `E-EXCEL-SHADER-PROJECTION`, `E-OGAR-ROUTER-ENCODER`,
10+
> `probe-excel-compute-dag-v1`. **Cross-ref iron rule:** `I-NOISE-FLOOR-JIRAK` (significance
11+
> uses Jirak 2016, not IID Berry–Esseen), `I-VSA-IDENTITIES` (the numeric witness arc is NOT
12+
> the contract's identity `WitnessTable` — this crate's own `witness.rs` already guards that).
13+
14+
## The one-line claim
15+
16+
A cascading grid outage and a spreadsheet recompute are **the same dependency-driven
17+
topological recompute**. Trip a line → redistribute flow → re-trip whatever now overloads
18+
is, *structurally*, edit a cell → dirty its dependents → recompute them in topological order.
19+
`perturbation-sim::simulate_outage` is the physical instance; `ClassView::compute_dag` +
20+
`compute_dag_topo_order` + `write_row` is the abstract substrate. NNUE proves the same shape
21+
at world-champion strength (`E-CHESS-TENSOR-PROVEN`).
22+
23+
## The mapping (each row a mechanism, not a rhyme)
24+
25+
| `perturbation-sim` (physical grid) | `compute_dag` / OGAR substrate | what it is |
26+
|---|---|---|
27+
| `simulate_outage` round loop (trip → recompute survivors → re-trip) | `compute_dag_topo_order` recompute dispatch (edit → dirty-set → recompute dependents) | **the cascade ≡ the topological recompute** |
28+
| `PerturbationShape::trip_round[e]` (round each line tripped; `0` = seed) | the topological *generation* of each recomputed field = its position in `compute_dag_topo_order` | **trip generation = topo generation** |
29+
| seed `alive[seed_line]=false` → rank-1 `E` on Laplacian `L` | the dirty seed: `write_row(seed_cell, cycle)` | **the trip = the gated edit** |
30+
| `spectral_perturbation`: Weyl `\|λᵢ(L′)−λᵢ(L)\| ≤ ‖E‖₂`, Davis–Kahan `sinθ ≤ ‖E‖₂/gap` | the **NNUE incremental ≡ full** invariant: a bounded local edit perturbs the global field by a bounded amount, so recomputing only the dirty-set provably equals a full recompute | **the bound that certifies incrementality** |
31+
| `PerturbationShape::node_field` (per-bus magnitude, the red footprint) | the wave/field readoff over the grid (`E-OGAR-ROUTER-ENCODER` field side) | **the wave** |
32+
| `splat::morton2` (x/y nibble-interleave) | the 2-axis router ADDRESS (`HEEL/HIP/TWIG` 256×256 tile) | **the router** (`E-OGAR-ROUTER-ENCODER` GREEN 2-axis case) |
33+
| `sketch::fwht` + `walsh_pyramid_energy` | the deterministic FIELD ENCODER (Walsh–Hadamard pyramid) | **the encoder** |
34+
| `witness::particle_equals_wave` (Parseval over FWHT) | particle (pointer-chase `∑field·arc`) ≡ wave (one transform, many arcs) | **the particle/wave click, proven on a real field** |
35+
36+
## The crucial honesty (why this is a join, not a merge)
37+
38+
The two ends are **complementary halves**, deliberately:
39+
40+
- **`perturbation-sim` does the EXACT FULL recompute each round**`simulate_outage` recomputes
41+
DC flows on the *surviving* network from scratch every round ("robust where iterated single-line
42+
LODF would drift", per `cascade.rs`). It is NOT incremental. What it ships *alongside* is the
43+
**certification apparatus**: `spectral_perturbation`'s Weyl/Davis–Kahan bounds are exactly the
44+
inequalities an incremental scheme needs to prove it equals the full recompute.
45+
- **`compute_dag` is the INCREMENTAL dispatch** — recompute only the dirty dependents, in
46+
`compute_dag_topo_order`, each gated by the cycle-aware `write_row`. The Weyl bound this crate
47+
certifies is *why* that incremental recompute is sound (a bounded local change → bounded global
48+
perturbation → the dirty-set is the complete support of the change).
49+
50+
So: **this crate = the proof + the full reference + the router/field/witness encoders; the
51+
`compute_dag` harness = the incremental consumer whose equivalence this crate's Weyl bound
52+
certifies.** Stockfish NNUE is the existence proof that the incremental side works at scale;
53+
this crate is the existence proof that the bound holding it together is real.
54+
55+
## What this does NOT claim (scope guard)
56+
57+
- **No speed claim.** `witness.rs` already states the particle/wave win is "one field, many arcs
58+
whose spectra are reusable", not a measured single-arc speedup. This doc inherits that honesty.
59+
- **No new dependency.** `perturbation-sim` remains zero-dep, workspace-excluded, standalone.
60+
This is a conceptual bridge; the only wiring is the optional `ndarray-simd` git feature that
61+
already existed for the eigensolver/reliability path.
62+
- **The numeric witness arc ≠ the contract `WitnessTable`.** Already guarded in `witness.rs`
63+
(`I-VSA-IDENTITIES` register-loss / Frankenstein hazard). The mapping above pairs *mechanisms*
64+
(Parseval ≡ particle/wave), never the value categories (`&[f64]` field vs 6-bit W-slot identity).
65+
- **Per-node/per-cell evaluation semantics are general compute**, dispatched via the DO arm /
66+
`UnifiedStep` — not the Walsh field. The *recompute structure* transfers; the *formula content*
67+
(`=VLOOKUP`, a per-square chess eval, a per-bus injection) does not. Same line `E-EXCEL` /
68+
`E-CHESS` already drew.
69+
70+
## Consumer payoff
71+
72+
The probe `probe-excel-compute-dag-v1` lands `ClassView::compute_dag` on the clean 2-axis sheet.
73+
This doc shows the *same* `compute_dag` already has a physical, certified instance here: an OSM →
74+
gaussian-splat → electricity-perturbation consumer (the 3D sibling cascade of `E-OGAR-ROUTER-ENCODER`)
75+
is a `compute_dag` consumer whose recompute order is `simulate_outage`'s round structure and whose
76+
incremental-equivalence is Weyl-bounded. Every computed-field AR consumer (odoo `@api.depends`,
77+
medcare lab-trends, woa calc, q2 cells, **and** the electricity-cascade analytics) reduces to the
78+
same `compute_dag_topo_order` dispatch.

0 commit comments

Comments
 (0)