diff --git a/papers/coloring_nested_tire_graphs/notes/draw_fiber_c4_example.py b/papers/coloring_nested_tire_graphs/notes/draw_fiber_c4_example.py new file mode 100644 index 0000000..06540e8 --- /dev/null +++ b/papers/coloring_nested_tire_graphs/notes/draw_fiber_c4_example.py @@ -0,0 +1,162 @@ +"""Worked example for fiber_decomposition.tex. +Three panels: C_4 with 4 pendant spokes, showing + (a) sigma = (1,1,1,1) -- fiber count 2 (two alternating cycle colorings). + (b) sigma = (1,2,1,2) -- infeasible, fiber count 0. + (c) sigma = (1,1,2,2) -- fiber count 1 (unique extension). +""" +import math +import os +import matplotlib.pyplot as plt +from itertools import product + + +COLORS = { + 1: '#d62728', # red + 2: '#1f77b4', # blue + 3: '#2ca02c', # green +} +COLOR_NAMES = {1: 'red', 2: 'blue', 3: 'green'} + + +def square_pos(scale=1.0): + # v_0 right, v_1 top, v_2 left, v_3 bottom -- a square + return { + 0: (scale, 0), + 1: (0, scale), + 2: (-scale, 0), + 3: (0, -scale), + } + + +def ext_pos(scale=1.0, radial=1.9): + pos = square_pos(scale) + out = {} + for v, (x, y) in pos.items(): + nx, ny = x / math.hypot(x, y), y / math.hypot(x, y) + out[v] = (radial * nx, radial * ny) + return out + + +def enumerate_fiber(sigma): + """Brute-force: enumerate all cycle-edge colorings (c_e0, c_e1, c_e2, c_e3) + in [3]^4 satisfying: + proper edge coloring at each v_i (its three incident edges all distinct) + and the pendant at v_i is sigma[i]. + e_i goes from v_i to v_{i+1}. v_i is incident to e_{i-1} (mod 4) and e_i. + Returns the list of valid (c_e0, c_e1, c_e2, c_e3) tuples. + """ + valid = [] + for ce in product([1, 2, 3], repeat=4): + ok = True + for i in range(4): + ep = ce[(i - 1) % 4] + en = ce[i] + s = sigma[i] + if len({ep, en, s}) != 3: + ok = False + break + if ok: + valid.append(ce) + return valid + + +def draw_panel(ax, sigma, title): + pos = square_pos() + ext = ext_pos() + # Cycle edges (drawn light first, overdrawn in colored if there is a unique + # extension; if there are multiple extensions show grey-with-letters) + fiber = enumerate_fiber(sigma) + + # Cycle edges: e_i from v_i to v_{i+1} + for i in range(4): + u, v = i, (i + 1) % 4 + x1, y1 = pos[u]; x2, y2 = pos[v] + if len(fiber) == 1: + ax.plot([x1, x2], [y1, y2], color=COLORS[fiber[0][i]], + linewidth=4.0, zorder=1) + elif len(fiber) >= 2: + # show all extensions as parallel offset lines + colors_for_edge = sorted({f[i] for f in fiber}) + n = len(colors_for_edge) + # tangent perpendicular to edge + dx, dy = x2 - x1, y2 - y1 + ln = math.hypot(dx, dy) + px, py = -dy / ln, dx / ln # unit normal + spacing = 0.08 + offsets = [(j - (n - 1) / 2) * spacing for j in range(n)] + for off, c in zip(offsets, colors_for_edge): + ax.plot([x1 + off * px, x2 + off * px], + [y1 + off * py, y2 + off * py], + color=COLORS[c], linewidth=3.0, zorder=1) + else: + # infeasible: dashed grey + ax.plot([x1, x2], [y1, y2], color='#bbbbbb', linewidth=2.5, + linestyle=(0, (4, 3)), zorder=1) + + # Spoke edges: solid in sigma's color + for i in range(4): + x1, y1 = pos[i]; x2, y2 = ext[i] + ax.plot([x1, x2], [y1, y2], color=COLORS[sigma[i]], linewidth=4.0, + zorder=1) + + # Cycle vertices + for v, (x, y) in pos.items(): + ax.plot(x, y, 'o', color='#1f3f70', markersize=18, zorder=2) + ax.annotate(f"$v_{v}$", (x, y), color='white', ha='center', + va='center', fontsize=10, fontweight='bold', zorder=3) + # Spoke vertices + for v, (x, y) in ext.items(): + ax.plot(x, y, 's', color='#666666', markersize=15, zorder=2) + ax.annotate(f"$u_{v}$", (x, y), color='white', ha='center', + va='center', fontsize=8, fontweight='bold', zorder=3) + + # Subtitle with fiber count + n = len(fiber) + status = (f"$N(\\sigma) = {n}$ " + + ("(infeasible)" if n == 0 + else "(unique extension)" if n == 1 + else "(multiple extensions, shown as parallel strands)")) + ax.set_xlim(-2.5, 2.5) + ax.set_ylim(-2.5, 2.5) + ax.set_aspect('equal') + ax.axis('off') + ax.set_title(title + "\n" + status, fontsize=10) + + +def main(): + here = os.path.dirname(os.path.abspath(__file__)) + out = os.path.join(here, 'fig_fiber_c4_example.png') + fig, axes = plt.subplots(1, 3, figsize=(13.5, 5.0)) + + draw_panel(axes[0], (1, 1, 1, 1), + r"$\sigma = (1,1,1,1)$ (all spokes red)") + draw_panel(axes[1], (1, 2, 1, 2), + r"$\sigma = (1,2,1,2)$ (alternating)") + draw_panel(axes[2], (1, 1, 2, 2), + r"$\sigma = (1,1,2,2)$") + + # legend + legend_items = [ + plt.Line2D([], [], color=COLORS[1], lw=3, + label='color 1 (red)'), + plt.Line2D([], [], color=COLORS[2], lw=3, + label='color 2 (blue)'), + plt.Line2D([], [], color=COLORS[3], lw=3, + label='color 3 (green)'), + ] + fig.legend(handles=legend_items, loc='lower center', ncol=3, + frameon=False, fontsize=10, bbox_to_anchor=(0.5, -0.02)) + plt.tight_layout() + plt.savefig(out, dpi=160, bbox_inches='tight') + plt.close() + print(f"wrote {out}") + + # Also print the actual enumeration so we know our claims in the .tex + # match the brute-force counts. + for sigma in [(1, 1, 1, 1), (1, 2, 1, 2), (1, 1, 2, 2)]: + f = enumerate_fiber(sigma) + print(f"sigma = {sigma}: {len(f)} extensions: {f}") + + +if __name__ == '__main__': + main() diff --git a/papers/coloring_nested_tire_graphs/notes/draw_fiber_setup.py b/papers/coloring_nested_tire_graphs/notes/draw_fiber_setup.py new file mode 100644 index 0000000..2f00f9f --- /dev/null +++ b/papers/coloring_nested_tire_graphs/notes/draw_fiber_setup.py @@ -0,0 +1,99 @@ +"""Two-panel figure for fiber_decomposition.tex: +LEFT -- the core T'_ann = theta(1,3,3) alone (what menagerie sec.6 counts). +RIGHT -- the face connector T'_{f'} = core + 4 spoke pendants (what we want).""" +import math +import os +import matplotlib.pyplot as plt + + +def hex_pos(scale=1.0): + pos = {} + for i in range(6): + angle = math.pi / 2 - 2 * math.pi * i / 6 + pos[i] = (scale * math.cos(angle), scale * math.sin(angle)) + return pos + + +def ext_pos(scale=1.0, radial=1.8): + pos = hex_pos(scale) + ext = {} + for v in (1, 2, 4, 5): + x, y = pos[v] + nx, ny = x / math.hypot(x, y), y / math.hypot(x, y) + ext[v] = (radial * nx, radial * ny) + return ext + + +CYCLE_EDGES = [(i, (i + 1) % 6) for i in range(6)] +CHORD = (0, 3) + + +def draw_core(ax): + pos = hex_pos() + # cycle + for u, v in CYCLE_EDGES: + x1, y1 = pos[u]; x2, y2 = pos[v] + ax.plot([x1, x2], [y1, y2], color='#1f3f70', linewidth=3.0, zorder=1) + # chord + x1, y1 = pos[CHORD[0]]; x2, y2 = pos[CHORD[1]] + ax.plot([x1, x2], [y1, y2], color='#1f3f70', linewidth=3.0, + linestyle=(0, (3, 2)), zorder=1) + # vertices + for v, (x, y) in pos.items(): + ax.plot(x, y, 'o', color='#1f3f70', markersize=16, zorder=2) + ax.annotate(f"$v_{v}$", (x, y), color='white', ha='center', + va='center', fontsize=9, fontweight='bold', zorder=3) + ax.set_xlim(-2.2, 2.2) + ax.set_ylim(-2.2, 2.2) + ax.set_aspect('equal'); ax.axis('off') + ax.set_title(r"Core $T'_{\mathrm{ann}} = \theta(1,3,3)$" + "\n" + + r"(menagerie \S6 counts this)", fontsize=10) + + +def draw_connector(ax): + pos = hex_pos() + ext = ext_pos() + # core (kept dark blue) + for u, v in CYCLE_EDGES: + x1, y1 = pos[u]; x2, y2 = pos[v] + ax.plot([x1, x2], [y1, y2], color='#1f3f70', linewidth=3.0, zorder=1) + x1, y1 = pos[CHORD[0]]; x2, y2 = pos[CHORD[1]] + ax.plot([x1, x2], [y1, y2], color='#1f3f70', linewidth=3.0, + linestyle=(0, (3, 2)), zorder=1) + # spoke edges (orange to stand out) + for v in (1, 2, 4, 5): + x1, y1 = pos[v]; x2, y2 = ext[v] + ax.plot([x1, x2], [y1, y2], color='#e08000', linewidth=3.0, zorder=1) + # cycle vertices + for v, (x, y) in pos.items(): + ax.plot(x, y, 'o', color='#1f3f70', markersize=16, zorder=2) + ax.annotate(f"$v_{v}$", (x, y), color='white', ha='center', + va='center', fontsize=9, fontweight='bold', zorder=3) + # spoke vertices + for v in (1, 2, 4, 5): + x, y = ext[v] + ax.plot(x, y, 's', color='#e08000', markersize=14, zorder=2) + ax.annotate(f"$u_{v}$", (x, y), color='white', ha='center', + va='center', fontsize=8, fontweight='bold', zorder=3) + ax.set_xlim(-2.4, 2.4) + ax.set_ylim(-2.4, 2.4) + ax.set_aspect('equal'); ax.axis('off') + ax.set_title(r"Connector $T'_{f'}$ = core + 4 spoke pendants" + "\n" + + r"(spoke edges in orange; this is what we actually want)", + fontsize=10) + + +def main(): + here = os.path.dirname(os.path.abspath(__file__)) + out = os.path.join(here, 'fig_fiber_setup.png') + fig, axes = plt.subplots(1, 2, figsize=(11.0, 5.0)) + draw_core(axes[0]) + draw_connector(axes[1]) + plt.tight_layout() + plt.savefig(out, dpi=160, bbox_inches='tight') + plt.close() + print(f"wrote {out}") + + +if __name__ == '__main__': + main() diff --git a/papers/coloring_nested_tire_graphs/notes/draw_nesting_compatibility.py b/papers/coloring_nested_tire_graphs/notes/draw_nesting_compatibility.py new file mode 100644 index 0000000..23be156 --- /dev/null +++ b/papers/coloring_nested_tire_graphs/notes/draw_nesting_compatibility.py @@ -0,0 +1,155 @@ +"""Two-tire nesting picture for fiber_decomposition.tex. + +We draw two concentric annuli (the outer tire and inner tire) sharing +a common cycle gamma in the middle. Each annulus is triangulated, and +each triangular face has a dual vertex. The shared cycle gamma carries +dual vertices that are annular for both tires; for one vertex v on gamma +we highlight the single G'-edge that crosses the shared cycle -- the +'spoke' edge that is an outer spoke of the inner tire and an inner spoke +of the outer tire simultaneously.""" +import math +import os +import matplotlib.pyplot as plt +import matplotlib.patches as patches + + +def main(): + here = os.path.dirname(os.path.abspath(__file__)) + out = os.path.join(here, 'fig_nesting_compatibility.png') + + fig, ax = plt.subplots(figsize=(9.0, 7.5)) + + # Three radii: outer boundary of outer tire, shared cycle gamma, inner boundary + R_OUT = 3.0 + R_GAMMA = 2.0 + R_IN = 1.0 + + n = 8 # number of vertices on each cycle (just for the picture) + + def ring(R): + return [(R * math.cos(2 * math.pi * i / n + math.pi / 2), + R * math.sin(2 * math.pi * i / n + math.pi / 2)) + for i in range(n)] + + out_pts = ring(R_OUT) + gamma_pts = ring(R_GAMMA) + in_pts = ring(R_IN) + + # Light shaded annular regions + outer_annulus = patches.Wedge((0, 0), R_OUT, 0, 360, width=R_OUT - R_GAMMA, + facecolor='#e6f0ff', edgecolor='none', zorder=0) + inner_annulus = patches.Wedge((0, 0), R_GAMMA, 0, 360, width=R_GAMMA - R_IN, + facecolor='#fff2e0', edgecolor='none', zorder=0) + ax.add_patch(outer_annulus) + ax.add_patch(inner_annulus) + + # Cycles + for pts, color in [(out_pts, '#333'), (gamma_pts, '#1f3f70'), (in_pts, '#333')]: + for i in range(n): + x1, y1 = pts[i]; x2, y2 = pts[(i + 1) % n] + ax.plot([x1, x2], [y1, y2], color=color, linewidth=2.0, zorder=1) + + # Triangulate each annulus (simple zig-zag) + for ring_a, ring_b in [(out_pts, gamma_pts), (gamma_pts, in_pts)]: + for i in range(n): + x1, y1 = ring_a[i]; x2, y2 = ring_b[i] + ax.plot([x1, x2], [y1, y2], color='#999', linewidth=0.8, zorder=1) + x3, y3 = ring_b[(i + 1) % n] + ax.plot([x1, x2], [y1, y2], color='#999', linewidth=0.8, zorder=1) + ax.plot([ring_a[i][0], ring_b[(i + 1) % n][0]], + [ring_a[i][1], ring_b[(i + 1) % n][1]], + color='#999', linewidth=0.8, zorder=1) + + # Cycle vertices on gamma + for (x, y) in gamma_pts: + ax.plot(x, y, 'o', color='#1f3f70', markersize=7, zorder=2) + + # Pick a focal vertex v on gamma and draw the local G'-picture: + # the two annular faces of the outer tire incident to v give the + # cycle edges of T'^outer_ann at v, the two annular faces of the + # inner tire incident to v give the cycle edges of T'^inner_ann at v, + # and the single 'crossing' G'-edge at v ... well, in the spoke-only + # case the dual vertex at v has degree 3 in G' and one of those edges + # crosses gamma. + # + # For the picture we mark the dual vertex at v with a small star and + # draw its three G'-edges in distinct colors. + v_idx = 0 + vx, vy = gamma_pts[v_idx] + # We draw a dual vertex slightly offset (since v on gamma is a *vertex* + # of G, not a dual; really we want to mark an annular face dual on each + # side of gamma). Skip the dual-vertex picture and instead just + # highlight the shared cycle gamma and one focal vertex v with arrows + # pointing to its outer- and inner-tire roles. + + ax.plot(vx, vy, 'o', color='#d62728', markersize=14, zorder=3) + ax.annotate("$v \\in V(\\gamma)$", (vx, vy), xytext=(vx + 0.8, vy + 0.3), + fontsize=11, color='#d62728', + arrowprops=dict(arrowstyle='->', color='#d62728', lw=1.2)) + + # The 'shared spoke' for v: in the spoke-only Remark 1.16.1 picture, + # T^outer_ann's cycle near v carries one G'-edge crossing inward + # (to a face inside gamma == an inner spoke of T^outer_{f'}), and + # T^inner_ann's cycle near v carries one G'-edge crossing outward + # (to a face outside gamma == an outer spoke of T^inner_{f'}). + # In the spoke-only case these are the SAME G'-edge. + # + # Draw it as a heavy orange line crossing gamma at v. + r_outer_face = (R_GAMMA + R_OUT) / 2 # mid-radius of outer annulus + r_inner_face = (R_GAMMA + R_IN) / 2 # mid-radius of inner annulus + theta = math.pi / 2 # vertex 0 is at the top + px_out = r_outer_face * math.cos(theta) + py_out = r_outer_face * math.sin(theta) + px_in = r_inner_face * math.cos(theta) + py_in = r_inner_face * math.sin(theta) + ax.plot([px_out, px_in], [py_out, py_in], color='#e08000', linewidth=4.0, + zorder=2) + ax.plot(px_out, py_out, 's', color='#e08000', markersize=14, zorder=3) + ax.plot(px_in, py_in, 's', color='#e08000', markersize=14, zorder=3) + ax.annotate("outer-tire\nannular face $f$", + (px_out, py_out), xytext=(2.4, 2.6), fontsize=9, + color='#a05000', + arrowprops=dict(arrowstyle='->', color='#a05000', lw=1.0)) + ax.annotate("inner-tire\nannular face $f'$", + (px_in, py_in), xytext=(1.5, 0.6), fontsize=9, + color='#a05000', + arrowprops=dict(arrowstyle='->', color='#a05000', lw=1.0)) + ax.annotate("shared $G'$-edge at $v$\n(spoke from both sides)", + ((px_out + px_in) / 2, (py_out + py_in) / 2), + xytext=(-3.6, 1.8), fontsize=10, color='#e08000', + arrowprops=dict(arrowstyle='->', color='#e08000', lw=1.2)) + + # Label the cycles + ax.text(0, R_OUT + 0.25, r"$B_{\mathrm{out}}$ of outer tire", + ha='center', fontsize=9, color='#333') + ax.text(0, -R_IN - 0.35, r"$B_{\mathrm{in}}$ of inner tire", + ha='center', fontsize=9, color='#333') + ax.text(-R_GAMMA - 0.45, 0, r"$\gamma$", ha='right', va='center', + fontsize=14, color='#1f3f70', fontweight='bold') + + # Region labels + ax.text(0, (R_OUT + R_GAMMA) / 2 + 0.1, "outer tire", + ha='center', fontsize=10, color='#1f3f70', + bbox=dict(boxstyle='round,pad=0.3', facecolor='white', + edgecolor='none', alpha=0.7)) + ax.text(0, -(R_GAMMA + R_IN) / 2 - 0.1, "inner tire", + ha='center', fontsize=10, color='#a05000', + bbox=dict(boxstyle='round,pad=0.3', facecolor='white', + edgecolor='none', alpha=0.7)) + + ax.set_xlim(-4.2, 4.2) + ax.set_ylim(-4.2, 4.2) + ax.set_aspect('equal') + ax.axis('off') + ax.set_title("Nested tires sharing cycle $\\gamma$:\n" + "the spoke from $v \\in V(\\gamma)$ is shared between " + "$T'^{\\mathrm{outer}}_{f'}$ and $T'^{\\mathrm{inner}}_{f'}$", + fontsize=11) + + plt.savefig(out, dpi=160, bbox_inches='tight') + plt.close() + print(f"wrote {out}") + + +if __name__ == '__main__': + main() diff --git a/papers/coloring_nested_tire_graphs/notes/fiber_decomposition.aux b/papers/coloring_nested_tire_graphs/notes/fiber_decomposition.aux new file mode 100644 index 0000000..5f96c21 --- /dev/null +++ b/papers/coloring_nested_tire_graphs/notes/fiber_decomposition.aux @@ -0,0 +1,14 @@ +\relax +\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Anatomy of a tire annular face connector $T'_{f'}$ in the spoke-only case. \textbf {Left:} the core $T'_{\mathrm {ann}} = C_n + M$ (here $\theta (1,3,3)$), the object the menagerie \S 6 formula counts. \textbf {Right:} $T'_{f'}$ adds one pendant spoke edge for each non-chord boundary vertex; the spoke vertex is a dual vertex of a face of $G$ \emph {outside} the tire annulus. In a nested-tire setting, that outside face belongs to the next tire over.\relax }}{1}{}\protected@file@percent } +\providecommand*\caption@xref[2]{\@setref\relax\@undefined{#1}} +\newlabel{fig:fiber-setup}{{1}{1}} +\@writefile{toc}{\contentsline {paragraph}{What the fiber count really is.}{2}{}\protected@file@percent } +\@writefile{toc}{\contentsline {paragraph}{Special case: $E_S = \emptyset $.}{2}{}\protected@file@percent } +\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Three spoke configurations $\sigma $ on $C_4$ with four pendant spokes, with cycle vertices labelled $v_0, v_1, v_2, v_3$ and spoke vertices $u_0, u_1, u_2, u_3$. \textbf {Left:} the constant configuration $\sigma = (1,1,1,1)$ (all spokes red) is realisable with fiber count $N(\sigma ) = 2$ --- the cycle alternates between the two remaining colors in two ways. \textbf {Middle:} the alternating configuration $\sigma = (1,2,1,2)$ is \emph {infeasible} ($N(\sigma ) = 0$); the constraints at $v_0$ and $v_1$ force $c(e_0) = 3$, but the constraint at $v_2$ then demands $c(e_1) \in \{2, 3\} \setminus \{c(e_0)\}$ contradicting the $v_1$ constraint. \textbf {Right:} the non-uniform configuration $\sigma = (1,1,2,2)$ has fiber count $N(\sigma ) = 1$ --- a single cycle coloring extends it.\relax }}{3}{}\protected@file@percent } +\newlabel{fig:fiber-c4}{{2}{3}} +\@writefile{toc}{\contentsline {paragraph}{Total count.}{3}{}\protected@file@percent } +\@writefile{toc}{\contentsline {paragraph}{Distribution over $\sigma $.}{3}{}\protected@file@percent } +\@writefile{toc}{\contentsline {paragraph}{Where this leads.}{4}{}\protected@file@percent } +\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces Two adjacent tires $T^{\mathrm {outer}}, T^{\mathrm {inner}}$ in a common maximal planar $G$, sharing the cycle $\gamma $. The cycle vertex $v \in V(\gamma )$ is a dual vertex for an annular face in \emph {both} tires. The $G'$-edges at $v$ split into: two cycle edges inside $T'^{\mathrm {outer}}_{\mathrm {ann}}$, two cycle edges inside $T'^{\mathrm {inner}}_{\mathrm {ann}}$, and (in the spoke-only case) \emph {one shared spoke edge} $vu$ pointing across the shared boundary. That single spoke edge is simultaneously a spoke of $T'^{\mathrm {outer}}_{f'}$ and a spoke of $T'^{\mathrm {inner}}_{f'}$, so any global edge coloring of $G'$ assigns it a single color from both sides at once.\relax }}{5}{}\protected@file@percent } +\newlabel{fig:nesting-compatibility}{{3}{5}} +\gdef \@abspage@last{5} diff --git a/papers/coloring_nested_tire_graphs/notes/fiber_decomposition.log b/papers/coloring_nested_tire_graphs/notes/fiber_decomposition.log new file mode 100644 index 0000000..c85ea3f --- /dev/null +++ b/papers/coloring_nested_tire_graphs/notes/fiber_decomposition.log @@ -0,0 +1,331 @@ +This is pdfTeX, Version 3.141592653-2.6-1.40.24 (TeX Live 2022) (preloaded format=pdflatex 2022.10.5) 26 MAY 2026 00:03 +entering extended mode + restricted \write18 enabled. + %&-line parsing enabled. +**fiber_decomposition.tex +(./fiber_decomposition.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/caption/subcaption.sty +Package: subcaption 2022/01/07 v1.5 Sub-captions (AR) +\c@subfigure=\count276 +\c@subtable=\count277 +) +(/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=\count278 +\l__pdf_internal_box=\box52 +) +(./fiber_decomposition.aux) +\openout1 = `fiber_decomposition.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 17. +LaTeX Font Info: ... okay on input line 17. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 17. +LaTeX Font Info: ... okay on input line 17. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 17. +LaTeX Font Info: ... okay on input line 17. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 17. +LaTeX Font Info: ... okay on input line 17. +LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 17. +LaTeX Font Info: ... okay on input line 17. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 17. +LaTeX Font Info: ... okay on input line 17. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 17. +LaTeX Font Info: ... okay on input line 17. + +(/usr/local/texlive/2022/texmf-dist/tex/context/base/mkii/supp-pdf.mkii +[Loading MPS to PDF converter (version 2006.09.02).] +\scratchcounter=\count279 +\scratchdimen=\dimen166 +\scratchbox=\box53 +\nofMPsegments=\count280 +\nofMParguments=\count281 +\everyMPshowfont=\toks29 +\MPscratchCnt=\count282 +\MPscratchDim=\dimen167 +\MPnumerator=\count283 +\makeMPintoPDFobject=\count284 +\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 18. + +(/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 18. + + +(/usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/umsb.fd +File: umsb.fd 2013/01/14 v3.01 AMS symbols B +) + +File: fig_fiber_setup.png Graphic file (type png) + +Package pdftex.def Info: fig_fiber_setup.png used on input line 40. +(pdftex.def) Requested size: 432.17375pt x 212.41599pt. + [1 + +{/usr/local/texlive/2022/texmf-var/fonts/map/pdftex/updmap/pdftex.map} <./fig_f +iber_setup.png>] + +File: fig_fiber_c4_example.png Graphic file (type png) + +Package pdftex.def Info: fig_fiber_c4_example.png used on input line 129. +(pdftex.def) Requested size: 446.26582pt x 174.63286pt. + + +LaTeX Warning: `h' float specifier changed to `ht'. + +[2] + +File: fig_nesting_compatibility.png Graphic file (type png) + +Package pdftex.def Info: fig_nesting_compatibility.png used on input line 181. + +(pdftex.def) Requested size: 446.26582pt x 479.9068pt. + + +LaTeX Warning: `h' float specifier changed to `ht'. + +[3 <./fig_fiber_c4_example.png>] [4] [5 <./fig_nesting_compatibility.png>] +(./fiber_decomposition.aux) ) +Here is how much of TeX's memory you used: + 4638 strings out of 478268 + 75644 string characters out of 5846347 + 376224 words of memory out of 5000000 + 22816 multiletter control sequences out of 15000+600000 + 482245 words of font info for 78 fonts, out of 8000000 for 9000 + 1141 hyphenation exceptions out of 8191 + 55i,7n,63p,950b,364s stack positions out of 10000i,1000n,20000p,200000b,200000s +{/usr/local/texlive/2022/texmf-dist/fonts/enc/dvip +s/cm-super/cm-super-ts1.enc} +Output written on fiber_decomposition.pdf (5 pages, 399680 bytes). +PDF statistics: + 113 PDF objects out of 1000 (max. 8388607) + 65 compressed objects within 1 object stream + 0 named destinations out of 1000 (max. 500000) + 16 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/papers/coloring_nested_tire_graphs/notes/fiber_decomposition.pdf b/papers/coloring_nested_tire_graphs/notes/fiber_decomposition.pdf new file mode 100644 index 0000000..8ec9287 Binary files /dev/null and b/papers/coloring_nested_tire_graphs/notes/fiber_decomposition.pdf differ diff --git a/papers/coloring_nested_tire_graphs/notes/fiber_decomposition.tex b/papers/coloring_nested_tire_graphs/notes/fiber_decomposition.tex new file mode 100644 index 0000000..7fc0ebf --- /dev/null +++ b/papers/coloring_nested_tire_graphs/notes/fiber_decomposition.tex @@ -0,0 +1,239 @@ +\documentclass[11pt]{article} +\usepackage{amsmath,amssymb,amsthm} +\usepackage{graphicx} +\usepackage{geometry} +\usepackage{caption} +\usepackage{subcaption} +\geometry{margin=1in} + +\title{Fiber decomposition of edge $3$-colorings\\ + of tire annular face connectors} +\author{} +\date{} + +\newtheorem*{prop}{Proposition} +\newtheorem*{defn}{Definition} + +\begin{document} +\maketitle + +\section*{Why this note exists} + +The menagerie note gives a closed form (Section~6) for $P_e(G, k)$ when +$G$ is a $2$-connected outerplanar graph with $\Delta \le 3$: a polygon +$C_n$ with a non-crossing chord matching $M$. But the object we +actually want to count over, the \emph{tire annular face connector} +$T'_{f'}$ (Definition~1.16 of the main paper), is not that graph --- it +has extra pendant edges hanging off the cycle, one per non-chord +boundary vertex. These pendants are the \emph{spokes} +(Definition~1.17). + +This note explains the picture below: $T'_{f'}$ factors as a +\emph{core} (the polygon-with-matching $C_n + M = T'_{\mathrm{ann}}$ +that the menagerie handles) plus a set of \emph{spoke pendants} reaching +into the neighbouring tires. Each edge $3$-coloring of $T'_{f'}$ is +the data of (i) a core edge coloring and (ii) a spoke coloring, and the +spoke coloring is what compatibility-with-neighbours acts on. + +\begin{figure}[h] +\centering +\includegraphics[width=0.92\textwidth]{fig_fiber_setup.png} +\caption{Anatomy of a tire annular face connector $T'_{f'}$ in the +spoke-only case. \textbf{Left:} the core $T'_{\mathrm{ann}} = C_n + M$ (here +$\theta(1,3,3)$), the object the menagerie \S6 formula counts. +\textbf{Right:} $T'_{f'}$ adds one pendant spoke edge for each non-chord +boundary vertex; the spoke vertex is a dual vertex of a face of $G$ +\emph{outside} the tire annulus. In a nested-tire setting, that +outside face belongs to the next tire over.} +\label{fig:fiber-setup} +\end{figure} + +\section*{Setup} + +Let $T \subseteq G$ be a tire with annular faces $F_{\mathrm{ann}}$, +let $T'_{\mathrm{ann}} := G'[\{d_f : f \in F_{\mathrm{ann}}\}]$ be the +tire annular subgraph, fix a face $f'$ of $T'_{\mathrm{ann}}$ with +boundary walk $V(f')$, and let $T'_{f'}$ be the tire annular face +connector (Definition~1.16). Write +\[ + S(f') \;:=\; V(T'_{f'}) \setminus V(f') + \;=\; V_{\mathrm{out}}(T'_{f'}) \sqcup V_{\mathrm{in}}(T'_{f'}) +\] +for the set of \emph{spokes} (outer and inner). In the spoke-only +setting (Remark~1.16.1) each spoke $u \in S(f')$ contributes a single +pendant edge $vu$ to $T'_{f'}$ for a unique cycle vertex +$v = v(u) \in V(f')$. The \emph{spoke edge set} is +\[ + E_S \;:=\; \{\, v(u)\,u \,:\, u \in S(f') \,\} \;\subseteq\; E(T'_{f'}), +\] +and $E(T'_{f'}) = E(T'_{\mathrm{ann}}) \sqcup E_S$. + +\section*{Spoke configurations and fibers} + +\begin{defn}[Spoke configuration] +A \emph{spoke configuration} on $T'_{f'}$ (with palette $[k]$) is a map +$\sigma : E_S \to [k]$. Equivalently, $\sigma$ assigns a color to the +$G'$-edge from each spoke $u \in S(f')$ to its attachment vertex +$v(u) \in V(f')$. +\end{defn} + +\begin{defn}[Fiber] +For $\sigma : E_S \to [k]$ the \emph{fiber} of $T'_{f'}$ over $\sigma$ +is +\[ + N(T'_{f'};\,\sigma) \;:=\; \#\bigl\{\,\text{proper edge $k$-colorings of } + T'_{f'} \text{ that restrict to } \sigma \text{ on } E_S\,\bigr\}. +\] +\end{defn} + +Trivially +\[ + \boxed{\;P_e(T'_{f'},\,k) \;=\; \sum_{\sigma : E_S \to [k]} + N(T'_{f'};\,\sigma)\;} +\] +and the support of the sum is the set of \emph{realisable} spoke +configurations. + +\paragraph{What the fiber count really is.} +Fixing $\sigma$ pins one extra color at each cycle vertex $v(u)$: the +spoke edge $v(u)u$ contributes a forbidden color +$\sigma(v(u)u)$ at $v(u)$. After this, the remaining problem is to +proper-edge-color the core $T'_{\mathrm{ann}} = C_n + M$ subject to +vertex-level forbidden colors --- precisely the constrained transfer +matrix problem in the ``General method'' paragraph of menagerie \S6, +with the chord-color part of the forbidden-set assignment replaced by +the spoke-color part. + +If we write $C^{(v)}_\sigma \subseteq [k]$ for the set of forbidden +colors at vertex $v$ coming from spokes (so $|C^{(v)}_\sigma|$ is the +number of spokes attached at $v$; in the spoke-only case it is $0$ or +$1$), then +\[ + N(T'_{f'};\,\sigma) \;=\; \sum_{(c_1,\dots,c_r)\in[k]^r} + N\!\bigl(C_n;\,\mathrm{forbidden}_{M}(c_1,\dots,c_r) + \cup C^{(\cdot)}_\sigma,\,k\bigr), +\] +i.e.\ the menagerie sum but with the extra spoke-forbidden colors +appended to the forbidden sets at each cycle vertex. + +\paragraph{Special case: $E_S = \emptyset$.} +If there are no spokes (e.g.\ the spoke-free setting), $\sigma$ is the +empty map and the unique fiber is +$N(T'_{f'};\,\sigma_\emptyset) = P_e(T'_{\mathrm{ann}}, k)$, which is +exactly the menagerie \S6 formula. + +\section*{Small worked example: $C_4$ with four spokes at $k=3$} + +\begin{figure}[h] +\centering +\includegraphics[width=0.95\textwidth]{fig_fiber_c4_example.png} +\caption{Three spoke configurations $\sigma$ on $C_4$ with four +pendant spokes, with cycle vertices labelled $v_0, v_1, v_2, v_3$ and +spoke vertices $u_0, u_1, u_2, u_3$. \textbf{Left:} the constant +configuration $\sigma = (1,1,1,1)$ (all spokes red) is realisable with +fiber count $N(\sigma) = 2$ --- the cycle alternates between the two +remaining colors in two ways. \textbf{Middle:} the alternating +configuration $\sigma = (1,2,1,2)$ is \emph{infeasible} ($N(\sigma) = +0$); the constraints at $v_0$ and $v_1$ force $c(e_0) = 3$, but the +constraint at $v_2$ then demands $c(e_1) \in \{2, 3\} \setminus +\{c(e_0)\}$ contradicting the $v_1$ constraint. \textbf{Right:} the +non-uniform configuration $\sigma = (1,1,2,2)$ has fiber count +$N(\sigma) = 1$ --- a single cycle coloring extends it.} +\label{fig:fiber-c4} +\end{figure} + +Let $T'_{f'}$ be the $4$-cycle $C_4 = v_0 v_1 v_2 v_3$ with one pendant +spoke $v_i u_i$ at each cycle vertex. Each $v_i$ has degree $3$, so +proper edge $3$-coloring forces $\{c(s_i),\,c(e_{i-1}),\,c(e_i)\} = +\{1,2,3\}$ at every $v_i$, where $s_i := v_i u_i$ and $e_i$ is the +cycle edge from $v_i$ to $v_{i+1}$ (indices mod $4$). + +Fix a spoke configuration $\sigma = (\sigma_0,\sigma_1,\sigma_2,\sigma_3)$. +At each $v_i$, the two cycle edges $e_{i-1}, e_i$ are the two colors of +$[3] \setminus \{\sigma_i\}$ in some order. This gives the constraints +\[ + c(e_i) \in [3] \setminus \{\sigma_i, \sigma_{i+1}\}, + \qquad i = 0,1,2,3, +\] +together with $c(e_{i-1}) \ne c(e_i)$ at each $v_i$. + +\paragraph{Total count.} +For $C_4$ alone, $P_e(C_4, 3) = P_v(C_4, 3) = 2^4 + 2 = 18$. At $k=3$, +each spoke is forced (the unique color avoiding its endpoint's two +cycle-edge colors), so $P_e(T'_{f'}, 3) = 18$ as well: the pendants +contribute a factor of~$1^4$. + +\paragraph{Distribution over $\sigma$.} +The map ``edge $3$-coloring of $T'_{f'}$'' $\mapsto$ ``induced +$\sigma$'' is surjective onto its image, and +\[ + \sum_{\sigma \in [3]^4} N(T'_{f'};\,\sigma) \;=\; 18. +\] +The fiber sizes for the three configurations in +Figure~\ref{fig:fiber-c4} can be checked directly from the constraints +above; doing the same for every $\sigma \in [3]^4$ would partition the +$18$ colorings according to the spoke pattern they induce. + +\section*{Why this matters for nested tires} + +\begin{figure}[h] +\centering +\includegraphics[width=0.95\textwidth]{fig_nesting_compatibility.png} +\caption{Two adjacent tires $T^{\mathrm{outer}}, T^{\mathrm{inner}}$ in +a common maximal planar $G$, sharing the cycle $\gamma$. The cycle +vertex $v \in V(\gamma)$ is a dual vertex for an annular face in +\emph{both} tires. The $G'$-edges at $v$ split into: two cycle edges +inside $T'^{\mathrm{outer}}_{\mathrm{ann}}$, two cycle edges inside +$T'^{\mathrm{inner}}_{\mathrm{ann}}$, and (in the spoke-only case) +\emph{one shared spoke edge} $vu$ pointing across the shared boundary. +That single spoke edge is simultaneously a spoke of $T'^{\mathrm{outer}}_{f'}$ +and a spoke of $T'^{\mathrm{inner}}_{f'}$, so any global edge coloring +of $G'$ assigns it a single color from both sides at once.} +\label{fig:nesting-compatibility} +\end{figure} + +The whole point of the fiber decomposition is that, in a nested-tire +configuration, the spoke edge set of the inner tire is (a subset of) the +spoke edge set of the outer tire \emph{regarded from the other side}. +Specifically, if two tires $T^{\mathrm{outer}}, T^{\mathrm{inner}}$ share a +cycle $\gamma$ in $G$, then for $v \in V(\gamma)$ the unique +$G'$-edge at $v$ that points out of $\gamma$'s annular faces serves as +an outer-spoke edge of one tire's face connector and an inner-spoke +edge of the other's (Figure~\ref{fig:nesting-compatibility}). + +So an edge $3$-coloring of the whole region decomposes as: a coloring +of each tire's face connector, with the spoke configurations matched +on the shared cycle. Writing +$\sigma_{\mathrm{shared}}$ for the common spoke configuration on the +shared boundary, this is +\[ + \#\{\text{joint colorings on } T^{\mathrm{outer}} \cup + T^{\mathrm{inner}}\} + \;=\; \sum_{\sigma_{\mathrm{shared}}} + N(T'^{\mathrm{outer}}_{f'};\, \sigma_{\mathrm{shared}},\, *) + \cdot + N(T'^{\mathrm{inner}}_{f'};\, \sigma_{\mathrm{shared}},\, *) +\] +(with $*$ standing for the other-side spoke configuration, which is +free). This is the conductivity step $\phi_B$ of the chain pigeonhole +sketch from the conversation that prompted this note: the inner tire's +profile, projected to its outer-side spoke configurations, must +intersect the outer tire's profile, projected to its inner-side spoke +configurations. + +\paragraph{Where this leads.} +Two natural quantitative questions: +\begin{enumerate} + \item For a fixed face connector $T'_{f'}$ and a fixed boundary side, + what is the distribution of $|N(T'_{f'};\,\sigma)|$ over + $\sigma$? How concentrated is it, and how large is the + realisable support? + \item For two nested tires to admit a joint edge $3$-coloring it + suffices that the supports of $\sigma$ overlap. When can we + guarantee this from the cycle length alone (which controls + $|[k]^{|E_S|}|$ on the shared side)? +\end{enumerate} +The fiber form makes both questions concrete: the first is a fiber +distribution to compute, the second is a covering / pigeonhole on $\sigma$. + +\end{document} diff --git a/papers/coloring_nested_tire_graphs/notes/fig_fiber_c4_example.png b/papers/coloring_nested_tire_graphs/notes/fig_fiber_c4_example.png new file mode 100644 index 0000000..8d1fcd7 Binary files /dev/null and b/papers/coloring_nested_tire_graphs/notes/fig_fiber_c4_example.png differ diff --git a/papers/coloring_nested_tire_graphs/notes/fig_fiber_setup.png b/papers/coloring_nested_tire_graphs/notes/fig_fiber_setup.png new file mode 100644 index 0000000..13f3e1c Binary files /dev/null and b/papers/coloring_nested_tire_graphs/notes/fig_fiber_setup.png differ diff --git a/papers/coloring_nested_tire_graphs/notes/fig_nesting_compatibility.png b/papers/coloring_nested_tire_graphs/notes/fig_nesting_compatibility.png new file mode 100644 index 0000000..f2af635 Binary files /dev/null and b/papers/coloring_nested_tire_graphs/notes/fig_nesting_compatibility.png differ