Skip to content

A constant raised to a multiple of a logarithm of itself is a power of the antilogarithm - #1430

Merged
Rafael-SOWNet merged 1 commit into
masterfrom
k-log-power
Sep 20, 2026
Merged

Rafael-SOWNet merged 1 commit into
masterfrom
k-log-power

Conversation

@Rafael-SOWNet

Copy link
Copy Markdown
Member

The k = 1 case, c ^ log(c, b) = b, folds for every base since #1428; the same identity with a multiplier on the logarithm, c ^ (k * log(c, b)) = b ^ k, did not fold for any. It is the shape the integrator's exponential substitution writes its antiderivatives in — e ^ (-3/2 * ln(1 + 2 / (a x - 1))) stood in answers that were otherwise algebraic (the acoth rows of Rubi's family 7, #718).

Why it is exact. c ^ z is exp(z ln c) and log(c, b) is ln(b) / ln(c) on the principal branch, so the two ln(c) cancel and exp(k ln b) is left, which is what b ^ k means for every complex b other than 0 — including the negative reals, where e ^ (1/2 * ln(-3)) is i sqrt(3), the principal (-3) ^ (1/2). PowerOfALogarithmMultipleTest.TheValueIsPreserved samples both signs and a fractional multiplier.

Three arms by what can be said of the base, as for the k = 1 rules, in both spellings (MatchedRules.cs and the Power switch), with the multiplier on either side of the logarithm:

base rule Simplify
a number other than 0 and 1 a-number-raised-to-a-multiple-of-a-logarithm-of-itself-is-a-power-of-the-antilogarithm 2 ^ (k * log(2, x)) → x ^ k, 10 ^ (3 * log(10, x)) → x ^ 3
a constant a-constant-raised-to-a-multiple-of-a-logarithm-of-itself-is-a-power-of-the-antilogarithm — a pattern on the right, so it is data both ways e ^ (2 * ln(x)) → x ^ 2, e ^ (-3/2 * ln(u)) → u ^ (-3/2), pi ^ (k * log(pi, x)) → x ^ k
a symbol a-symbol-raised-to-a-multiple-of-a-logarithm-of-itself-is-a-power-of-the-antilogarithm-where-defined a ^ (k * log(a, x)) → x ^ k provided not a = 0 and not a = 1

1 ^ (2 * log(1, x)) is still NaN. LogarithmSpellingsTest (per rule set, base 2 against base e) passes unchanged, since every arm reads both.

The guide's counts and the pinned lists (WritingARule.md, RuleAuthoringGuideTest, ReversibleRuleTest, RulePriorityTest, RuleMetadataTest, StepAsASentenceTest, AddressableRulesTest) move: 332 rules, 303 names, 329 identities, 146 conditional, 126 Collects, 34 Expands, 30 subsumptions (constant before symbol, as for k = 1), 963 subsumption claims, 36 two-sided rules of which 32 have a direction (the constant arm forgets which constant, the fourth of its kind), and the longest name is now nineteen words.

BREAKING-CHANGES.md rows measured on a v2.5.0 build. Full suite 12006 passed, 0 failed; benchmark gate PASSED (SimplifyHard 171,811,504 B, +0.1% on the recorded baseline).

Part of #994 and #718.

🤖 Generated with Claude Code

https://claude.ai/code/session_012sonx8iAspMiwRwokT1Ura

…f the antilogarithm

c ^ (k * log(c, b)) is b ^ k: c ^ z is exp(z ln c) and log(c, b) is ln(b) / ln(c) on the
principal branch, so the two ln(c) cancel and exp(k ln b) is left, which is what b ^ k
means for every complex b other than 0. The k = 1 case folded since #1428 and this shape
did not, and it is the shape the integrator's exponential substitution writes its
antiderivatives in: e ^ (-3/2 * ln(u)) stood in answers that were otherwise algebraic.

Three arms by what can be said of the base, as for the k = 1 rules, in both spellings:
a number other than 0 and 1, a constant, and a symbol under the logarithm's own domain
condition. The multiplier may sit on either side of the logarithm. The constant arm is
written with a pattern on the right so it is data in both directions.

The guide's counts and the pinned lists move: 332 rules, 303 names, 329 identities,
146 conditional, 126 Collects, 34 Expands, 30 subsumptions (constant before symbol),
963 subsumption claims, 36 two-sided rules of which 32 have a direction, and the
longest name is nineteen words. BREAKING-CHANGES.md rows measured on a v2.5.0 build.

#994
#718

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012sonx8iAspMiwRwokT1Ura
@Rafael-SOWNet
Rafael-SOWNet merged commit dbbe2a1 into master Sep 20, 2026
31 checks passed
@Rafael-SOWNet
Rafael-SOWNet deleted the k-log-power branch September 20, 2026 23:15
Rafael-SOWNet added a commit that referenced this pull request Sep 21, 2026
…eal (#1431)

The linear-radical substitution u = (a x + b)^(1/q) and the general substitution for an
even root both take a power of u out of a radical on the strength of u being a
non-negative real, which it is only where the radical is. Beyond the radicand's zero u
is imaginary and the integrand can still be real: Rubi's x sqrt(c - a c x)/e^(3 atanh(a x))
above a x = 1 is the product of two imaginary factors, and the answer built for a real u
was 14% off its derivative there and shipped as an answer (family 7, one wrong after
#1430 made the row reachable). An answer that used the step now carries
provided a x + b >= 0: NaN beyond it, which is no claim, and unchanged where it holds.
An answer the step did not touch is as it was.

#718


Claude-Session: https://claude.ai/code/session_012sonx8iAspMiwRwokT1Ura

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Rafael-SOWNet added a commit that referenced this pull request Sep 21, 2026
…r it is (#1434)

e^(k ln(q)) is q^k, the definition of the principal power for every complex q other than
zero, and that is the spelling the parser gives every inverse hyperbolic function:
acoth(a x) is 1/2 ln((a x + 1)/(a x - 1)). So e^acoth(a x) x^3 arrived as an exponential
of a logarithm, which no exponential rule reads, and is x^3 sqrt((a x + 1)/(a x - 1)), a
root of a quotient of linears, which the radical substitution answers. The simplifier
folds the shape since #1430; the integrand is not simplified before the rules see it, so
the fold is a route of its own, asked as a question of its own so that the closed rules
meet the folded integrand at the top. The multiplier is gathered from the whole product
in the exponent, since e^(3 acoth(a x)) arrives as e^(3 (1/2 ln q)).

Rubi's 7.4.2 (exponentials of the inverse hyperbolic cotangent): of fifteen rows the
probe declined, seven are answered and verified.

#718


Claude-Session: https://claude.ai/code/session_012sonx8iAspMiwRwokT1Ura

Co-authored-by: Claude Opus 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

None yet

Development

Successfully merging this pull request may close these issues.

1 participant