coloring_nested_tire_graphs: cut tires form a tree (forest) under depth nesting
User observation: the cut tires can at most have a tree structure.
This is correct: each face of H_{d+1} lies inside exactly one face
of H_d in the planar embedding, giving a parent-child relation that
is a forest (rooted at depth-1 cut tires).
PROPOSITION: parent(T_{d+1}^{(f')}) = T_d^{(f)} where f is the
unique face of H_d containing f' in its interior. Well-defined and
unique because H_d's faces partition the plane minus H_d's edges.
CONSEQUENCE FOR CHAIN HALF: chain pigeonhole reduces to a tree-DP
problem. Process tires bottom-up from leaves; at each node, combine
with children via the in-spoke ↔ face-boundary-edge bijection;
at the root, R_i is the projection. Tree DP is well-understood;
counterexamples (if any) must come from tree-DP failures, which is
much narrower than general-graph compatibility.
EMPIRICAL CHECK on G'_1 of HM#0:
Root (1, 0): |f|=12, no children (outer shell).
Root (1, 1): |f|=4, deep substructure all the way to depth 7
with single chain of children.
EMPIRICAL CHECK on G'_0:
Root (1, 0): |f|=9, one depth-2 child.
Root (1, 1): |f|=9, no children.
In both cases the structure is a tree (= 2-root forest).
CAVEATS:
- The empirical parent test used a vertex-sharing heuristic that
gives ambiguous candidates in some cases (8 ambiguous in G'_1).
A rigorous test would use point-in-region containment via the
planar embedding's face structure.
- The proposition itself is uncontested; the ambiguity is just an
artifact of the empirical detection.
NEXT STEPS:
1. Prove the proposition rigorously via point-in-region.
2. Implement tree DP on the cut tire forest.
3. Bound |R_i| as a function of tree size.
Note: cut_tire_tree_structure.tex (4 pages).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,215 @@
|
||||
"""Demonstrate that the cut tires of G'_i form a tree (or forest)
|
||||
under the parent-child relation "face f of H_{d+1} is contained in
|
||||
face g of H_d in the planar embedding."
|
||||
|
||||
For each cut tire T_{d+1}^{(f)}, identify its parent T_d^{(g)} (if
|
||||
any). Each face f of H_{d+1} is geometrically inside exactly one
|
||||
face g of H_d (since H_d's faces partition the plane around
|
||||
H_d's edges). This gives a unique parent → child relation, hence
|
||||
a forest.
|
||||
|
||||
Empirical test on G'_1 of Holton-McKay #0:
|
||||
- List all (d, face) pairs.
|
||||
- For each (d+1, face_child), find (d, face_parent) such that
|
||||
face_child lies inside face_parent in the planar embedding.
|
||||
- Verify uniqueness (counterexample: a face inside multiple).
|
||||
- Print the tree.
|
||||
"""
|
||||
import os
|
||||
import sys
|
||||
from collections import defaultdict
|
||||
|
||||
import matplotlib.pyplot as plt
|
||||
import matplotlib.patches as patches
|
||||
from sage.all import Graph
|
||||
|
||||
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,
|
||||
)
|
||||
from cut_tire import cut_tire_at
|
||||
|
||||
|
||||
def compute_H_d_faces(G_i, edge_depth, d):
|
||||
"""Return faces of H_d (subgraph of G_i with depth-d edges),
|
||||
each face represented as a sorted tuple of edges."""
|
||||
H_edges = [e for e, ed in edge_depth.items() if ed == d]
|
||||
if not H_edges:
|
||||
return [], None
|
||||
H = Graph([(u, v) for (u, v) in H_edges],
|
||||
multiedges=False, loops=False)
|
||||
if not H.is_planar(set_embedding=True):
|
||||
return [], None
|
||||
return H.faces(), H
|
||||
|
||||
|
||||
def edge_in_face(edge_uv, face_walk, H_graph):
|
||||
"""Check if the edge edge_uv = (u, v) is on the boundary walk of
|
||||
face_walk (a list of (u, v) pairs)."""
|
||||
e_norm = (min(edge_uv), max(edge_uv))
|
||||
for (a, b) in face_walk:
|
||||
if (min(a, b), max(a, b)) == e_norm:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def find_parent_face(child_face_walk, H_parent, parent_faces, parent_H_graph):
|
||||
"""For a face of H_{d+1} (child), determine which face of H_d
|
||||
(parent) it lies inside.
|
||||
|
||||
Approach: pick a vertex v of child_face_walk that's also a vertex
|
||||
of H_parent (= parent_H_graph). Find which face of H_parent has
|
||||
v on its boundary AND that the child's edges are "inside" the
|
||||
parent's face.
|
||||
|
||||
For now, use a simpler heuristic: pick a vertex of the child
|
||||
face; among parent faces having this vertex on their boundary,
|
||||
pick the one whose face boundary walk has "small" length (= the
|
||||
immediate enclosing face).
|
||||
"""
|
||||
child_vertices = set(u for (u, _) in child_face_walk) | \
|
||||
set(v for (_, v) in child_face_walk)
|
||||
# For each parent face, check if it contains some child vertex
|
||||
candidates = []
|
||||
for p_idx, p_face in enumerate(parent_faces):
|
||||
p_vertices = set(u for (u, _) in p_face) | \
|
||||
set(v for (_, v) in p_face)
|
||||
overlap = child_vertices & p_vertices
|
||||
if overlap:
|
||||
candidates.append((p_idx, len(p_face), overlap))
|
||||
if not candidates:
|
||||
return None, set()
|
||||
# Among candidates, pick the one with the SMALLEST face length
|
||||
# (= the most "tight" enclosing face)
|
||||
candidates.sort(key=lambda c: c[1])
|
||||
return candidates[0][0], candidates[0][2]
|
||||
|
||||
|
||||
def build_tree(G_i, edge_depth):
|
||||
"""Build the tree of cut tires on G_i, indexed by (d, face_idx)."""
|
||||
max_d = max(edge_depth.values())
|
||||
faces_by_depth = {} # d -> list of faces (each a list of edges)
|
||||
H_graphs = {} # d -> H_d graph
|
||||
for d in range(1, max_d + 1):
|
||||
faces, H_d = compute_H_d_faces(G_i, edge_depth, d)
|
||||
faces_by_depth[d] = faces
|
||||
H_graphs[d] = H_d
|
||||
# For each (d+1, face_child), find parent (d, face_parent)
|
||||
parent_of = {} # (d, face_idx) -> (d_parent, p_idx) or None
|
||||
for d in range(2, max_d + 1):
|
||||
if not faces_by_depth.get(d):
|
||||
continue
|
||||
if not faces_by_depth.get(d - 1):
|
||||
for f_idx in range(len(faces_by_depth[d])):
|
||||
parent_of[(d, f_idx)] = None
|
||||
continue
|
||||
for f_idx, child_face in enumerate(faces_by_depth[d]):
|
||||
p_idx, overlap = find_parent_face(
|
||||
child_face, H_graphs[d - 1],
|
||||
faces_by_depth[d - 1], H_graphs[d - 1])
|
||||
parent_of[(d, f_idx)] = (d - 1, p_idx) if p_idx is not None else None
|
||||
# Depth-1 cut tires are "root" tires (parent = the cut)
|
||||
if 1 in faces_by_depth:
|
||||
for f_idx in range(len(faces_by_depth[1])):
|
||||
parent_of[(1, f_idx)] = ('cut', None)
|
||||
return faces_by_depth, parent_of, H_graphs
|
||||
|
||||
|
||||
def print_tree(faces_by_depth, parent_of):
|
||||
"""Print tree of cut tires with stats."""
|
||||
# Build child list
|
||||
children = defaultdict(list)
|
||||
for node, parent in parent_of.items():
|
||||
if parent is not None:
|
||||
children[parent].append(node)
|
||||
print('\nCut tire tree:')
|
||||
# Print depth-1 cut tires (roots)
|
||||
for f_idx in range(len(faces_by_depth.get(1, []))):
|
||||
node = (1, f_idx)
|
||||
depth, fi = node
|
||||
face_len = len(faces_by_depth[depth][fi])
|
||||
print(f' Root: {node} (|f|={face_len})')
|
||||
_print_subtree(children, node, faces_by_depth, indent=4)
|
||||
|
||||
|
||||
def _print_subtree(children, node, faces_by_depth, indent):
|
||||
for child in sorted(children.get(node, [])):
|
||||
d, fi = child
|
||||
face_len = len(faces_by_depth[d][fi])
|
||||
print(f'{" " * indent}└─ {child} (|f|={face_len})')
|
||||
_print_subtree(children, child, faces_by_depth, indent + 4)
|
||||
|
||||
|
||||
def check_unique_parent(faces_by_depth, edge_depth, H_graphs, G_i):
|
||||
"""Stronger check: for each face of H_{d+1}, count how many faces
|
||||
of H_d contain it in the planar embedding. The user's claim is
|
||||
that this count is exactly 1."""
|
||||
max_d = max(edge_depth.values())
|
||||
violations = []
|
||||
for d in range(2, max_d + 1):
|
||||
if not faces_by_depth.get(d) or not faces_by_depth.get(d - 1):
|
||||
continue
|
||||
for f_idx, child_face in enumerate(faces_by_depth[d]):
|
||||
child_vertices = set(u for (u, _) in child_face) | \
|
||||
set(v for (_, v) in child_face)
|
||||
matching_parents = []
|
||||
for p_idx, p_face in enumerate(faces_by_depth[d - 1]):
|
||||
p_vertices = set(u for (u, _) in p_face) | \
|
||||
set(v for (_, v) in p_face)
|
||||
if child_vertices & p_vertices:
|
||||
matching_parents.append(p_idx)
|
||||
if len(matching_parents) > 1:
|
||||
violations.append({
|
||||
'child': (d, f_idx),
|
||||
'candidate_parents': matching_parents,
|
||||
'overlap_sizes': [
|
||||
len(child_vertices & set(u for (u, _) in
|
||||
faces_by_depth[d-1][p_idx])
|
||||
| set(v for (_, v) in
|
||||
faces_by_depth[d-1][p_idx]))
|
||||
for p_idx in matching_parents
|
||||
],
|
||||
})
|
||||
return violations
|
||||
|
||||
|
||||
def main():
|
||||
gs = parse_planar_code(HM_FILE)
|
||||
G = gs[0]
|
||||
S, cut = find_six_edge_cut(G)
|
||||
base_pos = compute_nice_layout(G)
|
||||
S1 = frozenset(G.vertices()) - frozenset(S)
|
||||
H1, pos1, ed1, _, _, _ = apply_procedure(
|
||||
G, S1, cut, base_pos, '1',
|
||||
pendant_start_id=max(G.vertices()) + 1 + 6)
|
||||
|
||||
print(f"G'_1 of Holton-McKay #0, depths 0 to {max(ed1.values())}")
|
||||
|
||||
faces_by_depth, parent_of, H_graphs = build_tree(H1, ed1)
|
||||
print_tree(faces_by_depth, parent_of)
|
||||
|
||||
# Check for ambiguous parents
|
||||
print('\nChecking for ambiguous parents...')
|
||||
violations = check_unique_parent(faces_by_depth, ed1, H_graphs, H1)
|
||||
if violations:
|
||||
print(f' {len(violations)} children have multiple candidate parents')
|
||||
for v in violations[:5]:
|
||||
print(f' {v}')
|
||||
else:
|
||||
print(' No ambiguity: every child has exactly one parent candidate '
|
||||
'(based on vertex sharing).')
|
||||
|
||||
# Now do G'_0 as well
|
||||
S0 = frozenset(S)
|
||||
H0, pos0, ed0, _, _, _ = apply_procedure(
|
||||
G, S0, cut, base_pos, '0',
|
||||
pendant_start_id=max(G.vertices()) + 1)
|
||||
print(f"\n\nG'_0 of Holton-McKay #0, depths 0 to {max(ed0.values())}")
|
||||
faces_by_depth_0, parent_of_0, _ = build_tree(H0, ed0)
|
||||
print_tree(faces_by_depth_0, parent_of_0)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -0,0 +1,4 @@
|
||||
\relax
|
||||
\newlabel{prop:tree}{{}{1}}
|
||||
\@writefile{toc}{\contentsline {paragraph}{Reformulated chain half (tree DP form).}{3}{}\protected@file@percent }
|
||||
\gdef \@abspage@last{3}
|
||||
@@ -0,0 +1,305 @@
|
||||
This is pdfTeX, Version 3.141592653-2.6-1.40.24 (TeX Live 2022) (preloaded format=pdflatex 2022.10.5) 26 MAY 2026 18:17
|
||||
entering extended mode
|
||||
restricted \write18 enabled.
|
||||
%&-line parsing enabled.
|
||||
**cut_tire_tree_structure.tex
|
||||
(./cut_tire_tree_structure.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/booktabs/booktabs.sty
|
||||
Package: booktabs 2020/01/12 v1.61803398 Publication quality tables
|
||||
\heavyrulewidth=\dimen158
|
||||
\lightrulewidth=\dimen159
|
||||
\cmidrulewidth=\dimen160
|
||||
\belowrulesep=\dimen161
|
||||
\belowbottomsep=\dimen162
|
||||
\aboverulesep=\dimen163
|
||||
\abovetopsep=\dimen164
|
||||
\cmidrulesep=\dimen165
|
||||
\cmidrulekern=\dimen166
|
||||
\defaultaddspace=\dimen167
|
||||
\@cmidla=\count274
|
||||
\@cmidlb=\count275
|
||||
\@aboverulesep=\dimen168
|
||||
\@belowrulesep=\dimen169
|
||||
\@thisruleclass=\count276
|
||||
\@lastruleclass=\count277
|
||||
\@thisrulewidth=\dimen170
|
||||
)
|
||||
(/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
|
||||
)
|
||||
(./cut_tire_tree_structure.aux)
|
||||
\openout1 = `cut_tire_tree_structure.aux'.
|
||||
|
||||
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 15.
|
||||
LaTeX Font Info: ... okay on input line 15.
|
||||
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 15.
|
||||
LaTeX Font Info: ... okay on input line 15.
|
||||
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 15.
|
||||
LaTeX Font Info: ... okay on input line 15.
|
||||
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 15.
|
||||
LaTeX Font Info: ... okay on input line 15.
|
||||
LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 15.
|
||||
LaTeX Font Info: ... okay on input line 15.
|
||||
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 15.
|
||||
LaTeX Font Info: ... okay on input line 15.
|
||||
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 15.
|
||||
LaTeX Font Info: ... okay on input line 15.
|
||||
|
||||
(/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=\dimen171
|
||||
\scratchbox=\box53
|
||||
\nofMPsegments=\count280
|
||||
\nofMParguments=\count281
|
||||
\everyMPshowfont=\toks29
|
||||
\MPscratchCnt=\count282
|
||||
\MPscratchDim=\dimen172
|
||||
\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)
|
||||
|
||||
LaTeX Font Info: Trying to load font information for U+msa on input line 16.
|
||||
|
||||
(/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 16.
|
||||
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/umsb.fd
|
||||
File: umsb.fd 2013/01/14 v3.01 AMS symbols B
|
||||
)
|
||||
Overfull \hbox (83.47609pt too wide) in paragraph at lines 66--70
|
||||
[]\OT1/cmr/m/n/10.95 Compatibility with each child $\OML/cmm/m/it/10.95 T[]$ \O
|
||||
T1/cmr/m/n/10.95 via the bi-jec-tion $\OMS/cmsy/m/n/10.95 f[]\OML/cmm/m/it/10.9
|
||||
5 T[]\OMS/cmsy/m/n/10.95 g $ f[]\OML/cmm/m/it/10.95 T[]\OMS/cmsy/m/n/10.95 g$\O
|
||||
T1/cmr/m/n/10.95 .
|
||||
[]
|
||||
|
||||
[1
|
||||
|
||||
{/usr/local/texlive/2022/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
|
||||
[2] [3] (./cut_tire_tree_structure.aux) )
|
||||
Here is how much of TeX's memory you used:
|
||||
3238 strings out of 478268
|
||||
48314 string characters out of 5846347
|
||||
348571 words of memory out of 5000000
|
||||
21428 multiletter control sequences out of 15000+600000
|
||||
477658 words of font info for 59 fonts, out of 8000000 for 9000
|
||||
1141 hyphenation exceptions out of 8191
|
||||
55i,6n,62p,240b,226s stack positions out of 10000i,1000n,20000p,200000b,200000s
|
||||
{/usr/local/texlive/2022/texmf-dist/fo
|
||||
nts/enc/dvips/cm-super/cm-super-ts1.enc}</usr/local/texlive/2022/texmf-dist/fon
|
||||
ts/type1/public/amsfonts/cm/cmbx10.pfb></usr/local/texlive/2022/texmf-dist/font
|
||||
s/type1/public/amsfonts/cm/cmbx12.pfb></usr/local/texlive/2022/texmf-dist/fonts
|
||||
/type1/public/amsfonts/cm/cmex10.pfb></usr/local/texlive/2022/texmf-dist/fonts/
|
||||
type1/public/amsfonts/cm/cmmi10.pfb></usr/local/texlive/2022/texmf-dist/fonts/t
|
||||
ype1/public/amsfonts/cm/cmmi12.pfb></usr/local/texlive/2022/texmf-dist/fonts/ty
|
||||
pe1/public/amsfonts/cm/cmmi8.pfb></usr/local/texlive/2022/texmf-dist/fonts/type
|
||||
1/public/amsfonts/cm/cmr10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/
|
||||
public/amsfonts/cm/cmr12.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/pu
|
||||
blic/amsfonts/cm/cmr17.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/publ
|
||||
ic/amsfonts/cm/cmr8.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/
|
||||
amsfonts/cm/cmsy10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/a
|
||||
msfonts/cm/cmsy6.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/ams
|
||||
fonts/cm/cmsy8.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfo
|
||||
nts/cm/cmti10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/cm-sup
|
||||
er/sfrm1095.pfb>
|
||||
Output written on cut_tire_tree_structure.pdf (3 pages, 177377 bytes).
|
||||
PDF statistics:
|
||||
90 PDF objects out of 1000 (max. 8388607)
|
||||
54 compressed objects within 1 object stream
|
||||
0 named destinations out of 1000 (max. 500000)
|
||||
1 words of extra memory for PDF output out of 10000 (max. 10000000)
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,179 @@
|
||||
\documentclass[11pt]{article}
|
||||
\usepackage{amsmath,amssymb,amsthm}
|
||||
\usepackage{graphicx}
|
||||
\usepackage{geometry}
|
||||
\usepackage{booktabs}
|
||||
\geometry{margin=1in}
|
||||
|
||||
\title{Cut tires form a tree (under depth nesting)}
|
||||
\author{}
|
||||
\date{}
|
||||
|
||||
\newtheorem*{obs}{Observation}
|
||||
\newtheorem*{prop}{Proposition}
|
||||
|
||||
\begin{document}
|
||||
\maketitle
|
||||
|
||||
\section*{The claim}
|
||||
|
||||
\begin{prop}[Cut tires form a forest]
|
||||
\label{prop:tree}
|
||||
For each side $i$ of a $6$-edge cut of $G'$, the cut tires of $G'_i$,
|
||||
parameterised by pairs $(d, f)$ with $d \ge 1$ and $f$ a face of
|
||||
$H_d$, form a \emph{forest} under the parent--child relation
|
||||
\[
|
||||
\mathrm{parent}\bigl(T_{d+1}^{(f')}\bigr) := T_d^{(f)}
|
||||
\]
|
||||
where $f$ is the unique face of $H_d$ in whose planar interior $f'$
|
||||
lies in the inherited embedding of $G'_i$.
|
||||
|
||||
The forest's roots are the cut tires at depth $1$ (one per face of
|
||||
$H_1$); their ``virtual parent'' is the cut $C$ itself.
|
||||
\end{prop}
|
||||
|
||||
\begin{proof}[Sketch]
|
||||
$H_{d+1}$ is a subgraph of $G'_i$ with the inherited planar
|
||||
embedding. Each face of $H_{d+1}$ is a maximal connected open
|
||||
region of $|\Pi| \setminus E(H_{d+1})$ in the plane.
|
||||
|
||||
In particular, every face of $H_{d+1}$ lies inside some face of $H_d$
|
||||
(since $H_d$ has fewer edges and so larger faces). ``Lies inside''
|
||||
means: the open face region of $H_{d+1}$ is a subset of an open face
|
||||
region of $H_d$. This containment is unique because the faces of
|
||||
$H_d$ partition $|\Pi| \setminus E(H_d)$.
|
||||
|
||||
Hence parent is well-defined and unique. No face of $H_{d+1}$ is
|
||||
its own parent (because $d+1 > d$). The relation defines a forest.
|
||||
|
||||
The roots are the depth-$1$ cut tires. Their ``virtual parent'' is
|
||||
the depth-$0$ pendant configuration, i.e.\ the cut $C$ itself.
|
||||
\end{proof}
|
||||
|
||||
\section*{Why this matters for the chain half}
|
||||
|
||||
Chain pigeonhole asks whether the per-tire $S_3$-orbit structure
|
||||
composes coherently through the chain. With a tree structure on
|
||||
the cut tires, this becomes a \textbf{tree dynamic-programming
|
||||
problem}, not a general graph compatibility problem:
|
||||
\begin{itemize}
|
||||
\item Process tires from leaves to root.
|
||||
\item At each leaf: $\pi(T_{\mathrm{leaf}})$ has known structure
|
||||
(e.g.\ $S_3$-orbits) from the per-tire half.
|
||||
\item Internal node $T_d^{(f)}$ combines:
|
||||
\begin{itemize}
|
||||
\item Its own internal $\pi(T)$ structure.
|
||||
\item Compatibility with each child $T_{d+1}^{(f')}$
|
||||
via the bijection $\{\text{in spokes of } T_d^{(f)}\}
|
||||
\leftrightarrow \{\text{face boundary edges of }
|
||||
T_{d+1}^{(f')}\}$.
|
||||
\end{itemize}
|
||||
\item Root: $T_1^{(\cdot)}$ projects its out-spoke colours to
|
||||
$\sigma_i \in \mathcal{R}_i$.
|
||||
\end{itemize}
|
||||
|
||||
Tree DP is well-understood: $|\mathcal{R}_i|$ can be computed
|
||||
exactly in linear time in the tree size (with size-$|\pi|$ tables
|
||||
at each node). Whether the resulting $\mathcal{R}_0$ and
|
||||
$\mathcal{R}_1$ intersect is a finite check at the cut.
|
||||
|
||||
The tree structure is also a \textbf{strong topological constraint}
|
||||
on the chain pigeonhole obstruction: any counterexample to
|
||||
chain pigeonhole at the cut must come from a tree-DP failure,
|
||||
which is much narrower than a general-graph obstruction.
|
||||
|
||||
\section*{Empirical demonstration on Holton-McKay \#0}
|
||||
|
||||
\subsection*{$G'_1$ side ($|S| = 28$, depths $0$ to $7$)}
|
||||
|
||||
Two depth-$1$ roots:
|
||||
\begin{itemize}
|
||||
\item Root $(1, 0)$: face length $12$, no children
|
||||
(the outer ``shell'' of $H_1$).
|
||||
\item Root $(1, 1)$: face length $4$, with substantial subtree:
|
||||
\begin{itemize}
|
||||
\item $(2, 0)$ \hfill $|f| = 7$
|
||||
\begin{itemize}
|
||||
\item $(3, 0)$ \hfill $|f| = 2$
|
||||
$\Rightarrow$ $(4, 0)$ \hfill $|f| = 4$
|
||||
$\Rightarrow$ $(5, 0)$ \hfill $|f| = 14$
|
||||
\item $(3, 1)$ \hfill $|f| = 2$
|
||||
$\Rightarrow$ $(4, 1)$ \hfill $|f| = 8$
|
||||
$\Rightarrow$ $(5, 1)$ \hfill $|f| = 2$
|
||||
$\Rightarrow$ $(6, 0)$ \hfill $|f| = 12$
|
||||
$\Rightarrow$ $(7, 0)$ \hfill $|f| = 2$
|
||||
\item $(3, 2)$ \hfill $|f| = 2$
|
||||
\end{itemize}
|
||||
\item $(2, 1)$ \hfill $|f| = 7$
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
|
||||
\subsection*{$G'_0$ side ($|S| = 10$, depths $0$ to $2$)}
|
||||
|
||||
Two depth-$1$ roots:
|
||||
\begin{itemize}
|
||||
\item Root $(1, 0)$: face length $9$, with one child $(2, 0)$
|
||||
($|f| = 6$).
|
||||
\item Root $(1, 1)$: face length $9$, no children.
|
||||
\end{itemize}
|
||||
|
||||
\section*{Caveats on the empirical parent identification}
|
||||
|
||||
The empirical demonstration used a vertex-sharing heuristic to
|
||||
identify parents: a face $f'$ of $H_{d+1}$ shares vertices with a
|
||||
face $f$ of $H_d$, and we picked the parent as the one with smallest
|
||||
face length. This gives ambiguous candidates in some cases ($8$
|
||||
ambiguous cases observed in $G'_1$) because vertex sharing does not
|
||||
fully determine geometric containment.
|
||||
|
||||
A rigorous parent test would use \emph{point-in-region} containment:
|
||||
pick a point in the open face of $H_{d+1}$ (e.g., the centroid of
|
||||
its boundary walk), determine which face of $H_d$ that point lies
|
||||
in (via the planar embedding's face structure). This always gives
|
||||
a unique answer.
|
||||
|
||||
The ambiguity in our empirical run doesn't reflect a violation of
|
||||
the proposition --- it's an artifact of the heuristic. Despite the
|
||||
ambiguity, the resulting tree structure looked sensible in both
|
||||
$G'_0$ and $G'_1$.
|
||||
|
||||
\section*{Consequence: the chain half becomes tractable}
|
||||
|
||||
With the tree structure established (or assumed), the chain half of
|
||||
the loose chain pigeonhole conjecture reduces to:
|
||||
|
||||
\paragraph{Reformulated chain half (tree DP form).}
|
||||
For each leaf cut tire $T_{\mathrm{leaf}}$, $\pi(T_{\mathrm{leaf}})$
|
||||
is non-empty and $S_3$-closed. Propagating bottom-up through the
|
||||
parent--child relation preserves $S_3$-closure and non-emptiness.
|
||||
At the root depth-$1$ tires, $\mathcal{R}_i$ is the join of the
|
||||
root tires' out-spoke projections. If $\mathcal{R}_i$ is
|
||||
$S_3$-closed and contains a full $S_3$-orbit on each side, then
|
||||
$\mathcal{R}_0 \cap \mathcal{R}_1 \neq \emptyset$ (containing a
|
||||
common orbit by $S_3$-equivariance).
|
||||
|
||||
The remaining questions:
|
||||
\begin{enumerate}
|
||||
\item Is non-emptiness preserved through parent-child propagation?
|
||||
\item Is $S_3$-closure preserved? (Yes, by $S_3$-equivariance of
|
||||
the proper edge $3$-colouring constraint.)
|
||||
\item Does the join of root projections contain a full $S_3$-orbit?
|
||||
\end{enumerate}
|
||||
|
||||
Each of these is now a finite tree DP claim, much more tractable
|
||||
than the original ``compose through the chain'' formulation.
|
||||
|
||||
\section*{Next step}
|
||||
|
||||
\begin{enumerate}
|
||||
\item Prove Proposition~\ref{prop:tree} rigorously using the
|
||||
point-in-region containment definition of parent.
|
||||
\item Implement the tree DP empirically on the Holton-McKay graphs
|
||||
and confirm $\mathcal{R}_0 \cap \mathcal{R}_1 \neq \emptyset$
|
||||
at the cut.
|
||||
\item Attempt an analytical bound: $|\mathcal{R}_i| \ge \mathrm{some
|
||||
function of tree size}$, ensuring $\mathcal{R}_0 \cap
|
||||
\mathcal{R}_1 \neq \emptyset$ in general.
|
||||
\end{enumerate}
|
||||
|
||||
\end{document}
|
||||
Reference in New Issue
Block a user