Skip to content

A system with a product equation is solved branch by branch - #2129

Merged
Rafael-SOWNet merged 3 commits into
masterfrom
a-product-equation-is-solved-branch-by-branch
Oct 26, 2026
Merged

Rafael-SOWNet merged 3 commits into
masterfrom
a-product-equation-is-solved-branch-by-branch

Conversation

@Rafael-SOWNet

Copy link
Copy Markdown
Member

The eliminator solved x * y = 0 for y as 0, which is the answer only where x is not zero. In a system the triangularisation does not take, nothing followed the branch where x is. Each row that came back satisfied the system, so the check from #2125 passed it, and the answer read as all of the solutions.

2.6.0 this branch
x*y, sin(x) + y - 1 [[pi / 2 + 2 * pi * n_1, 0], [pi - pi / 2 + 2 * pi * n_1, 0]] [[0, 1], [pi / 2 + 2 * pi * n_1, 0], [pi - pi / 2 + 2 * pi * n_1, 0]]
(x - 1)*(y - 2), e^x - y [[ln(2), 2]] [[1, e], [ln(2), 2]]
x*e^y, x^2*y [[0, 0]] [[0, t_1], [0, 0]]
x - 1, x^2 - 1 in x, y null [[1, t_1]]
x*ln(y), x - y [[1, 1]] [[1, 1]]
  • A product is a branch per factor. A system with a product in more than one of its unknowns is solved once for each way of choosing a factor of each such product, up to 64 systems, and its solutions are theirs together. A product whose factors all mention the same unknowns is left alone, since solving it reads every factor: x (x - 1) is solved for x as 0 and 1. A branch that answers null is taken to have no solutions, which is what Solve says of it.
  • Every row is put back into the system as written. A factor can be zero where another is not defined. The branch x = 0 of x ln(y), x - y gives (0, 0), where ln(0) is no number. A row whose residual has no symbol left and is not a finite number is now dropped, on the square path too, as a root of one equation already is. That is why the last row of the table is unchanged.
  • An unknown that no equation mentions is a parameter. A branch can leave one, and the eliminator had no equation to take it from, so it answered nothing. Such a system now goes to the non-square solver from A system with more or fewer equations than unknowns is solved or declined #2124, which makes the unknown a parameter. SolveSystem.TestTrigSystem4 pinned null for a - 1, b * 0, where b * 0 is zero for every b. It now expects the one family (1, t_1).

Measured with the generated check from #2126, on 1190 square systems in x and y built from a known integer solution: the known solution was missing 22 times on master and 13 times here. Nothing else in its findings changed, and neither arm had a wrong row. The 13 left are roots found by Newton's method, where it finds one of several, and systems with abs.

ProductSystemTest covers each branch, the family, the undefined factor and the parameter, and checks every row at several values of what is left in it. Entry in BREAKING-CHANGES.md.

Fixes #2128

🤖 Generated with Claude Code

https://claude.ai/code/session_012sonx8iAspMiwRwokT1Ura

The eliminator solved x * y = 0 for y as 0, which is the answer only where x is not zero, and in a
system the triangularisation does not take nothing followed the branch where x is. Each row that
came back satisfied the system, so the answer read as all of the solutions:
  x*y; sin(x) + y - 1        missing (0, 1)
  (x - 1)*(y - 2); e^x - y   missing (1, e)
  x*e^y; x^2*y               [[0, 0]], where every (0, t) is a solution

A system with a product in more than one of its unknowns is now solved once for each way of
choosing a factor of each such product, up to 64 systems, and its solutions are theirs together.
A product whose factors all mention the same unknowns is left alone, since solving it reads every
factor. A branch that answers null is taken to have no solutions, which is what Solve says of it.

Every row of the union is put back into the system as written, because a factor can be zero
where another is not defined: the branch x = 0 of x ln(y), x - y is (0, 0), where ln(0) is no
number. A row whose residual has no symbol left and is not a finite number is now dropped, on the
square path too, as a root of one equation is.

A branch can leave an unknown that no equation mentions, and the eliminator had no equation to
take it from and answered nothing. Such a system goes to the non-square solver, which makes the
unknown a parameter: x - 1, x^2 - 1 in x, y was null and is [[1, t_1]]. SolveSystem.TestTrigSystem4
pinned null for a - 1, b * 0, where b * 0 is zero for every b; it now expects the one family
(1, t_1).

Measured with the generated check from #2126 on 1190 square systems in x and y built from a known
integer solution: the known solution missing 22 times on master and 13 here, with no other
change in its findings and no wrong row on either. The 13 left are roots found by Newton's method,
one of several, and systems with abs.

Fixes #2128

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012sonx8iAspMiwRwokT1Ura
@Rafael-SOWNet
Rafael-SOWNet merged commit 947c6f4 into master Oct 26, 2026
34 checks passed
@github-project-automation github-project-automation Bot moved this from Todo to Done in AngouriMath Oct 26, 2026
@Rafael-SOWNet
Rafael-SOWNet deleted the a-product-equation-is-solved-branch-by-branch branch October 26, 2026 23:41
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 system with a product equation loses the branch where the other factor is zero

1 participant