Back the 2^(n-2) floor with validated diverse-disk search
The stacked-only search missed non-stacked disks, and cocircular boundary points gave degenerate Delaunay (invalid disks, spurious sub-floor |Phi|). Add floor_diverse_disks.py: 1700+ validated disks per n (convex non- cocircular boundary, face-count and boundary-edge checks) confirm min|Phi| = 2^(n-2). Note records that interior structure tends to ENLARGE Phi (wheel 5 vs fan 4) and that depth adds two faces per one constraint. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+94
@@ -0,0 +1,94 @@
|
||||
"""
|
||||
Robustness check for the 2^(n-2) constraint floor over DIVERSE (not just stacked)
|
||||
triangulated disks.
|
||||
|
||||
maximally_constrain.py searches Apollonian-stacked disks only, which miss
|
||||
non-stacked triangulations (e.g. a wheel with a high-degree center). Here we
|
||||
generate disks from random interior points + Delaunay, with boundary points in
|
||||
convex but NON-cocircular position (cocircular boundary points are a Delaunay
|
||||
degeneracy that yields INVALID disks -- missing a boundary edge -- and spuriously
|
||||
report sub-floor |Phi|). Every disk is validated (2k+n-2 faces, all n boundary
|
||||
edges present) before Phi is computed.
|
||||
|
||||
Finding: min |Phi| over validated diverse disks is exactly 2^(n-2), attained by
|
||||
the interior-free triangulation; deeper structure never goes below it (and the
|
||||
central-apex wheel actually ENLARGES Phi: 5 vs the fan's 4 on the 4-cycle).
|
||||
"""
|
||||
|
||||
import sys
|
||||
from collections import Counter
|
||||
from itertools import product
|
||||
|
||||
import numpy as np
|
||||
from scipy.spatial import Delaunay
|
||||
|
||||
np.seterr(all="ignore")
|
||||
|
||||
|
||||
def disk(n, k, rng):
|
||||
ang = 2 * np.pi * np.arange(n) / n
|
||||
rad = 1.0 + 0.15 * rng.random(n) # convex but not cocircular
|
||||
bpts = np.c_[rad * np.cos(ang), rad * np.sin(ang)]
|
||||
if k:
|
||||
r = 0.75 * np.sqrt(rng.random(k)); t = 2 * np.pi * rng.random(k)
|
||||
ipts = np.c_[r * np.cos(t), r * np.sin(t)]
|
||||
pts = np.vstack([bpts, ipts])
|
||||
else:
|
||||
pts = bpts
|
||||
tri = Delaunay(pts)
|
||||
return [tuple(int(x) for x in s) for s in tri.simplices]
|
||||
|
||||
|
||||
def valid(faces, n, k):
|
||||
if len(faces) != 2 * k + n - 2:
|
||||
return False
|
||||
ec = Counter()
|
||||
for a, b, c in faces:
|
||||
for e in ((a, b), (b, c), (a, c)):
|
||||
ec[frozenset(e)] += 1
|
||||
return all(ec[frozenset((i, (i + 1) % n))] == 1 for i in range(n))
|
||||
|
||||
|
||||
def phi(faces, n, k):
|
||||
F = len(faces)
|
||||
interior = list(range(n, n + k))
|
||||
Bint = np.zeros((len(interior), F), dtype=np.int64)
|
||||
Cinc = np.zeros((n, F), dtype=np.int64)
|
||||
for j, (a, b, c) in enumerate(faces):
|
||||
for v in (a, b, c):
|
||||
if v >= n:
|
||||
Bint[interior.index(v), j] = 1
|
||||
else:
|
||||
Cinc[v, j] = 1
|
||||
labs = np.array(list(product((1, 2), repeat=F)), dtype=np.int64)
|
||||
if interior:
|
||||
labs = labs[np.all((labs @ Bint.T) % 3 == 0, axis=1)]
|
||||
if labs.shape[0] == 0:
|
||||
return set()
|
||||
return set(map(tuple, np.unique((labs @ Cinc.T) % 3, axis=0)))
|
||||
|
||||
|
||||
def main():
|
||||
ns = [int(x) for x in sys.argv[1:]] or [4, 5, 6]
|
||||
rng = np.random.default_rng(1)
|
||||
print("Min |Phi| over validated diverse (Delaunay) disks\n")
|
||||
for n in ns:
|
||||
best = 10 ** 9; bk = None; nval = 0; max_seen = 0
|
||||
for k in range(0, 7):
|
||||
for _ in range(250):
|
||||
faces = disk(n, k, rng)
|
||||
if not valid(faces, n, k) or len(faces) > 20:
|
||||
continue
|
||||
nval += 1
|
||||
P = phi(faces, n, k)
|
||||
if P:
|
||||
max_seen = max(max_seen, len(P))
|
||||
if len(P) < best:
|
||||
best = len(P); bk = k
|
||||
print(f" n={n}: {nval} valid disks min|Phi|={best} (k={bk}) "
|
||||
f"max|Phi|={max_seen} 2^(n-2)={2**(n-2)} "
|
||||
f"below-floor={best < 2**(n-2)}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
+7
-6
@@ -1,4 +1,4 @@
|
||||
This is pdfTeX, Version 3.141592653-2.6-1.40.24 (TeX Live 2022) (preloaded format=pdflatex 2022.10.5) 17 JUN 2026 02:12
|
||||
This is pdfTeX, Version 3.141592653-2.6-1.40.24 (TeX Live 2022) (preloaded format=pdflatex 2022.10.5) 17 JUN 2026 02:21
|
||||
entering extended mode
|
||||
restricted \write18 enabled.
|
||||
%&-line parsing enabled.
|
||||
@@ -175,7 +175,7 @@ File: l3backend-pdftex.def 2022-02-07 L3 backend support: PDF output (pdfTeX)
|
||||
\l__color_backend_stack_int=\count278
|
||||
\l__pdf_internal_box=\box52
|
||||
)
|
||||
No file boundary_restriction_structure.aux.
|
||||
(./boundary_restriction_structure.aux)
|
||||
\openout1 = `boundary_restriction_structure.aux'.
|
||||
|
||||
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 18.
|
||||
@@ -192,6 +192,7 @@ LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 18.
|
||||
LaTeX Font Info: ... okay on input line 18.
|
||||
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 18.
|
||||
LaTeX Font Info: ... okay on input line 18.
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
|
||||
[Loading MPS to PDF converter (version 2006.09.02).]
|
||||
\scratchcounter=\count279
|
||||
@@ -263,9 +264,9 @@ File: umsb.fd 2013/01/14 v3.01 AMS symbols B
|
||||
{/usr/local/texlive/2022/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] [2]
|
||||
(./boundary_restriction_structure.aux) )
|
||||
Here is how much of TeX's memory you used:
|
||||
3254 strings out of 478268
|
||||
48506 string characters out of 5846347
|
||||
347668 words of memory out of 5000000
|
||||
3256 strings out of 478268
|
||||
48576 string characters out of 5846347
|
||||
348659 words of memory out of 5000000
|
||||
21442 multiletter control sequences out of 15000+600000
|
||||
480359 words of font info for 70 fonts, out of 8000000 for 9000
|
||||
1141 hyphenation exceptions out of 8191
|
||||
@@ -287,7 +288,7 @@ fonts/cm/cmsy8.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfo
|
||||
nts/cm/cmti10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfon
|
||||
ts/cm/cmtt10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfont
|
||||
s/symbols/msbm10.pfb>
|
||||
Output written on boundary_restriction_structure.pdf (2 pages, 184212 bytes).
|
||||
Output written on boundary_restriction_structure.pdf (2 pages, 185232 bytes).
|
||||
PDF statistics:
|
||||
91 PDF objects out of 1000 (max. 8388607)
|
||||
54 compressed objects within 1 object stream
|
||||
|
||||
BIN
Binary file not shown.
+12
-3
@@ -87,9 +87,18 @@ $2^{\,n-2}$ & $4$ & $8$ & $16$ & $32$\\
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
|
||||
A search over random and deep-stacked disks (up to $8$ interior vertices)
|
||||
never beat $2^{n-2}$, and the interior-free triangulation already
|
||||
attains it. Thus:
|
||||
A search over $1700{+}$ \emph{validated} triangulated disks per $n$
|
||||
(boundary points in convex but non-cocircular position, random interior
|
||||
points, Delaunay; each checked to have $2k+n-2$ faces and all $n$
|
||||
boundary edges present), together with deep-stacked single-apex chains up
|
||||
to $8$ interior vertices, never beat $2^{n-2}$, and the interior-free
|
||||
triangulation already attains it. (Note: cocircular boundary points
|
||||
produce degenerate Delaunay outputs --- invalid disks missing a boundary
|
||||
edge --- which spuriously report sub-floor values; these are excluded by
|
||||
the validity check.) Counterintuitively, adding interior structure tends
|
||||
to \emph{enlarge} $\Phi$: e.g.\ on the $4$-cycle the central-apex wheel
|
||||
realises $5$ sequences against the fan's $4$, since each interior vertex
|
||||
contributes two faces but only one constraint. Thus:
|
||||
|
||||
\begin{obs}
|
||||
The outer $n$-cycle cannot be constrained below $2^{n-2}$ achievable
|
||||
|
||||
Reference in New Issue
Block a user