http://axiom-wiki.newsynthesis.org/SandBoxBugGroebnerFactorize
A simple example of Groebner factorization works:
--
ideq1:LIST(POLY(FRAC(SMP(INT,OVAR([mp,mq,yqp]))))) := [ _
(yqp^2*mq^2*mp*%x3+yqp^2*mq*mp*%x1)*%x4+(yqp^2*mq*mp*%x1*%x3+(mp*%x1^2+(-1)*%x1)),
_
(yqp^2*mq*mp^2*%x3+yqp^2*mq*mp*%x2)*%x4+(yqp^2*mq*mp*%x2*%x3+(mq*%x2^2+(-1)*%x2)),
_
yqp^2*mq*mp*%x3^2+(mq*%x2+(mp*%x1+(-1)))*%x3+%x1*%x2,
yqp^2*mq*mp*%x4^2+(mq*%x2+(mp*%x1+(-1)))*%x4+%x1*%x2 ];
groebnerFactorize ideq1
--
But the following moderately complex problem fails:
--
ideq2:LIST(POLY(FRAC(SMP(INT,OVAR([mp,mq,mr,yqp,yrp,yrq]))))) := [ _
(yrp^2*mr^2*mp*%x5+(yrq*yrp*yqp*mr*mq*mp*%x4+yrp^2*mr*mp*%x1))*%x8+((yrq*yrp*yqp*mr*mq*mp*%x5+(yqp^2*mq^2*mp*%x4+yqp^2*mq*mp*%x1))*%x6+(yrp^2*mr*mp*%x1*%x5+(yqp^2*mq*mp*%x1*%x4+(mp*%x1^2+(-1)*%x1)))),
_
(yrq^2*mr^2*mq*%x7+(yrq*yrp*yqp*mr*mq*mp*%x6+yrq^2*mr*mq*%x2))*%x9+((yrq*yrp*yqp*mr*mq*mp*%x4+yrq^2*mr*mq*%x2)*%x7+((yqp^2*mq*mp^2*%x4+yqp^2*mq*mp*%x2)*%x6+(yqp^2*mq*mp*%x2*%x4+(mq*%x2^2+(-1)*%x2)))),
_
(yrq^2*mr*mq^2*%x7+(yrq*yrp*yqp*mr*mq*mp*%x5+yrq^2*mr*mq*%x3))*%x9+((yrq*yrp*yqp*mr*mq*mp*%x7+(yrp^2*mr*mp^2*%x5+yrp^2*mr*mp*%x3))*%x8+(yrq^2*mr*mq*%x3*%x7+(yrp^2*mr*mp*%x3*%x5+(mr*%x3^2+(-1)*%x3)))),
_
(((yrq*yrp*mr^2)/yqp)*%x5+(yrq^2*mr*mq*%x4+((yrq*yrp*mr)/yqp)*%x1))*%x9+((yrp^2*mr*mp*%x4+((yrq*yrp*mr)/yqp)*%x2)*%x5+(yqp^2*mq*mp*%x4^2+(mq*%x2+(mp*%x1+(-1)))*%x4+%x1*%x2)),
_
(yrq^2*mr*mq*%x5+(((yrq*yqp*mq^2)/yrp)*%x4+((yrq*yqp*mq)/yrp)*%x1))*%x7+(yrp^2*mr*mp*%x5^2+(yqp^2*mq*mp*%x4+(mr*%x3+(mp*%x1+(-1))))*%x5+(((yrq*yqp*mq)/yrp)*%x3*%x4+%x1*%x3)),
_
(((yrq*yrp*mr^2)/yqp)*%x7+(yrp^2*mr*mp*%x6+((yrq*yrp*mr)/yqp)*%x2))*%x8+((yrq^2*mr*mq*%x6+((yrq*yrp*mr)/yqp)*%x1)*%x7+(yqp^2*mq*mp*%x6^2+(mq*%x2+(mp*%x1+(-1)))*%x6+%x1*%x2)),
_
yrq^2*mr*mq*%x7^2+(yqp^2*mq*mp*%x6+(yrp^2*mr*mp*%x5+(mr*%x3+(mq*%x2+(-1)))))*%x7+((((yrp*yqp*mp^2)/yrq)*%x5+((yrp*yqp*mp)/yrq)*%x3)*%x6+(((yrp*yqp*mp)/yrq)*%x2*%x5+%x2*%x3)),
_
(yrq^2*mr*mq*%x8+(((yrq*yqp*mq^2)/yrp)*%x6+((yrq*yqp*mq)/yrp)*%x1))*%x9+(yrp^2*mr*mp*%x8^2+(yqp^2*mq*mp*%x6+(mr*%x3+(mp*%x1+(-1))))*%x8+(((yrq*yqp*mq)/yrp)*%x3*%x6+%x1*%x3)),
_
yrq^2*mr*mq*%x9^2+(yrp^2*mr*mp*%x8+(yqp^2*mq*mp*%x4+(mr*%x3+(mq*%x2+(-1)))))*%x9+((((yrp*yqp*mp^2)/yrq)*%x4+((yrp*yqp*mp)/yrq)*%x2)*%x8+(((yrp*yqp*mp)/yrq)*%x3*%x4+%x2*%x3))
];
groebnerFactorize ideq2
--
with the message
>> Error detected within library code:
index out of range
The error apparently originates from 'npcoef.spad' in:
--
check(tterm:TermC,ulist:Vector(P)) : Union(Detc,"failed") ==
cfu:P := 1$P;doit:NNI := 0;poselt:NNI := 0;pp:Union(P,"failed")
termlist : List(VTerm) := tterm.detfacts
vterm : VTerm := empty()
#termlist = 1 =>
vterm := termlist.first
for elterm in vterm while doit<2 repeat
(cu1 := elterm.pcoef) ~= 0 => cfu := cu1*cfu
doit := doit+1
poselt := position(elterm, vterm)::NNI
doit = 2 or (pp := tterm.coefu exquo cfu) case "failed" => "failed"
[vterm.poselt.expt, pp::P, poselt]$Detc
"failed"
--
It looks like this line:
(cu1 := elterm.pcoef) ~= 0 => cfu := cu1*cfu
causes premature exit from the loop and really should be:
if (cu1 := elterm.pcoef) ~= 0 then cfu := cu1*cfu
in order that poselt be set properly on exit from the loop. But I am
not entirely clear on what is happening here or why and the
documentation in the source code is rather minimal.
In any case after fixing the index problem as above, another problem arises:
>> Error detected within library code:
Table construction failed in MLIFT
in 'mlift.spad'.
At this point I am rather lost, not being sufficiently familiar with
exactly what is supposed to be happening here. All I see is that 0's
seem to end up unexpectedly in the list of polynomials.
Any help would be greatly appreciated.
--
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 post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/fricas-devel.
For more options, visit https://groups.google.com/d/optout.
groebnerFractorize.input
Description: Binary data
