From 043b334e7249e8b79e437a0765773a7e2fc8b8e8 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 10 Nov 2026 09:03:46 +0000 Subject: [PATCH] Witness a characteristic-3 rank-32 pattern on P120. The free-zero point of one hyperplane of the #6953 degree-2 column span is a 1-block pattern of rank 32, with a 120 by 32 factorisation over F_3. The same matrix has principal rank 32 on P104 and both P112 extensions. No kappa change. Co-authored-by: unpaidmoon --- research/p120-char3-rank32-window/NOTICE | 5 + research/p120-char3-rank32-window/PROOF.md | 205 +++++++++ research/p120-char3-rank32-window/README.md | 100 +++++ .../p120-char3-rank32-window/SOURCES.json | 24 + research/p120-char3-rank32-window/TASK.json | 81 ++++ research/p120-char3-rank32-window/VERIFY.json | 20 + research/p120-char3-rank32-window/verify.py | 420 ++++++++++++++++++ 7 files changed, 855 insertions(+) create mode 100644 research/p120-char3-rank32-window/NOTICE create mode 100644 research/p120-char3-rank32-window/PROOF.md create mode 100644 research/p120-char3-rank32-window/README.md create mode 100644 research/p120-char3-rank32-window/SOURCES.json create mode 100644 research/p120-char3-rank32-window/TASK.json create mode 100644 research/p120-char3-rank32-window/VERIFY.json create mode 100644 research/p120-char3-rank32-window/verify.py diff --git a/research/p120-char3-rank32-window/NOTICE b/research/p120-char3-rank32-window/NOTICE new file mode 100644 index 0000000000..29708f305e --- /dev/null +++ b/research/p120-char3-rank32-window/NOTICE @@ -0,0 +1,5 @@ +Characteristic-3 rank-32 witness for the P120 port window. +Prepared by unpaidmoon with substantial Cursor Grok assistance. +The port list is the P104 set published in PR #6933 and vendored by #6953. +The rank-37 degree-at-most-2 pattern is PR #6953. +New exposition and checks are Apache-2.0. diff --git a/research/p120-char3-rank32-window/PROOF.md b/research/p120-char3-rank32-window/PROOF.md new file mode 100644 index 0000000000..cfb1a2464b --- /dev/null +++ b/research/p120-char3-rank32-window/PROOF.md @@ -0,0 +1,205 @@ +# Characteristic 3 admits a rank-32 pattern on P120 + +No new κ. The selected record stays `781451/250000000`. This note does not +build a word, a decoder, or a paid profile, and it does not change the +selected frontier. + +The window is the block-mask window of PR #6933. A physical decoder for +`k > 1` is not derived. + +## 0. Definitions + +`P120` is the 120 vectors in `F_2^9` of weight congruent to 3 mod 4. Two +distinct vectors are adjacent when their `F_2` dot product is 1 and orthogonal +when it is 0. `P104` is the port list of #6933, the same file vendored by +#6953, sha256 +`691c7b7d212112115b1bfc76db89f90d304ec448dc8c4a0c43d9a5954317146c`. Its +complement is the two 8-cliques recorded in #6953. + +A **1-block pattern** has nonzero diagonal and a zero in both off-diagonal +positions of every orthogonal pair. Adjacent entries are free, and the matrix +need not be symmetric. Write `w_1(S; F)` for the minimum rank of a 1-block +pattern on `S` over `F`, and `w(S; F)` for the infimum of `rank(B)/k` over +k-block patterns in the sense of #6933. Then `w(S; F) ≤ w_1(S; F)`. + +#6953 proves `w_1(P120; F_3) ≤ 37` and `w_1(P104; F_3) ≤ 36` by one +degree-at-most-2 point, and proves that every class-constant pattern on +`P120` has rank 120 in characteristic 3. The lower bounds `w(P104) ≥ 13`, +`w(P112) ≥ 14` and `w(P120) ≥ 15` in odd characteristic are #6933, Theorem 4. +They are cited and not replayed. This note does not extend those lower bounds. + +## 1. The degree-at-most-2 chart + +Order monomials as the constant `1`, the coordinates `x_0, …, x_8`, and the +products `x_i x_j` for `0 ≤ i < j ≤ 8`. Evaluate them at a vector as integers +in `{0, 1}` and read the values in `F_3`. + +**Lemma 1.** On `P120`, `sum_{i> i) & 1 for i in range(9)] + coords = [1] + coords.extend(bits) + for i, j in pairs(): + if (i, j) != (7, 8): + coords.append(bits[i] * bits[j]) + return [c % 3 for c in coords] + + +def orthogonal(verts): + lists = [[] for _ in verts] + for i, u in enumerate(verts): + for j in range(i + 1, len(verts)): + if not odd_dot(u, verts[j]): + lists[i].append(j) + lists[j].append(i) + return lists + + +def legal_rows(phi, orth, j, rhs_self): + return [phi[i][:] + [0] for i in orth[j]] + [phi[j][:] + [rhs_self]] + + +def valid_pattern(matrix, verts): + for i, u in enumerate(verts): + if matrix[i][i] % 3 == 0: + return False + for j in range(i + 1, len(verts)): + if odd_dot(u, verts[j]): + continue + if matrix[i][j] % 3 or matrix[j][i] % 3: + return False + return True + + +def principal(matrix, index): + return [[matrix[i][j] for j in index] for i in index] + + +def relation_rows(): + """Nine coefficient relations that cut out the same 36-dimensional space. + + Layout: c, a0..a8, then b_ij for pairs other than (7, 8), in pair order. + """ + width = 45 + pair_index = {} + cursor = 10 + for i, j in pairs(): + if (i, j) == (7, 8): + continue + pair_index[(i, j)] = cursor + cursor += 1 + rows = [] + constant = [0] * width + constant[0] = 1 + constant[9] = 1 + rows.append(constant) + trace = [0] * width + for i in range(8): + trace[1 + i] = 1 + trace[9] = 2 + for i, j in pairs(): + if j <= 7: + trace[pair_index[(i, j)]] = 2 + rows.append(trace) + for i in range(7): + row = [0] * width + row[pair_index[(i, 8)]] = 1 + rows.append(row) + return rows + + +def main(): + verts = vertices() + require(len(verts) == 120, "P120 count") + require(sum(weight(v) == 3 for v in verts) == 84, "weight-3 count") + require(sum(weight(v) == 7 for v in verts) == 36, "weight-7 count") + orth = orthogonal(verts) + phi = [features(v) for v in verts] + require(len(phi[0]) == 45, "chart width") + + # The dropped monomial is redundant on P120: every pair product sums to 0. + syzygy_values = [] + for v in verts: + bits = [(v >> i) & 1 for i in range(9)] + total = 0 + for i, j in pairs(): + total += bits[i] * bits[j] + syzygy_values.append(total % 3) + require(syzygy_values == [0] * 120, "pair-sum syzygy") + require(rank_of(phi) == 45, "degree-2 evaluation rank") + print("PASS_CHART rank45 syzygy=0") + + witness = [] + for j in range(len(verts)): + solution = solve_free_zero(legal_rows(phi, orth, j, 1), 45) + require(solution is not None, "degree-2 system inconsistent at %d" % j) + witness.append(solution) + witness_matrix = [ + [dot(phi[u], witness[v]) for v in range(len(verts))] for u in range(len(verts)) + ] + require(valid_pattern(witness_matrix, verts), "degree-2 witness is not a pattern") + require(rank_of(witness_matrix) == 37, "degree-2 free-zero rank is not 37") + print("PASS_PREDECESSOR_POINT rank37") + + reduced, pivots = rref(witness, 45) + span_dim = sum(pivot is not None for pivot in pivots) + require(span_dim == 37, "witness column span %d" % span_dim) + basis = [reduced[row][:45] for row in range(span_dim)] + evaluation = [[dot(phi[u], basis[t]) for t in range(span_dim)] for u in range(len(verts))] + + def coordinates(vector): + rows = [[basis[t][i] for t in range(span_dim)] + [vector[i]] for i in range(45)] + solution = solve_free_zero(rows, span_dim) + require(solution is not None, "vector outside the witness span") + return solution + + witness_coords = [coordinates(column) for column in witness] + direction_dim = [] + for j in range(len(verts)): + rows = [evaluation[i][:] for i in orth[j] + [j]] + direction_dim.append(len(kernel_basis(rows, span_dim))) + rigid_index = [j for j, dim in enumerate(direction_dim) if dim == 0] + rigid_vertices = [verts[j] for j in rigid_index] + expected_rigid = [v for v in verts if weight(v) == 7 and ((v >> 8) & 1) == 0] + require(rigid_vertices == expected_rigid, "rigid set %s" % rigid_vertices) + require(len(rigid_vertices) == 8, "rigid count") + require(rank_of([witness_coords[j] for j in rigid_index]) == 8, "rigid columns") + print("PASS_RIGID_COLUMNS count=8 bit8_clear_weight7") + + dual = kernel_basis([witness_coords[j] for j in rigid_index], span_dim) + require(len(dual) == 29, "annihilator of the rigid columns") + + def meets_every_flat(form): + if all(entry == 0 for entry in form): + return False + for j in range(len(verts)): + rows = [evaluation[i][:] + [0] for i in orth[j]] + [evaluation[j][:] + [1]] + # Restrict the unknown to ker(form) by one extra equation form·c = 0, + # and test consistency of the legal system inside the witness span. + rows.append(form[:] + [0]) + if solve_free_zero(rows, span_dim) is None: + return False + return True + + good_lines = [i for i, form in enumerate(dual) if meets_every_flat(form)] + require(good_lines == [1], "hyperplane lines %s" % good_lines) + print("PASS_HYPERPLANE_LINE index=1 of 29") + + form = dual[1] + space = [] + for coord in kernel_basis([form], span_dim): + ambient = [0] * 45 + for t, scale in enumerate(coord): + if scale: + for i in range(45): + ambient[i] = (ambient[i] + scale * basis[t][i]) % 3 + space.append(ambient) + require(len(space) == 36 and rank_of(space) == 36, "hyperplane dimension") + relation_rank = rank_of(relation_rows() + kernel_basis(space, 45)) + # The nine declared relations and the annihilator of the space are the same. + require(rank_of(relation_rows()) == 9, "relation rank") + require(rank_of(kernel_basis(space, 45)) == 9, "annihilator rank") + require(relation_rank == 9, "relations do not cut out the hyperplane") + print("PASS_COEFFICIENT_RELATIONS n=9") + + factor = [[dot(phi[u], column) for column in space] for u in range(len(verts))] + require(rank_of(factor) == 36, "evaluation of the hyperplane") + coefficients = [] + affine = {} + for j in range(len(verts)): + rows = legal_rows(factor, orth, j, 1) + solution = solve_free_zero(rows, 36) + require(solution is not None, "hyperplane system inconsistent at %d" % j) + _, pivots = rref(rows, 36) + freedom = 36 - sum(pivot is not None for pivot in pivots) + affine[freedom] = affine.get(freedom, 0) + 1 + coefficients.append(solution) + require(affine == {0: 36, 2: 56, 5: 28}, "affine dimensions %s" % affine) + print("PASS_AFFINE_DIMENSIONS 0=36 2=56 5=28") + matrix = [ + [dot(factor[u], coefficients[v]) for v in range(len(verts))] + for u in range(len(verts)) + ] + require(valid_pattern(matrix, verts), "rank-32 candidate is not a pattern") + pattern_rank = rank_of(matrix) + reversed_rank = rank_of([row[::-1] for row in matrix]) + transpose_rank = rank_of([list(column) for column in zip(*matrix)]) + require(pattern_rank == reversed_rank == transpose_rank == 32, "ranks %s" % pattern_rank) + digest = hashlib.sha256(bytes(entry for row in matrix for entry in row)).hexdigest() + require(digest == MATRIX_SHA256, "matrix sha256 %s" % digest) + + # Literal 120 by 32 factorisation: pivot columns of the pattern, then coordinates. + _, row_pivots = rref(matrix, len(verts)) + independent = [c for c, pivot in enumerate(row_pivots) if pivot is not None] + require(len(independent) == 32, "pivot column count") + narrow = [[matrix[r][c] for c in independent] for r in range(len(verts))] + require(rank_of(narrow) == 32, "narrow factor rank") + for c in range(len(verts)): + target = [matrix[r][c] for r in range(len(verts))] + rows = [narrow[r][:] + [target[r]] for r in range(len(verts))] + require(solve_free_zero(rows, 32) is not None, "column %d outside the 32-factor" % c) + print("PASS_FACTORISATION shape=120x32 rank=32 sha256=%s" % digest) + + edge_values = { + matrix[i][j] + for i in range(len(verts)) + for j in range(len(verts)) + if i != j and odd_dot(verts[i], verts[j]) + } + asymmetric = any( + matrix[i][j] != matrix[j][i] + for i in range(len(verts)) + for j in range(i + 1, len(verts)) + ) + require(asymmetric and len(edge_values) > 1, "pattern collapsed to a class-constant matrix") + + raw = PORTS.read_bytes() + require(hashlib.sha256(raw).hexdigest() == PORTS_SHA256, "P104 port bytes") + ports = json.loads(raw)["ports"] + deleted = set(verts) - set(ports) + require(len(ports) == 104 and len(deleted) == 16, "port counts") + require(set().union(*P112_RANKS) == deleted, "deleted cliques") + index = {v: i for i, v in enumerate(verts)} + port_index = [index[v] for v in ports] + p104 = principal(matrix, port_index) + require(valid_pattern(p104, ports), "P104 principal submatrix") + p104_rank = rank_of(p104) + require(p104_rank == P104_RANK, "P104 rank %d" % p104_rank) + seen = {} + for clique, expected in P112_RANKS.items(): + block = list(ports) + list(clique) + rows = principal(matrix, [index[v] for v in block]) + require(valid_pattern(rows, block), "P112 pattern") + require(all(odd_dot(a, b) for a in clique for b in clique if a < b), "clique") + seen[clique] = rank_of(rows) + require(seen[clique] == expected, "P112 rank %s for %s" % (seen[clique], clique)) + print("PASS_PRINCIPAL p104=%d p112=%s" % (P104_RANK, sorted(seen.values()))) + + # The same space in the relation-kernel basis has another legal point. + # Its rank is 36, so rank 32 is a property of this basis, not of every + # pattern whose columns lie in the space. + relation_basis = kernel_basis(relation_rows(), 45) + require(len(relation_basis) == 36, "relation kernel") + relation_factor = [ + [dot(phi[u], column) for column in relation_basis] for u in range(len(verts)) + ] + relation_columns = [] + for j in range(len(verts)): + solution = solve_free_zero(legal_rows(relation_factor, orth, j, 1), 36) + require(solution is not None, "relation basis inconsistent at %d" % j) + relation_columns.append(solution) + relation_matrix = [ + [dot(relation_factor[u], relation_columns[v]) for v in range(len(verts))] + for u in range(len(verts)) + ] + require(valid_pattern(relation_matrix, verts), "relation-basis point is not a pattern") + require(rank_of(relation_matrix) == 36, "relation-basis rank") + print("PASS_SAME_SPACE_OTHER_POINT rank36") + + planted = [row[:] for row in matrix] + pair = next(i for i in range(1, len(verts)) if not odd_dot(verts[0], verts[i])) + planted[0][pair] = (planted[0][pair] + 1) % 3 + require(not valid_pattern(planted, verts), "control accepted a planted orthogonal entry") + killed = [row[:] for row in matrix] + killed[0][0] = 0 + require(not valid_pattern(killed, verts), "control accepted a zero diagonal") + pure = [] + for v in verts: + bits = [(v >> i) & 1 for i in range(9)] + pure.append([bits[i] * bits[j] % 3 for i, j in pairs()]) + pure_fail = solve_free_zero(legal_rows(pure, orth, 0, 1), 36) + require(pure_fail is None, "control: pure quadrics solved vertex 0") + full = [] + for beta in (0, 1, 2): + rows = [[0] * 120 for _ in range(120)] + for i, u in enumerate(verts): + rows[i][i] = 1 + for j in range(i + 1, 120): + if odd_dot(u, verts[j]): + rows[i][j] = rows[j][i] = beta + full.append(rank_of(rows)) + require(full == [120, 120, 120], "class-constant ranks %s" % full) + print("PASS_CONTROLS planted=1 zero_diagonal=1 pure_quadrics=inconsistent class_constant=120") + print("PASS_P120_CHAR3_RANK32 rank=32 p104=%d p112=%s" % (P104_RANK, sorted(seen.values()))) + + +if __name__ == "__main__": + main()