Skip to content

fix(cauchy): slow divergers truncate honestly — valve arms below cycle_cutoff_time and watches the loop floor - #355

Merged
ofloveandhate merged 1 commit into
bertiniteam:developfrom
ofloveandhate:fix/cauchy-zone-cutoff
Jul 16, 2026
Merged

fix(cauchy): slow divergers truncate honestly — valve arms below cycle_cutoff_time and watches the loop floor#355
ofloveandhate merged 1 commit into
bertiniteam:developfrom
ofloveandhate:fix/cauchy-zone-cutoff

Conversation

@ofloveandhate

Copy link
Copy Markdown
Contributor

Finishes the Cauchy divergent-path truncation arc: slowly-diverging paths (fractional-order blowup, e.g. x = t^(-1/2) from x²t−1) now truncate honestly at the security valve instead of crawling to the tracker's far-larger thresholds. Measured on a t^(-1/3) diverger before this work: ~117k extra steps over 3 more decades of |t| at up to 70 digits of precision.

Two composing pieces, each necessary and neither sufficient:

1. Arm the valve below cycle_cutoff_time (B1's CycleTimeCutoff semantics, manual E.5.9)

A slow diverger carries significant pole mass at every radius, so it is never pole-mass-in-zone and the security valve never armed — the divergence bailout was unreachable for exactly the paths that need it. Below the cutoff the valve now arms unconditionally. Applied to the valve ONLY, deliberately not to acceptance: forcing the zone there would re-open the junk-success hole (a Laurent pole's stationary finite mean would be accepted once below the cutoff); pole junk still runs to its honest non-Success terminal. A genuinely convergent path's mean has long stabilized by the cutoff, so arming cannot reintroduce the cyclic-6 false truncations.

2. The valve watches the loop FLOOR, not just the mean

Arming alone was proven insufficient by the (deliberately red) regression test: the valve watched the Cauchy MEAN, and around a closed loop the branches of t^(-p/q) cancel — the mean sits near 0 while every loop sample has norm ~r^(-p/q). Mean-watching is structurally blind to fractional-pole divergers.

The watched quantity is now the stronger of the extrapolated endpoint's dehomogenized norm (still the earliest signal for a clean infinite endpoint) and the loop floor — the minimum dehomogenized norm over the Cauchy loop samples. The floor exceeds max_norm only when the entire loop is beyond it. This is safe where watching samples directly was not (any single sample transiently spiking truncated finite cyclic-6 paths, 156 → 153, which is why sample-watching was removed): a transient spike lifts the max, never the min.

Tests

  • slow_diverger_hits_security_max_norm_below_cycle_cutoff (previously red by design): the x²t−1 diverger now returns SecurityMaxNormReached promptly instead of dying at the tracker's threshold after ~12 decades of |t|.
  • Full endgame suite (412 cases) and the complete ctest battery green — cyclic-6 keeps all its solutions.

🤖 Generated with Claude Code

…le_cutoff_time and watches the loop floor

Two composing pieces, each necessary, neither sufficient alone:

1. Arm the security valve below cycle_cutoff_time (B1 CycleTimeCutoff
   semantics, manual E.5.9).  A slowly-diverging path (fractional-order
   blowup) carries significant pole mass at every radius, so it is never
   pole-mass-in-zone and the valve never armed -- it crawled to the
   tracker's far-larger truncation threshold (measured: a t^(-1/3)
   diverger took ~117k extra steps over 3 more decades of |t| at up to 70
   digits).  Valve ONLY, deliberately not acceptance: forcing the zone
   there would re-open the junk-success hole (a Laurent pole's stationary
   finite mean would be accepted below the cutoff).

2. The valve watches the STRONGER of the endpoint norm and the loop FLOOR
   (min dehomogenized norm over the Cauchy loop samples).  Arming alone
   was proven insufficient by the regression test: the mean is
   structurally blind to fractional-pole divergers -- around a closed
   loop the branches of t^(-p/q) cancel, so the mean sits near 0 while
   every sample is at ~r^(-p/q).  The floor exceeds max_norm only when
   the ENTIRE loop is beyond it, so a transient single-sample spike (the
   cyclic-6 hazard that forbade watching samples directly, 156 -> 153)
   cannot lift it.

Named regression test: the x^2*t - 1 diverger (x = t^(-1/2), exactly the
branch-cancellation case) returns SecurityMaxNormReached promptly instead
of dying at the tracker's threshold ~12 decades of |t| later.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@ofloveandhate
ofloveandhate merged commit 3c033ed into bertiniteam:develop Jul 16, 2026
13 of 22 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant