I keep finding new things down this rabbit hole...
After latest patch, profiler shows smaller?$EXPR
takes a lot of time. So I took a look.
triage$Kernel calls smaller?$EXPR.
It is used to sort the kernels.
smaller?$EXPR calls
smaller?(numer(x)*denom(y), numer(y)*denom(x))
Well, we know there is no well defined order in EXPR.
The multiplication is expensive, we can change it to
smaller?(x : %, y : %) ==
denom(x) = denom(y) => smaller?(numer(x), numer(y))
smaller?(denom(x), denom(y))
This should also have the side effect that kernels with same
denom will appear near together?
Anyway, this change will reduce memory usage of mapleok.input
by 20%.
But there are 2 regression test failures in rsimp.output.
But they are good failures, the new results are simpler than
the old ones! (I checked, their values are correct.)
11: EQUL: (rs4, (30*sqrt(11)::eI + 11*sqrt(15))*a7715/11)
+--+ +--+ +--+
(2 \|15 + \|11 )\|28
Output1: ----------------------
2
+--+
+--+ +--+ |77
(11 \|15 + 30 \|11 ) |--
\|15
Output2: --------------------------
11
29: EQUL: (rs13, (6*sqrt(11) - 11*sqrt(3))*a12096_1331/6)
6+-+ +--+ +-+6+-+
Output1: \|7 \|11 - 2 \|3 \|7
+-----+
+--+ +-+ |12096
(6 \|11 - 11 \|3 ) 6|-----
\| 1331
Output2: ----------------------------
6
(for rs4, sqrt(28) can be further simplified to 2*sqrt(7))
(for rs13, it is negative, but the absolute value is correct.)
I'm too excited to share this finding. I haven't check further yet.
I hope this change does not have unwanted side effects, so it is safe
to be included.
- Qian