diff --git a/papers/coloring_nested_tire_graphs/experiments/orbit_decomposition.py b/papers/coloring_nested_tire_graphs/experiments/orbit_decomposition.py new file mode 100644 index 0000000..4ef2e1e --- /dev/null +++ b/papers/coloring_nested_tire_graphs/experiments/orbit_decomposition.py @@ -0,0 +1,171 @@ +"""Decompose S_1 ∩ S_2 into S_3-orbits for each (T_1, T_2) pair in step-2. + +Question: for structurally different (T_1, T_2) sharing γ, does the same +canonical orbit show up across pairs, or is each intersection a different +orbit? Are intersections always unions of complete S_3-orbits? +""" +from itertools import permutations + +from tire_fiber_step2 import ( + CASES, + project_T1_D, + project_T2_U, + intersect_with_reflection, + fmt_cfg, +) + + +def s3_orbit(sigma): + """Return the S_3 orbit of sigma under color permutations. + + Acts on each entry of sigma by pi : {1,2,3} -> {1,2,3}, generating + up to 6 elements (fewer if sigma has fewer than 3 distinct colors). + """ + orbit = set() + for pi in permutations([1, 2, 3]): + # pi is a permutation of (1,2,3); color c maps to pi[c-1] + mapped = tuple(pi[c - 1] for c in sigma) + orbit.add(mapped) + return orbit + + +def cyclic_rotations(sigma): + """Cyclic rotations of sigma, as a set.""" + n = len(sigma) + return {tuple(sigma[(i + k) % n] for i in range(n)) for k in range(n)} + + +def canonical_orbit_rep(sigma): + """Return a canonical representative of sigma's combined orbit under + S_3 color action AND cyclic rotation of positions: the lexicographically + smallest element of (S_3 ∪ cyclic) closure.""" + closure = set() + for pi in permutations([1, 2, 3]): + for k in range(len(sigma)): + rot = tuple(pi[sigma[(i + k) % len(sigma)] - 1] for i in range(len(sigma))) + closure.add(rot) + return min(closure) + + +def decompose_into_s3_orbits(S): + """Decompose set S into S_3-orbits (color permutation, NOT cyclic). + Returns dict {canonical_rep -> list of all elements in that orbit}.""" + orbits = {} + seen = set() + for sigma in sorted(S): + if sigma in seen: + continue + orb = s3_orbit(sigma) + orb_in_S = orb & S + rep = min(orb_in_S) + orbits[rep] = sorted(orb_in_S) + seen |= orb_in_S + return orbits + + +def decompose_into_combined_orbits(S): + """Decompose into orbits under S_3 color action AND cyclic position + rotation. Returns dict {canonical_rep -> elements}.""" + orbits = {} + seen = set() + for sigma in sorted(S): + if sigma in seen: + continue + closure = set() + for pi in permutations([1, 2, 3]): + for k in range(len(sigma)): + rot = tuple(pi[sigma[(i + k) % len(sigma)] - 1] + for i in range(len(sigma))) + closure.add(rot) + in_S = closure & S + rep = min(in_S) + orbits[rep] = sorted(in_S) + seen |= in_S + return orbits + + +def is_complete_s3_closed(S): + """Check if S is closed under S_3 color permutations.""" + for sigma in S: + for tau in s3_orbit(sigma): + if tau not in S: + return False + return True + + +def main(): + rep_to_pairs = {} # canonical rep -> list of (T1, T2) pairs in which it appears + pair_to_orbits = [] # list of (T1, T2, orbits_dict) + + print(f"{'γ':>2} {'T1':<32s} {'T2':<32s} " + f"{'|S1∩S2|':>7s} {'S3-closed?':>10s} " + f"{'#S3-orbits':>10s} {'orbit sizes':>15s}") + print("-" * 120) + for gamma, t1, t2 in CASES: + m_1, ch1, model1 = t1 + k_2, ch2, model2 = t2 + S1 = project_T1_D(gamma, m_1, ch1, model1) + S2 = project_T2_U(gamma, k_2, ch2, model2) + forward, reverse = intersect_with_reflection(S1, S2) + # use the larger of forward, reverse for analysis (typically same) + S = forward if len(forward) >= len(reverse) else reverse + + if not S: + continue + closed = is_complete_s3_closed(S) + orbits = decompose_into_s3_orbits(S) + orbit_sizes = sorted(len(o) for o in orbits.values()) + + # Combined orbits (S_3 + cyclic) -- to identify canonical patterns + combined = decompose_into_combined_orbits(S) + for rep in combined: + rep_to_pairs.setdefault(rep, []).append( + (gamma, fmt_cfg(m_1, ch1, model1), fmt_cfg(k_2, ch2, model2)) + ) + + pair_to_orbits.append((gamma, t1, t2, orbits, combined)) + + print( + f"{gamma:>2} {fmt_cfg(m_1, ch1, model1):<32s} " + f"{fmt_cfg(k_2, ch2, model2):<32s} " + f"{len(S):>7d} {('yes' if closed else 'NO'):>10s} " + f"{len(orbits):>10d} {str(orbit_sizes):>15s}" + ) + + print("-" * 120) + print() + print("=== Combined (S_3 + cyclic) orbit canonical representatives ===") + print(" Showing canonical rep, orbit size, and which (T_1, T_2) pairs contain it.") + print() + for rep, pairs in sorted(rep_to_pairs.items(), + key=lambda kv: (-len(kv[1]), kv[0])): + # Compute full combined orbit size + closure = set() + for pi in permutations([1, 2, 3]): + for k in range(len(rep)): + rot = tuple(pi[rep[(i + k) % len(rep)] - 1] + for i in range(len(rep))) + closure.add(rot) + print(f" rep {rep} |orbit| = {len(closure)} appears in {len(pairs)} pair(s):") + for g, t1s, t2s in pairs: + print(f" γ={g} T_1={t1s} T_2={t2s}") + + # Highlight the rainbow rep + print() + print("=== Rainbow pattern check ===") + rainbow_reps = [] + for rep in rep_to_pairs: + if len(rep) == 6: + # Check if pattern is (a,b,c,b,c,a) + a, b, c = rep[0], rep[1], rep[2] + if (rep == (a, b, c, b, c, a) + and len({a, b, c}) == 3): + rainbow_reps.append(rep) + print(f"Found {len(rainbow_reps)} canonical reps matching (a,b,c,b,c,a) pattern:") + for rep in rainbow_reps: + n = len(rep_to_pairs[rep]) + print(f" {rep} appears in {n} pair(s)") + + +if __name__ == '__main__': + main() diff --git a/papers/coloring_nested_tire_graphs/experiments/orbit_decomposition_data.txt b/papers/coloring_nested_tire_graphs/experiments/orbit_decomposition_data.txt new file mode 100644 index 0000000..0e9afc2 --- /dev/null +++ b/papers/coloring_nested_tire_graphs/experiments/orbit_decomposition_data.txt @@ -0,0 +1,177 @@ + γ T1 T2 |S1∩S2| S3-closed? #S3-orbits orbit sizes +------------------------------------------------------------------------------------------------------------------------ + 3 (3, —, SR) (3, —, SR) 27 yes 5 [3, 6, 6, 6, 6] + 3 (3, —, SR) (4, [(0, 2)], SP) 24 yes 4 [6, 6, 6, 6] + 3 (3, —, SP) (3, —, SP) 6 yes 1 [6] + 3 (3, —, SP) (4, [(0, 2)], SP) 6 yes 1 [6] + 4 (4, —, SR) (4, —, SR) 81 yes 14 [3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6] + 4 (4, [(0, 2)], SP) (4, [(0, 2)], SP) 36 yes 6 [6, 6, 6, 6, 6, 6] + 4 (4, [(0, 2)], SP) (4, —, SR) 36 yes 6 [6, 6, 6, 6, 6, 6] + 4 (4, —, SR) (4, [(0, 2)], SP) 54 yes 9 [6, 6, 6, 6, 6, 6, 6, 6, 6] + 4 (3, [(0, 2)], SP) (4, [(0, 2)], SP) 36 yes 6 [6, 6, 6, 6, 6, 6] + 4 (4, [(0, 2)], SP) (5, [(0, 2)], SP) 12 yes 2 [6, 6] + 4 (4, [(0, 2)], SP) (6, [(0, 3)], SP) 6 yes 1 [6] + 4 (4, [(0, 2)], SP) (6, [(0, 2), (3, 5)], SP) 36 yes 6 [6, 6, 6, 6, 6, 6] + 5 (5, [(0, 2)], SP) (3, —, SR) 18 yes 3 [6, 6, 6] + 5 (5, [(0, 2)], SP) (5, [(0, 2)], SP) 36 yes 6 [6, 6, 6, 6, 6, 6] + 5 (5, [(0, 2)], SP) (5, [(0, 3)], SP) 36 yes 6 [6, 6, 6, 6, 6, 6] + 5 (5, [(0, 3)], SP) (5, [(0, 3)], SP) 36 yes 6 [6, 6, 6, 6, 6, 6] + 5 (5, [(0, 2)], SR) (5, [(0, 2)], SP) 90 yes 15 [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6] + 6 (6, [(0, 3)], SP) (6, [(0, 3)], SP) 36 yes 6 [6, 6, 6, 6, 6, 6] + 6 (6, [(0, 3)], SP) (6, [(0, 2), (3, 5)], SP) 36 yes 6 [6, 6, 6, 6, 6, 6] + 6 (6, [(0, 2), (3, 5)], SP) (6, [(0, 2), (3, 5)], SP) 216 yes 36 [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6] + 6 (6, [(0, 3)], SP) (3, —, SR) 6 yes 1 [6] + 6 (6, [(0, 2), (3, 5)], SP) (3, —, SR) 108 yes 18 [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6] + 6 (6, [(0, 2), (3, 5)], SP) (4, [(0, 2)], SP) 108 yes 18 [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6] +------------------------------------------------------------------------------------------------------------------------ + +=== Combined (S_3 + cyclic) orbit canonical representatives === + Showing canonical rep, orbit size, and which (T_1, T_2) pairs contain it. + + rep (1, 2, 1, 3) |orbit| = 12 appears in 7 pair(s): + γ=4 T_1=(4, —, SR) T_2=(4, —, SR) + γ=4 T_1=(4, [(0, 2)], SP) T_2=(4, [(0, 2)], SP) + γ=4 T_1=(4, [(0, 2)], SP) T_2=(4, —, SR) + γ=4 T_1=(4, —, SR) T_2=(4, [(0, 2)], SP) + γ=4 T_1=(3, [(0, 2)], SP) T_2=(4, [(0, 2)], SP) + γ=4 T_1=(4, [(0, 2)], SP) T_2=(5, [(0, 2)], SP) + γ=4 T_1=(4, [(0, 2)], SP) T_2=(6, [(0, 2), (3, 5)], SP) + rep (1, 2, 1, 2) |orbit| = 6 appears in 6 pair(s): + γ=4 T_1=(4, —, SR) T_2=(4, —, SR) + γ=4 T_1=(4, [(0, 2)], SP) T_2=(4, [(0, 2)], SP) + γ=4 T_1=(4, [(0, 2)], SP) T_2=(4, —, SR) + γ=4 T_1=(4, —, SR) T_2=(4, [(0, 2)], SP) + γ=4 T_1=(3, [(0, 2)], SP) T_2=(4, [(0, 2)], SP) + γ=4 T_1=(4, [(0, 2)], SP) T_2=(6, [(0, 2), (3, 5)], SP) + rep (1, 2, 2, 1) |orbit| = 12 appears in 5 pair(s): + γ=4 T_1=(4, [(0, 2)], SP) T_2=(4, [(0, 2)], SP) + γ=4 T_1=(4, [(0, 2)], SP) T_2=(4, —, SR) + γ=4 T_1=(3, [(0, 2)], SP) T_2=(4, [(0, 2)], SP) + γ=4 T_1=(4, [(0, 2)], SP) T_2=(6, [(0, 3)], SP) + γ=4 T_1=(4, [(0, 2)], SP) T_2=(6, [(0, 2), (3, 5)], SP) + rep (1, 2, 2, 3) |orbit| = 24 appears in 5 pair(s): + γ=4 T_1=(4, [(0, 2)], SP) T_2=(4, [(0, 2)], SP) + γ=4 T_1=(4, [(0, 2)], SP) T_2=(4, —, SR) + γ=4 T_1=(3, [(0, 2)], SP) T_2=(4, [(0, 2)], SP) + γ=4 T_1=(4, [(0, 2)], SP) T_2=(5, [(0, 2)], SP) + γ=4 T_1=(4, [(0, 2)], SP) T_2=(6, [(0, 2), (3, 5)], SP) + rep (1, 2, 3) |orbit| = 6 appears in 4 pair(s): + γ=3 T_1=(3, —, SR) T_2=(3, —, SR) + γ=3 T_1=(3, —, SR) T_2=(4, [(0, 2)], SP) + γ=3 T_1=(3, —, SP) T_2=(3, —, SP) + γ=3 T_1=(3, —, SP) T_2=(4, [(0, 2)], SP) + rep (1, 2, 1, 1, 3, 2) |orbit| = 36 appears in 3 pair(s): + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(6, [(0, 2), (3, 5)], SP) + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(3, —, SR) + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(4, [(0, 2)], SP) + rep (1, 2, 1, 1, 3, 3) |orbit| = 36 appears in 3 pair(s): + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(6, [(0, 2), (3, 5)], SP) + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(3, —, SR) + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(4, [(0, 2)], SP) + rep (1, 2, 1, 2, 1, 2) |orbit| = 6 appears in 3 pair(s): + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(6, [(0, 2), (3, 5)], SP) + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(3, —, SR) + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(4, [(0, 2)], SP) + rep (1, 2, 1, 2, 3) |orbit| = 30 appears in 3 pair(s): + γ=5 T_1=(5, [(0, 2)], SP) T_2=(5, [(0, 2)], SP) + γ=5 T_1=(5, [(0, 2)], SP) T_2=(5, [(0, 3)], SP) + γ=5 T_1=(5, [(0, 2)], SR) T_2=(5, [(0, 2)], SP) + rep (1, 2, 2, 1, 3) |orbit| = 30 appears in 3 pair(s): + γ=5 T_1=(5, [(0, 2)], SP) T_2=(3, —, SR) + γ=5 T_1=(5, [(0, 2)], SP) T_2=(5, [(0, 2)], SP) + γ=5 T_1=(5, [(0, 2)], SP) T_2=(5, [(0, 3)], SP) + rep (1, 2, 2, 2, 3, 1) |orbit| = 36 appears in 3 pair(s): + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(6, [(0, 2), (3, 5)], SP) + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(3, —, SR) + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(4, [(0, 2)], SP) + rep (1, 2, 2, 2, 3, 3) |orbit| = 36 appears in 3 pair(s): + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(6, [(0, 2), (3, 5)], SP) + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(3, —, SR) + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(4, [(0, 2)], SP) + rep (1, 2, 3, 1, 3, 2) |orbit| = 18 appears in 3 pair(s): + γ=6 T_1=(6, [(0, 3)], SP) T_2=(6, [(0, 3)], SP) + γ=6 T_1=(6, [(0, 3)], SP) T_2=(6, [(0, 2), (3, 5)], SP) + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(4, [(0, 2)], SP) + rep (1, 2, 3, 2, 3, 1) |orbit| = 36 appears in 3 pair(s): + γ=6 T_1=(6, [(0, 3)], SP) T_2=(6, [(0, 3)], SP) + γ=6 T_1=(6, [(0, 3)], SP) T_2=(6, [(0, 2), (3, 5)], SP) + γ=6 T_1=(6, [(0, 3)], SP) T_2=(3, —, SR) + rep (1, 1, 2) |orbit| = 18 appears in 2 pair(s): + γ=3 T_1=(3, —, SR) T_2=(3, —, SR) + γ=3 T_1=(3, —, SR) T_2=(4, [(0, 2)], SP) + rep (1, 1, 2, 2) |orbit| = 12 appears in 2 pair(s): + γ=4 T_1=(4, —, SR) T_2=(4, —, SR) + γ=4 T_1=(4, —, SR) T_2=(4, [(0, 2)], SP) + rep (1, 1, 2, 3) |orbit| = 24 appears in 2 pair(s): + γ=4 T_1=(4, —, SR) T_2=(4, —, SR) + γ=4 T_1=(4, —, SR) T_2=(4, [(0, 2)], SP) + rep (1, 2, 1, 1, 2, 2) |orbit| = 36 appears in 2 pair(s): + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(6, [(0, 2), (3, 5)], SP) + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(3, —, SR) + rep (1, 2, 1, 2, 1, 3) |orbit| = 36 appears in 2 pair(s): + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(6, [(0, 2), (3, 5)], SP) + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(3, —, SR) + rep (1, 2, 1, 2, 3, 3) |orbit| = 36 appears in 2 pair(s): + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(6, [(0, 2), (3, 5)], SP) + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(4, [(0, 2)], SP) + rep (1, 2, 1, 3, 2, 2) |orbit| = 36 appears in 2 pair(s): + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(6, [(0, 2), (3, 5)], SP) + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(3, —, SR) + rep (1, 2, 2, 1, 2, 3) |orbit| = 36 appears in 2 pair(s): + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(6, [(0, 2), (3, 5)], SP) + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(4, [(0, 2)], SP) + rep (1, 2, 2, 1, 3, 3) |orbit| = 18 appears in 2 pair(s): + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(6, [(0, 2), (3, 5)], SP) + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(4, [(0, 2)], SP) + rep (1, 2, 2, 3, 1) |orbit| = 30 appears in 2 pair(s): + γ=5 T_1=(5, [(0, 2)], SP) T_2=(5, [(0, 2)], SP) + γ=5 T_1=(5, [(0, 2)], SP) T_2=(5, [(0, 3)], SP) + rep (1, 2, 2, 3, 2, 1) |orbit| = 36 appears in 2 pair(s): + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(6, [(0, 2), (3, 5)], SP) + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(4, [(0, 2)], SP) + rep (1, 2, 3, 1, 2, 3) |orbit| = 6 appears in 2 pair(s): + γ=6 T_1=(6, [(0, 3)], SP) T_2=(6, [(0, 3)], SP) + γ=6 T_1=(6, [(0, 3)], SP) T_2=(6, [(0, 2), (3, 5)], SP) + rep (1, 2, 3, 3, 2, 1) |orbit| = 18 appears in 2 pair(s): + γ=6 T_1=(6, [(0, 3)], SP) T_2=(6, [(0, 3)], SP) + γ=6 T_1=(6, [(0, 3)], SP) T_2=(6, [(0, 2), (3, 5)], SP) + rep (1, 1, 1) |orbit| = 3 appears in 1 pair(s): + γ=3 T_1=(3, —, SR) T_2=(3, —, SR) + rep (1, 1, 1, 1) |orbit| = 3 appears in 1 pair(s): + γ=4 T_1=(4, —, SR) T_2=(4, —, SR) + rep (1, 1, 1, 2) |orbit| = 24 appears in 1 pair(s): + γ=4 T_1=(4, —, SR) T_2=(4, —, SR) + rep (1, 1, 2, 2, 3) |orbit| = 30 appears in 1 pair(s): + γ=5 T_1=(5, [(0, 2)], SR) T_2=(5, [(0, 2)], SP) + rep (1, 1, 2, 3, 2) |orbit| = 30 appears in 1 pair(s): + γ=5 T_1=(5, [(0, 2)], SR) T_2=(5, [(0, 2)], SP) + rep (1, 2, 1, 1, 2, 3) |orbit| = 36 appears in 1 pair(s): + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(6, [(0, 2), (3, 5)], SP) + rep (1, 2, 1, 2, 3, 2) |orbit| = 36 appears in 1 pair(s): + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(4, [(0, 2)], SP) + rep (1, 2, 1, 3, 2) |orbit| = 30 appears in 1 pair(s): + γ=5 T_1=(5, [(0, 2)], SP) T_2=(3, —, SR) + rep (1, 2, 1, 3, 2, 3) |orbit| = 18 appears in 1 pair(s): + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(6, [(0, 2), (3, 5)], SP) + rep (1, 2, 2, 1, 2, 1) |orbit| = 36 appears in 1 pair(s): + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(4, [(0, 2)], SP) + rep (1, 2, 2, 2, 1, 1) |orbit| = 18 appears in 1 pair(s): + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(6, [(0, 2), (3, 5)], SP) + rep (1, 2, 2, 2, 1, 3) |orbit| = 36 appears in 1 pair(s): + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(6, [(0, 2), (3, 5)], SP) + rep (1, 2, 2, 3, 1, 3) |orbit| = 36 appears in 1 pair(s): + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(3, —, SR) + rep (1, 2, 2, 3, 2, 3) |orbit| = 36 appears in 1 pair(s): + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(4, [(0, 2)], SP) + rep (1, 2, 3, 1, 2) |orbit| = 30 appears in 1 pair(s): + γ=5 T_1=(5, [(0, 3)], SP) T_2=(5, [(0, 3)], SP) + rep (1, 2, 3, 2, 1) |orbit| = 30 appears in 1 pair(s): + γ=5 T_1=(5, [(0, 3)], SP) T_2=(5, [(0, 3)], SP) + rep (1, 2, 3, 3, 1) |orbit| = 30 appears in 1 pair(s): + γ=5 T_1=(5, [(0, 3)], SP) T_2=(5, [(0, 3)], SP) + rep (1, 2, 3, 3, 2, 2) |orbit| = 36 appears in 1 pair(s): + γ=6 T_1=(6, [(0, 2), (3, 5)], SP) T_2=(3, —, SR) + +=== Rainbow pattern check === +Found 1 canonical reps matching (a,b,c,b,c,a) pattern: + (1, 2, 3, 2, 3, 1) appears in 3 pair(s) diff --git a/papers/coloring_nested_tire_graphs/notes/orbit_decomposition.aux b/papers/coloring_nested_tire_graphs/notes/orbit_decomposition.aux new file mode 100644 index 0000000..1433a06 --- /dev/null +++ b/papers/coloring_nested_tire_graphs/notes/orbit_decomposition.aux @@ -0,0 +1,6 @@ +\relax +\newlabel{obs:s3-closed}{{}{1}} +\newlabel{obs:orbit-sizes}{{}{1}} +\newlabel{obs:rainbow-source}{{}{2}} +\newlabel{obs:universal-orbits}{{}{2}} +\gdef \@abspage@last{3} diff --git a/papers/coloring_nested_tire_graphs/notes/orbit_decomposition.log b/papers/coloring_nested_tire_graphs/notes/orbit_decomposition.log new file mode 100644 index 0000000..c3e3616 --- /dev/null +++ b/papers/coloring_nested_tire_graphs/notes/orbit_decomposition.log @@ -0,0 +1,332 @@ +This is pdfTeX, Version 3.141592653-2.6-1.40.24 (TeX Live 2022) (preloaded format=pdflatex 2022.10.5) 26 MAY 2026 03:18 +entering extended mode + restricted \write18 enabled. + %&-line parsing enabled. +**orbit_decomposition.tex +(./orbit_decomposition.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 +) +No file orbit_decomposition.aux. +\openout1 = `orbit_decomposition.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: +* layout: +* layoutoffset:(h,v)=(0.0pt,0.0pt) +* modes: +* h-part:(L,W,R)=(72.26999pt, 469.75502pt, 72.26999pt) +* v-part:(T,H,B)=(72.26999pt, 650.43001pt, 72.26999pt) +* \paperwidth=614.295pt +* \paperheight=794.96999pt +* \textwidth=469.75502pt +* \textheight=650.43001pt +* \oddsidemargin=0.0pt +* \evensidemargin=0.0pt +* \topmargin=-37.0pt +* \headheight=12.0pt +* \headsep=25.0pt +* \topskip=11.0pt +* \footskip=30.0pt +* \marginparwidth=59.0pt +* \marginparsep=10.0pt +* \columnsep=10.0pt +* \skip\footins=10.0pt plus 4.0pt minus 2.0pt +* \hoffset=0.0pt +* \voffset=0.0pt +* \mag=1000 +* \@twocolumnfalse +* \@twosidefalse +* \@mparswitchfalse +* \@reversemarginfalse +* (1in=72.27pt=25.4mm, 1cm=28.453pt) + +Package caption Info: Begin \AtBeginDocument code. +Package caption Info: End \AtBeginDocument code. +LaTeX Font Info: Trying to load font information for U+msa on input line 17. + +(/usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/umsa.fd +File: umsa.fd 2013/01/14 v3.01 AMS symbols A +) +LaTeX Font Info: Trying to load font information for U+msb on input line 17. + + +(/usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/umsb.fd +File: umsb.fd 2013/01/14 v3.01 AMS symbols B +) +Overfull \hbox (72.00633pt too wide) in paragraph at lines 29--31 +[]\OT1/cmr/m/n/10.95 Script: \OT1/cmtt/m/n/10.95 experiments/orbit[]decompositi +on.py\OT1/cmr/m/n/10.95 ; raw out-put: \OT1/cmtt/m/n/10.95 experiments/orbit[]d +ecomposition[]data.txt\OT1/cmr/m/n/10.95 . + [] + +[1 + +{/usr/local/texlive/2022/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] + +LaTeX Warning: Reference `obs:s3-closed' on page 2 undefined on input line 130. + + +[2] [3] (./orbit_decomposition.aux) + +LaTeX Warning: There were undefined references. + + +LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right. + + ) +Here is how much of TeX's memory you used: + 4573 strings out of 478268 + 74153 string characters out of 5846347 + 373398 words of memory out of 5000000 + 22758 multiletter control sequences out of 15000+600000 + 481067 words of font info for 74 fonts, out of 8000000 for 9000 + 1141 hyphenation exceptions out of 8191 + 55i,8n,63p,253b,198s stack positions out of 10000i,1000n,20000p,200000b,200000s +{/usr/local/texlive/2022/texmf-dist/fonts/enc/dvips/cm-super/cm-super-ts1.enc +} +< +/usr/local/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmex10.pfb> +Output written on orbit_decomposition.pdf (3 pages, 166513 bytes). +PDF statistics: + 85 PDF objects out of 1000 (max. 8388607) + 51 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) + diff --git a/papers/coloring_nested_tire_graphs/notes/orbit_decomposition.pdf b/papers/coloring_nested_tire_graphs/notes/orbit_decomposition.pdf new file mode 100644 index 0000000..7d0e068 Binary files /dev/null and b/papers/coloring_nested_tire_graphs/notes/orbit_decomposition.pdf differ diff --git a/papers/coloring_nested_tire_graphs/notes/orbit_decomposition.tex b/papers/coloring_nested_tire_graphs/notes/orbit_decomposition.tex new file mode 100644 index 0000000..5ce8607 --- /dev/null +++ b/papers/coloring_nested_tire_graphs/notes/orbit_decomposition.tex @@ -0,0 +1,168 @@ +\documentclass[11pt]{article} +\usepackage{amsmath,amssymb,amsthm} +\usepackage{graphicx} +\usepackage{geometry} +\usepackage{booktabs} +\usepackage{caption} +\geometry{margin=1in} + +\title{$S_3$-orbit decomposition of $S_1 \cap S_2$\\ + Do structurally different tires share the same canonical orbits?} +\author{} +\date{} + +\newtheorem*{obs}{Observation} + +\begin{document} +\maketitle + +\section*{The question} + +Step~2 (\texttt{tire\_fiber\_step2.tex}) reported $|S_1 \cap S_2|$ for +$23$ adjacent-tire pairs and found all $23$ compatible. A follow-up +question is whether structurally different $(T_1, T_2)$ pairs that +share a cycle-length $|\gamma| = k$ have intersections with the +\emph{same orbit structure} --- i.e.\ whether a canonical pattern like +the rainbow $(a,b,c,b,c,a)$ persists when we vary $T_1$ and $T_2$, or +whether each pair gives its own pair-specific orbit. + +Script: \texttt{experiments/orbit\_decomposition.py}; raw output: +\texttt{experiments/orbit\_decomposition\_data.txt}. + +\section*{$S_3$-closure: a structural sanity check} + +Permuting the three colors is a symmetry of proper edge $3$-coloring, +so for any fixed tire $T$, both $S_1$ and $S_2$ must be closed under +the diagonal $S_3$ action on $\{1,2,3\}^k$. Hence so is $S_1 \cap +S_2$. + +\begin{obs}[$S_3$-closure] +\label{obs:s3-closed} +In every one of the $23$ pairs, $S_1 \cap S_2$ is closed under the +$S_3$ color action. This is structural rather than coincidental. +\end{obs} + +\section*{Orbit size distribution} + +For $\sigma \in \{1,2,3\}^k$ with $3$ distinct color-values, the $S_3$ +orbit has size exactly $6$. For $\sigma$ using $2$ distinct color values, +the orbit has size $6$ (since $S_3$ acts on the $\binom{3}{2}\cdot 2$ ways +of placing them). For $\sigma$ constant (one color), the orbit has size $3$. + +\begin{obs}[Uniform orbit sizes] +\label{obs:orbit-sizes} +Across all $23$ pairs, every $S_3$-orbit in $S_1 \cap S_2$ has size +exactly $6$, with one single exception: the constant orbit +$\{(1,\dots,1), (2,\dots,2), (3,\dots,3)\}$ of size $3$, which +appears only in the case $\gamma = 4$, $T_1 = T_2 = (4, -, \mathrm{SR})$. +\end{obs} + +So intersection sizes are essentially $6 \cdot (\text{number of orbits})$ +in all but one case. + +\section*{The rainbow orbit reappears across structurally different pairs} + +Combining $S_3$ color action with cyclic rotation of $\gamma$ gives a +larger symmetry group; the combined orbit of $(1,2,3,2,3,1)$ has size +$36$. This single combined orbit appears in three different $(T_1, T_2)$ +pairs at $\gamma = 6$: + +\begin{center} +\begin{tabular}{l l l} +\toprule +$\gamma$ & $T_1$ & $T_2$ \\ +\midrule +$6$ & $(6, (0,3), \mathrm{SP})$ & $(6, (0,3), \mathrm{SP})$ \\ +$6$ & $(6, (0,3), \mathrm{SP})$ & $(6, (0,2)(3,5), \mathrm{SP})$ \\ +$6$ & $(6, (0,3), \mathrm{SP})$ & $(3, -, \mathrm{SR})$ \\ +\bottomrule +\end{tabular} +\end{center} + +All three have $T_1 = (6, (0,3), \mathrm{SP})$ --- the side with the +\emph{antipodal} chord. The three different $T_2$ structures range +from another antipodal-chord SP tire to a chord-less SP tire to a +chordless SR tire. In every case the rainbow orbit is part of (or +all of) the intersection. + +\begin{obs}[Rainbow orbit is $T_1$-driven at $\gamma=6$] +\label{obs:rainbow-source} +At $\gamma=6$, the rainbow combined orbit $(a,b,c,b,c,a)$ appears +\emph{iff} $T_1 = (6, (0,3), \mathrm{SP})$ --- the antipodal-chord +SP tire. The two-chord SP tire $T_1 = (6, (0,2)(3,5), \mathrm{SP})$ +yields different orbits, never the rainbow. So the rainbow pattern +is associated with antipodal $O$-chord topology rather than with the +pair $(T_1, T_2)$ as a whole. +\end{obs} + +\section*{Most-shared canonical orbits} + +Other canonical combined orbits appear across many structurally +different pairs. Top entries: + +\begin{center} +\begin{tabular}{r l r l} +\toprule +$|\gamma|$ & canonical rep & \# distinct pairs & combined-orbit size \\ +\midrule +$4$ & $(1,2,1,3)$ & $7$ & $12$ \\ +$4$ & $(1,2,1,2)$ & $6$ & $6$ \\ +$4$ & $(1,2,2,1)$ & $5$ & $12$ \\ +$4$ & $(1,2,2,3)$ & $5$ & $24$ \\ +$3$ & $(1,2,3)$ & $4$ & $6$ \\ +$5$ & $(1,2,1,2,3)$ & $3$ & $30$ \\ +$6$ & $(1,2,3,2,3,1)$ (rainbow) & $3$ & $36$ \\ +\bottomrule +\end{tabular} +\end{center} + +\begin{obs}[Universal orbits dominate] +\label{obs:universal-orbits} +At each cycle length $k$, the most-shared canonical orbit appears in +roughly $30$--$40\%$ of tested pairs at that $k$. These ``universal'' +orbits are typically of the form $(a, b, a, c)$ or $(a, b, a, b)$ at +$\gamma = 4$, $(a, b, c)$ at $\gamma = 3$, etc. They survive across +chord placements and across SR/SP model choices. +\end{obs} + +\section*{What this means for chain pigeonhole} + +If $S_1 \cap S_2$ is always $S_3$-closed (Obs.~\ref{obs:s3-closed}) +and always contains at least one full $S_3$-orbit (which, given +size $6$ for non-constant orbits, is essentially the same as saying +$|S_1 \cap S_2| > 0$), then \emph{chain pigeonhole at a single shared +cycle is not just a counting fact but a structural one}: the +intersection respects color symmetry, never collapses to a thin +exotic subset, and contains canonical orbits that recur across +structurally varied pairs. + +This is a real upgrade on the step-$2$ data: +\begin{itemize} + \item Step $2$ only reported $|S_1 \cap S_2| > 0$; it could in + principle be a single weird configuration with no symmetry. + \item The orbit decomposition shows the intersections always have + the full $S_3$-symmetric shape, with at least one orbit of + size $6$ (or $3$ in the trivial case). + \item Several canonical orbits recur across structurally different + pairs --- evidence that chain compatibility is detecting + something structural about $\gamma$ and the tire-pair + topology, not a coincidence of one specific configuration. +\end{itemize} + +\section*{Caveats} + +\begin{enumerate} + \item Still empirical for $k \le 6$, chord counts $\le 2$, and the + $23$ pairs from step~$2$. + \item ``Same combined orbit'' is taken modulo $S_3 \times C_k$ (color + permutation $\times$ cyclic rotation of $\gamma$). Reflection + of $\gamma$ is \emph{not} quotiented out --- some orbits would + coincide if it were. + \item The rainbow orbit's persistence is tied to the antipodal + chord; a structural proof would need to show that the + antipodal-chord $\mathrm{SP}$ tire's projection support + $\pi_D$ always contains the rainbow orbit, independently of + the outer tire. +\end{enumerate} + +\end{document}