coloring_nested_tire_graphs: add fiber decomposition note for T'_{f'} edge colorings

Decomposes P_e(T'_{f'}, k) into fibers over spoke configurations σ,
specializes to the menagerie §6 formula when there are no spokes, and
sets up the cross-tire compatibility step on shared boundary spokes.
Includes brute-force-verified worked example on C_4 with four pendants.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-26 00:07:14 -04:00
parent afe4bf4859
commit bfc68b7ec6
10 changed files with 1000 additions and 0 deletions
@@ -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()
@@ -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()
@@ -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()
@@ -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}
@@ -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: <default>
* layout: <same size as paper>
* layoutoffset:(h,v)=(0.0pt,0.0pt)
* modes:
* h-part:(L,W,R)=(72.26999pt, 469.75502pt, 72.26999pt)
* v-part:(T,H,B)=(72.26999pt, 650.43001pt, 72.26999pt)
* \paperwidth=614.295pt
* \paperheight=794.96999pt
* \textwidth=469.75502pt
* \textheight=650.43001pt
* \oddsidemargin=0.0pt
* \evensidemargin=0.0pt
* \topmargin=-37.0pt
* \headheight=12.0pt
* \headsep=25.0pt
* \topskip=11.0pt
* \footskip=30.0pt
* \marginparwidth=59.0pt
* \marginparsep=10.0pt
* \columnsep=10.0pt
* \skip\footins=10.0pt plus 4.0pt minus 2.0pt
* \hoffset=0.0pt
* \voffset=0.0pt
* \mag=1000
* \@twocolumnfalse
* \@twosidefalse
* \@mparswitchfalse
* \@reversemarginfalse
* (1in=72.27pt=25.4mm, 1cm=28.453pt)
Package caption Info: Begin \AtBeginDocument code.
Package caption Info: End \AtBeginDocument code.
LaTeX Font Info: Trying to load font information for U+msa on input line 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
)
<fig_fiber_setup.png, id=1, 717.73143pt x 352.76794pt>
File: fig_fiber_setup.png Graphic file (type png)
<use fig_fiber_setup.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>]
<fig_fiber_c4_example.png, id=21, 968.418pt x 378.9658pt>
File: fig_fiber_c4_example.png Graphic file (type png)
<use fig_fiber_c4_example.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]
<fig_nesting_compatibility.png, id=28, 431.81325pt x 464.33475pt>
File: fig_nesting_compatibility.png Graphic file (type png)
<use fig_nesting_compatibility.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}</usr/local/texlive/2022/texmf-dist/fonts/type1/pub
lic/amsfonts/cm/cmbx10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/publ
ic/amsfonts/cm/cmbx12.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/publi
c/amsfonts/cm/cmex10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public
/amsfonts/cm/cmmi10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/
amsfonts/cm/cmmi12.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/a
msfonts/cm/cmmi6.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/ams
fonts/cm/cmmi8.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfo
nts/cm/cmr10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfont
s/cm/cmr12.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/
cm/cmr17.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm
/cmr6.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cm
r8.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy1
0.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy6.
pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy8.pf
b></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmti10.pfb
></usr/local/texlive/2022/texmf-dist/fonts/type1/public/cm-super/sfrm1095.pfb>
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)
@@ -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}
Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB