diff --git a/papers/coloring_nested_tire_graphs/notes/fig_blocktree.png b/papers/coloring_nested_tire_graphs/notes/fig_blocktree.png new file mode 100644 index 0000000..3c86665 Binary files /dev/null and b/papers/coloring_nested_tire_graphs/notes/fig_blocktree.png differ diff --git a/papers/coloring_nested_tire_graphs/notes/fig_corona.png b/papers/coloring_nested_tire_graphs/notes/fig_corona.png new file mode 100644 index 0000000..3387976 Binary files /dev/null and b/papers/coloring_nested_tire_graphs/notes/fig_corona.png differ diff --git a/papers/coloring_nested_tire_graphs/notes/fig_cycle.png b/papers/coloring_nested_tire_graphs/notes/fig_cycle.png new file mode 100644 index 0000000..5156a5d Binary files /dev/null and b/papers/coloring_nested_tire_graphs/notes/fig_cycle.png differ diff --git a/papers/coloring_nested_tire_graphs/notes/fig_path.png b/papers/coloring_nested_tire_graphs/notes/fig_path.png new file mode 100644 index 0000000..8c62727 Binary files /dev/null and b/papers/coloring_nested_tire_graphs/notes/fig_path.png differ diff --git a/papers/coloring_nested_tire_graphs/notes/fig_star.png b/papers/coloring_nested_tire_graphs/notes/fig_star.png new file mode 100644 index 0000000..c57e35a Binary files /dev/null and b/papers/coloring_nested_tire_graphs/notes/fig_star.png differ diff --git a/papers/coloring_nested_tire_graphs/notes/fig_theta.png b/papers/coloring_nested_tire_graphs/notes/fig_theta.png new file mode 100644 index 0000000..af9cc38 Binary files /dev/null and b/papers/coloring_nested_tire_graphs/notes/fig_theta.png differ diff --git a/papers/coloring_nested_tire_graphs/notes/generate_figures.py b/papers/coloring_nested_tire_graphs/notes/generate_figures.py new file mode 100644 index 0000000..57c5a03 --- /dev/null +++ b/papers/coloring_nested_tire_graphs/notes/generate_figures.py @@ -0,0 +1,284 @@ +"""Generate small figures for the menagerie note. + +Each figure is a small graph drawing. Edges are colored when a Tait +coloring is being illustrated; otherwise edges are gray. + +Figures produced: + fig_path.png -- path P_5 with a proper 3-edge-coloring + fig_cycle.png -- cycle C_6 with a proper 3-edge-coloring + fig_corona.png -- corona C_5 ∘ K_1 with a proper 3-edge-coloring + fig_star.png -- star K_{1,3} with a proper 3-edge-coloring + fig_blocktree.png -- a subcubic outerplanar example showing two + cycle-blocks attached at a cut-vertex + fig_theta.png -- theta(2,2,2) = K_{2,3}: NOT outerplanar (counter- + example, drawn in red) +""" +import math +import os +import matplotlib.pyplot as plt + + +HERE = os.path.dirname(os.path.abspath(__file__)) + +COLORS = ['#1f77b4', '#d62728', '#2ca02c'] # a, b, c for the 3 colors + + +def draw_graph(ax, pos, edges, edge_colors=None, vertex_color='black', + vertex_size=140, edge_width=2.5, show_labels=True): + """Draw a small graph; pos = dict v->(x,y); edges = list of (u,v); + edge_colors = list of color strings matching edges, or None for gray.""" + for i, (u, v) in enumerate(edges): + x1, y1 = pos[u]; x2, y2 = pos[v] + c = edge_colors[i] if edge_colors else '#888888' + ax.plot([x1, x2], [y1, y2], color=c, linewidth=edge_width, + solid_capstyle='round', zorder=1) + for v, (x, y) in pos.items(): + ax.plot(x, y, 'o', color=vertex_color, markersize=vertex_size**0.5 * 2, + zorder=2) + if show_labels: + ax.annotate(str(v), (x, y), color='white', ha='center', + va='center', fontsize=8, fontweight='bold', zorder=3) + + +def fig_path(filename, n=5): + """Path P_n with a proper 3-edge-coloring.""" + pos = {i: (i, 0) for i in range(n)} + edges = [(i, i+1) for i in range(n-1)] + # Greedy 3-edge-coloring: alternate + edge_colors = [] + used = None + for i in range(n-1): + if i == 0: + c = 0 + else: + c = (used + 1) % 3 + edge_colors.append(COLORS[c]) + used = c + fig, ax = plt.subplots(figsize=(4.2, 1.0)) + draw_graph(ax, pos, edges, edge_colors=edge_colors) + ax.set_xlim(-0.5, n - 0.5) + ax.set_ylim(-0.5, 0.5) + ax.set_aspect('equal'); ax.axis('off') + plt.savefig(filename, dpi=160, bbox_inches='tight') + plt.close() + + +def fig_cycle(filename, n=6): + """Cycle C_n with a proper 3-edge-coloring (alternating where possible).""" + pos = {i: (math.cos(2*math.pi*i/n + math.pi/2), + math.sin(2*math.pi*i/n + math.pi/2)) for i in range(n)} + edges = [(i, (i+1) % n) for i in range(n)] + # For even n, alternate 2 colors and one edge gets the 3rd + if n % 2 == 0: + ec = [] + for i in range(n): + ec.append(COLORS[i % 2]) + else: + ec = [COLORS[i % 3] for i in range(n)] + # may not be proper for general n; let's adjust manually for n=6 + if n == 6: + ec = [COLORS[0], COLORS[1], COLORS[0], COLORS[1], COLORS[0], COLORS[1]] + fig, ax = plt.subplots(figsize=(2.4, 2.4)) + draw_graph(ax, pos, edges, edge_colors=ec) + ax.set_xlim(-1.3, 1.3); ax.set_ylim(-1.3, 1.3) + ax.set_aspect('equal'); ax.axis('off') + plt.savefig(filename, dpi=160, bbox_inches='tight') + plt.close() + + +def fig_corona(filename, n=5): + """Corona C_n ∘ K_1: cycle with one leaf attached to each vertex.""" + pos = {} + for i in range(n): + pos[i] = (math.cos(2*math.pi*i/n + math.pi/2), + math.sin(2*math.pi*i/n + math.pi/2)) + for i in range(n): + # leaf at radius 1.6 + pos[n + i] = (1.65 * math.cos(2*math.pi*i/n + math.pi/2), + 1.65 * math.sin(2*math.pi*i/n + math.pi/2)) + cycle_edges = [(i, (i+1) % n) for i in range(n)] + leaf_edges = [(i, n + i) for i in range(n)] + edges = cycle_edges + leaf_edges + # Color the cycle as alternating (or for odd n, use 3 colors) + ec = [] + if n % 2 == 0: + for i in range(n): + ec.append(COLORS[i % 2]) + # Each leaf gets the 3rd color (since at each vertex cycle uses 2 colors) + for i in range(n): + ec.append(COLORS[2]) + else: + # n=5: cycle needs 3 colors + # Use a manual valid coloring + ec = [COLORS[0], COLORS[1], COLORS[0], COLORS[1], COLORS[2]] + # Each leaf at vertex i gets the third color absent at vertex i + # Vertex 0: cycle edges colored COLORS[4-1=color of last edge] = COLORS[2], COLORS[0]; missing = COLORS[1] + # Hmm let me compute per vertex + cycle_color_at_vertex = [None] * n + for i, (u, v) in enumerate(cycle_edges): + cycle_color_at_vertex[u] = ec[i] if cycle_color_at_vertex[u] is None else (cycle_color_at_vertex[u], ec[i]) + cycle_color_at_vertex[v] = ec[i] if cycle_color_at_vertex[v] is None else (cycle_color_at_vertex[v], ec[i]) + # For vertex v: 2 cycle colors, leaf gets 3rd + leaf_color = [] + for v in range(n): + used = set() + for i, (a, b) in enumerate(cycle_edges): + if v in (a, b): + used.add(ec[i]) + third = [c for c in COLORS if c not in used][0] + leaf_color.append(third) + ec += leaf_color + fig, ax = plt.subplots(figsize=(3.6, 3.6)) + draw_graph(ax, pos, edges, edge_colors=ec) + ax.set_xlim(-2.0, 2.0); ax.set_ylim(-2.0, 2.0) + ax.set_aspect('equal'); ax.axis('off') + plt.savefig(filename, dpi=160, bbox_inches='tight') + plt.close() + + +def fig_star(filename): + """Star K_{1,3} = central vertex + 3 leaves.""" + pos = {0: (0, 0), + 1: (1, 0), + 2: (math.cos(2*math.pi/3), math.sin(2*math.pi/3)), + 3: (math.cos(4*math.pi/3), math.sin(4*math.pi/3))} + edges = [(0, 1), (0, 2), (0, 3)] + ec = [COLORS[0], COLORS[1], COLORS[2]] # one of 3! = 6 proper colorings + fig, ax = plt.subplots(figsize=(2.4, 2.4)) + draw_graph(ax, pos, edges, edge_colors=ec) + ax.set_xlim(-1.3, 1.3); ax.set_ylim(-1.3, 1.3) + ax.set_aspect('equal'); ax.axis('off') + plt.savefig(filename, dpi=160, bbox_inches='tight') + plt.close() + + +def fig_blocktree(filename): + """A subcubic outerplanar with block-cut tree structure: two cycles + glued at a cut vertex.""" + pos = { + # left cycle (triangle) + 0: (-2.0, 0.7), + 1: (-2.0, -0.7), + 2: (-1.0, 0.0), + # right cycle (4-cycle) + 3: (-0.0, 0.7), + 4: (1.0, 0.7), + 5: (1.0, -0.7), + 6: (0.0, -0.7), + } + # block 1 is a triangle 0-1-2; vertex 2 is the cut-vertex + edges_block1 = [(0, 1), (1, 2), (0, 2)] + # block 2 is a 4-cycle 2-3-4-5-6-2; oh wait vertex 2 should connect into it + # Let me redo: block 2 vertices are 2, 3, 4, 5, 6 forming a 5-cycle + pos[2] = (-1.0, 0.0) + pos[3] = (-0.3, 0.7) + pos[4] = (0.8, 0.7) + pos[5] = (0.8, -0.7) + pos[6] = (-0.3, -0.7) + edges_block2 = [(2, 3), (3, 4), (4, 5), (5, 6), (6, 2)] + edges = edges_block1 + edges_block2 + # Proper 3-edge-coloring: tricky for triangle + 5-cycle + # Triangle: needs 3 distinct colors + # 5-cycle: 3-edge-coloring possible (3 colors arranged like 0-1-0-1-2 or similar) + # At cut vertex 2: incident to 2 edges from each block (triangle: 1-2 and 0-2; 5-cycle: 2-3 and 6-2) + # 2's incident edges: (0,2), (1,2), (2,3), (6,2) — 4 edges. Δ = 4! + # So this example has Δ=4 at vertex 2. Not subcubic. + # Let me redo with Δ ≤ 3. + # Maybe block 2 should be a triangle too, joined at a vertex. + # Triangle 0-1-2 + Triangle 2-3-4, sharing vertex 2. + pos = { + 0: (-2.0, 0.7), + 1: (-2.0, -0.7), + 2: (-1.0, 0.0), + 3: (0.0, 0.7), + 4: (0.0, -0.7), + } + edges = [(0, 1), (1, 2), (0, 2), + (2, 3), (3, 4), (2, 4)] + # At vertex 2: 4 edges (1-2, 0-2, 2-3, 2-4) — STILL Δ=4! + # Two triangles sharing a vertex = bowtie; degree at shared vertex = 4. NOT subcubic. + # For subcubic + outerplanar with 2 cycle-blocks at a cut-vertex: impossible + # because the cut-vertex has degree >= 4 (2 from each block). + # So actually for subcubic outerplanar, cut-vertices can have AT MOST one + # cycle-block incident. i.e. 2 cycle-blocks share an EDGE (forming a single + # 2-connected block), not just a vertex. + # Let me instead show: a triangle with 3 pendants (corona-like) but as a + # tree-of-blocks: triangle + tree pendant. + pos = { + 0: (-1.0, 0.7), + 1: (-1.0, -0.7), + 2: (0.0, 0.0), + 3: (1.0, 0.5), + 4: (1.6, 1.0), + 5: (1.0, -0.5), + 6: (1.6, -1.0), + } + edges = [(0, 1), (1, 2), (0, 2), # triangle block + (2, 3), (3, 4), # tree pendant 1 + (2, 5), (5, 6)] # tree pendant 2 + # NOW: deg at 2 = 4. Still not Δ ≤ 3. + # Hmm. Triangle + 2 pendants at one vertex: 2+2 = 4 at shared vertex. + # For subcubic: at most 1 pendant at any triangle vertex. + pos = { + 0: (-1.0, 0.7), + 1: (-1.0, -0.7), + 2: (0.0, 0.0), + 3: (1.0, 0.0), + 4: (2.0, 0.5), + 5: (2.0, -0.5), + } + edges = [(0, 1), (1, 2), (0, 2), # triangle + (2, 3), # pendant edge to 3 + (3, 4), (3, 5)] # 3 branches into 2 leaves + # vertex 2 degree: 3 (to 0, 1, 3). ✓ + # vertex 3 degree: 3 (to 2, 4, 5). ✓ + # All others ≤ 2. So Δ = 3. ✓ + # And it's outerplanar (planar with all vertices on outer face). + ec = [COLORS[0], COLORS[1], COLORS[2], # triangle: 3 distinct colors + COLORS[0], # 2-3 + COLORS[1], COLORS[2]] # 3-4, 3-5 (must differ from 2-3 and each other) + fig, ax = plt.subplots(figsize=(5.0, 2.4)) + draw_graph(ax, pos, edges, edge_colors=ec) + ax.set_xlim(-1.6, 2.5); ax.set_ylim(-1.2, 1.2) + ax.set_aspect('equal'); ax.axis('off') + plt.savefig(filename, dpi=160, bbox_inches='tight') + plt.close() + + +def fig_theta(filename): + """Theta graph theta(2,2,2) = K_{2,3}: outside the menagerie because + not outerplanar (contains K_{2,3} = itself). Drawn in red as a + counterexample.""" + pos = { + 0: (-1.0, 0.0), + 1: (1.0, 0.0), + 2: (0.0, 0.8), + 3: (0.0, 0.0), + 4: (0.0, -0.8), + } + edges = [(0, 2), (2, 1), + (0, 3), (3, 1), + (0, 4), (4, 1)] + # Color in muted gray-red, no specific edge coloring + ec = ['#aa4444'] * len(edges) + fig, ax = plt.subplots(figsize=(3.4, 2.4)) + draw_graph(ax, pos, edges, edge_colors=ec, vertex_color='#aa4444') + ax.set_xlim(-1.5, 1.5); ax.set_ylim(-1.3, 1.3) + ax.set_aspect('equal'); ax.axis('off') + plt.savefig(filename, dpi=160, bbox_inches='tight') + plt.close() + + +def main(): + out_dir = HERE + fig_path(os.path.join(out_dir, 'fig_path.png'), n=5) + fig_cycle(os.path.join(out_dir, 'fig_cycle.png'), n=6) + fig_corona(os.path.join(out_dir, 'fig_corona.png'), n=5) + fig_star(os.path.join(out_dir, 'fig_star.png')) + fig_blocktree(os.path.join(out_dir, 'fig_blocktree.png')) + fig_theta(os.path.join(out_dir, 'fig_theta.png')) + print(f"Wrote figures to {out_dir}") + + +if __name__ == '__main__': + main() diff --git a/papers/coloring_nested_tire_graphs/notes/menagerie.aux b/papers/coloring_nested_tire_graphs/notes/menagerie.aux new file mode 100644 index 0000000..4089a83 --- /dev/null +++ b/papers/coloring_nested_tire_graphs/notes/menagerie.aux @@ -0,0 +1,2 @@ +\relax +\gdef \@abspage@last{4} diff --git a/papers/coloring_nested_tire_graphs/notes/menagerie.log b/papers/coloring_nested_tire_graphs/notes/menagerie.log new file mode 100644 index 0000000..1a1cce1 --- /dev/null +++ b/papers/coloring_nested_tire_graphs/notes/menagerie.log @@ -0,0 +1,332 @@ +This is pdfTeX, Version 3.141592653-2.6-1.40.24 (TeX Live 2022) (preloaded format=pdflatex 2022.10.5) 25 MAY 2026 21:05 +entering extended mode + restricted \write18 enabled. + %&-line parsing enabled. +**menagerie.tex +(./menagerie.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/caption/caption.sty +Package: caption 2022/03/01 v3.6b Customizing captions (AR) + +(/usr/local/texlive/2022/texmf-dist/tex/latex/caption/caption3.sty +Package: caption3 2022/03/17 v2.3b caption3 kernel (AR) +\caption@tempdima=\dimen158 +\captionmargin=\dimen159 +\caption@leftmargin=\dimen160 +\caption@rightmargin=\dimen161 +\caption@width=\dimen162 +\caption@indent=\dimen163 +\caption@parindent=\dimen164 +\caption@hangindent=\dimen165 +Package caption Info: Standard document class detected. +) +\c@caption@flags=\count274 +\c@continuedfloat=\count275 +) +(/usr/local/texlive/2022/texmf-dist/tex/latex/caption/subcaption.sty +Package: subcaption 2022/01/07 v1.5 Sub-captions (AR) +\c@subfigure=\count276 +\c@subtable=\count277 +) +(/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 +) +(./menagerie.aux) +\openout1 = `menagerie.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 16. +LaTeX Font Info: ... okay on input line 16. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 16. +LaTeX Font Info: ... okay on input line 16. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 16. +LaTeX Font Info: ... okay on input line 16. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 16. +LaTeX Font Info: ... okay on input line 16. +LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 16. +LaTeX Font Info: ... okay on input line 16. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 16. +LaTeX Font Info: ... okay on input line 16. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 16. +LaTeX Font Info: ... okay on input line 16. + +(/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=\dimen166 +\scratchbox=\box53 +\nofMPsegments=\count280 +\nofMParguments=\count281 +\everyMPshowfont=\toks29 +\MPscratchCnt=\count282 +\MPscratchDim=\dimen167 +\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: +* layout: +* 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) + +Package caption Info: Begin \AtBeginDocument code. +Package caption Info: End \AtBeginDocument code. +LaTeX Font Info: Trying to load font information for U+msa on input line 17. + +(/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 17. + + +(/usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/umsb.fd +File: umsb.fd 2013/01/14 v3.01 AMS symbols B +) + +File: fig_path.png Graphic file (type png) + +Package pdftex.def Info: fig_path.png used on input line 36. +(pdftex.def) Requested size: 258.36668pt x 63.66019pt. + +File: fig_cycle.png Graphic file (type png) + +Package pdftex.def Info: fig_cycle.png used on input line 51. +(pdftex.def) Requested size: 150.32504pt x 150.33832pt. + [1 + +{/usr/local/texlive/2022/texmf-var/fonts/map/pdftex/updmap/pdftex.map} <./fig_p +ath.png> <./fig_cycle.png>] + +File: fig_star.png Graphic file (type png) + +Package pdftex.def Info: fig_star.png used on input line 65. +(pdftex.def) Requested size: 117.43875pt x 117.44266pt. + +File: fig_corona.png Graphic file (type png) + +Package pdftex.def Info: fig_corona.png used on input line 76. +(pdftex.def) Requested size: 197.29623pt x 197.29816pt. + [2 <./fig_star.png> <./fig_corona.png>] + +File: fig_blocktree.png Graphic file (type png) + +Package pdftex.def Info: fig_blocktree.png used on input line 122. +(pdftex.def) Requested size: 258.36668pt x 157.34296pt. + +File: fig_theta.png Graphic file (type png) + +Package pdftex.def Info: fig_theta.png used on input line 146. +(pdftex.def) Requested size: 150.32504pt x 131.79225pt. + [3 <./fig_blocktree.png>] [4 <./fig_theta.png>] (./menagerie.aux) ) +Here is how much of TeX's memory you used: + 4626 strings out of 478268 + 75252 string characters out of 5846347 + 370157 words of memory out of 5000000 + 22807 multiletter control sequences out of 15000+600000 + 478664 words of font info for 64 fonts, out of 8000000 for 9000 + 1141 hyphenation exceptions out of 8191 + 55i,6n,63p,245b,198s stack positions out of 10000i,1000n,20000p,200000b,200000s + +Output written on menagerie.pdf (4 pages, 197957 bytes). +PDF statistics: + 95 PDF objects out of 1000 (max. 8388607) + 50 compressed objects within 1 object stream + 0 named destinations out of 1000 (max. 500000) + 31 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/papers/coloring_nested_tire_graphs/notes/menagerie.pdf b/papers/coloring_nested_tire_graphs/notes/menagerie.pdf new file mode 100644 index 0000000..df64440 Binary files /dev/null and b/papers/coloring_nested_tire_graphs/notes/menagerie.pdf differ diff --git a/papers/coloring_nested_tire_graphs/notes/menagerie.tex b/papers/coloring_nested_tire_graphs/notes/menagerie.tex new file mode 100644 index 0000000..7b37995 --- /dev/null +++ b/papers/coloring_nested_tire_graphs/notes/menagerie.tex @@ -0,0 +1,159 @@ +\documentclass[11pt]{article} +\usepackage{amsmath,amssymb,amsthm} +\usepackage{graphicx} +\usepackage{geometry} +\usepackage{caption} +\usepackage{subcaption} +\geometry{margin=1in} + +\title{Edge $3$-colorings of small outerplanar graphs with $\Delta\leq3$:\\ + a menagerie} +\author{} +\date{} + +\newtheorem*{prop}{Proposition} + +\begin{document} +\maketitle + +\section*{Setup} + +For a graph $G$ write $P_e(G,k)$ for the number of proper $k$-edge-colorings of +$G$ (= the chromatic polynomial of the line graph $L(G)$ evaluated at $k$). +Throughout this note $\Delta(G)$ denotes the maximum degree of $G$; we are +interested in $k=3$ and $\Delta(G)\le3$, with $G$ outerplanar. + +There is no \emph{universal} closed form for $P_e(G,3)$ on the class of +subcubic outerplanar graphs, but the class is small enough that every $G$ in +it decomposes along its block--cut tree into building blocks each of which +admits a closed-form count. The building blocks form a short menagerie. + +\section*{The menagerie} + +\subsection*{1.~Path $P_n$ \;($n$ vertices, $n-1$ edges; $\Delta\le 2$)} + +\begin{center} +\includegraphics[width=0.55\textwidth]{fig_path.png} +\end{center} + +The line graph $L(P_n)$ is the path $P_{n-1}$, so +\[ +P_e(P_n,k) \;=\; P_{\text{vert}}(P_{n-1},k) \;=\; k(k-1)^{n-2}, +\qquad +P_e(P_n,3) \;=\; 3\cdot 2^{n-2}. +\] +(For a single edge, $n=2$, the count is $3$; for two edges in a row, $n=3$, +the count is $6$.) + +\subsection*{2.~Cycle $C_n$ \;($\Delta=2$)} + +\begin{center} +\includegraphics[width=0.32\textwidth]{fig_cycle.png} +\end{center} + +The line graph $L(C_n)=C_n$, so +\[ +P_e(C_n,k) \;=\; (k-1)^n + (-1)^n(k-1), +\qquad +P_e(C_n,3) \;=\; 2^n + 2(-1)^n. +\] +For even $n$ the count is $2^n+2$; for odd $n$ it is $2^n-2$. + +\subsection*{3.~Star $K_{1,3}$ \;(a single $\Delta=3$ vertex)} + +\begin{center} +\includegraphics[width=0.25\textwidth]{fig_star.png} +\end{center} + +Three pairwise-incident edges at a single vertex must carry three distinct +colors, so $P_e(K_{1,3},3) = 3! = 6$. More generally +$P_e(K_{1,d},k) = k(k-1)\cdots(k-d+1)$, which is positive iff $k\ge d$, i.e.\ +iff $k\ge\Delta(G)$. + +\subsection*{4.~Corona $C_n\circ K_1$ \;(cycle with one leaf per cycle vertex; $\Delta=3$)} + +\begin{center} +\includegraphics[width=0.42\textwidth]{fig_corona.png} +\end{center} + +Each cycle vertex $v$ has degree $3$ in $C_n\circ K_1$: its two cycle edges +must carry distinct colors and its leaf must carry the unique remaining third +color. So the leaf coloring is \emph{forced} by the cycle coloring, and +\[ +P_e(C_n\circ K_1,\,3) \;=\; P_e(C_n,3) \;=\; 2^n + 2(-1)^n. +\] +This is the form of the partial tire dual $D(T)$ in the spoke-only case +(with $L=n+m$). + +\subsection*{5.~Trees with $\Delta\le 3$} + +A tree $T$ on $n$ vertices has $|E(T)|=n-1$ edges; its line graph $L(T)$ is +a \emph{block graph} (every block is a clique). Edge-color a tree greedily +by processing edges in BFS order from a leaf: when an edge $\{u,v\}$ is added, +the only colors forbidden are those already used on the edges incident to its +already-colored endpoint. Hence at any vertex of degree $d$, when the $d$-th +edge is added there are exactly $k-(d-1)$ choices. For $k=3$ and $\Delta\le3$: +\[ +P_e(T,3) \;=\; 3\prod_{e\in E(T)\setminus\{e_0\}} (3-d_e), +\] +where $e_0$ is the first edge processed and $d_e$ is the number of already- +processed edges incident to the new endpoint of $e$ (between $1$ and $2$, since +$\Delta\le 3$). In practice this gives a clean product depending only on the +degree sequence of $T$. + +\subsection*{6.~Two-connected outerplanar with $\Delta=3$ is just $C_n$} + +The only $2$-connected outerplanar graphs are polygons (with optional chords). +Each chord adds a degree to each of its two endpoints; if every vertex on the +polygon $C_n$ already has degree $2$ from the cycle, then we may add at most +one chord-endpoint per vertex, so chords must form a matching. Already a +\emph{single} chord on a $2$-connected outerplanar graph forces both +endpoints to degree $3$. In particular, the only $2$-connected outerplanar +graph with $\Delta\le 3$ in which the maximum is actually attained at +\emph{every} vertex would be a polygon with a perfect matching of chords; +but each chord crosses some other (mod the planar embedding) unless the two +matched vertices are adjacent on the polygon, which collapses the +``$2$-connected'' assumption. The upshot is: \emph{the $2$-connected blocks +in our class are just cycles.} + +\subsection*{7.~Block--cut decomposition} + +\begin{center} +\includegraphics[width=0.55\textwidth]{fig_blocktree.png} +\end{center} + +A general subcubic outerplanar graph is a union of cycle-blocks and edge-blocks +glued at cut vertices. By case~6 each $2$-connected block is a cycle; the +remaining blocks are single edges (i.e.\ tree edges). At a cut vertex $v$ of +degree $d_v\in\{2,3\}$, the colors of the $d_v$ edges incident to $v$ must be +pairwise distinct. Counting $P_e(G,3)$ for the whole graph $G$ amounts to +counting colorings of each block independently and then enforcing the +distinct-color constraint at every cut vertex. For $k=3$ and $\Delta\le3$ +this gives +\[ +P_e(G,3) \;=\; \prod_{B \text{ cycle block of }G} P_e(B,3) \;\cdot\; + \prod_{B \text{ edge block of }G} P_e(B,3) + \;/\; \prod_{v\text{ cut vertex}} (\text{normalization at } v), +\] +where the normalization corrects the over- or under-counting at the +cut-vertex constraint. For each cycle-block $B = C_n$ contributing +$2^n + 2(-1)^n$ proper $3$-edge-colorings, and each edge-block contributing +$3$, this product is computable in time linear in $|V(G)|+|E(G)|$. + +\section*{Outside the menagerie: theta graphs} + +\begin{center} +\includegraphics[width=0.32\textwidth]{fig_theta.png} +\end{center} + +The complete bipartite graph $K_{2,3}$, equivalently the theta graph +$\theta(2,2,2)$, is \emph{not} outerplanar (it is a forbidden minor for +outerplanarity). In our tire-graph application this is the structure of the +interior dual subgraph of $D(T)$ when the inner outerplanar graph $O$ has a +bridge: two trivalent vertices $d_f$ connected by three internally +vertex-disjoint paths. Such a $D(T)$ falls outside the simple block-cut +menagerie above and its $P_e(\cdot,3)$ does not reduce to a product over +cycle-blocks; instead it is computed directly by deletion--contraction on the +theta-graph structure, or via a transfer matrix on the three paths. + +\end{document}