diff --git a/papers/heawood_restrictions_on_nested_tire_graph_duals/experiments/floor_diverse_disks.py b/papers/heawood_restrictions_on_nested_tire_graph_duals/experiments/floor_diverse_disks.py new file mode 100644 index 0000000..554a91a --- /dev/null +++ b/papers/heawood_restrictions_on_nested_tire_graph_duals/experiments/floor_diverse_disks.py @@ -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() diff --git a/papers/heawood_restrictions_on_nested_tire_graph_duals/notes/boundary_restriction_structure.log b/papers/heawood_restrictions_on_nested_tire_graph_duals/notes/boundary_restriction_structure.log index d218c6a..4ae5f36 100644 --- a/papers/heawood_restrictions_on_nested_tire_graph_duals/notes/boundary_restriction_structure.log +++ b/papers/heawood_restrictions_on_nested_tire_graph_duals/notes/boundary_restriction_structure.log @@ -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> -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 diff --git a/papers/heawood_restrictions_on_nested_tire_graph_duals/notes/boundary_restriction_structure.pdf b/papers/heawood_restrictions_on_nested_tire_graph_duals/notes/boundary_restriction_structure.pdf index 4e4fd3f..b2d7a12 100644 Binary files a/papers/heawood_restrictions_on_nested_tire_graph_duals/notes/boundary_restriction_structure.pdf and b/papers/heawood_restrictions_on_nested_tire_graph_duals/notes/boundary_restriction_structure.pdf differ diff --git a/papers/heawood_restrictions_on_nested_tire_graph_duals/notes/boundary_restriction_structure.tex b/papers/heawood_restrictions_on_nested_tire_graph_duals/notes/boundary_restriction_structure.tex index 4e13a20..abdd9ea 100644 --- a/papers/heawood_restrictions_on_nested_tire_graph_duals/notes/boundary_restriction_structure.tex +++ b/papers/heawood_restrictions_on_nested_tire_graph_duals/notes/boundary_restriction_structure.tex @@ -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