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