Normative rule (canonical).
Powers dominate logs. Classify lexicographically by exponents: compare Delta_p first, then Delta_q, then any deeper modifiers (r, ...).
Definition.
L(x) := log( 1 / |x - x0| ) # natural log implied
# L(x) -> +inf as x -> x0 from either side
Asymptotic forms. Assume nonzero real c_f, c_g and real exponents p_*, q_*:
f(x) ~ c_f * |x - x0|^(p_f) * L(x)^(q_f)
g(x) ~ c_g * |x - x0|^(p_g) * L(x)^(q_g)
Delta_p := p_f - p_g
Delta_q := q_f - q_g
f(x)/g(x) ~ (c_f/c_g) * |x - x0|^(Delta_p) * L(x)^(Delta_q)
Near-tie thresholds (mandatory). Declare positive thresholds to stabilize decisions when exponents nearly tie.
T_p > 0, T_q > 0
Delta_p_eff := 0 if |Delta_p| <= T_p else Delta_p
Delta_q_eff := 0 if |Delta_q| <= T_q else Delta_q
Flags: EDGE_P if |Delta_p| <= T_p
EDGE_Q if (Delta_p_eff = 0 and |Delta_q| <= T_q)
Lite defaults: T_p = 1e-3, T_q = 1e-3 # override per domain if needed
Classification (lexicographic on (Delta_p_eff, Delta_q_eff)).
s := sign(c_f / c_g)
if Delta_p_eff > 0 -> < 0 , a_div >
if Delta_p_eff < 0 -> < s * inf , a_div >
if Delta_p_eff = 0:
if Delta_q_eff > 0 -> < s * inf , a_div >
if Delta_q_eff < 0 -> < 0 , a_div >
if Delta_q_eff = 0 -> < c_f / c_g , a_div > # annotate: EDGE_P, EDGE_Q
Remarks and scope.
- Sidedness / oscillation are handled via flags
SIDED,OSC. The magnitude above is the headline;a_divtravels as metadata. - Degenerate constants: if
c_f = 0orc_g = 0, drop to the next nonvanishing order before applying this rule (or useNOFIT / MULTIif unresolved). - Sign convention: choose
+infor-infpersign(c_f / c_g).
Why powers beat logs (informal).
For any epsilon > 0 and any fixed real Q:
|x - x0|^epsilon * L(x)^Q -> 0 as x -> x0
# equivalently: L(x)^Q = o( |x - x0|^(-epsilon) )
# so any nonzero Delta_p_eff determines ZERO vs INF before Delta_q_eff matters
Extension to deeper modifiers.
If needed, extend the lexicographic vector to (p, q, r, ...) using
f(x) ~ c_f * |x - x0|^p * L(x)^q * (log L(x))^r * ...
and compare in that exact order, with the same near-tie treatment per component.
Division alignment reminder.
a_div := tanh( atanh(a_f) - atanh(a_g) ) # clamp before any atanh
Navigation
Prev: Formal Specification — 0/0 Rate Law (4)
Next: Model-Chooser (conservative, penalized) (4B)