Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions research/qq16-output-pebbling/PREDECESSORS.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
{
"schema_version": 1,
"canonical_base": "20ecf2891d80b5acf18d980b2164fb44ea7faa90",
"retained_data": [
{
"pr": 3985,
"head": "400df7fca8f60c19bf163c77564fe3fbe9154b04",
"source_path": "research/qq16-recovery-fusion/WORD.json",
"local_path": "vendor/pr3985/WORD.json",
"sha256": "a854f516f1d80635fb3414734f9e1c6d1251a5d79ef12e137c143fc6b0b51722",
"git_blob": "1518ddc9b61aa6bede045d20f0d5e8cf664863fa",
"use": "Full source word authenticated as data and independently regenerated. No pending executable imported."
}
],
"canonical_reuse": "Authenticated PR2707 verifier and its full transitive retained PR2681/canonical input closure listed in SOURCES. Its inverse and phase algebra are inherited, not code-disjoint.",
"adapted_code": [
{
"source": "PR3985 native.py, itself adapted from ywz65 PR2707",
"sha256": "0a53f6df1d5ee88b206547b88a2805d9f7d5db582117baa48c08658d5cd7a4ba",
"use": "Ownnative.py signed kernel/occurrence checker, explicit adaptation credit; no runtime dependency onpendingcode."
},
{
"source": "PR3985 verify.py fused()",
"use": "Source-word reconstruction independently restated fromcanonical2707 and compared against exact retainedWORD."
}
],
"credit": [
"ywz65 PR2707 and native line-normalization lineage",
"Arham Tahir PR2681 orderedinverse/source reconstruction",
"Ali Romman and QQ16/source/native/geometry lineage",
"commdata2338 PR2651 andDiscussion2617 early-record/output-bank coalescing",
"Nick Petalas PR2722 access accounting andPR3339 consumer ledger",
"PR3952/3963/3977 demand andactualcaller audits",
"Douglas Colkitt andSagarThakrar retainedsupplier/coverage lineage"
],
"new_result": "Literal query/response/output lifetime allocation eliminating112 additional full-cover banks and112 clears (224scalar), same224H1/fulloutputcontract.",
"license": "Apache-2.0; retained notices unchanged.",
"ai_assistance": "Substantial OpenAI Codex assistance; independent agent review only, nohuman/formalkernel claim."
}
176 changes: 176 additions & 0 deletions research/qq16-output-pebbling/PROOF.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,176 @@
# Output-bank pebbling for complete QQ16 recovery

## Statement and boundary

At the first post-B1 recovery boundary, PR3985's literal decoder reads all
224 current X/Y arrays as borrowed inputs and produces all 224 original x/y
arrays in the owned Z/W output banks, in F17. This package keeps that contract
and the 224 H1, 448 wrapper and 352 cover-map invoice. It eliminates all 112
additional full-cover D arrays by scheduling their lifetimes inside eventual
Z output slots. Peak private scratch remains 16.

The resulting word has 424 CLEARs instead of 536, saving 224 scalar primitive
allowance: 27,184 becomes **26,960**. No source/input is discarded. The 224
owned output arrays may enter with arbitrary dirt; all are explicitly
initialized before their logical values are read. All 224 borrowed current
arrays retain their exact values and frames. This is a constructive local
bank allocation, not a minimum-space or global supplier theorem.

The exact source is PR3985 head
`400df7fca8f60c19bf163c77564fe3fbe9154b04`. Only its WORD data is retained.
The checker regenerates that full word from the canonical PR2707 decoder,
then replays the changed whole word against its independent routed inverse
formula and on independent original inputs propagated through F0/B1.
Canonical algebra and native contracts are reused with full transitive byte
and Git-blob authentication before execution.

## The dependency graph that permits deferral

Write A and T for the two eight-port selected sets, and U for the 96 ordinary
ports. The prefix originally defines every Z_p by `Z_p = X_p`. At A and T
ports it also adds the normalized initial W_p. Before the future logger:

- Only the eight Z_T values are ever read. They contribute to the current
inverse-query correction of W_T and must remain live.
- Each Z_U is only its initial X_U copy and has no reader yet.
- Each Z_A is X_A plus initial W_A and has no reader yet. W_A is unchanged
through the preceding current-query block and until the future logger's
final response additions. The intermediate stage-1 maps on W_A cancel;
the complete routed and phase replay checks their return.

Therefore all 104 Z_(U+A) definitions can be deferred. This is dependency
rescheduling, not destruction of live outputs. The eight Z_T definitions,
map operations and uses remain at their original positions.

The verifier derives the exact pre-logger Z read set from the retained word,
checks every removed definition against its complete expected instruction
sequence, and checks the full W_A write sequence. No generic allocator or
unverified claim that all Z banks are dead supplies this fact.

## A concrete allocation with zero external banks

The source future logger reads 104 query copies D_(U+T), then writes eight
response copies D_A. Let z(p) biject the ordered query ports U+T with the
ordered free output slots U+A. Host each D_p in Z_z(p). Reserve the first
eight slots in U as the eventual response locations; the explicit mappings
are recorded in RESULT.json.

The schedule is:

1. Keep the source prefix except the deferred Z_(U+A) definitions.
2. In each query's assigned output slot, perform the original clear/copy,
stage-2 affine map and inverse C_q. The 104 query values now have frame
F16, on coordinates 9 through 24. All original W sources remain F17.
3. Within each owner-private sweep, form **all eight** private F queries
from all 104 query copies. Only after the last query read, clear the eight
designated response slots in F16 and write their quarter-query response
combinations. These eight slots formerly held query copies, whose final
use at this owner has passed. Clear the eight private F fields in identity
frame before moving to another owner.
4. All Z_A slots were query-only. After the complete sweep, initialize their
deferred values X_A + W_A, in F17, while W_A is still unchanged.
5. Apply each original positive C_q and inverse affine map to its response
slot, returning that correction to F17, and add it into W_A.
6. After every response has been consumed, initialize all deferred Z_U with
X_U in F17. Resume the untouched inverse-B1 checkpoint and F0 suffix.

This is a local last-use reuse inside the owner body: a query value is
captured in F before the same physical slot is overwritten by a response.
All native/map events remain outside the private body. Across owner moves,
only explicit full-cover output banks persist; private F state is returned
zero/identity. There is no attempt to retain owner-private values through a
native operation or move.

The response locations are chosen from Z_U, not Z_A. Otherwise recreating
Z_A before modifying W_A could overwrite a still-live response. The choice
also means every response has been consumed before its output definition.
The full replay checks these causal boundaries, values and all 73 linear
and quadratic modulo-four phase coordinates.

## Why the final clears disappear

In PR3985, each D is separate from every output and must finish zero/identity.
Here no D allocation exists. Each temporary lifetime ends by the explicit
initialization of its owned output slot, or by the F16 clear that begins its
response lifetime. The 112 original final D CLEARs are thus obsolete; they
would clear actual output storage at the wrong time if retained indiscriminately.

The source's 104 initial query clears and eight initial response clears are
still paid. The latter move to the query last-use cut inside the private
body. Every original Z initialization remains paid, merely deferred. Thus
arbitrary output dirt and all temporary contents are erased by charged
operations, while every borrowed input survives. Zero/I return remains
required for private scratch; final output slots are live outputs in F17,
not promised zero/I temporary outputs.

## Complete local invoice

| Charge | PR3985 | Output-hosted word | Change |
|---|---:|---:|---:|
| H1 children |224|224|0|
| Native wrappers |448|448|0|
| Full-cover maps |352|352|0|
| Unit ADDs |1920|1920|0|
| Quarter ADDs |896|896|0|
| CLEARs |536|424|−112|
| Real scalar primitive allowance |27184|26960|−224|
| Owned output arrays |224|224|0|
| Additional owned full-cover temporaries |112|0|−112|
| Peak owner-private fields |16|16|0|
| Borrowed current X/Y arrays |224|224|0|

Allowance is 8 per unit ADD, 12 per quarter ADD and 2 per CLEAR. The source
F0/B1 producer is unchanged and additional. This contribution deletes local
storage obligations and charged clears; it does not lower the recursive
native count or automatically increase kappa.

## Actual caller and physical limits

The frozen hosted template identifies replica 0's F0 as physical source
event 0, B1 as event 1, the other pair's idle preparation as event 2 and
ordinary bridge as event 3. This recovery insertion is at the cut after B1
and before the subsequent idle preparation. Current pair-0 X/Y remains
borrowed. This is the full recovery endpoint, not the reduced bridge-only
endpoint examined in PR3977.

The bank reuse is real **within the 224 exclusively owned output banks of
the pinned decoder contract**. It does not identify these output banks with
borrowed current state, uncleared dirty helpers, or free storage in the
original gauge44 controller. The actual placement and access of those 224
owned outputs in a physical caller remain obligations. The local result
removes the need to supply 112 more fields once that output contract is
provided; it does not prove a complete six-tape hosting schedule.

| Obligation | Status |
|---|---|
| Exact first-B1 source cut and source word | Pinned and checked |
| Deferred definitions and last-use allocation | Constructively checked |
| Complete arbitrary-array inverse and output frames | Replayed under authenticated canonical contracts |
| Borrowed preservation, arbitrary owned dirt and private zero return | Checked |
| Signed native recipe coverage and primitive invoice | Checked |
| Physical placement and access of the existing 224 owned outputs | Unknown |
| Movement, control, output consumption and actual family coverage | Unknown |
| Changed rounded errors, dirty magnitudes and all-depth supplier admission | Unknown |

No supplier moment or kappa improvement is claimed from the storage delta.
The bounded next test is physical placement of this existing output bank at
one actual caller, with all movement and coverage costs; a new local storage
search without that contract is not justified by this result alone.

## Attribution and overlap

Credit PR3985 for the rectangular correction and its 224-H1 full word; ywz65
PR2707 for F17 normalization and native checking; Arham Tahir PR2681 for the
ordered inverse; Ali Romman and the retained QQ16/geometry/native lineage.
Discussion2617 and commdata2338's PR2651 supplied prior output-bank lifetime
coalescing for sixteen early records in PR2540. This result concerns the
104 query and eight response lifetimes in the newer zero-retention PR3985
word, not a second claim for those early-record savings. Credit Nick Petalas
PR2722 for explicit storage-layout access accounting and PR3339 for the
separate consumer/coverage boundary. Source notices remain unchanged.

New contribution: the exact deferral, query/response/output allocation,
whole-word verification and 112-bank/224-scalar reduction. Chris R /
Clear1nsight with substantial OpenAI Codex assistance, Apache-2.0. Independent
agent review is recorded separately; no human or formal proof-kernel review
is claimed.
88 changes: 88 additions & 0 deletions research/qq16-output-pebbling/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
# Host QQ16 correction temporaries in eventual outputs

This is a constructive lifetime allocation for the complete PR3985 recovery
word. It removes all **112 extra full-cover temporary banks** while preserving
all 224 original outputs in F17 and all 224 borrowed current X/Y arrays.
The 224 H1 children, 448 wrappers and 352 cover maps are unchanged.
Paid CLEARs fall from 536 to 424, reducing scalar allowance from 27,184 to
**26,960**. Peak owner-private scratch remains 16.

The dependency analysis finds eight live Z_T outputs and 104 deferrable Z_(U+A)
outputs before the future logger. Those 104 slots hold its query copies.
After all queries have been captured in private F registers, eight query
slots become response slots. The deferred Z_A definitions run before W_A
changes; the deferred Z_U definitions run after response consumption. Every
clear and frame transition is paid. No borrowed dirty helper is erased and
no private value crosses a native boundary.

[PROOF.md](PROOF.md) states the complete local contract, operator/phase
argument, allocation and invoice. RESULT.json records all 104 physical-slot
lifetimes, exact source-definition indices and the full receipt; WORD.json
is the complete transformed word. The checker authenticates and regenerates
the retained PR3985 word as data, then checks the whole new word against the
canonical routed inverse. It imports no pending executable.

This eliminates temporary allocations **inside the existing 224-owned-output
contract**. It does not prove those outputs are free in the original gauge44
physical caller. The first-B1 source cut is pinned, while six-tape placement,
movement, precision, productive-family coverage and recursive admission
remain open. No supplier or kappa change is claimed.

## Reproduce

```sh
python3 -I -Werror -B research/qq16-output-pebbling/verify.py
python3 -I -O -Werror -B research/qq16-output-pebbling/test_verify.py
python3 -B scripts/research_package.py --package research/qq16-output-pebbling
```

Python 3.12, standard library only. Normal replay is read-only; explicit
regeneration refuses to overwrite either receipt. Tests cover optimized and
normal execution, Git-free read-only export, source authentication, whole-word
and type-sensitive receipt corruption, and meaningful lifetime/alias/frame/
dirty-return controls. Signed native kernels reuse the credited PR2707 method
through PR3985, cover 114,688 columns and bind all 224 native occurrences.
The source inverse theorem and native contracts are inherited, not claimed
as code-disjoint or formal verification.

## Scope, overlap and credit

User-assigned graph-pebbling/register-allocation follow-up of PR3985 at head
`400df7fca8f60c19bf163c77564fe3fbe9154b04`, on canonical main
`20ecf2891d80b5acf18d980b2164fb44ea7faa90`, priority revision 6.
The [shared claim](https://github.com/CrocSwap/integer-mult-bounds/pull/3985#issuecomment-6263114494)
coordinates distinct streaming, lifetime-hosting, reversible-workspace and
operator-representation investigations. Partial overlap checks include the
canonical scope map and [Discussion2617](https://github.com/CrocSwap/integer-mult-bounds/discussions/2617),
which records commdata2338's PR2651 early-record/output-bank coalescing and
Nick Petalas's PR2722 physical-access work. No novelty guarantee is claimed.

The prior PR2651 result coalesces sixteen early retained records in PR2540;
this result coalesces the 104 queries and eight responses of the zero-retention
PR3985 word. The paired streaming investigation uses a different full-cover
query schedule. Its independently reviewed local construction has 416 CLEARs,
26,944 scalar allowance, nine deferred output definitions and zero future-logger
private registers, compared with this construction's 424 CLEARs, 26,960 scalar
allowance, 104 deferred definitions and eight future private registers. It is
not an executable or scientific dependency. This owner-private alternative is not asserted
Pareto optimal. Compare actual movement/access before preferring either.

Credit PR3985, ywz65 / PR2707, Arham Tahir / PR2681, Ali Romman's QQ16 lineage,
commdata2338 / PR2651, Nick Petalas / PR2722 and PR3339, and all retained
native/geometry/supplier contributors. Exact source reuse is in
PREDECESSORS.json and SOURCES.json. New work: Chris R / Clear1nsight with
substantial OpenAI Codex assistance, Apache-2.0. No independent human or
proof-assistant review is claimed.

## Open next questions

- Bind the 224 already-owned output slots to an actual first-B1 caller's
storage and owner streams. The local alias schedule removes 112 new banks
only after that output contract is supplied; unknown placement is not free.
- Compare this owner-private last-use schedule with the separate streamed
query schedule under one explicit physical access model. Count full-cover
passes, tape movement, control and endpoint return rather than scalar
operations alone.
- Bound intermediate magnitudes and rounded errors for the changed schedule,
then combine exact invocation/family coverage and both supplier caps.
Exact operator equality does not establish a new multiplication exponent.
Loading