| --- |
| language: en |
| license: mit |
| tags: |
| - physics |
| - scientific-discovery |
| - deterministic-computation |
| - logistic-map |
| - hardware-characterization |
| --- |
| |
| # TAV RGC World β Deterministic 49-Core Logistic Lattice |
|
|
| **A hardware-characterized, finite-precision logistic-map lattice (49 parallel Q1.31 iterators) on an Artix-7 FPGA** |
|
|
| This world definition provides a realistic computational substrate based on actual FPGA telemetry from the `logistic_bank` core on the Arty A7-100T. It implements a 49-core synchronous logistic-map lattice in **Q1.31** fixed-point arithmetic (32-bit recurrent state per core), with per-core `r` values spanning [3.5, 4.0] to tile the period-doubling route to chaos. The state is telemetered as its **top 24 bits** (`x_value[31:8]`); the low 8 bits are retained on-chip but not transmitted. |
|
|
| ## What This World Represents |
|
|
| Unlike purely theoretical or software-simulated worlds, this definition is grounded in **measured hardware behavior** from four independent cold-start runs (N1, N2, N3, N4). The current reference run is **N4: 30 days, 0:00:00 of continuous capture, closed by a pre-scheduled termination on 2026-07-06** with an instrument-generated session certificate. |
|
|
| Key measured properties: |
|
|
| - **Cross-run bit-exact determinism.** Independent cold-start runs reproduce identical telemetered sequences (24-bit `x`, full-width `n`) over their full common prefix: N1 β‘ N2 β‘ N3 β‘ N4. This is the lattice's most-verified property. |
| - **16 cores** have periods short enough to be *exactly resolved* within the capture window and faithfully through the 24-bit telemetry. |
| - **33 cores** have periods that are only *lower bounds*, for two compounding reasons: (a) their true period in the 32-bit Q1.31 state space exceeds the observation window, and (b) the 24-bit export drops the low 8 state bits, so an apparent repeat in telemetry is not a confirmed period (distinct 32-bit states can share the same top 24 bits). The partition is therefore an **observation/telemetry-resolvability** property, not a structural feature of the dynamics. (See the core 04 case study below for this caveat demonstrated live.) |
| - Strict data integrity: only frames with `delta_n = 49` are accepted. The iteration counter `n` is telemetered at full 32-bit width, so the integrity accounting is exact and unaffected by the `x` truncation. |
| - **Zero observed single-event upsets** across the 30-day N4 run: no configuration or state upset surfaced anywhere in the Ξn or orbit data, on hobbyist-grade silicon at sea level. |
|
|
| ## N4 Reference Run β Session Certificate (2026-06-06 β 2026-07-06) |
|
|
| N4 was closed at exactly 30 days by a pre-scheduled SIGINT; the bridge's automatic session summary is reproduced here as the run's certificate: |
|
|
| | Metric | Value | |
| |---|---| |
| | Duration | 30 days, 0:00:00 | |
| | Logistic frames | 18,143,975 (0 malformed) | |
| | Total heartbeats | 18,218,909 (0 lost) | |
| | Cores observed | 49 / 49 | |
| | Iteration health | delta_n mean = 49.0, min = 49, max = 49 | |
| | Average frame rate | 7.03 Hz | |
| | Stability score | 81.2 / 100 | |
| |
| The delta_n line is the whole integrity verdict in one row: across a full month of continuous capture, the per-core iteration delta never once deviated from exactly 49. |
|
|
| ## Witnessed 2^24 Counter Crossing |
|
|
| The N4 window contained the iteration counter's 2^24 carry (n = 16,777,216, reached at day ~27.7). The event was predicted in advance β including which core would export the exact carry row (core 08, since 2^24 mod 49 = 8) β and certified from the captured data: |
|
|
| - Zero delta_n β 49 rows in the 10,001 frames straddling the carry (Β±5,000); |
| - 49/49 cores show clean straddles; |
| - The exact carry row was logged by core 08 as predicted (n = 0x01000000, x_raw24 = 0x49DE3E); |
| - All telemetry-periodic cores' orbit sets are bit-identical before and after the crossing. |
|
|
| The carry is arithmetic, not an event: the counter is an odometer, and the lattice state marches through it unchanged. |
|
|
| ## Case Study: Core 04 and the 24-bit Telemetry Caveat |
|
|
| Core 04 (r = 3.5416Μ, the lattice's closest core to the 4β8 bifurcation at r β 3.5441) demonstrates the resolved/projected caveat in live data. Three views of one orbit: |
|
|
| - A 6-decimal normalized view of the telemetry shows **4** distinct values; |
| - The raw 24-bit export shows **6** distinct codes (stable from frame ~200k to end of run, with no step change β consistent with zero upsets); |
| - The true 32-bit on-chip cycle, computed by a bit-exact software twin of the datapath, is **period-8**: two of the six 24-bit codes each conceal an LSB-adjacent pair of 32-bit states. |
|
|
| One orbit, three resolutions. The quantized hardware expresses period-8 structure at an r value ~0.0024 *before* the continuum bifurcation point β real period-doubling microstructure in fixed-point silicon. **Standing rule derived from this case: exact-period claims are made on `x_raw24`, never on the normalized decimal view.** |
| |
| ## Uncoupledness, Verified Three Ways |
| |
| Each core's update consumes only its own state and its own `r` word. This is verified by (a) the RTL source (no neighbor term exists in the update), (b) a solo-core software twin that reproduces the telemetered sequences bit-exactly β impossible if any inter-core coupling existed, since a single injected LSB would diverge chaotic cores within ~100 frames β and (c) the month-long coexistence of bit-exact period-locked cores adjacent to chaotic cores, which no nonzero coupling permits. The lattice is a synchronous, **uncoupled** bank of 49 independent maps; sharing a clock is not sharing state. |
| |
| ## Reproducibility β scope of the claim |
| |
| Reproducibility is asserted for the **telemetered `x` observable (top 24 bits of the 32-bit Q1.31 state)** and for the full-width `n` counter. The recurrent state is 32 bits; the export transmits the high 24 of those bits and drops the low 8 (noise-dominated). Identical cold-start runs therefore reproduce the same *telemetered* `x` sequences bit-for-bit, but this is reproducibility of the 24-bit observable, not a claim about the 8 untransmitted state bits. This is the strongest statement the telemetry can support, and it is the one made here. |
| |
| ## Data Integrity and the Capture-Onset Transient |
| |
| Frame integrity is enforced by a single rule: only frames carrying a global iteration delta of exactly `delta_n = 49` are accepted. |
| |
| **Steady-state frame corruption is zero.** All rejected frames occur during the *capture-onset framer-lock transient* β the interval before byte/frame alignment is acquired on the free-running UART stream β and they never recur once lock is established. The FPGA emits frames continuously and does not wait for the host; when the host attaches, it drops into a live stream with pre-existing bytes in the transmit FIFO and OS serial buffer. Until two consecutive sequence-numbered frames produce a valid `delta_n = 49`, each misaligned read fails the integrity test and is rejected. Once lock is acquired it is retained for the remainder of the capture. |
|
|
| Empirically the transient is a **fixed-depth flush** in N1βN3: exactly **49** frames rejected in every run, independent of capture length β one per core, consistent with a single stale 49-core readout sweep being cleared before lock. N4's hardened bridge reported **0 malformed frames over the full 30-day capture** at the instrument layer; the loader-level onset accounting for N4 (whether the exactly-49 pattern recurs under the hardened framer) is being confirmed against the final CSV in the post-close audit and this section will be updated with the result. |
|
|
| These onset frames are excised by the integrity rule **at the loader**, not by modifying the instrument during a live capture. A rejected frame appearing *after* lock would be a genuine anomaly; none has been observed across any run. |
|
|
| ## Run Provenance |
|
|
| - **N1** β 48 hours; planned endpoint. First determinism anchor. |
| - **N2** β 4,000,000 frames; planned endpoint (frame-count watcher). Original reference run, superseded by N4. |
| - **N3** β 8,000,000-frame target; **terminated early by a host-side port conflict** (a second consumer attached to the UART during bridge development). Its captured prefix remains bit-identical to the other runs; its ending is documented here as provenance, and the one-owner port rule adopted afterward is why N4 completed. |
| - **N4** β 30 days / 18,143,975 frames; pre-scheduled termination with automatic certificate. **Current reference run.** |
|
|
| ## Current Status |
|
|
| - **N4 is the reference run** (superseding N2). The final N4 CSV (1.3 GB) is the canonical analysis artifact. |
| - Cross-run determinism is verified bit-for-bit across all four runs over their common prefixes. |
| - The 16/33 resolved/projected partition is reproducible across runs; N4's longer window is being re-audited post-close, and any promotions from "projected" to "resolved" will update the world definition. The partition remains an observation limit, not a structural bound. |
| - A follow-on run (N5) is planned: a single-parameter retune of one core's `r` word, with a pre-registered orbit prediction to be graded against capture. |
|
|
| Full methods and analysis are documented in the accompanying `tav_rgc_world.yaml` and supporting scripts. |
|
|
| ## Files Included |
|
|
| - `tav_rgc_world.yaml` β Core world definition (v1.1) |
| - `tav_rgc_world.py` β Python loader |
| - `example_load_run.py` β Example loader with integrity filtering |
| - `compare_all_runs.py` β Comparison tool across runs |
| - `rgc_integrity.py` β Capture-onset lock detection and frame partitioning |
| - `rgc_period_census_v1.py` β Per-core period census (note: census basis is the normalized view; exact-period verdicts require `x_raw24` β see core 04 case study) |
| - `n4_crossing_certificate.py` β 2^24 carry-crossing certificate generator |
| - `README.md` β Usage documentation |
|
|
| ## Quick Start |
|
|
| ```python |
| from tav_rgc_world import RGCWorld |
| |
| world = RGCWorld("tav_rgc_world.yaml") |
| print(world.summary()) |
| |
| resolved = world.get_resolved_cores() |
| projected = world.get_projected_cores() |
| ``` |