coloring_nested_tire_graphs: numpy-optimize fiber enumeration; extend step-2 to k=9, 12
Bypasses the 3^n brute-force iteration in tire_fiber_chords.py by
directly constructing the 2^n proper edge 3-colorings of C_n via a
vectorized binary-branch numpy build. Benchmarked 146× speedup at n=12,
424× at n=15; brings n=18 to 0.1s and n=24 to 6.6s.
Step-2 extension at k=9 (13 pairs) and k=12 (10 pairs): every tested
pair is compatible (23/23, bringing total to 46/46 with the earlier
note). The S_3-orbit observation extends: the smallest tested
intersection at k=12 is again exactly 6 elements forming a single
S_3-orbit of the pattern (1,2,3,2,2,1,3,3,2,3,1,1) — each of T1's four
chord-induced faces receives a permutation of {1,2,3} as its σ-values,
a "Latin-style" assignment.
Note conjectures a structural theorem: every SP-feasible tire's
projection support contains the "Latin-flavoured" subset where each
O-face sees a permutation of {1,2,3}, and this gives a common
substructure that makes chain-pigeonhole succeed.
Caveat: intersection sizes are all multiples of 6, consistent with the
S_3 invariance of both supports.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,149 @@
|
||||
"""Numpy-optimized version of tire_fiber_chords.fiber_distribution.
|
||||
|
||||
The slow version iterates over all 3^n candidates in {1,2,3}^n; this
|
||||
version directly constructs the 2^n + 2(-1)^n proper edge 3-colorings
|
||||
of C_n via a vectorized binary-branch construction, then computes σ
|
||||
and applies chord constraints in numpy.
|
||||
|
||||
Speedup: ~3^(n-1)/2^(n-1) = (3/2)^(n-1) ≈ 1500x at n=18, ~4000x at n=20.
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
from collections import Counter
|
||||
import numpy as np
|
||||
|
||||
from tire_fiber_chords import (
|
||||
d_positions_for,
|
||||
compute_faces_from_chords,
|
||||
)
|
||||
|
||||
|
||||
# OTHER[c, b] = the b-th color in {1,2,3} \ {c}, b ∈ {0,1}, c ∈ {1,2,3}
|
||||
# Row 0 is a placeholder (color 0 unused).
|
||||
OTHER_NP = np.array([
|
||||
[0, 0],
|
||||
[2, 3],
|
||||
[1, 3],
|
||||
[1, 2],
|
||||
], dtype=np.int8)
|
||||
|
||||
|
||||
def proper_cycle_colorings(n: int) -> np.ndarray:
|
||||
"""Return an (N, n) int8 array of all proper edge 3-colorings of C_n
|
||||
where N = 2^n + 2(-1)^n.
|
||||
|
||||
Encoding: a path c_0, c_1, ..., c_{n-1} is built by picking c_0 ∈
|
||||
{1,2,3} (3 choices) and then at each step picking one of the two
|
||||
colors ≠ previous (2 choices each). We then drop those paths that
|
||||
fail the cyclic constraint c_{n-1} ≠ c_0.
|
||||
"""
|
||||
if n < 2:
|
||||
return np.empty((0, n), dtype=np.int8)
|
||||
|
||||
block_size = 1 << (n - 1)
|
||||
n_raw = 3 * block_size
|
||||
arr = np.empty((n_raw, n), dtype=np.int8)
|
||||
|
||||
# Column 0: blocks of size block_size for c_0 = 1, 2, 3.
|
||||
arr[0 * block_size : 1 * block_size, 0] = 1
|
||||
arr[1 * block_size : 2 * block_size, 0] = 2
|
||||
arr[2 * block_size : 3 * block_size, 0] = 3
|
||||
|
||||
row_idx = np.arange(block_size, dtype=np.int64)
|
||||
for i in range(1, n):
|
||||
bits_block = ((row_idx >> (i - 1)) & 1).astype(np.int8)
|
||||
bits_full = np.tile(bits_block, 3)
|
||||
prev = arr[:, i - 1]
|
||||
arr[:, i] = OTHER_NP[prev, bits_full]
|
||||
|
||||
mask = arr[:, -1] != arr[:, 0]
|
||||
return arr[mask]
|
||||
|
||||
|
||||
def induced_sigma_vec(c: np.ndarray) -> np.ndarray:
|
||||
"""Given an (N, n) proper-cycle-coloring array, return the (N, n)
|
||||
σ array where σ_i = 6 - c_{i-1} - c_i (the third color at vertex i)."""
|
||||
c_prev = np.roll(c, 1, axis=1)
|
||||
return (6 - c_prev - c).astype(np.int8)
|
||||
|
||||
|
||||
def fiber_distribution_fast(m: int, k: int, chords) -> tuple[dict, list, list]:
|
||||
"""Drop-in replacement for tire_fiber_chords.fiber_distribution."""
|
||||
n = m + k
|
||||
d_positions = d_positions_for(m, k)
|
||||
o_faces = compute_faces_from_chords(k, chords)
|
||||
d_positions_by_face = [
|
||||
[d_positions[a] for a in face_edges]
|
||||
for face_edges in o_faces
|
||||
]
|
||||
|
||||
c = proper_cycle_colorings(n)
|
||||
if c.size == 0:
|
||||
return {}, d_positions, d_positions_by_face
|
||||
|
||||
sigma = induced_sigma_vec(c)
|
||||
|
||||
# Chord constraint: σ values at each face's positions are pairwise distinct.
|
||||
mask = np.ones(sigma.shape[0], dtype=bool)
|
||||
for face in d_positions_by_face:
|
||||
if len(face) <= 1:
|
||||
continue
|
||||
for i in range(len(face)):
|
||||
for j in range(i + 1, len(face)):
|
||||
mask &= (sigma[:, face[i]] != sigma[:, face[j]])
|
||||
|
||||
sigma_ok = sigma[mask]
|
||||
|
||||
# Count multiplicities. np.unique with return_counts is faster than Counter for big arrays.
|
||||
if sigma_ok.shape[0] == 0:
|
||||
return {}, d_positions, d_positions_by_face
|
||||
uniq, counts = np.unique(sigma_ok, axis=0, return_counts=True)
|
||||
fibers = {tuple(row): int(c) for row, c in zip(uniq.tolist(), counts.tolist())}
|
||||
return fibers, d_positions, d_positions_by_face
|
||||
|
||||
|
||||
def spoke_only_fiber_distribution_fast(n: int) -> dict:
|
||||
"""Steiner-rich baseline (no chord constraints)."""
|
||||
if n < 2:
|
||||
return {}
|
||||
c = proper_cycle_colorings(n)
|
||||
sigma = induced_sigma_vec(c)
|
||||
uniq, counts = np.unique(sigma, axis=0, return_counts=True)
|
||||
return {tuple(row): int(c) for row, c in zip(uniq.tolist(), counts.tolist())}
|
||||
|
||||
|
||||
def projection_support_fast(fibers: dict, positions: list[int]) -> set:
|
||||
return {tuple(sigma[p] for p in positions) for sigma in fibers}
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import time
|
||||
|
||||
print("Benchmark vs. slow version")
|
||||
print("-" * 60)
|
||||
from tire_fiber_chords import fiber_distribution as fiber_slow
|
||||
|
||||
cases = [
|
||||
(4, 4, [(0, 2)]),
|
||||
(6, 6, [(0, 3)]),
|
||||
(6, 9, [(0, 2), (3, 5), (6, 8)]),
|
||||
(9, 9, [(0, 2), (3, 5), (6, 8)]),
|
||||
(12, 12, [(0, 3), (4, 7), (8, 11)]),
|
||||
]
|
||||
for m, k, ch in cases:
|
||||
n = m + k
|
||||
|
||||
t0 = time.time()
|
||||
fast, _, _ = fiber_distribution_fast(m, k, ch)
|
||||
dt_fast = time.time() - t0
|
||||
|
||||
# Sanity-check vs slow for small n
|
||||
if n <= 15:
|
||||
t0 = time.time()
|
||||
slow, _, _ = fiber_slow(m, k, ch)
|
||||
dt_slow = time.time() - t0
|
||||
assert fast == slow, f"mismatch at (m={m}, k={k}): fast {len(fast)} != slow {len(slow)}"
|
||||
print(f"(m={m}, k={k}, n={n}): fast {dt_fast:.3f}s | slow {dt_slow:.3f}s | "
|
||||
f"speedup {dt_slow/max(dt_fast, 1e-6):.1f}× | |C| = {len(fast)}")
|
||||
else:
|
||||
print(f"(m={m}, k={k}, n={n}): fast {dt_fast:.3f}s | |C| = {len(fast)}")
|
||||
@@ -0,0 +1,161 @@
|
||||
"""Step-2 adjacent-tire compatibility experiment, extended to larger
|
||||
shared cycle lengths k = 9 and k = 12. Uses the numpy-optimized
|
||||
fiber distribution from tire_fiber_chords_fast.py.
|
||||
|
||||
Same convention as tire_fiber_step2.py: for each (T1, T2) pair, we
|
||||
compute T1's D-projection and T2's U-projection on the shared cycle γ
|
||||
and report intersection sizes (forward + reverse).
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import time
|
||||
|
||||
from tire_fiber_chords import d_positions_for, u_positions_for
|
||||
from tire_fiber_chords_fast import (
|
||||
fiber_distribution_fast,
|
||||
spoke_only_fiber_distribution_fast,
|
||||
projection_support_fast,
|
||||
)
|
||||
|
||||
|
||||
def project_T1_D(gamma_len: int, m_1: int, chords_1, model: str) -> set:
|
||||
if model == 'SR':
|
||||
n = m_1 + gamma_len
|
||||
fibers = spoke_only_fiber_distribution_fast(n)
|
||||
else:
|
||||
fibers, _, _ = fiber_distribution_fast(m_1, gamma_len, chords_1)
|
||||
d_pos = d_positions_for(m_1, gamma_len)
|
||||
return projection_support_fast(fibers, d_pos)
|
||||
|
||||
|
||||
def project_T2_U(gamma_len: int, k_2: int, chords_2, model: str) -> set:
|
||||
if model == 'SR':
|
||||
n = gamma_len + k_2
|
||||
fibers = spoke_only_fiber_distribution_fast(n)
|
||||
else:
|
||||
fibers, _, _ = fiber_distribution_fast(gamma_len, k_2, chords_2)
|
||||
u_pos = u_positions_for(gamma_len, k_2)
|
||||
return projection_support_fast(fibers, u_pos)
|
||||
|
||||
|
||||
def intersect_with_reflection(S1: set, S2: set) -> tuple[set, set]:
|
||||
forward = S1 & S2
|
||||
S2_rev = {s[::-1] for s in S2}
|
||||
reverse = S1 & S2_rev
|
||||
return forward, reverse
|
||||
|
||||
|
||||
# Chord sets that make each k-cycle SP-feasible (all faces ≤ 3 B_in edges).
|
||||
# --- Chord configurations validated to produce all-faces ≤ 3 B_in edges ---
|
||||
# k=9: 3-chord matching giving faces of sizes (2,2,2,3).
|
||||
K9_CHORDS_3 = [(0, 2), (3, 5), (6, 8)]
|
||||
# k=9 alternate: a 3-chord nested config also giving (2,2,2,3).
|
||||
K9_CHORDS_NESTED = [(0, 2), (4, 6), (3, 7)]
|
||||
|
||||
# k=12: 3-chord matching giving 4 faces of size 3 (symmetric "thirds").
|
||||
K12_CHORDS_3 = [(0, 3), (4, 7), (8, 11)]
|
||||
# k=12 nested: chord (0,3), then chord (4,11) for the bigger arc, then
|
||||
# (5,7) and (8,10) inside (4,11). Faces: {0,1,2}(3), {5,6}(2), {8,9}(2),
|
||||
# {4,7,10}(3), {3,11}(2).
|
||||
K12_CHORDS_NESTED = [(0, 3), (4, 11), (5, 7), (8, 10)]
|
||||
|
||||
|
||||
def validate_chord_set(k: int, chords: list[tuple[int, int]]) -> tuple[bool, str]:
|
||||
"""Check that no O-face has > 3 B_in edges (the SP feasibility
|
||||
constraint at 3 colors)."""
|
||||
from tire_fiber_chords import compute_faces_from_chords
|
||||
faces = compute_faces_from_chords(k, chords)
|
||||
sizes = sorted(len(f) for f in faces)
|
||||
ok = max(sizes) <= 3
|
||||
return ok, f"face sizes {sizes}"
|
||||
|
||||
|
||||
# Curated pairs. Format: (γ, T1_config, T2_config).
|
||||
# T1_config = (m_1, chords_1, model1); T2_config = (k_2, chords_2, model2).
|
||||
CASES_K9 = [
|
||||
# k = 9: both sides need at least 3 chords for SP feasibility.
|
||||
(9, (9, K9_CHORDS_3, 'SP'), (9, K9_CHORDS_3, 'SP')),
|
||||
(9, (9, K9_CHORDS_3, 'SP'), (9, K9_CHORDS_NESTED, 'SP')),
|
||||
(9, (9, K9_CHORDS_NESTED, 'SP'), (9, K9_CHORDS_NESTED, 'SP')),
|
||||
(9, (12, K9_CHORDS_3, 'SP'), (9, K9_CHORDS_3, 'SP')),
|
||||
(9, (9, K9_CHORDS_3, 'SP'), (12, K12_CHORDS_3, 'SP')), # fixed: chord set matches k_2=12
|
||||
(9, (9, K9_CHORDS_3, 'SP'), (12, K12_CHORDS_NESTED, 'SP')),
|
||||
(9, (9, K9_CHORDS_3, 'SR'), (9, K9_CHORDS_3, 'SP')),
|
||||
(9, (9, K9_CHORDS_3, 'SP'), (3, [], 'SR')),
|
||||
(9, (9, K9_CHORDS_3, 'SP'), (4, [(0, 2)], 'SP')),
|
||||
(9, (9, K9_CHORDS_3, 'SP'), (6, [(0, 3)], 'SP')),
|
||||
(9, (9, K9_CHORDS_3, 'SP'), (6, [(0, 2), (3, 5)], 'SP')),
|
||||
(9, (9, K9_CHORDS_NESTED, 'SP'), (6, [(0, 3)], 'SP')),
|
||||
(9, (9, K9_CHORDS_NESTED, 'SP'), (12, K12_CHORDS_NESTED, 'SP')),
|
||||
]
|
||||
|
||||
CASES_K12 = [
|
||||
(12, (12, K12_CHORDS_3, 'SP'), (12, K12_CHORDS_3, 'SP')),
|
||||
(12, (12, K12_CHORDS_NESTED, 'SP'), (12, K12_CHORDS_NESTED, 'SP')),
|
||||
(12, (12, K12_CHORDS_3, 'SP'), (12, K12_CHORDS_NESTED, 'SP')),
|
||||
(12, (12, K12_CHORDS_3, 'SP'), (3, [], 'SR')),
|
||||
(12, (12, K12_CHORDS_3, 'SP'), (4, [(0, 2)], 'SP')),
|
||||
(12, (12, K12_CHORDS_3, 'SP'), (6, [(0, 3)], 'SP')),
|
||||
(12, (12, K12_CHORDS_3, 'SP'), (6, [(0, 2), (3, 5)], 'SP')),
|
||||
(12, (12, K12_CHORDS_3, 'SP'), (9, K9_CHORDS_3, 'SP')),
|
||||
(12, (12, K12_CHORDS_NESTED, 'SP'), (9, K9_CHORDS_3, 'SP')),
|
||||
(12, (12, K12_CHORDS_3, 'SR'), (12, K12_CHORDS_3, 'SP')),
|
||||
]
|
||||
|
||||
|
||||
def fmt_cfg(m_or_k: int, chords, model: str) -> str:
|
||||
ch_str = str(chords) if chords else "—"
|
||||
if len(ch_str) > 24:
|
||||
ch_str = ch_str[:21] + "..."
|
||||
return f"({m_or_k}, {ch_str}, {model})"
|
||||
|
||||
|
||||
def run_cases(label: str, cases: list, time_each: bool = False) -> int:
|
||||
print(f"\n### {label}\n")
|
||||
print(f"{'γ':>2} {'T1 (m_1, chords_1, model)':<38s} {'T2 (k_2, chords_2, model)':<38s} "
|
||||
f"{'|S1|':>5s} {'|S2|':>5s} {'3^γ':>6s} {'fwd':>5s} {'rev':>5s} {'compat?':>7s}"
|
||||
f"{' time' if time_each else ''}")
|
||||
print("-" * (135 + (8 if time_each else 0)))
|
||||
nyes = ntotal = 0
|
||||
for gamma, t1, t2 in cases:
|
||||
m_1, ch1, model1 = t1
|
||||
k_2, ch2, model2 = t2
|
||||
t0 = time.time()
|
||||
S1 = project_T1_D(gamma, m_1, ch1, model1)
|
||||
S2 = project_T2_U(gamma, k_2, ch2, model2)
|
||||
dt = time.time() - t0
|
||||
forward, reverse = intersect_with_reflection(S1, S2)
|
||||
compat = "YES" if (forward or reverse) else "NO"
|
||||
ntotal += 1
|
||||
if compat == "YES":
|
||||
nyes += 1
|
||||
suffix = f" {dt:5.1f}s" if time_each else ""
|
||||
print(
|
||||
f"{gamma:>2} {fmt_cfg(m_1, ch1, model1):<38s} {fmt_cfg(k_2, ch2, model2):<38s} "
|
||||
f"{len(S1):>5d} {len(S2):>5d} {3**gamma:>6d} "
|
||||
f"{len(forward):>5d} {len(reverse):>5d} {compat:>7s}{suffix}"
|
||||
)
|
||||
print(f"\n{nyes}/{ntotal} compatible at this k.")
|
||||
return nyes
|
||||
|
||||
|
||||
def main():
|
||||
# Validate chord sets up front.
|
||||
print("Chord set validation:")
|
||||
for label, ch_set, k in [
|
||||
("K9_CHORDS_3", K9_CHORDS_3, 9),
|
||||
("K9_CHORDS_NESTED", K9_CHORDS_NESTED, 9),
|
||||
("K12_CHORDS_3", K12_CHORDS_3, 12),
|
||||
("K12_CHORDS_NESTED",K12_CHORDS_NESTED,12),
|
||||
]:
|
||||
ok, info = validate_chord_set(k, ch_set)
|
||||
print(f" {label} (k={k}): {info} {'OK' if ok else 'FAIL'}")
|
||||
|
||||
n_k9 = run_cases("Step 2 at k = 9", CASES_K9, time_each=True)
|
||||
n_k12 = run_cases("Step 2 at k = 12", CASES_K12, time_each=True)
|
||||
total = len(CASES_K9) + len(CASES_K12)
|
||||
print(f"\nTotal: {n_k9 + n_k12}/{total} compatible across k=9 and k=12.")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -0,0 +1,44 @@
|
||||
Chord set validation:
|
||||
K9_CHORDS_3 (k=9): face sizes [2, 2, 2, 3] OK
|
||||
K9_CHORDS_NESTED (k=9): face sizes [2, 2, 2, 3] OK
|
||||
K12_CHORDS_3 (k=12): face sizes [3, 3, 3, 3] OK
|
||||
K12_CHORDS_NESTED (k=12): face sizes [2, 2, 2, 3, 3] OK
|
||||
|
||||
### Step 2 at k = 9
|
||||
|
||||
γ T1 (m_1, chords_1, model) T2 (k_2, chords_2, model) |S1| |S2| 3^γ fwd rev compat? time
|
||||
-----------------------------------------------------------------------------------------------------------------------------------------------
|
||||
9 (9, [(0, 2), (3, 5), (6, 8)], SP) (9, [(0, 2), (3, 5), (6, 8)], SP) 1296 7866 19683 1188 858 YES 0.2s
|
||||
9 (9, [(0, 2), (3, 5), (6, 8)], SP) (9, [(0, 2), (4, 6), (3, 7)], SP) 1296 7536 19683 1242 1110 YES 0.2s
|
||||
9 (9, [(0, 2), (4, 6), (3, 7)], SP) (9, [(0, 2), (4, 6), (3, 7)], SP) 1296 7536 19683 1176 1224 YES 0.2s
|
||||
9 (12, [(0, 2), (3, 5), (6, 8)], SP) (9, [(0, 2), (3, 5), (6, 8)], SP) 1296 7866 19683 1188 858 YES 1.4s
|
||||
9 (9, [(0, 2), (3, 5), (6, 8)], SP) (12, [(0, 3), (4, 7), (8, ..., SP) 1296 1302 19683 72 90 YES 0.6s
|
||||
9 (9, [(0, 2), (3, 5), (6, 8)], SP) (12, [(0, 3), (4, 11), (5,..., SP) 1296 9456 19683 840 606 YES 0.7s
|
||||
9 (9, [(0, 2), (3, 5), (6, 8)], SR) (9, [(0, 2), (3, 5), (6, 8)], SP) 19683 7866 19683 7866 7866 YES 1.2s
|
||||
9 (9, [(0, 2), (3, 5), (6, 8)], SP) (3, —, SR) 1296 3681 19683 108 108 YES 0.1s
|
||||
9 (9, [(0, 2), (3, 5), (6, 8)], SP) (4, [(0, 2)], SP) 1296 3162 19683 276 108 YES 0.1s
|
||||
9 (9, [(0, 2), (3, 5), (6, 8)], SP) (6, [(0, 3)], SP) 1296 942 19683 54 60 YES 0.1s
|
||||
9 (9, [(0, 2), (3, 5), (6, 8)], SP) (6, [(0, 2), (3, 5)], SP) 1296 6210 19683 402 324 YES 0.2s
|
||||
9 (9, [(0, 2), (4, 6), (3, 7)], SP) (6, [(0, 3)], SP) 1296 942 19683 54 36 YES 0.1s
|
||||
9 (9, [(0, 2), (4, 6), (3, 7)], SP) (12, [(0, 3), (4, 11), (5,..., SP) 1296 9456 19683 732 768 YES 0.8s
|
||||
|
||||
13/13 compatible at this k.
|
||||
|
||||
### Step 2 at k = 12
|
||||
|
||||
γ T1 (m_1, chords_1, model) T2 (k_2, chords_2, model) |S1| |S2| 3^γ fwd rev compat? time
|
||||
-----------------------------------------------------------------------------------------------------------------------------------------------
|
||||
12 (12, [(0, 3), (4, 7), (8, ..., SP) (12, [(0, 3), (4, 7), (8, ..., SP) 1296 12840 531441 960 564 YES 11.3s
|
||||
12 (12, [(0, 3), (4, 11), (5,..., SP) (12, [(0, 3), (4, 11), (5,..., SP) 7776 100938 531441 5928 3414 YES 14.4s
|
||||
12 (12, [(0, 3), (4, 7), (8, ..., SP) (12, [(0, 3), (4, 11), (5,..., SP) 1296 100938 531441 1128 912 YES 13.4s
|
||||
12 (12, [(0, 3), (4, 7), (8, ..., SP) (3, —, SR) 1296 31176 531441 192 192 YES 5.5s
|
||||
12 (12, [(0, 3), (4, 7), (8, ..., SP) (4, [(0, 2)], SP) 1296 27378 531441 48 60 YES 5.5s
|
||||
12 (12, [(0, 3), (4, 7), (8, ..., SP) (6, [(0, 3)], SP) 1296 9882 531441 6 6 YES 5.4s
|
||||
12 (12, [(0, 3), (4, 7), (8, ..., SP) (6, [(0, 2), (3, 5)], SP) 1296 61224 531441 12 12 YES 5.8s
|
||||
12 (12, [(0, 3), (4, 7), (8, ..., SP) (9, [(0, 2), (3, 5), (6, 8)], SP) 1296 94116 531441 18 90 YES 6.7s
|
||||
12 (12, [(0, 3), (4, 11), (5,..., SP) (9, [(0, 2), (3, 5), (6, 8)], SP) 7776 94116 531441 552 852 YES 8.5s
|
||||
12 (12, [(0, 3), (4, 7), (8, ..., SR) (12, [(0, 3), (4, 7), (8, ..., SP) 531441 12840 531441 12840 12840 YES 143.9s
|
||||
|
||||
10/10 compatible at this k.
|
||||
|
||||
Total: 23/23 compatible across k=9 and k=12.
|
||||
@@ -0,0 +1,6 @@
|
||||
\relax
|
||||
\newlabel{obs:still-compat}{{}{2}}
|
||||
\newlabel{obs:s3-orbit}{{}{2}}
|
||||
\newlabel{obs:more-chords-bigger}{{}{3}}
|
||||
\newlabel{obs:multiples-6}{{}{3}}
|
||||
\gdef \@abspage@last{4}
|
||||
@@ -0,0 +1,357 @@
|
||||
This is pdfTeX, Version 3.141592653-2.6-1.40.24 (TeX Live 2022) (preloaded format=pdflatex 2022.10.5) 26 MAY 2026 03:00
|
||||
entering extended mode
|
||||
restricted \write18 enabled.
|
||||
%&-line parsing enabled.
|
||||
**tire_fiber_step2_large.tex
|
||||
(./tire_fiber_step2_large.tex
|
||||
LaTeX2e <2021-11-15> patch level 1
|
||||
L3 programming layer <2022-02-24>
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/base/article.cls
|
||||
Document Class: article 2021/10/04 v1.4n Standard LaTeX document class
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/base/size11.clo
|
||||
File: size11.clo 2021/10/04 v1.4n Standard LaTeX file (size option)
|
||||
)
|
||||
\c@part=\count185
|
||||
\c@section=\count186
|
||||
\c@subsection=\count187
|
||||
\c@subsubsection=\count188
|
||||
\c@paragraph=\count189
|
||||
\c@subparagraph=\count190
|
||||
\c@figure=\count191
|
||||
\c@table=\count192
|
||||
\abovecaptionskip=\skip47
|
||||
\belowcaptionskip=\skip48
|
||||
\bibindent=\dimen138
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsmath.sty
|
||||
Package: amsmath 2021/10/15 v2.17l AMS math features
|
||||
\@mathmargin=\skip49
|
||||
|
||||
For additional information on amsmath, use the `?' option.
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amstext.sty
|
||||
Package: amstext 2021/08/26 v2.01 AMS text
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsgen.sty
|
||||
File: amsgen.sty 1999/11/30 v2.0 generic functions
|
||||
\@emptytoks=\toks16
|
||||
\ex@=\dimen139
|
||||
))
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsbsy.sty
|
||||
Package: amsbsy 1999/11/29 v1.2d Bold Symbols
|
||||
\pmbraise@=\dimen140
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsopn.sty
|
||||
Package: amsopn 2021/08/26 v2.02 operator names
|
||||
)
|
||||
\inf@bad=\count193
|
||||
LaTeX Info: Redefining \frac on input line 234.
|
||||
\uproot@=\count194
|
||||
\leftroot@=\count195
|
||||
LaTeX Info: Redefining \overline on input line 399.
|
||||
\classnum@=\count196
|
||||
\DOTSCASE@=\count197
|
||||
LaTeX Info: Redefining \ldots on input line 496.
|
||||
LaTeX Info: Redefining \dots on input line 499.
|
||||
LaTeX Info: Redefining \cdots on input line 620.
|
||||
\Mathstrutbox@=\box50
|
||||
\strutbox@=\box51
|
||||
\big@size=\dimen141
|
||||
LaTeX Font Info: Redeclaring font encoding OML on input line 743.
|
||||
LaTeX Font Info: Redeclaring font encoding OMS on input line 744.
|
||||
\macc@depth=\count198
|
||||
\c@MaxMatrixCols=\count199
|
||||
\dotsspace@=\muskip16
|
||||
\c@parentequation=\count266
|
||||
\dspbrk@lvl=\count267
|
||||
\tag@help=\toks17
|
||||
\row@=\count268
|
||||
\column@=\count269
|
||||
\maxfields@=\count270
|
||||
\andhelp@=\toks18
|
||||
\eqnshift@=\dimen142
|
||||
\alignsep@=\dimen143
|
||||
\tagshift@=\dimen144
|
||||
\tagwidth@=\dimen145
|
||||
\totwidth@=\dimen146
|
||||
\lineht@=\dimen147
|
||||
\@envbody=\toks19
|
||||
\multlinegap=\skip50
|
||||
\multlinetaggap=\skip51
|
||||
\mathdisplay@stack=\toks20
|
||||
LaTeX Info: Redefining \[ on input line 2938.
|
||||
LaTeX Info: Redefining \] on input line 2939.
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/amssymb.sty
|
||||
Package: amssymb 2013/01/14 v3.01 AMS font symbols
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/amsfonts.sty
|
||||
Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support
|
||||
\symAMSa=\mathgroup4
|
||||
\symAMSb=\mathgroup5
|
||||
LaTeX Font Info: Redeclaring math symbol \hbar on input line 98.
|
||||
LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold'
|
||||
(Font) U/euf/m/n --> U/euf/b/n on input line 106.
|
||||
))
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amscls/amsthm.sty
|
||||
Package: amsthm 2020/05/29 v2.20.6
|
||||
\thm@style=\toks21
|
||||
\thm@bodyfont=\toks22
|
||||
\thm@headfont=\toks23
|
||||
\thm@notefont=\toks24
|
||||
\thm@headpunct=\toks25
|
||||
\thm@preskip=\skip52
|
||||
\thm@postskip=\skip53
|
||||
\thm@headsep=\skip54
|
||||
\dth@everypar=\toks26
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/graphics/graphicx.sty
|
||||
Package: graphicx 2021/09/16 v1.2d Enhanced LaTeX Graphics (DPC,SPQR)
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/graphics/keyval.sty
|
||||
Package: keyval 2014/10/28 v1.15 key=value parser (DPC)
|
||||
\KV@toks@=\toks27
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/graphics/graphics.sty
|
||||
Package: graphics 2021/03/04 v1.4d Standard LaTeX Graphics (DPC,SPQR)
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/graphics/trig.sty
|
||||
Package: trig 2021/08/11 v1.11 sin cos tan (DPC)
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
|
||||
File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration
|
||||
)
|
||||
Package graphics Info: Driver file: pdftex.def on input line 107.
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/graphics-def/pdftex.def
|
||||
File: pdftex.def 2020/10/05 v1.2a Graphics/color driver for pdftex
|
||||
))
|
||||
\Gin@req@height=\dimen148
|
||||
\Gin@req@width=\dimen149
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/geometry/geometry.sty
|
||||
Package: geometry 2020/01/02 v5.9 Page Geometry
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/iftex/ifvtex.sty
|
||||
Package: ifvtex 2019/10/25 v1.7 ifvtex legacy package. Use iftex instead.
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/iftex/iftex.sty
|
||||
Package: iftex 2022/02/03 v1.0f TeX engine tests
|
||||
))
|
||||
\Gm@cnth=\count271
|
||||
\Gm@cntv=\count272
|
||||
\c@Gm@tempcnt=\count273
|
||||
\Gm@bindingoffset=\dimen150
|
||||
\Gm@wd@mp=\dimen151
|
||||
\Gm@odd@mp=\dimen152
|
||||
\Gm@even@mp=\dimen153
|
||||
\Gm@layoutwidth=\dimen154
|
||||
\Gm@layoutheight=\dimen155
|
||||
\Gm@layouthoffset=\dimen156
|
||||
\Gm@layoutvoffset=\dimen157
|
||||
\Gm@dimlist=\toks28
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/booktabs/booktabs.sty
|
||||
Package: booktabs 2020/01/12 v1.61803398 Publication quality tables
|
||||
\heavyrulewidth=\dimen158
|
||||
\lightrulewidth=\dimen159
|
||||
\cmidrulewidth=\dimen160
|
||||
\belowrulesep=\dimen161
|
||||
\belowbottomsep=\dimen162
|
||||
\aboverulesep=\dimen163
|
||||
\abovetopsep=\dimen164
|
||||
\cmidrulesep=\dimen165
|
||||
\cmidrulekern=\dimen166
|
||||
\defaultaddspace=\dimen167
|
||||
\@cmidla=\count274
|
||||
\@cmidlb=\count275
|
||||
\@aboverulesep=\dimen168
|
||||
\@belowrulesep=\dimen169
|
||||
\@thisruleclass=\count276
|
||||
\@lastruleclass=\count277
|
||||
\@thisrulewidth=\dimen170
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/caption/caption.sty
|
||||
Package: caption 2022/03/01 v3.6b Customizing captions (AR)
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/caption/caption3.sty
|
||||
Package: caption3 2022/03/17 v2.3b caption3 kernel (AR)
|
||||
\caption@tempdima=\dimen171
|
||||
\captionmargin=\dimen172
|
||||
\caption@leftmargin=\dimen173
|
||||
\caption@rightmargin=\dimen174
|
||||
\caption@width=\dimen175
|
||||
\caption@indent=\dimen176
|
||||
\caption@parindent=\dimen177
|
||||
\caption@hangindent=\dimen178
|
||||
Package caption Info: Standard document class detected.
|
||||
)
|
||||
\c@caption@flags=\count278
|
||||
\c@continuedfloat=\count279
|
||||
)
|
||||
(/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=\count280
|
||||
\l__pdf_internal_box=\box52
|
||||
)
|
||||
(./tire_fiber_step2_large.aux)
|
||||
\openout1 = `tire_fiber_step2_large.aux'.
|
||||
|
||||
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 16.
|
||||
LaTeX Font Info: ... okay on input line 16.
|
||||
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 16.
|
||||
LaTeX Font Info: ... okay on input line 16.
|
||||
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 16.
|
||||
LaTeX Font Info: ... okay on input line 16.
|
||||
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 16.
|
||||
LaTeX Font Info: ... okay on input line 16.
|
||||
LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 16.
|
||||
LaTeX Font Info: ... okay on input line 16.
|
||||
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 16.
|
||||
LaTeX Font Info: ... okay on input line 16.
|
||||
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 16.
|
||||
LaTeX Font Info: ... okay on input line 16.
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
|
||||
[Loading MPS to PDF converter (version 2006.09.02).]
|
||||
\scratchcounter=\count281
|
||||
\scratchdimen=\dimen179
|
||||
\scratchbox=\box53
|
||||
\nofMPsegments=\count282
|
||||
\nofMParguments=\count283
|
||||
\everyMPshowfont=\toks29
|
||||
\MPscratchCnt=\count284
|
||||
\MPscratchDim=\dimen180
|
||||
\MPnumerator=\count285
|
||||
\makeMPintoPDFobject=\count286
|
||||
\everyMPtoPDFconversion=\toks30
|
||||
) (/usr/local/texlive/2022/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
|
||||
Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf
|
||||
Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4
|
||||
85.
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
|
||||
File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv
|
||||
e
|
||||
))
|
||||
*geometry* driver: auto-detecting
|
||||
*geometry* detected driver: pdftex
|
||||
*geometry* verbose mode - [ preamble ] result:
|
||||
* driver: pdftex
|
||||
* paper: <default>
|
||||
* layout: <same size as paper>
|
||||
* layoutoffset:(h,v)=(0.0pt,0.0pt)
|
||||
* modes:
|
||||
* h-part:(L,W,R)=(72.26999pt, 469.75502pt, 72.26999pt)
|
||||
* v-part:(T,H,B)=(72.26999pt, 650.43001pt, 72.26999pt)
|
||||
* \paperwidth=614.295pt
|
||||
* \paperheight=794.96999pt
|
||||
* \textwidth=469.75502pt
|
||||
* \textheight=650.43001pt
|
||||
* \oddsidemargin=0.0pt
|
||||
* \evensidemargin=0.0pt
|
||||
* \topmargin=-37.0pt
|
||||
* \headheight=12.0pt
|
||||
* \headsep=25.0pt
|
||||
* \topskip=11.0pt
|
||||
* \footskip=30.0pt
|
||||
* \marginparwidth=59.0pt
|
||||
* \marginparsep=10.0pt
|
||||
* \columnsep=10.0pt
|
||||
* \skip\footins=10.0pt plus 4.0pt minus 2.0pt
|
||||
* \hoffset=0.0pt
|
||||
* \voffset=0.0pt
|
||||
* \mag=1000
|
||||
* \@twocolumnfalse
|
||||
* \@twosidefalse
|
||||
* \@mparswitchfalse
|
||||
* \@reversemarginfalse
|
||||
* (1in=72.27pt=25.4mm, 1cm=28.453pt)
|
||||
|
||||
Package caption Info: Begin \AtBeginDocument code.
|
||||
Package caption Info: End \AtBeginDocument code.
|
||||
LaTeX Font Info: Trying to load font information for U+msa on input line 17.
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/umsa.fd
|
||||
File: umsa.fd 2013/01/14 v3.01 AMS symbols A
|
||||
)
|
||||
LaTeX Font Info: Trying to load font information for U+msb on input line 17.
|
||||
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/umsb.fd
|
||||
File: umsb.fd 2013/01/14 v3.01 AMS symbols B
|
||||
)
|
||||
Overfull \hbox (32.55118pt too wide) in paragraph at lines 21--28
|
||||
\OMS/cmsy/m/n/10.95 f\OT1/cmr/m/n/10.95 9\OML/cmm/m/it/10.95 ; \OT1/cmr/m/n/10.
|
||||
95 12\OMS/cmsy/m/n/10.95 g$\OT1/cmr/m/n/10.95 , en-abled by the numpy-optimized
|
||||
fiber enu-mer-a-tion in \OT1/cmtt/m/n/10.95 experiments/tire[]fiber[]chords[]f
|
||||
ast.py\OT1/cmr/m/n/10.95 .
|
||||
[]
|
||||
|
||||
|
||||
Overfull \hbox (84.92256pt too wide) in paragraph at lines 29--31
|
||||
[]\OT1/cmr/m/n/10.95 Script: \OT1/cmtt/m/n/10.95 experiments/tire[]fiber[]step2
|
||||
[]large.py\OT1/cmr/m/n/10.95 . Out-put: \OT1/cmtt/m/n/10.95 experiments/tire[]f
|
||||
iber[]step2[]large[]data.txt\OT1/cmr/m/n/10.95 .
|
||||
[]
|
||||
|
||||
[1
|
||||
|
||||
{/usr/local/texlive/2022/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
|
||||
[2]
|
||||
Overfull \hbox (14.79457pt too wide) in paragraph at lines 166--170
|
||||
[]$\OT1/cmr/m/n/10.95 1188\OML/cmm/m/it/10.95 ; \OT1/cmr/m/n/10.95 1242\OML/cmm
|
||||
/m/it/10.95 ; \OT1/cmr/m/n/10.95 1176\OML/cmm/m/it/10.95 ; \OT1/cmr/m/n/10.95 8
|
||||
58\OML/cmm/m/it/10.95 ; \OT1/cmr/m/n/10.95 1110\OML/cmm/m/it/10.95 ; \OT1/cmr/m
|
||||
/n/10.95 1224\OML/cmm/m/it/10.95 ; \OT1/cmr/m/n/10.95 72\OML/cmm/m/it/10.95 ; \
|
||||
OT1/cmr/m/n/10.95 90\OML/cmm/m/it/10.95 ; \OT1/cmr/m/n/10.95 840\OML/cmm/m/it/1
|
||||
0.95 ; \OT1/cmr/m/n/10.95 606\OML/cmm/m/it/10.95 ; \OT1/cmr/m/n/10.95 7866\OML/
|
||||
cmm/m/it/10.95 ; \OT1/cmr/m/n/10.95 108\OML/cmm/m/it/10.95 ; \OT1/cmr/m/n/10.95
|
||||
276\OML/cmm/m/it/10.95 ; \OT1/cmr/m/n/10.95 54\OML/cmm/m/it/10.95 ; \OT1/cmr/m
|
||||
/n/10.95 60\OML/cmm/m/it/10.95 ; \OT1/cmr/m/n/10.95 402\OML/cmm/m/it/10.95 ; \O
|
||||
T1/cmr/m/n/10.95 324\OML/cmm/m/it/10.95 ; \OT1/cmr/m/n/10.95 36\OML/cmm/m/it/10
|
||||
.95 ; \OT1/cmr/m/n/10.95 732\OML/cmm/m/it/10.95 ; \OT1/cmr/m/n/10.95 768$\OT1/c
|
||||
mr/m/it/10.95 ,
|
||||
[]
|
||||
|
||||
|
||||
Overfull \hbox (7.76158pt too wide) in paragraph at lines 207--212
|
||||
\OT1/cmr/m/n/10.95 The numpy-optimized enu-mer-a-tion in \OT1/cmtt/m/n/10.95 ex
|
||||
periments/tire[]fiber[]chords[]fast.py \OT1/cmr/m/n/10.95 re-places the brute-
|
||||
[]
|
||||
|
||||
[3] [4] (./tire_fiber_step2_large.aux) )
|
||||
Here is how much of TeX's memory you used:
|
||||
4595 strings out of 478268
|
||||
74454 string characters out of 5846347
|
||||
388403 words of memory out of 5000000
|
||||
22771 multiletter control sequences out of 15000+600000
|
||||
483898 words of font info for 87 fonts, out of 8000000 for 9000
|
||||
1141 hyphenation exceptions out of 8191
|
||||
55i,10n,63p,256b,253s stack positions out of 10000i,1000n,20000p,200000b,200000s
|
||||
{/usr/local/texlive/2022/texmf-dist/fon
|
||||
ts/enc/dvips/cm-super/cm-super-ts1.enc}</usr/local/texlive/2022/texmf-dist/font
|
||||
s/type1/public/amsfonts/cm/cmbx10.pfb></usr/local/texlive/2022/texmf-dist/fonts
|
||||
/type1/public/amsfonts/cm/cmbx12.pfb></usr/local/texlive/2022/texmf-dist/fonts/
|
||||
type1/public/amsfonts/cm/cmbx8.pfb></usr/local/texlive/2022/texmf-dist/fonts/ty
|
||||
pe1/public/amsfonts/cm/cmitt10.pfb></usr/local/texlive/2022/texmf-dist/fonts/ty
|
||||
pe1/public/amsfonts/cm/cmmi10.pfb></usr/local/texlive/2022/texmf-dist/fonts/typ
|
||||
e1/public/amsfonts/cm/cmmi12.pfb></usr/local/texlive/2022/texmf-dist/fonts/type
|
||||
1/public/amsfonts/cm/cmmi8.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/
|
||||
public/amsfonts/cm/cmr10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/pu
|
||||
blic/amsfonts/cm/cmr12.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/publ
|
||||
ic/amsfonts/cm/cmr17.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public
|
||||
/amsfonts/cm/cmr6.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/am
|
||||
sfonts/cm/cmr8.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfo
|
||||
nts/cm/cmsy10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfon
|
||||
ts/cm/cmsy8.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts
|
||||
/cm/cmti10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/
|
||||
cm/cmtt10.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/c
|
||||
m/cmtt8.pfb></usr/local/texlive/2022/texmf-dist/fonts/type1/public/cm-super/sfr
|
||||
m1095.pfb>
|
||||
Output written on tire_fiber_step2_large.pdf (4 pages, 211349 bytes).
|
||||
PDF statistics:
|
||||
108 PDF objects out of 1000 (max. 8388607)
|
||||
65 compressed objects within 1 object stream
|
||||
0 named destinations out of 1000 (max. 500000)
|
||||
1 words of extra memory for PDF output out of 10000 (max. 10000000)
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,243 @@
|
||||
\documentclass[11pt]{article}
|
||||
\usepackage{amsmath,amssymb,amsthm}
|
||||
\usepackage{graphicx}
|
||||
\usepackage{geometry}
|
||||
\usepackage{booktabs}
|
||||
\usepackage{caption}
|
||||
\geometry{margin=1in}
|
||||
|
||||
\title{Step 2 at $k = 9$ and $k = 12$:\\
|
||||
extending the adjacent-tire compatibility experiment}
|
||||
\author{}
|
||||
\date{}
|
||||
|
||||
\newtheorem*{obs}{Observation}
|
||||
|
||||
\begin{document}
|
||||
\maketitle
|
||||
|
||||
\section*{What this is}
|
||||
|
||||
A continuation of \texttt{tire\_fiber\_step2.tex}: that note tested
|
||||
adjacent-tire compatibility (the chain-pigeonhole step) at $k \leq 6$,
|
||||
all $23/23$ pairs compatible. This note pushes the experiment to
|
||||
$k \in \{9, 12\}$, enabled by the numpy-optimized fiber enumeration
|
||||
in \texttt{experiments/tire\_fiber\_chords\_fast.py}. Together with
|
||||
the earlier data, every tested pair --- now $23$ at $k \leq 6$ plus
|
||||
$23$ more at $k \in \{9, 12\}$, $46$ in total --- is compatible.
|
||||
|
||||
Script: \texttt{experiments/tire\_fiber\_step2\_large.py}.
|
||||
Output: \texttt{experiments/tire\_fiber\_step2\_large\_data.txt}.
|
||||
|
||||
\section*{Setup recap}
|
||||
|
||||
Two adjacent tires $T_1, T_2$ share a cycle $\gamma$ of length $k$.
|
||||
We project each tire's $\sigma$-support onto $\gamma$:
|
||||
\[
|
||||
S_1 := \pi_D^{(1)}(\mathcal{C}^{(1)}) \subseteq \{1,2,3\}^k,
|
||||
\quad
|
||||
S_2 := \pi_U^{(2)}(\mathcal{C}^{(2)}) \subseteq \{1,2,3\}^k,
|
||||
\]
|
||||
and ask whether $S_1 \cap S_2 \neq \emptyset$ (forward), or
|
||||
$S_1 \cap \mathrm{reverse}(S_2) \neq \emptyset$ (reverse). Either
|
||||
non-empty intersection means the pair is \emph{compatible}.
|
||||
|
||||
\section*{Chord configurations used}
|
||||
|
||||
Under the Steiner-poor model, every $O$-face must have at most $3$
|
||||
$B_{\mathrm{in}}$ edges. For $k > 3$ this forces specific chord
|
||||
matchings. Constrained chord sets used (validated):
|
||||
|
||||
\begin{center}
|
||||
\small
|
||||
\begin{tabular}{l l l}
|
||||
\toprule
|
||||
label & chord set & face sizes \\
|
||||
\midrule
|
||||
\texttt{K9\_CHORDS\_3} & $\{(0,2),(3,5),(6,8)\}$ & $(2, 2, 2, 3)$ \\
|
||||
\texttt{K9\_CHORDS\_NESTED} & $\{(0,2),(3,7),(4,6)\}$ & $(2, 2, 2, 3)$ (different arrangement) \\
|
||||
\texttt{K12\_CHORDS\_3} & $\{(0,3),(4,7),(8,11)\}$ & $(3, 3, 3, 3)$ (symmetric thirds) \\
|
||||
\texttt{K12\_CHORDS\_NESTED} & $\{(0,3),(4,11),(5,7),(8,10)\}$ & $(2, 2, 2, 3, 3)$ \\
|
||||
\bottomrule
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
|
||||
\section*{Results at $k = 9$ (13/13 compatible)}
|
||||
|
||||
\begin{center}
|
||||
\scriptsize
|
||||
\begin{tabular}{l l r r r r r}
|
||||
\toprule
|
||||
$T_1$ & $T_2$ & $|S_1|$ & $|S_2|$ & $|S_1 \cap S_2|$ fwd & rev & compat? \\
|
||||
\midrule
|
||||
$(9, \texttt{K9-3}, \text{SP})$ & $(9, \texttt{K9-3}, \text{SP})$ & 1296 & 7866 & 1188 & 858 & yes \\
|
||||
$(9, \texttt{K9-3}, \text{SP})$ & $(9, \texttt{K9-N}, \text{SP})$ & 1296 & 7536 & 1242 & 1110 & yes \\
|
||||
$(9, \texttt{K9-N}, \text{SP})$ & $(9, \texttt{K9-N}, \text{SP})$ & 1296 & 7536 & 1176 & 1224 & yes \\
|
||||
$(12, \texttt{K9-3}, \text{SP})$ & $(9, \texttt{K9-3}, \text{SP})$ & 1296 & 7866 & 1188 & 858 & yes \\
|
||||
$(9, \texttt{K9-3}, \text{SP})$ & $(12, \texttt{K12-3}, \text{SP})$ & 1296 & 1302 & 72 & 90 & yes \\
|
||||
$(9, \texttt{K9-3}, \text{SP})$ & $(12, \texttt{K12-N}, \text{SP})$ & 1296 & 9456 & 840 & 606 & yes \\
|
||||
$(9, \texttt{K9-3}, \text{SR})$ & $(9, \texttt{K9-3}, \text{SP})$ & 19683 & 7866 & 7866 & 7866 & yes \\
|
||||
$(9, \texttt{K9-3}, \text{SP})$ & $(3, -, \text{SR})$ & 1296 & 3681 & 108 & 108 & yes \\
|
||||
$(9, \texttt{K9-3}, \text{SP})$ & $(4, (0,2), \text{SP})$ & 1296 & 3162 & 276 & 108 & yes \\
|
||||
$(9, \texttt{K9-3}, \text{SP})$ & $(6, (0,3), \text{SP})$ & 1296 & 942 & 54 & 60 & yes \\
|
||||
$(9, \texttt{K9-3}, \text{SP})$ & $(6, (0,2)(3,5), \text{SP})$ & 1296 & 6210 & 402 & 324 & yes \\
|
||||
$(9, \texttt{K9-N}, \text{SP})$ & $(6, (0,3), \text{SP})$ & 1296 & 942 & 54 & 36 & yes \\
|
||||
$(9, \texttt{K9-N}, \text{SP})$ & $(12, \texttt{K12-N}, \text{SP})$ & 1296 & 9456 & 732 & 768 & yes \\
|
||||
\bottomrule
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
|
||||
Universe size at $k = 9$: $3^9 = 19{,}683$.
|
||||
|
||||
\section*{Results at $k = 12$ (10/10 compatible)}
|
||||
|
||||
\begin{center}
|
||||
\scriptsize
|
||||
\begin{tabular}{l l r r r r r}
|
||||
\toprule
|
||||
$T_1$ & $T_2$ & $|S_1|$ & $|S_2|$ & $|S_1 \cap S_2|$ fwd & rev & compat? \\
|
||||
\midrule
|
||||
$(12, \texttt{K12-3}, \text{SP})$ & $(12, \texttt{K12-3}, \text{SP})$ & 1296 & 12840 & 960 & 564 & yes \\
|
||||
$(12, \texttt{K12-N}, \text{SP})$ & $(12, \texttt{K12-N}, \text{SP})$ & 7776 & 100938 & 5928 & 3414 & yes \\
|
||||
$(12, \texttt{K12-3}, \text{SP})$ & $(12, \texttt{K12-N}, \text{SP})$ & 1296 & 100938 & 1128 & 912 & yes \\
|
||||
$(12, \texttt{K12-3}, \text{SP})$ & $(3, -, \text{SR})$ & 1296 & 31176 & 192 & 192 & yes \\
|
||||
$(12, \texttt{K12-3}, \text{SP})$ & $(4, (0,2), \text{SP})$ & 1296 & 27378 & 48 & 60 & yes \\
|
||||
$(12, \texttt{K12-3}, \text{SP})$ & $(6, (0,3), \text{SP})$ & 1296 & 9882 & \textbf{6} & \textbf{6} & yes \\
|
||||
$(12, \texttt{K12-3}, \text{SP})$ & $(6, (0,2)(3,5), \text{SP})$ & 1296 & 61224 & 12 & 12 & yes \\
|
||||
$(12, \texttt{K12-3}, \text{SP})$ & $(9, \texttt{K9-3}, \text{SP})$ & 1296 & 94116 & 18 & 90 & yes \\
|
||||
$(12, \texttt{K12-N}, \text{SP})$ & $(9, \texttt{K9-3}, \text{SP})$ & 7776 & 94116 & 552 & 852 & yes \\
|
||||
$(12, \texttt{K12-3}, \text{SR})$ & $(12, \texttt{K12-3}, \text{SP})$ & 531441 & 12840 & 12840 & 12840 & yes \\
|
||||
\bottomrule
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
|
||||
Universe size at $k = 12$: $3^{12} = 531{,}441$.
|
||||
|
||||
\section*{Observations}
|
||||
|
||||
\begin{obs}[Still compatible everywhere]
|
||||
\label{obs:still-compat}
|
||||
$46$ of $46$ tested pairs are compatible across $k \in \{3, 4, 5, 6,
|
||||
9, 12\}$ ($23$ from the earlier note plus $23$ new at $k \in \{9, 12\}$).
|
||||
No counterexample has been found.
|
||||
\end{obs}
|
||||
|
||||
\begin{obs}[The $S_3$-orbit pattern persists at $k = 12$]
|
||||
\label{obs:s3-orbit}
|
||||
The smallest tested intersection at $k = 12$ is again \emph{exactly
|
||||
$6$ elements}, occurring at $T_1 = (12, \texttt{K12-3}, \text{SP})$ vs.\
|
||||
$T_2 = (6, (0,3), \text{SP})$. Direct inspection shows the six
|
||||
elements are a single $S_3$-orbit of the canonical pattern
|
||||
\[
|
||||
(1, 2, 3, 2, 2, 1, 3, 3, 2, 3, 1, 1).
|
||||
\]
|
||||
Decoded against \texttt{K12-3}'s face structure (faces $\{0,1,2\}$,
|
||||
$\{4,5,6\}$, $\{8,9,10\}$, and the outer face $\{3,7,11\}$ on the
|
||||
$B_{\mathrm{in}}$ edges):
|
||||
\begin{itemize}
|
||||
\item face $\{0,1,2\}$: $\sigma$-values $(1, 2, 3)$ -- a permutation of $\{1,2,3\}$.
|
||||
\item face $\{4,5,6\}$: $\sigma$-values $(2, 1, 3)$ -- a permutation.
|
||||
\item face $\{8,9,10\}$: $\sigma$-values $(2, 3, 1)$ -- a permutation.
|
||||
\item face $\{3,7,11\}$: $\sigma$-values $(2, 3, 1)$ -- a permutation.
|
||||
\end{itemize}
|
||||
Every face receives all three colors exactly once. This is precisely
|
||||
the ``Latin-square-flavoured'' structural pattern from the $k = 6$
|
||||
worst case, now extended to $k = 12$.
|
||||
\end{obs}
|
||||
|
||||
\begin{obs}[Bigger supports come from more chords]
|
||||
\label{obs:more-chords-bigger}
|
||||
Nested chord sets give substantially larger supports than symmetric
|
||||
ones:
|
||||
\begin{itemize}
|
||||
\item At $k = 12$, $\texttt{K12-3}$ (symmetric, faces $3{+}3{+}3{+}3$)
|
||||
gives $|S_1| = 1296$.
|
||||
\item $\texttt{K12-N}$ (nested, faces $2{+}2{+}2{+}3{+}3$) gives
|
||||
$|S_1| = 7776 = 6 \cdot 1296$.
|
||||
\end{itemize}
|
||||
The factor of $6$ is suggestive but I have not chased it.
|
||||
\end{obs}
|
||||
|
||||
\begin{obs}[Intersection sizes are multiples of $6$]
|
||||
\label{obs:multiples-6}
|
||||
Every observed forward and reverse intersection size in the new data
|
||||
is a multiple of $6$:
|
||||
\begin{quote}
|
||||
$1188, 1242, 1176, 858, 1110, 1224, 72, 90, 840, 606, 7866, 108, 276,
|
||||
54, 60, 402, 324, 36, 732, 768$,\\
|
||||
$960, 564, 5928, 3414, 1128, 912, 192, 48, 60, 6, 12, 18, 90, 552, 852,
|
||||
12840$
|
||||
\end{quote}
|
||||
This is consistent with both $S_1$ and $S_2$ being $S_3$-invariant
|
||||
(closed under color permutations), so their intersection decomposes
|
||||
into $S_3$-orbits, each of size $6$.
|
||||
\end{obs}
|
||||
|
||||
\section*{Speculative theorem}
|
||||
|
||||
\begin{quote}
|
||||
\textbf{Conjecture.} For any SP-feasible tire $T$ (i.e.\ every
|
||||
$O$-face has at most $3$ $B_{\mathrm{in}}$ edges), the projection
|
||||
$\pi_D(\mathcal{C}(T))$ on the $\gamma$-side contains the
|
||||
``Latin-flavoured'' subset
|
||||
\[
|
||||
\mathcal{L}(\gamma, O) \;:=\; \{\sigma \in \{1,2,3\}^{|\gamma|}
|
||||
: \sigma \text{ restricted to each $O$-face is a permutation
|
||||
of $\{1,2,3\}$}\},
|
||||
\]
|
||||
which is an $S_3$-invariant set of size at least $6$ (and exactly
|
||||
$6$ in the maximally constrained case). Adjacent tires share this
|
||||
common substructure on $\gamma$, so the chain-pigeonhole intersection
|
||||
is non-empty.
|
||||
\end{quote}
|
||||
|
||||
The data is consistent with this conjecture and points to a
|
||||
structural proof: any tire that admits an edge $3$-coloring at all
|
||||
must admit a globally ``Latin-style'' one, and Latin-style colorings
|
||||
are dictated entirely by face structure (not by which tire's face it
|
||||
is). Adjacent tires that share a cycle $\gamma$ see the same Latin
|
||||
constraints from each other's side, so their Latin-style supports
|
||||
agree.
|
||||
|
||||
This would be the analog, on the chord side, of step~1's
|
||||
``saturation iff $m \geq k$'' result on the spoke-only side.
|
||||
|
||||
\section*{Performance notes}
|
||||
|
||||
The numpy-optimized enumeration in
|
||||
\texttt{experiments/tire\_fiber\_chords\_fast.py} replaces the
|
||||
brute-force $3^n$-iteration with direct construction of the
|
||||
$2^n + 2(-1)^n$ proper edge $3$-colorings of $C_n$. Speedups
|
||||
benchmarked against the slow version:
|
||||
\begin{itemize}
|
||||
\item $n = 12$: 0.001s vs 0.21s -- $\sim 146\times$
|
||||
\item $n = 15$: 0.013s vs 5.4s -- $\sim 424\times$
|
||||
\item $n = 18$: 0.11s vs (extrapolated) $\sim 150$s
|
||||
\item $n = 24$: 6.6s vs (extrapolated) $\sim 30$ hours
|
||||
\end{itemize}
|
||||
Total wall time for the $k = 9$ block: a few seconds; $k = 12$ block:
|
||||
$\sim 4$ minutes (dominated by the single SR-vs-SP case at $n = 24$).
|
||||
|
||||
\section*{Caveats}
|
||||
|
||||
\begin{enumerate}
|
||||
\item \textbf{Still finite, still not a proof.} $46$ pairs is still
|
||||
a small slice. Larger $k$ ($\geq 15$) or unusual chord
|
||||
configurations could harbour a counterexample. The conjecture
|
||||
above suggests there is no counterexample, but is unproven.
|
||||
\item \textbf{Multi-tire chains.} Step~2 is pairwise compatibility.
|
||||
A long nested chain of SP tires requires pairwise overlap at
|
||||
each shared cycle \emph{plus} mutual consistency across all
|
||||
shared cycles simultaneously. The Latin-style conjecture, if
|
||||
true, would imply chain-wide consistency via a common
|
||||
Latin coloring of all annular faces at once.
|
||||
\item \textbf{Model still SP/SR only.} Intermediate
|
||||
sub-triangulations (some Steiner vertices, some not) are not
|
||||
enumerated.
|
||||
\item \textbf{Chord set space is sampled, not enumerated.} Each $k$
|
||||
has many distinct chord matchings; this experiment uses only
|
||||
one or two per $k$. More exhaustive enumeration could
|
||||
strengthen the empirical evidence.
|
||||
\end{enumerate}
|
||||
|
||||
\end{document}
|
||||
Reference in New Issue
Block a user