Research notes on every problem, and a library of the papers behind them. Built from the open erdos repository.
Updated
Evidence
verify/: Independent analytic review and separate grading, with exact subjects and source-interface limits.
The entry point builds the compiled census
util/census.cpp and recomputes the findings recorded in
assets/census.json, through in both modes
below, and in assets/census_1e10.json, through
in mode 0. The research account reports them.
What the census computes. A segmented sieve computes exactly for every . Each composite is written, with the low bits of , its level , a flag and the index of the first checkpoint at least , into a bucket file chosen by the high bits of . Each bucket is sorted, and every ordered pair of inputs with equal values, the diagonal included, is tallied by the number of flagged inputs in the pair, the larger level and the larger checkpoint index. Prefix sums then give, at every checkpoint ( through and through ), the input count and the ordered pair count for the classes of composites with (: all composites) and their flagged and unflagged parts and , together with fiber-size histograms at the decades. Mode 0 flags the inputs with at least three prime factors counted with multiplicity, so is the class of the account; mode 1 flags the inputs whose largest prime factor exceeds their square root. Primes and are counted but not recorded. All arithmetic is exact unsigned integer arithmetic. The finite result has no unbounded mathematical conclusion.
Coverage and bounds. Every integer from through is factored in one segment, and every composite produces one record. A value has one bucket and one low-bit key, so all its records are processed together. Pairing every record in that group with every record, including itself, counts precisely the ordered pairs. The maximum of the two checkpoint tags is the first checkpoint containing both inputs; the maximum level is the first restricted class containing both. These observations justify the prefix sums, rather than treating histogram agreement alone as a coverage argument.
The program refuses . Individual counts are at most ; ; and each prime-power intermediate is at most . These fit in 64 unsigned bits. Pair counts use 128 bits, since on the supported domain and need not fit in 64 bits. The packing uses at most 22 value bits and 10 tag bits. The sieve holds integers at a time. There are at most bucket buffers of 8192 four-byte records, and a sorted bucket is capped at records (2 GiB). The buffers are released before sorting. An exceeded bucket cap terminates with failure; it never truncates the data. No array of all or of all possible is kept in memory.
Checked clauses.
- Through the compiled census agrees exactly, in both modes, with
util/brute.py, which sums proper divisors by a divisor sieve and counts collisions with dictionaries. The comparison uses bucket widths of and , so that the bucket logic is exercised across thousands of boundaries, and covers every , , histogram, prime count and two-prime-factor count at the 9 checkpoints. A further direct comparison at , and checks both sides of the first segmented-sieve boundary in both modes. - The prime counts at equal the known values of , and the counts of with exactly two prime factors equal the known values and ; through also and . Below no level is clipped at 15, as for composite requires.
- At every checkpoint, with even, and are nondecreasing in and in , , , and at the decades every histogram has first moment and second moment .
- Every recorded count and histogram in both assets is reproduced exactly, and their overlapping mode-0 data through agree. Executed checkpoints agree with the requested ones, and the number of records equals and the all-composite input count.
Run from the repository root:
uv run --no-sync python wiki/research/leads/aliquot_collision_density/evidence/main.pyIt needs the root tools package and a C++17 compiler with unsigned 128-bit
integer support on the path. The default runs mode 0 through and
mode 1 through , checking both assets in about forty minutes on one
core. Its scratch files, about 40 GB at the peak, go under the ignored
output/ folder unless --workdir names another place. --quick runs
clause 1 and checks clauses 2 to 4 through only, in about thirty
seconds. --top-exponent 9 checks only the first asset through in
both modes, in about five minutes. Both reduced modes explicitly leave the
extension unchecked. Every failed
check exits nonzero, including under python -O, and a single changed
recorded value fails clause 4. A negative control increasing the recorded
by one in a scratch copy triggers that clause and exits 1
under python -O.
produce.py runs the same census and writes a proposed
findings file to output/ (--top 10 --modes 0 for the second asset); a
file becomes an asset only when copied there.
Limitations. The census is exact but finite. It proves no asymptotic statement about , and the account's reading of its trend is exploratory. The direct reference uses a different algorithm written by the author; it does not constitute independent review or confer a verification tier.