coloring_nested_tire_graphs: write up closed-chain SR+PDS experiment and the outer-triangle absorption hypothesis
Note records the closed-chain experiment: forward-propagate state
through SR+PDS tire chains with degenerate-inner T_1 and outer-
triangle T_n (m_n=3). All 10 tested chains converge to the same
final state at L_n — exactly the 6 permutations of {1,2,3}.
Introduces the "outer triangle absorption" framing: distinguishes
H1 (chain-dependent: pigeonhole does real work to filter input to
T_n) vs H2 (T_n-only absorption: T_n's σ_U-projection is intrinsically
the 6 permutations regardless of input). Conjecture: H2 (testable by
single-tire computation).
If H2 holds, items 3-4 of the 4CT-via-tire-decomposition outline
become automatic from local data. If H1, the chain-pigeonhole does
structural work and the question is sharper.
Three-panel figure: (A) closed PDS chain (5,6,5,3) with concentric
levels and source apex; (B) outer-face dual constraint requiring
permutation-of-{1,2,3} on outer triangle; (C) state-size trajectory
showing absorption to 6 at the outer step.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,220 @@
|
||||
"""Figures for the 'outer triangle absorption' note.
|
||||
|
||||
Three panels:
|
||||
A. A closed PDS chain (concentric levels around source, ending at
|
||||
outer triangle).
|
||||
B. The outer-triangle constraint in G': dual vertex of degree 3
|
||||
forces the 3 incident edges to have distinct colours.
|
||||
C. The state-size trajectory across the chain showing the
|
||||
'absorption' to size 6.
|
||||
"""
|
||||
import math
|
||||
import os
|
||||
import matplotlib.pyplot as plt
|
||||
from matplotlib.patches import Polygon, FancyArrowPatch
|
||||
import matplotlib.patches as patches
|
||||
|
||||
HERE = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
|
||||
def ring(n, r, phase=math.pi / 2):
|
||||
return [(r * math.cos(phase + 2 * math.pi * i / n),
|
||||
r * math.sin(phase + 2 * math.pi * i / n))
|
||||
for i in range(n)]
|
||||
|
||||
|
||||
# -----------------------------------------------------------------
|
||||
# Panel A: the closed PDS chain (5, 6, 5, 3) — concentric layers
|
||||
# -----------------------------------------------------------------
|
||||
def panel_A(ax):
|
||||
radii = [0.0, 0.9, 1.7, 2.5, 3.4]
|
||||
sizes = [1, 5, 6, 5, 3] # L_0, L_1, L_2, L_3, L_4
|
||||
rings = [None] + [ring(sizes[i], radii[i]) for i in range(1, 5)]
|
||||
|
||||
# Source vertex
|
||||
ax.plot(0, 0, 'o', color='#333', markersize=10, zorder=5)
|
||||
ax.annotate("$L_0$ (source)", (0, 0), xytext=(0.3, 0.15),
|
||||
fontsize=9, color='#333')
|
||||
|
||||
colors = ['#1f77b4', '#2ca02c', '#d62728', '#9467bd']
|
||||
labels = [r'$L_1$ ($|L_1|=5$)', r'$L_2$ ($|L_2|=6$)',
|
||||
r'$L_3$ ($|L_3|=5$)', r'$L_4$ (outer triangle, $|L_4|=3$)']
|
||||
|
||||
# Draw the level cycles
|
||||
for i, (pts, color, label) in enumerate(zip(rings[1:], colors, labels)):
|
||||
for j in range(len(pts)):
|
||||
x1, y1 = pts[j]
|
||||
x2, y2 = pts[(j + 1) % len(pts)]
|
||||
ax.plot([x1, x2], [y1, y2], color=color, linewidth=2.5, zorder=3)
|
||||
for (x, y) in pts:
|
||||
ax.plot(x, y, 'o', color=color, markersize=7, zorder=4)
|
||||
ax.annotate(label,
|
||||
xy=(0, radii[i + 1] + 0.05),
|
||||
fontsize=9, color=color,
|
||||
ha='center', va='bottom')
|
||||
|
||||
# Draw the annular triangulation between consecutive levels
|
||||
# (simple even spacing — not geometrically faithful to a real PDS,
|
||||
# just illustrative).
|
||||
for i in range(4):
|
||||
inner_pts = rings[i] if rings[i] else [(0, 0)] * sizes[i + 1]
|
||||
# For L_0 the apex is at the origin — replicate per outer point
|
||||
outer_pts = rings[i + 1]
|
||||
m_in = len(inner_pts)
|
||||
m_out = len(outer_pts)
|
||||
if m_in == 1:
|
||||
# All outer points connected to apex
|
||||
for (x, y) in outer_pts:
|
||||
ax.plot([0, x], [0, y], color='#aaa', linewidth=0.6, zorder=1)
|
||||
else:
|
||||
# Zig-zag triangulation: each outer to its "nearest" inner
|
||||
# by angle. This is rough; just for illustration.
|
||||
angles_in = [(math.atan2(y, x), j) for j, (x, y) in enumerate(inner_pts)]
|
||||
for (xo, yo) in outer_pts:
|
||||
ao = math.atan2(yo, xo)
|
||||
# Find 2 nearest inner points by angle
|
||||
diffs = sorted(((abs((a - ao + math.pi) % (2 * math.pi) - math.pi), j)
|
||||
for a, j in angles_in))
|
||||
for _, j in diffs[:2]:
|
||||
xi, yi = inner_pts[j]
|
||||
ax.plot([xo, xi], [yo, yi], color='#aaa', linewidth=0.6, zorder=1)
|
||||
|
||||
# Annotate tires (annular regions between consecutive levels)
|
||||
tire_labels = [
|
||||
("$T_1$\n(apex)", 0.45, 0),
|
||||
("$T_2$", 1.3, 0),
|
||||
("$T_3$", 2.1, 0),
|
||||
("$T_4$ (outer)", 2.95, 0),
|
||||
]
|
||||
for lbl, x, y in tire_labels:
|
||||
ax.text(x, y, lbl, fontsize=8, color='#555',
|
||||
ha='center', va='center',
|
||||
bbox=dict(boxstyle='round,pad=0.18', facecolor='white',
|
||||
edgecolor='none', alpha=0.7))
|
||||
|
||||
ax.set_xlim(-3.8, 3.8)
|
||||
ax.set_ylim(-3.8, 3.8)
|
||||
ax.set_aspect('equal')
|
||||
ax.axis('off')
|
||||
ax.set_title(r"(A) Closed PDS chain: $L_0$ (source) $\to L_4$ (outer triangle)",
|
||||
fontsize=10)
|
||||
|
||||
|
||||
# -----------------------------------------------------------------
|
||||
# Panel B: the outer-triangle constraint in G'
|
||||
# -----------------------------------------------------------------
|
||||
def panel_B(ax):
|
||||
# Outer triangle vertices in G
|
||||
pts = [(math.cos(math.pi/2 + 2*math.pi*i/3),
|
||||
math.sin(math.pi/2 + 2*math.pi*i/3)) for i in range(3)]
|
||||
# Outer face's dual vertex (outside the triangle)
|
||||
outer_dual = (0, 1.9)
|
||||
# Each outer triangle edge has a midpoint that connects to outer_dual
|
||||
# in G'.
|
||||
|
||||
# Draw the outer triangle (in G)
|
||||
for i in range(3):
|
||||
x1, y1 = pts[i]
|
||||
x2, y2 = pts[(i + 1) % 3]
|
||||
ax.plot([x1, x2], [y1, y2], color='#9467bd', linewidth=2.5, zorder=3)
|
||||
for (x, y) in pts:
|
||||
ax.plot(x, y, 'o', color='#9467bd', markersize=9, zorder=4)
|
||||
|
||||
# Edge midpoints (these are 'duals' of the edges, in some sense)
|
||||
mids = []
|
||||
for i in range(3):
|
||||
x1, y1 = pts[i]
|
||||
x2, y2 = pts[(i + 1) % 3]
|
||||
mids.append(((x1 + x2) / 2, (y1 + y2) / 2))
|
||||
|
||||
# Inside the triangle: the annular face dual of T_n on each edge
|
||||
# (a single G'-vertex per outer edge, one of T_n's annular face duals).
|
||||
inside_pts = [(0.5 * mx, 0.5 * my - 0.05) for (mx, my) in mids]
|
||||
|
||||
# Outer face dual vertex (above the triangle, on G' side)
|
||||
ax.plot(outer_dual[0], outer_dual[1], 's', color='#d62728',
|
||||
markersize=18, zorder=4)
|
||||
ax.annotate("outer face\ndual vertex", outer_dual,
|
||||
xytext=(outer_dual[0] - 1.7, outer_dual[1] + 0.1),
|
||||
fontsize=9, color='#d62728',
|
||||
arrowprops=dict(arrowstyle='->', color='#d62728', lw=1.0))
|
||||
|
||||
# Three G'-edges from outer face dual to inside (each crossing an outer-triangle edge)
|
||||
g_prime_colors = ['#d62728', '#1f77b4', '#2ca02c'] # R, B, G — the three colors
|
||||
for k, (mx, my) in enumerate(mids):
|
||||
# Curve from outer_dual through this midpoint to inside_pts[k]
|
||||
ix, iy = inside_pts[k]
|
||||
ax.plot([outer_dual[0], mx], [outer_dual[1], my],
|
||||
color=g_prime_colors[k], linewidth=2.2, zorder=2,
|
||||
linestyle='--')
|
||||
ax.plot([mx, ix], [my, iy],
|
||||
color=g_prime_colors[k], linewidth=2.2, zorder=2,
|
||||
linestyle='--')
|
||||
ax.plot(ix, iy, 'o', color='#888', markersize=8, zorder=3)
|
||||
|
||||
# Annotate the inside vertices (T_n annular face duals)
|
||||
ax.text(0, -0.55, r"$T_n$'s annular face duals", fontsize=8, color='#555',
|
||||
ha='center')
|
||||
|
||||
# Annotate the constraint
|
||||
ax.text(0, 2.6, "outer face dual has 3 incident\n"
|
||||
"$G'$-edges → all 3 colours distinct",
|
||||
fontsize=9, ha='center', va='bottom',
|
||||
color='#d62728')
|
||||
|
||||
ax.set_xlim(-2.3, 2.3)
|
||||
ax.set_ylim(-1.3, 3.1)
|
||||
ax.set_aspect('equal')
|
||||
ax.axis('off')
|
||||
ax.set_title(r"(B) Outer-triangle dual constraint forces $\sigma|_{L_n}$ to be a permutation",
|
||||
fontsize=10)
|
||||
|
||||
|
||||
# -----------------------------------------------------------------
|
||||
# Panel C: state-size trajectory
|
||||
# -----------------------------------------------------------------
|
||||
def panel_C(ax):
|
||||
# Example trajectory from the experiment (7-tire chain)
|
||||
chain_labels = [r"$L_1$", r"$L_2$", r"$L_3$", r"$L_4$",
|
||||
r"$L_5$", r"$L_6$", r"$L_7$"]
|
||||
traj = [63, 783, 9993, 14643, 1641, 60, 6]
|
||||
xs = list(range(len(traj)))
|
||||
ax.plot(xs, traj, 'o-', color='#1f3f70', linewidth=2, markersize=8)
|
||||
# Annotate each value
|
||||
for x, v in zip(xs, traj):
|
||||
ax.annotate(str(v), (x, v),
|
||||
textcoords="offset points", xytext=(0, 9),
|
||||
ha='center', fontsize=8, color='#1f3f70')
|
||||
ax.set_yscale('log')
|
||||
ax.set_xticks(xs)
|
||||
ax.set_xticklabels(chain_labels)
|
||||
ax.set_xlabel("shared cycle (level)")
|
||||
ax.set_ylabel("state size (log scale)")
|
||||
ax.grid(True, alpha=0.3, axis='y')
|
||||
ax.set_title(r"(C) State trajectory: chain (6,1)$|$(8,6)$|$(10,8)$|$(10,10)$|$(8,10)$|$(5,8)$|$(3,5)",
|
||||
fontsize=10)
|
||||
# Annotate the "absorption" at the last step
|
||||
ax.annotate("absorption to\n6 permutations\nof $\\{1,2,3\\}$",
|
||||
xy=(6, 6), xytext=(4.5, 30),
|
||||
fontsize=9, color='#d62728',
|
||||
arrowprops=dict(arrowstyle='->', color='#d62728', lw=1.2))
|
||||
|
||||
|
||||
def main():
|
||||
fig = plt.figure(figsize=(15.5, 5.5))
|
||||
gs = fig.add_gridspec(1, 3, width_ratios=[1.0, 1.0, 1.2])
|
||||
ax_A = fig.add_subplot(gs[0, 0])
|
||||
ax_B = fig.add_subplot(gs[0, 1])
|
||||
ax_C = fig.add_subplot(gs[0, 2])
|
||||
panel_A(ax_A)
|
||||
panel_B(ax_B)
|
||||
panel_C(ax_C)
|
||||
plt.tight_layout()
|
||||
out = os.path.join(HERE, 'fig_outer_triangle_absorption.png')
|
||||
plt.savefig(out, dpi=160, bbox_inches='tight')
|
||||
plt.close()
|
||||
print(f"wrote {out}")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 204 KiB |
@@ -0,0 +1,6 @@
|
||||
\relax
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces (A) A representative closed PDS chain on a triangulated disk: source $L_0$, level cycles $L_1, L_2, L_3, L_4$ with sizes $5, 6, 5, 3$. Tires $T_1, T_2, T_3, T_4$ are the annular regions between consecutive levels. (B) The outer triangle's contribution in $G'$: the outer face of $G$ becomes a single $G'$-vertex of degree $3$. Proper edge $3$-colouring requires its three incident $G'$-edges (the duals of the three outer-triangle edges) to be distinct. So $\sigma |_{L_n}$ must be a permutation of $\{1,2,3\}$. (C) State trajectory for the chain $(6, 1) | (8, 6) | (10, 8) | (10, 10) | (8, 10) | (5, 8) | (3, 5)$: state grows where cycles are widest and \emph {collapses to exactly $6$ at the outer triangle}.\relax }}{2}{}\protected@file@percent }
|
||||
\providecommand*\caption@xref[2]{\@setref\relax\@undefined{#1}}
|
||||
\newlabel{fig:absorption}{{1}{2}}
|
||||
\newlabel{conj:absorption-local}{{}{3}}
|
||||
\gdef \@abspage@last{4}
|
||||
@@ -0,0 +1,313 @@
|
||||
This is pdfTeX, Version 3.141592653-2.6-1.40.24 (TeX Live 2022) (preloaded format=pdflatex 2022.10.5) 26 MAY 2026 12:31
|
||||
entering extended mode
|
||||
restricted \write18 enabled.
|
||||
%&-line parsing enabled.
|
||||
**outer_triangle_absorption.tex
|
||||
(./outer_triangle_absorption.tex
|
||||
LaTeX2e <2021-11-15> patch level 1
|
||||
L3 programming layer <2022-02-24>
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/base/article.cls
|
||||
Document Class: article 2021/10/04 v1.4n Standard LaTeX document class
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/base/size11.clo
|
||||
File: size11.clo 2021/10/04 v1.4n Standard LaTeX file (size option)
|
||||
)
|
||||
\c@part=\count185
|
||||
\c@section=\count186
|
||||
\c@subsection=\count187
|
||||
\c@subsubsection=\count188
|
||||
\c@paragraph=\count189
|
||||
\c@subparagraph=\count190
|
||||
\c@figure=\count191
|
||||
\c@table=\count192
|
||||
\abovecaptionskip=\skip47
|
||||
\belowcaptionskip=\skip48
|
||||
\bibindent=\dimen138
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsmath.sty
|
||||
Package: amsmath 2021/10/15 v2.17l AMS math features
|
||||
\@mathmargin=\skip49
|
||||
|
||||
For additional information on amsmath, use the `?' option.
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amstext.sty
|
||||
Package: amstext 2021/08/26 v2.01 AMS text
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsgen.sty
|
||||
File: amsgen.sty 1999/11/30 v2.0 generic functions
|
||||
\@emptytoks=\toks16
|
||||
\ex@=\dimen139
|
||||
))
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsbsy.sty
|
||||
Package: amsbsy 1999/11/29 v1.2d Bold Symbols
|
||||
\pmbraise@=\dimen140
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsopn.sty
|
||||
Package: amsopn 2021/08/26 v2.02 operator names
|
||||
)
|
||||
\inf@bad=\count193
|
||||
LaTeX Info: Redefining \frac on input line 234.
|
||||
\uproot@=\count194
|
||||
\leftroot@=\count195
|
||||
LaTeX Info: Redefining \overline on input line 399.
|
||||
\classnum@=\count196
|
||||
\DOTSCASE@=\count197
|
||||
LaTeX Info: Redefining \ldots on input line 496.
|
||||
LaTeX Info: Redefining \dots on input line 499.
|
||||
LaTeX Info: Redefining \cdots on input line 620.
|
||||
\Mathstrutbox@=\box50
|
||||
\strutbox@=\box51
|
||||
\big@size=\dimen141
|
||||
LaTeX Font Info: Redeclaring font encoding OML on input line 743.
|
||||
LaTeX Font Info: Redeclaring font encoding OMS on input line 744.
|
||||
\macc@depth=\count198
|
||||
\c@MaxMatrixCols=\count199
|
||||
\dotsspace@=\muskip16
|
||||
\c@parentequation=\count266
|
||||
\dspbrk@lvl=\count267
|
||||
\tag@help=\toks17
|
||||
\row@=\count268
|
||||
\column@=\count269
|
||||
\maxfields@=\count270
|
||||
\andhelp@=\toks18
|
||||
\eqnshift@=\dimen142
|
||||
\alignsep@=\dimen143
|
||||
\tagshift@=\dimen144
|
||||
\tagwidth@=\dimen145
|
||||
\totwidth@=\dimen146
|
||||
\lineht@=\dimen147
|
||||
\@envbody=\toks19
|
||||
\multlinegap=\skip50
|
||||
\multlinetaggap=\skip51
|
||||
\mathdisplay@stack=\toks20
|
||||
LaTeX Info: Redefining \[ on input line 2938.
|
||||
LaTeX Info: Redefining \] on input line 2939.
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/amssymb.sty
|
||||
Package: amssymb 2013/01/14 v3.01 AMS font symbols
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/amsfonts.sty
|
||||
Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support
|
||||
\symAMSa=\mathgroup4
|
||||
\symAMSb=\mathgroup5
|
||||
LaTeX Font Info: Redeclaring math symbol \hbar on input line 98.
|
||||
LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold'
|
||||
(Font) U/euf/m/n --> U/euf/b/n on input line 106.
|
||||
))
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amscls/amsthm.sty
|
||||
Package: amsthm 2020/05/29 v2.20.6
|
||||
\thm@style=\toks21
|
||||
\thm@bodyfont=\toks22
|
||||
\thm@headfont=\toks23
|
||||
\thm@notefont=\toks24
|
||||
\thm@headpunct=\toks25
|
||||
\thm@preskip=\skip52
|
||||
\thm@postskip=\skip53
|
||||
\thm@headsep=\skip54
|
||||
\dth@everypar=\toks26
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/graphics/graphicx.sty
|
||||
Package: graphicx 2021/09/16 v1.2d Enhanced LaTeX Graphics (DPC,SPQR)
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/graphics/keyval.sty
|
||||
Package: keyval 2014/10/28 v1.15 key=value parser (DPC)
|
||||
\KV@toks@=\toks27
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/graphics/graphics.sty
|
||||
Package: graphics 2021/03/04 v1.4d Standard LaTeX Graphics (DPC,SPQR)
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/graphics/trig.sty
|
||||
Package: trig 2021/08/11 v1.11 sin cos tan (DPC)
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
|
||||
File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration
|
||||
)
|
||||
Package graphics Info: Driver file: pdftex.def on input line 107.
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/graphics-def/pdftex.def
|
||||
File: pdftex.def 2020/10/05 v1.2a Graphics/color driver for pdftex
|
||||
))
|
||||
\Gin@req@height=\dimen148
|
||||
\Gin@req@width=\dimen149
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/geometry/geometry.sty
|
||||
Package: geometry 2020/01/02 v5.9 Page Geometry
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/iftex/ifvtex.sty
|
||||
Package: ifvtex 2019/10/25 v1.7 ifvtex legacy package. Use iftex instead.
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/iftex/iftex.sty
|
||||
Package: iftex 2022/02/03 v1.0f TeX engine tests
|
||||
))
|
||||
\Gm@cnth=\count271
|
||||
\Gm@cntv=\count272
|
||||
\c@Gm@tempcnt=\count273
|
||||
\Gm@bindingoffset=\dimen150
|
||||
\Gm@wd@mp=\dimen151
|
||||
\Gm@odd@mp=\dimen152
|
||||
\Gm@even@mp=\dimen153
|
||||
\Gm@layoutwidth=\dimen154
|
||||
\Gm@layoutheight=\dimen155
|
||||
\Gm@layouthoffset=\dimen156
|
||||
\Gm@layoutvoffset=\dimen157
|
||||
\Gm@dimlist=\toks28
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/caption/caption.sty
|
||||
Package: caption 2022/03/01 v3.6b Customizing captions (AR)
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/caption/caption3.sty
|
||||
Package: caption3 2022/03/17 v2.3b caption3 kernel (AR)
|
||||
\caption@tempdima=\dimen158
|
||||
\captionmargin=\dimen159
|
||||
\caption@leftmargin=\dimen160
|
||||
\caption@rightmargin=\dimen161
|
||||
\caption@width=\dimen162
|
||||
\caption@indent=\dimen163
|
||||
\caption@parindent=\dimen164
|
||||
\caption@hangindent=\dimen165
|
||||
Package caption Info: Standard document class detected.
|
||||
)
|
||||
\c@caption@flags=\count274
|
||||
\c@continuedfloat=\count275
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
|
||||
File: l3backend-pdftex.def 2022-02-07 L3 backend support: PDF output (pdfTeX)
|
||||
\l__color_backend_stack_int=\count276
|
||||
\l__pdf_internal_box=\box52
|
||||
)
|
||||
(./outer_triangle_absorption.aux)
|
||||
\openout1 = `outer_triangle_absorption.aux'.
|
||||
|
||||
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 16.
|
||||
LaTeX Font Info: ... okay on input line 16.
|
||||
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 16.
|
||||
LaTeX Font Info: ... okay on input line 16.
|
||||
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 16.
|
||||
LaTeX Font Info: ... okay on input line 16.
|
||||
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 16.
|
||||
LaTeX Font Info: ... okay on input line 16.
|
||||
LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 16.
|
||||
LaTeX Font Info: ... okay on input line 16.
|
||||
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 16.
|
||||
LaTeX Font Info: ... okay on input line 16.
|
||||
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 16.
|
||||
LaTeX Font Info: ... okay on input line 16.
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
|
||||
[Loading MPS to PDF converter (version 2006.09.02).]
|
||||
\scratchcounter=\count277
|
||||
\scratchdimen=\dimen166
|
||||
\scratchbox=\box53
|
||||
\nofMPsegments=\count278
|
||||
\nofMParguments=\count279
|
||||
\everyMPshowfont=\toks29
|
||||
\MPscratchCnt=\count280
|
||||
\MPscratchDim=\dimen167
|
||||
\MPnumerator=\count281
|
||||
\makeMPintoPDFobject=\count282
|
||||
\everyMPtoPDFconversion=\toks30
|
||||
) (/usr/local/texlive/2022/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
|
||||
Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf
|
||||
Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4
|
||||
85.
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
|
||||
File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv
|
||||
e
|
||||
))
|
||||
*geometry* driver: auto-detecting
|
||||
*geometry* detected driver: pdftex
|
||||
*geometry* verbose mode - [ preamble ] result:
|
||||
* driver: pdftex
|
||||
* paper: <default>
|
||||
* layout: <same size as paper>
|
||||
* layoutoffset:(h,v)=(0.0pt,0.0pt)
|
||||
* modes:
|
||||
* h-part:(L,W,R)=(72.26999pt, 469.75502pt, 72.26999pt)
|
||||
* v-part:(T,H,B)=(72.26999pt, 650.43001pt, 72.26999pt)
|
||||
* \paperwidth=614.295pt
|
||||
* \paperheight=794.96999pt
|
||||
* \textwidth=469.75502pt
|
||||
* \textheight=650.43001pt
|
||||
* \oddsidemargin=0.0pt
|
||||
* \evensidemargin=0.0pt
|
||||
* \topmargin=-37.0pt
|
||||
* \headheight=12.0pt
|
||||
* \headsep=25.0pt
|
||||
* \topskip=11.0pt
|
||||
* \footskip=30.0pt
|
||||
* \marginparwidth=59.0pt
|
||||
* \marginparsep=10.0pt
|
||||
* \columnsep=10.0pt
|
||||
* \skip\footins=10.0pt plus 4.0pt minus 2.0pt
|
||||
* \hoffset=0.0pt
|
||||
* \voffset=0.0pt
|
||||
* \mag=1000
|
||||
* \@twocolumnfalse
|
||||
* \@twosidefalse
|
||||
* \@mparswitchfalse
|
||||
* \@reversemarginfalse
|
||||
* (1in=72.27pt=25.4mm, 1cm=28.453pt)
|
||||
|
||||
Package caption Info: Begin \AtBeginDocument code.
|
||||
Package caption Info: End \AtBeginDocument code.
|
||||
LaTeX Font Info: Trying to load font information for U+msa on input line 17.
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/umsa.fd
|
||||
File: umsa.fd 2013/01/14 v3.01 AMS symbols A
|
||||
)
|
||||
LaTeX Font Info: Trying to load font information for U+msb on input line 17.
|
||||
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/umsb.fd
|
||||
File: umsb.fd 2013/01/14 v3.01 AMS symbols B
|
||||
)
|
||||
Overfull \hbox (43.46935pt too wide) in paragraph at lines 38--41
|
||||
[]\OT1/cmr/m/n/10.95 Step 3 (chain-wide con-sis-tency for open chains): held in
|
||||
ev-ery tested case in \OT1/cmtt/m/n/10.95 sr[]chain[]consistency.py\OT1/cmr/m/
|
||||
n/10.95 ,
|
||||
[]
|
||||
|
||||
<fig_outer_triangle_absorption.png, id=1, 1112.958pt x 388.45125pt>
|
||||
File: fig_outer_triangle_absorption.png Graphic file (type png)
|
||||
<use fig_outer_triangle_absorption.png>
|
||||
Package pdftex.def Info: fig_outer_triangle_absorption.png used on input line
|
||||
71.
|
||||
(pdftex.def) Requested size: 469.75502pt x 163.95451pt.
|
||||
|
||||
LaTeX Warning: `h' float specifier changed to `ht'.
|
||||
|
||||
[1
|
||||
|
||||
{/usr/local/texlive/2022/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
|
||||
[2 <./fig_outer_triangle_absorption.png>] [3] [4]
|
||||
(./outer_triangle_absorption.aux) )
|
||||
Here is how much of TeX's memory you used:
|
||||
4510 strings out of 478268
|
||||
73204 string characters out of 5846347
|
||||
370630 words of memory out of 5000000
|
||||
22693 multiletter control sequences out of 15000+600000
|
||||
479218 words of font info for 67 fonts, out of 8000000 for 9000
|
||||
1141 hyphenation exceptions out of 8191
|
||||
55i,7n,63p,874b,352s stack positions out of 10000i,1000n,20000p,200000b,200000s
|
||||
{/usr/local/texlive/2022/texmf-dist/fonts/en
|
||||
c/dvips/cm-super/cm-super-ts1.enc}</usr/local/texlive/2022/texmf-dist/fonts/typ
|
||||
e1/public/amsfonts/cm/cmbx10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type
|
||||
1/public/amsfonts/cm/cmbx12.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1
|
||||
/public/amsfonts/cm/cmmi10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/
|
||||
public/amsfonts/cm/cmmi6.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/pu
|
||||
blic/amsfonts/cm/cmmi8.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/publ
|
||||
ic/amsfonts/cm/cmr10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public
|
||||
/amsfonts/cm/cmr17.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/a
|
||||
msfonts/cm/cmr8.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsf
|
||||
onts/cm/cmsy10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfo
|
||||
nts/cm/cmsy6.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfont
|
||||
s/cm/cmsy8.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/
|
||||
cm/cmti10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/c
|
||||
m/cmtt10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/cm-super/sf
|
||||
rm1095.pfb>
|
||||
Output written on outer_triangle_absorption.pdf (4 pages, 344652 bytes).
|
||||
PDF statistics:
|
||||
91 PDF objects out of 1000 (max. 8388607)
|
||||
54 compressed objects within 1 object stream
|
||||
0 named destinations out of 1000 (max. 500000)
|
||||
6 words of extra memory for PDF output out of 10000 (max. 10000000)
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,243 @@
|
||||
\documentclass[11pt]{article}
|
||||
\usepackage{amsmath,amssymb,amsthm}
|
||||
\usepackage{graphicx}
|
||||
\usepackage{geometry}
|
||||
\usepackage{caption}
|
||||
\geometry{margin=1in}
|
||||
|
||||
\title{Closed PDS chains under SR:\\
|
||||
outer-triangle absorption and the chain-pigeonhole conclusion}
|
||||
\author{}
|
||||
\date{}
|
||||
|
||||
\newtheorem*{obs}{Observation}
|
||||
\newtheorem*{conj}{Conjecture}
|
||||
|
||||
\begin{document}
|
||||
\maketitle
|
||||
|
||||
\section*{What this note records}
|
||||
|
||||
This is the experimental record of the SR + PDS closed-chain
|
||||
experiment that followed the realisation (from
|
||||
\texttt{tire\_fiber\_chunked.py} and \texttt{sr\_chain\_consistency.py})
|
||||
that the Steiner-poor (SP) model with chord-on-$O$ constraints is
|
||||
not the right setting for PDS-decomposed maximal planar graphs. In
|
||||
the correct SR setting, each $\gamma$-edge has its own inner-spoke
|
||||
pendant, and the chord-induced face structure of $O$ does not enter
|
||||
$T'_{f'}$ directly. Under this regime:
|
||||
|
||||
\begin{itemize}
|
||||
\item Step 1 (saturation) gives $\pi_D$ on the long-side saturates
|
||||
$\{1,2,3\}^k$ when $m \geq k$ (proven empirically up to
|
||||
$k = 12$ in \texttt{tire\_fiber\_data.tex}; conjectured in
|
||||
general).
|
||||
\item Step 2 (pairwise chain compatibility) is automatic from
|
||||
step 1 whenever PDS grows outward ($m_1 \geq |\gamma|$ in
|
||||
each adjacent tire's outer-side).
|
||||
\item Step 3 (chain-wide consistency for open chains): held in
|
||||
every tested case in \texttt{sr\_chain\_consistency.py},
|
||||
with forward state size growing monotonically.
|
||||
\end{itemize}
|
||||
|
||||
The remaining concern was the \textbf{boundary} of the chain. A PDS
|
||||
on a planar triangulated disk has two ends:
|
||||
|
||||
\begin{itemize}
|
||||
\item Innermost: $L_0$ a single source vertex (degenerate $B_{\text{in}}$
|
||||
for $T_1$). No constraint on $\sigma$ at $L_0$.
|
||||
\item Outermost: $L_n$ the boundary of the outer face of $G$. In
|
||||
the standard reduction (Birkhoff: minimal counterexample is
|
||||
internally $6$-connected, hence the outer face is a triangle),
|
||||
$L_n$ is a $3$-cycle. Its dual constraint forces $\sigma$ at
|
||||
$L_n$ to be a permutation of $\{1,2,3\}$.
|
||||
\end{itemize}
|
||||
|
||||
\section*{The closed-chain experiment}
|
||||
|
||||
Script: \texttt{experiments/sr\_closed\_chain.py}. Output:
|
||||
\texttt{experiments/sr\_closed\_chain\_data.txt}.
|
||||
|
||||
We forward-propagate state through a tire chain $T_1 | T_2 | \dots |
|
||||
T_n$ with $T_1$'s $B_{\text{in}}$ degenerate (the source vertex) and
|
||||
$T_n$'s $B_{\text{out}}$ being the outer triangle of length $3$.
|
||||
Each tire is SR (no chord constraints) and the chain shape (the
|
||||
sequence of level-cycle sizes) is varied. At each step, the state
|
||||
is the set of $\sigma$-patterns realisable on the current shared
|
||||
cycle.
|
||||
|
||||
\begin{figure}[h]
|
||||
\centering
|
||||
\includegraphics[width=\textwidth]{fig_outer_triangle_absorption.png}
|
||||
\caption{(A) A representative closed PDS chain on a triangulated
|
||||
disk: source $L_0$, level cycles $L_1, L_2, L_3, L_4$ with sizes
|
||||
$5, 6, 5, 3$. Tires $T_1, T_2, T_3, T_4$ are the annular regions
|
||||
between consecutive levels. (B) The outer triangle's contribution
|
||||
in $G'$: the outer face of $G$ becomes a single $G'$-vertex of
|
||||
degree $3$. Proper edge $3$-colouring requires its three incident
|
||||
$G'$-edges (the duals of the three outer-triangle edges) to be
|
||||
distinct. So $\sigma|_{L_n}$ must be a permutation of $\{1,2,3\}$.
|
||||
(C) State trajectory for the chain
|
||||
$(6, 1) | (8, 6) | (10, 8) | (10, 10) | (8, 10) | (5, 8) | (3, 5)$:
|
||||
state grows where cycles are widest and \emph{collapses to exactly
|
||||
$6$ at the outer triangle}.}
|
||||
\label{fig:absorption}
|
||||
\end{figure}
|
||||
|
||||
\section*{Results}
|
||||
|
||||
Across all $10$ tested chains (source degrees $5, 6, 7$; chain
|
||||
lengths $4$ to $7$; various growth/shrink shapes; outer triangle
|
||||
fixed at size $3$):
|
||||
|
||||
\begin{itemize}
|
||||
\item Every chain is consistent (state never empties).
|
||||
\item In every chain, the final state at $L_n$ has size
|
||||
\textbf{exactly $6$}, with all $6$ elements being the
|
||||
permutations of $\{1, 2, 3\}$ on the $3$ outer-triangle edges.
|
||||
\item The outer-face dual-vertex constraint (degree $3$, distinct
|
||||
colours) is satisfied automatically.
|
||||
\end{itemize}
|
||||
|
||||
Sample trajectories:
|
||||
|
||||
\begin{center}
|
||||
\small
|
||||
\begin{tabular}{l l}
|
||||
chain & state sizes \\ \hline
|
||||
$(5,1) | (6,5) | (5,6) | (3,5)$ & $30 \to 132 \to 60 \to 6$ \\
|
||||
$(5,1) | (7,5) | (5,7) | (3,5)$ & $30 \to 312 \to 60 \to 6$ \\
|
||||
$(5,1) | (8,5) | (8,8) | (5,8) | (3,5)$ & $30 \to 708 \to 1476 \to 60 \to 6$ \\
|
||||
$(6,1) | (9,6) | (8,9) | (5,8) | (3,5)$ & $63 \to 1836 \to 1623 \to 60 \to 6$ \\
|
||||
$(6,1) | (8,6) | (10,8) | (10,10) | (8,10) | (5,8) | (3,5)$ & $63 \to 783 \to 9993 \to 14643 \to 1641 \to 60 \to 6$ \\
|
||||
$(7,1) | (9,7) | (7,9) | (3,7)$ & $126 \to 2130 \to 546 \to 6$ \\
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
|
||||
\section*{What ``outer triangle absorption'' means}
|
||||
|
||||
The empirical pattern is striking: the final state is always exactly
|
||||
$6$, and those $6$ are exactly the permutations of $\{1,2,3\}$. But
|
||||
this could be one of two distinct things:
|
||||
|
||||
\begin{description}
|
||||
\item[(H1) Chain-dependent absorption.]
|
||||
The state \emph{before} $T_n$ depends on the chain, but every
|
||||
such state happens to filter through $T_n$ to the same
|
||||
$6$-element set. In this case the chain-pigeonhole step is
|
||||
non-trivial: it succeeds in feeding $T_n$ with the right
|
||||
kind of input.
|
||||
\item[(H2) $T_n$-only absorption.]
|
||||
$T_n$ (the outer tire with $m_n = 3$) has the property that
|
||||
its $\sigma_U$-support is intrinsically the $6$ permutations
|
||||
of $\{1, 2, 3\}$, \emph{regardless} of what state is fed to
|
||||
its $\sigma_D$-side. In this case the absorption is a local
|
||||
property of $T_n$ alone, and the chain-consistency before
|
||||
$T_n$ contributes nothing.
|
||||
\end{description}
|
||||
|
||||
These two are testable empirically: under (H1), feeding $T_n$ an
|
||||
unrelated or random $\sigma_D$ state should not always give $6$
|
||||
permutations; under (H2), the output is always $6$ permutations
|
||||
regardless of input.
|
||||
|
||||
\begin{conj}[$T_n$-absorption is local]
|
||||
\label{conj:absorption-local}
|
||||
For any tire $T_n$ with $m_n = 3$ and $k_n \geq 3$, the $\sigma_U$
|
||||
projection of $T_n$'s joint support equals exactly the $S_3$-orbit
|
||||
of $(1, 2, 3)$ on the $3$ outer-spoke positions. Equivalently:
|
||||
every proper edge $3$-colouring of $C_{n_n}$, when restricted to the
|
||||
$3$ U-positions, gives a permutation of $\{1, 2, 3\}$.
|
||||
\end{conj}
|
||||
|
||||
If the conjecture holds, the closed-chain pattern is partly
|
||||
\emph{trivial}: the outer tire takes care of itself. The non-trivial
|
||||
content of the chain consistency lives in (a) chain non-emptiness
|
||||
(state never collapses) and (b) the final state's intersection with
|
||||
the $6$-element target being non-empty.
|
||||
|
||||
Under (H1), in contrast, the chain-pigeonhole is doing real work,
|
||||
threading the input to $T_n$ through a specific structure that the
|
||||
chain enforces.
|
||||
|
||||
\section*{Why this matters for 4CT}
|
||||
|
||||
A proof of 4CT via this approach would have four ingredients:
|
||||
|
||||
\begin{enumerate}
|
||||
\item \textbf{PDS exists}: Bauerfeld's PDS gives a tire
|
||||
decomposition of every maximal planar $G$ from a level
|
||||
source.
|
||||
\item \textbf{SR is correct}: for $G$ a triangulation with
|
||||
sufficient connectivity (Birkhoff: internally $6$-connected),
|
||||
the SR model accurately describes $T'_{f'}$ at each tire.
|
||||
(This is what makes the chord-on-$O$ artifacts go away.)
|
||||
\item \textbf{Open-chain compatibility}: at every shared $\gamma$,
|
||||
$\pi_D$ from the outer tire saturates $\{1,2,3\}^\gamma$, so
|
||||
every $\sigma$ from the inner tire admits a continuation.
|
||||
(Step-1 saturation + outward PDS.)
|
||||
\item \textbf{Closed-chain compatibility}: the forward-propagated
|
||||
state at the outer triangle contains a permutation of
|
||||
$\{1,2,3\}$. Empirically yes, in all tested cases.
|
||||
\end{enumerate}
|
||||
|
||||
Items 1 and 2 are structural and depend on the PDS/Birkhoff theory.
|
||||
Item 3 is step-1 saturation. Item 4 is what this note's experiment
|
||||
addresses, with the data above.
|
||||
|
||||
If Conjecture~\ref{conj:absorption-local} is true, item 4 is automatic
|
||||
from local structure of $T_n$. Combined with item 3 (chain
|
||||
non-emptiness), the whole pigeonhole story closes for any PDS chain
|
||||
ending at an outer triangle.
|
||||
|
||||
If Conjecture~\ref{conj:absorption-local} is false, item 4 still
|
||||
holds empirically but for a genuinely chain-dependent reason: the
|
||||
chain-pigeonhole does real structural work. Either resolution would
|
||||
be informative.
|
||||
|
||||
\section*{What's next}
|
||||
|
||||
\begin{enumerate}
|
||||
\item \textbf{Test the absorption conjecture directly.} Take a
|
||||
tire $T_n = (m=3, k)$ for varying $k$ and check whether its
|
||||
$\sigma_U$-projection equals exactly the $6$ permutations of
|
||||
$\{1,2,3\}$. This is a single-tire computation, fast.
|
||||
\item \textbf{Exhaustive chain enumeration.} The $10$ tested
|
||||
chains are representative but not exhaustive. Generate all
|
||||
valid PDS-shape chains of bounded length (e.g., $\leq 8$
|
||||
tires, $\leq 12$ max cycle size) and run forward propagation
|
||||
on each. Any chain where state collapses to $\emptyset$
|
||||
before $T_n$, or where the final $L_n$ state misses some
|
||||
permutation, would be a real counterexample.
|
||||
\item \textbf{Connect to PDS in actual $G$.} Verify that for an
|
||||
internally $6$-connected $G$, every PDS from any source gives
|
||||
a chain with the right SR structure (item 2). This is the
|
||||
outstanding gap to make the analysis genuinely a 4CT
|
||||
argument.
|
||||
\item \textbf{Symbolic proof of absorption.} If
|
||||
Conjecture~\ref{conj:absorption-local} holds, prove it by
|
||||
direct cycle-coloring analysis: any proper edge $3$-colouring
|
||||
of $C_{m+k}$ (with $m=3$) restricted to $3$ spread positions
|
||||
is a permutation. This should be elementary.
|
||||
\end{enumerate}
|
||||
|
||||
\section*{Caveats}
|
||||
|
||||
\begin{itemize}
|
||||
\item ``Outer triangle absorption'' is a name I have given to the
|
||||
observed phenomenon; it is not yet a theorem.
|
||||
\item The $10$ tested chains are hand-picked. An exhaustive
|
||||
enumeration is warranted before claiming strong evidence.
|
||||
\item The SR-is-correct claim (item 2 above) is the load-bearing
|
||||
modelling assumption. It is not yet verified in the
|
||||
literature in the form I am stating; tying this back to
|
||||
actual PDS+G structure is the most important remaining gap.
|
||||
\item The reflection-handling in
|
||||
\texttt{sr\_closed\_chain.py} picks the orientation that
|
||||
maximises forward state at each step. In a real $G$ with a
|
||||
fixed embedding, the orientations are determined, and the
|
||||
worst-of-orientations might differ from the best-of. This
|
||||
is unlikely to matter under saturation but is worth checking.
|
||||
\end{itemize}
|
||||
|
||||
\end{document}
|
||||
Reference in New Issue
Block a user