Skip to content

A product of powers is read as its own raised product's derivative without a sum beside it - #1694

Merged
Rafael-SOWNet merged 3 commits into
masterfrom
a-product-of-powers-without-a-sum-beside-it
Oct 2, 2026
Merged

Rafael-SOWNet merged 3 commits into
masterfrom
a-product-of-powers-without-a-sum-beside-it

Conversation

@Rafael-SOWNet

Copy link
Copy Markdown
Member

Part of #718.

SolveAsTheDerivativeOfAProductOfPowers reads an integrand as a constant times the derivative of its powers with some of them raised by one: e^x x^2 ln(x)^2 (3 + (3 + x) ln(x)) is (e^x x^3 ln(x)^3)'. Three cases it missed, each from Rubi's family 1:

integrand master this
x (a + b x + c x^2)^m (d + e x + f x^2 + g x^3)^n (2 a d + ...), Rubi 1.3.2 no answer in 30 s x^2 (a + b x + c x^2)^(m + 1) (d + e x + f x^2 + g x^3)^(n + 1), 0.3 s
1/(x^2 sqrt(a x + b x^4)), Rubi 1.1.4.2 declined -2 sqrt(a x + b x^4)/(3 a x^2)
(a + b x^n + c x^(2 n))^p (a + b (1 + n + n p) x^n + c (1 + 2 n (1 + p)) x^(2 n)), Rubi 1.2.3.5 declined x (a + b x^n + c x^(2 n))^(p + 1)

What changes

  • The derivative's sum is built as a sum of products. It is each raised base's derivative times the other raised bases. Built with f'/f in it, it didn't read as a polynomial, and the constant fell to simplifying a quotient of the two sums, which ran past a minute for the first row. As a polynomial, the constant comes off one monomial.
  • No sum beside the powers, where two or more powers stand and one is not whole: the product is then the derivative's up to a constant. A lone power is the power rule's or the binomial's, and is left to them.
  • x raised from nothing, where a power is not whole and x is not among the powers. It is written in front of them, as the rule for a polynomial times a power of its base writes it.

Tests: ProductOfPowersDerivativeTest gains the three rows and APowerThatIsNoDerivativeIsDeclined, which checks that sqrt(1 + x^3) is still declined. The three rows fail on master. TheNeighboursKeepTheirForms and TheAnswerIsTheProductItself pin sqrt(1 + 2 x) and 3 x (e^x + x)^(2/3) as written, which is why a lone power is left out and the raised x is written in front.

Measured on the Rubi corpus against master 94ba5ff6, with both builds side by side:

master this
family 0, independent suites (1814) 1758 1758
family 1, 40 a file (1381) 1114 1121
families 2 to 8, sampled (2586) 2358 2360

Both builds give the same three wrong answers: two in family 1, 1.2.1.1's roots of negative squares, which #1672 fixed on master after this branch's base, and one in family 7, e^(2 acoth(a x)) sqrt(c - a c x)/x, which #1682 fixed.

Sixteen problems moved between the two runs, so I re-ran each alone on both builds. This branch answers 9 of them and master none, neither wrongly.

The suite passes, 14,316 tests on a fresh build, and so does the allocation gate. Master 61de03de is merged in since, without conflicts. The three rows above were measured on that merge against master 61de03de, and the calculus tests pass on it, 3,697 of them.

🤖 Generated with Claude Code

https://claude.ai/code/session_012sonx8iAspMiwRwokT1Ura

Rafael-SOWNet and others added 3 commits October 2, 2026 07:13
…thout a sum beside it

SolveAsTheDerivativeOfAProductOfPowers reads an integrand as a constant
times the derivative of its powers with some of them raised by one. Three
changes:

- The derivative's sum is built as a sum of products, each raised base's
  derivative times the other raised bases, so that it reads as a
  polynomial and the constant comes off one monomial. Built with f'/f in
  it, it read as nothing, and the constant fell to simplifying a quotient
  of the two sums: past a minute for Rubi's 1.3.2
  x (a + b x + c x^2)^m (d + e x + f x^2 + g x^3)^n (...), 0.3 s now.
- Where a power is not a whole one, a product with no sum beside it is
  tried as well: 1/(x^2 sqrt(a x + b x^4)) is
  (-2/(3 a) sqrt(a x + b x^4)/x^2)'.
- And there, x is raised from nothing where it is not among the powers:
  (a + b x^n + c x^(2 n))^p (a + b (1 + n + n p) x^n + ...) is
  (x (a + b x^n + c x^(2 n))^(p + 1))'.

Part of #718.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012sonx8iAspMiwRwokT1Ura
…eside it

Measured on the 2.5.0 tag and on this branch.

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 2, 2026
@Rafael-SOWNet
Rafael-SOWNet merged commit 96ac3bc into master Oct 2, 2026
34 checks passed
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