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:
@@ -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()
|
||||
@@ -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 }
|
||||
\newlabel{fig:dual-depth}{{1}{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 }
|
||||
\newlabel{fig:tire-example}{{2}{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}
|
||||
\newlabel{lem:tire-component}{{1.8}{4}}
|
||||
\citation{bauerfeld-pds}
|
||||
\newlabel{rem:tire-component-degenerate}{{1.9}{5}}
|
||||
\bibcite{bauerfeld-pds}{1}
|
||||
\newlabel{tocindent-1}{0pt}
|
||||
\newlabel{tocindent0}{12.7778pt}
|
||||
\newlabel{tocindent1}{17.77782pt}
|
||||
\newlabel{tocindent2}{0pt}
|
||||
\newlabel{tocindent3}{0pt}
|
||||
\newlabel{rem:tire-component-degenerate}{{1.8}{5}}
|
||||
\newlabel{rem:tire-no-extra-hypotheses}{{1.9}{5}}
|
||||
\@writefile{toc}{\contentsline {section}{\tocsection {}{}{References}}{5}{}\protected@file@percent }
|
||||
\gdef \@abspage@last{5}
|
||||
\newlabel{rem:tire-no-extra-hypotheses}{{1.10}{6}}
|
||||
\@writefile{toc}{\contentsline {section}{\tocsection {}{}{References}}{6}{}\protected@file@percent }
|
||||
\gdef \@abspage@last{6}
|
||||
|
||||
@@ -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
|
||||
restricted \write18 enabled.
|
||||
%&-line parsing enabled.
|
||||
@@ -207,36 +207,39 @@ File: fig_tire_example.png Graphic file (type png)
|
||||
<use fig_tire_example.png>
|
||||
Package pdftex.def Info: fig_tire_example.png used on input line 160.
|
||||
(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:
|
||||
3007 strings out of 478268
|
||||
42015 string characters out of 5846347
|
||||
344166 words of memory out of 5000000
|
||||
21054 multiletter control sequences out of 15000+600000
|
||||
3008 strings out of 478268
|
||||
42038 string characters out of 5846347
|
||||
345177 words of memory out of 5000000
|
||||
21055 multiletter control sequences out of 15000+600000
|
||||
475666 words of font info for 53 fonts, out of 8000000 for 9000
|
||||
1302 hyphenation exceptions out of 8191
|
||||
69i,8n,76p,625b,289s stack positions out of 10000i,1000n,20000p,200000b,200000s
|
||||
</usr/local/texlive/2022/t
|
||||
exmf-dist/fonts/type1/public/amsfonts/cm/cmbx10.pfb></usr/local/texlive/2022/te
|
||||
xmf-dist/fonts/type1/public/amsfonts/cm/cmcsc10.pfb></usr/local/texlive/2022/te
|
||||
xmf-dist/fonts/type1/public/amsfonts/cm/cmex10.pfb></usr/local/texlive/2022/tex
|
||||
mf-dist/fonts/type1/public/amsfonts/cm/cmmi10.pfb></usr/local/texlive/2022/texm
|
||||
f-dist/fonts/type1/public/amsfonts/cm/cmmi5.pfb></usr/local/texlive/2022/texmf-
|
||||
dist/fonts/type1/public/amsfonts/cm/cmmi7.pfb></usr/local/texlive/2022/texmf-di
|
||||
st/fonts/type1/public/amsfonts/cm/cmr10.pfb></usr/local/texlive/2022/texmf-dist
|
||||
/fonts/type1/public/amsfonts/cm/cmr5.pfb></usr/local/texlive/2022/texmf-dist/fo
|
||||
nts/type1/public/amsfonts/cm/cmr7.pfb></usr/local/texlive/2022/texmf-dist/fonts
|
||||
/type1/public/amsfonts/cm/cmr8.pfb></usr/local/texlive/2022/texmf-dist/fonts/ty
|
||||
pe1/public/amsfonts/cm/cmsy10.pfb></usr/local/texlive/2022/texmf-dist/fonts/typ
|
||||
e1/public/amsfonts/cm/cmsy5.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1
|
||||
/public/amsfonts/cm/cmsy7.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/p
|
||||
ublic/amsfonts/cm/cmti10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/pu
|
||||
blic/amsfonts/cm/cmti8.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/publ
|
||||
ic/amsfonts/symbols/msam10.pfb>
|
||||
Output written on paper.pdf (5 pages, 483570 bytes).
|
||||
</usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfo
|
||||
nts/cm/cmbx10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfon
|
||||
ts/cm/cmcsc10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfon
|
||||
ts/cm/cmex10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfont
|
||||
s/cm/cmmi10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts
|
||||
/cm/cmmi5.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/c
|
||||
m/cmmi7.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/
|
||||
cmr10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cm
|
||||
r5.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmr7.
|
||||
pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/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/amsfonts/cm/cmsy5.pfb></
|
||||
usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy7.pfb></us
|
||||
r/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmti10.pfb></usr
|
||||
/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmti8.pfb></usr/l
|
||||
ocal/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/symbols/msam10.pfb>
|
||||
Output written on paper.pdf (6 pages, 492830 bytes).
|
||||
PDF statistics:
|
||||
105 PDF objects out of 1000 (max. 8388607)
|
||||
61 compressed objects within 1 object stream
|
||||
108 PDF objects out of 1000 (max. 8388607)
|
||||
63 compressed objects within 1 object stream
|
||||
0 named destinations out of 1000 (max. 500000)
|
||||
11 words of extra memory for PDF output out of 10000 (max. 10000000)
|
||||
|
||||
|
||||
Binary file not shown.
@@ -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$.
|
||||
\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]
|
||||
\label{lem:tire-component}
|
||||
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
|
||||
$\partial R_{C'}$ traces a closed walk in $G$ that, by the
|
||||
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'}$
|
||||
split into multiple arcs of $v$'s rotation, the boundary walk visits
|
||||
$v$ correspondingly many times; this occurs precisely when $v$ is a
|
||||
cut-vertex of the induced subgraph on its level (either $L_d$ or
|
||||
$L_{d+1}$).
|
||||
$L_{d+1}$. By Proposition~\ref{prop:no-level-d-pinch}, the depth-$d$
|
||||
faces of $F_{C'}$ at any $v \in L_d \cap V_{C'}$ form a single
|
||||
contiguous arc in $v$'s rotation, so the source-side boundary walk
|
||||
visits each $L_d$-vertex of $V_{C'}$ exactly once: it is a simple
|
||||
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$,
|
||||
the boundary curve(s) of $R_{C'}$ on the $L_d$ side are closer to $S$
|
||||
|
||||
Reference in New Issue
Block a user