84600dadd3
NEW: chain_dp_joint.py — chain DP tracking full per-tire colorings, edge-tuple-based parent/child sharing, and ground-truth comparison against brute-force G' edge-coloring enumeration. KEY EMPIRICAL FINDING (4th issue in chain_half_analysis): When H_d is a tree (no internal cycles), the high-side cut tire forest is EMPTY. The single H_d face is forced (by the level-set lemma) to be entirely low-side or high-side; for a tree containing the pendants, it's low-side. Hence high-side forest has 0 tires. This happens at dodecahedron cut #0 side 0 (|S_0|=4): - depths {0: 2, 1: 3}, |H|=6, |E(H)|=5 - H_1 is a tree, 1 face of length 6 (= low-side) - No high-side cut tires - DP gives R_dp=0, but ground truth R=36 DP correctly produces non-empty output on side 1 (where H_1 has 2 faces, one high-side), but the high-side framework's coverage is incomplete for thin (small |S_i|) cuts. This is a STRUCTURAL gap, not a code bug. The path forward suggested in chain_half_analysis.tex: introduce a "boundary cut tire" T_0 representing the low-side face + its pendants, so the chain DP runs from leaves through T_0 to the cut. Compounding with prior gaps: (1) cut tires aren't always spoke-only (branched H_d faces) (2) OUT-only projection loses S_3 orbit (3) heuristic parent-finding (vertex overlap) (4) tree H_d → empty high-side forest (this commit) Net: the loose conjecture's chain half is genuinely open and requires framework extension before the DP can be tested cleanly. S_3 equivariance and high-side forest structure are the proven pieces. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>