Move tire coloring transfer to restrictions paper
@@ -0,0 +1,103 @@
|
||||
"""Test the tire inner-boundary three-colour conjecture
|
||||
(Conjecture 1.31, conj:tire-inner-boundary-three-colour) on the six
|
||||
duals of the non-Hamiltonian 38-vertex cubic plane graphs found by
|
||||
Holton & McKay.
|
||||
|
||||
Each Holton-McKay graph G' is a 3-connected cubic plane graph on 38
|
||||
vertices; its planar dual G is a 21-vertex triangulation. We run the
|
||||
exists-source, vertex-rooted inner-boundary check on each dual.
|
||||
|
||||
Run with:
|
||||
sage -python experiments/check_inner_boundary_on_holton_mckay.py
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
import sys
|
||||
from typing import cast
|
||||
|
||||
from sage.all import Graph # type: ignore[attr-defined] # pylint: disable=no-name-in-module
|
||||
|
||||
HERE = os.path.dirname(os.path.abspath(__file__))
|
||||
sys.path.insert(0, HERE)
|
||||
|
||||
from check_level_cycle_three_color import ( # noqa: E402
|
||||
level_sources,
|
||||
test_graph,
|
||||
)
|
||||
|
||||
|
||||
HM_FILE = (
|
||||
"/Users/didericis/Code/math-research/papers/"
|
||||
"even_level_graph_generators/experiments/nonham38m4.pc"
|
||||
)
|
||||
|
||||
|
||||
def parse_planar_code_to_sage(path: str) -> list[Graph]:
|
||||
"""Parse McKay's planar_code file -> list of Sage Graphs."""
|
||||
with open(path, "rb") as f:
|
||||
data = f.read()
|
||||
header = b">>planar_code<<"
|
||||
assert data.startswith(header), data[:20]
|
||||
pos = len(header)
|
||||
out: list[Graph] = []
|
||||
while pos < len(data):
|
||||
n = data[pos]
|
||||
pos += 1
|
||||
edges = set()
|
||||
for v in range(n):
|
||||
while True:
|
||||
w = data[pos]
|
||||
pos += 1
|
||||
if w == 0:
|
||||
break
|
||||
edges.add(frozenset((v, w - 1)))
|
||||
g = Graph([tuple(e) for e in edges], multiedges=False, loops=False)
|
||||
g.is_planar(set_embedding=True)
|
||||
out.append(g)
|
||||
return out
|
||||
|
||||
|
||||
def main() -> int:
|
||||
hm = parse_planar_code_to_sage(HM_FILE)
|
||||
print(f"Loaded {len(hm)} Holton-McKay graphs from {HM_FILE}\n")
|
||||
|
||||
all_pass = True
|
||||
for i, gprime in enumerate(hm, start=1):
|
||||
# Dual: triangulation of the sphere. Sage's planar_dual requires a
|
||||
# plane embedding; gprime already has one set above.
|
||||
dual = cast(Graph, gprime.planar_dual())
|
||||
n = dual.order()
|
||||
e = dual.size()
|
||||
print(f"=== HM #{i}: G' has {gprime.order()} vertices, "
|
||||
f"{gprime.size()} edges; dual has n={n}, m={e} ===")
|
||||
# Sanity: triangulation has 3n - 6 edges.
|
||||
if e != 3 * n - 6:
|
||||
print(f" WARNING: dual is not a triangulation (m != 3n-6)")
|
||||
|
||||
sources = list(level_sources(dual, "vertex", None))
|
||||
passed, complete, checked = test_graph(
|
||||
dual,
|
||||
sources,
|
||||
max_colorings=None,
|
||||
stop_first=True,
|
||||
quantifier="exists-source",
|
||||
restriction="inner-boundary",
|
||||
)
|
||||
status = "PASS" if (passed and complete) else (
|
||||
"UNKNOWN" if not complete else "FAIL"
|
||||
)
|
||||
print(f" {status}: sources_tried={checked}/{len(sources)}\n")
|
||||
if not (passed and complete):
|
||||
all_pass = False
|
||||
|
||||
print("---")
|
||||
print(
|
||||
"All Holton-McKay duals satisfy the inner-boundary conjecture: "
|
||||
f"{all_pass}"
|
||||
)
|
||||
return 0 if all_pass else 1
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
@@ -0,0 +1,445 @@
|
||||
"""Empirical test for the level-cycle three-colour conjecture and its
|
||||
tire inner-boundary refinement.
|
||||
|
||||
The level-cycle conjecture (``--restriction level-cycle``, the default)
|
||||
says: for every maximal planar graph G, there is some level source S and
|
||||
some proper 4-vertex-colouring c such that every simple cycle contained
|
||||
in a single level G[L_d] uses at most three colours.
|
||||
|
||||
The inner-boundary conjecture (``--restriction inner-boundary``) is the
|
||||
weakening that constrains only the inner boundaries B_in of the tires in
|
||||
a tire-tree decomposition rooted at a vertex source: for every G there is
|
||||
a vertex source v0 and a proper 4-colouring c such that every tire inner
|
||||
boundary uses at most three colours. Because the inner outerplanar graph
|
||||
O of a depth-d tire satisfies O = G[component faces] cap L_{d+1} and is
|
||||
outerplanar, V(B_in) is exactly the level-(d+1) vertices of the tire's
|
||||
dual component (see the inner-boundary remark in the paper).
|
||||
|
||||
Important: both checks are cycle-by-cycle. Two cycles in the same level
|
||||
or the same inner outerplanar component may omit different colours.
|
||||
|
||||
Run examples:
|
||||
sage -python experiments/check_level_cycle_three_color.py 4 9
|
||||
sage -python experiments/check_level_cycle_three_color.py 4 8 --quantifier all-sources
|
||||
sage -python experiments/check_level_cycle_three_color.py 4 8 --sources all
|
||||
sage -python experiments/check_level_cycle_three_color.py 4 9 --restriction inner-boundary
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
from collections import defaultdict, deque
|
||||
from itertools import combinations
|
||||
from typing import Any, Iterable, Iterator, Sequence, cast
|
||||
|
||||
from sage.all import Graph, graphs # type: ignore[attr-defined] # pylint: disable=no-name-in-module
|
||||
from sage.graphs.graph_coloring import all_graph_colorings # type: ignore[attr-defined] # pylint: disable=no-name-in-module
|
||||
|
||||
|
||||
Coloring = dict[Any, int]
|
||||
Source = tuple[Any, ...]
|
||||
|
||||
|
||||
def vertex_key(v: Any) -> str:
|
||||
"""Stable ordering key for Sage vertex labels."""
|
||||
return repr(v)
|
||||
|
||||
|
||||
def is_induced_cycle(g: Graph, vertices: Sequence[Any]) -> bool:
|
||||
"""Return True iff G[vertices] is a simple cycle."""
|
||||
if len(vertices) < 3:
|
||||
return False
|
||||
h = cast(Graph, g.subgraph(list(vertices)))
|
||||
return h.is_connected() and h.num_edges() == len(vertices) and all(
|
||||
h.degree(v) == 2 for v in h.vertices()
|
||||
)
|
||||
|
||||
|
||||
def induced_cycle_sources(g: Graph, max_size: int | None = None) -> Iterator[Source]:
|
||||
"""Yield every vertex set inducing a simple cycle in G."""
|
||||
vertices = sorted(g.vertices(), key=vertex_key)
|
||||
upper = len(vertices) if max_size is None else min(max_size, len(vertices))
|
||||
for k in range(3, upper + 1):
|
||||
for subset in combinations(vertices, k):
|
||||
if is_induced_cycle(g, subset):
|
||||
yield tuple(subset)
|
||||
|
||||
|
||||
def level_sources(g: Graph, mode: str, max_cycle_source_size: int | None) -> Iterator[Source]:
|
||||
"""Yield level sources according to the requested mode."""
|
||||
if mode in ("vertex", "all"):
|
||||
for v in sorted(g.vertices(), key=vertex_key):
|
||||
yield (v,)
|
||||
if mode in ("cycle", "all"):
|
||||
yield from induced_cycle_sources(g, max_cycle_source_size)
|
||||
|
||||
|
||||
def distances_from_source(g: Graph, source: Source) -> dict[Any, int]:
|
||||
"""Shortest-path distance from a vertex or cycle source."""
|
||||
if len(source) == 1:
|
||||
return dict(g.shortest_path_lengths(source[0]))
|
||||
distances = {v: 0 for v in source}
|
||||
queue: deque[Any] = deque(source)
|
||||
while queue:
|
||||
v = queue.popleft()
|
||||
for w in g.neighbor_iterator(v):
|
||||
if w in distances:
|
||||
continue
|
||||
distances[w] = distances[v] + 1
|
||||
queue.append(w)
|
||||
return distances
|
||||
|
||||
|
||||
def simple_cycle_vertex_sets(g: Graph) -> set[frozenset[Any]]:
|
||||
"""Enumerate vertex sets of simple cycles in an undirected graph.
|
||||
|
||||
The DFS only starts a cycle at its least vertex under vertex_key, which
|
||||
avoids most duplicates; the final frozenset de-duplicates cycles with the
|
||||
same vertex set.
|
||||
"""
|
||||
vertices = sorted(g.vertices(), key=vertex_key)
|
||||
index = {v: i for i, v in enumerate(vertices)}
|
||||
cycles: set[frozenset[Any]] = set()
|
||||
|
||||
def dfs(start: Any, current: Any, path: list[Any], seen: set[Any]) -> None:
|
||||
for nxt in g.neighbor_iterator(current):
|
||||
if nxt == start:
|
||||
if len(path) >= 3:
|
||||
cycles.add(frozenset(path))
|
||||
continue
|
||||
if nxt in seen:
|
||||
continue
|
||||
if index[nxt] <= index[start]:
|
||||
continue
|
||||
seen.add(nxt)
|
||||
path.append(nxt)
|
||||
dfs(start, nxt, path, seen)
|
||||
path.pop()
|
||||
seen.remove(nxt)
|
||||
|
||||
for start in vertices:
|
||||
dfs(start, start, [start], {start})
|
||||
return cycles
|
||||
|
||||
|
||||
def level_cycle_violation(
|
||||
g: Graph, distances: dict[Any, int], coloring: Coloring
|
||||
) -> tuple[int, frozenset[Any], set[int]] | None:
|
||||
"""Return the first level cycle using all four colours, if any."""
|
||||
by_level: dict[int, list[Any]] = {}
|
||||
for v, d in distances.items():
|
||||
by_level.setdefault(d, []).append(v)
|
||||
|
||||
for d in sorted(by_level):
|
||||
if len(by_level[d]) < 3:
|
||||
continue
|
||||
h = cast(Graph, g.subgraph(by_level[d]))
|
||||
for cycle in simple_cycle_vertex_sets(h):
|
||||
used = {coloring[v] for v in cycle}
|
||||
if len(used) > 3:
|
||||
return d, cycle, used
|
||||
return None
|
||||
|
||||
|
||||
def inner_boundary_vertex_sets(g: Graph, source: Source) -> list[frozenset[Any]]:
|
||||
"""Inner-boundary vertex sets of the tire-tree decomposition at a vertex.
|
||||
|
||||
The tire-tree decomposition is defined only for a single-vertex source
|
||||
placed on the outer face. Each tire is a connected component of the
|
||||
depth-d dual subgraph G'_d (faces whose minimum vertex level is d). Because
|
||||
a depth-d face has its three vertex levels in {d, d+1} (adjacent vertices
|
||||
differ by at most one level), and because the inner outerplanar graph O of
|
||||
the tire is outerplanar (so every vertex of O lies on its inner-boundary
|
||||
walk), the inner-boundary vertex set equals the level-(d+1) vertices of the
|
||||
component: V(B_in) = V(O) = V(component) cap L_{d+1}.
|
||||
|
||||
We work on the sphere dual (all faces). The choice of outer face does not
|
||||
change any inner-boundary set: depth->=1 components are untouched by removing
|
||||
a depth-0 face, and the root tire always has O = G[L_1].
|
||||
|
||||
Only sets of size >= 4 are returned; smaller sets can never use four colours.
|
||||
"""
|
||||
if len(source) != 1:
|
||||
raise ValueError("inner-boundary restriction requires a vertex source")
|
||||
distances = distances_from_source(g, source)
|
||||
|
||||
emb = cast(Graph, g.copy())
|
||||
if not emb.is_planar(set_embedding=True):
|
||||
raise ValueError("graph is not planar; cannot build tire decomposition")
|
||||
faces = emb.faces()
|
||||
|
||||
face_vertices: list[set[Any]] = []
|
||||
for face in faces:
|
||||
verts: set[Any] = set()
|
||||
for edge in face:
|
||||
verts.add(edge[0])
|
||||
verts.add(edge[1])
|
||||
face_vertices.append(verts)
|
||||
depths = [min(distances[v] for v in verts) for verts in face_vertices]
|
||||
|
||||
edge_faces: dict[frozenset[Any], list[int]] = defaultdict(list)
|
||||
for i, face in enumerate(faces):
|
||||
for edge in face:
|
||||
edge_faces[frozenset((edge[0], edge[1]))].append(i)
|
||||
dual_adj: dict[int, set[int]] = defaultdict(set)
|
||||
for incident in edge_faces.values():
|
||||
for a in range(len(incident)):
|
||||
for b in range(a + 1, len(incident)):
|
||||
dual_adj[incident[a]].add(incident[b])
|
||||
dual_adj[incident[b]].add(incident[a])
|
||||
|
||||
targets: list[frozenset[Any]] = []
|
||||
seen = [False] * len(faces)
|
||||
for start in range(len(faces)):
|
||||
if seen[start]:
|
||||
continue
|
||||
depth = depths[start]
|
||||
component = [start]
|
||||
seen[start] = True
|
||||
stack = [start]
|
||||
while stack:
|
||||
f = stack.pop()
|
||||
for h in dual_adj[f]:
|
||||
if not seen[h] and depths[h] == depth:
|
||||
seen[h] = True
|
||||
component.append(h)
|
||||
stack.append(h)
|
||||
inner: set[Any] = set()
|
||||
for f in component:
|
||||
inner.update(v for v in face_vertices[f] if distances[v] == depth + 1)
|
||||
if len(inner) >= 4:
|
||||
targets.append(frozenset(inner))
|
||||
return targets
|
||||
|
||||
|
||||
def first_inner_boundary_violation(
|
||||
targets: Sequence[frozenset[Any]], coloring: Coloring
|
||||
) -> tuple[frozenset[Any], set[int]] | None:
|
||||
"""Return the first inner boundary using all four colours, if any."""
|
||||
for inner in targets:
|
||||
used = {coloring[v] for v in inner}
|
||||
if len(used) > 3:
|
||||
return inner, used
|
||||
return None
|
||||
|
||||
|
||||
def coloring_witness(
|
||||
g: Graph,
|
||||
source: Source,
|
||||
max_colorings: int | None,
|
||||
restriction: str,
|
||||
) -> tuple[Coloring | None, int, bool]:
|
||||
"""Find a proper 4-colouring satisfying the conjectured restriction.
|
||||
|
||||
Returns (witness, checked_count, exhausted). If witness is None and
|
||||
exhausted is False, max_colorings was reached before a decision.
|
||||
"""
|
||||
distances = distances_from_source(g, source)
|
||||
targets = (
|
||||
inner_boundary_vertex_sets(g, source)
|
||||
if restriction == "inner-boundary"
|
||||
else None
|
||||
)
|
||||
checked = 0
|
||||
for raw in all_graph_colorings(g, 4, vertex_color_dict=True):
|
||||
coloring = cast(Coloring, raw)
|
||||
checked += 1
|
||||
if restriction == "inner-boundary":
|
||||
violated = first_inner_boundary_violation(cast(Sequence, targets), coloring)
|
||||
else:
|
||||
violated = level_cycle_violation(g, distances, coloring)
|
||||
if violated is None:
|
||||
return coloring, checked, True
|
||||
if max_colorings is not None and checked >= max_colorings:
|
||||
return None, checked, False
|
||||
return None, checked, True
|
||||
|
||||
|
||||
def source_label(source: Source) -> str:
|
||||
if len(source) == 1:
|
||||
return f"vertex:{source[0]}"
|
||||
return "cycle:{" + ",".join(str(v) for v in source) + "}"
|
||||
|
||||
|
||||
def test_graph(
|
||||
g: Graph,
|
||||
sources: Iterable[Source],
|
||||
max_colorings: int | None,
|
||||
stop_first: bool,
|
||||
quantifier: str,
|
||||
restriction: str,
|
||||
) -> tuple[bool, bool, int]:
|
||||
"""Test a graph over selected sources.
|
||||
|
||||
Returns (passed, complete, sources_checked).
|
||||
"""
|
||||
checked_sources = 0
|
||||
complete = True
|
||||
found_any_source = False
|
||||
for source in sources:
|
||||
checked_sources += 1
|
||||
witness, n_checked, exhausted = coloring_witness(
|
||||
g, source, max_colorings, restriction
|
||||
)
|
||||
if witness is None:
|
||||
if not exhausted:
|
||||
complete = False
|
||||
status = "FAIL" if exhausted else "UNKNOWN"
|
||||
print(
|
||||
f" {status}: source={source_label(source)}, "
|
||||
f"colorings_checked={n_checked}"
|
||||
)
|
||||
if exhausted and quantifier == "all-sources":
|
||||
if restriction == "level-cycle":
|
||||
distances = distances_from_source(g, source)
|
||||
first = next(
|
||||
all_graph_colorings(g, 4, vertex_color_dict=True), None
|
||||
)
|
||||
if first is not None:
|
||||
violation = level_cycle_violation(
|
||||
g, distances, cast(Coloring, first)
|
||||
)
|
||||
print(f" first_coloring_violation={violation}")
|
||||
return False, complete, checked_sources
|
||||
if stop_first:
|
||||
if quantifier == "all-sources":
|
||||
return True, False, checked_sources
|
||||
if not exhausted:
|
||||
return True, False, checked_sources
|
||||
else:
|
||||
found_any_source = True
|
||||
print(
|
||||
f" pass: source={source_label(source)}, "
|
||||
f"colorings_checked={n_checked}"
|
||||
)
|
||||
if quantifier == "exists-source":
|
||||
return True, complete, checked_sources
|
||||
|
||||
if quantifier == "exists-source" and not found_any_source:
|
||||
return False, complete, checked_sources
|
||||
return True, complete, checked_sources
|
||||
|
||||
|
||||
def parse_args() -> argparse.Namespace:
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument("n_min", type=int, nargs="?", default=4)
|
||||
parser.add_argument("n_max", type=int, nargs="?", default=9)
|
||||
parser.add_argument(
|
||||
"--sources",
|
||||
choices=("vertex", "cycle", "all"),
|
||||
default="vertex",
|
||||
help=(
|
||||
"which candidate level sources to search; cycle means induced "
|
||||
"cycle sources"
|
||||
),
|
||||
)
|
||||
parser.add_argument(
|
||||
"--quantifier",
|
||||
choices=("exists-source", "all-sources"),
|
||||
default="exists-source",
|
||||
help=(
|
||||
"exists-source tests the weakened conjecture; all-sources tests "
|
||||
"the stronger earlier version"
|
||||
),
|
||||
)
|
||||
parser.add_argument(
|
||||
"--restriction",
|
||||
choices=("level-cycle", "inner-boundary"),
|
||||
default="level-cycle",
|
||||
help=(
|
||||
"level-cycle constrains every simple level cycle; inner-boundary "
|
||||
"constrains only the tire inner boundaries of a vertex-rooted "
|
||||
"tire-tree decomposition"
|
||||
),
|
||||
)
|
||||
parser.add_argument(
|
||||
"--max-cycle-source-size",
|
||||
type=int,
|
||||
default=None,
|
||||
help="optional cap on induced cycle source size",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--min-connectivity",
|
||||
type=int,
|
||||
default=None,
|
||||
help=(
|
||||
"restrict to triangulations of at least this vertex connectivity "
|
||||
"(e.g. 5 for the 5-connected slice); passed to plantri via Sage"
|
||||
),
|
||||
)
|
||||
parser.add_argument(
|
||||
"--max-colorings",
|
||||
type=int,
|
||||
default=None,
|
||||
help="optional cap per graph/source; capped searches report UNKNOWN",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--full",
|
||||
action="store_true",
|
||||
help="continue after failures/unknowns instead of stopping at first",
|
||||
)
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
def main() -> int:
|
||||
args = parse_args()
|
||||
stop_first = not args.full
|
||||
if args.restriction == "inner-boundary" and args.sources != "vertex":
|
||||
print(
|
||||
"note: inner-boundary restriction is vertex-rooted; "
|
||||
f"overriding --sources {args.sources} with vertex"
|
||||
)
|
||||
args.sources = "vertex"
|
||||
total_graphs = 0
|
||||
total_sources = 0
|
||||
unknown = 0
|
||||
|
||||
triangulation_kwargs = {}
|
||||
if args.min_connectivity is not None:
|
||||
triangulation_kwargs["minimum_connectivity"] = args.min_connectivity
|
||||
|
||||
for n in range(args.n_min, args.n_max + 1):
|
||||
print(f"=== n={n} ===")
|
||||
for idx, g in enumerate(
|
||||
graphs.triangulations(n, **triangulation_kwargs), start=1
|
||||
):
|
||||
total_graphs += 1
|
||||
source_list = list(
|
||||
level_sources(g, args.sources, args.max_cycle_source_size)
|
||||
)
|
||||
print(f" graph #{idx}: sources={len(source_list)}")
|
||||
passed, complete, checked_sources = test_graph(
|
||||
g,
|
||||
source_list,
|
||||
args.max_colorings,
|
||||
stop_first,
|
||||
args.quantifier,
|
||||
args.restriction,
|
||||
)
|
||||
total_sources += checked_sources
|
||||
if not complete:
|
||||
unknown += 1
|
||||
if not passed:
|
||||
print(
|
||||
f"COUNTEREXAMPLE candidate: n={n}, graph_index={idx}, "
|
||||
f"source_mode={args.sources}, quantifier={args.quantifier}, "
|
||||
f"restriction={args.restriction}"
|
||||
)
|
||||
print(f" edges={sorted(tuple(sorted(e)) for e in g.edges(labels=False))}")
|
||||
return 1
|
||||
if not complete and stop_first:
|
||||
print(
|
||||
f"UNKNOWN: n={n}, graph_index={idx}, "
|
||||
f"source_mode={args.sources}, quantifier={args.quantifier}"
|
||||
)
|
||||
return 2
|
||||
|
||||
print(
|
||||
f"PASS: checked {total_graphs} triangulations and {total_sources} "
|
||||
f"sources; unknown_graphs={unknown}"
|
||||
)
|
||||
return 0 if unknown == 0 else 2
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
@@ -0,0 +1,110 @@
|
||||
"""Draw the 14-vertex counterexample to the tire inner-boundary
|
||||
three-colour conjecture (Conjecture~\\ref{conj:tire-inner-boundary-three-colour}).
|
||||
|
||||
This is the graph at index 263993 in the n=14 plantri enumeration: a
|
||||
3-connected (but not 5-connected) maximal planar graph with degree
|
||||
sequence [7,7,7,7,7,7,6,6,3,3,3,3,3,3] and exactly 96 proper
|
||||
4-colourings, none of which witness the inner-boundary restriction
|
||||
from any vertex source.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
|
||||
import matplotlib.pyplot as plt
|
||||
import networkx as nx
|
||||
from matplotlib.lines import Line2D
|
||||
|
||||
|
||||
OUT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
|
||||
EDGES = [
|
||||
(1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8),
|
||||
(2, 3), (2, 4), (2, 6), (2, 8), (2, 9), (2, 10),
|
||||
(3, 4), (4, 5), (4, 6), (4, 10),
|
||||
(5, 6), (6, 7), (6, 9), (6, 10),
|
||||
(7, 8), (7, 9), (7, 11), (7, 12), (7, 13),
|
||||
(8, 9), (8, 12), (8, 13), (8, 14),
|
||||
(9, 11), (9, 12), (9, 14),
|
||||
(11, 12), (12, 13), (12, 14),
|
||||
]
|
||||
|
||||
|
||||
def build_graph() -> nx.Graph:
|
||||
g = nx.Graph()
|
||||
g.add_edges_from(EDGES)
|
||||
return g
|
||||
|
||||
|
||||
def main() -> int:
|
||||
g = build_graph()
|
||||
is_planar, _ = nx.check_planarity(g)
|
||||
if not is_planar:
|
||||
raise RuntimeError("graph should be planar")
|
||||
pos = nx.planar_layout(g, scale=3.4)
|
||||
|
||||
fig, ax = plt.subplots(figsize=(8.2, 7.4))
|
||||
|
||||
nx.draw_networkx_edges(g, pos, ax=ax, edge_color="#cbd5e1", width=1.3)
|
||||
|
||||
deg3 = [v for v in g.nodes() if g.degree(v) == 3]
|
||||
deg7 = [v for v in g.nodes() if g.degree(v) == 7]
|
||||
other = [v for v in g.nodes() if v not in deg3 and v not in deg7]
|
||||
|
||||
def draw_nodes(nodes, color):
|
||||
for v in nodes:
|
||||
x, y = pos[v]
|
||||
ax.scatter(
|
||||
[x], [y],
|
||||
s=520,
|
||||
color=color,
|
||||
edgecolors="black",
|
||||
linewidths=1.1,
|
||||
zorder=3,
|
||||
)
|
||||
ax.text(
|
||||
x, y, f"{v}",
|
||||
ha="center", va="center",
|
||||
color="white", fontsize=11, fontweight="bold",
|
||||
zorder=4,
|
||||
)
|
||||
|
||||
draw_nodes(deg7, "#0f172a")
|
||||
draw_nodes(other, "#475569")
|
||||
draw_nodes(deg3, "#94a3b8")
|
||||
|
||||
legend = [
|
||||
Line2D([0], [0], marker="o", color="w",
|
||||
label=r"degree $7$",
|
||||
markerfacecolor="#0f172a", markeredgecolor="black",
|
||||
markersize=12),
|
||||
Line2D([0], [0], marker="o", color="w",
|
||||
label=r"degree $6$",
|
||||
markerfacecolor="#475569", markeredgecolor="black",
|
||||
markersize=12),
|
||||
Line2D([0], [0], marker="o", color="w",
|
||||
label=r"degree $3$",
|
||||
markerfacecolor="#94a3b8", markeredgecolor="black",
|
||||
markersize=12),
|
||||
]
|
||||
ax.legend(handles=legend, loc="lower center", ncol=3, framealpha=0.95)
|
||||
ax.set_title(
|
||||
"Counterexample to the inner-boundary three-colour conjecture "
|
||||
"($n=14$)",
|
||||
fontsize=13, pad=14,
|
||||
)
|
||||
ax.set_aspect("equal")
|
||||
ax.axis("off")
|
||||
fig.tight_layout(rect=[0, 0.05, 1, 1])
|
||||
|
||||
out = os.path.join(OUT_DIR, "fig_inner_boundary_counterexample.png")
|
||||
fig.savefig(out, dpi=180, bbox_inches="tight")
|
||||
plt.close(fig)
|
||||
print(f"wrote {out}")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
@@ -0,0 +1,206 @@
|
||||
"""Draw the medial tire graph for the tire example in Figure 2.
|
||||
|
||||
The example uses the same random tire parameters as fig_tire_example:
|
||||
m=6, k=4, one chord of O, seed=3. The medial tire graph is built from
|
||||
the plane graph obtained by omitting the chord edges of O, and then
|
||||
deleting medial edges between two outer-boundary edges or two
|
||||
inner-boundary edges. Its vertices are placed at the midpoints of the
|
||||
retained tire edges.
|
||||
"""
|
||||
import os
|
||||
import sys
|
||||
|
||||
HERE = os.path.dirname(os.path.abspath(__file__))
|
||||
DUAL_EXP = os.path.abspath(
|
||||
os.path.join(HERE, '..', '..', 'coloring_nested_tire_dual_graphs', 'experiments')
|
||||
)
|
||||
sys.path.insert(0, DUAL_EXP)
|
||||
|
||||
import matplotlib.pyplot as plt
|
||||
import matplotlib.patches as patches
|
||||
|
||||
from tire_graph import random_tire, planar_positions
|
||||
|
||||
|
||||
def edge_key(u, v):
|
||||
return tuple(sorted((u, v)))
|
||||
|
||||
|
||||
def is_inner_chord(edge, m, k):
|
||||
u, v = edge
|
||||
if not (m <= u < m + k and m <= v < m + k):
|
||||
return False
|
||||
a, b = u - m, v - m
|
||||
d = abs(a - b)
|
||||
return min(d, k - d) != 1
|
||||
|
||||
|
||||
def is_outer_boundary_edge(edge, outer):
|
||||
outer_set = set(outer)
|
||||
if not set(edge) <= outer_set:
|
||||
return False
|
||||
m = len(outer)
|
||||
idx = {v: i for i, v in enumerate(outer)}
|
||||
a, b = idx[edge[0]], idx[edge[1]]
|
||||
return (a - b) % m in (1, m - 1)
|
||||
|
||||
|
||||
def is_inner_boundary_edge(edge, inner):
|
||||
inner_set = set(inner)
|
||||
if not set(edge) <= inner_set:
|
||||
return False
|
||||
k = len(inner)
|
||||
idx = {v: i for i, v in enumerate(inner)}
|
||||
a, b = idx[edge[0]], idx[edge[1]]
|
||||
return (a - b) % k in (1, k - 1)
|
||||
|
||||
|
||||
def suppress_boundary_medial_edge(e1, e2, outer, inner):
|
||||
return (
|
||||
is_outer_boundary_edge(e1, outer) and is_outer_boundary_edge(e2, outer)
|
||||
) or (
|
||||
is_inner_boundary_edge(e1, inner) and is_inner_boundary_edge(e2, inner)
|
||||
)
|
||||
|
||||
|
||||
def face_edges(face):
|
||||
return [edge_key(face[i], face[(i + 1) % len(face)]) for i in range(len(face))]
|
||||
|
||||
|
||||
def build_medial_tire(tire):
|
||||
m, k = tire['m'], tire['k']
|
||||
outer = tire['outer']
|
||||
inner = tire['inner']
|
||||
|
||||
omitted = {edge_key(m + a, m + b) for a, b in tire['inner_chords']}
|
||||
retained_edges = sorted(
|
||||
edge_key(u, v)
|
||||
for u, v in tire['edges']
|
||||
if edge_key(u, v) not in omitted
|
||||
)
|
||||
retained = set(retained_edges)
|
||||
|
||||
faces = [tuple(tri) for tri in tire['triangles']]
|
||||
faces.append(tuple(outer))
|
||||
faces.append(tuple(reversed(inner)))
|
||||
|
||||
medial_edges = set()
|
||||
for face in faces:
|
||||
boundary = [e for e in face_edges(face) if e in retained]
|
||||
for i, e in enumerate(boundary):
|
||||
nxt = boundary[(i + 1) % len(boundary)]
|
||||
if suppress_boundary_medial_edge(e, nxt, outer, inner):
|
||||
continue
|
||||
medial_edges.add(tuple(sorted((e, nxt))))
|
||||
|
||||
return retained_edges, sorted(medial_edges), omitted
|
||||
|
||||
|
||||
def draw_medial_tire_graph(tire, filename):
|
||||
m, k = tire['m'], tire['k']
|
||||
outer_set = set(tire['outer'])
|
||||
inner_set = set(tire['inner'])
|
||||
pos = planar_positions(tire, R_out=1.0, R_in=0.45)
|
||||
medial_vertices, medial_edges, omitted = build_medial_tire(tire)
|
||||
medial_pos = {
|
||||
e: ((pos[e[0]][0] + pos[e[1]][0]) / 2, (pos[e[0]][1] + pos[e[1]][1]) / 2)
|
||||
for e in medial_vertices
|
||||
}
|
||||
|
||||
C = {
|
||||
'outer_cycle': '#1f77b4',
|
||||
'inner_cycle': '#d62728',
|
||||
'inner_chord': '#ff7f0e',
|
||||
'annular': '#c7c7c7',
|
||||
'medial_edge': '#0f766e',
|
||||
'medial_vertex': '#134e4a',
|
||||
}
|
||||
|
||||
fig, ax = plt.subplots(figsize=(7.2, 7.2))
|
||||
|
||||
for r in (1.04, 0.41):
|
||||
ax.add_patch(patches.Circle((0, 0), r, fill=False,
|
||||
edgecolor='lightgray',
|
||||
linewidth=0.5, linestyle='--'))
|
||||
|
||||
for u, v in sorted(edge_key(u, v) for u, v in tire['edges']):
|
||||
x1, y1 = pos[u]
|
||||
x2, y2 = pos[v]
|
||||
e = edge_key(u, v)
|
||||
if e in omitted:
|
||||
color, lw, ls, alpha = C['inner_chord'], 1.6, (0, (4, 3)), 0.45
|
||||
elif u in outer_set and v in outer_set:
|
||||
color, lw, ls, alpha = C['outer_cycle'], 2.0, '-', 0.35
|
||||
elif u in inner_set and v in inner_set:
|
||||
color, lw, ls, alpha = C['inner_cycle'], 2.0, '-', 0.35
|
||||
else:
|
||||
color, lw, ls, alpha = C['annular'], 1.0, '-', 0.55
|
||||
ax.plot([x1, x2], [y1, y2], color=color, linewidth=lw,
|
||||
linestyle=ls, alpha=alpha, zorder=1)
|
||||
|
||||
for e1, e2 in medial_edges:
|
||||
x1, y1 = medial_pos[e1]
|
||||
x2, y2 = medial_pos[e2]
|
||||
ax.plot([x1, x2], [y1, y2], color=C['medial_edge'],
|
||||
linewidth=1.8, alpha=0.92, zorder=3)
|
||||
|
||||
for idx, e in enumerate(medial_vertices):
|
||||
x, y = medial_pos[e]
|
||||
ax.scatter([x], [y], s=58, color=C['medial_vertex'],
|
||||
edgecolors='white', linewidths=0.8, zorder=4)
|
||||
ax.annotate(f"$m_{{{idx}}}$", (x, y), xytext=(3, 3),
|
||||
textcoords='offset points', color=C['medial_vertex'],
|
||||
fontsize=6.5, zorder=5)
|
||||
|
||||
for v in tire['outer']:
|
||||
x, y = pos[v]
|
||||
ax.scatter([x], [y], s=150, color=C['outer_cycle'],
|
||||
edgecolors='white', linewidths=0.8, alpha=0.6, zorder=2)
|
||||
for v in tire['inner']:
|
||||
x, y = pos[v]
|
||||
ax.scatter([x], [y], s=135, color=C['inner_cycle'],
|
||||
edgecolors='white', linewidths=0.8, alpha=0.6, zorder=2)
|
||||
|
||||
legend_items = [
|
||||
plt.Line2D([], [], color=C['medial_edge'], linewidth=1.8,
|
||||
label=r'medial tire graph edge'),
|
||||
plt.Line2D([], [], marker='o', color='w',
|
||||
markerfacecolor=C['medial_vertex'], markeredgecolor='white',
|
||||
markersize=7, label=r'medial vertex at an edge midpoint'),
|
||||
plt.Line2D([], [], color=C['inner_chord'], linewidth=1.6,
|
||||
linestyle=(0, (4, 3)), alpha=0.55,
|
||||
label=r'chord of $O$ omitted from medial construction'),
|
||||
plt.Line2D([], [], color=C['annular'], linewidth=1.0,
|
||||
label=r'underlying tire graph, faint'),
|
||||
]
|
||||
ax.legend(handles=legend_items, loc='upper left',
|
||||
bbox_to_anchor=(1.0, 1.0), fontsize=9, frameon=False)
|
||||
|
||||
ax.set_xlim(-1.24, 1.24)
|
||||
ax.set_ylim(-1.24, 1.24)
|
||||
ax.set_aspect('equal')
|
||||
ax.axis('off')
|
||||
ax.set_title(
|
||||
r"Medial tire graph $M_{\mathrm{tire}}(T)$ for Figure 2's tire"
|
||||
"\n"
|
||||
r"midpoint vertices; no medial edges between consecutive boundary edges",
|
||||
fontsize=11,
|
||||
)
|
||||
|
||||
fig.savefig(filename, dpi=180, bbox_inches='tight')
|
||||
plt.close(fig)
|
||||
print(f"wrote {filename}")
|
||||
print(f"retained tire edges: {len(medial_vertices)}")
|
||||
print(f"medial edges: {len(medial_edges)}")
|
||||
print(f"omitted O chords: {sorted(omitted)}")
|
||||
|
||||
|
||||
def main():
|
||||
paper_dir = os.path.abspath(os.path.join(HERE, '..'))
|
||||
tire = random_tire(m=6, k=4, n_chords=1, seed=3)
|
||||
out = os.path.join(paper_dir, 'fig_medial_tire_example.png')
|
||||
draw_medial_tire_graph(tire, out)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -0,0 +1,195 @@
|
||||
"""Draw the seam-realizability construction for Conjecture~\\ref{conj:seam-realizability}.
|
||||
|
||||
(a) Left: G_1, a stacked-ring triangulation with single-vertex level source
|
||||
S_1 = {0}. Vertices coloured by BFS-from-S_1 level (0, 1, 2, 3).
|
||||
The four colours visually correspond to the rooted tree of tire treads
|
||||
of G_1 -- a chain T_0 -> T_1 -> T_2 with O^{(T_d)} = G_1[L_{d+1}] on
|
||||
each tread.
|
||||
|
||||
(b) Right: H_5, the apex-removal seam construction. We take G_1 \\ {S_1}
|
||||
(octahedron-like, 9 vertices) and re-embed so the former fan-face
|
||||
around S_1 becomes the outer face, with L_1 as the new outer boundary
|
||||
of that disk. We then attach a triangulated annulus A_5 from L_1 to a
|
||||
fresh boundary 5-cycle, partial H_5. Vertices coloured by
|
||||
BFS-from-(partial H_5) level.
|
||||
|
||||
Visual claim: the BFS level labels match between (a) and (b) on
|
||||
V(G_1) \\ {S_1}; the new level-0 ring of (b) is the boundary cycle
|
||||
partial H_5 of length k = 5, replacing the single-vertex source S_1 of (a).
|
||||
Hence T(H_5, partial H_5) is iso (combinatorial, O-preserved) to T(G_1, S_1).
|
||||
"""
|
||||
import math
|
||||
import os
|
||||
import networkx as nx
|
||||
import matplotlib.pyplot as plt
|
||||
from matplotlib.lines import Line2D
|
||||
|
||||
OUT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# (a) Build G_1: source 0 + concentric triangular rings L_1, L_2, L_3.
|
||||
# ---------------------------------------------------------------------------
|
||||
RINGS = 3
|
||||
pos_G = {0: (0.0, 0.0)}
|
||||
ring_G = {0: [0]}
|
||||
nxt = 1
|
||||
for r in range(1, RINGS + 1):
|
||||
ids = []
|
||||
for j in range(3):
|
||||
ang = math.radians(90 + 120 * j)
|
||||
pos_G[nxt] = (r * math.cos(ang), r * math.sin(ang))
|
||||
ids.append(nxt)
|
||||
nxt += 1
|
||||
ring_G[r] = ids
|
||||
|
||||
G1 = nx.Graph()
|
||||
G1.add_nodes_from(pos_G)
|
||||
for v in ring_G[1]:
|
||||
G1.add_edge(0, v)
|
||||
for r in range(1, RINGS + 1):
|
||||
a, b, c = ring_G[r]
|
||||
G1.add_edges_from([(a, b), (b, c), (c, a)])
|
||||
for r in range(1, RINGS):
|
||||
inner, outer = ring_G[r], ring_G[r + 1]
|
||||
for j in range(3):
|
||||
G1.add_edge(inner[j], outer[j]) # spoke
|
||||
G1.add_edge(inner[j], outer[(j + 1) % 3]) # annulus diagonal
|
||||
|
||||
assert G1.number_of_edges() == 3 * G1.number_of_nodes() - 6, "G_1 not a triangulation"
|
||||
|
||||
level_G = nx.shortest_path_length(G1, source=0)
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# (b) Build H_5: re-embed (G_1 \ {S_1}) so the former S_1 fan-face is the
|
||||
# outer face (L_1 becomes the outer-most ring of that disk), then attach
|
||||
# a triangulated annulus A_5 to a fresh 5-cycle partial H_5.
|
||||
# ---------------------------------------------------------------------------
|
||||
# Concentric placement: L_3 innermost (was G_1's outer face), L_1 outermost
|
||||
# among G_1-derived vertices, partial H_5 outermost overall.
|
||||
pos_H = {}
|
||||
# Concentric placement with the SAME angles as panel (a): L_3 innermost,
|
||||
# L_1 outermost among G_1-derived vertices. This is the topological flip
|
||||
# (re-embedding) of (a); same vertex labels, same edges (minus S_1), but
|
||||
# the ring with the smallest G_1-level is now at the largest radius.
|
||||
RING_R = {1: 2.4, 2: 1.6, 3: 0.8}
|
||||
for r in [1, 2, 3]:
|
||||
for j, v in enumerate(ring_G[r]):
|
||||
ang = math.radians(90 + 120 * j)
|
||||
pos_H[v] = (RING_R[r] * math.cos(ang), RING_R[r] * math.sin(ang))
|
||||
|
||||
# partial H_5 vertices u0..u4 on a regular pentagon
|
||||
BOUNDARY = [f'u{j}' for j in range(5)]
|
||||
R_BDY = 3.6
|
||||
for j, u in enumerate(BOUNDARY):
|
||||
ang = math.radians(90 + 72 * j)
|
||||
pos_H[u] = (R_BDY * math.cos(ang), R_BDY * math.sin(ang))
|
||||
|
||||
H = nx.Graph()
|
||||
H.add_nodes_from(pos_H)
|
||||
# inherit G_1 \ {S_1} edges, but recompute embedding rotations are positional
|
||||
for u, v in G1.edges():
|
||||
if 0 in (u, v):
|
||||
continue
|
||||
H.add_edge(u, v)
|
||||
# partial H_5 cycle (the new outer boundary)
|
||||
boundary_edges = [(BOUNDARY[j], BOUNDARY[(j + 1) % 5]) for j in range(5)]
|
||||
H.add_edges_from(boundary_edges)
|
||||
# annular edges A_5: a, b, c (= ring_G[1]) match to consecutive u_i ranges
|
||||
a, b, c = ring_G[1]
|
||||
annular_pairs = [
|
||||
(a, 'u0'), (a, 'u1'), (a, 'u2'),
|
||||
(b, 'u2'), (b, 'u3'), (b, 'u4'),
|
||||
(c, 'u4'), (c, 'u0'),
|
||||
]
|
||||
H.add_edges_from(annular_pairs)
|
||||
|
||||
# H is a triangulated planar disk: all bounded faces triangles, outer face
|
||||
# the 5-cycle partial H_5. Verify edge count by Euler with f outer = 5-gon:
|
||||
# t bounded triangles, F = t + 1, V - E + F = 2 => E = V + t - 1;
|
||||
# 3t + 5 = 2E => t = 2V - 7. Here V = 14, so t = 21, E = 34.
|
||||
assert H.number_of_edges() == 34, f"unexpected edge count {H.number_of_edges()}"
|
||||
|
||||
level_H = nx.multi_source_dijkstra_path_length(H, set(BOUNDARY))
|
||||
|
||||
# Verify the seam claim: BFS levels on V(G_1) \ {S_1} match between G_1 and H.
|
||||
for v in G1.nodes():
|
||||
if v == 0:
|
||||
continue
|
||||
assert level_H[v] == level_G[v], (
|
||||
f"level mismatch at v={v}: G_1 level {level_G[v]}, H level {level_H[v]}"
|
||||
)
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Draw.
|
||||
# ---------------------------------------------------------------------------
|
||||
LEVEL_COLOR = {0: '#1e293b', 1: '#475569', 2: '#94a3b8', 3: '#cbd5e1'}
|
||||
|
||||
fig, axes = plt.subplots(1, 2, figsize=(16, 8.5))
|
||||
|
||||
|
||||
def draw_panel(ax, graph, pos, levels, title, *, boundary=None, annular=None):
|
||||
nx.draw_networkx_edges(graph, pos, ax=ax, edge_color='#d1d5db', width=1.2)
|
||||
if annular:
|
||||
nx.draw_networkx_edges(graph, pos, edgelist=annular, ax=ax,
|
||||
edge_color='#f59e0b', width=1.8)
|
||||
if boundary:
|
||||
nx.draw_networkx_edges(graph, pos, edgelist=boundary, ax=ax,
|
||||
edge_color='#dc2626', width=2.4)
|
||||
for v, (x, y) in pos.items():
|
||||
lev = levels[v]
|
||||
ax.scatter([x], [y], s=560, color=LEVEL_COLOR[lev],
|
||||
edgecolors='black', linewidths=1.0, zorder=3)
|
||||
ax.text(x, y, f'{v}\n$\\ell{{=}}{lev}$', ha='center', va='center',
|
||||
color='white', fontsize=8.5, fontweight='bold', zorder=4)
|
||||
ax.set_aspect('equal')
|
||||
ax.axis('off')
|
||||
ax.set_title(title, fontsize=11)
|
||||
|
||||
|
||||
draw_panel(
|
||||
axes[0], G1, pos_G, level_G,
|
||||
r"$(a)$ $G_1$ with single-vertex source $S_1 = \{0\}$." "\n"
|
||||
r"BFS from $S_1$ gives levels $\ell = 0, 1, 2, 3$ "
|
||||
r"(rings $\{0\}, L_1, L_2, L_3$).",
|
||||
)
|
||||
|
||||
draw_panel(
|
||||
axes[1], H, pos_H, level_H,
|
||||
r"$(b)$ $H_5$: apex-removal seam." "\n"
|
||||
r"Outer 5-cycle $\partial H_5$ (red) replaces $S_1$; "
|
||||
r"annulus $A_5$ (orange) glues $\partial H_5$ to $L_1$.",
|
||||
boundary=boundary_edges, annular=annular_pairs,
|
||||
)
|
||||
|
||||
legend = [
|
||||
Line2D([0], [0], marker='o', color='w', label=r'level $\ell = 0$',
|
||||
markerfacecolor=LEVEL_COLOR[0], markeredgecolor='black', markersize=12),
|
||||
Line2D([0], [0], marker='o', color='w', label=r'level $\ell = 1$ ($L_1$)',
|
||||
markerfacecolor=LEVEL_COLOR[1], markeredgecolor='black', markersize=12),
|
||||
Line2D([0], [0], marker='o', color='w', label=r'level $\ell = 2$ ($L_2$)',
|
||||
markerfacecolor=LEVEL_COLOR[2], markeredgecolor='black', markersize=12),
|
||||
Line2D([0], [0], marker='o', color='w', label=r'level $\ell = 3$ ($L_3$)',
|
||||
markerfacecolor=LEVEL_COLOR[3], markeredgecolor='black', markersize=12),
|
||||
Line2D([0], [0], color='#dc2626', lw=2.4, label=r'$\partial H_5$ (boundary $k$-cycle, $k=5$)'),
|
||||
Line2D([0], [0], color='#f59e0b', lw=1.8, label=r'annulus $A_5$ edges'),
|
||||
]
|
||||
fig.legend(handles=legend, loc='lower center', ncol=3, fontsize=10, framealpha=0.95)
|
||||
|
||||
fig.suptitle(
|
||||
r"Seam realizability (Conjecture 1.22): "
|
||||
r"$\mathcal{T}(H_5, \partial H_5) \cong \mathcal{T}(G_1, S_1)$ "
|
||||
r"as rooted trees of tire treads (combinatorial, $O$-preserved). "
|
||||
r"BFS distances from $\partial H_5$ in $H_5$ reproduce $\ell_{G_1}$ "
|
||||
r"on $V(G_1) \setminus \{S_1\}$.", fontsize=12,
|
||||
)
|
||||
fig.tight_layout(rect=[0, 0.08, 1, 0.95])
|
||||
|
||||
out = os.path.join(OUT_DIR, 'fig_seam_construction.png')
|
||||
fig.savefig(out, dpi=180, bbox_inches='tight')
|
||||
plt.close(fig)
|
||||
|
||||
print(f'G_1: |V|={G1.number_of_nodes()}, |E|={G1.number_of_edges()}, '
|
||||
f'levels: {sorted(set(level_G.values()))}')
|
||||
print(f'H_5: |V|={H.number_of_nodes()}, |E|={H.number_of_edges()}, '
|
||||
f'levels: {sorted(set(level_H.values()))}')
|
||||
print(f'wrote {out}')
|
||||
@@ -0,0 +1,480 @@
|
||||
"""Draw the tire-tree decomposition for Theorem~\\ref{thm:tire-tree-decomposition}.
|
||||
|
||||
Uses a Tutte embedding (barycentric solve with the outer face fixed on a
|
||||
convex polygon) to give a planar straight-line layout.
|
||||
|
||||
Panel (a): G with 13 vertices, 5 levels (v_0 at level 0; L_1, L_2, L_3, L_4
|
||||
on subsequent levels). Tutte outer face = h-g_1-g_2 (the deepest face from
|
||||
v_0), so v_0 ends up roughly central and the outer triangle is "outermost"
|
||||
in BFS-from-v_0 distance. Tree-of-treads has 5 nodes:
|
||||
T_0
|
||||
/ \\
|
||||
T_R T_L
|
||||
|
|
||||
T_LL
|
||||
|
|
||||
T_LLL
|
||||
|
||||
Panel (b): G_{T_L} on 10 vertices, with Tutte outer face = C_{T_L} = {a,c,d}.
|
||||
Levels in G_{T_L} satisfy ell_{G_{T_L}}(.) = ell_G(.) - 1 on V(G_{T_L});
|
||||
T(G_{T_L}, C_{T_L}) is the chain T_L -> T_LL -> T_LLL.
|
||||
"""
|
||||
import math
|
||||
import os
|
||||
import networkx as nx
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
from matplotlib.lines import Line2D
|
||||
|
||||
OUT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Build G.
|
||||
# ---------------------------------------------------------------------------
|
||||
G = nx.Graph()
|
||||
G.add_nodes_from(['v0', 'a', 'b', 'c', 'd', 'e',
|
||||
'f1', 'f2', 'f3', 'g1', 'g2', 'g3', 'h'])
|
||||
|
||||
# v_0 fan
|
||||
for v in ['a', 'b', 'c', 'd']:
|
||||
G.add_edge('v0', v)
|
||||
# L_1 4-cycle
|
||||
G.add_edges_from([('a', 'b'), ('b', 'c'), ('c', 'd'), ('d', 'a')])
|
||||
# Chord a-c (outside L_1 in the planar embedding)
|
||||
G.add_edge('a', 'c')
|
||||
# e-fan (Region R)
|
||||
for v in ['a', 'b', 'c']:
|
||||
G.add_edge('e', v)
|
||||
# f-triangle (Region L)
|
||||
G.add_edges_from([('f1', 'f2'), ('f2', 'f3'), ('f3', 'f1')])
|
||||
# Annular L_1 -> f-triangle: f_1~{a,d}, f_2~{d,c}, f_3~{a,c}
|
||||
G.add_edges_from([
|
||||
('f1', 'a'), ('f1', 'd'),
|
||||
('f2', 'd'), ('f2', 'c'),
|
||||
('f3', 'a'), ('f3', 'c'),
|
||||
])
|
||||
# g-triangle (inside f-triangle)
|
||||
G.add_edges_from([('g1', 'g2'), ('g2', 'g3'), ('g3', 'g1')])
|
||||
# Annular f-triangle -> g-triangle: f_1~{g_1, g_3}, f_2~{g_2, g_3}, f_3~{g_1, g_2}
|
||||
G.add_edges_from([
|
||||
('f1', 'g1'), ('f1', 'g3'),
|
||||
('f2', 'g2'), ('f2', 'g3'),
|
||||
('f3', 'g1'), ('f3', 'g2'),
|
||||
])
|
||||
# h-fan (inside g-triangle)
|
||||
for v in ['g1', 'g2', 'g3']:
|
||||
G.add_edge('h', v)
|
||||
|
||||
assert G.number_of_edges() == 3 * G.number_of_nodes() - 6, (
|
||||
f"G not a triangulation: |E|={G.number_of_edges()}, "
|
||||
f"expected {3 * G.number_of_nodes() - 6}"
|
||||
)
|
||||
|
||||
level_G = nx.shortest_path_length(G, source='v0')
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Tutte embedding.
|
||||
# ---------------------------------------------------------------------------
|
||||
def tutte_embedding(graph, outer_face_cyclic, outer_radius=3.0,
|
||||
angle_offset_deg=90.0, outer_weight=1.0):
|
||||
"""Compute (weighted) Tutte embedding.
|
||||
|
||||
outer_face_cyclic: list of vertices on the outer face, in cyclic order.
|
||||
Outer vertices are fixed on a regular polygon of given radius; every
|
||||
interior vertex is placed at a convex combination of its neighbours'
|
||||
positions (solved as a linear system). Edges incident to an outer
|
||||
vertex carry weight `outer_weight`; interior-interior edges carry
|
||||
weight 1. All weights positive, so Tutte's theorem still gives a
|
||||
planar straight-line embedding. Larger `outer_weight` pulls interior
|
||||
vertices more strongly toward the outer triangle, spreading them out.
|
||||
"""
|
||||
n_outer = len(outer_face_cyclic)
|
||||
outer_positions = {}
|
||||
for i, v in enumerate(outer_face_cyclic):
|
||||
angle = math.radians(angle_offset_deg + i * 360 / n_outer)
|
||||
outer_positions[v] = (outer_radius * math.cos(angle),
|
||||
outer_radius * math.sin(angle))
|
||||
|
||||
outer_set = set(outer_face_cyclic)
|
||||
interior = [v for v in graph.nodes() if v not in outer_set]
|
||||
interior_idx = {v: i for i, v in enumerate(interior)}
|
||||
m = len(interior)
|
||||
if m == 0:
|
||||
return outer_positions
|
||||
|
||||
A = np.zeros((m, m))
|
||||
bx = np.zeros(m)
|
||||
by = np.zeros(m)
|
||||
|
||||
for v in interior:
|
||||
i = interior_idx[v]
|
||||
for u in graph.neighbors(v):
|
||||
w = outer_weight if u in outer_set else 1.0
|
||||
A[i, i] += w
|
||||
if u in outer_set:
|
||||
bx[i] += w * outer_positions[u][0]
|
||||
by[i] += w * outer_positions[u][1]
|
||||
else:
|
||||
j = interior_idx[u]
|
||||
A[i, j] -= w
|
||||
|
||||
x = np.linalg.solve(A, bx)
|
||||
y = np.linalg.solve(A, by)
|
||||
|
||||
pos = dict(outer_positions)
|
||||
for v in interior:
|
||||
i = interior_idx[v]
|
||||
pos[v] = (float(x[i]), float(y[i]))
|
||||
return pos
|
||||
|
||||
|
||||
def stretch_radially(pos, outer_face_cyclic, alpha=0.6):
|
||||
"""Stretch interior positions radially outward from the outer-face centroid.
|
||||
|
||||
Outer vertices are unchanged; for each interior vertex at radius r from
|
||||
the outer-face centroid, replace r by r' = R^(1-alpha) * r^alpha, where
|
||||
R is the radius of the outer vertices. With alpha < 1 this is a concave
|
||||
stretch that pushes small radii outward. Angles are preserved, so
|
||||
planarity of the underlying Tutte embedding is preserved.
|
||||
"""
|
||||
outer_set = set(outer_face_cyclic)
|
||||
outer_positions = [pos[v] for v in outer_face_cyclic]
|
||||
Cx = sum(p[0] for p in outer_positions) / len(outer_positions)
|
||||
Cy = sum(p[1] for p in outer_positions) / len(outer_positions)
|
||||
R = max(math.sqrt((p[0] - Cx)**2 + (p[1] - Cy)**2)
|
||||
for p in outer_positions)
|
||||
|
||||
new_pos = {}
|
||||
for v, p in pos.items():
|
||||
if v in outer_set:
|
||||
new_pos[v] = p
|
||||
continue
|
||||
dx, dy = p[0] - Cx, p[1] - Cy
|
||||
r = math.sqrt(dx * dx + dy * dy)
|
||||
if r < 1e-10:
|
||||
new_pos[v] = (Cx, Cy)
|
||||
continue
|
||||
r_new = (R ** (1 - alpha)) * (r ** alpha)
|
||||
scale = r_new / r
|
||||
new_pos[v] = (Cx + dx * scale, Cy + dy * scale)
|
||||
return new_pos
|
||||
|
||||
|
||||
# Panel (a) positions: hand-tuned in TikZiT and copied back here so the
|
||||
# matplotlib panel matches the .tikz layout the user is editing on Desktop.
|
||||
# The chord a-c is drawable as a straight line at these positions; the
|
||||
# d-a edge passes through f_1, so it's drawn as a slight Bezier curve.
|
||||
pos_G = {
|
||||
'v0': ( 0.00, 6.0),
|
||||
'a': (-5.50, -5.0),
|
||||
'b': (-2.75, 3.0),
|
||||
'c': ( 1.75, 3.0),
|
||||
'd': ( 8.00, -5.0),
|
||||
'e': (-1.50, 1.5),
|
||||
'f1': ( 1.50, -5.0),
|
||||
'f2': ( 4.00, -1.0),
|
||||
'f3': (-0.75, -1.0),
|
||||
'g1': ( 0.70, -3.0),
|
||||
'g2': ( 1.45, -1.5),
|
||||
'g3': ( 2.30, -3.0),
|
||||
'h': ( 1.55, -2.5),
|
||||
}
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# G_{T_L}: subgraph inside C_{T_L} = {a, c, d}.
|
||||
# ---------------------------------------------------------------------------
|
||||
C_TL = {'a', 'c', 'd'}
|
||||
V_GTL = C_TL | {'f1', 'f2', 'f3', 'g1', 'g2', 'g3', 'h'}
|
||||
G_TL = G.subgraph(V_GTL).copy()
|
||||
level_GTL = nx.multi_source_dijkstra_path_length(G_TL, C_TL)
|
||||
|
||||
for v in V_GTL:
|
||||
assert level_GTL[v] == level_G[v] - 1
|
||||
|
||||
# Tutte for G_{T_L}: outer face = a-d-c (= C_{T_L}, the seam itself).
|
||||
# Cyclic order matches the planar boundary: a -> d -> c.
|
||||
outer_face_GTL = ['a', 'd', 'c']
|
||||
pos_GTL = tutte_embedding(G_TL, outer_face_GTL, outer_radius=2.8,
|
||||
angle_offset_deg=90, outer_weight=3.0)
|
||||
pos_GTL = stretch_radially(pos_GTL, outer_face_GTL, alpha=0.6)
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Edge sets.
|
||||
# ---------------------------------------------------------------------------
|
||||
C_TR_edges = [('a', 'b'), ('b', 'c'), ('a', 'c')]
|
||||
C_TL_edges = [('a', 'd'), ('d', 'c'), ('a', 'c')]
|
||||
C_TLL_edges = [('f1', 'f2'), ('f2', 'f3'), ('f3', 'f1')]
|
||||
C_TLLL_edges = [('g1', 'g2'), ('g2', 'g3'), ('g3', 'g1')]
|
||||
fan_edges = [('v0', v) for v in ['a', 'b', 'c', 'd']]
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Tree inset helper.
|
||||
# ---------------------------------------------------------------------------
|
||||
def draw_tree_inset(parent_ax, position, tree_nodes, tree_edges, node_pos,
|
||||
label_text, highlight=None, title=None,
|
||||
xlim=(-1.4, 1.4), ylim=(-3.6, 0.6)):
|
||||
ax = parent_ax.inset_axes(position)
|
||||
for u, v in tree_edges:
|
||||
x0, y0 = node_pos[u]
|
||||
x1, y1 = node_pos[v]
|
||||
ax.plot([x0, x1], [y0, y1], color='black', lw=1.4, zorder=1)
|
||||
for n in tree_nodes:
|
||||
x, y = node_pos[n]
|
||||
is_hi = highlight and n in highlight
|
||||
ax.scatter([x], [y], s=380, color='#fde68a' if is_hi else '#e5e7eb',
|
||||
edgecolors='black', linewidths=1.8 if is_hi else 1.0, zorder=3)
|
||||
ax.text(x, y, label_text[n], ha='center', va='center',
|
||||
fontsize=7.5, fontweight='bold', zorder=4)
|
||||
ax.set_xlim(*xlim); ax.set_ylim(*ylim)
|
||||
ax.set_aspect('equal')
|
||||
ax.set_xticks([]); ax.set_yticks([])
|
||||
if title:
|
||||
ax.set_title(title, fontsize=8.5, pad=2)
|
||||
for spine in ax.spines.values():
|
||||
spine.set_edgecolor('#9ca3af')
|
||||
spine.set_linewidth(0.8)
|
||||
ax.patch.set_facecolor('#f9fafb')
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Draw.
|
||||
# ---------------------------------------------------------------------------
|
||||
LEVEL_COLOR = {
|
||||
0: '#1e293b',
|
||||
1: '#475569',
|
||||
2: '#94a3b8',
|
||||
3: '#cbd5e1',
|
||||
4: '#f1f5f9',
|
||||
}
|
||||
|
||||
fig, axes = plt.subplots(1, 2, figsize=(16, 9))
|
||||
|
||||
|
||||
def _vertex_label(name):
|
||||
"""Render 'f1' as 'f_1' (subscript) and 'v0' as 'v_0' for display."""
|
||||
if len(name) >= 2 and name[0].isalpha() and name[1:].isdigit():
|
||||
return f'{name[0]}_{{{name[1:]}}}'
|
||||
return name
|
||||
|
||||
|
||||
def draw_panel(ax, graph, pos, levels, seams, fan, title, xlim, ylim,
|
||||
text_color_threshold=4, label_map=None):
|
||||
"""seams: list of (edges, color, width) tuples; fan: edges list or None.
|
||||
label_map: optional dict mapping vertex names to displayed names (so the
|
||||
panel can show a relabelled version of the graph)."""
|
||||
nx.draw_networkx_edges(graph, pos, ax=ax, edge_color='#d1d5db', width=1.1)
|
||||
if fan is not None:
|
||||
nx.draw_networkx_edges(graph, pos, edgelist=fan, ax=ax,
|
||||
edge_color='#3b82f6', width=1.5, style='dashed')
|
||||
for edges, color, width in seams:
|
||||
nx.draw_networkx_edges(graph, pos, edgelist=edges, ax=ax,
|
||||
edge_color=color, width=width)
|
||||
for v, (x, y) in pos.items():
|
||||
lev = levels[v]
|
||||
text_color = 'white' if lev < text_color_threshold else 'black'
|
||||
display_name = (label_map or {}).get(v, v)
|
||||
ax.scatter([x], [y], s=520, color=LEVEL_COLOR[lev],
|
||||
edgecolors='black', linewidths=1.0, zorder=3)
|
||||
ax.text(x, y, f'${_vertex_label(display_name)}$\n$\\ell{{=}}{lev}$',
|
||||
ha='center', va='center',
|
||||
color=text_color, fontsize=7, fontweight='bold', zorder=4)
|
||||
ax.set_aspect('equal')
|
||||
ax.axis('off')
|
||||
ax.set_xlim(*xlim); ax.set_ylim(*ylim)
|
||||
ax.set_title(title, fontsize=10.5, pad=5)
|
||||
|
||||
|
||||
# Compute panel limits from the Tutte positions, with padding.
|
||||
def compute_limits(pos, pad=0.5):
|
||||
xs = [p[0] for p in pos.values()]
|
||||
ys = [p[1] for p in pos.values()]
|
||||
return (min(xs) - pad, max(xs) + pad), (min(ys) - pad, max(ys) + pad)
|
||||
|
||||
|
||||
xlim_a, ylim_a = compute_limits(pos_G, pad=0.6)
|
||||
xlim_b, ylim_b = compute_limits(pos_GTL, pad=0.6)
|
||||
|
||||
# ============================================================================
|
||||
# Panel (a): G -- positions match Desktop/tire_tree_decomposition.tikz.
|
||||
# Draw all non-seam edges as plain gray (no separate dashed fan style here,
|
||||
# to match the TikZiT version). Edge a-d at y = -5 would pass through f_1
|
||||
# if drawn straight, so we render it (and seam C_{T_L}'s a-d component) as
|
||||
# a slight Bezier curve via FancyArrowPatch.
|
||||
# ============================================================================
|
||||
ax = axes[0]
|
||||
|
||||
# Non-seam edges as straight gray lines; a-d and v_0-a are drawn curved
|
||||
# below.
|
||||
_curved_pairs = [{'a', 'd'}, {'v0', 'a'}]
|
||||
non_seam_edges = [e for e in G.edges
|
||||
if set(e) not in _curved_pairs
|
||||
and set(e) not in (set(s) for s in C_TR_edges + C_TL_edges
|
||||
+ C_TLL_edges + C_TLLL_edges)]
|
||||
nx.draw_networkx_edges(G, pos_G, edgelist=non_seam_edges, ax=ax,
|
||||
edge_color='#d1d5db', width=1.1)
|
||||
|
||||
# Curved edges (FancyArrowPatch). a-d dodges f_1; v_0-a is bent for
|
||||
# visual balance (mirrors the TikZiT `bend right`).
|
||||
from matplotlib.patches import FancyArrowPatch
|
||||
def add_curved(ax, p_from, p_to, *, color, lw, rad, ls='-', zorder=2):
|
||||
ax.add_patch(FancyArrowPatch(
|
||||
posA=p_from, posB=p_to,
|
||||
arrowstyle='-', connectionstyle=f'arc3,rad={rad}',
|
||||
color=color, linewidth=lw, linestyle=ls, zorder=zorder,
|
||||
))
|
||||
add_curved(ax, pos_G['a'], pos_G['d'], color='#d1d5db', lw=1.1, rad=0.15)
|
||||
add_curved(ax, pos_G['v0'], pos_G['a'], color='#d1d5db', lw=1.1, rad=0.25)
|
||||
|
||||
# Seams (straight, since the layout is now planar with straight chord).
|
||||
# Order: bottom first (C_{T_LL}, C_{T_LLL}), then chord/L_1 seams on top.
|
||||
nx.draw_networkx_edges(G, pos_G,
|
||||
edgelist=[('f1', 'f2'), ('f2', 'f3'), ('f3', 'f1')],
|
||||
ax=ax, edge_color='#9333ea', width=2.2)
|
||||
nx.draw_networkx_edges(G, pos_G,
|
||||
edgelist=[('g1', 'g2'), ('g2', 'g3'), ('g3', 'g1')],
|
||||
ax=ax, edge_color='#0d9488', width=2.0)
|
||||
nx.draw_networkx_edges(G, pos_G,
|
||||
edgelist=[('a', 'b'), ('b', 'c')],
|
||||
ax=ax, edge_color='#ea580c', width=2.4)
|
||||
nx.draw_networkx_edges(G, pos_G,
|
||||
edgelist=[('a', 'c'), ('d', 'c')],
|
||||
ax=ax, edge_color='#dc2626', width=2.8)
|
||||
add_curved(ax, pos_G['a'], pos_G['d'], color='#dc2626', lw=2.8, rad=0.15, zorder=4)
|
||||
|
||||
# Vertices.
|
||||
for v, (x, y) in pos_G.items():
|
||||
lev = level_G[v]
|
||||
text_color = 'white' if lev < 4 else 'black'
|
||||
ax.scatter([x], [y], s=520, color=LEVEL_COLOR[lev],
|
||||
edgecolors='black', linewidths=1.0, zorder=5)
|
||||
ax.text(x, y, f'${_vertex_label(v)}$\n$\\ell{{=}}{lev}$',
|
||||
ha='center', va='center',
|
||||
color=text_color, fontsize=7, fontweight='bold', zorder=6)
|
||||
|
||||
ax.set_aspect('equal')
|
||||
ax.axis('off')
|
||||
# The a-d arc bulges below y=-5 by ~ rad * |a - d| / 2 ≈ 1.0 with rad=0.15;
|
||||
# pad the y range so it isn't clipped.
|
||||
xlim_a, ylim_a = compute_limits(pos_G, pad=0.8)
|
||||
ylim_a = (ylim_a[0] - 1.2, ylim_a[1])
|
||||
ax.set_xlim(*xlim_a); ax.set_ylim(*ylim_a)
|
||||
ax.set_title(
|
||||
r"$(a)$ $G$: 13 vertices, BFS levels $\ell_G \in \{0,1,2,3,4\}$,"
|
||||
"\n"
|
||||
r"four nested seams $C_{T_R}, C_{T_L}, C_{T_{LL}}, C_{T_{LLL}}$ "
|
||||
r"(chord $a$-$c$ drawn straight in this layout).",
|
||||
fontsize=10.5, pad=5,
|
||||
)
|
||||
|
||||
tree_pos_a = {
|
||||
'T_0': (0.0, 0.0),
|
||||
'T_R': (-0.7, -1.0),
|
||||
'T_L': (0.7, -1.0),
|
||||
'T_LL': (0.7, -2.0),
|
||||
'T_LLL': (0.7, -3.0),
|
||||
}
|
||||
tree_labels = {
|
||||
'T_0': r'$T_0$', 'T_R': r'$T_R$', 'T_L': r'$T_L$',
|
||||
'T_LL': r'$T_{LL}$', 'T_LLL': r'$T_{LLL}$',
|
||||
}
|
||||
draw_tree_inset(
|
||||
axes[0], [0.70, 0.42, 0.28, 0.55],
|
||||
tree_nodes=['T_0', 'T_R', 'T_L', 'T_LL', 'T_LLL'],
|
||||
tree_edges=[('T_0', 'T_R'), ('T_0', 'T_L'),
|
||||
('T_L', 'T_LL'), ('T_LL', 'T_LLL')],
|
||||
node_pos=tree_pos_a, label_text=tree_labels,
|
||||
highlight={'T_L', 'T_LL', 'T_LLL'},
|
||||
title=r'$\mathcal{T}(G, \{v_0\})$',
|
||||
xlim=(-1.4, 1.4), ylim=(-3.6, 0.6),
|
||||
)
|
||||
|
||||
# ============================================================================
|
||||
# Panel (b): G_{T_L}. Vertex names are rotated relative to the parent G
|
||||
# (a->c, c->d, d->a; f_1->f_3, f_2->f_1, f_3->f_2; g_1->g_2, g_2->g_3,
|
||||
# g_3->g_1; h stays h) -- the relabelling emphasises the new role of
|
||||
# C_{T_L} as cycle source, with the boundary now naturally read as
|
||||
# {a, c, d} in cyclic order from a position the user picked.
|
||||
# ============================================================================
|
||||
GTL_LABEL_MAP = {
|
||||
'a': 'c', 'c': 'd', 'd': 'a',
|
||||
'f1': 'f3', 'f2': 'f1', 'f3': 'f2',
|
||||
'g1': 'g2', 'g2': 'g3', 'g3': 'g1',
|
||||
'h': 'h',
|
||||
}
|
||||
|
||||
draw_panel(
|
||||
axes[1], G_TL, pos_GTL, level_GTL,
|
||||
seams=[
|
||||
(C_TL_edges, '#dc2626', 2.8),
|
||||
(C_TLL_edges, '#9333ea', 2.2),
|
||||
(C_TLLL_edges, '#0d9488', 2.0),
|
||||
],
|
||||
fan=None,
|
||||
title=(
|
||||
r"$(b)$ $G_{T_L}$ (Tutte embedding, outer face $C_{T_L} = \{a,c,d\}$):"
|
||||
" 10 vertices, cycle source $C_{T_L}$,\n"
|
||||
r"$\ell_{G_{T_L}}(\cdot) = \ell_G(\cdot) - 1$; "
|
||||
r"$\mathcal{T}(G_{T_L}, C_{T_L})$ is the chain $T_L \to T_{LL} \to T_{LLL}$."
|
||||
),
|
||||
xlim=xlim_b, ylim=ylim_b,
|
||||
text_color_threshold=3,
|
||||
label_map=GTL_LABEL_MAP,
|
||||
)
|
||||
|
||||
sub_tree_pos = {
|
||||
'T_L': (0.0, 0.0),
|
||||
'T_LL': (0.0, -1.0),
|
||||
'T_LLL': (0.0, -2.0),
|
||||
}
|
||||
draw_tree_inset(
|
||||
axes[1], [0.70, 0.42, 0.28, 0.55],
|
||||
tree_nodes=['T_L', 'T_LL', 'T_LLL'],
|
||||
tree_edges=[('T_L', 'T_LL'), ('T_LL', 'T_LLL')],
|
||||
node_pos=sub_tree_pos, label_text=tree_labels,
|
||||
highlight={'T_L', 'T_LL', 'T_LLL'},
|
||||
title=r'$\mathcal{T}(G_{T_L}, C_{T_L})$',
|
||||
xlim=(-1.0, 1.0), ylim=(-2.6, 0.4),
|
||||
)
|
||||
|
||||
# ============================================================================
|
||||
# Legend + suptitle
|
||||
# ============================================================================
|
||||
legend = [
|
||||
Line2D([0], [0], marker='o', color='w', label=r'$\ell = 0$',
|
||||
markerfacecolor=LEVEL_COLOR[0], markeredgecolor='black', markersize=10),
|
||||
Line2D([0], [0], marker='o', color='w', label=r'$\ell = 1$',
|
||||
markerfacecolor=LEVEL_COLOR[1], markeredgecolor='black', markersize=10),
|
||||
Line2D([0], [0], marker='o', color='w', label=r'$\ell = 2$',
|
||||
markerfacecolor=LEVEL_COLOR[2], markeredgecolor='black', markersize=10),
|
||||
Line2D([0], [0], marker='o', color='w', label=r'$\ell = 3$',
|
||||
markerfacecolor=LEVEL_COLOR[3], markeredgecolor='black', markersize=10),
|
||||
Line2D([0], [0], marker='o', color='w', label=r'$\ell = 4$',
|
||||
markerfacecolor=LEVEL_COLOR[4], markeredgecolor='black', markersize=10),
|
||||
Line2D([0], [0], color='#ea580c', lw=2.4, label=r'seam $C_{T_R}$'),
|
||||
Line2D([0], [0], color='#dc2626', lw=2.8, label=r'seam $C_{T_L}$'),
|
||||
Line2D([0], [0], color='#9333ea', lw=2.2, label=r'seam $C_{T_{LL}}$'),
|
||||
Line2D([0], [0], color='#0d9488', lw=2.0, label=r'seam $C_{T_{LLL}}$'),
|
||||
]
|
||||
fig.legend(handles=legend, loc='lower center', ncol=5, fontsize=9.5,
|
||||
framealpha=0.95, columnspacing=1.8)
|
||||
|
||||
fig.suptitle(
|
||||
r"Tire-tree decomposition (Theorem 1.19): every tread $T$ is the root "
|
||||
r"of its own tree of tire treads $\mathcal{T}(G_T, C_T)$.",
|
||||
fontsize=12, y=0.96,
|
||||
)
|
||||
fig.subplots_adjust(top=0.88, bottom=0.16, left=0.02, right=0.98, wspace=0.05)
|
||||
|
||||
out = os.path.join(OUT_DIR, 'fig_tire_tree_decomposition.png')
|
||||
fig.savefig(out, dpi=180, bbox_inches='tight')
|
||||
plt.close(fig)
|
||||
|
||||
print(f'G: |V|={G.number_of_nodes()}, |E|={G.number_of_edges()}, '
|
||||
f'levels {sorted(set(level_G.values()))}')
|
||||
print(f'G_TL: |V|={G_TL.number_of_nodes()}, |E|={G_TL.number_of_edges()}, '
|
||||
f'levels {sorted(set(level_GTL.values()))}')
|
||||
print(f'verified level shift (D2): ell_GTL(v) = ell_G(v) - 1 for all '
|
||||
f'{len(V_GTL)} v in V(G_TL)')
|
||||
print(f'panel (a): hand-tuned positions (see Desktop/tire_tree_decomposition.tikz)')
|
||||
print(f'Tutte (G_TL): outer face = {outer_face_GTL}')
|
||||
print(f'wrote {out}')
|
||||
@@ -0,0 +1,132 @@
|
||||
"""Draw the 8-vertex counterexample to the universal-source form.
|
||||
|
||||
The figure highlights the source vertex 7, the two BFS levels, and the
|
||||
level cycle (3,4,5,8) that forces all four colours for that source.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
|
||||
import matplotlib.pyplot as plt
|
||||
import networkx as nx
|
||||
from matplotlib.lines import Line2D
|
||||
|
||||
|
||||
OUT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
|
||||
def build_graph() -> nx.Graph:
|
||||
g = nx.Graph()
|
||||
g.add_edges_from(
|
||||
[
|
||||
(1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7),
|
||||
(2, 3), (2, 6), (2, 7),
|
||||
(3, 4), (3, 5), (3, 6), (3, 8),
|
||||
(4, 5),
|
||||
(5, 6), (5, 8),
|
||||
(6, 7), (6, 8),
|
||||
]
|
||||
)
|
||||
return g
|
||||
|
||||
|
||||
def main() -> int:
|
||||
g = build_graph()
|
||||
levels = nx.single_source_shortest_path_length(g, 7)
|
||||
is_planar, embedding = nx.check_planarity(g)
|
||||
if not is_planar:
|
||||
raise RuntimeError("counterexample graph should be planar")
|
||||
pos = nx.planar_layout(g, scale=3.4)
|
||||
|
||||
fig, ax = plt.subplots(figsize=(8.6, 7.2))
|
||||
|
||||
nx.draw_networkx_edges(g, pos, ax=ax, edge_color="#cbd5e1", width=1.4)
|
||||
|
||||
cycle_edges = [(3, 4), (4, 5), (5, 8), (8, 3)]
|
||||
nx.draw_networkx_edges(
|
||||
g,
|
||||
pos,
|
||||
ax=ax,
|
||||
edgelist=cycle_edges,
|
||||
edge_color="#dc2626",
|
||||
width=2.8,
|
||||
)
|
||||
|
||||
level_colors = {0: "#0f172a", 1: "#475569", 2: "#94a3b8"}
|
||||
for v, (x, y) in pos.items():
|
||||
lev = levels[v]
|
||||
ax.scatter(
|
||||
[x],
|
||||
[y],
|
||||
s=600 if v == 7 else 500,
|
||||
color=level_colors[lev],
|
||||
edgecolors="black",
|
||||
linewidths=1.1,
|
||||
zorder=3,
|
||||
)
|
||||
ax.text(
|
||||
x,
|
||||
y,
|
||||
f"{v}\n$\\ell={lev}$",
|
||||
ha="center",
|
||||
va="center",
|
||||
color="white",
|
||||
fontsize=10,
|
||||
fontweight="bold",
|
||||
zorder=4,
|
||||
)
|
||||
|
||||
legend = [
|
||||
Line2D(
|
||||
[0],
|
||||
[0],
|
||||
marker="o",
|
||||
color="w",
|
||||
label=r"source $S=\{7\}$",
|
||||
markerfacecolor=level_colors[0],
|
||||
markeredgecolor="black",
|
||||
markersize=12,
|
||||
),
|
||||
Line2D(
|
||||
[0],
|
||||
[0],
|
||||
marker="o",
|
||||
color="w",
|
||||
label=r"level $L_1$",
|
||||
markerfacecolor=level_colors[1],
|
||||
markeredgecolor="black",
|
||||
markersize=12,
|
||||
),
|
||||
Line2D(
|
||||
[0],
|
||||
[0],
|
||||
marker="o",
|
||||
color="w",
|
||||
label=r"level $L_2$",
|
||||
markerfacecolor=level_colors[2],
|
||||
markeredgecolor="black",
|
||||
markersize=12,
|
||||
),
|
||||
Line2D([0], [0], color="#dc2626", lw=2.8, label=r"problem cycle $(3,4,5,8)$"),
|
||||
]
|
||||
|
||||
ax.legend(handles=legend, loc="lower center", ncol=2, framealpha=0.95)
|
||||
ax.set_title(
|
||||
"Counterexample to the universal-source form",
|
||||
fontsize=14,
|
||||
pad=18,
|
||||
)
|
||||
ax.set_aspect("equal")
|
||||
ax.axis("off")
|
||||
fig.tight_layout(rect=[0, 0.05, 1, 1])
|
||||
|
||||
out = os.path.join(OUT_DIR, "fig_universal_level_cycle_counterexample.png")
|
||||
fig.savefig(out, dpi=180, bbox_inches="tight")
|
||||
plt.close(fig)
|
||||
print(f"wrote {out}")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
@@ -0,0 +1,189 @@
|
||||
"""Generate and test candidate graph families for the level-cycle conjecture.
|
||||
|
||||
This script builds a few rigid maximal planar families and then runs the
|
||||
existing level-cycle checker on them. It is meant as a small Sage-side
|
||||
driver for probing likely counterexample sources before moving on to larger
|
||||
families.
|
||||
|
||||
Available families:
|
||||
stacked-ring concentric triangular rings like the paper's G_1
|
||||
face-stack a chain of stacked triangulations built by repeatedly
|
||||
stacking a vertex into a triangular face
|
||||
|
||||
Examples:
|
||||
sage -python experiments/generate_candidate_families.py stacked-ring 1 6
|
||||
sage -python experiments/generate_candidate_families.py face-stack 4 12 --full
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import logging
|
||||
from typing import Callable
|
||||
|
||||
from sage.all import Graph # type: ignore[attr-defined] # pylint: disable=no-name-in-module
|
||||
|
||||
from check_level_cycle_three_color import level_sources, test_graph
|
||||
|
||||
|
||||
LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def build_stacked_ring(levels: int) -> Graph:
|
||||
"""Return the concentric triangular-ring family used in the paper figure."""
|
||||
if levels < 1:
|
||||
raise ValueError("stacked-ring requires at least one ring")
|
||||
|
||||
g = Graph()
|
||||
g.add_vertex(0)
|
||||
next_vertex = 1
|
||||
|
||||
ring1 = [next_vertex + i for i in range(3)]
|
||||
next_vertex += 3
|
||||
g.add_vertices(ring1)
|
||||
g.add_edges([(0, v) for v in ring1])
|
||||
g.add_edges([(ring1[i], ring1[(i + 1) % 3]) for i in range(3)])
|
||||
|
||||
inner = ring1
|
||||
for _ in range(1, levels):
|
||||
outer = [next_vertex + i for i in range(3)]
|
||||
next_vertex += 3
|
||||
g.add_vertices(outer)
|
||||
g.add_edges([(outer[i], outer[(i + 1) % 3]) for i in range(3)])
|
||||
g.add_edges([(inner[i], outer[i]) for i in range(3)])
|
||||
g.add_edges([(inner[i], outer[(i + 1) % 3]) for i in range(3)])
|
||||
inner = outer
|
||||
|
||||
expected_edges = 3 * g.n_vertices() - 6
|
||||
if g.num_edges() != expected_edges:
|
||||
raise AssertionError(
|
||||
f"stacked-ring is not maximal planar: |V|={g.n_vertices()}, "
|
||||
f"|E|={g.num_edges()}, expected {expected_edges}"
|
||||
)
|
||||
return g
|
||||
|
||||
|
||||
def build_face_stack(steps: int) -> Graph:
|
||||
"""Return a stacked triangulation built by repeatedly subdividing one face."""
|
||||
if steps < 1:
|
||||
raise ValueError("face-stack requires at least one step")
|
||||
|
||||
g = Graph()
|
||||
g.add_vertices([0, 1, 2, 3])
|
||||
g.add_edges([(0, 1), (1, 2), (2, 0)])
|
||||
g.add_edges([(3, 0), (3, 1), (3, 2)])
|
||||
|
||||
active_face = (0, 1, 3)
|
||||
next_vertex = 4
|
||||
for _ in range(steps - 1):
|
||||
v = next_vertex
|
||||
next_vertex += 1
|
||||
a, b, c = active_face
|
||||
g.add_vertex(v)
|
||||
g.add_edges([(v, a), (v, b), (v, c)])
|
||||
active_face = (a, c, v)
|
||||
|
||||
expected_edges = 3 * g.n_vertices() - 6
|
||||
if g.num_edges() != expected_edges:
|
||||
raise AssertionError(
|
||||
f"face-stack is not maximal planar: |V|={g.n_vertices()}, "
|
||||
f"|E|={g.num_edges()}, expected {expected_edges}"
|
||||
)
|
||||
return g
|
||||
|
||||
|
||||
FAMILY_BUILDERS: dict[str, Callable[[int], Graph]] = {
|
||||
"stacked-ring": build_stacked_ring,
|
||||
"face-stack": build_face_stack,
|
||||
}
|
||||
|
||||
|
||||
def parse_args() -> argparse.Namespace:
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument("family", choices=sorted(FAMILY_BUILDERS))
|
||||
parser.add_argument("n_min", type=int, nargs="?", default=1)
|
||||
parser.add_argument("n_max", type=int, nargs="?", default=6)
|
||||
parser.add_argument(
|
||||
"--sources",
|
||||
choices=("vertex", "cycle", "all"),
|
||||
default="vertex",
|
||||
help="candidate source family to search",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--quantifier",
|
||||
choices=("exists-source", "all-sources"),
|
||||
default="exists-source",
|
||||
help="whether to test the weakened or stronger conjecture",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--max-cycle-source-size",
|
||||
type=int,
|
||||
default=None,
|
||||
help="optional cap on induced cycle source size",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--max-colorings",
|
||||
type=int,
|
||||
default=None,
|
||||
help="optional cap per graph/source; capped searches report UNKNOWN",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--full",
|
||||
action="store_true",
|
||||
help="continue after failures/unknowns instead of stopping at first",
|
||||
)
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
def main() -> int:
|
||||
args = parse_args()
|
||||
builder = FAMILY_BUILDERS[args.family]
|
||||
stop_first = not args.full
|
||||
|
||||
total_graphs = 0
|
||||
total_sources = 0
|
||||
unknown = 0
|
||||
|
||||
for n in range(args.n_min, args.n_max + 1):
|
||||
g = builder(n)
|
||||
total_graphs += 1
|
||||
print(
|
||||
f"{args.family} n={n}: "
|
||||
f"|V|={g.n_vertices()} |E|={g.num_edges()} "
|
||||
f"sources={args.sources} quantifier={args.quantifier}"
|
||||
)
|
||||
sources = list(
|
||||
level_sources(g, args.sources, args.max_cycle_source_size)
|
||||
)
|
||||
passed, complete, checked_sources = test_graph(
|
||||
g,
|
||||
sources,
|
||||
args.max_colorings,
|
||||
stop_first,
|
||||
args.quantifier,
|
||||
)
|
||||
total_sources += checked_sources
|
||||
if not complete:
|
||||
unknown += 1
|
||||
if not passed and not args.full:
|
||||
print(f"ABORT: first failure at family={args.family} n={n}")
|
||||
print(
|
||||
f"SUMMARY: checked {total_graphs} graphs and {total_sources} "
|
||||
f"sources; unknown_graphs={unknown}"
|
||||
)
|
||||
return 1
|
||||
|
||||
print(
|
||||
f"SUMMARY: checked {total_graphs} graphs and {total_sources} "
|
||||
f"sources; unknown_graphs={unknown}"
|
||||
)
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s")
|
||||
try:
|
||||
raise SystemExit(main())
|
||||
except Exception as exc: # pragma: no cover - surfaced to the shell
|
||||
LOGGER.exception("candidate family generation failed: %s", exc)
|
||||
raise
|
||||
@@ -0,0 +1,291 @@
|
||||
"""Kempe-class enumeration for vertex 4-colorings of tires.
|
||||
|
||||
For each tire T = (B_out, O, E_ann), we:
|
||||
1. enumerate every proper vertex 4-coloring of V(T);
|
||||
2. quotient by S_4 (color relabeling) via a first-appearance canonical
|
||||
form, giving the set Q of canonical colorings;
|
||||
3. build the *Kempe graph* on Q: for every canonical c in Q, every
|
||||
color pair {a,b} in {0,1,2,3}, and every connected component K of
|
||||
the subgraph of T induced by vertices colored a or b, swap
|
||||
a <-> b on K, canonicalize the result, and add an edge;
|
||||
4. count connected components of the Kempe graph.
|
||||
|
||||
A tire is *single-class* if its Kempe graph has one component, i.e. all
|
||||
S_4-classes of 4-colorings are mutually Kempe-reachable.
|
||||
|
||||
The tire family enumerated is the (m, k, chord-set, lattice-path)
|
||||
parameterization from the companion `coloring_nested_tire_dual_graphs`
|
||||
paper: outer cycle on m vertices, inner cycle on k vertices with
|
||||
non-crossing chords inside, annulus triangulated by a lattice path
|
||||
(m 'O' moves, k 'I' moves) anchored at the spoke outer[0]-inner[0].
|
||||
Note: distinct lattice paths can yield isomorphic tires, so the counts
|
||||
here are over labeled-tire combinatorial classes, not isomorphism types.
|
||||
|
||||
Run:
|
||||
python3 kempe_classes.py # default m,k<=5, no chords
|
||||
python3 kempe_classes.py --m-max 6 --k-max 6 --max-chords 1
|
||||
python3 kempe_classes.py --m 5 --k 4 --path OIOIOIOI --chords '' --dump
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
from collections import defaultdict, deque
|
||||
from itertools import combinations
|
||||
import time
|
||||
|
||||
|
||||
def all_lattice_paths(m, k):
|
||||
n = m + k
|
||||
paths = []
|
||||
def rec(prefix, o_left, i_left):
|
||||
if o_left == 0 and i_left == 0:
|
||||
paths.append(prefix)
|
||||
return
|
||||
if o_left:
|
||||
rec(prefix + 'O', o_left - 1, i_left)
|
||||
if i_left:
|
||||
rec(prefix + 'I', o_left, i_left - 1)
|
||||
rec('', m, k)
|
||||
return paths
|
||||
|
||||
|
||||
def chord_crosses(c1, c2):
|
||||
a, b = c1; c, d = c2
|
||||
return (a < c < b < d) or (c < a < d < b)
|
||||
|
||||
|
||||
def all_noncrossing_chord_sets(k, max_chords):
|
||||
candidates = [(a, b) for a in range(k) for b in range(a + 2, k)
|
||||
if not (a == 0 and b == k - 1)]
|
||||
out = [()]
|
||||
def rec(start, chosen):
|
||||
if len(chosen) >= max_chords:
|
||||
return
|
||||
for idx in range(start, len(candidates)):
|
||||
ch = candidates[idx]
|
||||
if any(chord_crosses(ch, old) for old in chosen):
|
||||
continue
|
||||
nxt = chosen + (ch,)
|
||||
out.append(nxt)
|
||||
rec(idx + 1, nxt)
|
||||
rec(0, ())
|
||||
return out
|
||||
|
||||
|
||||
def build_tire(m, k, chords, lattice_path):
|
||||
outer = list(range(m))
|
||||
inner = list(range(m, m + k))
|
||||
adj = [set() for _ in range(m + k)]
|
||||
def add(u, v):
|
||||
if u != v:
|
||||
adj[u].add(v); adj[v].add(u)
|
||||
for i in range(m):
|
||||
add(outer[i], outer[(i + 1) % m])
|
||||
for j in range(k):
|
||||
add(inner[j], inner[(j + 1) % k])
|
||||
for (a, b) in chords:
|
||||
add(inner[a], inner[b])
|
||||
add(outer[0], inner[0])
|
||||
i, j = 0, 0
|
||||
for mv in lattice_path:
|
||||
if mv == 'O':
|
||||
add(inner[j % k], outer[(i + 1) % m])
|
||||
i += 1
|
||||
else:
|
||||
add(outer[i % m], inner[(j + 1) % k])
|
||||
j += 1
|
||||
return [tuple(sorted(s)) for s in adj]
|
||||
|
||||
|
||||
def proper_4colorings(adj):
|
||||
n = len(adj)
|
||||
colors = [-1] * n
|
||||
out = []
|
||||
def rec(v):
|
||||
if v == n:
|
||||
out.append(tuple(colors))
|
||||
return
|
||||
used = 0
|
||||
for u in adj[v]:
|
||||
if u < v:
|
||||
used |= 1 << colors[u]
|
||||
for c in range(4):
|
||||
if used & (1 << c):
|
||||
continue
|
||||
colors[v] = c
|
||||
rec(v + 1)
|
||||
colors[v] = -1
|
||||
rec(0)
|
||||
return out
|
||||
|
||||
|
||||
def canonicalize(coloring):
|
||||
mapping = {}
|
||||
out = []
|
||||
for c in coloring:
|
||||
if c not in mapping:
|
||||
mapping[c] = len(mapping)
|
||||
out.append(mapping[c])
|
||||
return tuple(out)
|
||||
|
||||
|
||||
def kempe_neighbors(coloring, adj, a, b):
|
||||
n = len(coloring)
|
||||
in_set = [coloring[v] == a or coloring[v] == b for v in range(n)]
|
||||
seen = [False] * n
|
||||
out = []
|
||||
for start in range(n):
|
||||
if not in_set[start] or seen[start]:
|
||||
continue
|
||||
comp = []
|
||||
q = deque([start])
|
||||
seen[start] = True
|
||||
while q:
|
||||
v = q.popleft()
|
||||
comp.append(v)
|
||||
for u in adj[v]:
|
||||
if in_set[u] and not seen[u]:
|
||||
seen[u] = True
|
||||
q.append(u)
|
||||
new = list(coloring)
|
||||
for v in comp:
|
||||
new[v] = b if new[v] == a else a
|
||||
out.append(tuple(new))
|
||||
return out
|
||||
|
||||
|
||||
def kempe_components(adj):
|
||||
raw = proper_4colorings(adj)
|
||||
canon = sorted({canonicalize(c) for c in raw})
|
||||
index = {c: i for i, c in enumerate(canon)}
|
||||
parent = list(range(len(canon)))
|
||||
def find(x):
|
||||
while parent[x] != x:
|
||||
parent[x] = parent[parent[x]]
|
||||
x = parent[x]
|
||||
return x
|
||||
def union(x, y):
|
||||
rx, ry = find(x), find(y)
|
||||
if rx != ry:
|
||||
parent[rx] = ry
|
||||
for c in canon:
|
||||
ci = index[c]
|
||||
for a, b in combinations(range(4), 2):
|
||||
for swapped in kempe_neighbors(c, adj, a, b):
|
||||
cs = canonicalize(swapped)
|
||||
if cs == c:
|
||||
continue
|
||||
union(ci, index[cs])
|
||||
classes = defaultdict(list)
|
||||
for c, ci in index.items():
|
||||
classes[find(ci)].append(c)
|
||||
return list(classes.values()), len(raw)
|
||||
|
||||
|
||||
def format_chords(chords):
|
||||
return ','.join(f'{a}-{b}' for a, b in chords) if chords else 'none'
|
||||
|
||||
|
||||
def sweep(m_max, k_max, max_chords, verbose=False):
|
||||
multi = []
|
||||
rows = []
|
||||
t0 = time.time()
|
||||
for m in range(3, m_max + 1):
|
||||
for k in range(3, k_max + 1):
|
||||
chord_sets = all_noncrossing_chord_sets(k, max_chords)
|
||||
paths = all_lattice_paths(m, k)
|
||||
n_tires = len(chord_sets) * len(paths)
|
||||
t_mk = time.time()
|
||||
for chords in chord_sets:
|
||||
for path in paths:
|
||||
adj = build_tire(m, k, chords, path)
|
||||
classes, n_raw = kempe_components(adj)
|
||||
n_classes = len(classes)
|
||||
n_canon = sum(len(cl) for cl in classes)
|
||||
rows.append((m, k, chords, path, n_raw, n_canon, n_classes))
|
||||
if n_classes > 1:
|
||||
multi.append((m, k, chords, path, n_raw, n_canon,
|
||||
n_classes, classes))
|
||||
if verbose:
|
||||
print(f" m={m} k={k}: {n_tires} tires in "
|
||||
f"{time.time() - t_mk:.2f}s")
|
||||
elapsed = time.time() - t0
|
||||
return rows, multi, elapsed
|
||||
|
||||
|
||||
def print_summary(rows, multi, elapsed):
|
||||
by_count = defaultdict(int)
|
||||
for r in rows:
|
||||
by_count[r[6]] += 1
|
||||
print(f"# tires checked: {len(rows)} in {elapsed:.2f}s")
|
||||
print("Kempe class count distribution:")
|
||||
for nc, cnt in sorted(by_count.items()):
|
||||
print(f" {nc} class(es): {cnt} tires")
|
||||
print(f"# multi-class tires: {len(multi)}")
|
||||
if multi:
|
||||
by_mk = defaultdict(int)
|
||||
for (m, k, *_rest) in multi:
|
||||
by_mk[(m, k)] += 1
|
||||
print("multi-class breakdown by (m, k):")
|
||||
for (m, k), cnt in sorted(by_mk.items()):
|
||||
print(f" (m={m}, k={k}): {cnt}")
|
||||
|
||||
|
||||
def dump_multi(multi, limit=10, show_classes=False):
|
||||
if not multi:
|
||||
return
|
||||
print()
|
||||
print(f"first {min(limit, len(multi))} multi-class tires:")
|
||||
for (m, k, chords, path, n_raw, n_canon, n_classes, classes) in multi[:limit]:
|
||||
print(f" m={m} k={k} chords={format_chords(chords)} path={path}: "
|
||||
f"raw={n_raw} canon={n_canon} classes={n_classes}")
|
||||
if show_classes:
|
||||
for i, cl in enumerate(classes):
|
||||
rep = sorted(cl)[0]
|
||||
print(f" class {i} (size {len(cl)}): rep={rep}")
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument('--m', type=int, help='single tire: outer length')
|
||||
parser.add_argument('--k', type=int, help='single tire: inner length')
|
||||
parser.add_argument('--path', type=str, help='single tire: lattice path')
|
||||
parser.add_argument('--chords', type=str, default='',
|
||||
help='single tire: e.g. "0-2,1-3" or empty')
|
||||
parser.add_argument('--m-max', type=int, default=5)
|
||||
parser.add_argument('--k-max', type=int, default=5)
|
||||
parser.add_argument('--max-chords', type=int, default=0)
|
||||
parser.add_argument('--show-multi', type=int, default=10,
|
||||
help='print up to N multi-class tires (default 10)')
|
||||
parser.add_argument('--dump', action='store_true',
|
||||
help='print full class data for each multi-class tire')
|
||||
parser.add_argument('-v', '--verbose', action='store_true')
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.m is not None and args.k is not None and args.path is not None:
|
||||
chords = ()
|
||||
if args.chords:
|
||||
chords = tuple(tuple(sorted((int(a), int(b))))
|
||||
for a, b in (p.split('-') for p in args.chords.split(',')))
|
||||
adj = build_tire(args.m, args.k, chords, args.path)
|
||||
classes, n_raw = kempe_components(adj)
|
||||
n_classes = len(classes)
|
||||
n_canon = sum(len(cl) for cl in classes)
|
||||
print(f"m={args.m} k={args.k} chords={format_chords(chords)} "
|
||||
f"path={args.path}")
|
||||
print(f" raw 4-colorings: {n_raw}")
|
||||
print(f" canonical (mod S_4): {n_canon}")
|
||||
print(f" Kempe classes: {n_classes}")
|
||||
for i, cl in enumerate(classes):
|
||||
rep = sorted(cl)[0]
|
||||
print(f" class {i}: size={len(cl)} rep={rep}")
|
||||
return
|
||||
|
||||
rows, multi, elapsed = sweep(args.m_max, args.k_max, args.max_chords,
|
||||
verbose=args.verbose)
|
||||
print_summary(rows, multi, elapsed)
|
||||
dump_multi(multi, limit=args.show_multi, show_classes=args.dump)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -0,0 +1,462 @@
|
||||
"""Support on genuine level-cycle candidates inside a tire.
|
||||
|
||||
Here a tested cycle is not an arbitrary tire boundary. It must be a
|
||||
bounded face cycle of the inner outerplanar graph O, distinct from
|
||||
O's outer-face boundary. This models a level/seam cycle as it appears
|
||||
inside the parent's next-level graph, rather than treating it as an
|
||||
outer boundary of a tire at the same level.
|
||||
|
||||
For each such cycle C, the support is the set of proper 4-colorings of
|
||||
C that extend to a proper 4-coloring of the parent tire graph.
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
from functools import lru_cache
|
||||
from itertools import combinations, permutations, product
|
||||
from math import comb
|
||||
|
||||
COLORS = (0, 1, 2, 3)
|
||||
|
||||
|
||||
def canonical_edge(u: int, v: int) -> tuple[int, int]:
|
||||
return (u, v) if u < v else (v, u)
|
||||
|
||||
|
||||
def cycle_edges(vertices: list[int]) -> set[tuple[int, int]]:
|
||||
return {
|
||||
canonical_edge(vertices[i], vertices[(i + 1) % len(vertices)])
|
||||
for i in range(len(vertices))
|
||||
}
|
||||
|
||||
|
||||
def chord_crosses(c1: tuple[int, int], c2: tuple[int, int]) -> bool:
|
||||
a, b = sorted(c1)
|
||||
c, d = sorted(c2)
|
||||
return (a < c < b < d) or (c < a < d < b)
|
||||
|
||||
|
||||
def noncrossing_chord_sets(k: int, max_chords: int | None = None):
|
||||
candidates = [
|
||||
(a, b)
|
||||
for a in range(k)
|
||||
for b in range(a + 2, k)
|
||||
if not (a == 0 and b == k - 1)
|
||||
]
|
||||
out = [()]
|
||||
|
||||
def rec(start: int, chosen: tuple[tuple[int, int], ...]) -> None:
|
||||
if max_chords is not None and len(chosen) >= max_chords:
|
||||
return
|
||||
for idx in range(start, len(candidates)):
|
||||
ch = candidates[idx]
|
||||
if any(chord_crosses(ch, old) for old in chosen):
|
||||
continue
|
||||
nxt = chosen + (ch,)
|
||||
out.append(nxt)
|
||||
rec(idx + 1, nxt)
|
||||
|
||||
rec(0, ())
|
||||
return tuple(sorted(set(out), key=lambda cs: (len(cs), cs)))
|
||||
|
||||
|
||||
def lattice_paths(m: int, k: int):
|
||||
n = m + k
|
||||
for outer_positions in combinations(range(n), m):
|
||||
outer_positions = set(outer_positions)
|
||||
yield "".join("O" if i in outer_positions else "I" for i in range(n))
|
||||
|
||||
|
||||
def tire_edges(m: int, k: int, path: str, chords: tuple[tuple[int, int], ...]) -> tuple[tuple[int, int], ...]:
|
||||
outer = list(range(m))
|
||||
inner = list(range(m, m + k))
|
||||
edges = set()
|
||||
edges |= cycle_edges(outer)
|
||||
edges |= cycle_edges(inner)
|
||||
for a, b in chords:
|
||||
edges.add(canonical_edge(inner[a], inner[b]))
|
||||
|
||||
edges.add(canonical_edge(outer[0], inner[0]))
|
||||
i = j = 0
|
||||
for move in path:
|
||||
if move == "O":
|
||||
edges.add(canonical_edge(outer[(i + 1) % m], inner[j % k]))
|
||||
i += 1
|
||||
else:
|
||||
edges.add(canonical_edge(outer[i % m], inner[(j + 1) % k]))
|
||||
j += 1
|
||||
return tuple(sorted(edges))
|
||||
|
||||
|
||||
def proper_cycle_colorings(n: int) -> tuple[tuple[int, ...], ...]:
|
||||
out = []
|
||||
for colors in product(COLORS, repeat=n):
|
||||
if all(colors[i] != colors[(i + 1) % n] for i in range(n)):
|
||||
out.append(colors)
|
||||
return tuple(out)
|
||||
|
||||
|
||||
@lru_cache(maxsize=None)
|
||||
def boundary_support(
|
||||
n_vertices: int,
|
||||
edges: tuple[tuple[int, int], ...],
|
||||
boundary_vertices: tuple[int, ...],
|
||||
) -> frozenset[tuple[int, ...]]:
|
||||
assigned = {0: 0}
|
||||
adj = {v: set() for v in range(n_vertices)}
|
||||
for u, v in edges:
|
||||
adj[u].add(v)
|
||||
adj[v].add(u)
|
||||
|
||||
remaining = [v for v in range(n_vertices) if v not in assigned]
|
||||
remaining.sort(key=lambda v: (-len(adj[v]), v))
|
||||
support = set()
|
||||
|
||||
def dfs(index: int) -> None:
|
||||
if index == len(remaining):
|
||||
support.add(tuple(assigned[v] for v in boundary_vertices))
|
||||
return
|
||||
best_at = index
|
||||
best_options = None
|
||||
for pos in range(index, len(remaining)):
|
||||
v = remaining[pos]
|
||||
used = {assigned[w] for w in adj[v] if w in assigned}
|
||||
options = tuple(c for c in COLORS if c not in used)
|
||||
if best_options is None or len(options) < len(best_options):
|
||||
best_at = pos
|
||||
best_options = options
|
||||
if len(options) <= 1:
|
||||
break
|
||||
if not best_options:
|
||||
return
|
||||
|
||||
remaining[index], remaining[best_at] = remaining[best_at], remaining[index]
|
||||
v = remaining[index]
|
||||
for color in best_options:
|
||||
assigned[v] = color
|
||||
dfs(index + 1)
|
||||
assigned.pop(v)
|
||||
remaining[index], remaining[best_at] = remaining[best_at], remaining[index]
|
||||
|
||||
dfs(0)
|
||||
return frozenset(support)
|
||||
|
||||
|
||||
def rotate_tuple(values: tuple[int, ...], shift: int) -> tuple[int, ...]:
|
||||
n = len(values)
|
||||
return tuple(values[(i + shift) % n] for i in range(n))
|
||||
|
||||
|
||||
def normalize_support(support: frozenset[tuple[int, ...]]) -> frozenset[tuple[int, ...]]:
|
||||
out = set()
|
||||
for state in support:
|
||||
for perm in permutations(COLORS):
|
||||
relabeled = tuple(perm[c] for c in state)
|
||||
for seq in (relabeled, relabeled[::-1]):
|
||||
for shift in range(len(seq)):
|
||||
out.add(rotate_tuple(seq, shift))
|
||||
return frozenset(out)
|
||||
|
||||
|
||||
def describe_chords(chords: tuple[tuple[int, int], ...]) -> str:
|
||||
return ",".join(f"{a}-{b}" for a, b in chords) if chords else "none"
|
||||
|
||||
|
||||
def canonicalize_tire_cycle(
|
||||
m: int,
|
||||
k: int,
|
||||
path: str,
|
||||
chords: tuple[tuple[int, int], ...],
|
||||
cycle: tuple[int, ...],
|
||||
) -> tuple[str, tuple[tuple[int, int], ...], tuple[int, ...]]:
|
||||
"""Canonical form of (tire, level cycle) under tire symmetries.
|
||||
|
||||
The tire has dihedral symmetry of order 2(m+k) on the rung sequence:
|
||||
cyclic shift s = "start at rung s of the original path", and reflection
|
||||
= "traverse in reverse" (the path string reverses, inner cycle direction
|
||||
flips so chord (a,b) becomes ((k-a) mod k, (k-b) mod k)).
|
||||
|
||||
The level cycle is transported by the same rigid relabelling and then
|
||||
normalized under its own D_n (the support is invariant under D_n on the
|
||||
cycle's vertex sequence, so this stage is part of the canonical form).
|
||||
"""
|
||||
n_rung = m + k
|
||||
n_cycle = len(cycle)
|
||||
best = None
|
||||
for reverse in (False, True):
|
||||
if reverse:
|
||||
p_base = path[::-1]
|
||||
cs_base = tuple(
|
||||
canonical_edge((k - a) % k, (k - b) % k) for a, b in chords
|
||||
)
|
||||
c_base = tuple((k - v) % k for v in reversed(cycle))
|
||||
else:
|
||||
p_base = path
|
||||
cs_base = chords
|
||||
c_base = cycle
|
||||
|
||||
prefix_i = [0]
|
||||
for ch in p_base:
|
||||
prefix_i.append(prefix_i[-1] + (1 if ch == "I" else 0))
|
||||
|
||||
for s in range(n_rung):
|
||||
b_s = prefix_i[s]
|
||||
shifted = p_base[s:] + p_base[:s]
|
||||
new_cs = tuple(
|
||||
sorted(
|
||||
canonical_edge((a - b_s) % k, (b - b_s) % k)
|
||||
for a, b in cs_base
|
||||
)
|
||||
)
|
||||
new_c = tuple((v - b_s) % k for v in c_base)
|
||||
norm_c = min(
|
||||
tuple(orient[(r + i) % n_cycle] for i in range(n_cycle))
|
||||
for orient in (new_c, new_c[::-1])
|
||||
for r in range(n_cycle)
|
||||
)
|
||||
cand = (shifted, new_cs, norm_c)
|
||||
if best is None or cand < best:
|
||||
best = cand
|
||||
return best
|
||||
|
||||
|
||||
def interval_vertices(vertices: tuple[int, ...], a: int, b: int) -> tuple[int, ...]:
|
||||
ia = vertices.index(a)
|
||||
out = [a]
|
||||
i = ia
|
||||
while vertices[i] != b:
|
||||
i = (i + 1) % len(vertices)
|
||||
out.append(vertices[i])
|
||||
return tuple(out)
|
||||
|
||||
|
||||
def chord_inside(poly: tuple[int, ...], chord: tuple[int, int]) -> bool:
|
||||
a, b = chord
|
||||
return a in poly and b in poly
|
||||
|
||||
|
||||
def polygon_faces(poly: tuple[int, ...], chords: tuple[tuple[int, int], ...]) -> list[tuple[int, ...]]:
|
||||
"""Cells inside a polygon cut by noncrossing chords."""
|
||||
usable = [ch for ch in chords if chord_inside(poly, ch)]
|
||||
split = None
|
||||
for a, b in usable:
|
||||
if a not in poly or b not in poly:
|
||||
continue
|
||||
ia, ib = poly.index(a), poly.index(b)
|
||||
distance = abs(ia - ib)
|
||||
if distance in (1, len(poly) - 1):
|
||||
continue
|
||||
split = (a, b)
|
||||
break
|
||||
|
||||
if split is None:
|
||||
return [poly]
|
||||
|
||||
a, b = split
|
||||
side1 = interval_vertices(poly, a, b)
|
||||
side2 = interval_vertices(poly, b, a)
|
||||
rest = tuple(ch for ch in usable if ch != split)
|
||||
return polygon_faces(side1, rest) + polygon_faces(side2, rest)
|
||||
|
||||
|
||||
def level_cycles_in_o(k: int, chords: tuple[tuple[int, int], ...]) -> tuple[tuple[int, ...], ...]:
|
||||
"""Bounded face cycles of O that are not the outer boundary of O."""
|
||||
if not chords:
|
||||
return ()
|
||||
outer = tuple(range(k))
|
||||
faces = polygon_faces(outer, chords)
|
||||
out = []
|
||||
for face in faces:
|
||||
if len(face) == k and set(face) == set(outer):
|
||||
continue
|
||||
out.append(face)
|
||||
return tuple(out)
|
||||
|
||||
|
||||
def enumerate_level_cycle_supports(
|
||||
n: int,
|
||||
outer_min: int,
|
||||
outer_max: int,
|
||||
inner_min: int,
|
||||
inner_max: int,
|
||||
max_chords: int | None,
|
||||
max_paths: int | None,
|
||||
canonicalize: bool = True,
|
||||
progress: bool = False,
|
||||
) -> tuple[dict[frozenset[tuple[int, ...]], list[dict]], dict]:
|
||||
supports: dict[frozenset[tuple[int, ...]], list[dict]] = {}
|
||||
seen_canon: set = set()
|
||||
stats = {"raw": 0, "canonical": 0}
|
||||
for m in range(outer_min, outer_max + 1):
|
||||
for k in range(max(inner_min, n), inner_max + 1):
|
||||
for chords in noncrossing_chord_sets(k, max_chords):
|
||||
level_cycles = [cycle for cycle in level_cycles_in_o(k, chords) if len(cycle) == n]
|
||||
if not level_cycles:
|
||||
continue
|
||||
for path_idx, path in enumerate(lattice_paths(m, k)):
|
||||
if max_paths is not None and path_idx >= max_paths:
|
||||
break
|
||||
edges = None
|
||||
for cycle in level_cycles:
|
||||
stats["raw"] += 1
|
||||
if canonicalize:
|
||||
canon = canonicalize_tire_cycle(m, k, path, chords, cycle)
|
||||
if canon in seen_canon:
|
||||
continue
|
||||
seen_canon.add(canon)
|
||||
stats["canonical"] += 1
|
||||
if edges is None:
|
||||
edges = tire_edges(m, k, path, chords)
|
||||
boundary = tuple(m + v for v in cycle)
|
||||
support = normalize_support(boundary_support(m + k, edges, boundary))
|
||||
meta = {
|
||||
"m": m,
|
||||
"k": k,
|
||||
"path": path,
|
||||
"chords": chords,
|
||||
"cycle": cycle,
|
||||
}
|
||||
supports.setdefault(support, []).append(meta)
|
||||
if progress:
|
||||
print(
|
||||
f" m={m} k={k} chords={describe_chords(chords)} "
|
||||
f"raw={stats['raw']} canonical={stats['canonical']} "
|
||||
f"supports={len(supports)}",
|
||||
flush=True,
|
||||
)
|
||||
return supports, stats
|
||||
|
||||
|
||||
def check_floor_containment(
|
||||
supports: dict[frozenset[tuple[int, ...]], list[dict]],
|
||||
) -> None:
|
||||
"""Test whether the smallest-size support is a subset of every other support.
|
||||
|
||||
The supports are fully normalized (orbits under S_4 x D_n), so set
|
||||
inclusion here is the right test for the "floor support is contained in
|
||||
every admissible support" conjecture.
|
||||
"""
|
||||
if len(supports) < 2:
|
||||
print(" containment: <2 supports, trivially contained")
|
||||
return
|
||||
keys = list(supports.keys())
|
||||
min_size = min(len(k) for k in keys)
|
||||
floors = [k for k in keys if len(k) == min_size]
|
||||
print(f" containment check: floor support (size {min_size}) vs {len(keys) - 1} others")
|
||||
for floor in floors:
|
||||
bad: list[tuple[int, tuple[int, ...]]] = []
|
||||
for other in keys:
|
||||
if other is floor:
|
||||
continue
|
||||
if not floor.issubset(other):
|
||||
missing = next(iter(floor - other))
|
||||
bad.append((len(other), missing))
|
||||
if not bad:
|
||||
print(f" floor IS a subset of all {len(keys) - 1} other supports")
|
||||
else:
|
||||
print(f" floor is NOT a subset of {len(bad)} of {len(keys) - 1} other supports")
|
||||
for size, missing in bad[:5]:
|
||||
print(f" missing example: floor coloring {missing} absent from support of size {size}")
|
||||
|
||||
|
||||
def summarize(
|
||||
n: int,
|
||||
supports: dict[frozenset[tuple[int, ...]], list[dict]],
|
||||
examples: int,
|
||||
stats: dict | None = None,
|
||||
) -> None:
|
||||
all_colorings = len(proper_cycle_colorings(n))
|
||||
if not supports:
|
||||
print()
|
||||
print(f"n={n}: no admissible level-cycle candidates in search window")
|
||||
return
|
||||
|
||||
min_size = min(len(support) for support in supports)
|
||||
max_size = max(len(support) for support in supports)
|
||||
min_supports = [support for support in supports if len(support) == min_size]
|
||||
pair_overlaps = [
|
||||
len(a & b)
|
||||
for i, a in enumerate(min_supports)
|
||||
for b in min_supports[i:]
|
||||
]
|
||||
print()
|
||||
print(f"n={n}")
|
||||
if stats:
|
||||
print(f" raw (tire,cycle) combos : {stats['raw']}")
|
||||
print(f" canonical (tire,cycle) classes: {stats['canonical']}")
|
||||
print(f" proper C_n colorings : {all_colorings}")
|
||||
print(f" distinct level-cycle supports : {len(supports)}")
|
||||
print(f" most restrictive support : {min_size}/{all_colorings} ({len(min_supports)} support types)")
|
||||
print(f" least restrictive support : {max_size}/{all_colorings}")
|
||||
print(f" overlap among max-restrict : min {min(pair_overlaps)}, max {max(pair_overlaps)}")
|
||||
check_floor_containment(supports)
|
||||
print(" examples:")
|
||||
|
||||
printed = 0
|
||||
for support, metas in sorted(supports.items(), key=lambda item: (len(item[0]), len(item[1]))):
|
||||
if len(support) != min_size:
|
||||
continue
|
||||
for meta in metas[:examples]:
|
||||
print(
|
||||
f" size={len(support)} m={meta['m']} k={meta['k']} "
|
||||
f"path={meta['path']} chords={describe_chords(meta['chords'])} "
|
||||
f"cycle={meta['cycle']}"
|
||||
)
|
||||
printed += 1
|
||||
if printed >= examples:
|
||||
return
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument("--n-min", type=int, default=3)
|
||||
parser.add_argument("--n-max", type=int, default=7)
|
||||
parser.add_argument("--outer-min", type=int, default=3)
|
||||
parser.add_argument("--outer-max", type=int, default=7)
|
||||
parser.add_argument("--inner-min", type=int, default=3)
|
||||
parser.add_argument("--inner-max", type=int, default=9)
|
||||
parser.add_argument("--max-chords", type=int, default=None)
|
||||
parser.add_argument("--max-paths", type=int, default=None)
|
||||
parser.add_argument("--examples", type=int, default=4)
|
||||
parser.add_argument(
|
||||
"--no-canonicalize",
|
||||
action="store_true",
|
||||
help="disable tire automorphism deduplication",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--progress",
|
||||
action="store_true",
|
||||
help="emit a one-line update after each (m, k, chord set)",
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
print("Level-cycle support inside parent tire inner graph O")
|
||||
print(" tested cycles: bounded face cycles of O, excluding O's outer boundary")
|
||||
print(f" outer length range : {args.outer_min}..{args.outer_max}")
|
||||
print(f" inner O size range : {args.inner_min}..{args.inner_max}")
|
||||
print(f" max chords : {args.max_chords if args.max_chords is not None else 'all'}")
|
||||
print(f" max paths/type : {args.max_paths if args.max_paths is not None else 'all'}")
|
||||
|
||||
for n in range(args.n_min, args.n_max + 1):
|
||||
rough_paths = sum(
|
||||
comb(m + k, m)
|
||||
for m in range(args.outer_min, args.outer_max + 1)
|
||||
for k in range(max(args.inner_min, n), args.inner_max + 1)
|
||||
)
|
||||
print(f"computing n={n} (rough path count before chords: {rough_paths})")
|
||||
supports, stats = enumerate_level_cycle_supports(
|
||||
n,
|
||||
args.outer_min,
|
||||
args.outer_max,
|
||||
args.inner_min,
|
||||
args.inner_max,
|
||||
args.max_chords,
|
||||
args.max_paths,
|
||||
canonicalize=not args.no_canonicalize,
|
||||
progress=args.progress,
|
||||
)
|
||||
summarize(n, supports, args.examples, stats)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,311 @@
|
||||
# Level-Cycle Support Findings
|
||||
|
||||
This is the corrected version of the boundary-overlap test.
|
||||
|
||||
The key modeling change is that a tested cycle must appear in the
|
||||
level-cycle/seam role: as a bounded face cycle inside the parent
|
||||
tire's inner outerplanar graph `O`, not as an arbitrary `B_out` or as
|
||||
the outer-face boundary of `O`.
|
||||
|
||||
Executable:
|
||||
|
||||
```bash
|
||||
python3 papers/nested_tire_decompositions_of_plane_triangulations/experiments/level_cycle_support.py
|
||||
```
|
||||
|
||||
## Model
|
||||
|
||||
For a parent tire `T = (B_out, O, E_ann)`, enumerate simple bounded
|
||||
face cycles of `O`.
|
||||
|
||||
A cycle is admissible only if:
|
||||
|
||||
- it is a bounded face cycle of `O`;
|
||||
- it is distinct from the outer-face boundary of `O`;
|
||||
- it is tested in this inner/next-level role, never as an outer
|
||||
boundary of a tire at the same level.
|
||||
|
||||
For each admissible cycle `C`, compute the set of proper 4-colorings
|
||||
of `C` that extend to a proper 4-coloring of the parent tire graph.
|
||||
Supports are normalized under color relabeling and dihedral symmetries
|
||||
of `C`.
|
||||
|
||||
## Capped Validation Run
|
||||
|
||||
Command:
|
||||
|
||||
```bash
|
||||
python3 -u papers/nested_tire_decompositions_of_plane_triangulations/experiments/level_cycle_support.py \
|
||||
--n-min 3 --n-max 6 --outer-max 5 --inner-max 7 --max-chords 2 --max-paths 30
|
||||
```
|
||||
|
||||
Result:
|
||||
|
||||
```text
|
||||
n=3
|
||||
proper C_n colorings : 24
|
||||
distinct level-cycle supports : 1
|
||||
most restrictive support : 24/24
|
||||
overlap among max-restrict : 24
|
||||
|
||||
n=4
|
||||
proper C_n colorings : 84
|
||||
distinct level-cycle supports : 3
|
||||
most restrictive support : 60/84
|
||||
overlap among max-restrict : 60
|
||||
|
||||
n=5
|
||||
proper C_n colorings : 240
|
||||
distinct level-cycle supports : 2
|
||||
most restrictive support : 120/240
|
||||
overlap among max-restrict : 120
|
||||
|
||||
n=6
|
||||
proper C_n colorings : 732
|
||||
distinct level-cycle supports : 13
|
||||
most restrictive support : 252/732
|
||||
overlap among max-restrict : 252
|
||||
```
|
||||
|
||||
The most restrictive admissible `n=4` level-cycle support found here
|
||||
has size `60/84`, and there is only one worst support type in this
|
||||
capped window.
|
||||
|
||||
Representative `n=4` admissible witness:
|
||||
|
||||
```text
|
||||
size=60
|
||||
m=3, k=5
|
||||
path=OOOIIIII
|
||||
chords=0-2
|
||||
cycle=(2, 3, 4, 0)
|
||||
```
|
||||
|
||||
Here `O` is a 5-cycle with chord `0-2`. The tested 4-cycle is the
|
||||
bounded face cycle `(2,3,4,0)`, not the outer-face boundary of `O`.
|
||||
|
||||
## Current Interpretation
|
||||
|
||||
With level-cycle admissibility enforced, the first-pass data no longer
|
||||
supports a zero-overlap obstruction at `n=4`. In the capped search,
|
||||
the maximum-restriction support type is unique for `n=3,4,5,6`, so
|
||||
overlap among maximum restrictions is trivially the whole worst
|
||||
support.
|
||||
|
||||
This is not yet a proof. The exact all-path `n=4` run with
|
||||
`--max-chords 2` was stopped after it ran too long interactively. The
|
||||
next implementation step should canonicalize outerplanar `O` and
|
||||
annular paths, or switch to a transfer/DP support computation, before
|
||||
claiming exhaustive results beyond small capped windows.
|
||||
|
||||
## Canonical Tire Quotient
|
||||
|
||||
The script now quotients out the dihedral symmetry of the tire on the
|
||||
rung sequence. Concretely, a tire `T = (m, k, path, chords)` together
|
||||
with a chosen level cycle `C` admits an order-`2(m+k)` action:
|
||||
|
||||
- cyclic shift `s`: "start counting from rung `s` of the original path".
|
||||
This rotates the inner labelling by `-b_s mod k`, where `b_s` is the
|
||||
number of inner steps in the first `s` moves; chords and `C` are
|
||||
carried by the same shift.
|
||||
- reflection: traverse the tire in the opposite direction. The path
|
||||
string reverses and each inner label `j` flips to `(k - j) mod k`,
|
||||
taking chord `(a, b)` to `((k - a) mod k, (k - b) mod k)` and reversing
|
||||
`C`.
|
||||
|
||||
The canonical form of `(T, C)` is the lex-min `(path, chords, cycle)`
|
||||
under that action, with `C` itself further minimised under its own
|
||||
`D_n` (which the support already quotients out, so this stage is free).
|
||||
|
||||
Two `(T, C)` pairs in the same canonical class produce identical
|
||||
normalised supports, so we compute the support once per class. Sanity
|
||||
checks at `n = 3, 4, 5` reproduce the prior capped support sizes
|
||||
(`24/24`, `60/84`, `120/240`) exactly while reducing raw work by
|
||||
roughly 20×–25×.
|
||||
|
||||
## Exhaustive `n=6` Run
|
||||
|
||||
With the canonical quotient in place we can now exhaust a meaningful
|
||||
window for `n = 6`. The smallest admissible inner ring is `k = 7`
|
||||
(a `k`-cycle plus chords cannot host a non-outer bounded `6`-face for
|
||||
`k < 7`).
|
||||
|
||||
Command:
|
||||
|
||||
```bash
|
||||
python3 -u papers/nested_tire_decompositions_of_plane_triangulations/experiments/level_cycle_support.py \
|
||||
--n-min 6 --n-max 6 --outer-min 3 --outer-max 6 --inner-min 7 --inner-max 8 \
|
||||
--progress --examples 6
|
||||
```
|
||||
|
||||
Result:
|
||||
|
||||
```text
|
||||
n=6
|
||||
raw (tire,cycle) combos : 238506
|
||||
canonical (tire,cycle) classes: 9144
|
||||
proper C_6 colorings : 732
|
||||
distinct level-cycle supports : 17
|
||||
most restrictive support : 252/732 (1 support type)
|
||||
least restrictive support : 732/732
|
||||
overlap among max-restrict : 252
|
||||
```
|
||||
|
||||
Compared to the earlier `--outer-max 5 --inner-max 7 --max-chords 2
|
||||
--max-paths 30` capped run, the distinct-support count climbs from
|
||||
`13` to `17`, but the **minimum support size is unchanged at `252/732`
|
||||
and is still realised by a unique support type**. The minimum is
|
||||
witnessed by the same minimal-`O` configuration that already showed up
|
||||
at smaller `n`:
|
||||
|
||||
```text
|
||||
size=252
|
||||
m=3, k=7
|
||||
chords=0-2
|
||||
cycle=(2, 3, 4, 5, 6, 0)
|
||||
```
|
||||
|
||||
i.e. the bounded `6`-face of a `7`-cycle with one chord, sitting inside
|
||||
the thinnest annulus `(m=3)`. Adding outer length (`m` up to `6`),
|
||||
inner length (`k` up to `8`), and unrestricted chord sets produces
|
||||
strictly *less* restrictive supports — never a new floor.
|
||||
|
||||
### Wider sweep: `outer 3..7, inner 7..9`
|
||||
|
||||
Command:
|
||||
|
||||
```bash
|
||||
python3 -u papers/nested_tire_decompositions_of_plane_triangulations/experiments/level_cycle_support.py \
|
||||
--n-min 6 --n-max 6 --outer-min 3 --outer-max 7 --inner-min 7 --inner-max 9 \
|
||||
--progress --examples 6
|
||||
```
|
||||
|
||||
Result:
|
||||
|
||||
```text
|
||||
n=6
|
||||
raw (tire,cycle) combos : 5662518
|
||||
canonical (tire,cycle) classes: 186818
|
||||
proper C_6 colorings : 732
|
||||
distinct level-cycle supports : 19
|
||||
most restrictive support : 252/732 (1 support type)
|
||||
least restrictive support : 732/732
|
||||
overlap among max-restrict : 252
|
||||
```
|
||||
|
||||
Adding `k = 9` and `m = 7` brings 2 new distinct supports (`17 → 19`),
|
||||
**both strictly above the floor**. The most restrictive support is
|
||||
**still `252/732`, still unique, and still realised by the same
|
||||
minimal-`O` witness** (`m=3, k=7, chord=0-2, cycle=(2,3,4,5,6,0)`).
|
||||
The `m = 3` configurations dominated the floor in every (`m`, `k`)
|
||||
sweep examined.
|
||||
|
||||
### What this changes
|
||||
|
||||
- The "most restrictive support is unique" claim for `n = 6` is now
|
||||
backed by an exhaustive (not capped) sweep over `m ∈ [3, 7]`,
|
||||
`k ∈ [7, 9]`, all chord sets, all annular paths.
|
||||
- The earlier-feared zero-overlap obstruction at `n = 4` does not
|
||||
reappear at `n = 6` either: overlap among maximum-restriction
|
||||
supports is trivially the whole worst support, because there is only
|
||||
one worst support.
|
||||
- The witness for the floor is structurally the same across
|
||||
`n = 3, 4, 5, 6`: a single chord on a `(n+1)`-cycle, embedded in the
|
||||
thinnest annulus, with the tested cycle taken as the bounded
|
||||
`n`-face. That stability is suggestive (it hints that the worst
|
||||
level-cycle support is governed by a small canonical configuration)
|
||||
but is not yet a theorem.
|
||||
|
||||
### Floor-stability-in-`m` conjecture
|
||||
|
||||
Across every searched `n`, the floor witness has been `m = 3`. This
|
||||
is consistent with a **support-monotonicity** picture: subdividing any
|
||||
outer or annular edge of an `m = 3` floor witness produces an `m = 4`
|
||||
tire whose support strictly contains the original (the new degree-`2`
|
||||
vertex adds coloring freedom, and the subdivided edge's endpoints are
|
||||
no longer adjacent, so they may share a color). By induction the
|
||||
floor over `m ≥ 3` is bounded above by the `m = 3` floor.
|
||||
|
||||
The empirical run confirms this bound is tight up to `m ≤ 7, k ≤ 9` at
|
||||
`n = 6`: no `m ≥ 4` tire produced a support strictly smaller than the
|
||||
`m = 3` floor. A theorem-style statement would be:
|
||||
|
||||
> **(Conjecture)** For every `n`, every `k ≥ n + 1`, and every chord
|
||||
> set on `C_k` containing an `n`-face, the level-cycle support floor
|
||||
> over all annular paths and all `m ≥ 3` is achieved at `m = 3`.
|
||||
|
||||
If true, this collapses the exhaustive search to `m = 3` only and
|
||||
opens the door to closed-form support computation for the worst case.
|
||||
The obstruction to a quick proof is exotic `m ≥ 4` configurations not
|
||||
reachable by subdivision from an `m = 3` floor witness — none has
|
||||
appeared empirically, but their non-existence is not yet ruled out.
|
||||
|
||||
#### Skip-`m=3` sweep (partial)
|
||||
|
||||
To probe the conjecture more directly we ran a "skip-`m=3`" sweep
|
||||
explicitly excluding `m = 3` from the search:
|
||||
|
||||
```bash
|
||||
python3 -u papers/nested_tire_decompositions_of_plane_triangulations/experiments/level_cycle_support.py \
|
||||
--n-min 6 --n-max 6 --outer-min 4 --outer-max 10 --inner-min 7 --inner-max 9 \
|
||||
--progress
|
||||
```
|
||||
|
||||
The sweep ran for `11h 49m` and was terminated partway through `m = 8,
|
||||
k = 9` at chord-set #6 of the 2-chord block (raw=6.45M canonical=223k).
|
||||
Throughout the run --- across `m ∈ [4, 7]` exhaustively and `m = 8`
|
||||
partially --- the distinct-support count stayed locked at **`13`**
|
||||
(vs `19` for the full `m ∈ [3, 7]` run). The six missing support
|
||||
types are precisely the ones with `m = 3`-only witnesses, including
|
||||
the unique `252/732` floor.
|
||||
|
||||
Conclusion of the partial run: no support of size `≤ 252` appeared
|
||||
under `m ≥ 4` in any configuration searched, and the support count
|
||||
saturated early, suggesting the support landscape for `m ≥ 4` is
|
||||
strictly looser than for `m = 3` even as `m` grows. The conjecture is
|
||||
not falsified by any data we have; pushing `m` to `9` or `10` is
|
||||
left as future work (path-count growth makes it expensive: `m = 10,
|
||||
k = 9` alone has `C(19, 10) ≈ 92{,}000` paths per chord set).
|
||||
|
||||
### Floor-containment conjecture — refuted
|
||||
|
||||
Floor-stability bounds the *size* of the worst-case support but not
|
||||
its content. For the tire-tree compatibility argument, what would
|
||||
have closed the loop is a containment statement:
|
||||
|
||||
> **(Conjecture, refuted)** For every `n`, the unique floor support
|
||||
> `F_n` is a *subset* of every admissible level-cycle support. Every
|
||||
> level-cycle coloring that the `m = 3` floor witness allows is also
|
||||
> allowed by every other tire.
|
||||
|
||||
The `check_floor_containment` helper in `level_cycle_support.py`
|
||||
tests this directly on the computed supports. The conjecture **fails
|
||||
at `n = 4` and `n = 6`**:
|
||||
|
||||
```text
|
||||
n=4: floor (size 60) is NOT a subset of 1 of 2 other supports
|
||||
missing: floor coloring (1, 2, 1, 2) absent from support of size 72
|
||||
|
||||
n=6: floor (size 252) is NOT a subset of 11 of 16 other supports
|
||||
missing: floor coloring (1, 3, 2, 1, 3, 2) absent from support of size 708
|
||||
missing: floor coloring (2, 3, 2, 1, 3, 1) absent from support of size 492
|
||||
missing: floor coloring (2, 3, 2, 3, 2, 3) absent from support of size 720
|
||||
```
|
||||
|
||||
(`n = 3` is trivial — only one support type. `n = 5` happens to
|
||||
satisfy containment in the searched window but only against a single
|
||||
other support, so the data is too thin to be evidence either way.)
|
||||
|
||||
The missing colorings cluster on **bipartite alternations**
|
||||
(`(1,2,1,2)`, `(2,3,2,3,2,3)`) and **3-periodic patterns**
|
||||
(`(1,3,2,1,3,2)`). These are the most "structured" colorings of `C_n`
|
||||
— colorings the thin `m = 3` annulus is free to produce, but other
|
||||
tires (with larger annulus / heavier chord patterns) actively forbid
|
||||
because their interior forces additional colour variety.
|
||||
|
||||
**Consequence.** The simple structural shortcut — "all supports
|
||||
contain a common floor, hence pairwise intersections are trivially
|
||||
non-empty" — does not hold. Same-`n` compatibility (which by `4CT` is
|
||||
still forced to hold) cannot be reduced to a single containment fact;
|
||||
it requires a finer structural analysis of *which* colorings sit in
|
||||
*which* supports, or a different shortcut entirely.
|
||||
|
After Width: | Height: | Size: 250 KiB |
|
After Width: | Height: | Size: 85 KiB |
|
After Width: | Height: | Size: 204 KiB |
|
After Width: | Height: | Size: 391 KiB |
|
After Width: | Height: | Size: 102 KiB |
|
After Width: | Height: | Size: 364 KiB |
|
After Width: | Height: | Size: 73 KiB |
@@ -0,0 +1,66 @@
|
||||
\relax
|
||||
\citation{bauerfeld-nested-tire-duals}
|
||||
\citation{birkhoff-reducibility}
|
||||
\citation{birkhoff-lewis-chromatic}
|
||||
\citation{tutte-chromatic-sums-1973}
|
||||
\citation{tutte-algebraic-colorings}
|
||||
\citation{tutte-four-colour-conjecture}
|
||||
\citation{dvorak-lidicky-cones}
|
||||
\citation{heesch-untersuchungen}
|
||||
\citation{robertson-sanders-seymour-thomas}
|
||||
\@writefile{toc}{\contentsline {section}{\tocsection {}{1}{Introduction}}{1}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {paragraph}{\tocparagraph {}{}{Related work.}}{1}{}\protected@file@percent }
|
||||
\citation{robertson-sanders-seymour-thomas}
|
||||
\newlabel{def:dual}{{1.3}{2}}
|
||||
\newlabel{def:dual-depth}{{1.4}{2}}
|
||||
\newlabel{def:dual-component}{{1.5}{2}}
|
||||
\@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.}}{3}{}\protected@file@percent }
|
||||
\newlabel{fig:dual-depth}{{1}{3}}
|
||||
\newlabel{def:tire-graph}{{1.6}{3}}
|
||||
\@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.}}{4}{}\protected@file@percent }
|
||||
\newlabel{fig:tire-example}{{2}{4}}
|
||||
\newlabel{def:medial-tire-graph}{{1.7}{4}}
|
||||
\newlabel{thm:annular-medial-colour-bound}{{1.8}{4}}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces The medial tire graph for the tire in Figure\nonbreakingspace 2\hbox {}. The chord of $O$ is drawn faintly and omitted before taking the medial graph; medial edges between consecutive outer-boundary edges or consecutive inner-boundary edges are also omitted. Each medial vertex is placed at the midpoint of its corresponding retained tire edge.}}{5}{}\protected@file@percent }
|
||||
\newlabel{fig:medial-tire-example}{{3}{5}}
|
||||
\newlabel{rem:tire-counts}{{1.9}{5}}
|
||||
\newlabel{prop:no-level-d-pinch}{{1.10}{6}}
|
||||
\newlabel{lem:tire-component}{{1.11}{6}}
|
||||
\citation{bauerfeld-depth}
|
||||
\citation{bauerfeld-depth}
|
||||
\newlabel{thm:tread-partition}{{1.12}{8}}
|
||||
\newlabel{rem:tire-component-degenerate}{{1.13}{8}}
|
||||
\newlabel{rem:tire-no-extra-hypotheses}{{1.14}{8}}
|
||||
\newlabel{thm:inner-dual-outerplanar}{{1.15}{9}}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces Case 1 ($R$ = disk, $k = 6$). The apex $v_0$ sits at the centre; the non-degenerate boundary $B_{\mathrm {non-deg}}$ (red) is the hexagonal outer cycle; spokes (grey) triangulate the disk into a fan of $6$ triangles around $v_0$. Each triangle has two spoke edges (interior, contributing $\Gamma $-edges) and one boundary edge (contributing a leaf in $D(T)$, no $\Gamma $-edge). The inner dual $\Gamma $ (blue) is the cycle $C_6$ formed by the six annular face centroids, a manifestly outerplanar graph.}}{10}{}\protected@file@percent }
|
||||
\newlabel{fig:inner-dual-disk-case}{{4}{10}}
|
||||
\citation{bauerfeld-nested-tire-duals}
|
||||
\citation{bauerfeld-nested-tire-duals}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {5}{\ignorespaces Case 2 ($R$ = annulus) with $O$ a barbell. $B_{\mathrm {out}}$ is the outer hexagon (red); $O$ has two triangles $\{a_1, a_2, a_3\}$ and $\{b_1, b_2, b_3\}$ joined by the bridge $a_3\text {--}b_1$ (all light red). The annulus is triangulated by $14$ annular triangles: $6$ ``outer-cap'' triangles (one per outer edge), $6$ ``inner-cap'' triangles (one per non-bridge edge of $O$), and $2$ ``bridge-cap'' triangles $\{u_0, a_3, b_1\}$ and $\{u_3, a_3, b_1\}$ adjacent to the bridge. Each blue dot sits at the centroid of an annular triangle; blue edges connect dual vertices whose triangles share an interior annular edge (spoke or bridge). The two bridge-cap vertices have $\Gamma $-degree $3$ (their triangles have no boundary edge) and are joined by the dashed blue \emph {chord} corresponding to the bridge; the remaining $13$ edges form the Hamilton cycle that wraps around the annulus. All $14$ vertices lie on the outer face of the cycle-with-chord embedding, so $\Gamma \cong \Theta (1, 7, 7)$ is outerplanar.}}{11}{}\protected@file@percent }
|
||||
\newlabel{fig:inner-dual-annulus-case}{{5}{11}}
|
||||
\newlabel{rem:hamilton-cycle-spoke-only}{{1.16}{11}}
|
||||
\newlabel{rem:bridge-case-theta}{{1.17}{11}}
|
||||
\newlabel{thm:tread-tree}{{1.18}{12}}
|
||||
\newlabel{rem:tree-multiple-children}{{1.19}{13}}
|
||||
\newlabel{thm:tire-tree-decomposition}{{1.20}{13}}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {6}{\ignorespaces Tire-tree decomposition (Theorem\nonbreakingspace 1.20\hbox {}) on a $13$-vertex maximal planar example $G$ with five BFS levels. $(a)$ $G$ with vertex source $v_0$ and $\ell _G \in \{0,1,2,3,4\}$; four nested seams are highlighted, $C_{T_R} = \{a,b,c\}$ (orange), $C_{T_L} = \{a,c,d\}$ (red, including the chord $a$-$c$ shared with $C_{T_R}$), $C_{T_{LL}} = \{f_1, f_2, f_3\}$ (purple), $C_{T_{LLL}} = \{g_1, g_2, g_3\}$ (teal). Inset: the rooted tree of tire treads $\mathcal {T}(G, \{v_0\})$ branches at $T_0$ into the leaf $T_R$ (containing $e$) and a chain $T_L \to T_{LL} \to T_{LLL}$ (the highlighted sub-tree). $(b)$ The disk $G_{T_L}$ inside the seam $C_{T_L}$, drawn standalone with $C_{T_L}$ as cycle source and vertex labels rotated to match the new (cycle-source) role of the boundary triangle. $\ell _{G_{T_L}}(\cdot ) = \ell _G(\cdot ) - 1$ on $V(G_{T_L})$ (verified by the generator script), and $\mathcal {T}(G_{T_L}, C_{T_L})$ is the chain $T_L \to T_{LL} \to T_{LLL}$, iso to the highlighted sub-tree of $(a)$.}}{15}{}\protected@file@percent }
|
||||
\newlabel{fig:tire-tree-decomposition}{{6}{15}}
|
||||
\newlabel{rem:tree-coloring-factorisation}{{1.21}{15}}
|
||||
\bibcite{tait-original}{1}
|
||||
\bibcite{bauerfeld-depth}{2}
|
||||
\bibcite{bauerfeld-nested-tire-duals}{3}
|
||||
\bibcite{birkhoff-reducibility}{4}
|
||||
\bibcite{birkhoff-lewis-chromatic}{5}
|
||||
\bibcite{tutte-four-colour-conjecture}{6}
|
||||
\bibcite{tutte-algebraic-colorings}{7}
|
||||
\bibcite{tutte-chromatic-sums-1973}{8}
|
||||
\bibcite{heesch-untersuchungen}{9}
|
||||
\bibcite{robertson-sanders-seymour-thomas}{10}
|
||||
\bibcite{dvorak-lidicky-cones}{11}
|
||||
\newlabel{tocindent-1}{0pt}
|
||||
\newlabel{tocindent0}{14.69437pt}
|
||||
\newlabel{tocindent1}{17.77782pt}
|
||||
\newlabel{tocindent2}{0pt}
|
||||
\newlabel{tocindent3}{0pt}
|
||||
\@writefile{toc}{\contentsline {section}{\tocsection {}{}{References}}{16}{}\protected@file@percent }
|
||||
\gdef \@abspage@last{16}
|
||||
@@ -0,0 +1,151 @@
|
||||
# Fdb version 3
|
||||
["pdflatex"] 1780945550 "paper.tex" "paper.pdf" "paper" 1780945552
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/map/fontname/texfonts.map" 1577235249 3524 cb3e574dea2d1052e39280babc910dc8 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex7.tfm" 1246382020 1004 54797486969f23fa377b128694d548df ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex8.tfm" 1246382020 988 bdf658c3bfc2d96d3c8b02cfc1c94c20 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex9.tfm" 1246382020 996 a18840b13b499c08ac2de96a99eda4bc ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm" 1246382020 916 f87d7c45f9c908e672703b83b72241a3 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam5.tfm" 1246382020 924 9904cf1d39e9767e7a3622f2a125a565 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam7.tfm" 1246382020 928 2dc8d444221b7a635bb58038579b861a ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm" 1246382020 908 2921f8a10601f252058503cc6570e581 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm5.tfm" 1246382020 940 75ac932a52f80982a9f8ea75d03a34cf ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm7.tfm" 1246382020 940 228d6584342e91276bf566bcf9716b83 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/tfm/public/cm/cmbx10.tfm" 1136768653 1328 c834bbb027764024c09d3d2bf908b5f0 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/tfm/public/cm/cmbx8.tfm" 1136768653 1332 1fde11373e221473104d6cc5993f046e ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/tfm/public/cm/cmcsc10.tfm" 1136768653 1300 63a6111ee6274895728663cf4b4e7e81 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/tfm/public/cm/cmmi6.tfm" 1136768653 1512 f21f83efb36853c0b70002322c1ab3ad ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/tfm/public/cm/cmmi8.tfm" 1136768653 1520 eccf95517727cb11801f4f1aee3a21b4 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/tfm/public/cm/cmmi9.tfm" 1136768653 1524 d89e2d087a9828407a196f428428ef4a ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/tfm/public/cm/cmr6.tfm" 1136768653 1300 b62933e007d01cfd073f79b963c01526 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/tfm/public/cm/cmr8.tfm" 1136768653 1292 21c1c5bfeaebccffdb478fd231a0997d ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/tfm/public/cm/cmr9.tfm" 1136768653 1292 6b21b9c2c7bebb38aa2273f7ca0fb3af ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/tfm/public/cm/cmsy6.tfm" 1136768653 1116 933a60c408fc0a863a92debe84b2d294 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/tfm/public/cm/cmsy8.tfm" 1136768653 1120 8b7d695260f3cff42e636090a8002094 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/tfm/public/cm/cmsy9.tfm" 1136768653 1116 25a7bf822c58caf309a702ef79f4afbb ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/tfm/public/cm/cmti10.tfm" 1136768653 1480 aa8e34af0eb6a2941b776984cf1dfdc4 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/tfm/public/cm/cmti7.tfm" 1136768653 1492 86331993fe614793f5e7e755835c31c5 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/tfm/public/cm/cmti8.tfm" 1136768653 1504 1747189e0441d1c18f3ea56fafc1c480 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx10.pfb" 1248133631 34811 78b52f49e893bcba91bd7581cdc144c0 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx8.pfb" 1248133631 32166 b0c356b15f19587482a9217ce1d8fa67 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmcsc10.pfb" 1248133631 32001 6aeea3afe875097b1eb0da29acd61e28 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmex10.pfb" 1248133631 30251 6afa5cb1d0204815a708a080681d4674 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi10.pfb" 1248133631 36299 5f9df58c2139e7edcf37c8fca4bd384d ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi5.pfb" 1248133631 37912 77d683123f92148345f3fc36a38d9ab1 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi7.pfb" 1248133631 36281 c355509802a035cadc5f15869451dcee ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi8.pfb" 1248133631 35469 70d41d2b9ea31d5d813066df7c99281c ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi9.pfb" 1248133631 36094 798f80770b3b148ceedd006d487db67c ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb" 1248133631 35752 024fb6c41858982481f6968b5fc26508 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmr5.pfb" 1248133631 31809 8670ca339bf94e56da1fc21c80635e2a ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmr6.pfb" 1248133631 32734 69e00a6b65cedb993666e42eedb3d48f ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmr7.pfb" 1248133631 32762 224316ccc9ad3ca0423a14971cfa7fc1 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmr8.pfb" 1248133631 32726 0a1aea6fcd6468ee2cf64d891f5c43c8 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmr9.pfb" 1248133631 33993 9b89b85fd2d9df0482bd47194d1d3bf3 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy10.pfb" 1248133631 32569 5e5ddc8df908dea60932f3c484a54c0d ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy5.pfb" 1248133631 32915 7bf7720c61a5b3a7ff25b0964421c9b6 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy6.pfb" 1248133631 32587 1788b0c1c5b39540c96f5e42ccd6dae8 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy7.pfb" 1248133631 32716 08e384dc442464e7285e891af9f45947 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy9.pfb" 1248133631 32442 c975af247b6702f7ca0c299af3616b80 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmti10.pfb" 1248133631 37944 359e864bd06cde3b1cf57bb20757fb06 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmti8.pfb" 1248133631 35660 fb24af7afbadb71801619f1415838111 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/symbols/msam10.pfb" 1248133631 31764 459c573c03a4949a528c2cc7f557e217 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/symbols/msbm10.pfb" 1248133631 34694 ad62b13721ee8eda1dcc8993c8bd7041 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/context/base/mkii/supp-pdf.mkii" 1461363279 71627 94eb9990bed73c364d7f53f960cc8c5b ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex" 1601326656 992 855ff26741653ab54814101ca36e153c ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.code.tex" 1601326656 43820 1fef971b75380574ab35a0d37fd92608 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal.code.tex" 1601326656 19324 f4e4c6403dd0f1605fd20ed22fa79dea ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicstate.code.tex" 1601326656 6038 ccb406740cc3f03bbfb58ad504fe8c27 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.code.tex" 1601326656 6944 e12f8f7a7364ddf66f93ba30fb3a3742 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.code.tex" 1601326656 4883 42daaf41e27c3735286e23e48d2d7af9 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.code.tex" 1601326656 2544 8c06d2a7f0f469616ac9e13db6d2f842 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconstruct.code.tex" 1601326656 44195 5e390c414de027626ca5e2df888fa68d ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathprocessing.code.tex" 1601326656 17311 2ef6b2e29e2fc6a2fc8d6d652176e257 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage.code.tex" 1601326656 21302 788a79944eb22192a4929e46963a3067 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns.code.tex" 1601326656 9690 01feb7cde25d4293ef36eef45123eb80 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.code.tex" 1601326656 33335 dd1fa4814d4e51f18be97d88bf0da60c ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.code.tex" 1601326656 2965 4c2b1f4e0826925746439038172e5d6f ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code.tex" 1601326656 5196 2cc249e0ee7e03da5f5f6589257b1e5b ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.code.tex" 1601326656 20726 d4c8db1e2e53b72721d29916314a22ea ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.code.tex" 1601326656 35249 abd4adf948f960299a4b3d27c5dddf46 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransformations.code.tex" 1601326656 21989 fdc867d05d228316de137a9fc5ec3bbe ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransparency.code.tex" 1601326656 8893 e851de2175338fdf7c17f3e091d94618 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarybackgrounds.code.tex" 1601326656 4572 4a19637ef65ce88ad2f2d5064b69541d ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarytopaths.code.tex" 1608933718 11518 738408f795261b70ce8dd47459171309 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex" 1621110968 186007 6e7dfe0bd57520fd5f91641aa72dcac8 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/libraries/pgflibraryplothandlers.code.tex" 1601326656 32995 ac577023e12c0e4bd8aa420b2e852d1a ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfint.code.tex" 1557692582 3063 8c415c68a0f3394e45cfeca0b65f6ee6 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex" 1601326656 521 8e224a7af69b7fee4451d1bf76b46654 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex" 1601326656 13391 84d29568c13bdce4133ab4a214711112 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex" 1601326656 104935 184ed87524e76d4957860df4ce0cd1c3 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base.code.tex" 1601326656 10165 cec5fa73d49da442e56efc2d605ef154 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic.code.tex" 1601326656 28178 41c17713108e0795aac6fef3d275fbca ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code.tex" 1601326656 9989 c55967bf45126ff9b061fa2ca0c4694f ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.comparison.code.tex" 1601326656 3865 ac538ab80c5cf82b345016e474786549 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integerarithmetics.code.tex" 1557692582 3177 27d85c44fbfe09ff3b2cf2879e3ea434 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc.code.tex" 1621110968 11024 0179538121bc2dba172013a3ef89519f ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.random.code.tex" 1608933718 7854 4176998eeefd8745ac6d2d4bd9c98451 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round.code.tex" 1601326656 3379 781797a101f647bab82741a99944a229 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigonometric.code.tex" 1601326656 92405 f515f31275db273f97b9d8f52e1b0736 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex" 1601326656 37376 11cd75aac3da1c1b152b2848f30adc14 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex" 1601326656 8471 c2883569d03f69e8e1cabfef4999cfd7 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/modules/pgfmodulematrix.code.tex" 1601326656 21201 08d231a2386e2b61d64641c50dc15abd ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code.tex" 1601326656 16121 346f9013d34804439f7436ff6786cef7 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.code.tex" 1621110968 44784 cedaa399d15f95e68e22906e2cc09ef8 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/pgf.revision.tex" 1621110968 465 d68603f8b820ea4a08cce534944db581 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg" 1601326656 926 2963ea0dcf6cc6c0a770b69ec46a477b ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-pdf.def" 1601326656 5546 f3f24d7898386cb7daac70bdd2c4d6dc ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.def" 1601326656 12601 4786e597516eddd82097506db7cfa098 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex" 1621110968 61163 9b2eefc24e021323e0fc140e9826d016 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex" 1601326656 1896 b8e0ca0ac371d74c0ca05583f6313c91 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex" 1601326656 7778 53c8b5623d80238f6a20aa1df1868e63 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex" 1606168878 23997 a4bed72405fa644418bea7eac2887006 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex" 1621110968 37060 797782f0eb50075c9bc952374d9a659a ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgfkeysfiltered.code.tex" 1601326656 37431 9abe862035de1b29c7a677f3205e3d9f ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex" 1601326656 4494 af17fb7efeafe423710479858e42fa7e ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgfutil-common-lists.tex" 1601326656 7251 fb18c67117e09c64de82267e12cd8aa4 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.tex" 1621110968 29274 e15c5b7157d21523bd9c9f1dfa146b8e ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def" 1621110968 6825 a2b0ea5b539dda0625e99dd15785ab59 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/latex/amscls/amsart.cls" 1591045760 61881 a7369c346c2922a758ae6283cc1ed014 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/amsfonts.sty" 1359763108 5949 3f3fd50a8cc94c3d4cbf4fc66cd3df1c ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/amssymb.sty" 1359763108 13829 94730e64147574077f8ecfea9bb69af4 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/umsa.fd" 1359763108 961 6518c6525a34feb5e8250ffa91731cff ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/umsb.fd" 1359763108 961 d02606146ba5601b5645f987c92e6193 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsbsy.sty" 1622667781 2222 da905dc1db75412efd2d8f67739f0596 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsgen.sty" 1622667781 4173 bc0410bcccdff806d6132d3c1ef35481 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsmath.sty" 1636758526 87648 07fbb6e9169e00cb2a2f40b31b2dbf3c ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsopn.sty" 1636758526 4128 8eea906621b6639f7ba476a472036bbe ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amstext.sty" 1636758526 2444 926f379cc60fcf0c6e3fee2223b4370d ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty" 1579991033 13886 d1306dcf79a944f6988e688c1785f9ce ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/latex/graphics-cfg/color.cfg" 1459978653 1213 620bba36b25224fa9b7e1ccb4ecb76fd ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/latex/graphics-cfg/graphics.cfg" 1465944070 1224 978390e9c2234eab29404bc21b268d1e ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/latex/graphics-def/pdftex.def" 1601931164 19103 48d29b6e2a64cb717117ef65f107b404 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/latex/graphics/graphics.sty" 1622581934 18399 7e40f80366dffb22c0e7b70517db5cb4 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/latex/graphics/graphicx.sty" 1636758526 7996 a8fb260d598dcaf305a7ae7b9c3e3229 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/latex/graphics/keyval.sty" 1622581934 2671 4de6781a30211fe0ea4c672e4a2a8166 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/latex/graphics/trig.sty" 1636758526 4009 187ea2dc3194cd5a76cd99a8d7a6c4d0 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def" 1644269979 29921 d0acc05a38bd4aa3af2017f0b7c137ce ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg" 1279039959 678 4792914a8f45be57bb98413425e4c7af ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty" 1601326656 1090 bae35ef70b3168089ef166db3e66f5b2 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty" 1601326656 410 615550c46f918fcbee37641b02a862d9 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty" 1601326656 21013 f4ff83d25bb56552493b030f27c075ae ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty" 1601326656 989 c49c8ae06d96f8b15869da7428047b1e ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty" 1601326656 339 c2e180022e3afdb99c7d0ea5ce469b7d ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/latex/pgf/math/pgfmath.sty" 1601326656 306 c56a323ca5bf9242f54474ced10fca71 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty" 1601326656 443 8c872229db56122037e86bcda49e14f3 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgffor.sty" 1601326656 348 ee405e64380c11319f0e249fed57e6c5 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty" 1601326656 274 5ae372b7df79135d240456a1c6f2cf9a ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty" 1601326656 325 f9f16d12354225b7dd52a3321f085955 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/tex/latex/xcolor/xcolor.sty" 1635798903 56029 3f7889dab51d620aa43177c391b7b190 ""
|
||||
"/usr/local/texlive/2022/texmf-dist/web2c/texmf.cnf" 1646502317 40171 cdab547de63d26590bebb3baff566530 ""
|
||||
"/usr/local/texlive/2022/texmf-var/fonts/map/pdftex/updmap/pdftex.map" 1647878959 4410336 7d30a02e9fa9a16d7d1f8d037ba69641 ""
|
||||
"/usr/local/texlive/2022/texmf-var/web2c/pdftex/pdflatex.fmt" 1665017617 2826443 7e98410c533054b636c6470db83a27bc ""
|
||||
"/usr/local/texlive/2022/texmf.cnf" 1647878952 577 209b46be99c9075fd74d4c0369380e8c ""
|
||||
"fig_dual_depth.png" 1779857443 255786 cb48aab5aa40fc161d13a75df0544511 ""
|
||||
"fig_medial_tire_example.png" 1780943640 209003 4349824e4f016bde4b938be6b2cb5b2c ""
|
||||
"fig_tire_example.png" 1779857443 104494 8f9ce26b469b4236b8b67829f73a5faa ""
|
||||
"fig_tire_tree_decomposition.png" 1780290287 372371 1b44f5a3e9f637d78ae951b1f2e3a89d ""
|
||||
"paper.aux" 1780945552 6952 b88a9a8b764572f2fc3be94aabc8b157 "pdflatex"
|
||||
"paper.tex" 1780945491 60644 1d96ad32143c562e73fccdfacbbc9be2 ""
|
||||
(generated)
|
||||
"paper.aux"
|
||||
"paper.log"
|
||||
"paper.pdf"
|
||||
@@ -0,0 +1,505 @@
|
||||
PWD /Users/didericis/Code/math-research/papers/nested_tire_decompositions_of_plane_triangulations
|
||||
INPUT /usr/local/texlive/2022/texmf.cnf
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/web2c/texmf.cnf
|
||||
INPUT /usr/local/texlive/2022/texmf-var/web2c/pdftex/pdflatex.fmt
|
||||
INPUT paper.tex
|
||||
OUTPUT paper.log
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amscls/amsart.cls
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amscls/amsart.cls
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amscls/amsart.cls
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amscls/amsart.cls
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amscls/amsart.cls
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amscls/amsart.cls
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amscls/amsart.cls
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amscls/amsart.cls
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amscls/amsart.cls
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amscls/amsart.cls
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amscls/amsart.cls
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsmath.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsmath.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsmath.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsmath.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsmath.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsmath.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsmath.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsmath.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsmath.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsmath.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsmath.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsmath.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsmath.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsmath.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsmath.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsopn.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsopn.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amstext.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amstext.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amstext.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amstext.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amstext.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amstext.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amstext.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amstext.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amstext.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amstext.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amstext.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsgen.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsgen.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsgen.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsgen.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsgen.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsgen.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsgen.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsgen.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsgen.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsgen.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsgen.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsbsy.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsbsy.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsbsy.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsbsy.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsbsy.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsbsy.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsbsy.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsbsy.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsbsy.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsbsy.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsbsy.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsgen.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsopn.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsopn.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsopn.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsopn.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsopn.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsopn.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsopn.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsopn.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsopn.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsopn.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsopn.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsgen.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/umsa.fd
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/umsa.fd
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/umsa.fd
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/umsa.fd
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/amsfonts.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/amsfonts.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/amsfonts.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/amsfonts.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/amsfonts.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/amsfonts.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/amsfonts.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/amsfonts.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/amsfonts.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/amsfonts.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/amsfonts.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/amssymb.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/amssymb.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/amssymb.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/amssymb.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/amssymb.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/amssymb.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/amssymb.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/amssymb.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/amssymb.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/amssymb.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/amssymb.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/amsfonts.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/graphicx.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/graphicx.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/graphicx.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/graphicx.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/graphicx.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/graphicx.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/graphicx.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/graphicx.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/graphicx.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/graphicx.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/graphicx.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/keyval.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/keyval.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/keyval.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/keyval.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/keyval.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/keyval.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/keyval.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/keyval.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/keyval.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/keyval.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/keyval.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/graphics.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/graphics.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/graphics.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/graphics.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/graphics.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/graphics.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/graphics.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/graphics.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/graphics.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/graphics.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/graphics.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/trig.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/trig.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/trig.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/trig.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/trig.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/trig.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/trig.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/trig.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/trig.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/trig.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/trig.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics-def/pdftex.def
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics-def/pdftex.def
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics-def/pdftex.def
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics-def/pdftex.def
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgfutil-common-lists.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/pgf.revision.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/pgf.revision.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/graphicx.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgfkeysfiltered.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.def
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.def
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-pdf.def
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics/keyval.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/xcolor/xcolor.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/xcolor/xcolor.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/xcolor/xcolor.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/xcolor/xcolor.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/xcolor/xcolor.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/xcolor/xcolor.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/xcolor/xcolor.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/xcolor/xcolor.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/xcolor/xcolor.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/xcolor/xcolor.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/xcolor/xcolor.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics-cfg/color.cfg
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics-cfg/color.cfg
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics-cfg/color.cfg
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/graphics-cfg/color.cfg
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigonometric.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.random.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.comparison.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integerarithmetics.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfint.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconstruct.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicstate.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransformations.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathprocessing.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransparency.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgffor.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgffor.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgffor.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgffor.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgffor.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgffor.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgffor.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgffor.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgffor.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgffor.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgffor.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/math/pgfmath.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/math/pgfmath.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/math/pgfmath.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/math/pgfmath.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/math/pgfmath.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/math/pgfmath.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/math/pgfmath.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/math/pgfmath.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/math/pgfmath.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/math/pgfmath.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/math/pgfmath.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/libraries/pgflibraryplothandlers.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/libraries/pgflibraryplothandlers.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/modules/pgfmodulematrix.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarytopaths.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarytopaths.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarybackgrounds.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarybackgrounds.code.tex
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
|
||||
INPUT ./paper.aux
|
||||
INPUT paper.aux
|
||||
INPUT paper.aux
|
||||
OUTPUT paper.aux
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/map/fontname/texfonts.map
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/cm/cmr8.tfm
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/cm/cmr6.tfm
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/cm/cmmi8.tfm
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/cm/cmmi6.tfm
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/cm/cmsy8.tfm
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/cm/cmsy6.tfm
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex8.tfm
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex7.tfm
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex7.tfm
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/umsa.fd
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/umsa.fd
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/umsa.fd
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/umsa.fd
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam7.tfm
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam5.tfm
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/umsb.fd
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/umsb.fd
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/umsb.fd
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/umsb.fd
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm7.tfm
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm5.tfm
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/cm/cmcsc10.tfm
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/cm/cmti8.tfm
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/cm/cmbx10.tfm
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/cm/cmcsc10.tfm
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex7.tfm
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam7.tfm
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm7.tfm
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/cm/cmti10.tfm
|
||||
OUTPUT paper.pdf
|
||||
INPUT /usr/local/texlive/2022/texmf-var/fonts/map/pdftex/updmap/pdftex.map
|
||||
INPUT ./fig_dual_depth.png
|
||||
INPUT ./fig_dual_depth.png
|
||||
INPUT fig_dual_depth.png
|
||||
INPUT ./fig_dual_depth.png
|
||||
INPUT ./fig_dual_depth.png
|
||||
INPUT ./fig_tire_example.png
|
||||
INPUT ./fig_tire_example.png
|
||||
INPUT fig_tire_example.png
|
||||
INPUT ./fig_tire_example.png
|
||||
INPUT ./fig_tire_example.png
|
||||
INPUT ./fig_medial_tire_example.png
|
||||
INPUT ./fig_medial_tire_example.png
|
||||
INPUT fig_medial_tire_example.png
|
||||
INPUT ./fig_medial_tire_example.png
|
||||
INPUT ./fig_medial_tire_example.png
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/cm/cmti7.tfm
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/cm/cmti7.tfm
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/cm/cmr9.tfm
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/cm/cmmi9.tfm
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/cm/cmsy9.tfm
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex9.tfm
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm
|
||||
INPUT ./fig_tire_tree_decomposition.png
|
||||
INPUT ./fig_tire_tree_decomposition.png
|
||||
INPUT fig_tire_tree_decomposition.png
|
||||
INPUT ./fig_tire_tree_decomposition.png
|
||||
INPUT ./fig_tire_tree_decomposition.png
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/tfm/public/cm/cmbx8.tfm
|
||||
INPUT paper.aux
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx10.pfb
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx8.pfb
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmcsc10.pfb
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmex10.pfb
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi10.pfb
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi5.pfb
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi7.pfb
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi8.pfb
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi9.pfb
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmr5.pfb
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmr6.pfb
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmr7.pfb
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmr8.pfb
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmr9.pfb
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy10.pfb
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy5.pfb
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy6.pfb
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy7.pfb
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy9.pfb
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmti10.pfb
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmti8.pfb
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/symbols/msam10.pfb
|
||||
INPUT /usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/symbols/msbm10.pfb
|
||||
@@ -0,0 +1,578 @@
|
||||
This is pdfTeX, Version 3.141592653-2.6-1.40.24 (TeX Live 2022) (preloaded format=pdflatex 2022.10.5) 8 JUN 2026 15:05
|
||||
entering extended mode
|
||||
restricted \write18 enabled.
|
||||
%&-line parsing enabled.
|
||||
**paper.tex
|
||||
(./paper.tex
|
||||
LaTeX2e <2021-11-15> patch level 1
|
||||
L3 programming layer <2022-02-24>
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amscls/amsart.cls
|
||||
Document Class: amsart 2020/05/29 v2.20.6
|
||||
\linespacing=\dimen138
|
||||
\normalparindent=\dimen139
|
||||
\normaltopskip=\skip47
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsmath.sty
|
||||
Package: amsmath 2021/10/15 v2.17l AMS math features
|
||||
\@mathmargin=\skip48
|
||||
|
||||
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@=\dimen140
|
||||
))
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsbsy.sty
|
||||
Package: amsbsy 1999/11/29 v1.2d Bold Symbols
|
||||
\pmbraise@=\dimen141
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsopn.sty
|
||||
Package: amsopn 2021/08/26 v2.02 operator names
|
||||
)
|
||||
\inf@bad=\count185
|
||||
LaTeX Info: Redefining \frac on input line 234.
|
||||
\uproot@=\count186
|
||||
\leftroot@=\count187
|
||||
LaTeX Info: Redefining \overline on input line 399.
|
||||
\classnum@=\count188
|
||||
\DOTSCASE@=\count189
|
||||
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=\dimen142
|
||||
LaTeX Font Info: Redeclaring font encoding OML on input line 743.
|
||||
LaTeX Font Info: Redeclaring font encoding OMS on input line 744.
|
||||
\macc@depth=\count190
|
||||
\c@MaxMatrixCols=\count191
|
||||
\dotsspace@=\muskip16
|
||||
\c@parentequation=\count192
|
||||
\dspbrk@lvl=\count193
|
||||
\tag@help=\toks17
|
||||
\row@=\count194
|
||||
\column@=\count195
|
||||
\maxfields@=\count196
|
||||
\andhelp@=\toks18
|
||||
\eqnshift@=\dimen143
|
||||
\alignsep@=\dimen144
|
||||
\tagshift@=\dimen145
|
||||
\tagwidth@=\dimen146
|
||||
\totwidth@=\dimen147
|
||||
\lineht@=\dimen148
|
||||
\@envbody=\toks19
|
||||
\multlinegap=\skip49
|
||||
\multlinetaggap=\skip50
|
||||
\mathdisplay@stack=\toks20
|
||||
LaTeX Info: Redefining \[ on input line 2938.
|
||||
LaTeX Info: Redefining \] on input line 2939.
|
||||
)
|
||||
LaTeX Font Info: Trying to load font information for U+msa on input line 397
|
||||
.
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/umsa.fd
|
||||
File: umsa.fd 2013/01/14 v3.01 AMS symbols A
|
||||
)
|
||||
(/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.
|
||||
)
|
||||
\copyins=\insert199
|
||||
\abstractbox=\box52
|
||||
\listisep=\skip51
|
||||
\c@part=\count197
|
||||
\c@section=\count198
|
||||
\c@subsection=\count266
|
||||
\c@subsubsection=\count267
|
||||
\c@paragraph=\count268
|
||||
\c@subparagraph=\count269
|
||||
\c@figure=\count270
|
||||
\c@table=\count271
|
||||
\abovecaptionskip=\skip52
|
||||
\belowcaptionskip=\skip53
|
||||
\captionindent=\dimen149
|
||||
\thm@style=\toks21
|
||||
\thm@bodyfont=\toks22
|
||||
\thm@headfont=\toks23
|
||||
\thm@notefont=\toks24
|
||||
\thm@headpunct=\toks25
|
||||
\thm@preskip=\skip54
|
||||
\thm@postskip=\skip55
|
||||
\thm@headsep=\skip56
|
||||
\dth@everypar=\toks26
|
||||
)
|
||||
(/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/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=\dimen150
|
||||
\Gin@req@width=\dimen151
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.te
|
||||
x
|
||||
\pgfutil@everybye=\toks28
|
||||
\pgfutil@tempdima=\dimen152
|
||||
\pgfutil@tempdimb=\dimen153
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgfutil-common-li
|
||||
sts.tex))
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def
|
||||
\pgfutil@abb=\box53
|
||||
) (/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/pgf.revision.tex)
|
||||
Package: pgfrcs 2021/05/15 v3.1.9a (3.1.9a)
|
||||
))
|
||||
Package: pgf 2021/05/15 v3.1.9a (3.1.9a)
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex
|
||||
Package: pgfsys 2021/05/15 v3.1.9a (3.1.9a)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex
|
||||
\pgfkeys@pathtoks=\toks29
|
||||
\pgfkeys@temptoks=\toks30
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgfkeysfiltered.c
|
||||
ode.tex
|
||||
\pgfkeys@tmptoks=\toks31
|
||||
))
|
||||
\pgf@x=\dimen154
|
||||
\pgf@y=\dimen155
|
||||
\pgf@xa=\dimen156
|
||||
\pgf@ya=\dimen157
|
||||
\pgf@xb=\dimen158
|
||||
\pgf@yb=\dimen159
|
||||
\pgf@xc=\dimen160
|
||||
\pgf@yc=\dimen161
|
||||
\pgf@xd=\dimen162
|
||||
\pgf@yd=\dimen163
|
||||
\w@pgf@writea=\write3
|
||||
\r@pgf@reada=\read2
|
||||
\c@pgf@counta=\count272
|
||||
\c@pgf@countb=\count273
|
||||
\c@pgf@countc=\count274
|
||||
\c@pgf@countd=\count275
|
||||
\t@pgf@toka=\toks32
|
||||
\t@pgf@tokb=\toks33
|
||||
\t@pgf@tokc=\toks34
|
||||
\pgf@sys@id@count=\count276
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg
|
||||
File: pgf.cfg 2021/05/15 v3.1.9a (3.1.9a)
|
||||
)
|
||||
Driver file for pgf: pgfsys-pdftex.def
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.d
|
||||
ef
|
||||
File: pgfsys-pdftex.def 2021/05/15 v3.1.9a (3.1.9a)
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-p
|
||||
df.def
|
||||
File: pgfsys-common-pdf.def 2021/05/15 v3.1.9a (3.1.9a)
|
||||
)))
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.
|
||||
code.tex
|
||||
File: pgfsyssoftpath.code.tex 2021/05/15 v3.1.9a (3.1.9a)
|
||||
\pgfsyssoftpath@smallbuffer@items=\count277
|
||||
\pgfsyssoftpath@bigbuffer@items=\count278
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.
|
||||
code.tex
|
||||
File: pgfsysprotocol.code.tex 2021/05/15 v3.1.9a (3.1.9a)
|
||||
)) (/usr/local/texlive/2022/texmf-dist/tex/latex/xcolor/xcolor.sty
|
||||
Package: xcolor 2021/10/31 v2.13 LaTeX color extensions (UK)
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/graphics-cfg/color.cfg
|
||||
File: color.cfg 2016/01/02 v1.6 sample color configuration
|
||||
)
|
||||
Package xcolor Info: Driver file: pdftex.def on input line 227.
|
||||
Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1352.
|
||||
Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1356.
|
||||
Package xcolor Info: Model `RGB' extended on input line 1368.
|
||||
Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1370.
|
||||
Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1371.
|
||||
Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1372.
|
||||
Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1373.
|
||||
Package xcolor Info: Model `Gray' substituted by `gray' on input line 1374.
|
||||
Package xcolor Info: Model `wave' substituted by `hsb' on input line 1375.
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex
|
||||
Package: pgfcore 2021/05/15 v3.1.9a (3.1.9a)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex
|
||||
\pgfmath@dimen=\dimen164
|
||||
\pgfmath@count=\count279
|
||||
\pgfmath@box=\box54
|
||||
\pgfmath@toks=\toks35
|
||||
\pgfmath@stack@operand=\toks36
|
||||
\pgfmath@stack@operation=\toks37
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code.
|
||||
tex
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic
|
||||
.code.tex)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigo
|
||||
nometric.code.tex)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.rando
|
||||
m.code.tex)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.compa
|
||||
rison.code.tex)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base.
|
||||
code.tex)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round
|
||||
.code.tex)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc.
|
||||
code.tex)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integ
|
||||
erarithmetics.code.tex)))
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex
|
||||
\c@pgfmathroundto@lastzeros=\count280
|
||||
)) (/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfint.code.tex)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.co
|
||||
de.tex
|
||||
File: pgfcorepoints.code.tex 2021/05/15 v3.1.9a (3.1.9a)
|
||||
\pgf@picminx=\dimen165
|
||||
\pgf@picmaxx=\dimen166
|
||||
\pgf@picminy=\dimen167
|
||||
\pgf@picmaxy=\dimen168
|
||||
\pgf@pathminx=\dimen169
|
||||
\pgf@pathmaxx=\dimen170
|
||||
\pgf@pathminy=\dimen171
|
||||
\pgf@pathmaxy=\dimen172
|
||||
\pgf@xx=\dimen173
|
||||
\pgf@xy=\dimen174
|
||||
\pgf@yx=\dimen175
|
||||
\pgf@yy=\dimen176
|
||||
\pgf@zx=\dimen177
|
||||
\pgf@zy=\dimen178
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconst
|
||||
ruct.code.tex
|
||||
File: pgfcorepathconstruct.code.tex 2021/05/15 v3.1.9a (3.1.9a)
|
||||
\pgf@path@lastx=\dimen179
|
||||
\pgf@path@lasty=\dimen180
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage
|
||||
.code.tex
|
||||
File: pgfcorepathusage.code.tex 2021/05/15 v3.1.9a (3.1.9a)
|
||||
\pgf@shorten@end@additional=\dimen181
|
||||
\pgf@shorten@start@additional=\dimen182
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.co
|
||||
de.tex
|
||||
File: pgfcorescopes.code.tex 2021/05/15 v3.1.9a (3.1.9a)
|
||||
\pgfpic=\box55
|
||||
\pgf@hbox=\box56
|
||||
\pgf@layerbox@main=\box57
|
||||
\pgf@picture@serial@count=\count281
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicst
|
||||
ate.code.tex
|
||||
File: pgfcoregraphicstate.code.tex 2021/05/15 v3.1.9a (3.1.9a)
|
||||
\pgflinewidth=\dimen183
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransform
|
||||
ations.code.tex
|
||||
File: pgfcoretransformations.code.tex 2021/05/15 v3.1.9a (3.1.9a)
|
||||
\pgf@pt@x=\dimen184
|
||||
\pgf@pt@y=\dimen185
|
||||
\pgf@pt@temp=\dimen186
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.cod
|
||||
e.tex
|
||||
File: pgfcorequick.code.tex 2021/05/15 v3.1.9a (3.1.9a)
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.c
|
||||
ode.tex
|
||||
File: pgfcoreobjects.code.tex 2021/05/15 v3.1.9a (3.1.9a)
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathproce
|
||||
ssing.code.tex
|
||||
File: pgfcorepathprocessing.code.tex 2021/05/15 v3.1.9a (3.1.9a)
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.co
|
||||
de.tex
|
||||
File: pgfcorearrows.code.tex 2021/05/15 v3.1.9a (3.1.9a)
|
||||
\pgfarrowsep=\dimen187
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.cod
|
||||
e.tex
|
||||
File: pgfcoreshade.code.tex 2021/05/15 v3.1.9a (3.1.9a)
|
||||
\pgf@max=\dimen188
|
||||
\pgf@sys@shading@range@num=\count282
|
||||
\pgf@shadingcount=\count283
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.cod
|
||||
e.tex
|
||||
File: pgfcoreimage.code.tex 2021/05/15 v3.1.9a (3.1.9a)
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal.
|
||||
code.tex
|
||||
File: pgfcoreexternal.code.tex 2021/05/15 v3.1.9a (3.1.9a)
|
||||
\pgfexternal@startupbox=\box58
|
||||
))
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.co
|
||||
de.tex
|
||||
File: pgfcorelayers.code.tex 2021/05/15 v3.1.9a (3.1.9a)
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretranspare
|
||||
ncy.code.tex
|
||||
File: pgfcoretransparency.code.tex 2021/05/15 v3.1.9a (3.1.9a)
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns.
|
||||
code.tex
|
||||
File: pgfcorepatterns.code.tex 2021/05/15 v3.1.9a (3.1.9a)
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code.
|
||||
tex
|
||||
File: pgfcorerdf.code.tex 2021/05/15 v3.1.9a (3.1.9a)
|
||||
)))
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.cod
|
||||
e.tex
|
||||
File: pgfmoduleshapes.code.tex 2021/05/15 v3.1.9a (3.1.9a)
|
||||
\pgfnodeparttextbox=\box59
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code.
|
||||
tex
|
||||
File: pgfmoduleplot.code.tex 2021/05/15 v3.1.9a (3.1.9a)
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version
|
||||
-0-65.sty
|
||||
Package: pgfcomp-version-0-65 2021/05/15 v3.1.9a (3.1.9a)
|
||||
\pgf@nodesepstart=\dimen189
|
||||
\pgf@nodesepend=\dimen190
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version
|
||||
-1-18.sty
|
||||
Package: pgfcomp-version-1-18 2021/05/15 v3.1.9a (3.1.9a)
|
||||
))
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgffor.sty
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex)
|
||||
) (/usr/local/texlive/2022/texmf-dist/tex/latex/pgf/math/pgfmath.sty
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex))
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex
|
||||
Package: pgffor 2021/05/15 v3.1.9a (3.1.9a)
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex)
|
||||
\pgffor@iter=\dimen191
|
||||
\pgffor@skip=\dimen192
|
||||
\pgffor@stack=\toks38
|
||||
\pgffor@toks=\toks39
|
||||
))
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.cod
|
||||
e.tex
|
||||
Package: tikz 2021/05/15 v3.1.9a (3.1.9a)
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/libraries/pgflibraryplothan
|
||||
dlers.code.tex
|
||||
File: pgflibraryplothandlers.code.tex 2021/05/15 v3.1.9a (3.1.9a)
|
||||
\pgf@plot@mark@count=\count284
|
||||
\pgfplotmarksize=\dimen193
|
||||
)
|
||||
\tikz@lastx=\dimen194
|
||||
\tikz@lasty=\dimen195
|
||||
\tikz@lastxsaved=\dimen196
|
||||
\tikz@lastysaved=\dimen197
|
||||
\tikz@lastmovetox=\dimen198
|
||||
\tikz@lastmovetoy=\dimen256
|
||||
\tikzleveldistance=\dimen257
|
||||
\tikzsiblingdistance=\dimen258
|
||||
\tikz@figbox=\box60
|
||||
\tikz@figbox@bg=\box61
|
||||
\tikz@tempbox=\box62
|
||||
\tikz@tempbox@bg=\box63
|
||||
\tikztreelevel=\count285
|
||||
\tikznumberofchildren=\count286
|
||||
\tikznumberofcurrentchild=\count287
|
||||
\tikz@fig@count=\count288
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/modules/pgfmodulematrix.cod
|
||||
e.tex
|
||||
File: pgfmodulematrix.code.tex 2021/05/15 v3.1.9a (3.1.9a)
|
||||
\pgfmatrixcurrentrow=\count289
|
||||
\pgfmatrixcurrentcolumn=\count290
|
||||
\pgf@matrix@numberofcolumns=\count291
|
||||
)
|
||||
\tikz@expandcount=\count292
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/frontendlayer/tikz/librarie
|
||||
s/tikzlibrarytopaths.code.tex
|
||||
File: tikzlibrarytopaths.code.tex 2021/05/15 v3.1.9a (3.1.9a)
|
||||
)))
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/frontendlayer/tikz/librarie
|
||||
s/tikzlibrarybackgrounds.code.tex
|
||||
File: tikzlibrarybackgrounds.code.tex 2021/05/15 v3.1.9a (3.1.9a)
|
||||
\pgf@layerbox@background=\box64
|
||||
\pgf@layerboxsaved@background=\box65
|
||||
)
|
||||
\c@theorem=\count293
|
||||
|
||||
(/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=\count294
|
||||
\l__pdf_internal_box=\box66
|
||||
)
|
||||
(./paper.aux)
|
||||
\openout1 = `paper.aux'.
|
||||
|
||||
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 29.
|
||||
LaTeX Font Info: ... okay on input line 29.
|
||||
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 29.
|
||||
LaTeX Font Info: ... okay on input line 29.
|
||||
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 29.
|
||||
LaTeX Font Info: ... okay on input line 29.
|
||||
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 29.
|
||||
LaTeX Font Info: ... okay on input line 29.
|
||||
LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 29.
|
||||
LaTeX Font Info: ... okay on input line 29.
|
||||
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 29.
|
||||
LaTeX Font Info: ... okay on input line 29.
|
||||
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 29.
|
||||
LaTeX Font Info: ... okay on input line 29.
|
||||
LaTeX Font Info: Trying to load font information for U+msa on input line 29.
|
||||
|
||||
(/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 29.
|
||||
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/umsb.fd
|
||||
File: umsb.fd 2013/01/14 v3.01 AMS symbols B
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
|
||||
[Loading MPS to PDF converter (version 2006.09.02).]
|
||||
\scratchcounter=\count295
|
||||
\scratchdimen=\dimen259
|
||||
\scratchbox=\box67
|
||||
\nofMPsegments=\count296
|
||||
\nofMParguments=\count297
|
||||
\everyMPshowfont=\toks40
|
||||
\MPscratchCnt=\count298
|
||||
\MPscratchDim=\dimen260
|
||||
\MPnumerator=\count299
|
||||
\makeMPintoPDFobject=\count300
|
||||
\everyMPtoPDFconversion=\toks41
|
||||
) (/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
|
||||
))
|
||||
[1{/usr/local/texlive/2022/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
|
||||
<fig_dual_depth.png, id=21, 642.8015pt x 606.265pt>
|
||||
File: fig_dual_depth.png Graphic file (type png)
|
||||
<use fig_dual_depth.png>
|
||||
Package pdftex.def Info: fig_dual_depth.png used on input line 163.
|
||||
(pdftex.def) Requested size: 251.9989pt x 237.67276pt.
|
||||
|
||||
|
||||
LaTeX Warning: `h' float specifier changed to `ht'.
|
||||
|
||||
[2] [3 <./fig_dual_depth.png>]
|
||||
<fig_tire_example.png, id=35, 559.64081pt x 375.804pt>
|
||||
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 242.
|
||||
(pdftex.def) Requested size: 280.79956pt x 188.56097pt.
|
||||
<fig_medial_tire_example.png, id=36, 658.8615pt x 444.4605pt>
|
||||
File: fig_medial_tire_example.png Graphic file (type png)
|
||||
<use fig_medial_tire_example.png>
|
||||
Package pdftex.def Info: fig_medial_tire_example.png used on input line 276.
|
||||
(pdftex.def) Requested size: 280.79956pt x 189.42558pt.
|
||||
|
||||
|
||||
LaTeX Warning: `h' float specifier changed to `ht'.
|
||||
|
||||
[4 <./fig_tire_example.png>] [5 <./fig_medial_tire_example.png>] [6] [7]
|
||||
[8]
|
||||
|
||||
LaTeX Warning: `h' float specifier changed to `ht'.
|
||||
|
||||
[9] [10] [11]
|
||||
Underfull \vbox (badness 1635) has occurred while \output is active []
|
||||
|
||||
[12]
|
||||
[13] [14]
|
||||
<fig_tire_tree_decomposition.png, id=80, 1101.3145pt x 633.9685pt>
|
||||
File: fig_tire_tree_decomposition.png Graphic file (type png)
|
||||
<use fig_tire_tree_decomposition.png>
|
||||
Package pdftex.def Info: fig_tire_tree_decomposition.png used on input line 11
|
||||
53.
|
||||
(pdftex.def) Requested size: 341.9989pt x 196.86678pt.
|
||||
[15 <./fig_tire_tree_decomposition.png>] [16] (./paper.aux) )
|
||||
Here is how much of TeX's memory you used:
|
||||
14076 strings out of 478268
|
||||
280038 string characters out of 5846347
|
||||
565445 words of memory out of 5000000
|
||||
31898 multiletter control sequences out of 15000+600000
|
||||
478218 words of font info for 62 fonts, out of 8000000 for 9000
|
||||
1302 hyphenation exceptions out of 8191
|
||||
84i,12n,89p,1168b,801s stack positions out of 10000i,1000n,20000p,200000b,200000s
|
||||
</usr/local/texli
|
||||
ve/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx10.pfb></usr/local/texliv
|
||||
e/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx8.pfb></usr/local/texlive/
|
||||
2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmcsc10.pfb></usr/local/texlive/
|
||||
2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmex10.pfb></usr/local/texlive/2
|
||||
022/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi10.pfb></usr/local/texlive/20
|
||||
22/texmf-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/t
|
||||
exmf-dist/fonts/type1/public/amsfonts/cm/cmmi8.pfb></usr/local/texlive/2022/tex
|
||||
mf-dist/fonts/type1/public/amsfonts/cm/cmmi9.pfb></usr/local/texlive/2022/texmf
|
||||
-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb></usr/local/texlive/2022/texmf-d
|
||||
ist/fonts/type1/public/amsfonts/cm/cmr5.pfb></usr/local/texlive/2022/texmf-dist
|
||||
/fonts/type1/public/amsfonts/cm/cmr6.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/cmr9.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/pu
|
||||
blic/amsfonts/cm/cmsy6.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/publ
|
||||
ic/amsfonts/cm/cmsy7.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public
|
||||
/amsfonts/cm/cmsy9.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/a
|
||||
msfonts/cm/cmti10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/am
|
||||
sfonts/cm/cmti8.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsf
|
||||
onts/symbols/msam10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/
|
||||
amsfonts/symbols/msbm10.pfb>
|
||||
Output written on paper.pdf (16 pages, 1082268 bytes).
|
||||
PDF statistics:
|
||||
189 PDF objects out of 1000 (max. 8388607)
|
||||
113 compressed objects within 2 object streams
|
||||
0 named destinations out of 1000 (max. 500000)
|
||||
33 words of extra memory for PDF output out of 10000 (max. 10000000)
|
||||
|
||||