Skip to content
Open
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
156 changes: 156 additions & 0 deletions research/p104-frame0-invoice-primitive-names/PROOF.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
# The 40 frame-0 monomials are not primitives of the selected invoice

No new κ. The selected record stays `781451/250000000`. This note answers the
naming step left open by PR #7031: whether the 40 charged monomials can be
named as primitives on the selected #6030 invoice. They cannot, under the
naming rules that invoice actually uses. The missing obligation is one total
map that those rules accept. This is not a comparison with the selected
profile, and it is not a claim that no future contract could name the
monomials.

## 1. The 40 monomials

PR #7031 charges the degree-at-least-2 terms of

```text
(1 + x0)(1 + x1 + x2 + x4)(1 + x5)(1 + x6 + x7)
```

in the square-free ring `F_2[x0,...,x7]/(x_i^2 = x_i)`. The four factors use
disjoint variables, so the expansion is the Cartesian product of the summands.
That domain has `2 · 4 · 2 · 3 = 48` elements, every product is distinct, and
there is no cancellation. The degrees are 1, 7, 17, 17, and 6 in degrees 0
through 4. The eight monomials of degree at most 1 are `1, x0, x1, x2, x4,
x5, x6, x7`. The other 40 are the charged monomials.

The SHA256 of the 48 sorted exponent integers, joined by commas, is

```text
26803d29aa3141a357da4aa551195fe6378d3f2e1cba0c4291a4dedbce6ded2a
```

which is the normal-form hash recorded by the #7031 verifier at head
`531ecca652dde63c6010cd6097cb55a994367ce7`. This note does not replay that
pull request's hosting census. It takes this polynomial as the charged object.

An exponent is the integer whose bit `i` is the factor `x_i`. The six
degree-4 exponents are `99, 101, 113, 163, 165, 177`, namely

```text
x0*x1*x5*x6, x0*x2*x5*x6, x0*x4*x5*x6,
x0*x1*x5*x7, x0*x2*x5*x7, x0*x4*x5*x7.
```

## 2. What the selected invoice calls a primitive

The selected record points at
`research/p104-helper470-twin-rung-removal/RESULT.json`. Its word has schema
`p104-accumulated-block-composition/2`. A recursive primitive on that invoice
is a pair `(side, rank)` produced by one of the following constructors, as
written in `local.py` `replay` and `pricing.py` `assemble`.

- A `MOVE` from frame `a` to frame `b` has local paid rank `|dim b - dim a|`,
where the dimension is the length of the stored basis.
- A non-main public helper has local target rank `dim(final) - dim(initial)`.
- Eighteen forward `LOCAL` calls repeat both local histograms.
- Fifteen query shears add paid rank `1`, with count `104` each.
- For each idle length `L` in `{7, 8}` and each `j = 1, ..., L`, the assembly
adds paid rank `8(j+1)` and target rank `1 + 8(j+1)`, with count `208`.
- One further target of rank `145` is added with count `208`.

Replaying every `MOVE` and every non-main helper of the selected word, then
applying this finite formula, reproduces `RESULT.json` `local.paid`,
`local.helpers`, `complete_cost.paid`, and `complete_cost.targets`. The paid
keys are

```text
1, 2, 3, 4, 5, 6, 7, 8, 16, 24, 32, 40, 48, 56, 64, 72.
```

The target keys are

```text
1, 2, 3, 4, 5, 6, 7, 8, 9, 17, 25, 33, 41, 49, 57, 65, 73, 145.
```

The ordinary names on the same word are the opcodes that occur: `ADD`,
`CLEAR`, `COPY`, `INIT`, `MOVE`, and `SCALE`. Each acts on a role index and,
for a scalar event, a dyadic coefficient. The assembly text and the replay
text do not mention a chart variable, a polynomial degree, or a monomial.

The native routine in `local.py` builds Clifford recipes from frame charts
and ports. It is not replayed here. Its inputs are those frames and ports,
not the 40 exponents, so it does not assign these monomials names either.

## 3. Readings that still do not name all 40

A naming, in the sense asked by #7031, would be a total function from the 40
exponents to this alphabet that the constructors above determine. The
readings that use only an integer or a string already attached to the
monomial fail.

**Exponent integer as a histogram key.** Of the 40 exponents, exactly three
are paid keys: `3, 5, 48`. Exactly seven are target keys: `3, 5, 17, 33, 49,
65, 145`. The union has eight exponents, so 32 exponents are keys of neither
side. The two exponents `3` and `5` are keys of both sides, so the integer
does not choose a unique primitive even in the collisions. All six degree-4
exponents lie in the 32. This is an exhaustive check of a 40-element set
against the two finite key sets.

**Printed name as an opcode.** None of the 40 strings `x0*x1`, ... equals
`ADD`, `CLEAR`, `COPY`, `INIT`, `MOVE`, or `SCALE`.

**Exponent integer as a selected port.** The word stores 104 ports, and the
local native check identifies the initial frame of each live line with the
singleton `[port]`. Exactly 14 of the 40 exponents occur in that port list:
`35, 37, 49, 69, 81, 98, 100, 112, 131, 133, 145, 161, 164, 176`. The other
26 do not. This reading does not name all 40.

**Degree as rank.** The degrees that occur are 2, 3, and 4, and each of those
integers is both a paid key and a target key. That numerical fact is not a
name. Neither constructor reads a degree. Calling these monomials `H_2`,
`H_3`, and `H_4` would be a new tariff. This note does not adopt that tariff
and does not claim that every future contract must reject it.

## 4. The chart is not the invoice coordinate system

The same integer can appear in both lists without being the same object.
The hosting word of #7031 uses ports `11, 21, 38, 140`. Their simple-root
labels, with the ninth coordinate set, are `282, 284, 270, 454`. None equals
its port, and none is one of the 40 exponents (every charged exponent is at
most `177`). The invoice frames are vectors in the port-space `F_2^9`. The
monomials are functions of the simple-root coordinates. An exponent that
happens to equal a port, or a frame basis vector, is not that port and not
that vector.

For the record, 34 of the 40 exponent integers occur somewhere in the stored
frame bases, and the six that do not are exactly the degree-4 exponents.
That census is not a naming: a basis vector is not a primitive of the
invoice, and the two coordinate systems are distinct.

## 5. The obstruction

Under the constructors in section 2, the selected invoice does not determine
a total function from these 40 exponents to its primitive alphabet. The
missing obligation is that function, together with a proof that an inherited
constructor, or a stated extension of one, sends each exponent to the image
it names. Until the function exists, these 40 monomials are not primitives
on the selected invoice.

No profile comparison is made. The other twelve frames are not expanded.
The selected κ is unchanged. This is not a proof that the monomials cannot
be named by a different contract, and it is not a proof that no function
into the alphabet exists. Many functions exist. None is fixed by the
invoice that was asked about.

## Evidence class

The expansion is an exhaustive census of a 48-element product, complete
because the factors are disjoint and every combination is enumerated. The
histogram identity is an exhaustive replay of the finite selected word plus
the finite assembly formula, matched to the selected receipt. The three
failed readings are exhaustive checks of the same 40 exponents against
finite sets. The refusal of the degree reading is the observation that the
constructor texts do not read a degree. Together this is a scoped proof and
an exhaustive finite census. It is not a heuristic and not an incomplete
search inside those readings.
112 changes: 112 additions & 0 deletions research/p104-frame0-invoice-primitive-names/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
# The 40 frame-0 monomials are not selected-invoice primitives

**No new κ.** The selected frontier stays `781451/250000000`. This package
asks whether the 40 monomials charged by open PR #7031 can be named as
primitives on the selected #6030 invoice. Under that invoice's constructors,
they cannot. The missing map is stated in [PROOF.md](PROOF.md). Naming them
would not by itself be a κ change, and this obstruction is not one either.

## Result

The charged polynomial is

```text
(1 + x0)(1 + x1 + x2 + x4)(1 + x5)(1 + x6 + x7).
```

Its 40 degree-at-least-2 monomials are the object #7031 asked to place on
the invoice. A recursive primitive of the selected invoice is a pair
`(side, rank)` built from frame-dimension gaps, eighteen local copies,
fifteen query shears, the idle lengths 7 and 8, and one rank-145 target.
Ordinary names on the same word are the opcodes `ADD`, `CLEAR`, `COPY`,
`INIT`, `MOVE`, and `SCALE`. Those constructors do not read a chart monomial.

Against that alphabet:

- 32 of the 40 exponent integers are keys of neither histogram. The six
degree-4 masks `99, 101, 113, 163, 165, 177` are among them.
- The eight integers that do collide are not unique names. Masks `3` and `5`
are both paid keys and target keys.
- No printed monomial equals an opcode.
- 14 exponent integers occur in the selected port list, and 26 do not.
- Degrees 2, 3, and 4 are histogram keys, but the constructors do not set
rank equal to degree. That reading is not adopted.

The chart is a different coordinate system from the invoice. The simple-root
labels of ports `11, 21, 38, 140` are `282, 284, 270, 454`, not the ports
themselves. An integer collision with a port or a frame vector is not an
identification.

## Evidence class

The product expansion is an exhaustive 48-element census. The invoice
histograms are an exhaustive replay of the selected word, matched to
`RESULT.json`. The failed readings are exhaustive checks of the 40
exponents. The degree reading is refused because the constructor texts do
not mention it. This is a scoped proof together with those censuses. It is
not a heuristic, not a search over arbitrary maps, and not a proof that
another contract could not name the monomials.

## Scope

Catalogue card `complex-rank-shape-decoder`, priority revision 8, pinned at
`17469fff78c22941280f04d39dc5a1faee09c840`. The card asks whether a decoder
or coframe change improves the signed moment. Scope is **changed** to the
naming step in open question 3 of
[#7031](https://github.com/CrocSwap/integer-mult-bounds/pull/7031). The
connection to the bottleneck is in [TASK.json](TASK.json): a thirteen-row
comparison with the selected profile is not available until each charged
monomial has a primitive name, and this package stops when that name is
shown to be missing.

The selected record, `upstream/`, and the #6030 word are inputs, not edits.
Open #7031 already hosted the row and charged the 40 monomials; this package
does not redo that hosting. It does not host frame 1, and it does not ask
whether a sum of letters can use fewer than 40 monomials.

Overlap searched on 2026-11-10: the open-PR search for this naming returned
only #7031, whose discussion finding
[19514167](https://github.com/CrocSwap/integer-mult-bounds/discussions/1166#discussioncomment-19514167)
leaves the naming open. No fork branch had taken the question.

## Reproduce

From the repository root, Python 3.12, standard library only:

```sh
python3 -B research/p104-frame0-invoice-primitive-names/verify.py
python3 -I -O -B research/p104-frame0-invoice-primitive-names/verify.py
python3 -B scripts/research_package.py --package research/p104-frame0-invoice-primitive-names
python3 -B scripts/check_research_commit.py --package research/p104-frame0-invoice-primitive-names --check-source-history
```

The verifier prints `PASS_P104_FRAME0_INVOICE_NAMES` with `monomials=40`,
`outside_both_histograms=32`, `degree4_outside=6`, and the unchanged κ.
Failure controls drop the factor `x0`, accept mask `99` as a paid rank, and
replace the 18 local copies by 17.

Not run: `make frontier6030-verify`, the native Clifford replay, Lean, and
any expansion of frames 1–12.

## Open next questions

1. Give a total map from these 40 exponents to the inherited primitive
alphabet that one of the selected constructors determines. The
thirteen-row comparison stays blocked until that map exists. The first
step is to make one constructor read one of these exponents, or to show
that a constructor already does, and then check the image of all 40.
The present constructors read frame dimensions, idle lengths, and a
diagonal popcount only.

The thirteen-row profile comparison is not opened. Frames 1–12 remain the
separate hosting question already stated by #7031, and a missing name for
these 40 blocks that comparison on its own.

## Credit

The 40 monomials and the factored word: unpaidmoon, PR #7031. The selected
invoice and word: DreamingOfClouds, PR #6030, on the PR #5827 verifier chain.
Ports and the odd-graph line map: PR #6933. Prepared by unpaidmoon with
substantial Cursor Grok assistance. New work is Apache-2.0.

Workflow note: https://github.com/CrocSwap/integer-mult-bounds/discussions/1200
48 changes: 48 additions & 0 deletions research/p104-frame0-invoice-primitive-names/SOURCES.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
{
"schema_version": 1,
"base_commit": "17469fff78c22941280f04d39dc5a1faee09c840",
"files": [
{
"path": "certificates/selected-result.json",
"usage": "input",
"git_blob": "d59b5035e7b4cbaa9d688a1d32dd0d6eb79c466a",
"sha256": "9b8d0eea95b3bf0dfcb7938a732a6439b87a2685dec2a5ab9e525b3b34debbfa"
},
{
"path": "docs/research/agent-task-catalog.json",
"usage": "provenance",
"git_blob": "3404fbdd5e7529a0674eef26114b5071e4586cec",
"sha256": "ead6cdc9d0af6d58e8a49744d8ec8c7c15e13d2ba93c276c434bcf9b51b93a81"
},
{
"path": "research/p104-helper470-twin-rung-removal/RESULT.json",
"usage": "input",
"git_blob": "e4a03118d585fb80c9ac932281b528ac394ccc5f",
"sha256": "84fcbe2a0b64307b5703c363408042bdd91555b0419509aa50daa43b3b1924ad"
},
{
"path": "research/p104-helper470-twin-rung-removal/WORD.json.gz",
"usage": "input",
"git_blob": "22f9ab02d1b73ea0aa4b07ce445a14cc2602c760",
"sha256": "7834725d9e34ee846a9ccc615221ea81e0201613938afa185d2eda0c9a6c232f"
},
{
"path": "research/p104-helper470-twin-rung-removal/pricing.py",
"usage": "input",
"git_blob": "65bb723f8558dc60ff92764db1a43d8bf438aa09",
"sha256": "3c6cf2966ccfe5a5fb6c90f89f46ac224ea455127e35dd34975683c68c36d710"
},
{
"path": "research/p104-port-window-haemers/data/e8_line_map.json",
"usage": "input",
"git_blob": "19ea2d553aff60e53af50dd9582ab70730e93450",
"sha256": "b37530e8e9b2b3bd5be418d5ed3060a42ceb66e60ed3789f8ee79f29dabde437"
},
{
"path": "research/p104-unread-path-resynthesis/local.py",
"usage": "input",
"git_blob": "b7be846b10c4c54a4e1558d7b563bc8c3a170223",
"sha256": "7201df8e32f5c99f7403150e8664042322037906088bc754c67293a241368597"
}
]
}
Loading