diff --git a/papers/coloring_nested_tire_graphs/experiments/tire_fiber_chords.py b/papers/coloring_nested_tire_graphs/experiments/tire_fiber_chords.py new file mode 100644 index 0000000..b1e2de0 --- /dev/null +++ b/papers/coloring_nested_tire_graphs/experiments/tire_fiber_chords.py @@ -0,0 +1,191 @@ +"""Investigate fiber distributions when the inner outerplanar graph O +has non-trivial chords. + +A chord in O does NOT change the dual annular cycle T'_ann (which is +still C_{m+k}). What it changes is the inside-O face structure: with +j non-crossing chords, O has j+1 inside-O faces. Each face f dualizes +to a single vertex u_f in G', whose degree in T'_{f'} equals the +number of B_in edges on the boundary of f. + +Concretely: if a face f contains B_in edges e_{a_1}, ..., e_{a_d}, +then u_f is incident in T'_{f'} to the d D-triangle positions +p_{a_1}, ..., p_{a_d} on the dual cycle (one per B_in edge). Proper +edge 3-coloring at u_f requires those d spoke colors to be pairwise +distinct. + +Feasibility constraint: at k=3 colors, a face with d > 3 incident +B_in edges has no proper edge 3-coloring of u_f, so the tire admits +no global coloring. All examples below satisfy d <= 3 per face. +""" +from collections import Counter +from itertools import product + +COLORS = (1, 2, 3) + + +def d_positions_for(m: int, k: int) -> list[int]: + """Return cycle positions of D-triangles on the dual cycle C_{m+k} + for a balanced (Bresenham-style) alternating triangulation, in + the cyclic order matching B_in edges e_0, e_1, ..., e_{k-1}.""" + n = m + k + return [round(i * n / k) % n for i in range(k)] + + +def compute_faces_from_chords(k: int, chords: list[tuple[int, int]]) -> list[list[int]]: + """Compute face partition of B_in = C_k cut by non-crossing chords. + + Each face is returned as a list of B_in edge indices belonging to + it. For non-crossing chords: edge e_a belongs to the smallest + enclosing chord-arc, where chord (i, j) with i < j encloses e_a + iff i <= a < j. Edges not enclosed by any chord belong to the + 'outermost' face.""" + chords_norm = [tuple(sorted([a, b])) for (a, b) in chords] + + def enclosing_chord(edge: int): + candidates = [(j - i, i, j) for (i, j) in chords_norm if i <= edge < j] + if not candidates: + return None + candidates.sort() + _, i, j = candidates[0] + return (i, j) + + chord_to_face = {} + next_face = 0 + edge_to_face = {} + for a in range(k): + ch = enclosing_chord(a) + if ch not in chord_to_face: + chord_to_face[ch] = next_face + next_face += 1 + edge_to_face[a] = chord_to_face[ch] + + faces = [[] for _ in range(next_face)] + for a in range(k): + faces[edge_to_face[a]].append(a) + return faces + + +def fiber_distribution(m: int, k: int, chords: list[tuple[int, int]]): + """Compute fiber distribution N(T'_{f'}; σ) over σ ∈ {1,2,3}^n for + the tire with given m, k, and chord set in O. + + Returns (fibers, d_positions, faces_as_cycle_positions). + """ + n = m + k + d_positions = d_positions_for(m, k) + o_faces = compute_faces_from_chords(k, chords) + d_positions_by_face = [ + [d_positions[a] for a in face_edges] + for face_edges in o_faces + ] + + fibers: Counter[tuple[int, ...]] = Counter() + for ce in product(COLORS, repeat=n): + if not all(ce[i] != ce[(i + 1) % n] for i in range(n)): + continue + sigma = tuple( + ({1, 2, 3} - {ce[(i - 1) % n], ce[i]}).pop() + for i in range(n) + ) + ok = True + for positions in d_positions_by_face: + colors = [sigma[p] for p in positions] + if len(set(colors)) != len(colors): + ok = False + break + if ok: + fibers[sigma] += 1 + return fibers, d_positions, d_positions_by_face + + +def projection_support(fibers, positions: list[int]) -> set[tuple[int, ...]]: + return {tuple(sigma[p] for p in positions) for sigma in fibers} + + +CASES = [ + # (m, k, chords, label) + (4, 4, [], "(4,4) no chord [baseline]"), + (4, 4, [(0, 2)], "(4,4) chord (0,2) faces 2+2"), + (5, 5, [], "(5,5) no chord [baseline]"), + (5, 5, [(0, 2)], "(5,5) chord (0,2) faces 2+3"), + (5, 5, [(0, 3)], "(5,5) chord (0,3) faces 3+2"), + (6, 6, [], "(6,6) no chord [baseline]"), + (6, 6, [(0, 3)], "(6,6) chord (0,3) antipodal faces 3+3"), + (6, 6, [(0, 2), (3, 5)], "(6,6) chords (0,2)(3,5) faces 2+2+2"), + # k=4 with smaller outer cycle: + (3, 4, [], "(3,4) no chord"), + (3, 4, [(0, 2)], "(3,4) chord (0,2)"), + # larger n for k=4: + (6, 4, [], "(6,4) no chord"), + (6, 4, [(0, 2)], "(6,4) chord (0,2)"), +] + + +def u_positions_for(m: int, k: int) -> list[int]: + """U-positions (outer-spoke cycle positions) = complement of D-positions.""" + n = m + k + d = set(d_positions_for(m, k)) + return [p for p in range(n) if p not in d] + + +def spoke_only_fiber_distribution(n: int): + """Step-1 baseline: G_n = C_n + n independent pendants (Steiner-rich, + each B_in edge gets its own inside-O sub-triangle). No chord + constraints; every σ that comes from a proper cycle 3-coloring is + realisable.""" + fibers: Counter[tuple[int, ...]] = Counter() + for ce in product(COLORS, repeat=n): + if not all(ce[i] != ce[(i + 1) % n] for i in range(n)): + continue + sigma = tuple( + ({1, 2, 3} - {ce[(i - 1) % n], ce[i]}).pop() + for i in range(n) + ) + fibers[sigma] += 1 + return dict(fibers) + + +def main(): + print("Two models compared per (m, k, chord-set):") + print(" STEINER-RICH: G triangulates each O-face using internal Steiner vertices,") + print(" so each B_in edge dualizes to its own (degree-1) inside-O triangle.") + print(" Chord set has NO effect on T'_{f'}; equivalent to step-1 baseline.") + print(" STEINER-POOR: G does NOT further sub-triangulate O-faces beyond O itself.") + print(" Each O-face becomes one G-face with degree = (B_in-edge count).") + print(" Edge-3-colorable only if every O-face has ≤ 3 B_in edges.") + print() + print(f"{'case':<42s} {'n':>3s} " + f"{'P_e SR':>7s} {'D SR':>7s} {'U SR':>7s} | " + f"{'P_e SP':>7s} {'D SP':>7s} {'U SP':>7s} | " + f"faces (cycle-position groups)") + print("-" * 145) + for m, k, chords, label in CASES: + n = m + k + # Steiner-poor (with chord-induced constraints): + fibers_sp, d_pos, faces_cp = fiber_distribution(m, k, chords) + u_pos = u_positions_for(m, k) + pe_sp = sum(fibers_sp.values()) + d_proj_sp = projection_support(fibers_sp, d_pos) + u_proj_sp = projection_support(fibers_sp, u_pos) + + # Steiner-rich baseline (chord-set ignored): + fibers_sr = spoke_only_fiber_distribution(n) + pe_sr = sum(fibers_sr.values()) + d_proj_sr = projection_support(fibers_sr, d_pos) + u_proj_sr = projection_support(fibers_sr, u_pos) + + d_uni = 3 ** k + u_uni = 3 ** m + faces_str = " | ".join( + "{" + ",".join(map(str, sorted(f))) + "}" for f in faces_cp + ) + print( + f"{label:<42s} {n:>3d} " + f"{pe_sr:>7d} {len(d_proj_sr):>3d}/{d_uni:<3d} {len(u_proj_sr):>3d}/{u_uni:<3d} | " + f"{pe_sp:>7d} {len(d_proj_sp):>3d}/{d_uni:<3d} {len(u_proj_sp):>3d}/{u_uni:<3d} | " + f"{faces_str}" + ) + + +if __name__ == '__main__': + main() diff --git a/papers/coloring_nested_tire_graphs/experiments/tire_fiber_chords_data.txt b/papers/coloring_nested_tire_graphs/experiments/tire_fiber_chords_data.txt new file mode 100644 index 0000000..c35d402 --- /dev/null +++ b/papers/coloring_nested_tire_graphs/experiments/tire_fiber_chords_data.txt @@ -0,0 +1,22 @@ +Two models compared per (m, k, chord-set): + STEINER-RICH: G triangulates each O-face using internal Steiner vertices, + so each B_in edge dualizes to its own (degree-1) inside-O triangle. + Chord set has NO effect on T'_{f'}; equivalent to step-1 baseline. + STEINER-POOR: G does NOT further sub-triangulate O-faces beyond O itself. + Each O-face becomes one G-face with degree = (B_in-edge count). + Edge-3-colorable only if every O-face has ≤ 3 B_in edges. + +case n P_e SR D SR U SR | P_e SP D SP U SP | faces (cycle-position groups) +------------------------------------------------------------------------------------------------------------------------------------------------- +(4,4) no chord [baseline] 8 258 81/81 81/81 | 0 0/81 0/81 | {0,2,4,6} +(4,4) chord (0,2) faces 2+2 8 258 81/81 81/81 | 144 36/81 54/81 | {0,2} | {4,6} +(5,5) no chord [baseline] 10 1026 243/243 243/243 | 0 0/243 0/243 | {0,2,4,6,8} +(5,5) chord (0,2) faces 2+3 10 1026 243/243 243/243 | 240 36/243 90/243 | {0,2} | {4,6,8} +(5,5) chord (0,3) faces 3+2 10 1026 243/243 243/243 | 240 36/243 90/243 | {0,2,4} | {6,8} +(6,6) no chord [baseline] 12 4098 729/729 729/729 | 0 0/729 0/729 | {0,2,4,6,8,10} +(6,6) chord (0,3) antipodal faces 3+3 12 4098 729/729 729/729 | 408 36/729 90/729 | {0,2,4} | {6,8,10} +(6,6) chords (0,2)(3,5) faces 2+2+2 12 4098 729/729 729/729 | 1536 216/729 456/729 | {0,2} | {4,10} | {6,8} +(3,4) no chord 7 126 78/81 27/27 | 0 0/81 0/27 | {0,2,4,5} +(3,4) chord (0,2) 7 126 78/81 27/27 | 48 36/81 24/27 | {0,2} | {4,5} +(6,4) no chord 10 1026 81/81 549/729 | 0 0/81 0/729 | {0,2,5,8} +(6,4) chord (0,2) 10 1026 81/81 549/729 | 480 36/81 342/729 | {0,2} | {5,8} diff --git a/papers/coloring_nested_tire_graphs/notes/tire_fiber_chords.aux b/papers/coloring_nested_tire_graphs/notes/tire_fiber_chords.aux new file mode 100644 index 0000000..516ad95 --- /dev/null +++ b/papers/coloring_nested_tire_graphs/notes/tire_fiber_chords.aux @@ -0,0 +1,7 @@ +\relax +\newlabel{obs:sp-empty}{{}{2}} +\newlabel{obs:more-chords-more-support}{{}{2}} +\newlabel{obs:pi-D-m-independent}{{}{2}} +\newlabel{obs:u-shrinks}{{}{2}} +\newlabel{obs:sp-chord-rule}{{}{3}} +\gdef \@abspage@last{3} diff --git a/papers/coloring_nested_tire_graphs/notes/tire_fiber_chords.log b/papers/coloring_nested_tire_graphs/notes/tire_fiber_chords.log new file mode 100644 index 0000000..7441c64 --- /dev/null +++ b/papers/coloring_nested_tire_graphs/notes/tire_fiber_chords.log @@ -0,0 +1,320 @@ +This is pdfTeX, Version 3.141592653-2.6-1.40.24 (TeX Live 2022) (preloaded format=pdflatex 2022.10.5) 26 MAY 2026 02:09 +entering extended mode + restricted \write18 enabled. + %&-line parsing enabled. +**tire_fiber_chords.tex +(./tire_fiber_chords.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/booktabs/booktabs.sty +Package: booktabs 2020/01/12 v1.61803398 Publication quality tables +\heavyrulewidth=\dimen158 +\lightrulewidth=\dimen159 +\cmidrulewidth=\dimen160 +\belowrulesep=\dimen161 +\belowbottomsep=\dimen162 +\aboverulesep=\dimen163 +\abovetopsep=\dimen164 +\cmidrulesep=\dimen165 +\cmidrulekern=\dimen166 +\defaultaddspace=\dimen167 +\@cmidla=\count274 +\@cmidlb=\count275 +\@aboverulesep=\dimen168 +\@belowrulesep=\dimen169 +\@thisruleclass=\count276 +\@lastruleclass=\count277 +\@thisrulewidth=\dimen170 +) +(/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=\dimen171 +\captionmargin=\dimen172 +\caption@leftmargin=\dimen173 +\caption@rightmargin=\dimen174 +\caption@width=\dimen175 +\caption@indent=\dimen176 +\caption@parindent=\dimen177 +\caption@hangindent=\dimen178 +Package caption Info: Standard document class detected. +) +\c@caption@flags=\count278 +\c@continuedfloat=\count279 +) +(/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=\count280 +\l__pdf_internal_box=\box52 +) +(./tire_fiber_chords.aux) +\openout1 = `tire_fiber_chords.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 15. +LaTeX Font Info: ... okay on input line 15. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 15. +LaTeX Font Info: ... okay on input line 15. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 15. +LaTeX Font Info: ... okay on input line 15. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 15. +LaTeX Font Info: ... okay on input line 15. +LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 15. +LaTeX Font Info: ... okay on input line 15. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 15. +LaTeX Font Info: ... okay on input line 15. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 15. +LaTeX Font Info: ... okay on input line 15. + +(/usr/local/texlive/2022/texmf-dist/tex/context/base/mkii/supp-pdf.mkii +[Loading MPS to PDF converter (version 2006.09.02).] +\scratchcounter=\count281 +\scratchdimen=\dimen179 +\scratchbox=\box53 +\nofMPsegments=\count282 +\nofMParguments=\count283 +\everyMPshowfont=\toks29 +\MPscratchCnt=\count284 +\MPscratchDim=\dimen180 +\MPnumerator=\count285 +\makeMPintoPDFobject=\count286 +\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: +* layout: +* 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 16. + +(/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 16. + + +(/usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/umsb.fd +File: umsb.fd 2013/01/14 v3.01 AMS symbols B +) [1 + +{/usr/local/texlive/2022/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] [2] [3] + +(./tire_fiber_chords.aux) ) +Here is how much of TeX's memory you used: + 4578 strings out of 478268 + 74199 string characters out of 5846347 + 381378 words of memory out of 5000000 + 22757 multiletter control sequences out of 15000+600000 + 480794 words of font info for 72 fonts, out of 8000000 for 9000 + 1141 hyphenation exceptions out of 8191 + 55i,8n,63p,251b,262s stack positions out of 10000i,1000n,20000p,200000b,200000s +{/usr/local/texlive/2022/texmf-dist/fonts/enc/dvips/ +cm-super/cm-super-ts1.enc} +Output written on tire_fiber_chords.pdf (3 pages, 212866 bytes). +PDF statistics: + 100 PDF objects out of 1000 (max. 8388607) + 60 compressed objects within 1 object stream + 0 named destinations out of 1000 (max. 500000) + 1 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/papers/coloring_nested_tire_graphs/notes/tire_fiber_chords.pdf b/papers/coloring_nested_tire_graphs/notes/tire_fiber_chords.pdf new file mode 100644 index 0000000..5ee0bd9 Binary files /dev/null and b/papers/coloring_nested_tire_graphs/notes/tire_fiber_chords.pdf differ diff --git a/papers/coloring_nested_tire_graphs/notes/tire_fiber_chords.tex b/papers/coloring_nested_tire_graphs/notes/tire_fiber_chords.tex new file mode 100644 index 0000000..2d802bd --- /dev/null +++ b/papers/coloring_nested_tire_graphs/notes/tire_fiber_chords.tex @@ -0,0 +1,230 @@ +\documentclass[11pt]{article} +\usepackage{amsmath,amssymb,amsthm} +\usepackage{graphicx} +\usepackage{geometry} +\usepackage{booktabs} +\usepackage{caption} +\geometry{margin=1in} + +\title{Fiber distributions for tire face connectors with chords in $O$} +\author{} +\date{} + +\newtheorem*{obs}{Observation} + +\begin{document} +\maketitle + +\section*{What this is} + +A companion to \texttt{tire\_fiber\_data.tex}: that note enumerated +fiber distributions in the spoke-only setting (no chords in the inner +outerplanar graph $O$). This note investigates what happens when $O$ +has chords --- specifically when the surrounding $G$ does \emph{not} +introduce Steiner vertices inside $B_{\mathrm{in}}$, so that each face +of $O$ in the tire's embedding remains a single face of $G$. +Script: \texttt{experiments/tire\_fiber\_chords.py}. Output: +\texttt{experiments/tire\_fiber\_chords\_data.txt}. + +\section*{The modelling choice that chords force on us} + +In the spoke-only enumeration (\texttt{tire\_fiber\_data.tex}) the +inner-spoke part of $T'_{f'}$ was simply $k$ pendant edges, one per +$B_{\mathrm{in}}$ edge. That picture corresponds to a surrounding +maximal planar graph $G$ that \emph{aggressively triangulates} the +disk inside $B_{\mathrm{in}}$ using interior (Steiner) vertices not in +$V(T)$, so each $B_{\mathrm{in}}$ edge gets its own dedicated inside-$O$ +sub-triangle. + +When we add chords to $O$, there is a second axis of choice: does $G$ +sub-triangulate the resulting $O$-faces, or not? Two extreme models: + +\begin{itemize} + \item \textbf{Steiner-rich (SR).} $G$ adds whatever vertices and + edges it needs inside each $O$-face so that every + $B_{\mathrm{in}}$ edge has its own sub-triangle. The + inner-spoke graph is $k$ pendants \emph{regardless of the + chord set} --- chords are invisible to $T'_{f'}$. This is the + step-1 baseline. + \item \textbf{Steiner-poor (SP).} $G$ does not further + sub-triangulate $O$-faces beyond what $O$ itself provides. + Each face of $O$ becomes a single face of $G$, whose dual + vertex has degree (in $G'$, and hence in $T'_{f'}$) equal to + the number of $B_{\mathrm{in}}$ edges on the face boundary. + Edge $3$-colourable only if \emph{every $O$-face has at most + $3$ $B_{\mathrm{in}}$ edges}. +\end{itemize} + +Real surrounding triangulations $G$ live somewhere between these two, +and the choice is not part of the tire structure itself --- it is a +property of how $G$ embeds the tire. But the two extremes already +say something useful about chord effects. + +\section*{Side-by-side data} + +\begin{center} +\scriptsize +\begin{tabular}{l r | r r r | r r r} +\toprule +& & \multicolumn{3}{c|}{\textbf{Steiner-rich}} + & \multicolumn{3}{c}{\textbf{Steiner-poor}}\\ +case & $n$ & $P_e$ & $|\pi_D(\mathcal{C})|/3^k$ & $|\pi_U(\mathcal{C})|/3^m$ + & $P_e$ & $|\pi_D(\mathcal{C})|/3^k$ & $|\pi_U(\mathcal{C})|/3^m$ \\ +\midrule +(4,4) no chord & 8 & 258 & 81/81 & 81/81 & 0 & 0/81 & 0/81 \\ +(4,4) chord (0,2), faces 2+2 & 8 & 258 & 81/81 & 81/81 & 144 & 36/81 & 54/81 \\ +(5,5) no chord & 10 & 1026 & 243/243 & 243/243 & 0 & 0/243 & 0/243 \\ +(5,5) chord (0,2), faces 2+3 & 10 & 1026 & 243/243 & 243/243 & 240 & 36/243 & 90/243 \\ +(5,5) chord (0,3), faces 3+2 & 10 & 1026 & 243/243 & 243/243 & 240 & 36/243 & 90/243 \\ +(6,6) no chord & 12 & 4098 & 729/729 & 729/729 & 0 & 0/729 & 0/729 \\ +(6,6) chord (0,3) antipodal, 3+3 & 12 & 4098 & 729/729 & 729/729 & 408 & 36/729 & 90/729 \\ +(6,6) chords (0,2)(3,5), 2+2+2 & 12 & 4098 & 729/729 & 729/729 & 1536 & 216/729 & 456/729 \\ +(3,4) no chord & 7 & 126 & 78/81 & 27/27 & 0 & 0/81 & 0/27 \\ +(3,4) chord (0,2) & 7 & 126 & 78/81 & 27/27 & 48 & 36/81 & 24/27 \\ +(6,4) no chord & 10 & 1026 & 81/81 & 549/729 & 0 & 0/81 & 0/729 \\ +(6,4) chord (0,2) & 10 & 1026 & 81/81 & 549/729 & 480 & 36/81 & 342/729 \\ +\bottomrule +\end{tabular} +\end{center} + +\noindent +($\pi_D$ projects $\sigma$ onto the $k$ inner-direction spoke positions +on the dual cycle; $\pi_U$ onto the $m$ outer-direction positions. +``Chord (a,b)'' means $O = B_{\mathrm{in}} \cup \{v_a v_b\}$.) + +\section*{Observations} + +\begin{obs}[SP is empty without chords for $k > 3$] +\label{obs:sp-empty} +If $O$ has no chord and $k \geq 4$, then $O$ has a single inner face +with $k$ incident $B_{\mathrm{in}}$ edges. Under SP this is a single +$G'$-vertex of degree $k$, and proper edge $3$-colouring needs $k$ +distinct colours at that vertex, which is impossible for $k \geq 4$. +\textbf{So the SP model forces chords once $k \geq 4$}: tires whose +inner boundary is longer than $3$ are only feasible if $O$ already +contains enough chords to break every face down to $\leq 3$ +$B_{\mathrm{in}}$ edges. +\end{obs} + +\noindent +This is the structural reason chord-aware modelling matters. Under +SR, you can pretend chord sets do not exist; under SP, you cannot. + +\begin{obs}[Adding chords \emph{enlarges} the SP support] +\label{obs:more-chords-more-support} +Comparing the two $(6,6)$ chord rows: +\begin{itemize} + \item Antipodal $(0,3)$ chord: face sizes $3{+}3$, gives + $P_e = 408$, $\pi_D$ support $36/729 \approx 4.9\%$. + \item Two chords $(0,2),(3,5)$: face sizes $2{+}2{+}2$, gives + $P_e = 1536$, $\pi_D$ support $216/729 \approx 29.6\%$. +\end{itemize} +Smaller faces $=$ weaker constraints $=$ more realisable +configurations. This is the opposite of what one might expect at +first glance (``more chords $=$ more edges $=$ more constraints'') --- +each chord splits a hard constraint into easier ones. +\end{obs} + +\begin{obs}[$\pi_D$ support depends only on chord structure, not on $m$] +\label{obs:pi-D-m-independent} +For chord set $\{(0,2)\}$ in $k = 4$, the $\pi_D$ support is +$36/81 = 4/9$ for every tested $m \in \{3, 4, 6\}$. This is structural: +the chord constraint pins down which spoke-quadruples are realisable +without involving the outer cycle at all. The $\pi_U$ support, by +contrast, varies with $m$. +\end{obs} + +\begin{obs}[SP support shrinks the $\pi_U$ support too] +\label{obs:u-shrinks} +Even though chord constraints live on the inner side, they propagate +to the outer side via the cycle. For $(m, k) = (4, 4)$: +\begin{itemize} + \item SR: $\pi_U$ saturates $3^4$. + \item SP with chord $(0,2)$: $\pi_U = 54/81 = 2/3$. +\end{itemize} +The chord-induced constraints on D-position spokes propagate around +the cycle through the proper-edge-colouring constraint, reducing the +set of cycle colourings, hence reducing $\pi_U$ as well. +\end{obs} + +\section*{Implications for the chain-pigeonhole step} + +In the spoke-only / SR step-1 analysis we observed that whenever +$|B_{\mathrm{out}}| \geq |B_{\mathrm{in}}|$ the inner-side projection +saturates the full ring-coloring universe $3^k$, so chain +compatibility on a shared cycle was trivially nonempty whenever at +least one of the two adjacent tires had the longer non-shared +boundary. + +Under SP this clean saturation breaks down on the chord side: + +\begin{itemize} + \item For a chorded tire, $\pi_D$ never reaches $3^k$ --- the + chord constraints permanently rule out some inner-spoke + configurations. The realisable set is small but non-empty + (e.g., $36/81$ at $k = 4$). + \item The shrinkage is the same regardless of $m$ on the inner + (D) side, so making the outer boundary very long does + \emph{not} help recover saturation on the chord side. + \item Two adjacent SP tires sharing a cycle $\gamma$ both have + shrunk projections; whether they intersect is now a real + question. E.g., projecting $\pi_D$ down to a $4/9$-fraction + of $\{1,2,3\}^k$ from each side: do the two $4/9$-sets always + meet? +\end{itemize} + +\noindent +That last question is the natural follow-up experiment (and is +step~2 of the action items). + +\subsection*{The structural fact worth stating} + +\begin{obs}[Steiner-poor chord-rule] +\label{obs:sp-chord-rule} +Under the SP model, a tire $T$ is edge-$3$-colourable on its face +connector $T'_{f'}$ iff its inner outerplanar graph $O$ \emph{already +triangulates the inside of $B_{\mathrm{in}}$ up to faces of $B_{\mathrm{in}}$- +size $\leq 3$}. Equivalently: $O$ must contain enough chords that +every $O$-face has at most $3$ $B_{\mathrm{in}}$ edges on its boundary. +\end{obs} + +\noindent +For a level-source BFS decomposition with $O$ chosen minimally (just +$B_{\mathrm{in}}$ itself, no chords), every tire with $k \geq 4$ fails +the SP edge-$3$-colouring test \emph{locally}. Globally this is no +contradiction --- the surrounding maximal planar $G$ does add Steiner +vertices and edges inside $B_{\mathrm{in}}$, making us closer to SR +than to SP. But the SP model is a worst-case envelope on what +purely local data implies, and shows that any structural argument that +ignores the inside-$B_{\mathrm{in}}$ triangulation is incomplete. + +\section*{Caveats / what we did not compute} + +\begin{enumerate} + \item \textbf{Only the two extremes.} Real $G$ triangulations lie + between SR (every $B_{\mathrm{in}}$ edge gets its own + Steiner-sub-triangle) and SP (no further sub-triangulation + at all). Intermediate cases (e.g., fan-triangulating one + $O$-face from a $V(B_{\mathrm{in}})$ vertex without adding + Steiner points) are not enumerated here, though the data + suggests they sit between. + \item \textbf{Outer side always SR.} We have always treated the + outer side ($B_{\mathrm{out}}$) as having no chord-induced + structure --- $B_{\mathrm{out}}$ is just a cycle in the tire + definition, so this is correct, but the analogous question + ``what if the region outside $B_{\mathrm{out}}$ is poorly + triangulated'' is not addressed. + \item \textbf{$\Delta \leq 3$ on $O$ ignored.} The chord + configurations tested above include cases where chord + endpoints have higher degree in $T$; the menagerie's + $\Delta \leq 3$ constraint is not enforced. This is fine + for the SP model in isolation but matters when composing + with the menagerie counting formulas. + \item \textbf{Adjacency intersection (step 2).} We have only + computed single-tire fiber distributions. The chain- + pigeonhole step itself --- intersecting $\pi_D$ of one tire + with $\pi_U$ of the adjacent tire on a shared cycle --- is + deferred. +\end{enumerate} + +\end{document}