Classifying 0/0 Limits — Acceptance Tests — Sensitivity to estimation error (6A)

Purpose. Quantify how stable the headline class (ZERO / FINITE / INF±) and the alignment a_div are under reasonable changes in windows, thresholds, mappings, and model choices. Use this as a quick stress test before publishing results.

Guards and tie thresholds (declare once).

eps_a = 1e-6
eps_w = 1e-12
R2_min = 0.85
delta_score = 2.0
K in {3..6}                  # tail windows (>=3)
T_p = 1e-3, T_q = 1e-3       # near-tie defaults for (p,q)

(Clamp before any atanh: a := clamp(a, -1+eps_a, +1-eps_a).)

Stability sweeps (run each; record outcomes).

S1) Radii grid sweep (window geometry).

R1: r_k = r0 * 10^(-0.2*k),  k=0..K'
R2: r_k = r0 * 2^(-k),       k=0..K'
R3: r_k = r0 * 3^(-k),       k=0..K'
For each grid: re-fit (p,q) and classify via 4/4A. Record class and DIR (if INF).

S2) Tail length sweep (K).

Repeat S1 with K in {3,4,5,6}; recompute tail stats and class.

S3) Tie-threshold sweep.

T_p in {0.03, 0.05, 0.07}
T_q in {0.07, 0.10, 0.15}
Re-run lexicographic decision on (Delta_p_eff, Delta_q_eff).

S4) Alignment mapping + prior sweep (metadata robustness).

Mappings:
  linear:   a := 2*R2 - 1
  contrast: a := tanh( c*(R2 - 0.5) ),  c in {0.5, 1.0, 2.0}
Reference prior (if applicable): a_g_ref in {+0.60, +0.80, +0.90}
Compute a_div = tanh(atanh(a_f) - atanh(a_g)) each time.
The headline class must not change; only a_div should move (ideally within same band).

S5) Model-chooser sensitivity.

Compare AIC vs BIC; vary delta_score in {1.0, 2.0, 4.0}.
If essential scans are enabled: r_grid in {{0.5,1.0,1.5}, {0.75,1.25}}.
If winning family flips class -> set REG = MULTI and add EDGE(model).

S6) Bootstrap over samples (if data, not purely symbolic).

Within innermost windows, resample paired (x,f,g) with replacement, B = 200.
For each bootstrap: classify and compute a_div. Summarize stability (see metrics).

S7) Left/right isolation (sided robustness).

Run S1..S6 separately on x<x0 and x>x0.
If classes or DIR differ -> REG = SIDED.

S8) Numerical guard sweep.

eps_a in {1e-6, 1e-7, 1e-5}
eps_w in {1e-12, 1e-10, 1e-8}
Ensure |a_div| < 1 - eps_a always; pooling/printing must be unaffected.

Robustness metrics (report).

class_stability        = % runs with same headline class (ZERO/FINITE/INF)
dir_stability          = % INF runs with same DIR (+/-)           # only if INF
Delta_p_sign_agree     = % runs with same sign(Delta_p)
Delta_q_sign_agree     = % runs with same sign(Delta_q)           # when |Delta_p| <= T_p
a_div_median           = median(a_div across runs)
a_div_IQR              = IQR(a_div across runs)
band_histogram         = counts over {A++, A+, A0, A-, A--} from a_div

Decision thresholds (publish).

Stable:      class_stability >= 95%   (and if INF: dir_stability >= 99%)
Borderline:  85% <= class_stability < 95%  -> add EDGE(p)/EDGE(q) as applicable; consider EDGE(model)
Unstable:    class_stability < 85%    -> REG = MULTI (or REG = OSC if AT6 triggers); use conservative headline ZERO < FINITE < INF

Print cues.

Optionally append STAB[xx%] at end of SSMS one-liner.
Only show EDGE(q) if the log tie-break actually ran.
Never print |a_div| >= 1; clamps precede all atanh.

Minimal pseudo (driver loop).

results = []
for grid in {R1,R2,R3}:
  for K in {3,4,5,6}:
    for (T_p,T_q) in {(0.03,0.07),(0.05,0.10),(0.07,0.15)}:
      for mapping in {linear, contrast(c=0.5), contrast(c=1.0), contrast(c=2.0)}:
        for a_g_ref in {0.60,0.80,0.90}:
          run fit -> (Delta_p_eff, Delta_q_eff), class, DIR?, a_div
          results.append(class, DIR, sign(Delta_p_eff), sign(Delta_q_eff), a_div)
compute metrics; set REG/badges per thresholds; print one-liner + optional STAB[%].


Navigation
Prev: Classifying 0over0 Limits — Acceptance Tests (quick pass/fail) (6)
Next: Classifying 0over0 Limits — Acceptance Tests — Operational diagnostics and registry (ties, flags, print grammar) (6B)