p8v2 — E and P, rendered

A 3-D rendering of the event spaces and patterns of the p8v2 P-program, run over a fixed 128-byte prefix of enwik9, with k = 8 and N = 128. Rendered from p8v2-viz-spec.md; every figure below is reproducible from that file alone.

PROVISIONAL — f and ω are not specified

Five things in these figures are scaffolding, not design. They exist so the program runs. Everything derived from them is drawn dashed, in warning colour, and named here and on every frame.

strengthslog-scaled occurrence countsstands in for LSA
keep/prune scoreoccurrence count, budget never bindsstands in for omega
composite predictlongest context winsrejected by the design
trace membershipcomposite mispredictionsbelongs to omega, unspecified
settlingiterative relaxation, 24 itersstands in for f
byte events — the byte ES and every mem_cell_ik-models — the k0 profile and the k1 edgestokens — nodes, AND-gate inputs, consequentsmemchain — inert scaffolding, not a seriesPROVISIONAL — dashed

The fixture

Exactly 128 bytes, all printable US-ASCII, verified byte-for-byte against the first 128 bytes of a real enwik9 before these figures were rendered.

sha256 b492bc32a8260bc10e8f1278f7f362fdece48d097ff9954cca681b86aa3193f5. Colons are written as character references so this page contains no literal http scheme text, which acceptance criterion 11 forbids.

Stills

t = 8 — the first full k = 8 window t = 8 — the first full k = 8 window
1. t = 8 — the first full k = 8 window — Eight bytes are in the chain, so every level from k = 2 to k = 8 has an antecedent for the first time. All seven token nodes are present, each with its k AND-gate inputs reaching down to the byte events they gate on, and each with a consequent edge onto the live input at x = 127.
t = 22 — the http: example being learned t = 22 — the http: example being learned
2. t = 22 — the http: example being learned — The design document's worked example. B[18..22] is 'http:'. This is the step whose learned patterns Phase C later settles against.
t = 127 — the end of the scan t = 127 — the end of the scan
3. t = 127 — the end of the scan — The chain is full. Cells past lag 32 have faded to gridline ink: they are the inert tail, carrying the memory-chain pattern and nothing else. Trace rings have accumulated over the whole run.
Phase B — the learned model at rest, camera iso Phase B — the learned model at rest, camera iso
4. Phase B — the learned model at rest, camera iso — Every kept pattern at every level, each drawn at the offset where it was first learned. The iso camera crops x to [88, 142], so this shows the settling window and the k0 profile; the inert tail is in the scene but outside the crop (§7).
Phase C iteration 0 — PROVISIONAL Phase C iteration 0 — PROVISIONAL
5. Phase C iteration 0 — PROVISIONAL — Cells for indices 18, 19 and 22 are clamped; 20 and 21 are open and start at the k = 0 marginal — which is what 'no information yet' actually means here.
Phase C iteration 4 — PROVISIONAL Phase C iteration 4 — PROVISIONAL
6. Phase C iteration 4 — PROVISIONAL — Token instances above AND_THETA fan out across offsets: not just the alignment starting at 'ht' but every overlapping one.
Phase C iteration 23 — PROVISIONAL Phase C iteration 23 — PROVISIONAL
7. Phase C iteration 23 — PROVISIONAL — The final relaxed state. Whether it reaches 'http:' is not an acceptance criterion (§12.7); the caption reports what happened.
Phase B, camera levels — down the chain axis Phase B, camera levels — down the chain axis
8. Phase B, camera levels — down the chain axis — Looking along x. The levels stack up the z axis and the fan-out of token nodes over byte values is visible. z = 6 is empty by design.
Phase B, camera top — plan view Phase B, camera top — plan view
9. Phase B, camera top — plan view — Looking down from above: lexicon occupancy across the chain, per level.
Phase D — trace comparison, camera chain Phase D — trace comparison, camera chain
10. Phase D — trace comparison, camera chain — Pure side-on: the value axis collapses and the chain reads as a strip of 128 cells, so trace membership reads as a barcode of surprises. Class-2 rings are trace_k1, class-3 rings are trace_composite.

Animations

Phase A + Phase B held
p8v2-scan.gif
Phase A + Phase B held — 128 frames of the learning scan, then the model at rest. A byte enters at the right edge and ages leftward; learned predictions run left to right onto it.
Phase C — settling
p8v2-settle.gif
Phase C — settling — 24 relaxation iterations on the http: example. Entirely PROVISIONAL: this is a plain iterative relaxation standing in for a process the design specifies as continuous, bidirectional and frequency-domain.
Phase E — orbit
p8v2-orbit.gif
Phase E — orbit — 72 frames, azimuth stepping 5° per frame, on the Phase B state. Purely for reading the 3-D structure.

stats.txt

Written verbatim by the renderer. Two runs produce an identical file (acceptance criterion 12); every number was computed from the fixture.

fixture_len              128
fixture_sha256           b492bc32a8260bc10e8f1278f7f362fdece48d097ff9954cca681b86aa3193f5
fixture_verified         yes   # byte-identical to the first 128 bytes of enwik9
distinct_bytes           34
k0                       0x2f '/'   # count 9
k1_entries               34
k1_ties_broken           10
k1[h]                    0x65 'e'   # the worked tie, S 4.3
lex_2_size               84   # of 126 windows, max_occ 4
lex_3_size               94   # of 125 windows, max_occ 3
lex_4_size               101   # of 124 windows, max_occ 2
lex_5_size               105   # of 123 windows, max_occ 2
lex_6_size               109   # of 122 windows, max_occ 2
lex_7_size               111   # of 121 windows, max_occ 2
lex_8_size               112   # of 120 windows, max_occ 2
lex_k_budget_bound       no   # every k; budget 256, max lexicon 112
trace_k1_size            63
trace_composite_size     3   # positions 0, 38, 82
model_bytes_naive        4422   # sum over k=2..8 of (k+1)*|lex[k]|
settle_final_argmax      'http:'   # Phase C result at indices 18..22
settle_round_trip        yes   # S 12.7: not an acceptance criterion either way
phase_b_dropped          197   # token instances dropped at artist cap 4000
placeholders_in_force    strengths,score,composite,trace,settling

What this figure does and does not claim

The trace drops from 63 surprising positions under the k ≤ 1 model to 3 under the composite one. That is not a compression win. The model spends 4422 bytes of stored patterns to remove 60 trace entries from a 128-byte input, because at N = 128 almost every 8-gram is unique (112 distinct of 120) and the placeholder composite rule is simply reciting the fixture back. A viewer who comes away believing otherwise has been misled, and the figure has failed.

Readings and deviations

Where the spec left something open or where two of its sections pulled against each other, this is what was chosen.

§7 camera chain, and why Phase D reads as a strip

azimuth −90°, elevation 0° puts the eye in the x–y plane looking along +y, so the value axis collapses and the z = 0 plane is seen edge-on. For Phase D that is the right picture and not a degenerate one: only the memory chain is drawn, each of the 128 cells is unique in x, and trace membership becomes a one-dimensional barcode — which is exactly what a trace is.

§8.2 where a resting token is drawn

§5.3 fixes o = 1 during the learning scan and leaves the offset free otherwise. Phase B therefore draws each kept pattern at the offset where it was first learned, so its AND-gate inputs land on the chain cells that actually hold those bytes. Drawing every level-k token at o = 1 instead would stack the whole level into one x column and lose the occupancy that the top camera exists to show.

§13 the artist cap, and what it dropped

Phase B wants about 5,400 marks, over the 4,000 cap. Token instances are dropped in ascending ω-score order (occurrence count, then lexicon position) and the count is printed on the figure and in stats.txt. Silent truncation would make a thinned frame read as a sparse model.

§6.3 the provisional envelope in Phase C

Every mark in Phase C is placeholder-driven. Drawing all of them in warning yellow would erase the three-class encoding, so the envelope is marked instead: a dashed warning-coloured frame around the whole figure, dashed token edges, and the standing panel.

§6.1 the light variant

§2.3 says the renderer takes no arguments and §6.1 asks for a --light build. Both are honoured by rendering the ten stills in both surfaces and switching between them with the page theme. The GIFs are dark only.

§2.3 verification

The fixture was checked byte-for-byte against a real enwik9 before these figures were rendered: the 128 bytes are identical to the first 128 bytes of the corpus, so §2.3's 'reconstructed, not copied' caveat on B[64:128] is now discharged.

Files

p8v2-viz.pythe renderer — no arguments, writes ./out/
out/frames/128 scan + 24 settle + 72 orbit PNGs
out/*.gifthe three animations
out/still-*.pngthe ten stills, dark surface
out/light/still-*.pngthe ten stills, light surface
out/stats.txtthe machine-checkable figures
out/p8v2.htmlthis page — one self-contained file