mirror of
https://github.com/allaunthefox/SilverSight.git
synced 2026-07-31 01:25:21 +00:00
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>
43 lines
1.8 KiB
Python
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.)")
|