Skip to content

Ask an exponential of the reciprocal of a linear over another linear in u = 1/(c + d x) first - #2010

Merged
Rafael-SOWNet merged 1 commit into
masterfrom
ask-an-exponential-of-a-reciprocal-over-another-linear-first
Oct 21, 2026
Merged

Rafael-SOWNet merged 1 commit into
masterfrom
ask-an-exponential-of-a-reciprocal-over-another-linear-first

Conversation

@Rafael-SOWNet

Copy link
Copy Markdown
Member

Part of #233.

#1950's SolveAnExponentialInTheReciprocalOfALinear answers F^(e + f (a + b x)/(c + d x))/(g + h x)^k and its kin in a few megabytes. But it sits near the end of the dispatcher, and the roughly 140 routes ahead of it spent seconds and gigabytes declining. This PR adds two rules early in the dispatcher.

SolveAnExponentialInTheReciprocalOfALinearOverAnotherLinear, right after SolveAGaussianInAReciprocal, calls the existing rule early. It does so only when the exponent is linear in u = 1/(c + d x) and a linear below the bar has a slope in u, d g - c h, that is not zero by value.

SolveAnElementaryMomentOfAnExponentialInAPowerOfTheReciprocal answers F^(A + B/L^k)/L^n for k from 2 to 8 and n - 1 a positive multiple of k. Those are the elementary cases: under w = u^k they are a polynomial times an exponential.

  • The power below the bar reaches the dispatcher written monic, (c/d + x)^n.
  • The shared reader took c/d + x for another linear, with a slope in u that is zero only by value.
  • This rule decides that by value and asks the clean question itself.

Neither rule's question can be its own integrand again.

Two alternatives were measured and rejected:

  • Asking the general rule early for everything gained four more rows, but rows 145–150 and 620–622 grew 2–6× and erf rows went past the budget.
  • Fixing the hidden zero inside the shared reader lengthened 2.3:355/356 threefold.

Measured with the probe on all 650 rows of family 2, at master a567c8b:

  • 623 → 627 answered: 2.3:393, 394, 395, and 478, which is new at 1,800 characters;
  • none lost, no new wrong;
  • total 188 s / 104 GB → 89 s / 60 GB;
  • two answers respelled: 2.3:364, 166 → 74 characters, and 2.3:390, 70 → 74.

Chain against master a567c8b, with the harness at its current revision on both arms:

master this
pocket, family 2 whole + every 40th row elsewhere (1,938) 1,922 solved, 7 timeouts 1,925 solved, 4 timeouts
allocation over the 1,922 solved on both 286.5 GB 219.9 GB
2.3:394, alone 22.8 s, 22.4 GB 0.5 s, 0.01 GB
2.3:395, alone timeout 60 ms
samples of families 0–8 — unchanged

No row's allocation grew past 1.3×, in the pocket or the samples. The two 3.2.1 rows that also moved have identical allocation on both arms.

ExponentialSubstitutionIntegralTest.ADilogarithmIsDeclinedAtOnce("x^2*sech(x)^2") failed locally at load 20 against its 20 s wall clock. It allocates 0.999 GB on master and this branch alike.

The 11 rows of 2.3:666–700 that the probe flags WRONG on master are not wrong answers. They are F^(f (a + b ln(c (d + e x)^n))^2), whose values at the probe's pins are 1e277 to 1e992, past where the evaluator saturates; intbench judges them Solved.

The BREAKING-CHANGES.md entry has 2.5.0's column measured.

🤖 Generated with Claude Code

https://claude.ai/code/session_012sonx8iAspMiwRwokT1Ura

…in u = 1/(c + d x) first

#1950's SolveAnExponentialInTheReciprocalOfALinear answers these in a few
megabytes, but sits near the end of the dispatcher, and the routes ahead of
it spent seconds and gigabytes declining. Two early rules:

SolveAnExponentialInTheReciprocalOfALinearOverAnotherLinear calls it right
after SolveAGaussianInAReciprocal when the exponent is linear in u and a
linear below the bar has a slope in u, d g - c h, that is not zero by value.

SolveAnElementaryMomentOfAnExponentialInAPowerOfTheReciprocal answers
F^(A + B/L^k)/L^n for k from 2 to 8 and n - 1 a positive multiple of k, the
elementary cases, which w = u^k makes a polynomial times an exponential. The
power below the bar reaches the dispatcher written monic, (c/d + x)^n, and
the shared reader took c/d + x for another linear with a slope in u that is
zero only by value; the rule decides that by value and asks the clean
question itself. Neither rule's question can be its own integrand again.

Probe, all 650 rows of family 2: 623 -> 627 answered (2.3:393, 394, 395,
478), none lost, no new wrong, total 188 s / 104 GB -> 89 s / 60 GB; two
answers respelled (2.3:364 166 -> 74, 2.3:390 70 -> 74 characters). Chain
pocket of 1,938 rows: 1,922 -> 1,925 solved, allocation over those solved on
both 286.5 -> 219.9 GB; samples unchanged; 2.3:394 22.8 s / 22.4 GB -> 0.5 s,
2.3:395 timeout -> 60 ms alone. No row's allocation grew past 1.3x.

Part of #233.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012sonx8iAspMiwRwokT1Ura
@Rafael-SOWNet Rafael-SOWNet added this to the 2.6.0 milestone Oct 21, 2026
@Rafael-SOWNet
Rafael-SOWNet merged commit b14655a into master Oct 21, 2026
34 checks passed
@github-project-automation github-project-automation Bot moved this from Todo to Done in AngouriMath Oct 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant