Skip to content

fix(simplify): Improve collection of nonconstant like terms#2384

Merged
josdejong merged 2 commits into
josdejong:developfrom
gwhitney:simplify_collect_nonconstant
Jan 15, 2022
Merged

fix(simplify): Improve collection of nonconstant like terms#2384
josdejong merged 2 commits into
josdejong:developfrom
gwhitney:simplify_collect_nonconstant

Conversation

@gwhitney
Copy link
Copy Markdown
Collaborator

The key is that the rule-matching engine is optimized for finding matches
on the lefts of terms, but the central term-collection rule
n1*n3 + n2*n3 -> (n1+n2)*n3 was written with the key common term rightmost.
Reversing this rule to n3*n1 + n3*n2 -> n3*(n1+n2) therefore does most
of the work of improving like-term collection. It also better corresponds
to typical mathematical presentation: common terms tend to be pulled out
to the left in practice.

Floating constants to the right of a product initially (before they are
moved back to the left for human-preferred output) and ensuring that
negations are subsumed into constants whenever possible did the rest.

Also, rule context was not being propagated into the simplification
engine; this commit corrects that.

Resolves #1179.
Resolves #1290.

I also have a succinct PR for #1423 in a similar spirit that depends on this which I will be happy to submit should this be approved (perhaps with revisions) and merged.

gwhitney and others added 2 commits January 13, 2022 17:10
  The key is that the rule-matching engine is optimized for finding matches
  on the lefts of terms, but the central term-collection rule
  `n1*n3 + n2*n3 -> (n1+n2)*n3` was written with the key common term rightmost.
  Reversing this rule to `n3*n1 + n3*n2 -> n3*(n1+n2)` therefore does most
  of the work of improving like-term collection. It also better corresponds
  to typical mathematical presentation: common terms tend to be pulled out
  to the left in common practice.

  Floating constants to the right of a product initially (before they are
  moved back to the left for human-preferred output) and ensuring that
  negations are subsumed into constants whenever possible did the rest.

  Also, rule context was not being propagated into the simplification
  engine; this commit corrects that.

  Resolves josdejong#1179.
  Resolves josdejong#1290.
@josdejong
Copy link
Copy Markdown
Owner

Thanks Glen. This is a set of neat improvements and fixes 👍👍

@josdejong josdejong merged commit 84c3abd into josdejong:develop Jan 15, 2022
@josdejong
Copy link
Copy Markdown
Owner

Published now in v10.1.0

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.

simplify(string) doesn't combine disordered same degree polynomial elements Math.rationalize won't simplify xy-yx

2 participants