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