The real crossStep uses PhaseVec.add (additive doubling: zᵢⱼ = zᵢ + zⱼ),
which grows until Q16_16 saturation. ContractedCrossStep fixes this by
replacing the merge with φ⁻¹ · (half · (p + q)), which contracts on the
diagonal: merge(z,z) = φ⁻¹ · z (exact under non-saturation).
Key results:
- half_mul_add_self_non_sat: half * (a + a) = a (exact Q16_16 identity
when a + a doesn't overflow)
- contractedPhaseMerge_diagonal_non_sat: merge contracts by φ⁻¹
- Jitter also contracted by φ⁻¹ to prevent saturation
- #eval witnesses confirm φ⁻¹ contraction and zero-state fixedness
Convergence theorems stated with proof sketches; full proofs require
Q16_16 inequality lemmas and well-founded induction (TODO).
Build: 3309 jobs, 0 errors