Skip to content

Ask a product with a quotient factor over that quotient's divisor in a one-sided limit - #2384

Merged
Rafael-SOWNet merged 2 commits into
masterfrom
feature/a-product-with-a-quotient-in-a-limit
Nov 7, 2026
Merged

Rafael-SOWNet merged 2 commits into
masterfrom
feature/a-product-with-a-quotient-in-a-limit

Conversation

@Rafael-SOWNet

Copy link
Copy Markdown
Member

From one side, a product whose factors tend to 0 and to an infinity, one of them a quotient, is now asked as that quotient with the other factor in its dividend, its whole limit once.

Read as a product nothing settled the form, and the rewriting solvers took x * (ln(x) / ln(2 + x)) at 0+ through l'Hôpital's rule for longer than any caller waits. Three samples of the hung probe put the time in ApplylHopitalRuleImpl's Simplify, reached through SolveByRewritingTowardsInfinity and SolveAsDifferenceOfInfinities. x ln(x) / ln(2 + x), the same thing over one divisor, is 0 at once.

Not while the sides of a two-sided limit are compared, as powers already are not (MayReadAPowerThroughItsExponent). Two-sided, x * ln(x) / ln(2 + x) at 0 is NaN, because its left side is complex. Regrouped during the comparison, the same product written with brackets came back 0. Two-sided answers do not move.

Measured on master → this branch, one probe each:

master branch
x * log(2 + x, x) at 0+ did not finish in 30 s 0, 0.24 s
x * (ln(x) / ln(2 + x)) at 0+ did not finish in 25 s 0, 0.26 s
x * log(2 + x, x) at 0- 0, 11.8 s 0, 0.26 s
x * (ln(-x) / ln(2 + x)) at 0- 0, 11.7 s 0, 0.25 s
x * log(2 + x, x^3) at 0+ 0, 1.15 s 0, 0.26 s
x * log(2 + x, x) at 0, two-sided NaN NaN

limitcheck A/B against master (DEPTH=3, the usual seeds): five answers gained, none lost, none wrong.

master branch
sin(ln(x) * x) at 0+ unevaluated 0
floor(x * log(pi, x)) at 0+ unevaluated -1
sgn(sin(x) * log(pi, x)) at 0+ unevaluated -1
arcsin(-x * log(-1, x)) at 0- and 0+ unevaluated 0

One row moved from a decline to a timeout at the harness's 5 s cap: (cos(x) * sqrt(x))^arctan(tanh(x)) at 0+. Alone it declines on both builds in 7.1–7.7 s, so the move is jitter. Each new answer is in BREAKING-CHANGES.md, measured on 2.6.0, which leaves all of them unevaluated.

The full suite (19,093), the wrapper suites, AOT and the ten harnesses pass.

Found by limitcheck at DEPTH=3, SEED=59, under the logarithm-of-a-power change (next PR). That change writes ln(x^3) / ln(2 + x) as 3 ln(x) / ln(2 + x) and so ran into this. No issue was filed.

🤖 Generated with Claude Code

Rafael-SOWNet and others added 2 commits November 7, 2026 20:39
…a limit

From one side, a product whose factors tend to 0 and to an infinity, one of
them a quotient, is asked as that quotient with the other factor in its
dividend, its whole limit once. Read as a product nothing settled the form,
and the rewriting solvers took x * (ln(x) / ln(2 + x)) at 0 from the right
through l'Hopital's rule for longer than any caller waits, where
x ln(x) / ln(2 + x) is 0 at once.

Not while the sides of a two-sided limit are compared, as powers already
are not: x * ln(x) / ln(2 + x) at 0 is NaN two-sided, its left side being
complex, and the same product written with brackets would have come back 0.

Measured on master -> this branch, one probe each:
  x * log(2 + x, x) at 0+              timeout (30 s) -> 0, 0.24 s
  x * log(2 + x, x) at 0-              0 in 11.8 s -> 0.26 s
  x * (ln(-x) / ln(2 + x)) at 0-       0 in 11.7 s -> 0.25 s
  x * log(2 + x, x^3) at 0+            0 in 1.15 s -> 0.26 s
  (x - 1) * (ln(x - 1) / ln(x + 1)) at 1+   0 in 0.69 s -> 0.27 s
Two-sided answers are unchanged (x * log(2 + x, x) at 0 is NaN on both).

Found by limitcheck at DEPTH=3, SEED=59, under the logarithm-of-a-power
change, which writes ln(x^3) / ln(2 + x) as 3 ln(x) / ln(2 + x) and so
reached this. No issue was filed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Rafael-SOWNet Rafael-SOWNet added this to the 2.7.0 milestone Nov 7, 2026
@codecov

codecov Bot commented Nov 7, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 94.73684% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 86.78%. Comparing base (0f2f41d) to head (5a25201).

Files with missing lines Patch % Lines
...nctions/Continuous/Limits/Solvers/Limit.Classes.cs 94.44% 0 Missing and 1 partial ⚠️
Additional details and impacted files

Impacted file tree graph

@@           Coverage Diff           @@
##           master    #2384   +/-   ##
=======================================
  Coverage   86.78%   86.78%           
=======================================
  Files         312      312           
  Lines       69110    69129   +19     
  Branches    20156    20159    +3     
=======================================
+ Hits        59978    59995   +17     
- Misses       4916     4917    +1     
- Partials     4216     4217    +1     
Flag Coverage Δ
cpp 37.77% <ø> (ø)
csharp 87.32% <94.73%> (+<0.01%) ⬆️
fsharp 32.97% <ø> (ø)
interactive 40.72% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
...ns/Continuous/Limits/Solvers/Solvers.Definition.cs 90.37% <100.00%> (+0.04%) ⬆️
...nctions/Continuous/Limits/Solvers/Limit.Classes.cs 74.93% <94.44%> (+0.89%) ⬆️

... and 4 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@Rafael-SOWNet
Rafael-SOWNet merged commit 9d499b8 into master Nov 7, 2026
35 checks passed
@github-project-automation github-project-automation Bot moved this from Todo to Done in AngouriMath Nov 7, 2026
@Rafael-SOWNet
Rafael-SOWNet deleted the feature/a-product-with-a-quotient-in-a-limit branch November 7, 2026 22:48
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