Wiki
Research notes on every problem, and a library of the papers behind them. Built from the open erdos repository.
erdos_699_index_9_baseline.py
py
#!/usr/bin/env python3
"""Exact polynomial coverage of the full index-9 position/witness space.
Default: also recompute every modular full-row-rank certificate.
--arithmetic-only: verify the sources, integer data and complete coverage.
The residual cases are cofactor/position configurations, not binomial triples.
"""
from __future__ import annotations
import argparse
import hashlib
from itertools import product
import json
from pathlib import Path
import numpy as np
import erdos_699_index_13_interpolation_gcd as interpolation
from erdos_699_index_10_effective import minimal_vectors
from erdos_699_weighted_ramps import EDGES
from erdos_699_bft_more_pairs import NEW_EDGES
HERE = Path(__file__).resolve().parent
DATA = HERE / 'erdos_699_index_9_baseline.json'
def source_edges():
edges = [(p, q, e, e) for p, q, e in EDGES + NEW_EDGES if p < 9 and q < 9]
source = json.loads((HERE / 'erdos_699_bft_asymmetric_pair_table.json').read_text())
for key in ('published_gcd_pairs', 'effective_gcd_pairs'):
for row in source[key]:
p, q = row['pair']
if p < 9 and q < 9:
assert row['verified']
edges.append((p, q, *row['endpoints_scaled']))
return edges
def verify_certificates(records, ranks):
names = set()
for record in records:
assert record['name'] not in names
names.add(record['name'])
h, m = record['line_exponents'], record['row_multiplicities']
assert len(h) == len(m) == 9
assert all(type(x) is int and x >= 0 for x in h + m)
d = record['interpolation_degree']
assert type(d) is int and d >= -1
assert record['degree'] == 2 * sum(h) + max(0, d + 1)
assert record['modular_prime'] == 251
interpolation.LINE_EXPONENTS = h
interpolation.ROW_MULTIPLICITIES = m
interpolation.DEGREE = d
interpolation.PRIME = 251
jets = interpolation.symmetric_jets()
basis = interpolation.symmetric_basis() if jets else []
assert len(jets) == record['symmetric_jet_count'] == record['rank']
assert len(basis) == record['symmetric_monomial_count']
assert len(jets) <= len(basis)
if jets:
assert d >= 0
if ranks:
print(f"Rank {record['name']}: {len(jets)} x {len(basis)}", flush=True)
assert interpolation.jet_matrix(basis, jets).rank() == len(jets)
else:
assert d == -1
def verify_coverage(data):
edges = source_edges()
assert [list(e) for e in edges] == data['pair_edges_scaled']
vectors = minimal_vectors(edges)
assert [list(v) for v in vectors] == data['minimal_vectors_scaled']
assert len(vectors) == 16
records = data['certificates']
multiplicities = np.array([r['row_multiplicities'] for r in records], dtype=np.int64).T
degrees = 10000 * np.array([r['degree'] for r in records], dtype=np.int64)
# These bounds also justify signed int64 arithmetic below.
assert np.max(multiplicities) < 10000 and np.max(degrees) < 10**9
residual = []
count = 0
uses = np.zeros(len(records), dtype=np.int64)
minima = np.full(len(records), 2**62, dtype=np.int64)
digest = hashlib.sha256()
for positions in product(range(9), repeat=4):
for vector in vectors:
alpha = np.full(9, 10000, dtype=np.int64)
for t in set(positions):
members = [k for k, pos in enumerate(positions) if pos == t]
alpha[t] = vector[members[0]] if len(members) == 1 else 0
gains = alpha @ multiplicities - degrees
available = np.flatnonzero(gains > 0)
count += 1
if len(available):
k = int(available[0])
uses[k] += 1
minima[k] = min(minima[k], gains[k])
digest.update(f'{positions}:{vector}:{k}:{int(gains[k])}\n'.encode())
else:
residual.append(dict(positions=list(positions), vector_scaled=list(vector),
alpha_scaled=alpha.tolist(), collision=len(set(positions)) < 4))
assert count == data['case_count'] == 104976
assert int(uses.sum()) == data['covered_count']
assert residual == data['residual_cases']
assert len(residual) == data['residual_count']
assert sum(r['collision'] for r in residual) == data['collision_residual_count']
assert uses.tolist() == data['certificate_first_use_counts']
assert [int(x) if x < 2**62 else None for x in minima] == data['certificate_first_use_min_gains_scaled']
assert digest.hexdigest() == data['coverage_sha256']
return dict(index=9, certificates=len(records), root_cases=count,
polynomially_covered=int(uses.sum()), residual_cases=len(residual),
residual_collision_cases=sum(r['collision'] for r in residual),
unique_residual_capacities=len({tuple(r['alpha_scaled']) for r in residual}),
coverage_sha256=digest.hexdigest())
def main():
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('--arithmetic-only', action='store_true')
args = parser.parse_args()
data = json.loads(DATA.read_text())
assert (data['index'], data['primes'], data['scale']) == (9, [2, 3, 5, 7], 10000)
verify_certificates(data['certificates'], ranks=not args.arithmetic_only)
print(json.dumps(verify_coverage(data), indent=2))
if __name__ == '__main__':
main()
Graph