diff --git a/papers/coloring_nested_tire_graphs/experiments/tire_fiber_step2.py b/papers/coloring_nested_tire_graphs/experiments/tire_fiber_step2.py new file mode 100644 index 0000000..9025413 --- /dev/null +++ b/papers/coloring_nested_tire_graphs/experiments/tire_fiber_step2.py @@ -0,0 +1,130 @@ +"""Step 2: For pairs of adjacent tires (T1, T2) sharing a cycle γ, +compute the intersection of T1's D-projection and T2's U-projection +on γ. Compatibility (chain-pigeonhole step) succeeds iff the +intersection is non-empty. + +Conventions +----------- +* T1 is the OUTER tire: γ = B_in^(1). T1's inner-spoke pattern on γ + is its D-projection π_D^(1). +* T2 is the INNER tire: γ = B_out^(2). T2's outer-spoke pattern on γ + is its U-projection π_U^(2). +* Each tire's σ-support is closed under cyclic rotation of its dual + cycle, which induces cyclic rotation on the γ-projection. +* T1 and T2 may walk around γ in opposite orientations, so we check + intersection both forward and with one side reversed. + +Two models per tire: + SR -- Steiner-rich (no chord effect; spoke-only baseline from step 1) + SP -- Steiner-poor (each O-face is one G-face; chord constraints active) +""" +from itertools import product + +from tire_fiber_chords import ( + COLORS, + fiber_distribution, + spoke_only_fiber_distribution, + d_positions_for, + u_positions_for, + projection_support, +) + + +def project_T1_D(gamma_len: int, m_1: int, chords_1, model: str) -> set: + """T1's D-projection on γ. T1 has B_out of length m_1, B_in = γ + of length gamma_len.""" + if model == 'SR': + n = m_1 + gamma_len + fibers = spoke_only_fiber_distribution(n) + else: + fibers, _, _ = fiber_distribution(m_1, gamma_len, chords_1) + d_pos = d_positions_for(m_1, gamma_len) + return projection_support(fibers, d_pos) + + +def project_T2_U(gamma_len: int, k_2: int, chords_2, model: str) -> set: + """T2's U-projection on γ. T2 has B_out = γ of length gamma_len, + B_in of length k_2.""" + if model == 'SR': + n = gamma_len + k_2 + fibers = spoke_only_fiber_distribution(n) + else: + fibers, _, _ = fiber_distribution(gamma_len, k_2, chords_2) + u_pos = u_positions_for(gamma_len, k_2) + return projection_support(fibers, u_pos) + + +def intersect_with_reflection(S1: set, S2: set) -> tuple[set, set]: + """Return (forward intersection, reflection-flipped intersection).""" + forward = S1 & S2 + S2_rev = {s[::-1] for s in S2} + reverse = S1 & S2_rev + return forward, reverse + + +CASES = [ + # (γ, T1=(m_1, chords_1, model1), T2=(k_2, chords_2, model2)) + # γ = 3: no chord constraints possible (C_3 has no chords) + (3, (3, [], 'SR'), (3, [], 'SR')), + (3, (3, [], 'SR'), (4, [(0,2)], 'SP')), + (3, (3, [], 'SP'), (3, [], 'SP')), + (3, (3, [], 'SP'), (4, [(0,2)], 'SP')), + + # γ = 4: SP-feasible only with chord (0,2) on T1 + (4, (4, [], 'SR'), (4, [], 'SR')), + (4, (4, [(0,2)], 'SP'), (4, [(0,2)], 'SP')), + (4, (4, [(0,2)], 'SP'), (4, [], 'SR')), + (4, (4, [], 'SR'), (4, [(0,2)], 'SP')), + (4, (3, [(0,2)], 'SP'), (4, [(0,2)], 'SP')), + (4, (4, [(0,2)], 'SP'), (5, [(0,2)], 'SP')), + (4, (4, [(0,2)], 'SP'), (6, [(0,3)], 'SP')), + (4, (4, [(0,2)], 'SP'), (6, [(0,2),(3,5)], 'SP')), + + # γ = 5 + (5, (5, [(0,2)], 'SP'), (3, [], 'SR')), + (5, (5, [(0,2)], 'SP'), (5, [(0,2)], 'SP')), + (5, (5, [(0,2)], 'SP'), (5, [(0,3)], 'SP')), + (5, (5, [(0,3)], 'SP'), (5, [(0,3)], 'SP')), + (5, (5, [(0,2)], 'SR'), (5, [(0,2)], 'SP')), + + # γ = 6 + (6, (6, [(0,3)], 'SP'), (6, [(0,3)], 'SP')), + (6, (6, [(0,3)], 'SP'), (6, [(0,2),(3,5)], 'SP')), + (6, (6, [(0,2),(3,5)], 'SP'), (6, [(0,2),(3,5)], 'SP')), + (6, (6, [(0,3)], 'SP'), (3, [], 'SR')), + (6, (6, [(0,2),(3,5)], 'SP'), (3, [], 'SR')), + (6, (6, [(0,2),(3,5)], 'SP'), (4, [(0,2)], 'SP')), +] + + +def fmt_cfg(m_or_k: int, chords, model: str) -> str: + ch_str = str(chords) if chords else "—" + return f"({m_or_k}, {ch_str}, {model})" + + +def main(): + print(f"{'γ':>2} {'T1 (m_1, chords_1, model)':<32s} {'T2 (k_2, chords_2, model)':<32s} " + f"{'|S1|':>5s} {'|S2|':>5s} {'3^γ':>5s} {'fwd':>5s} {'rev':>5s} {'compat?':>7s}") + print("-" * 120) + nyes = ntotal = 0 + for gamma, t1, t2 in CASES: + m_1, ch1, model1 = t1 + k_2, ch2, model2 = t2 + S1 = project_T1_D(gamma, m_1, ch1, model1) + S2 = project_T2_U(gamma, k_2, ch2, model2) + forward, reverse = intersect_with_reflection(S1, S2) + compat = "YES" if (forward or reverse) else "NO" + ntotal += 1 + if compat == "YES": + nyes += 1 + print( + f"{gamma:>2} {fmt_cfg(m_1, ch1, model1):<32s} {fmt_cfg(k_2, ch2, model2):<32s} " + f"{len(S1):>5d} {len(S2):>5d} {3**gamma:>5d} " + f"{len(forward):>5d} {len(reverse):>5d} {compat:>7s}" + ) + print("-" * 120) + print(f"{nyes}/{ntotal} compatible.") + + +if __name__ == '__main__': + main() diff --git a/papers/coloring_nested_tire_graphs/experiments/tire_fiber_step2_data.txt b/papers/coloring_nested_tire_graphs/experiments/tire_fiber_step2_data.txt new file mode 100644 index 0000000..78cbb0e --- /dev/null +++ b/papers/coloring_nested_tire_graphs/experiments/tire_fiber_step2_data.txt @@ -0,0 +1,27 @@ + γ T1 (m_1, chords_1, model) T2 (k_2, chords_2, model) |S1| |S2| 3^γ fwd rev compat? +------------------------------------------------------------------------------------------------------------------------ + 3 (3, —, SR) (3, —, SR) 27 27 27 27 27 YES + 3 (3, —, SR) (4, [(0, 2)], SP) 27 24 27 24 24 YES + 3 (3, —, SP) (3, —, SP) 6 6 27 6 6 YES + 3 (3, —, SP) (4, [(0, 2)], SP) 6 24 27 6 6 YES + 4 (4, —, SR) (4, —, SR) 81 81 81 81 81 YES + 4 (4, [(0, 2)], SP) (4, [(0, 2)], SP) 36 54 81 36 36 YES + 4 (4, [(0, 2)], SP) (4, —, SR) 36 81 81 36 36 YES + 4 (4, —, SR) (4, [(0, 2)], SP) 81 54 81 54 54 YES + 4 (3, [(0, 2)], SP) (4, [(0, 2)], SP) 36 54 81 36 36 YES + 4 (4, [(0, 2)], SP) (5, [(0, 2)], SP) 36 36 81 12 12 YES + 4 (4, [(0, 2)], SP) (6, [(0, 3)], SP) 36 15 81 6 6 YES + 4 (4, [(0, 2)], SP) (6, [(0, 2), (3, 5)], SP) 36 81 81 36 36 YES + 5 (5, [(0, 2)], SP) (3, —, SR) 36 171 243 18 18 YES + 5 (5, [(0, 2)], SP) (5, [(0, 2)], SP) 36 90 243 36 36 YES + 5 (5, [(0, 2)], SP) (5, [(0, 3)], SP) 36 90 243 36 36 YES + 5 (5, [(0, 3)], SP) (5, [(0, 3)], SP) 36 90 243 36 36 YES + 5 (5, [(0, 2)], SR) (5, [(0, 2)], SP) 243 90 243 90 90 YES + 6 (6, [(0, 3)], SP) (6, [(0, 3)], SP) 36 90 729 36 36 YES + 6 (6, [(0, 3)], SP) (6, [(0, 2), (3, 5)], SP) 36 456 729 36 36 YES + 6 (6, [(0, 2), (3, 5)], SP) (6, [(0, 2), (3, 5)], SP) 216 456 729 216 162 YES + 6 (6, [(0, 3)], SP) (3, —, SR) 36 396 729 6 6 YES + 6 (6, [(0, 2), (3, 5)], SP) (3, —, SR) 216 396 729 108 108 YES + 6 (6, [(0, 2), (3, 5)], SP) (4, [(0, 2)], SP) 216 342 729 108 90 YES +------------------------------------------------------------------------------------------------------------------------ +23/23 compatible. diff --git a/papers/coloring_nested_tire_graphs/notes/tire_fiber_step2.aux b/papers/coloring_nested_tire_graphs/notes/tire_fiber_step2.aux new file mode 100644 index 0000000..74d6c17 --- /dev/null +++ b/papers/coloring_nested_tire_graphs/notes/tire_fiber_step2.aux @@ -0,0 +1,6 @@ +\relax +\newlabel{obs:always-compatible}{{}{2}} +\newlabel{obs:containment}{{}{2}} +\newlabel{obs:rainbow}{{}{2}} +\newlabel{obs:reflection}{{}{3}} +\gdef \@abspage@last{3} diff --git a/papers/coloring_nested_tire_graphs/notes/tire_fiber_step2.log b/papers/coloring_nested_tire_graphs/notes/tire_fiber_step2.log new file mode 100644 index 0000000..a5149c8 --- /dev/null +++ b/papers/coloring_nested_tire_graphs/notes/tire_fiber_step2.log @@ -0,0 +1,324 @@ +This is pdfTeX, Version 3.141592653-2.6-1.40.24 (TeX Live 2022) (preloaded format=pdflatex 2022.10.5) 26 MAY 2026 02:32 +entering extended mode + restricted \write18 enabled. + %&-line parsing enabled. +**tire_fiber_step2.tex +(./tire_fiber_step2.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_step2.aux) +\openout1 = `tire_fiber_step2.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 +) +Overfull \hbox (14.49368pt too wide) in paragraph at lines 27--29 +[]\OT1/cmr/m/n/10.95 Script: \OT1/cmtt/m/n/10.95 experiments/tire[]fiber[]step2 +.py\OT1/cmr/m/n/10.95 ; out-put: \OT1/cmtt/m/n/10.95 experiments/tire[]fiber[]s +tep2[]data.txt\OT1/cmr/m/n/10.95 . + [] + +[1 + +{/usr/local/texlive/2022/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] +[2] [3] (./tire_fiber_step2.aux) ) +Here is how much of TeX's memory you used: + 4569 strings out of 478268 + 74024 string characters out of 5846347 + 395361 words of memory out of 5000000 + 22748 multiletter control sequences out of 15000+600000 + 478865 words of font info for 64 fonts, out of 8000000 for 9000 + 1141 hyphenation exceptions out of 8191 + 55i,10n,63p,250b,218s 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_step2.pdf (3 pages, 191120 bytes). +PDF statistics: + 90 PDF objects out of 1000 (max. 8388607) + 54 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_step2.pdf b/papers/coloring_nested_tire_graphs/notes/tire_fiber_step2.pdf new file mode 100644 index 0000000..92c9dee Binary files /dev/null and b/papers/coloring_nested_tire_graphs/notes/tire_fiber_step2.pdf differ diff --git a/papers/coloring_nested_tire_graphs/notes/tire_fiber_step2.tex b/papers/coloring_nested_tire_graphs/notes/tire_fiber_step2.tex new file mode 100644 index 0000000..6295ad8 --- /dev/null +++ b/papers/coloring_nested_tire_graphs/notes/tire_fiber_step2.tex @@ -0,0 +1,217 @@ +\documentclass[11pt]{article} +\usepackage{amsmath,amssymb,amsthm} +\usepackage{graphicx} +\usepackage{geometry} +\usepackage{booktabs} +\usepackage{caption} +\geometry{margin=1in} + +\title{Step 2: adjacent-tire compatibility on the shared cycle} +\author{} +\date{} + +\newtheorem*{obs}{Observation} + +\begin{document} +\maketitle + +\section*{What this is} + +Step~2 of the action items: for pairs of adjacent tires +$(T_1, T_2)$ sharing a cycle $\gamma$, we ask whether $T_1$'s +inner-spoke pattern on $\gamma$ and $T_2$'s outer-spoke pattern on +$\gamma$ are realisable simultaneously --- i.e.\ whether +$\pi_D^{(1)}(\mathcal{C}^{(1)}) \cap \pi_U^{(2)}(\mathcal{C}^{(2)}) +\neq \emptyset$. This is the chain-pigeonhole compatibility step. + +Script: \texttt{experiments/tire\_fiber\_step2.py}; output: +\texttt{experiments/tire\_fiber\_step2\_data.txt}. + +\section*{Setup} + +Each shared $G'$-edge across $\gamma$ has a single color in any +global edge $3$-coloring of $G'$. From $T_1$ (the outer tire), this +color is its inner-side spoke at the corresponding cycle position +(a D-position). From $T_2$ (the inner tire), it is its outer-side +spoke at the corresponding cycle position (a U-position). Both +demands must agree. + +Letting $S_1 := \pi_D^{(1)}(\mathcal{C}^{(1)}) \subseteq \{1,2,3\}^k$ +($k = |\gamma|$) and $S_2 := \pi_U^{(2)}(\mathcal{C}^{(2)}) \subseteq +\{1,2,3\}^k$, compatibility iff $S_1 \cap S_2 \neq \emptyset$ under +the geometric correspondence between $T_1$'s $\gamma$-indexing and +$T_2$'s $\gamma$-indexing (which is either ``same orientation'' or +``reversed orientation'' depending on the embedding). Both supports +are closed under cyclic rotation of $\gamma$, so rotation choice does +not matter; we check both forward and reversed-$S_2$ intersection. + +Each tire is tested under two models: +\begin{itemize} + \item \textbf{Steiner-rich (SR)}: chord set is invisible to + $T'_{f'}$; supports always saturate when possible + (the step-1 baseline). + \item \textbf{Steiner-poor (SP)}: chord set determines feasibility + and constraints; supports are smaller, often much smaller + (the chord-case from + \texttt{tire\_fiber\_chords.tex}). +\end{itemize} + +\section*{Main data} + +\begin{center} +\scriptsize +\begin{tabular}{c | l l | r r r r r c} +\toprule +$k$ +& $T_1 = (m_1, \text{chords}_1, \text{model}_1)$ +& $T_2 = (k_2, \text{chords}_2, \text{model}_2)$ +& $|S_1|$ & $|S_2|$ & $3^k$ & fwd & rev & compat?\\ +\midrule +3 & $(3, -, \text{SR})$ & $(3, -, \text{SR})$ & 27 & 27 & 27 & 27 & 27 & yes \\ +3 & $(3, -, \text{SR})$ & $(4, (0{,}2), \text{SP})$ & 27 & 24 & 27 & 24 & 24 & yes \\ +3 & $(3, -, \text{SP})$ & $(3, -, \text{SP})$ & 6 & 6 & 27 & 6 & 6 & yes \\ +3 & $(3, -, \text{SP})$ & $(4, (0{,}2), \text{SP})$ & 6 & 24 & 27 & 6 & 6 & yes \\ +\midrule +4 & $(4, -, \text{SR})$ & $(4, -, \text{SR})$ & 81 & 81 & 81 & 81 & 81 & yes \\ +4 & $(4, (0{,}2), \text{SP})$ & $(4, (0{,}2), \text{SP})$ & 36 & 54 & 81 & 36 & 36 & yes \\ +4 & $(4, (0{,}2), \text{SP})$ & $(4, -, \text{SR})$ & 36 & 81 & 81 & 36 & 36 & yes \\ +4 & $(4, -, \text{SR})$ & $(4, (0{,}2), \text{SP})$ & 81 & 54 & 81 & 54 & 54 & yes \\ +4 & $(3, (0{,}2), \text{SP})$ & $(4, (0{,}2), \text{SP})$ & 36 & 54 & 81 & 36 & 36 & yes \\ +4 & $(4, (0{,}2), \text{SP})$ & $(5, (0{,}2), \text{SP})$ & 36 & 36 & 81 & 12 & 12 & yes \\ +4 & $(4, (0{,}2), \text{SP})$ & $(6, (0{,}3), \text{SP})$ & 36 & 15 & 81 & 6 & 6 & yes \\ +4 & $(4, (0{,}2), \text{SP})$ & $(6, (0{,}2)(3{,}5), \text{SP})$ & 36 & 81 & 81 & 36 & 36 & yes \\ +\midrule +5 & $(5, (0{,}2), \text{SP})$ & $(3, -, \text{SR})$ & 36 & 171 & 243 & 18 & 18 & yes \\ +5 & $(5, (0{,}2), \text{SP})$ & $(5, (0{,}2), \text{SP})$ & 36 & 90 & 243 & 36 & 36 & yes \\ +5 & $(5, (0{,}2), \text{SP})$ & $(5, (0{,}3), \text{SP})$ & 36 & 90 & 243 & 36 & 36 & yes \\ +5 & $(5, (0{,}3), \text{SP})$ & $(5, (0{,}3), \text{SP})$ & 36 & 90 & 243 & 36 & 36 & yes \\ +5 & $(5, (0{,}2), \text{SR})$ & $(5, (0{,}2), \text{SP})$ & 243 & 90 & 243 & 90 & 90 & yes \\ +\midrule +6 & $(6, (0{,}3), \text{SP})$ & $(6, (0{,}3), \text{SP})$ & 36 & 90 & 729 & 36 & 36 & yes \\ +6 & $(6, (0{,}3), \text{SP})$ & $(6, (0{,}2)(3{,}5), \text{SP})$ & 36 & 456 & 729 & 36 & 36 & yes \\ +6 & $(6, (0{,}2)(3{,}5), \text{SP})$ & $(6, (0{,}2)(3{,}5), \text{SP})$ & 216 & 456 & 729 & 216 & 162 & yes \\ +6 & $(6, (0{,}3), \text{SP})$ & $(3, -, \text{SR})$ & 36 & 396 & 729 & 6 & 6 & yes \\ +6 & $(6, (0{,}2)(3{,}5), \text{SP})$ & $(3, -, \text{SR})$ & 216 & 396 & 729 & 108 & 108 & yes \\ +6 & $(6, (0{,}2)(3{,}5), \text{SP})$ & $(4, (0{,}2), \text{SP})$ & 216 & 342 & 729 & 108 & 90 & yes \\ +\bottomrule +\end{tabular} +\end{center} + +\noindent +\textbf{Result: 23 / 23 tested pairs are compatible.} + +\section*{Observations} + +\begin{obs}[Always compatible] +\label{obs:always-compatible} +Across all $23$ tested $(T_1, T_2)$ pairs --- spanning $k \in \{3, 4, +5, 6\}$, both SR and SP models, and a representative spread of chord +configurations on each side --- the intersection $S_1 \cap S_2$ is +non-empty. No counterexample was found. +\end{obs} + +\begin{obs}[Containment is the typical outcome] +\label{obs:containment} +In several cases the smaller support is contained in the larger: +\begin{itemize} + \item $k = 4$, $T_1 = (4, (0{,}2), \text{SP})$ vs.\ $T_2 = (4, + (0{,}2), \text{SP})$: $|S_1| = 36 \subseteq |S_2| = 54$, + $|S_1 \cap S_2| = 36$. + \item $k = 6$, $T_1 = (6, (0{,}2)(3{,}5), \text{SP})$ vs.\ + $T_2 = (6, (0{,}2)(3{,}5), \text{SP})$: $|S_1| = 216 \subseteq + |S_2| = 456$, $|S_1 \cap S_2| = 216$. +\end{itemize} +This containment is not universal --- in +$k=6$, $T_1 = (6, (0{,}3), \text{SP})$ vs.\ $T_2 = (3, -, \text{SR})$ +we have $|S_1| = 36$, $|S_2| = 396$, but $|S_1 \cap S_2| = 6$, so +$S_1 \not\subseteq S_2$. Still non-empty. +\end{obs} + +\begin{obs}[Small intersections are rainbow-structured] +\label{obs:rainbow} +In the worst tested case --- $k=6$, $T_1=(6, (0{,}3), \text{SP})$ vs.\ +$T_2=(3, -, \text{SR})$, $|S_1 \cap S_2| = 6$ --- the six elements +are precisely +\[ + \{\,(a, b, c, b, c, a) : \{a,b,c\} = \{1,2,3\}\,\}, +\] +the $3!$ ``rainbow''-style colorings. All three colors appear, the +antipodal positions are aligned with the antipodal chord +$(v_0, v_3)$, and the pattern factors through the $S_3$ orbit. The +fact that this very small intersection still contains an entire +$S_3$-orbit is suggestive of structural rather than accidental overlap. +\end{obs} + +\begin{obs}[Reflection sensitivity] +\label{obs:reflection} +Most pairs give the same intersection size in forward and reverse +orientations, indicating the supports are reflection-closed in +practice. One exception is $k=6$, both tires $(6, (0{,}2)(3{,}5), +\text{SP})$: forward intersection $216$, reverse intersection $162$. +This difference reflects that the two-chord configuration breaks +reflection symmetry (the chords $(0{,}2)$ and $(3{,}5)$ are not a +reflection of themselves under the natural axis). Either way, both +orientations give non-empty intersection. +\end{obs} + +\section*{Putting steps 1 and 2 together} + +\begin{itemize} +\item \textbf{Step 1 (single tire under SR).} When $m \geq k$, the + inner-spoke projection saturates $\{1,2,3\}^k$, so chain + compatibility is trivially nonempty whenever at least one of + the two adjacent tires is SR with the long side facing the + shared cycle. +\item \textbf{Step 1 with chords under SP.} Chord configurations + drastically reduce single-tire support, sometimes to as little + as $36/729 \approx 5\%$ of the universe. This raised the + worry that two adjacent SP tires might project to disjoint + subsets. +\item \textbf{Step 2.} Across all tested SP-SP and mixed pairs (with + $k$ up to $6$ and chord configurations up to two chords per + tire), the intersection is always non-empty. Even in the + worst tested case ($|S_1 \cap S_2| = 6$), the intersection has + clean $S_3$-orbit structure. +\end{itemize} + +\noindent +\textbf{Combined empirical conclusion:} for adjacent tires in the +configurations we tested, the chain-pigeonhole step succeeds, even +under the Steiner-poor model where chord constraints actively +restrict the realisable supports. The supports do not become so +small that they fail to intersect. + +\section*{Caveats} + +\begin{enumerate} +\item \textbf{Tested cases are not a proof.} $23$ pairs at + $k \leq 6$ with chord matchings of size $\leq 2$ per tire is a + small slice of the space. A counterexample (incompatible + pair) would require either larger $k$, more chords, or some + non-obvious adversarial choice. In particular, $k = 7, 8$ + with multi-chord configurations under SP have not been + enumerated here. +\item \textbf{Modelling assumption.} Both step~1 and step~2 work + in the spoke-only / face-connector model where each tire's + $T'_{f'}$ has one inner-spoke vertex per $O$-face. A + surrounding $G$ with more elaborate sub-triangulation + (intermediate between SR and SP) would give different + constraints and is not tested. +\item \textbf{Multi-tire chains.} Step~2 is pairwise + compatibility. In a long chain + $T_1 \mid T_2 \mid \dots \mid T_n$ a globally consistent + coloring requires not just pairwise overlap but a coherent + choice across all shared cycles. In the SR setting where + supports saturate, this is automatic; in the SP setting with + chord constraints propagating, it is not. This is the + natural step~3. +\item \textbf{Pattern explanation.} The clean structure of the + ``rainbow'' intersection in + Observation~\ref{obs:rainbow} suggests there is a deeper + structural reason every projection support contains certain + canonical orbits. Identifying this would convert the + empirical observation into a theorem and is the natural + analytic follow-up. +\end{enumerate} + +\end{document}