coloring_nested_tire_graphs: switch bridge example to barbell (non-pendant bridge)

The previous bridge example used a pendant edge as the bridge.  A
pendant edge IS technically a bridge (single-edge cut), but the
intended notion was a "proper" non-pendant bridge: an edge cut
connecting two non-trivial subgraphs.  Replaced with the smallest
example:

  - B_out = 4-cycle on {0, 1, 2, 3}.
  - O = barbell on {4..9}: two disjoint triangles {4, 5, 6} and
    {7, 8, 9} connected by the bridge edge 6-7.
  - Annular triangulation by hand (12 triangles, all listed in the
    generator script with planarity verified by Sage).

The barbell case is structurally cleaner: BOTH endpoints of the
bridge have degree >= 2 in O, and the interior dual subgraph has
the two bridge-incident annular faces (d_5, d_6) as its trivalent
theta-graph vertices (in the pendant case, the trivalent vertices
were NOT bridge-incident, which was confusing).

Updates fig_partial_tire_dual_bridge.png and the figure caption.

Paper stays at 9 pages.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-25 20:52:50 -04:00
parent 7e4ccf2cc2
commit 5fa6e9e840
7 changed files with 178 additions and 155 deletions
@@ -1,17 +1,18 @@
"""Draw a partial tire dual D(T) for a tire whose inner outerplanar """Draw a partial tire dual D(T) for a tire whose inner outerplanar
graph O has a bridge. graph O has a (non-pendant) bridge: a single edge whose removal
disconnects O into two non-trivial components.
Tire construction: Tire construction:
- Outer cycle B_out: triangle on {0, 1, 2}. - Outer cycle B_out: 4-cycle on {0, 1, 2, 3}.
- Inner outerplanar O on {3, 4, 5, 6}: triangle 3-4-5 plus pendant - Inner outerplanar O on {4..9}: two disjoint triangles {4, 5, 6}
edge 5-6 (the bridge of O). and {7, 8, 9}, connected by the bridge edge 6-7.
- Annular triangulation with 8 triangles (computed by hand below). - Annular triangulation built by hand below.
The bridge 5-6 has both incident faces in the annular region, so in The bridge 6-7 has both incident faces in the annular region, so in
the partial tire dual it contributes an interior dual edge (not a the partial tire dual it contributes an interior dual edge (not
leaf). This makes the interior dual subgraph a theta graph rather leaves). This makes the interior dual subgraph a theta graph: two
than a single cycle: two trivalent vertices (the two annular faces trivalent vertices (the two annular faces incident to the bridge,
incident to the bridge) connected by three paths. or those with all interior edges) connected by three paths.
""" """
import math import math
import os import os
@@ -21,54 +22,72 @@ from collections import defaultdict
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
import matplotlib.patches as patches import matplotlib.patches as patches
from sage.all import Graph
# Explicit vertex positions # Explicit vertex positions
POS = { POS = {
0: (0.0, 1.0), 0: (0.0, 1.6), # outer top
1: (-0.866, -0.5), 1: (-1.6, 0.0), # outer left
2: (0.866, -0.5), 2: (0.0, -1.6), # outer bottom
3: (0.0, 0.32), 3: (1.6, 0.0), # outer right
4: (-0.27, -0.17), 4: (-0.65, 0.42), # left triangle, top
5: (0.13, -0.17), 5: (-0.65, -0.42), # left triangle, bottom
6: (0.52, -0.07), 6: (-0.20, 0.0), # left triangle, right (= bridge endpoint 1)
7: (0.20, 0.0), # right triangle, left (= bridge endpoint 2)
8: (0.65, 0.42), # right triangle, top
9: (0.65, -0.42), # right triangle, bottom
} }
# Annular triangles (in lattice-path-like order, but here just listed)
TRIANGLES = [
(0, 1, 4), # T1 -- O-move
(0, 4, 3), # T2 -- has edge 4-3 boundary (inner triangle)
(1, 2, 5), # T3 -- O-move
(1, 5, 4), # T4 -- inner-triangle-edge boundary
(2, 0, 6), # T5 -- O-move
(0, 3, 6), # T6 -- ALL INTERIOR (bridge neighbour)
(3, 5, 6), # T7 -- inner-triangle-edge boundary, contains bridge
(5, 2, 6), # T8 -- ALL INTERIOR (bridge neighbour)
]
# Tire edges (all)
T_EDGES = [ T_EDGES = [
# outer cycle (B_out) # outer cycle B_out (length 4)
(0, 1), (1, 2), (2, 0), (0, 1), (1, 2), (2, 3), (3, 0),
# O: triangle 3-4-5 # O: triangle 4-5-6
(3, 4), (4, 5), (3, 5), (4, 5), (5, 6), (4, 6),
# O: pendant / bridge # O: triangle 7-8-9
(5, 6), (7, 8), (8, 9), (7, 9),
# spokes # O: bridge
(0, 3), (1, 4), (2, 5), (6, 7),
# diagonals from annular triangulation # annular edges (spokes + diagonals chosen to triangulate)
(0, 4), (1, 5), (0, 6), (2, 6), (3, 6), (0, 4), (0, 6), (0, 8),
(1, 4), (1, 5),
(2, 5), (2, 6), (2, 7), (2, 9),
(3, 8), (3, 9),
(0, 7), # extra diagonal to triangulate top
] ]
# Boundary edges # Annular triangles -- listed explicitly so we know exactly which
B_OUT_EDGES = [(0, 1), (1, 2), (2, 0)] # faces are which. 12 of them.
# Edges of O on inner-triangle-face boundary (i.e., NOT the bridge) TRIANGLES = [
B_IN_EDGES = [(3, 4), (4, 5), (3, 5)] (0, 1, 4), # top-left top
# Bridge edge (interior to annulus) (1, 4, 5), # left side, with triangle 1
BRIDGE = (5, 6) (1, 2, 5), # bottom-left
(2, 5, 6), # right of left-triangle, bottom
(0, 4, 6), # right of left-triangle, top
(0, 6, 7), # top-center over the bridge (bridge-incident)
(2, 6, 7), # bottom-center over the bridge (bridge-incident)
(0, 7, 8), # right of right-triangle, top
(2, 7, 9), # right of right-triangle, bottom
(0, 8, 3), # top-right
(3, 8, 9), # right side, with triangle 2
(2, 9, 3), # bottom-right
]
# Boundary edges:
B_OUT_EDGES = [(0, 1), (1, 2), (2, 3), (3, 0)]
# Edges of O on inner-triangle-face boundaries (= NOT the bridge):
B_IN_EDGES = [(4, 5), (5, 6), (4, 6),
(7, 8), (8, 9), (7, 9)]
BRIDGE = (6, 7)
def main(): def main():
# Map: edge -> list of triangle indices containing it # Sanity-check via sage that the graph is planar
G = Graph(T_EDGES)
assert G.is_planar(), "Constructed tire is not planar"
print(f"Tire graph: n={G.order()}, m={G.size()}, planar=True")
# Map: edge -> triangle indices containing it
edge_to_tris = defaultdict(list) edge_to_tris = defaultdict(list)
for i, t in enumerate(TRIANGLES): for i, t in enumerate(TRIANGLES):
for e in (frozenset({t[0], t[1]}), for e in (frozenset({t[0], t[1]}),
@@ -76,67 +95,84 @@ def main():
frozenset({t[0], t[2]})): frozenset({t[0], t[2]})):
edge_to_tris[e].append(i) edge_to_tris[e].append(i)
# Verify each B_out edge is in exactly 1 annular triangle # Verify each B_out edge in exactly 1 annular triangle
for u, v in B_OUT_EDGES: for u, v in B_OUT_EDGES:
ts = edge_to_tris[frozenset({u, v})] ts = edge_to_tris[frozenset({u, v})]
assert len(ts) == 1, f"B_out edge {u}-{v} in {ts}" assert len(ts) == 1, f"B_out edge {u}-{v} in {ts} (expected 1)"
# Each B_in (non-bridge O edge) in exactly 1 annular triangle
# Each B_in (= non-bridge O edge) is in exactly 1 annular triangle
for u, v in B_IN_EDGES: for u, v in B_IN_EDGES:
ts = edge_to_tris[frozenset({u, v})] ts = edge_to_tris[frozenset({u, v})]
assert len(ts) == 1, f"B_in edge {u}-{v} in {ts}" assert len(ts) == 1, f"B_in edge {u}-{v} in {ts} (expected 1)"
# Bridge in exactly 2 annular triangles
# Bridge is in exactly 2 annular triangles (interior to annulus)
bts = edge_to_tris[frozenset(BRIDGE)] bts = edge_to_tris[frozenset(BRIDGE)]
print(f"Bridge {BRIDGE} is in annular triangles {bts}") print(f"Bridge {BRIDGE} is in annular triangles {bts}")
assert len(bts) == 2 assert len(bts) == 2
# Interior dual subgraph: connect annular triangles sharing an edge # Verify every edge of T is accounted for
seen_in_tris = set()
for t in TRIANGLES:
for e in (frozenset({t[0], t[1]}),
frozenset({t[1], t[2]}),
frozenset({t[0], t[2]})):
seen_in_tris.add(e)
all_T_edges = {frozenset(e) for e in T_EDGES}
# Each edge appears in at least one triangle EXCEPT it might be that
# boundary edges to non-annular faces are accounted for differently.
# Annular triangles use boundary edges (B_out and inner-triangle-of-O
# edges) plus interior annular edges. Every edge of T should appear
# in at least one annular triangle EXCEPT the inner faces of O don't
# exist as separate annular triangles. Wait, the inner triangle
# faces of O (= {4,5,6} and {7,8,9}) are themselves face boundaries
# of T but NOT in the annular region. So edges of the inner
# triangles of O appear in exactly ONE annular triangle (across the
# boundary) + the inner triangle face on the other side.
# Check: every T edge should appear in at most 2 annular triangles
# (and at least 1 if it's incident to any annular face).
for e in all_T_edges:
n = len(edge_to_tris[e])
assert n in (1, 2), \
f"Edge {sorted(e)} appears in {n} annular triangles"
# Interior dual adjacencies
n_tri = len(TRIANGLES) n_tri = len(TRIANGLES)
tri_adj = defaultdict(set) tri_adj = defaultdict(set)
for e, ts in edge_to_tris.items(): for e, ts in edge_to_tris.items():
if len(ts) == 2: if len(ts) == 2:
tri_adj[ts[0]].add(ts[1]) tri_adj[ts[0]].add(ts[1])
tri_adj[ts[1]].add(ts[0]) tri_adj[ts[1]].add(ts[0])
print("Interior dual subgraph degree sequence:") print("Interior dual subgraph degree sequence:")
for i in range(n_tri): for i in range(n_tri):
print(f" T{i+1} ({TRIANGLES[i]}): degree {len(tri_adj[i])}") print(f" T{i} {TRIANGLES[i]}: degree {len(tri_adj[i])}")
# Centroids of triangles for d_f positions # Centroids of triangles (for d_f positions)
centroids = [] centroids = [((POS[t[0]][0] + POS[t[1]][0] + POS[t[2]][0]) / 3,
for t in TRIANGLES: (POS[t[0]][1] + POS[t[1]][1] + POS[t[2]][1]) / 3)
cx = (POS[t[0]][0] + POS[t[1]][0] + POS[t[2]][0]) / 3 for t in TRIANGLES]
cy = (POS[t[0]][1] + POS[t[1]][1] + POS[t[2]][1]) / 3
centroids.append((cx, cy))
# === Plot === # === Plot ===
fig, ax = plt.subplots(figsize=(10, 9)) fig, ax = plt.subplots(figsize=(10, 9))
# Draw underlying tire edges faintly outer_set = {0, 1, 2, 3}
outer_set = {0, 1, 2} inner_set = {4, 5, 6, 7, 8, 9}
inner_set = {3, 4, 5, 6} bridge_fs = frozenset(BRIDGE)
for u, v in T_EDGES: for u, v in T_EDGES:
x1, y1 = POS[u]; x2, y2 = POS[v] x1, y1 = POS[u]; x2, y2 = POS[v]
if u in outer_set and v in outer_set: if frozenset({u, v}) == bridge_fs:
color = '#a8c9e8'; lw = 2.0 color, lw = '#cc6677', 2.8 # bridge of O
elif u in outer_set and v in outer_set:
color, lw = '#a8c9e8', 2.0
elif u in inner_set and v in inner_set: elif u in inner_set and v in inner_set:
# Distinguish bridge (pendant) from triangle edges color, lw = '#e8a8a8', 2.0
if frozenset({u, v}) == frozenset(BRIDGE):
color = '#cc6677'; lw = 2.5 # darker red for bridge
else:
color = '#e8a8a8'; lw = 2.0
else: else:
color = '#cccccc'; lw = 1.0 color, lw = '#cccccc', 1.0
ax.plot([x1, x2], [y1, y2], color=color, linewidth=lw, zorder=1) ax.plot([x1, x2], [y1, y2], color=color, linewidth=lw, zorder=1)
# Tire vertices for v in outer_set:
for v in [0, 1, 2]:
x, y = POS[v] x, y = POS[v]
ax.plot(x, y, 'o', color='#a8c9e8', markersize=15, zorder=2) ax.plot(x, y, 'o', color='#a8c9e8', markersize=16, zorder=2)
ax.annotate(str(v), (x, y), color='white', ha='center', va='center', ax.annotate(str(v), (x, y), color='white', ha='center', va='center',
fontsize=9, fontweight='bold', zorder=3) fontsize=9, fontweight='bold', zorder=3)
for v in [3, 4, 5, 6]: for v in inner_set:
x, y = POS[v] x, y = POS[v]
ax.plot(x, y, 'o', color='#e8a8a8', markersize=13, zorder=2) ax.plot(x, y, 'o', color='#e8a8a8', markersize=13, zorder=2)
ax.annotate(str(v), (x, y), color='white', ha='center', va='center', ax.annotate(str(v), (x, y), color='white', ha='center', va='center',
@@ -144,24 +180,22 @@ def main():
DUAL_COLOR = '#7d3c98' DUAL_COLOR = '#7d3c98'
LEAF_COLOR = '#e67e22' LEAF_COLOR = '#e67e22'
BRIDGE_DUAL_COLOR = '#cc4444' # color the bridge's dual edge differently BRIDGE_DUAL_COLOR = '#cc4444'
# Interior dual edges # Interior dual edges
for i in range(n_tri): for i in range(n_tri):
for j in tri_adj[i]: for j in tri_adj[i]:
if j <= i: if j <= i: continue
continue
x1, y1 = centroids[i]; x2, y2 = centroids[j]
# Find shared edge to colour-code bridge edge
ti_es = {frozenset({TRIANGLES[i][a], TRIANGLES[i][b]}) ti_es = {frozenset({TRIANGLES[i][a], TRIANGLES[i][b]})
for a, b in [(0, 1), (1, 2), (0, 2)]} for a, b in [(0, 1), (1, 2), (0, 2)]}
tj_es = {frozenset({TRIANGLES[j][a], TRIANGLES[j][b]}) tj_es = {frozenset({TRIANGLES[j][a], TRIANGLES[j][b]})
for a, b in [(0, 1), (1, 2), (0, 2)]} for a, b in [(0, 1), (1, 2), (0, 2)]}
shared = (ti_es & tj_es).pop() shared = (ti_es & tj_es).pop()
if shared == frozenset(BRIDGE): if shared == bridge_fs:
ec, lw = BRIDGE_DUAL_COLOR, 3.0 ec, lw = BRIDGE_DUAL_COLOR, 3.0
else: else:
ec, lw = DUAL_COLOR, 2.0 ec, lw = DUAL_COLOR, 2.0
x1, y1 = centroids[i]; x2, y2 = centroids[j]
ax.plot([x1, x2], [y1, y2], color=ec, linewidth=lw, zorder=4) ax.plot([x1, x2], [y1, y2], color=ec, linewidth=lw, zorder=4)
# Leaves for B_out edges # Leaves for B_out edges
@@ -170,18 +204,15 @@ def main():
midx = (POS[u][0] + POS[v][0]) / 2 midx = (POS[u][0] + POS[v][0]) / 2
midy = (POS[u][1] + POS[v][1]) / 2 midy = (POS[u][1] + POS[v][1]) / 2
d = math.sqrt(midx**2 + midy**2) d = math.sqrt(midx**2 + midy**2)
push = 1.20 push = 1.18
lpos = (midx * push / d, midy * push / d) lpos = (midx * push / d, midy * push / d)
cx, cy = centroids[ti] cx, cy = centroids[ti]
ax.plot([cx, lpos[0]], [cy, lpos[1]], color=LEAF_COLOR, ax.plot([cx, lpos[0]], [cy, lpos[1]], color=LEAF_COLOR,
linewidth=1.5, linestyle='--', zorder=4) linewidth=1.5, linestyle='--', zorder=4)
ax.plot(lpos[0], lpos[1], 'D', color=LEAF_COLOR, markersize=11, ax.plot(lpos[0], lpos[1], 'D', color=LEAF_COLOR, markersize=10,
zorder=5) zorder=5)
ax.annotate(f"$\\ell^{{\\mathrm{{out}}}}_{{{u},{v}}}$", lpos,
color='white', ha='center', va='center', fontsize=6,
fontweight='bold', zorder=6)
# Leaves for non-bridge B_in edges (= the 3 inner triangle edges) # Leaves for non-bridge edges of O (= inner triangle edges)
for u, v in B_IN_EDGES: for u, v in B_IN_EDGES:
ti = edge_to_tris[frozenset({u, v})][0] ti = edge_to_tris[frozenset({u, v})][0]
midx = (POS[u][0] + POS[v][0]) / 2 midx = (POS[u][0] + POS[v][0]) / 2
@@ -190,30 +221,21 @@ def main():
vx, vy = midx - cx, midy - cy vx, vy = midx - cx, midy - cy
norm = math.sqrt(vx*vx + vy*vy) norm = math.sqrt(vx*vx + vy*vy)
offset = 0.10 offset = 0.10
if norm > 1e-9: nx, ny = (vx / norm, vy / norm) if norm > 1e-9 else (0, -1)
nx, ny = vx / norm, vy / norm
else:
nx, ny = 0, -1
lpos = (midx + nx * offset, midy + ny * offset) lpos = (midx + nx * offset, midy + ny * offset)
ax.plot([cx, lpos[0]], [cy, lpos[1]], color=LEAF_COLOR, ax.plot([cx, lpos[0]], [cy, lpos[1]], color=LEAF_COLOR,
linewidth=1.5, linestyle='--', zorder=4) linewidth=1.5, linestyle='--', zorder=4)
ax.plot(lpos[0], lpos[1], 'D', color=LEAF_COLOR, markersize=11, ax.plot(lpos[0], lpos[1], 'D', color=LEAF_COLOR, markersize=10,
zorder=5) zorder=5)
ax.annotate(f"$\\ell^{{\\mathrm{{in}}}}_{{{u},{v}}}$", lpos,
color='white', ha='center', va='center', fontsize=6,
fontweight='bold', zorder=6)
# Interior dual vertices d_f, highlighting the two degree-3 # Interior dual vertices, highlight degree-3 (trivalent)
# vertices in a darker color (these are the trivalent vertices
# of the theta graph that the interior dual forms).
for ti, (cx, cy) in enumerate(centroids): for ti, (cx, cy) in enumerate(centroids):
is_deg3 = (len(tri_adj[ti]) == 3) deg = len(tri_adj[ti])
marker_color = '#5a2273' if is_deg3 else DUAL_COLOR c = '#5a2273' if deg == 3 else DUAL_COLOR
ax.plot(cx, cy, 's', color=marker_color, markersize=15, zorder=5) ax.plot(cx, cy, 's', color=c, markersize=14, zorder=5)
ax.annotate(f"$d_{{{ti}}}$", (cx, cy), color='white', ha='center', ax.annotate(f"$d_{{{ti}}}$", (cx, cy), color='white', ha='center',
va='center', fontsize=7, fontweight='bold', zorder=6) va='center', fontsize=6, fontweight='bold', zorder=6)
# Legend
legend_items = [ legend_items = [
plt.Line2D([], [], marker='o', color='w', markerfacecolor='#a8c9e8', plt.Line2D([], [], marker='o', color='w', markerfacecolor='#a8c9e8',
markersize=12, label='$B_{\\mathrm{out}}$ vertex'), markersize=12, label='$B_{\\mathrm{out}}$ vertex'),
@@ -223,13 +245,13 @@ def main():
label='$B_{\\mathrm{out}}$ edge'), label='$B_{\\mathrm{out}}$ edge'),
plt.Line2D([], [], color='#e8a8a8', linewidth=2.0, plt.Line2D([], [], color='#e8a8a8', linewidth=2.0,
label='triangle edge of $O$'), label='triangle edge of $O$'),
plt.Line2D([], [], color='#cc6677', linewidth=2.5, plt.Line2D([], [], color='#cc6677', linewidth=2.8,
label='bridge of $O$ (= pendant)'), label='bridge of $O$'),
plt.Line2D([], [], marker='s', color='w', markerfacecolor=DUAL_COLOR, plt.Line2D([], [], marker='s', color='w', markerfacecolor=DUAL_COLOR,
markersize=12, label='$d_f$ (degree 2 in interior dual)'), markersize=12, label='$d_f$ (deg 2 in interior dual)'),
plt.Line2D([], [], marker='s', color='w', markerfacecolor='#5a2273', plt.Line2D([], [], marker='s', color='w', markerfacecolor='#5a2273',
markersize=12, markersize=12,
label='$d_f$ (degree 3 -- theta-graph trivalent)'), label='$d_f$ (deg 3 -- trivalent theta-graph vertex)'),
plt.Line2D([], [], marker='D', color='w', markerfacecolor=LEAF_COLOR, plt.Line2D([], [], marker='D', color='w', markerfacecolor=LEAF_COLOR,
markersize=10, label='leaf'), markersize=10, label='leaf'),
plt.Line2D([], [], color=DUAL_COLOR, linewidth=2.0, plt.Line2D([], [], color=DUAL_COLOR, linewidth=2.0,
@@ -242,16 +264,18 @@ def main():
ax.legend(handles=legend_items, loc='upper left', ax.legend(handles=legend_items, loc='upper left',
bbox_to_anchor=(1.02, 1.0), fontsize=8, frameon=False) bbox_to_anchor=(1.02, 1.0), fontsize=8, frameon=False)
ax.set_xlim(-1.30, 1.50) ax.set_xlim(-2.10, 2.60)
ax.set_ylim(-1.20, 1.20) ax.set_ylim(-1.90, 1.90)
ax.set_aspect('equal') ax.set_aspect('equal')
ax.axis('off') ax.axis('off')
ax.set_title( ax.set_title(
'Partial tire dual $D(T)$ when $O$ has a bridge\n' '$D(T)$ when $O$ is a barbell (two triangles + one bridge edge)\n'
'$O$ = triangle $\\{3,4,5\\}$ + pendant edge $5$--$6$;\n' '$O$ = triangle $\\{4,5,6\\}$ $\\cup$ bridge $6$--$7$ $\\cup$ '
'interior dual is a theta graph (2 deg-3 vertices + 3 paths), ' 'triangle $\\{7,8,9\\}$;\n'
'not a cycle.', 'bridge is interior to the annulus, so it contributes an interior '
fontsize=11) 'dual edge (red).\n'
'Interior dual is a theta graph (2 trivalent $d_f$ + 3 paths).',
fontsize=10)
HERE = os.path.dirname(os.path.abspath(__file__)) HERE = os.path.dirname(os.path.abspath(__file__))
out = os.path.join(HERE, 'partial_tire_dual_bridge.png') out = os.path.join(HERE, 'partial_tire_dual_bridge.png')
Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 KiB

After

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 KiB

After

Width:  |  Height:  |  Size: 143 KiB

+3 -3
View File
@@ -11,21 +11,21 @@
\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces The partial tire dual $D(T)$ (purple squares + orange diamonds) drawn on top of a small tire graph $T$ (faint) with $m = 6$ and $k = 4$. The ten interior vertices $d_f$ at the centroids of the annular triangles form a single $10$-cycle (solid purple); each boundary edge of the annular region (either of $B_{\mathrm {out}}$ or of $B_{\mathrm {in}}$) contributes a degree-$1$ leaf (orange diamond) attached to the unique annular face incident to it (dashed orange), giving the structure $C_{10} \circ K_1$ of Proposition\nonbreakingspace 1.8\hbox {}.}}{4}{}\protected@file@percent } \@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces The partial tire dual $D(T)$ (purple squares + orange diamonds) drawn on top of a small tire graph $T$ (faint) with $m = 6$ and $k = 4$. The ten interior vertices $d_f$ at the centroids of the annular triangles form a single $10$-cycle (solid purple); each boundary edge of the annular region (either of $B_{\mathrm {out}}$ or of $B_{\mathrm {in}}$) contributes a degree-$1$ leaf (orange diamond) attached to the unique annular face incident to it (dashed orange), giving the structure $C_{10} \circ K_1$ of Proposition\nonbreakingspace 1.8\hbox {}.}}{4}{}\protected@file@percent }
\newlabel{fig:partial-tire-dual-example}{{3}{4}} \newlabel{fig:partial-tire-dual-example}{{3}{4}}
\newlabel{prop:partial-tire-dual-structure}{{1.8}{4}} \newlabel{prop:partial-tire-dual-structure}{{1.8}{4}}
\@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces Partial tire dual $D(T)$ when the inner outerplanar graph $O$ has a bridge. Here $B_{\mathrm {out}}$ is a triangle on $\{0,1,2\}$ and $O$ is a triangle $\{3,4,5\}$ with a pendant edge $5$--$6$ (the bridge of $O$). Because both faces incident to the bridge are annular triangles, the bridge contributes an \emph {interior dual edge} (highlighted in red) rather than two leaves; consequently the interior dual subgraph is no longer the single $(n+m)$-cycle of Proposition\nonbreakingspace 1.8\hbox {}, but a theta graph (two trivalent vertices $d_5, d_7$ connected by three internally vertex-disjoint paths in $D(T)$). Leaves come only from $B_{\mathrm {out}}$ ($n = 3$ leaves) and from the three non-bridge edges of $O$ (the three triangle edges of the inner triangle).}}{5}{}\protected@file@percent } \@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces Partial tire dual $D(T)$ when the inner outerplanar graph $O$ has a bridge --- here a non-trivial edge cut connecting two disjoint triangles. $B_{\mathrm {out}}$ is a $4$-cycle on $\{0,1,2,3\}$ and $O$ is the barbell: triangle $\{4,5,6\}$ together with triangle $\{7,8,9\}$ joined by the bridge edge $6$--$7$ (removing the bridge disconnects $O$). Because both faces incident to the bridge are annular triangles, the bridge contributes an \emph {interior dual edge} (highlighted in red) rather than two leaves; consequently the interior dual subgraph is no longer the single $(n+m)$-cycle of Proposition\nonbreakingspace 1.8\hbox {}, but a theta graph: the two trivalent vertices $d_5, d_6$ (the bridge-incident annular faces) are joined by three internally vertex-disjoint paths in $D(T)$. Leaves come only from $B_{\mathrm {out}}$ ($n = 4$ leaves) and the six non-bridge edges of $O$ ($m_{\partial } = 6$ leaves, three for each triangle).}}{5}{}\protected@file@percent }
\newlabel{fig:partial-tire-dual-bridge}{{4}{5}} \newlabel{fig:partial-tire-dual-bridge}{{4}{5}}
\newlabel{prop:no-level-d-pinch}{{1.9}{5}} \newlabel{prop:no-level-d-pinch}{{1.9}{5}}
\citation{bauerfeld-pds} \citation{bauerfeld-pds}
\newlabel{lem:tire-component}{{1.10}{6}} \newlabel{lem:tire-component}{{1.10}{6}}
\citation{bauerfeld-pds} \citation{bauerfeld-pds}
\newlabel{rem:tire-component-degenerate}{{1.11}{7}} \newlabel{rem:tire-component-degenerate}{{1.11}{8}}
\newlabel{rem:tire-no-extra-hypotheses}{{1.12}{8}} \newlabel{rem:tire-no-extra-hypotheses}{{1.12}{8}}
\newlabel{prop:edge-vertex-bijection}{{1.13}{8}} \newlabel{prop:edge-vertex-bijection}{{1.13}{8}}
\newlabel{rem:edge-vertex-corollary}{{1.14}{8}}
\bibcite{bauerfeld-pds}{1} \bibcite{bauerfeld-pds}{1}
\newlabel{tocindent-1}{0pt} \newlabel{tocindent-1}{0pt}
\newlabel{tocindent0}{12.7778pt} \newlabel{tocindent0}{12.7778pt}
\newlabel{tocindent1}{17.77782pt} \newlabel{tocindent1}{17.77782pt}
\newlabel{tocindent2}{0pt} \newlabel{tocindent2}{0pt}
\newlabel{tocindent3}{0pt} \newlabel{tocindent3}{0pt}
\newlabel{rem:edge-vertex-corollary}{{1.14}{9}}
\@writefile{toc}{\contentsline {section}{\tocsection {}{}{References}}{9}{}\protected@file@percent } \@writefile{toc}{\contentsline {section}{\tocsection {}{}{References}}{9}{}\protected@file@percent }
\gdef \@abspage@last{9} \gdef \@abspage@last{9}
+23 -27
View File
@@ -1,4 +1,4 @@
This is pdfTeX, Version 3.141592653-2.6-1.40.24 (TeX Live 2022) (preloaded format=pdflatex 2022.10.5) 25 MAY 2026 20:43 This is pdfTeX, Version 3.141592653-2.6-1.40.24 (TeX Live 2022) (preloaded format=pdflatex 2022.10.5) 25 MAY 2026 20:52
entering extended mode entering extended mode
restricted \write18 enabled. restricted \write18 enabled.
%&-line parsing enabled. %&-line parsing enabled.
@@ -213,22 +213,18 @@ File: fig_partial_tire_dual.png Graphic file (type png)
<use fig_partial_tire_dual.png> <use fig_partial_tire_dual.png>
Package pdftex.def Info: fig_partial_tire_dual.png used on input line 225. Package pdftex.def Info: fig_partial_tire_dual.png used on input line 225.
(pdftex.def) Requested size: 280.79956pt x 233.36552pt. (pdftex.def) Requested size: 280.79956pt x 233.36552pt.
<fig_partial_tire_dual_bridge.png, id=31, 765.6103pt x 542.47668pt> <fig_partial_tire_dual_bridge.png, id=31, 780.96768pt x 522.15076pt>
File: fig_partial_tire_dual_bridge.png Graphic file (type png) File: fig_partial_tire_dual_bridge.png Graphic file (type png)
<use fig_partial_tire_dual_bridge.png> <use fig_partial_tire_dual_bridge.png>
Package pdftex.def Info: fig_partial_tire_dual_bridge.png used on input line 2 Package pdftex.def Info: fig_partial_tire_dual_bridge.png used on input line 2
40. 40.
(pdftex.def) Requested size: 280.79956pt x 198.95839pt. (pdftex.def) Requested size: 306.0022pt x 204.59406pt.
LaTeX Warning: `h' float specifier changed to `ht'. LaTeX Warning: `h' float specifier changed to `ht'.
[4 <./fig_partial_tire_dual.png>] [5 <./fig_partial_tire_dual_bridge.png>] [4 <./fig_partial_tire_dual.png>] [5 <./fig_partial_tire_dual_bridge.png>]
[6] [6] [7] [8] [9] (./paper.aux) )
Underfull \vbox (badness 1043) has occurred while \output is active []
[7]
[8] [9] (./paper.aux) )
Here is how much of TeX's memory you used: Here is how much of TeX's memory you used:
3028 strings out of 478268 3028 strings out of 478268
42672 string characters out of 5846347 42672 string characters out of 5846347
@@ -236,25 +232,25 @@ Here is how much of TeX's memory you used:
21073 multiletter control sequences out of 15000+600000 21073 multiletter control sequences out of 15000+600000
475666 words of font info for 53 fonts, out of 8000000 for 9000 475666 words of font info for 53 fonts, out of 8000000 for 9000
1302 hyphenation exceptions out of 8191 1302 hyphenation exceptions out of 8191
69i,8n,76p,907b,316s stack positions out of 10000i,1000n,20000p,200000b,200000s 69i,8n,76p,1079b,316s stack positions out of 10000i,1000n,20000p,200000b,200000s
</usr/local/texlive/2022/texmf-dist/fonts/type1/public/a </usr/local/texlive/2022/texmf-dist/fonts/type1/
msfonts/cm/cmbx10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/am public/amsfonts/cm/cmbx10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/p
sfonts/cm/cmcsc10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/am ublic/amsfonts/cm/cmcsc10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/p
sfonts/cm/cmex10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/ams ublic/amsfonts/cm/cmex10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/pu
fonts/cm/cmmi10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsf blic/amsfonts/cm/cmmi10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/pub
onts/cm/cmmi5.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfon lic/amsfonts/cm/cmmi5.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/publi
ts/cm/cmmi7.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts c/amsfonts/cm/cmmi7.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/
/cm/cmr10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/c amsfonts/cm/cmr10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/am
m/cmr5.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/c sfonts/cm/cmr5.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfo
mr7.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmr8 nts/cm/cmr7.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts
.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy10. /cm/cmr8.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm
pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy5.pf /cmsy10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/
b></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy7.pfb> cmsy5.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cm
</usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmti10.pfb>< sy7.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmti
/usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmti8.pfb></u 10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmti8
sr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/symbols/msam10.pfb .pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/symbols/ms
> am10.pfb>
Output written on paper.pdf (9 pages, 748857 bytes). Output written on paper.pdf (9 pages, 746924 bytes).
PDF statistics: PDF statistics:
123 PDF objects out of 1000 (max. 8388607) 123 PDF objects out of 1000 (max. 8388607)
71 compressed objects within 1 object stream 71 compressed objects within 1 object stream
Binary file not shown.
+11 -8
View File
@@ -237,20 +237,23 @@ Proposition~\ref{prop:partial-tire-dual-structure}.}
\begin{figure}[h] \begin{figure}[h]
\centering \centering
\includegraphics[width=0.78\textwidth]{fig_partial_tire_dual_bridge.png} \includegraphics[width=0.85\textwidth]{fig_partial_tire_dual_bridge.png}
\caption{Partial tire dual $D(T)$ when the inner outerplanar graph \caption{Partial tire dual $D(T)$ when the inner outerplanar graph
$O$ has a bridge. Here $B_{\mathrm{out}}$ is a triangle on $O$ has a bridge --- here a non-trivial edge cut connecting two
$\{0,1,2\}$ and $O$ is a triangle $\{3,4,5\}$ with a pendant edge disjoint triangles. $B_{\mathrm{out}}$ is a $4$-cycle on
$5$--$6$ (the bridge of $O$). Because both faces incident to the $\{0,1,2,3\}$ and $O$ is the barbell: triangle $\{4,5,6\}$ together
with triangle $\{7,8,9\}$ joined by the bridge edge $6$--$7$ (removing
the bridge disconnects $O$). Because both faces incident to the
bridge are annular triangles, the bridge contributes an bridge are annular triangles, the bridge contributes an
\emph{interior dual edge} (highlighted in red) rather than two \emph{interior dual edge} (highlighted in red) rather than two
leaves; consequently the interior dual subgraph is no longer the leaves; consequently the interior dual subgraph is no longer the
single $(n+m)$-cycle of single $(n+m)$-cycle of
Proposition~\ref{prop:partial-tire-dual-structure}, but a theta Proposition~\ref{prop:partial-tire-dual-structure}, but a theta
graph (two trivalent vertices $d_5, d_7$ connected by three graph: the two trivalent vertices $d_5, d_6$ (the bridge-incident
internally vertex-disjoint paths in $D(T)$). Leaves come only from annular faces) are joined by three internally vertex-disjoint paths
$B_{\mathrm{out}}$ ($n = 3$ leaves) and from the three non-bridge in $D(T)$. Leaves come only from $B_{\mathrm{out}}$ ($n = 4$ leaves)
edges of $O$ (the three triangle edges of the inner triangle).} and the six non-bridge edges of $O$ ($m_{\partial} = 6$ leaves,
three for each triangle).}
\label{fig:partial-tire-dual-bridge} \label{fig:partial-tire-dual-bridge}
\end{figure} \end{figure}