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.
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.
| strengths | log-scaled occurrence counts | stands in for LSA |
| keep/prune score | occurrence count, budget never binds | stands in for omega |
| composite predict | longest context wins | rejected by the design |
| trace membership | composite mispredictions | belongs to omega, unspecified |
| settling | iterative relaxation, 24 iters | stands in for f |
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.
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
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.
Where the spec left something open or where two of its sections pulled against each other, this is what was chosen.
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.
§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.
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.
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.
§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.
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.
| p8v2-viz.py | the renderer — no arguments, writes ./out/ |
| out/frames/ | 128 scan + 24 settle + 72 orbit PNGs |
| out/*.gif | the three animations |
| out/still-*.png | the ten stills, dark surface |
| out/light/still-*.png | the ten stills, light surface |
| out/stats.txt | the machine-checkable figures |
| out/p8v2.html | this page — one self-contained file |