coloring_nested_tire_graphs: prove no level-d pinches (Prop 1.7)

Adds Proposition 1.7 (Source-side simple-cycle property): in any
maximal planar graph G with single-vertex source v_0, for any vertex
v at level d and any connected component C' of G'_d incident to v,
the depth-d faces of F_{C'} at v form a single contiguous arc in v's
rotation in Pi_G.  Equivalently: the source-side boundary of R_{C'}
is always a simple cycle in L_d, with no cut-vertices at level d.

Proof: contradiction via Jordan curve theorem.  If two arcs of
depth-d faces at v exist, pick level-(d-1) neighbours p, q of v in
the two gaps.  The BFS ball G[L_{<d}] is connected so admits a simple
path P from p to q.  The closed walk v -> p -> P -> q -> v is a
simple cycle W (since v is the only vertex at level >= d on it).  W
separates the plane into two regions; the two arcs at v lie on
opposite sides.  Any dual path of depth-d faces from one arc to the
other must avoid v on its intermediate faces, but consecutive
intermediate faces share edges entirely in L_{>= d}, so the dual
path stays on one side of W.  This contradicts the endpoints being
on opposite sides.

Lemma 1.8 (the tire-component lemma) now cites Proposition 1.7 to
justify that B_out is always a simple cycle.  Level-(d+1) pinches
(cut-vertices of O) remain allowed and are accommodated by the
relaxed Definition 1.5.

The empirical search (n in [7, 12], 47k + 276k = 323k components,
13k+ pinches all level-(d+1) cut-vertices of O, zero level-d
pinches) is now subsumed by the structural proof.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-25 17:04:13 -04:00
parent 78afa9aeeb
commit c2961b1833
5 changed files with 202 additions and 37 deletions
@@ -0,0 +1,93 @@
"""Attempt to construct a level-d pinch in a maximal planar graph.
Construction:
v_0 at center, pentagon a_1, ..., a_5 around v_0.
Outside the pentagon, vertex v adjacent to a_1, a_3 (non-adjacent
pentagon vertices). The "lobe" between v and the pentagon edge
a_1-a_2-a_3 contains a_2 and is triangulated by adding vertex x
in the lobe, x adjacent to a_1, a_2, a_3, v. On the OTHER side of
v (outside the V formed by edges v-a_1, v-a_3), we triangulate by
adding w_1 adjacent to a_1, a_3, a_4, a_5, v.
Vertex labels:
0 = v_0 (source)
1..5 = a_1..a_5 (pentagon, level 1)
6 = v (level 2)
7 = x (level 2)
8 = w_1 (level 2)
If this is planar and is a maximal planar graph, then v has level-1
neighbours a_1=1, a_3=3 in DIFFERENT arcs of v's rotation, separated
by level-2 neighbours x=7 on the lobe side and w_1=8 on the outer side.
This would be a level-d (d=2) pinch.
"""
import os
import sys
from collections import defaultdict
from sage.all import Graph
EDGES = [
(0, 1), (0, 2), (0, 3), (0, 4), (0, 5),
(1, 2), (2, 3), (3, 4), (4, 5), (5, 1),
(6, 1), (6, 3), (6, 7), (6, 8),
(7, 1), (7, 2), (7, 3),
(8, 1), (8, 3), (8, 5), (8, 4),
]
def main():
G = Graph(EDGES)
print(f"n = {G.order()}, m = {G.size()}")
print(f"Max planar would need m = 3n - 6 = {3 * G.order() - 6}")
print(f"Planar: {G.is_planar()}")
if not G.is_planar():
print("Not planar -- construction failed.")
return
G.is_planar(set_embedding=True)
emb = G.get_embedding()
print(f"Rotation around v=6: {emb[6]}")
dist = G.shortest_path_lengths(0)
print(f"BFS distances from source v_0=0: {dict(dist)}")
print()
# Pretty-print rotation of vertex 6 with levels
rot_6 = emb[6]
print(f"v=6's rotation in Pi_G: {rot_6}")
print(f" levels: {[dist[u] for u in rot_6]}")
# Check faces around vertex 6
faces = G.faces(embedding=emb)
faces_at_6 = []
for f in faces:
verts = [e[0] for e in f]
if 6 in verts:
d = min(dist[v] for v in verts)
faces_at_6.append((verts, d))
print(f"\nFaces at vertex 6:")
for f, d in faces_at_6:
print(f" {f} depth={d}")
# Check the depth-(d-1=1)? No, we want vertex 6 at level 2.
# We're checking: vertex 6 (level 2) with level-1 neighbors {1, 3}.
# Are they in the same arc of vertex 6's rotation?
level1_nbrs = [u for u in rot_6 if dist[u] == 1]
print(f"\nLevel-1 neighbours of v=6: {level1_nbrs}")
if len(level1_nbrs) > 1:
# Find arcs
positions = [i for i, u in enumerate(rot_6) if dist[u] == 1]
print(f" positions in rotation: {positions}")
# Are they contiguous? Count runs
in_l1 = [dist[u] == 1 for u in rot_6]
n_runs = sum(1 for i in range(len(in_l1))
if in_l1[i] and not in_l1[(i - 1) % len(in_l1)])
print(f" number of arcs of level-1 neighbours: {n_runs}")
if n_runs > 1:
print(" ==> LEVEL-d PINCH! Counterexample constructed.")
else:
print(" ==> single contiguous arc. No pinch.")
if __name__ == '__main__':
main()
+7 -6
View File
@@ -4,19 +4,20 @@
\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Dual depth in a stacked-ring triangulation $G$ with level source $S = \{0\}$. Each $G$ vertex is labelled by its level $\ell $. Each bounded face carries a dual vertex (square, joined by dashed dual edges) coloured by its dual depth $\delta (d_f) = \qopname \relax m{min}_{v \in V(f)} \ell (v)$: the central fan has depth $0$, the inner annulus depth $1$, and the outer annulus depth $2$. The outer face (the level-$3$ triangle) is excluded from the inner dual and carries no dual vertex.}}{2}{}\protected@file@percent } \@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Dual depth in a stacked-ring triangulation $G$ with level source $S = \{0\}$. Each $G$ vertex is labelled by its level $\ell $. Each bounded face carries a dual vertex (square, joined by dashed dual edges) coloured by its dual depth $\delta (d_f) = \qopname \relax m{min}_{v \in V(f)} \ell (v)$: the central fan has depth $0$, the inner annulus depth $1$, and the outer annulus depth $2$. The outer face (the level-$3$ triangle) is excluded from the inner dual and carries no dual vertex.}}{2}{}\protected@file@percent }
\newlabel{fig:dual-depth}{{1}{2}} \newlabel{fig:dual-depth}{{1}{2}}
\newlabel{def:tire-graph}{{1.5}{2}} \newlabel{def:tire-graph}{{1.5}{2}}
\citation{bauerfeld-pds}
\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces A tire graph with non-degenerate boundaries: outer boundary $B_{\mathrm {out}}$ a $6$-cycle on vertices $0,\dots ,5$ (blue), inner boundary $B_{\mathrm {in}}$ a $4$-cycle on vertices $6,\dots ,9$ (red), inner outerplanar graph $O = B_{\mathrm {in}} \cup \{7\text {--}9\}$ (with one chord, orange), and $E_{\mathrm {ann}}$ (grey) tiling the annulus between $B_{\mathrm {out}}$ and $B_{\mathrm {in}}$ by ten triangular faces.}}{3}{}\protected@file@percent } \@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces A tire graph with non-degenerate boundaries: outer boundary $B_{\mathrm {out}}$ a $6$-cycle on vertices $0,\dots ,5$ (blue), inner boundary $B_{\mathrm {in}}$ a $4$-cycle on vertices $6,\dots ,9$ (red), inner outerplanar graph $O = B_{\mathrm {in}} \cup \{7\text {--}9\}$ (with one chord, orange), and $E_{\mathrm {ann}}$ (grey) tiling the annulus between $B_{\mathrm {out}}$ and $B_{\mathrm {in}}$ by ten triangular faces.}}{3}{}\protected@file@percent }
\newlabel{fig:tire-example}{{2}{3}} \newlabel{fig:tire-example}{{2}{3}}
\newlabel{rem:tire-counts}{{1.6}{3}} \newlabel{rem:tire-counts}{{1.6}{3}}
\newlabel{lem:tire-component}{{1.7}{3}} \newlabel{prop:no-level-d-pinch}{{1.7}{3}}
\citation{bauerfeld-pds} \citation{bauerfeld-pds}
\newlabel{lem:tire-component}{{1.8}{4}}
\citation{bauerfeld-pds}
\newlabel{rem:tire-component-degenerate}{{1.9}{5}}
\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:tire-component-degenerate}{{1.8}{5}} \newlabel{rem:tire-no-extra-hypotheses}{{1.10}{6}}
\newlabel{rem:tire-no-extra-hypotheses}{{1.9}{5}} \@writefile{toc}{\contentsline {section}{\tocsection {}{}{References}}{6}{}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\tocsection {}{}{References}}{5}{}\protected@file@percent } \gdef \@abspage@last{6}
\gdef \@abspage@last{5}
+29 -26
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 16:37 This is pdfTeX, Version 3.141592653-2.6-1.40.24 (TeX Live 2022) (preloaded format=pdflatex 2022.10.5) 25 MAY 2026 17:03
entering extended mode entering extended mode
restricted \write18 enabled. restricted \write18 enabled.
%&-line parsing enabled. %&-line parsing enabled.
@@ -207,36 +207,39 @@ File: fig_tire_example.png Graphic file (type png)
<use fig_tire_example.png> <use fig_tire_example.png>
Package pdftex.def Info: fig_tire_example.png used on input line 160. Package pdftex.def Info: fig_tire_example.png used on input line 160.
(pdftex.def) Requested size: 280.79956pt x 188.56097pt. (pdftex.def) Requested size: 280.79956pt x 188.56097pt.
[3 <./fig_tire_example.png>] [4] [5] (./paper.aux) ) [3 <./fig_tire_example.png>] [4]
Underfull \vbox (badness 1270) has occurred while \output is active []
[5]
[6] (./paper.aux) )
Here is how much of TeX's memory you used: Here is how much of TeX's memory you used:
3007 strings out of 478268 3008 strings out of 478268
42015 string characters out of 5846347 42038 string characters out of 5846347
344166 words of memory out of 5000000 345177 words of memory out of 5000000
21054 multiletter control sequences out of 15000+600000 21055 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,625b,289s stack positions out of 10000i,1000n,20000p,200000b,200000s 69i,8n,76p,625b,289s stack positions out of 10000i,1000n,20000p,200000b,200000s
</usr/local/texlive/2022/t </usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfo
exmf-dist/fonts/type1/public/amsfonts/cm/cmbx10.pfb></usr/local/texlive/2022/te nts/cm/cmbx10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfon
xmf-dist/fonts/type1/public/amsfonts/cm/cmcsc10.pfb></usr/local/texlive/2022/te ts/cm/cmcsc10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfon
xmf-dist/fonts/type1/public/amsfonts/cm/cmex10.pfb></usr/local/texlive/2022/tex ts/cm/cmex10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfont
mf-dist/fonts/type1/public/amsfonts/cm/cmmi10.pfb></usr/local/texlive/2022/texm s/cm/cmmi10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts
f-dist/fonts/type1/public/amsfonts/cm/cmmi5.pfb></usr/local/texlive/2022/texmf- /cm/cmmi5.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/c
dist/fonts/type1/public/amsfonts/cm/cmmi7.pfb></usr/local/texlive/2022/texmf-di m/cmmi7.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/
st/fonts/type1/public/amsfonts/cm/cmr10.pfb></usr/local/texlive/2022/texmf-dist cmr10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cm
/fonts/type1/public/amsfonts/cm/cmr5.pfb></usr/local/texlive/2022/texmf-dist/fo r5.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmr7.
nts/type1/public/amsfonts/cm/cmr7.pfb></usr/local/texlive/2022/texmf-dist/fonts pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmr8.pfb
/type1/public/amsfonts/cm/cmr8.pfb></usr/local/texlive/2022/texmf-dist/fonts/ty ></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy10.pfb>
pe1/public/amsfonts/cm/cmsy10.pfb></usr/local/texlive/2022/texmf-dist/fonts/typ </usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy5.pfb></
e1/public/amsfonts/cm/cmsy5.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1 usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy7.pfb></us
/public/amsfonts/cm/cmsy7.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/p r/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmti10.pfb></usr
ublic/amsfonts/cm/cmti10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/pu /local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmti8.pfb></usr/l
blic/amsfonts/cm/cmti8.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/publ ocal/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/symbols/msam10.pfb>
ic/amsfonts/symbols/msam10.pfb> Output written on paper.pdf (6 pages, 492830 bytes).
Output written on paper.pdf (5 pages, 483570 bytes).
PDF statistics: PDF statistics:
105 PDF objects out of 1000 (max. 8388607) 108 PDF objects out of 1000 (max. 8388607)
61 compressed objects within 1 object stream 63 compressed objects within 1 object stream
0 named destinations out of 1000 (max. 500000) 0 named destinations out of 1000 (max. 500000)
11 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.
+73 -5
View File
@@ -178,6 +178,68 @@ boundary is degenerate (so $\min(m, k) = 1$), there are $m + k - 1$
triangular faces and $|E_{\mathrm{ann}}| = m + k - 1$. triangular faces and $|E_{\mathrm{ann}}| = m + k - 1$.
\end{remark} \end{remark}
\begin{proposition}[Source-side simple-cycle property]
\label{prop:no-level-d-pinch}
Let $G$ be a maximal planar graph with planar embedding $\Pi_G$ and
single-vertex source $v_0$. Let $d \geq 1$, $v \in L_d$, and let
$C'$ be a connected component of $G'_d$ such that $v$ is incident to
some face in $F_{C'}$. Then the depth-$d$ faces in $F_{C'}$ incident
to $v$ form a single contiguous arc in $v$'s rotation in $\Pi_G$.
Equivalently: for any such component, the source-side boundary of
$R_{C'}$ is a simple cycle in $L_d$ (no cut-vertices at level $d$).
\end{proposition}
\begin{proof}
Suppose for contradiction that the depth-$d$ faces in $F_{C'}$ at $v$
lie in two or more disjoint arcs of $v$'s rotation. Adjacent vertices
in $G$ differ in level by at most $1$, so a face at $v$ has depth
exactly $d$ iff both other vertices have level $\geq d$, and depth
$\leq d-1$ iff at least one has level $d-1$. Hence the gaps between
the depth-$d$ arcs at $v$ are populated by level-$(d-1)$ neighbours of
$v$, occurring in at least two disjoint arcs of $v$'s rotation. Pick
$p$ in one such gap and $q$ in another.
The BFS ball $G[L_{<d}]$ is connected, so there exists a simple path
$P$ in $G[L_{<d}]$ from $p$ to $q$. Define the closed walk
\[
W \;:=\; v \to p \to P \to q \to v.
\]
Every vertex of $P$ lies in $L_{<d}$, while $\ell(v) = d$, so $v$ is
distinct from every vertex of $P$; $P$ is simple, so its internal
vertices are distinct; and $p \neq q$ since they lie in different gaps.
Hence $W$ is a simple cycle in $G$.
By the Jordan curve theorem, the planar embedding of $W$ divides $\Pi_G$
into two regions. In $v$'s rotation, the edges $v-p$ and $v-q$ lie at
two specific positions, and they split the rotation into two arcs;
each arc lies in one of the two regions determined by $W$. By choice
of $p, q$, the two arcs of depth-$d$ faces at $v$ in $F_{C'}$ lie in
different regions of $W$ (i.e., one arc on each side).
Since $C'$ is connected in $G'$ and contains depth-$d$ faces in both
arcs, there is a dual path $f_1, f_2, \ldots, f_k$ in $G'_d$ with
$f_1, f_k \in F_{C'}$ incident to $v$ in different arcs, and with the
intermediate faces $f_2, \ldots, f_{k-1}$ not incident to $v$ (a
shortest such dual path). Consecutive faces $f_i, f_{i+1}$ share an
edge $e_i$ of $G$; for $i \geq 2$, both endpoints of $e_i$ lie in
$L_{\geq d}$ (since neither $f_i$ nor $f_{i+1}$ is incident to $v$,
all six vertices of these two triangles lie in $L_{\geq d}$). In
particular, $e_i$ shares no endpoint with $W$ except possibly $v$ ---
and $v$ is excluded from $f_2, \ldots, f_{k-1}$.
A planar edge with neither endpoint on a simple closed planar curve
$W$ has both of its incident faces on the same side of $W$. Applying
this to each $e_i$ ($i \geq 2$) inductively: starting from $f_2$ on
the same side of $W$ as $f_1$ (their shared edge $e_1 = w-w'$ opposite
to $v$ in $f_1$ has $w, w' \in L_{\geq d}$ and hence is not on $W$),
the path $f_2 \to f_3 \to \cdots \to f_{k-1} \to f_k$ stays on one
side of $W$.
But $f_1$ and $f_k$ lie on different sides of $W$ (by construction),
contradicting the conclusion that the entire path lies on one side.
\end{proof}
\begin{lemma}[Tire-component lemma] \begin{lemma}[Tire-component lemma]
\label{lem:tire-component} \label{lem:tire-component}
Let $G$ be a maximal planar graph and let $S \subseteq V(G)$ be a level Let $G$ be a maximal planar graph and let $S \subseteq V(G)$ be a level
@@ -249,11 +311,17 @@ is monochromatic in level.
\emph{Boundary structure.} Each connected component of \emph{Boundary structure.} Each connected component of
$\partial R_{C'}$ traces a closed walk in $G$ that, by the $\partial R_{C'}$ traces a closed walk in $G$ that, by the
monochromaticity above, lies entirely in $L_d$ or entirely in monochromaticity above, lies entirely in $L_d$ or entirely in
$L_{d+1}$. At a vertex $v \in V_{C'}$ where the faces of $F_{C'}$ $L_{d+1}$. By Proposition~\ref{prop:no-level-d-pinch}, the depth-$d$
split into multiple arcs of $v$'s rotation, the boundary walk visits faces of $F_{C'}$ at any $v \in L_d \cap V_{C'}$ form a single
$v$ correspondingly many times; this occurs precisely when $v$ is a contiguous arc in $v$'s rotation, so the source-side boundary walk
cut-vertex of the induced subgraph on its level (either $L_d$ or visits each $L_d$-vertex of $V_{C'}$ exactly once: it is a simple
$L_{d+1}$). cycle. At vertices $v \in L_{d+1} \cap V_{C'}$ the depth-$d$ faces
may split into multiple arcs of $v$'s rotation; this corresponds
exactly to $v$ being a cut-vertex of $O$, and the inner-side
boundary walk visits $v$ correspondingly many times --- which is
already accommodated by Definition~\ref{def:tire-graph} (where
$B_{\mathrm{in}}$ is the outer-face boundary closed walk of $O$, not
necessarily a simple cycle).
\emph{Outer boundary.} Because $S$ lies on the outer face of $\Pi_G$, \emph{Outer boundary.} Because $S$ lies on the outer face of $\Pi_G$,
the boundary curve(s) of $R_{C'}$ on the $L_d$ side are closer to $S$ the boundary curve(s) of $R_{C'}$ on the $L_d$ side are closer to $S$