左イデアルの被約Groebner基底を計算するプログラム In[1]:= NCLeftGroebner[generator_,monoorder_,valueorder_]:= NCLeftGroebner[generator,monoorder,valueorder]= Module[{LT2,ListPoly,PolyList,Polymono2,sig,PolyDiv2,S2,Groeb2,MinGroeb, RedGroeb}, If[monoorder==lex, LT2[f_]:= LT2[f]=Module[{s,lt,a},s=Length[f];lt=f[[1]]; Do[If[DeleteCases[lt[[2]]-f[[a]][[2]],0][[1]]<0,lt=f[[a]]],{a, 2, s}];lt]]; If[monoorder==grlex, LT2[f_]:= LT2[f]=Module[{s,lt,t,sum1,sum2,a},s=Length[f];lt=f[[1]]; t=Length[lt[[2]]]; Do[sum1=Sum[lt[[2]][[i]],{i,t}]; sum2=Sum[f[[a]][[2]][[i]],{i,t}]; If[sum10, lt=f[[a]]]]],{a,2,s}];lt]]; If[monoorder=!=lex&&monoorder=!=grlex&&monoorder=!=grevlex, LT2[f_]:= LT2[f]=Module[{s,lt,t,c,j},s=Length[f];lt=f[[1]]; t=Length[monoorder]; Do[c=False;j=1; While[c==False, If[monoorder[[j]].lt[[2]]=!=monoorder[[j]].f[[i]][[2]], c=True;If[ monoorder[[j]].lt[[2]] の被約Groebner基底: {g1, g2, ..., gs}を出力します。 但し、任意の異なる変数 Xi と Xj に対し、XiXj=ーXjXi とする非可換多項式環で、monomial orderは、weight matrix で入力し(lex orderとgrlex orderとgrevlex orderは、それぞれ、 lex、grlex、grevlex と入力)、f1, f2, ..., fn, g1, g2, ..., gs, は多項式です。 (Example) In[2]:=NCLeftGroebner[{x*z-y^2,x^3-z^2},lex,{x,y,z}] Out[2]={-y^2+x*z, x^3-z^2, x^2*y^2+z^3, x*y^4+z^4, y^2*z^2, y^6, y^4*z, z^5} In[3]:=NCLeftGroebner[{x*z-y^2,x^3-z^2},grlex,{x,y,z}] Out[3]={-y^2+x*z, x^3-z^2, x^2*y^2+z^3, x*y^4+z^4, y^2*z^2, y^6, y^4*z, z^5} In[4]:=NCLeftGroebner[{x*z-y^2,x^3-z^2},grevlex,{x,y,z}] Out[4]={y^2-x*z, x^3-z^2, x*z^3, z^5} In[5]:=NCLeftGroebner[{x*z-y^2,x^3-z^2},{{1,1,1},{1,1,0},{1,0,0}},{x,y,z}] Out[5]={y^2-x*z, x^3-z^2, x*z^3, z^5}