coloring_nested_tire_graphs: define "cut tire" with multi-depth visualisation
Adds Definition (cut tire) to cut_depth_label.tex:
Given the depth labelling on G'_i, for each d > 0 let H_d be the
subgraph on depth-d edges (with inherited planar embedding). For
each face f of H_d, the cut tire at (d, f) is the subgraph of G'_i
consisting of:
- every edge on the boundary walk of f (all depth d), and
- every edge of G'_i incident to the boundary walk of f with
depth d-1 or d+1.
The depth-d edges form the "face boundary"; the d-1 edges are
"inner spokes" (toward the cut); the d+1 edges are "outer spokes."
This is the dual-side analogue of the tire annular face connector
T'_{f'} (paper.tex Def. 1.16):
face boundary ↔ T'_ann (annular subgraph at depth d)
cut tire ↔ T'_{f'} (annular face connector)
inner/outer spokes ↔ inner/outer spokes of T'_{f'}
Adds experiments/cut_tire.py producing fig_cut_tire.png:
5-panel visualisation of cut tires at depths d = 1, 2, 4, 5, 6 on
G'_1 (V\S half of Holton-McKay #0). Outermost tire at d=1 (face
length 12, 5+4 spokes); innermost at d=6 (face length 12, 7+1).
Note grows from 3 → 5 pages.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,247 @@
|
|||||||
|
"""Define and visualise a cut tire: a structure built from a face of
|
||||||
|
the depth-d subgraph of a cut half G'_i, together with adjacent edges
|
||||||
|
at depths d-1 and d+1.
|
||||||
|
|
||||||
|
Procedure for a chosen d > 0:
|
||||||
|
1. Build H_d := subgraph of G'_i on edges of depth d.
|
||||||
|
2. Find the faces of H_d in the inherited planar embedding.
|
||||||
|
3. Pick one face f.
|
||||||
|
4. The cut tire at (d, f) is the subgraph of G'_i consisting of:
|
||||||
|
- The boundary edges of f (all depth d in H_d), AND
|
||||||
|
- All edges of G'_i with at least one endpoint on the boundary
|
||||||
|
walk of f whose depth is d-1 or d+1.
|
||||||
|
"""
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import math
|
||||||
|
from collections import deque, defaultdict
|
||||||
|
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import matplotlib.patches as patches
|
||||||
|
|
||||||
|
from sage.all import Graph
|
||||||
|
|
||||||
|
# Reuse the cut-and-depth-label infrastructure.
|
||||||
|
HERE = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
sys.path.insert(0, HERE)
|
||||||
|
from cut_depth_label import (
|
||||||
|
parse_planar_code, HM_FILE, find_six_edge_cut,
|
||||||
|
apply_procedure, compute_nice_layout,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def faces_of_subgraph(H, pos):
|
||||||
|
"""Find faces of H using its planar embedding inherited from pos.
|
||||||
|
Uses Sage's planar embedding facility. Returns list of faces, each
|
||||||
|
a list of vertices in cyclic order on the face boundary."""
|
||||||
|
if not H.is_planar(set_embedding=True):
|
||||||
|
return []
|
||||||
|
return H.faces()
|
||||||
|
|
||||||
|
|
||||||
|
def cut_tire_at(G_i, edge_depth, d):
|
||||||
|
"""Build cut tires at depth d for each face of the depth-d subgraph.
|
||||||
|
Returns list of (face_vertices, tire_subgraph_edges_by_role) where:
|
||||||
|
tire_subgraph_edges_by_role is a dict with keys
|
||||||
|
'face' (boundary at depth d), 'inner' (adjacent at d-1),
|
||||||
|
'outer' (adjacent at d+1).
|
||||||
|
"""
|
||||||
|
# Build H_d
|
||||||
|
H_d_edges = [e for e, ed in edge_depth.items() if ed == d]
|
||||||
|
H_d = Graph([(u, v) for (u, v) in H_d_edges],
|
||||||
|
multiedges=False, loops=False)
|
||||||
|
if H_d.size() == 0:
|
||||||
|
return []
|
||||||
|
if not H_d.is_planar(set_embedding=True):
|
||||||
|
return []
|
||||||
|
faces_h_d = H_d.faces()
|
||||||
|
results = []
|
||||||
|
for face in faces_h_d:
|
||||||
|
# face is a list of (u, v) edge-pairs going around the boundary
|
||||||
|
# in Sage; convert to vertex sequence
|
||||||
|
vertices_on_face = []
|
||||||
|
for (u, v) in face:
|
||||||
|
vertices_on_face.append(u)
|
||||||
|
face_vertex_set = set(vertices_on_face)
|
||||||
|
# Boundary edges of the face (in H_d): they're the face edges
|
||||||
|
face_edges = [(min(u, v), max(u, v)) for (u, v) in face]
|
||||||
|
# Find adjacent edges at d-1 and d+1 from G'_i
|
||||||
|
inner_edges = [] # depth d-1
|
||||||
|
outer_edges = [] # depth d+1
|
||||||
|
for e_full, ed in edge_depth.items():
|
||||||
|
if ed not in (d - 1, d + 1):
|
||||||
|
continue
|
||||||
|
u, v = e_full
|
||||||
|
if u in face_vertex_set or v in face_vertex_set:
|
||||||
|
if ed == d - 1:
|
||||||
|
inner_edges.append(e_full)
|
||||||
|
else:
|
||||||
|
outer_edges.append(e_full)
|
||||||
|
results.append({
|
||||||
|
'face_vertices': vertices_on_face,
|
||||||
|
'face_edges': face_edges,
|
||||||
|
'inner_edges': inner_edges,
|
||||||
|
'outer_edges': outer_edges,
|
||||||
|
'face_length': len(face),
|
||||||
|
})
|
||||||
|
return results
|
||||||
|
|
||||||
|
|
||||||
|
def draw_cut_tire(ax, G_i, pos, edge_depth, tire, d, title):
|
||||||
|
"""Draw G_i faded with a single cut tire highlighted."""
|
||||||
|
face_set = set(tire['face_edges'])
|
||||||
|
inner_set = set(tire['inner_edges'])
|
||||||
|
outer_set = set(tire['outer_edges'])
|
||||||
|
face_vertex_set = set(tire['face_vertices'])
|
||||||
|
|
||||||
|
# Fade all G_i edges
|
||||||
|
for e in G_i.edges(labels=False):
|
||||||
|
u, v = e
|
||||||
|
e_norm = (min(u, v), max(u, v))
|
||||||
|
if e_norm in face_set or e_norm in inner_set or e_norm in outer_set:
|
||||||
|
continue
|
||||||
|
x1, y1 = pos[u]; x2, y2 = pos[v]
|
||||||
|
ax.plot([x1, x2], [y1, y2], color='#dddddd', linewidth=0.9,
|
||||||
|
zorder=1)
|
||||||
|
|
||||||
|
# Highlight the tire
|
||||||
|
for e in face_set:
|
||||||
|
u, v = e
|
||||||
|
x1, y1 = pos[u]; x2, y2 = pos[v]
|
||||||
|
ax.plot([x1, x2], [y1, y2], color='#1f77b4', linewidth=3.0,
|
||||||
|
zorder=3, label=None)
|
||||||
|
for e in inner_set:
|
||||||
|
u, v = e
|
||||||
|
x1, y1 = pos[u]; x2, y2 = pos[v]
|
||||||
|
ax.plot([x1, x2], [y1, y2], color='#d62728', linewidth=2.4,
|
||||||
|
linestyle='--', zorder=2)
|
||||||
|
for e in outer_set:
|
||||||
|
u, v = e
|
||||||
|
x1, y1 = pos[u]; x2, y2 = pos[v]
|
||||||
|
ax.plot([x1, x2], [y1, y2], color='#2ca02c', linewidth=2.4,
|
||||||
|
linestyle='--', zorder=2)
|
||||||
|
|
||||||
|
# Draw vertices: face vertices highlighted, others faded
|
||||||
|
for v in G_i.vertices():
|
||||||
|
x, y = pos[v]
|
||||||
|
if v in face_vertex_set:
|
||||||
|
ax.plot(x, y, 'o', color='#1f77b4', markersize=10,
|
||||||
|
zorder=4, markeredgecolor='#0a3b5f',
|
||||||
|
markeredgewidth=1.0)
|
||||||
|
else:
|
||||||
|
ax.plot(x, y, 'o', color='#bbbbbb', markersize=5, zorder=2)
|
||||||
|
|
||||||
|
legend = [
|
||||||
|
plt.Line2D([], [], color='#1f77b4', linewidth=3,
|
||||||
|
label=f'face boundary (depth {d})'),
|
||||||
|
plt.Line2D([], [], color='#d62728', linewidth=2.4,
|
||||||
|
linestyle='--', label=f'inner spokes (depth {d - 1})'),
|
||||||
|
plt.Line2D([], [], color='#2ca02c', linewidth=2.4,
|
||||||
|
linestyle='--', label=f'outer spokes (depth {d + 1})'),
|
||||||
|
]
|
||||||
|
ax.legend(handles=legend, loc='upper left',
|
||||||
|
bbox_to_anchor=(1.02, 1.0), fontsize=9, frameon=False)
|
||||||
|
ax.set_aspect('equal'); ax.axis('off')
|
||||||
|
ax.set_title(title, fontsize=10)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
out_fig = os.path.normpath(os.path.join(HERE, '..', 'notes',
|
||||||
|
'fig_cut_tire.png'))
|
||||||
|
gs = parse_planar_code(HM_FILE)
|
||||||
|
G = gs[0]
|
||||||
|
S, cut = find_six_edge_cut(G)
|
||||||
|
base_pos = compute_nice_layout(G)
|
||||||
|
S0 = frozenset(S)
|
||||||
|
S1 = frozenset(G.vertices()) - S0
|
||||||
|
H0, pos0, ed0, _, _, _ = apply_procedure(
|
||||||
|
G, S0, cut, base_pos, '0',
|
||||||
|
pendant_start_id=max(G.vertices()) + 1)
|
||||||
|
H1, pos1, ed1, _, _, _ = apply_procedure(
|
||||||
|
G, S1, cut, base_pos, '1',
|
||||||
|
pendant_start_id=max(G.vertices()) + 1 + 6)
|
||||||
|
|
||||||
|
# Try several depths in G'_1 (which has depths 0-7) and pick a
|
||||||
|
# decent example.
|
||||||
|
print(f"G'_1 depths range: 0 to {max(ed1.values())}")
|
||||||
|
chosen_d = None
|
||||||
|
chosen_tire = None
|
||||||
|
for d in range(1, max(ed1.values())):
|
||||||
|
tires = cut_tire_at(H1, ed1, d)
|
||||||
|
print(f' depth {d}: {len(tires)} faces in depth-{d} subgraph')
|
||||||
|
for tire in tires:
|
||||||
|
print(f' face length {tire["face_length"]}, '
|
||||||
|
f'inner spokes: {len(tire["inner_edges"])}, '
|
||||||
|
f'outer spokes: {len(tire["outer_edges"])}')
|
||||||
|
# Pick the largest "interesting" face: try to find one with
|
||||||
|
# > 3 face edges AND inner/outer spokes both > 0.
|
||||||
|
candidates = [t for t in tires
|
||||||
|
if t['face_length'] >= 4
|
||||||
|
and t['inner_edges'] and t['outer_edges']]
|
||||||
|
if candidates and chosen_tire is None:
|
||||||
|
chosen_d = d
|
||||||
|
# Pick the face with the most spokes total (most "informative")
|
||||||
|
candidates.sort(key=lambda t: -(len(t['inner_edges']) +
|
||||||
|
len(t['outer_edges'])))
|
||||||
|
chosen_tire = candidates[0]
|
||||||
|
|
||||||
|
if chosen_tire is None:
|
||||||
|
print('No suitable cut tire found.')
|
||||||
|
return
|
||||||
|
|
||||||
|
print(f"\nChosen cut tire at depth d = {chosen_d}")
|
||||||
|
print(f" face length: {chosen_tire['face_length']}")
|
||||||
|
print(f" inner spokes (depth {chosen_d - 1}): "
|
||||||
|
f"{len(chosen_tire['inner_edges'])}")
|
||||||
|
print(f" outer spokes (depth {chosen_d + 1}): "
|
||||||
|
f"{len(chosen_tire['outer_edges'])}")
|
||||||
|
|
||||||
|
# Collect "best" cut tires at multiple depths
|
||||||
|
selected = []
|
||||||
|
for d in range(1, max(ed1.values())):
|
||||||
|
tires = cut_tire_at(H1, ed1, d)
|
||||||
|
candidates = [t for t in tires
|
||||||
|
if t['face_length'] >= 4
|
||||||
|
and t['inner_edges'] and t['outer_edges']]
|
||||||
|
if candidates:
|
||||||
|
candidates.sort(key=lambda t: -(len(t['inner_edges']) +
|
||||||
|
len(t['outer_edges'])))
|
||||||
|
selected.append((d, candidates[0]))
|
||||||
|
print(f"\nCut tires selected for visualization at depths: "
|
||||||
|
f"{[d for d, _ in selected]}")
|
||||||
|
|
||||||
|
# Multi-panel figure
|
||||||
|
n = len(selected)
|
||||||
|
cols = 2
|
||||||
|
rows = (n + cols - 1) // cols
|
||||||
|
xs = [p[0] for p in base_pos.values()]
|
||||||
|
ys = [p[1] for p in base_pos.values()]
|
||||||
|
fig, axes = plt.subplots(rows, cols, figsize=(13, 5 * rows))
|
||||||
|
if rows == 1:
|
||||||
|
axes = [axes]
|
||||||
|
axes_flat = [ax for row in axes for ax in (row if hasattr(row, '__iter__') else [row])]
|
||||||
|
for idx, (d, tire) in enumerate(selected):
|
||||||
|
ax = axes_flat[idx]
|
||||||
|
draw_cut_tire(ax, H1, pos1, ed1, tire, d,
|
||||||
|
title=(f"$d = {d}$: face length "
|
||||||
|
f"{tire['face_length']}, "
|
||||||
|
f"{len(tire['inner_edges'])} inner + "
|
||||||
|
f"{len(tire['outer_edges'])} outer spokes"))
|
||||||
|
ax.set_xlim(min(xs) - 0.5, max(xs) + 0.5)
|
||||||
|
ax.set_ylim(min(ys) - 0.5, max(ys) + 0.5)
|
||||||
|
for idx in range(n, len(axes_flat)):
|
||||||
|
axes_flat[idx].axis('off')
|
||||||
|
fig.suptitle(r"Cut tires on $G'_1$ (Holton-McKay #0, V\S half) at "
|
||||||
|
r"several depths $d$" + "\n"
|
||||||
|
r"Each panel: blue face boundary at depth $d$ "
|
||||||
|
r"+ inner spokes (depth $d-1$, red dashed) "
|
||||||
|
r"+ outer spokes (depth $d+1$, green dashed)",
|
||||||
|
fontsize=11, y=1.00)
|
||||||
|
plt.tight_layout()
|
||||||
|
plt.savefig(out_fig, dpi=160, bbox_inches='tight')
|
||||||
|
plt.close()
|
||||||
|
print(f'Wrote {out_fig}')
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
@@ -1,8 +1,12 @@
|
|||||||
\relax
|
\relax
|
||||||
\@writefile{toc}{\contentsline {paragraph}{The chosen 6-edge cut.}{1}{}\protected@file@percent }
|
\@writefile{toc}{\contentsline {paragraph}{The chosen 6-edge cut.}{1}{}\protected@file@percent }
|
||||||
\@writefile{toc}{\contentsline {paragraph}{Resulting half-graphs.}{2}{}\protected@file@percent }
|
\@writefile{toc}{\contentsline {paragraph}{Resulting half-graphs.}{2}{}\protected@file@percent }
|
||||||
\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Cut-and-depth-label procedure on Holton-McKay graph \#0 ($38$ vertices, $57$ edges, cubic planar non-Hamiltonian). The $6$-edge matching cut splits $G'$ into a $10$-vertex piece $G'_0$ (left) and a $28$-vertex piece $G'_1$ (right). Pendant edges (dashed, dark purple) are at depth $0$; the colour gradient encodes depth $0$ through max depth via BFS in the line-graph sense. Orange squares are the new pendant vertices; red circles are the boundary vertices in $V_i$; gray circles are interior vertices.\relax }}{2}{}\protected@file@percent }
|
|
||||||
\providecommand*\caption@xref[2]{\@setref\relax\@undefined{#1}}
|
|
||||||
\newlabel{fig:cut-depth-label}{{1}{2}}
|
|
||||||
\@writefile{toc}{\contentsline {paragraph}{Visualization.}{2}{}\protected@file@percent }
|
\@writefile{toc}{\contentsline {paragraph}{Visualization.}{2}{}\protected@file@percent }
|
||||||
\gdef \@abspage@last{3}
|
\@writefile{toc}{\contentsline {paragraph}{Relation to the existing tire framework.}{2}{}\protected@file@percent }
|
||||||
|
\@writefile{toc}{\contentsline {paragraph}{Example on $G'_1$ (Holton-McKay \#0, $V \setminus S$ half).}{3}{}\protected@file@percent }
|
||||||
|
\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Cut-and-depth-label procedure on Holton-McKay graph \#0 ($38$ vertices, $57$ edges, cubic planar non-Hamiltonian). The $6$-edge matching cut splits $G'$ into a $10$-vertex piece $G'_0$ (left) and a $28$-vertex piece $G'_1$ (right). Pendant edges (dashed, dark purple) are at depth $0$; the colour gradient encodes depth $0$ through max depth via BFS in the line-graph sense. Orange squares are the new pendant vertices; red circles are the boundary vertices in $V_i$; gray circles are interior vertices.\relax }}{4}{}\protected@file@percent }
|
||||||
|
\providecommand*\caption@xref[2]{\@setref\relax\@undefined{#1}}
|
||||||
|
\newlabel{fig:cut-depth-label}{{1}{4}}
|
||||||
|
\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Cut tires on $G'_1$ at depths $d = 1, 2, 4, 5, 6$. In each panel, blue solid edges form the face boundary at depth $d$; red dashed edges are inner spokes (depth $d - 1$); green dashed edges are outer spokes (depth $d + 1$). Vertices on the face boundary are highlighted; the rest of $G'_1$ is faded.\relax }}{5}{}\protected@file@percent }
|
||||||
|
\newlabel{fig:cut-tire}{{2}{5}}
|
||||||
|
\gdef \@abspage@last{5}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
This is pdfTeX, Version 3.141592653-2.6-1.40.24 (TeX Live 2022) (preloaded format=pdflatex 2022.10.5) 26 MAY 2026 15:00
|
This is pdfTeX, Version 3.141592653-2.6-1.40.24 (TeX Live 2022) (preloaded format=pdflatex 2022.10.5) 26 MAY 2026 15:32
|
||||||
entering extended mode
|
entering extended mode
|
||||||
restricted \write18 enabled.
|
restricted \write18 enabled.
|
||||||
%&-line parsing enabled.
|
%&-line parsing enabled.
|
||||||
@@ -288,45 +288,89 @@ n[]level[]graph[]generators/experiments/nonham38m4.pc\OT1/cmr/m/n/10.95 ).
|
|||||||
[1
|
[1
|
||||||
|
|
||||||
{/usr/local/texlive/2022/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
|
{/usr/local/texlive/2022/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
|
||||||
<fig_cut_depth_label.png, id=17, 1150.44806pt x 565.06107pt>
|
<fig_cut_depth_label.png, id=17, 525.31256pt x 1377.19519pt>
|
||||||
File: fig_cut_depth_label.png Graphic file (type png)
|
File: fig_cut_depth_label.png Graphic file (type png)
|
||||||
<use fig_cut_depth_label.png>
|
<use fig_cut_depth_label.png>
|
||||||
Package pdftex.def Info: fig_cut_depth_label.png used on input line 108.
|
Package pdftex.def Info: fig_cut_depth_label.png used on input line 108.
|
||||||
(pdftex.def) Requested size: 469.75502pt x 230.7281pt.
|
(pdftex.def) Requested size: 469.75502pt x 1231.6049pt.
|
||||||
|
|
||||||
Overfull \hbox (46.78696pt too wide) in paragraph at lines 123--130
|
|
||||||
|
LaTeX Warning: Float too large for page by 659.17491pt on input line 119.
|
||||||
|
|
||||||
|
|
||||||
|
LaTeX Warning: `h' float specifier changed to `ht'.
|
||||||
|
|
||||||
|
|
||||||
|
! LaTeX Error: Environment definition undefined.
|
||||||
|
|
||||||
|
See the LaTeX manual or LaTeX Companion for explanation.
|
||||||
|
Type H <return> for immediate help.
|
||||||
|
...
|
||||||
|
|
||||||
|
l.129 \begin{definition}
|
||||||
|
[Cut tire]
|
||||||
|
Your command was ignored.
|
||||||
|
Type I <command> <return> to replace it with another command,
|
||||||
|
or <return> to continue without it.
|
||||||
|
|
||||||
|
|
||||||
|
! LaTeX Error: \begin{document} ended by \end{definition}.
|
||||||
|
|
||||||
|
See the LaTeX manual or LaTeX Companion for explanation.
|
||||||
|
Type H <return> for immediate help.
|
||||||
|
...
|
||||||
|
|
||||||
|
l.149 \end{definition}
|
||||||
|
|
||||||
|
Your command was ignored.
|
||||||
|
Type I <command> <return> to replace it with another command,
|
||||||
|
or <return> to continue without it.
|
||||||
|
|
||||||
|
<fig_cut_tire.png, id=19, 864.98157pt x 1087.6635pt>
|
||||||
|
File: fig_cut_tire.png Graphic file (type png)
|
||||||
|
<use fig_cut_tire.png>
|
||||||
|
Package pdftex.def Info: fig_cut_tire.png used on input line 171.
|
||||||
|
(pdftex.def) Requested size: 469.75502pt x 590.68202pt.
|
||||||
|
|
||||||
|
LaTeX Warning: `h' float specifier changed to `ht'.
|
||||||
|
|
||||||
|
[2]
|
||||||
|
Overfull \hbox (46.78696pt too wide) in paragraph at lines 195--202
|
||||||
\OT1/cmr/m/n/10.95 The pro-ce-dure mir-rors the $4$CT cut-and-reglue scheme (\O
|
\OT1/cmr/m/n/10.95 The pro-ce-dure mir-rors the $4$CT cut-and-reglue scheme (\O
|
||||||
T1/cmtt/m/n/10.95 rainbow[]proof.tex\OT1/cmr/m/n/10.95 , \OT1/cmtt/m/n/10.95 wo
|
T1/cmtt/m/n/10.95 rainbow[]proof.tex\OT1/cmr/m/n/10.95 , \OT1/cmtt/m/n/10.95 wo
|
||||||
rst[]case[]proof[]sketch.tex\OT1/cmr/m/n/10.95 ,
|
rst[]case[]proof[]sketch.tex\OT1/cmr/m/n/10.95 ,
|
||||||
[]
|
[]
|
||||||
|
|
||||||
[2 <./fig_cut_depth_label.png>] [3] (./cut_depth_label.aux) )
|
[3] [4 <./fig_cut_depth_label.png>] [5 <./fig_cut_tire.png>]
|
||||||
|
(./cut_depth_label.aux) )
|
||||||
Here is how much of TeX's memory you used:
|
Here is how much of TeX's memory you used:
|
||||||
4579 strings out of 478268
|
4588 strings out of 478268
|
||||||
74295 string characters out of 5846347
|
74465 string characters out of 5846347
|
||||||
370409 words of memory out of 5000000
|
375417 words of memory out of 5000000
|
||||||
22760 multiletter control sequences out of 15000+600000
|
22768 multiletter control sequences out of 15000+600000
|
||||||
479174 words of font info for 66 fonts, out of 8000000 for 9000
|
479174 words of font info for 66 fonts, out of 8000000 for 9000
|
||||||
1141 hyphenation exceptions out of 8191
|
1141 hyphenation exceptions out of 8191
|
||||||
55i,8n,63p,656b,312s stack positions out of 10000i,1000n,20000p,200000b,200000s
|
55i,8n,63p,656b,312s stack positions out of 10000i,1000n,20000p,200000b,200000s
|
||||||
{/usr/local/texliv
|
{/usr/local/texlive/2022/texmf-dist/fonts/enc/dvips/cm
|
||||||
e/2022/texmf-dist/fonts/enc/dvips/cm-super/cm-super-ts1.enc}</usr/local/texlive
|
-super/cm-super-ts1.enc}</usr/local/texlive/2022/texmf-dist/fonts/type1/public/
|
||||||
/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx10.pfb></usr/local/texlive/
|
amsfonts/cm/cmbx10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/a
|
||||||
2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx12.pfb></usr/local/texlive/2
|
msfonts/cm/cmbx12.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/am
|
||||||
022/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi10.pfb></usr/local/texlive/20
|
sfonts/cm/cmmi10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/ams
|
||||||
22/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi8.pfb></usr/local/texlive/2022
|
fonts/cm/cmmi8.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfo
|
||||||
/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb></usr/local/texlive/2022/t
|
nts/cm/cmr10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfont
|
||||||
exmf-dist/fonts/type1/public/amsfonts/cm/cmr17.pfb></usr/local/texlive/2022/tex
|
s/cm/cmr17.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/
|
||||||
mf-dist/fonts/type1/public/amsfonts/cm/cmr8.pfb></usr/local/texlive/2022/texmf-
|
cm/cmr8.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/
|
||||||
dist/fonts/type1/public/amsfonts/cm/cmsy10.pfb></usr/local/texlive/2022/texmf-d
|
cmsy10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/c
|
||||||
ist/fonts/type1/public/amsfonts/cm/cmsy8.pfb></usr/local/texlive/2022/texmf-dis
|
msy6.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cms
|
||||||
t/fonts/type1/public/amsfonts/cm/cmti10.pfb></usr/local/texlive/2022/texmf-dist
|
y8.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmti1
|
||||||
/fonts/type1/public/amsfonts/cm/cmtt10.pfb></usr/local/texlive/2022/texmf-dist/
|
0.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmtt10
|
||||||
fonts/type1/public/cm-super/sfrm1095.pfb>
|
.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/symbols/ms
|
||||||
Output written on cut_depth_label.pdf (3 pages, 357384 bytes).
|
bm10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/cm-super/sfrm10
|
||||||
|
95.pfb>
|
||||||
|
Output written on cut_depth_label.pdf (5 pages, 500070 bytes).
|
||||||
PDF statistics:
|
PDF statistics:
|
||||||
78 PDF objects out of 1000 (max. 8388607)
|
96 PDF objects out of 1000 (max. 8388607)
|
||||||
46 compressed objects within 1 object stream
|
56 compressed objects within 1 object stream
|
||||||
0 named destinations out of 1000 (max. 500000)
|
0 named destinations out of 1000 (max. 500000)
|
||||||
6 words of extra memory for PDF output out of 10000 (max. 10000000)
|
11 words of extra memory for PDF output out of 10000 (max. 10000000)
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@@ -118,6 +118,78 @@ vertices.}
|
|||||||
\label{fig:cut-depth-label}
|
\label{fig:cut-depth-label}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
|
\section*{Cut tires}
|
||||||
|
|
||||||
|
The depth labelling on $G'_i$ organises its edges into layers indexed
|
||||||
|
by distance to the cut. Each layer gives rise to a family of
|
||||||
|
``cut tires'' that play the same structural role as the tires of
|
||||||
|
\texttt{paper.tex} but are derived from the cut rather than from a
|
||||||
|
level source in the primal $G$.
|
||||||
|
|
||||||
|
\begin{definition}[Cut tire]
|
||||||
|
Let $G'_i$ be a cut half (Step~3 above) with edge depth labelling
|
||||||
|
$\mathrm{depth} : E(G'_i) \to \mathbb{Z}_{\ge 0}$. Fix $d > 0$ and
|
||||||
|
let $H_d \subseteq G'_i$ be the subgraph induced on the edges of
|
||||||
|
depth $d$ (vertex set $=$ endpoints of depth-$d$ edges, edges $=$
|
||||||
|
depth-$d$ edges). Equip $H_d$ with the planar embedding inherited
|
||||||
|
from $G'_i$.
|
||||||
|
|
||||||
|
For each face $f$ of $H_d$, the \emph{cut tire at $(d, f)$} is the
|
||||||
|
subgraph of $G'_i$ consisting of:
|
||||||
|
\begin{itemize}
|
||||||
|
\item every edge on the boundary walk of $f$ (all of depth $d$ in
|
||||||
|
$H_d$), and
|
||||||
|
\item every edge of $G'_i$ with at least one endpoint on the
|
||||||
|
boundary walk of $f$ whose depth is $d - 1$ or $d + 1$.
|
||||||
|
\end{itemize}
|
||||||
|
The first set forms the \emph{face boundary at depth $d$}; the second
|
||||||
|
splits into \emph{inner spokes} (depth $d - 1$, pointing toward the
|
||||||
|
cut) and \emph{outer spokes} (depth $d + 1$, pointing away from the
|
||||||
|
cut).
|
||||||
|
\end{definition}
|
||||||
|
|
||||||
|
\paragraph{Relation to the existing tire framework.} Under the
|
||||||
|
correspondence between primal level structure (paper.tex) and dual
|
||||||
|
depth labelling, a cut tire on $G'_i$ at $(d, f)$ corresponds to:
|
||||||
|
\begin{itemize}
|
||||||
|
\item face boundary at depth $d$ $\longleftrightarrow$ the tire
|
||||||
|
annular subgraph $T'_{\mathrm{ann}}$ at depth $d$ from the
|
||||||
|
cut (cf.\ Def.~1.15 of paper.tex);
|
||||||
|
\item the cut tire itself $\longleftrightarrow$ the tire annular
|
||||||
|
face connector $T'_{f'}$ (cf.\ Def.~1.16);
|
||||||
|
\item inner / outer spokes $\longleftrightarrow$ the inner and
|
||||||
|
outer spokes of $T'_{f'}$ (cf.\ Def.~1.17).
|
||||||
|
\end{itemize}
|
||||||
|
So the cut tire is the dual-side analogue of the
|
||||||
|
``tire annular face connector,'' parametrised by depth from the cut
|
||||||
|
rather than depth from a primal level source.
|
||||||
|
|
||||||
|
\paragraph{Example on $G'_1$ (Holton-McKay \#0, $V \setminus S$ half).}
|
||||||
|
|
||||||
|
\begin{figure}[h]
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=\textwidth]{fig_cut_tire.png}
|
||||||
|
\caption{Cut tires on $G'_1$ at depths $d = 1, 2, 4, 5, 6$. In each
|
||||||
|
panel, blue solid edges form the face boundary at depth $d$; red
|
||||||
|
dashed edges are inner spokes (depth $d - 1$); green dashed edges
|
||||||
|
are outer spokes (depth $d + 1$). Vertices on the face boundary are
|
||||||
|
highlighted; the rest of $G'_1$ is faded.}
|
||||||
|
\label{fig:cut-tire}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
In this example:
|
||||||
|
\begin{itemize}
|
||||||
|
\item $d = 1$: face length $12$, $5$ inner spokes (to depth-$0$
|
||||||
|
pendants) $+$ $4$ outer spokes. This is the outermost cut
|
||||||
|
tire, immediately adjacent to the cut.
|
||||||
|
\item $d = 2$: face length $7$ (one of two symmetric faces in
|
||||||
|
$H_2$), $4 + 3$ spokes.
|
||||||
|
\item $d = 4$: face length $8$, $2 + 5$ spokes.
|
||||||
|
\item $d = 5$: face length $14$, $4 + 6$ spokes.
|
||||||
|
\item $d = 6$: face length $12$, $7 + 1$ spokes. This is the
|
||||||
|
innermost cut tire (one face left, almost no outer spokes).
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
\section*{Connection to chain pigeonhole / 4CT reducibility}
|
\section*{Connection to chain pigeonhole / 4CT reducibility}
|
||||||
|
|
||||||
The procedure mirrors the $4$CT cut-and-reglue scheme
|
The procedure mirrors the $4$CT cut-and-reglue scheme
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 223 KiB |
Reference in New Issue
Block a user