mirror of
https://github.com/josdejong/mathjs.git
synced 2026-01-18 14:59:29 +00:00
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 #1179. Resolves #1290. Co-authored-by: Jos de Jong <wjosdejong@gmail.com>