SilverSight/scripts/compression/pi_tape_lut.py
allaun f0466be09c docs(compression): add pi-as-tape-LUT coda (offset = data size, base conversion)
Measured on real pi (1e6 digits): first-occurrence position of a k-digit string
~10^k, so the offset needs ~k digits — same size as the data, slope 1. BBP gives
pi free random access (never store the tape) but the address still carries all
the bits. Closes the findings doc on the cleanest single proof of the
base-conversion law. Adds scripts/compression/pi_tape_lut.py.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 15:56:01 -05:00

43 lines
1.8 KiB
Python

"""
"Use the pi digit sequence as a tape LUT": store data as the OFFSET where it
appears in pi, instead of the data itself. Test on REAL pi digits.
Claim under test: the offset is ~the same size as the data, so nothing is saved.
Reason: in a normal (random-looking) base-b sequence, an L-symbol string first
appears near position b^L on average, so the offset needs ~L*log2(b) bits =
exactly the data's size. Pointer-into-pi = base conversion = conservation.
"""
import mpmath, random, math
D = 1_000_000 # decimal digits of pi to use as the tape
mpmath.mp.dps = D + 20
s = mpmath.nstr(mpmath.mp.pi, D + 10, strip_zeros=False).replace("3.", "", 1).replace(".", "")
s = s[:D]
print(f"pi tape: {len(s)} decimal digits\n")
random.seed(0)
print(f"{'k (data digits)':>16}{'trials found':>14}{'avg 1st-occ pos':>18}"
f"{'log10(pos)':>12}{'offset digits':>15}")
print("-" * 76)
for k in range(1, 7):
positions = []
trials = 300
found = 0
for _ in range(trials):
target = "".join(random.choice("0123456789") for _ in range(k))
idx = s.find(target)
if idx >= 0:
positions.append(idx + 1) # 1-based position
found += 1
if positions:
avg = sum(positions) / len(positions)
off_digits = math.log10(avg)
print(f"{k:>16}{found:>10}/{trials}{avg:>18.0f}{math.log10(avg):>12.2f}"
f"{off_digits:>15.2f}")
else:
print(f"{k:>16}{found:>10}/{trials}{'(none in tape)':>18}")
print("\nRead-off: 'offset digits' ~= 'k data digits' at every row -> the pointer into")
print("pi is the SAME size as the data it points to. Base conversion, zero gain.")
print("(k=6 needs ~10^6 positions ~ the whole 10^6-digit tape; beyond it you must")
print(" extend pi further, and the offset only grows to match the data exactly.)")