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:
@@ -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)
|
||||
|
||||
Binary file not shown.
@@ -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 |
Reference in New Issue
Block a user