On 6/15/26 8:49 AM, Waldek Hebisch wrote:
> On Sun, Jun 14, 2026 at 10:40:59PM +0800, Qian Yun wrote:
>> 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?
>
> That looks problematic to me. Namely, if we have two different
> representations x1 and x2 of the same value, than modified variant
> will give them some order, that is smaller?(x1, x2) or
> smaller?(x2, x1) will be true. Original version gives false
> in such case.
We can leave smaller?$EXPR aside for now.
In Kernel:
triage(k1, k2) ==
height(k1) ~= height(k2) => B2Z(height(k1) < height(k2))
operator(k1) ~= operator(k2) => B2Z(operator(k1) < operator(k2))
(n1 := #(argument k1)) ~= (n2 := #(argument k2)) => B2Z(n1 < n2)
for x1 in argument(k1) for x2 in argument(k2) repeat
x1 ~= x2 => return B2Z(smaller?(x1, x2))
0
There is already a check that x1~=x2.
So in this case, it's perfectly fine to use the method above
to determine order?
- Qian
> To put it differently, 'smaller?' is not true order, but is
> not far from one. The modification above makes difference from
> order much worse.
>
> Let me add that for Expression(Integer) doing 'algreduc' with
> 'algreduc_flag$Lisp' set to true will produce representation
> which almost canonical, that is canonical up to choice of
> kernels. With canonical representaion we would get true
> linear order using any of definitions above. But, 'algreduc'
> may be quite expensive.
>
--
You received this message because you are subscribed to the Google Groups
"FriCAS - computer algebra system" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/fricas-devel/e50a431f-eec7-4de6-bb1e-c41c7f5fa947%40gmail.com.