Skip to content

A quotient of logarithms tends to the logarithms of its arguments' limits - #2276

Merged
Rafael-SOWNet merged 2 commits into
masterfrom
a-quotient-of-logarithms-tends-to-the-logarithms-of-the-limits
Oct 31, 2026
Merged

Rafael-SOWNet merged 2 commits into
masterfrom
a-quotient-of-logarithms-tends-to-the-logarithms-of-the-limits

Conversation

@Rafael-SOWNet

Copy link
Copy Markdown
Member

limit(ln(y + x) / ln(z + x), x, 0) was y / z, where it is ln(y) / ln(z), while the same limit with numbers, ln(x + 2) / ln(x + 3), was ln(2) / ln(3). SolveAsLogarithmDivision builds the quotient of the limits' logarithms and returns it when it evaluates to a number. Its last arm, reached for a symbolic limit, returned the quotient of the limits themselves. It now returns the quotient of their logarithms.

Input 2.6.0 Now
limit(ln(y + x) / ln(z + x), x, 0) y / z ln(y) / ln(z)
limit(ln(a + 1/x) / ln(b + 1/x), x, +oo) a / b ln(a) / ln(b)
limit(ln(1 + x) / ln(y + x), x, 0) 1 / y 0 provided not ln(y) = 0

LogarithmsOfSymbolicLimitsTest: its six symbolic cases fail on master, and the numeric one passes on both. The suite (18,236), the trio, F#, AOT and the eight harnesses pass locally.

This touches the same function as #2275, in a different hunk.

Fixes #2271.

🤖 Generated with Claude Code

…mits

limit(ln(y + x) / ln(z + x), x, 0) was y / z, where it is
ln(y) / ln(z), while the same limit with numbers, ln(x + 2) / ln(x + 3),
was ln(2) / ln(3). SolveAsLogarithmDivision builds the quotient of the
limits' logarithms, and returns it where it evaluates to a number; its
last arm, reached for a symbolic limit, returned the quotient of the
limits themselves. It now returns the quotient of their logarithms.

LogarithmsOfSymbolicLimitsTest takes six symbolic quotients and one
numeric one; the six fail on master. ln(1 + x) / ln(y + x) at 0, which
was 1 / y, is 0 provided not ln(y) = 0. The suite, the trio, F#, AOT and
the eight harnesses pass.

Fixes #2271.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@Rafael-SOWNet Rafael-SOWNet added this to the 2.7.0 milestone Oct 30, 2026
@Rafael-SOWNet Rafael-SOWNet moved this from Todo to In review in AngouriMath Oct 30, 2026
@codecov

codecov Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 86.71%. Comparing base (f570b35) to head (e04fd24).
⚠️ Report is 1 commits behind head on master.

Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##           master    #2276      +/-   ##
==========================================
+ Coverage   86.70%   86.71%   +0.01%     
==========================================
  Files         310      310              
  Lines       67869    67872       +3     
  Branches    19701    19701              
==========================================
+ Hits        58843    58857      +14     
+ Misses       4903     4891      -12     
- Partials     4123     4124       +1     
Flag Coverage Δ
cpp 37.77% <ø> (ø)
csharp 87.26% <100.00%> (+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 Δ
...nctions/Continuous/Limits/Solvers/Limit.Solvers.cs 85.21% <100.00%> (+1.03%) ⬆️

... and 8 files with indirect coverage changes

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

…-the-limits

Both this branch and #2268 add a header rule after ModulusPhaseTest's;
each keeps its own.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@Rafael-SOWNet
Rafael-SOWNet merged commit 26ba7ec into master Oct 31, 2026
35 checks passed
@github-project-automation github-project-automation Bot moved this from In review to Done in AngouriMath Oct 31, 2026
@Rafael-SOWNet
Rafael-SOWNet deleted the a-quotient-of-logarithms-tends-to-the-logarithms-of-the-limits branch October 31, 2026 01:05
Rafael-SOWNet added a commit that referenced this pull request Oct 31, 2026
limitright(ln(x^x), x, -1) was ln(-1), which is i pi, where it is
-i pi: x^x comes to -1 from below as x comes down to -1, and the
principal logarithm is continuous on its cut from above only. The
value on the cut is the limit along the real line and from above, so
it was given as the limit from either side.

ArrivesOnTheCutOffTheRealLine asks whether a logarithm's argument, or
the base of a power to an exponent that is not whole, tends to a
negative real and is not known to be real on the approach; a power's
base and a logarithm's argument count as positive where their values
at the destination are. Which side such an argument comes from is not
decided, so a limit there is declined: by substitution, by the
logarithm's and the power's descent, by SolveAsLogarithm, by the
quotient of logarithms, and by Gruntz, whose series took the principal
logarithm of a negative coefficient. A limit from above, whose answer
was right, is declined too.

LimitOnABranchCutTest takes eight limits from below the cut, three
two-sided ones that do not exist, and nine along the real line, which
are answered as before; eleven fail on master. The suite, the trio,
F#, AOT and the eight harnesses pass. Composed with #2268, #2275 and
#2276, work/limitcheck finds none of the 56 limits it found answered
with another value on master, of 600 expressions.

Part of #2266.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
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.

A limit of a quotient of logarithms with symbolic limits answers the quotient of the arguments

1 participant