Recovery in a VSA is never exact arithmetic — you get a blurry estimate and snap it to the nearest real symbol. This lab shows the two limits that govern it: how much noise cleanup survives, and how many memories fit in one vector before they drown each other out.
Each place the agent visits yields a slightly different vector — a crumb fades, a sightline shifts. Cleanup collapses the noisy reading onto its nearest stored symbol, or, if nothing is close enough, admits it as new. Corrupt an atom and watch where it lands.
Bundle m symbols into one vector, then ask of each: is it still the nearest match, beating every random distractor? Recall holds near 1, then falls off a cliff as crosstalk swamps the signal. Raising D pushes the cliff right — the only real knob on how much one hypervector can hold.
≈ 1 − 2p to its original after flipping fraction p of bits, while staying near-zero to everything else — so cleanup recovers it cleanly until p nears 50% (signal meets noise). Bundling m items leaves each member with similarity ≈ 1/√m to the bundle; once that dips beneath the distractor ceiling (which shrinks as 1/√D), recall collapses. Capacity is the tug-of-war between those two.
cleanupSnap / cleanupNearest): every perceived state is snapped to a canonical symbol so the route memory keys on clean, repeatable vectors. The codebook is an LRU of bounded size (cap ≈ 96) precisely because a finite vector space holds only so many distinguishable symbols — exactly the cliff on the right.