Skip to content

Repository files navigation

scc -- self-contracted curves and the constant M_2

Numerical and analytic work on

M_n  =  sup  length(C) / diameter(C)

over bounded self-contracted (equivalently, in the plane, self-approaching) curves C in R^n. Everything here reproduces by running the files; no value is quoted on trust.

pip install numpy scipy mpmath
python ikl_construction.py   # the IKL Section 5 extremal geometry, verified
python log_spiral.py         # the self-contraction threshold omega
python dimension.py          # lower bounds on M_n in higher dimensions
python calibrate.py          # paired shape-class contrast (certified rows)
python ladder.py             # the certified lower-bound ladder (anchors + verifier)
python reproduce.py          # runs every claim above and self-checks the numbers
pytest -q test_repo.py       # CI smoke tests (7 checks)

python reproduce.py exits non-zero if any checked value drifts, so you know at once whether the repository reproduces on your machine. On the reference environment every checked value reproduces exactly.

The planar bracket

2.751235  <=  M_2  <=  pi   =  3.14159...,   with 2.7683524 conjectured sharp.

Upper bound M_2 <= pi. In the plane the self-approaching condition of Icking, Klein and Langetepe (1999) coincides with the self-contracted condition, so their perimeter lemma (length <= perimeter of the convex hull) together with perimeter <= pi * diameter gives M_2 <= pi.

Lower bound 2.751235. A certified 84-vertex polygon, computed under the constraint that the diameter is realised by the start-end pair. The continuation ladder, each value certified by exact vertex reduction over all pairs plus brute force on 1500 dense samples (violation 0.0):

n ratio
48 2.626880
60 2.682113
72 2.723856
84 2.751235

The conjectured value 2.7683524. Icking-Klein-Langetepe Section 5 gives a one-parameter family whose ratio is (2b + pi + 2)/(1 + sqrt(5 - 4 cos b)), maximised at 2.768352360426576 for b* = 25.0817 degrees. ikl_construction.py rebuilds this and verifies (i) the numerator is the perimeter of the Theorem 5 enclosure A and the denominator its diameter d(a,f) + 1; (ii) the curve is self-approaching and attains that diameter between its start point and the antipode on the halfcircle; (iii) the cascade limit makes the perimeter lemma tight, so 2.7683524 is achievable as a supremum; (iv) the same family gives the paper's published 5.3331 under the endpoint normalisation, at a different member (b = 11.2178 degrees).

Whether M_2 equals 2.7683524 is open. The construction side is complete; the gap is on the upper-bound side, where adapting Theorem 5 from the endpoint distance to the diameter requires re-taking its worst-case optimisation under the new normalisation.

Two near-extremal shape classes

The certified ladder was computed under the constraint diam = |start - end|. The IKL family violates that constraint (its diameter ends at an interior antipode, exceeding the endpoint distance by the factor 1.852), so the ladder is not discretising the IKL family. calibrate.py runs a paired contrast -- each seed shape optimised with and without the constraint, one solver, one budget, every row certified -- and finds:

seed treatment ratio turns diam/dse
Figure-11 unconstrained 2.375969 2.28 1.5954
Figure-11 diam = SE 2.581783 3.40 1.0000
spiral unconstrained 2.269092 3.40 1.2987
spiral diam = SE 1.657870 4.80 1.0722

The constraint is not a uniform improver: it transforms the IKL shape into a distinct endpoint-pinned 3.4-turn class -- the structure the certified ladder follows -- and damages other shapes (delta +0.206 vs -0.611). So there appear to be two structurally different families near the top: the IKL family, with the diameter at an interior antipode, and the endpoint-pinned class the ladder follows. Whether they share the limit 2.7683524 is the open discrimination the n = 96 continuation is meant to settle.

Cited versus reproduced, stated plainly. The certified ladder values (2.626880 ... 2.751235) were produced by the author's solver and are cited here as anchors, not regenerated by the code in this repository. The reference solver in scc.py is deliberately weak -- it plateaus about 0.4 below the ladder -- and is used only for the structural contrasts, never to claim the ladder's heights. What the repository does let anyone reproduce: the exact IKL constants, the omega threshold, the sqrt(n) families and the step-energy inequality (all in reproduce.py), and the certification of any curve via ladder.verify_curve. To regenerate the ladder itself from scratch, pass your own solve and repair callables to ladder.regenerate -- there is no hidden solver here that emits 2.751235, and the code says so.

Consequently the absolute ratios in the shape-class table are from the reference solver at n = 44 and are NOT comparable to the certified ladder; calibrate.py keeps certification as the shared currency and reports only within-solver deltas and shape fingerprints, so its structural conclusions are solver-independent while its heights are not.

Logarithmic spirals are not extremal

log_spiral.py shows r = e^{-b theta} is self-contracted iff b >= omega, where omega = e^{-3 pi omega / 2} = 0.2744106..., the threshold arising because the self-contraction inequality first binds at angular separation 3 pi / 2. The critical spiral reaches length/diameter = 2.6137493, below the bracket's lower end, so the extremiser is not a logarithmic spiral. (This is the Longinetti-Manselli-Venturi steepest-descent spiral; the threshold derivation is included because it is short and not spelled out in the sources.)

Higher dimensions

dimension.py gives two explicit self-contracted families in R^n, both Theta(sqrt(n)): orthogonal unit steps p_k = e_1 + ... + e_k (ratio exactly sqrt(n), the defining inner products all zero), and concatenated planar blocks in orthogonal 2-planes (about 1.87 sqrt(n)). Both are explained by a one-line inequality: self-contraction with the endpoint gives d_i^2 >= d_{i+1}^2 + |v_i|^2, so summing,

sum_i |v_i|^2  <=  |start - end|^2  <=  diameter^2,

whence by Cauchy-Schwarz an m-edge self-contracted polygon has length at most sqrt(m) * |start - end|, and reaching ratio R costs at least R^2 edges. The orthogonal family attains this with equality. Whether M_n grows faster than sqrt(n) -- in particular whether it can be exponential -- is open; none of the obvious constructions exceeds square-root growth.

Files

scc.py                reference solver (SLSQP continuation) and verifier
ladder.py             certified lower-bound ladder: anchors, verifier, and the
                      regenerate() seam for plugging in the author's solver
ikl_construction.py   IKL Section 5 geometry, constants, and a negative control
calibrate.py          solver-agnostic paired shape-class contrast
log_spiral.py         the self-contraction threshold omega
dimension.py          higher-dimensional lower bounds and the step-energy bound
hypothesis_gen.py     feature fingerprints and constraint templates
reproduce.py          runs every claim and self-checks the numbers
test_repo.py          pytest CI smoke tests, including verifier accept/reject

References

  • C. Icking, R. Klein, E. Langetepe, Self-approaching curves, Math. Proc. Camb. Phil. Soc. 125 (1999) 441-453.
  • O. Aichholzer, F. Aurenhammer, C. Icking, R. Klein, E. Langetepe, G. Rote, Generalized self-approaching curves, Discrete Appl. Math. 109 (2001) 3-24.
  • M. Longinetti, P. Manselli, A. Venturi, Plane R-curves and their steepest descent properties, Appl. Anal. (2018-2019).
  • E. Stepanov, Y. Teplitskaya, Self-contracted curves have finite length, J. London Math. Soc. (2017).

License

MIT.

About

scc -- self-contracted curves and the constant M_2

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages