Exact addressed memory

Status: PARKED. Every trained form of this idea that was tested missed its bar or broke a project rule. The plain exact store itself worked whenever its address was right. The form that matters most, where the address is the model's read, was never built. See what would reopen it.

Labels used below: proof means derived from definitions or code, measurement means a recorded run, hypothesis means an untested idea. See docs/formal_vocabulary.md.

In plain words

Write each fact once, under an exact address, and read it back exactly. Do not smear it across weights, and do not hunt for it by fuzzy similarity. The address is built from prime numbers: every word has its own prime, so the same words always name the same slot. A new value replaces the old one, but the old one stays recoverable. A fact that was never written can answer "I do not know". In the one probe that checked, the store was never the cause of a failure: among 1,905 held-out misses, none was an eviction or a wrong stored value. What failed was the model's learned step of forming the address from a question.

What it replaces in a transformer

The key-value memory. A transformer keeps a key and a value for every earlier word and finds the right one by comparing the question against all the keys. Here the question is turned into an address instead, and the address is looked up directly. No comparison against every key is needed.

A conversation scrolling past a row of numbered slots. Each stated fact writes a tile labelled with a product of two primes, and a correction stacks a new version on the old tile. A question lights the matching tile and its latest version. An unwritten key shows Absent and an overwritten slot shows Evicted. Beside it, a bar chart of one test: perfect when the address is right, near zero on new phrasing, perfect again when the address is supplied.

Left, how a fact is written, corrected and read, with the two honest failure answers. Right, why the tested models failed: the store was fine, the address was not formed.

How it works

Three built forms share one idea. In each, the address is exact.

1. Exact log and prime sieve (measurement on fixtures; the gcd arithmetic itself is proof). Every user turn is logged as word atoms. Each word has a prime from a registry table. A clause's address is the product \(A_c=\prod_{p\in S_c}p\) over its set \(S_c\) of distinct content primes, plus its ordered pairs of neighbours (n-lets). A query \(q\) is built the same way. A clause is admitted when

\[\gcd(q, A_c) > 1,\]

that is, when they share at least one prime. The greatest common divisor is computed as a sorted merge of the two factor lists, so no division is needed. Ranking is a separate step: most shared primes first, then latest occurrence, then ordered-pair match. A record counts as evicted only when its ring slot was actually overwritten.

2. The exact relation store (AERM, "G v1"). Learned heads tag each token as entity, relation, value or other. An integer store maps (entity, relation) to a value. It also keeps the previous distinct value and a version counter. A read answers one of four ways for the current and the previous version: None, Hit, Absent or Evicted. A prime-route variant keys by the semiprime \(k=p_a p_b\) of two atoms. By unique factorization (proof), \(k\) names the unordered pair exactly. The value is routed through the expert so that direction survives.

3. Product-key memory. The query splits into two halves. Each half is scored against \(S\) sub-keys and the top \(k\) on each side are kept. That gives \(k^2\) candidate slots, scored by the sum \(s_1(i)+s_2(j)\). The best \(k\) slots are read from an \(S\times S\) table. With \(S=256\) the table has 65,536 rows and a token reads 32 of them. The sub-keys are learned, or fixed to the 120 unit icosians or the 240 E8 roots. The built form mixes the rows with softmax weights.

Rule check.

RuleVerdict for the exact log, sieve and storeVerdict for the tested trained forms
No softmax anywhere (D23)CleanBroken. The product-key form mixes rows with softmax, and the tag and trigger heads trained with cross-entropy
No matrix multiplication (D30)CleanNot clean. They sit inside a dense float stack
Integer-only serving (D11)Fits by design, but nothing is built. The integer serving crate has no gcd, and it refuses product-key memoryNo served form
Discrete path (D32) and offline float (D37)The integer store matches the discrete shape. No memory store exists in the discrete crate yetA learned tagger would be float with an integer export and a reported gap. No hold is released

D23 bans softmax. D11 fixes the served form as integer and table lookups. D37 allows float in offline training only. D30 (no matrix multiplication) is in the same file.

What has been tried

Verdicts are this page's labels. "Authored panel" means a small test set written by the project, not natural language.

DateWhat was runResultVerdictRecord
26 AugPrime-route mechanics with no model: prime routes, ordered n-lets, gcd overlap, 7-row query closureMechanics pass. The product probe was not run, because no compiler from prompt tokens to addresses existed. 32 of 32 canary matchesinconclusiverecord
Sep (undated)Learned selector over exact versioned records (initial, previous, current), authored panels976 of 976 construction and fresh targets on the reassertion repair. Owner revision 60 of 60, against 24 of 60 for its parent. Authored-panel scope onlypositiverecord
Sep (undated)Learned read of the previous version, fresh text gate. Also a 64-update addressed-attention pilot (13 Sep)Selected exact old records but 44 of 64 complete, so not promoted. The pilot gave no useful generated answersnegativerecord
24 SepSynthetic key-value overwrite recall (KVAR): overwrite store with hard-select readoutHeld-out accuracy 0.8235 and 0.7157 on two seeds. Recurrence-only 0.0098, gate-only 0.0196. A hand-written overwrite table scores 1.0000positiverecord
24 SepExact previous-and-current token-pair cache on 24 project documentsLowers a count reference by 0.2376 bits per target (95% interval −0.2928 to −0.1907) over 87,564 positions. Not general prosepositiverecord
28 SepAERM probe: 1.41M-parameter model, exact integer store, learned read trigger, 3 seeds, new templates and namesThe store scored 1.000 in distribution, but the frozen margin gate failed even there (0.146, 0.122 and 0.102 against 0.30, because the control reached 0.85 to 0.90). On new phrasing "Updated" accuracy was 0.000, 0.000 and 0.015 against a control at 0.39 to 0.47. The trigger fired on 0 of 826 gold reads in seeds 1 and 2 (158 of 826 in seed 3)negativerecord
28 SepG v1: always read the current and previous registerFrozen gate failed in all three seeds: 0.1575, 0.0733 and 0.0293 against a 0.90 bar. Text loss and parameter parity passednegativerecord
29 SepFailure attribution on the G v1 misses, no trainingOf 1,905 failures, 1,480 (77.7%) were the query entity tagged wrongly, 242 (12.7%) the write key, 142 (7.5%) the query relation. Eviction: 0. Wrong stored value: 0positiverecord
29 SepMask the tag and trigger losses on text (arms A, B, C)Arm A lifted held-out binding to 0.967 (264 of 273) but text loss rose 0.1188 against a 0.05 limit. Arm C reached 0.553inconclusive / negativeA, B, C
1 OctExact log and sieve feeding an emitter, key-value recall at distances 16, 64, 200106 of 109. With recall switched off 16 of 109. One seed, one development draw. The recall dispatch was chosen by the instrument category and earlier assistant replies were supplied as references, so this is not a closed-loop conversation result. Same-relation-in-new-words: sieve alone answered 1 of 52positive / inconclusiverecord
10 OctProduct-key memory (64 sub-keys, top 16) at layer 4 of the 29M chat model, 2 seeds19 of 40 on both seeds against a 27 of 40 bar. No-memory anchor 20 of 40negativerecord
10 OctSaved model on fresh unexposed role and value combinations437 of 512 on development, 0 of 128 on fresh. Recorded as panel fittingnegativerecord
11 OctProduct-key memory replacing the layer-8 feed-forward block, 3 seeds. Fat and lean codebookFat: wrong-value failures 47 to 34 of 120, memory flat at 57 of 120, 20 times slower per step, and 1.65 times slower generation in a separate float GPU test (record). Lean: bits per byte worse by 0.0949 and 0.1066 against 0.02 allowedinconclusive / negativefat, lean
11 OctServe product-key memory on the integer pathThe integer path refuses it, so speed is unmeasured where it matters. The earlier "12 times" fused-kernel claim was a fat-versus-lean codebook difference and is withdrawn (withdrawal)blockedrecord

Reading these honestly. The pattern is consistent. Where the address was given or written by a fixed rule, the store worked: the 1.000 in distribution, the zero eviction failures, and the 106 of 109 recall. Where a learned head had to form the address from new phrasing, it failed, and the failures sit in the tagging, not the storage. The product-key runs tested something else: they replaced a feed-forward block with a table, not the read. The project's own correction note says so, so they do not test "address instead of search" at all. The recorded failures belong to configurations (a 1.4M-parameter probe with a learned trigger; 2,000-step fine-tunes of one 29M model on a 40-row panel with softmax weights). They do not close the mechanism (D22).

A caution on weight. Retrieval caused only 2.2 percent of the failing rows in the era-22 chat panel (issue #1708), so it is open whether memory is the binding constraint on the first milestone at all (hypothesis).

What has never been tested

  • The address as the model's actual read, with the store and read trained in from the start (the order D22 section 5(c) asks for; full text). Every "addressed read" run replaced a feed-forward block instead.
  • A true gcd sieve on the integer path. As of 1 October only a pairwise membership scan had been built.
  • Same relation in different words, using a learned channel that feeds the exact channel, at the 0.9 relation-accuracy gate.
  • Ordered n-let keys for atoms that are not role-disjoint.
  • Eviction proofs driving "I do not know" at long context in a trained model.
  • Parameters actually touched per token, for any exact memory on the served path.
  • E8 or icosian codebooks as the write address of facts, with prime semiprimes as the exact check.

What would reopen it

  1. Build the address as the read. Add memory fields to the dialogue settings and train the store and read in from the start, with 2 to 3 seeds and a frozen panel of at least 80 rows. The brief's bar is at least 8 more rows of 40 than the 19 of 40 seen, with bits per byte within 0.01.
  2. Run the serving-time oracle first. Supply the true slot address and measure the gain before any training.
  3. Re-register lawfully. Use an offline float sheet (D37) or a discrete sheet (D32) with a softmax-free value mix (a rank table or a hard select), a separately scanned module, an integer export and a reported export gap. This needs a fresh TEST FITNESS: FIT review and an owner release.
  4. Build an integer read kernel: gcd or sorted-merge admission plus a table value read, in the integer serving crate.
  5. Report address formation apart from read accuracy, since 77.7 percent of the held-out failures were query-entity tagging.

Also known as

Exact addressed memory; prime-keyed exact log and gcd sieve (log-sieve retrieval); semiprime expert or prime-route store; AERM exact relation store ("D2", "G v1"); product-key memory (learned or E8/H4 sub-keys); exact-pair cache; KVAR overwrite memory; "address instead of search".

Code

pointer-key: copies the value token the address names. The pointer found the source but not the slot. read-binding: teaches an attention read which stated value belongs to the question, the learned alternative to an exact address. object-store: exact byte storage of source material beneath the model, with no addressing of facts. e8-orbit-memory: the E8-addressed product-key variant, replacing a feed-forward block. relation-read: reads retained structure, where exact edges would come from this store. admission: the measured ceiling on what any read can reach. prime-zeta-codebook: supplies the prime registry the sieve depends on. route-read and flock-read: similarity-free alternatives that read by address or by a small kept set.