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.

Reply via email to