==> %body
==>
%body
%body
%body %body
%body %body %body
%body SINGULAR - A Computer Algebra System for Polynomial Computations Overview Objects Functionality Libraries Examples Applications Availability History Contributors Future %body

Sao Carlos, 08/02 http://www.singular.uni-kl.de
SINGULAR Examples Build. Blocks Comb. Appl. HCA Proving
Arrangements Branches Classify Coding Deformations Equidim Part Existence Finite Groups Flatness Genus Hilbert Series Membership Nonnormal Locus Normalization Primdec Puiseux Plane Curves Saturation Solving Space Curves Spectrum
%body

Sao Carlos, 08/02 http://www.singular.uni-kl.de
SINGULAR Applications Robotics Circuit Design Medicine Glass Melting %body

Sao Carlos, 08/02 http://www.singular.uni-kl.de
//SINGULAR MapleVRelase5 for UNIX/Linux

f:=x^10+x^9*y^2;
g:=y^8-x^2*y^7;

interface(prettyprint=0);
interface(echo=0);
writeto( singular_input );
lprint(`ideal I = `);
f, g ;
lprint(`;`);
writeto(terminal);

ring R=0,(x,y),dp;
< "singular_input";
short=0;         // output in Maple format
ideal J=std(I);
write(":w maple_input",J);


SINGULARlink:=proc(I,P,tord)
  local i,j,path,vars,F,p,ele;
  
  F:=map(expand,I);
  vars:=indets(F);
  if P>0 then p:=P else p:=0 fi;
  
  path:="Trans";
  if assigned(pathname) then path:=cat(pathname,path) fi;
  if system("mkdir ".path)<>0 then
    ERROR("Couldn't make the Transfer-directory")
  fi;

  writeto(cat(path,"/In"));
    
  lprint(`ring R =`);
  lprint(``.p.`,`);
  lprint(`(x(1..`.(nops(vars)).`)),`);
  lprint(`(`.tord.`);`);
    
  lprint(`ideal I =`);
  for i to nops(F) do
      if i>1 then lprint(`,`) fi;
      ele:=subs([seq(vars[j]=x(j), j=1..nops(vars))],F[i]);
      if type(ele,monomial) then lprint(ele)
      else # split into summands, otherwise line might get chopped!
          lprint(op(1,ele));
          for j from 2 to nops(ele) do
              lprint(`+`,op(j,ele))
          od
      fi
  od;
  lprint(`;`);
    
  lprint(`short=0;`);
  lprint(`ideal b = std(I);`);
  lprint(`write(\"`.path.`/Out\",\"[\");`);
  lprint(`write(\"`.path.`/Out\",b);`);
  lprint(`write(\"`.path.`/Out\",\"];\");`);
  lprint(`quit;`);
  writeto(terminal);
  
  system("Singular < ".path."/In > ".path."/temp");
  if %<>0 then
      system("'rm' -r ".path);
      ERROR("Something went wrong while executing Singular")
  fi;
  
  read(cat(path,"/Out"));
  F:=%;
  system("'rm' -r ".path);
  F:=subs([seq(x(i)=vars[i],i=1..nops(vars))],F);
  F:=map(expand,F);
  F
end:

f:=x^10+x^9*y^2;
g:=y^8-x^2*y^7;
J:=SINGULARlink([f,g],0,"dp"):

interface(prettyprint=0);
J;

proc maple_factorize(poly p)
{
  int saveshort=short;
  short=0;
  string in="maple-in."+string(system("pid"));
  string out="maple-out."+string(system("pid"));
  link l=in;
  write(l,"res:=factors("+string(p)+");");
  write(l,"interface(prettyprint=0);");
  write(l,"interface(echo=0);");
  write(l,"writeto(`"+out+"`);");
  write(l,"lprint(`ideal fac=`);");
  write(l,"lprint(op(1,res));");
  write(l,"for i to nops(op(2,res)) do");
  write(l,"  lprint(`,`);");
  write(l,"  lprint(op(1,op(i,op(2,res))));");
  write(l,"od;");
  write(l,"lprint(`;`);");
  write(l,"lprint(`intvec multies=`);");
  write(l,"lprint(`1`);");
  write(l,"for i to nops(op(2,res)) do");
  write(l,"  lprint(`,`);");
  write(l,"  lprint(op(2,op(i,op(2,res))));");
  write(l,"od;");
  write(l,"lprint(`;`);");
  write(l,"lprint(`list res=fac,multies;`);");
  write(l,"writeto(terminal);");
  write(l,"quit;");
  int dummy=system("sh","maple <"+in+" > dummy");
  if (dummy <> 0) { ERROR("something went wrong"); }
  string r=read(out);
  execute(r);
  return(res);
}


ring R = 0,(x,y),dp;
poly f = (x-y)^2*(x+y);
maple_factorize(f);