v_:=[y_1,y_2,y_3,y_4,y_5,y_6,y_7,y_8,y_9,y_10] [lex:=1,grlex:=2,grevlex:=3,invlex:=4] NON_ZERO(f):=VECTOR(f SUB l_,l_,SELECT(NOT({j} SUBSET SELECT(f SUB i=0,i,{1,.~ ..,DIMENSION(f)})),j,[1,...,DIMENSION(f)])) SUBST(f,x,y):=LIM(f,x,y) DEGREE(u,x):=x*DIF(LN(DENOMINATOR(FACTOR(LIM(u,x,1/x),Trivial))),x) POL_DEGREE(u,x):=x*DIF(LN(DENOMINATOR(FACTOR(LIM(u,x,1/x),Trivial))),x) TOTAL_DEGREE(f,v):=POL_DEGREE(SUBST(f,v,VECTOR(t,i,DIMENSION(v))),t) TERM(f,i,x):=LIM(DIF(f,x,i),x,0)/i!*x^i E__(n,i):=(IDENTITY_MATRIX(n)) SUB i ORD_MATRIX(ord,n):=IF(ord=1,IDENTITY_MATRIX(n),IF(ord=2,APPEND(APPEND([VECTOR~ (1,i,1,n-1)],IDENTITY_MATRIX(n-1))`,[E__(n,1)]),IF(ord=3,VECTOR(VECTOR(IF(i+j~ k,0,1),i,1,n)],IF(k1,APPEND(ORD_MATRIX(3,k-1),ZERO_MATRIX(n-k+1~ ,k-1))`,[]))` LOG_V(v):=VECTOR(LOG(v SUB i),i,1,DIMENSION(v)) EXP_V(v):=VECTOR(EXP(v SUB i),i,1,DIMENSION(v)) LT_X(u,x):=PRODUCT((TERMS(EXPAND(x*u_,x))) SUB 1/x,u_,FACTORS(u)) LT_LEX_1(f,v,i):=IF(i>DIMENSION(v),f,LT_LEX_1(LT_X(f,v SUB i),v,i+1)) LT_LEX(f,v):=IF(f=0,0,LT_LEX_1(f,v,1),LT_LEX_1(f,v,1)) LT_ORD(f,v):=SUBST(LT_LEX(SUBST(f,v,EXP_V(ord_m . LOG_V(v_y))),v_y),v_y,EXP_V~ (ord_minv . LOG_V(v))) LT(f,v,ord):=IF(ord=1,LT_LEX(f,v),LT_ORD(f,v),LT_ORD(f,v)) DEF_ORD(v,ord):=[v_y:=VECTOR(v_ SUB i,i,1,DIMENSION(v)),ord_m:=IF(DIMENSION(o~ rd)>0,ord,?,ORD_MATRIX(ord,DIMENSION(v))),ord_minv:=IF(DIMENSION(ord)>0,ord^(~ -1),?,ORD_MATRIX(ord,DIMENSION(v))^(-1))] LEADING_TERM_0(f,v):=LT_ORD(f,v) LEADING_TERM(f,v,ord):=IF(ord=1,LT_LEX(f,v),LEADING_TERM_0(f,v,DEF_ORD(v,ord)~ )) MONODEG(u,x):=x/u*DIF(u,x) MDEG_AUX(ltf,v):=VECTOR(MONODEG(ltf,x_),x_,v) MDEG(f,v,ord):=MDEG_AUX(LEADING_TERM(f,v,ord),v) MON_LCM_AUX(v,md):=PRODUCT(v SUB i^md SUB i,i,1,DIMENSION(v)) MON_LCM(m1,m2,v):=MON_LCM_AUX(v,MAX(APPEND([MDEG_AUX(m1,v),MDEG_AUX(m2,v)]`,[~ [0,0]]))) S_POLY(f,g,v,ord):=IF(f*g=0,0,0,ITERATE(MON_LCM(w1_,w2_,v)*(f/w1_-g/w2_),[w1_~ ,w2_],[LT(f,v,ord),LT(g,v,ord)],1)) NF_4(p,ltp,mdegp,ff,ltff,v,r,i):=IF(mdegp>=MDEG_AUX(ltff SUB i,v),[p-ff SUB i~ *ltp/ltff SUB i,r],IF(i=MDEG(gg SUB k,v,ord),true,COND2_AUX(gg,mdegi,mdegj,v,ord,i,j,k+1),fal~ se)) COND2(gg,ij,v,ord):=COND2_AUX(gg,MDEG(gg SUB (ij SUB 1),v,ord),MDEG(gg SUB (i~ j SUB 2),v,ord),v,ord,ij SUB 1,ij SUB 2,1) [B_0(x):=,B_1(x):=] B_3(b,gg,t,v,ord,ij,g):=IF(g=0,B_1(b,gg,t,v,ord),B_1(APPEND(b,VECTOR([k,t+1],~ k,t)),APPEND(gg,[g]),t+1,v,ord),B_1(APPEND(b,VECTOR([k,t+1],k,t)),APPEND(gg,[~ g]),t+1,v,ord)) B_2(b,gg,t,v,ord,ij):=IF(NOT(COND1(gg SUB (ij SUB 1),gg SUB (ij SUB 2),v)) AN~ D NOT(COND2(gg,ij,v,ord)),B_3(DELETE_ELEMENT(b,1),gg,t,v,ord,ij,NF(S_POLY(gg ~ SUB (ij SUB 1),gg SUB (ij SUB 2),v,ord),gg,v,ord)),B_1(DELETE_ELEMENT(b,1),gg~ ,t,v,ord)) B_1(b,gg,t,v,ord):=IF(b=[],gg,B_2(b,gg,t,v,ord,b SUB 1)) B_0(f,v,ord):=B_1(APPEND(VECTOR(VECTOR([i,j],j,i+1,DIMENSION(f)),i,1,DIMENSIO~ N(f))),f,DIMENSION(f),v,ord) BUCHBERGER(f,v,ord):=B_0(f,v,ord,DEF_ORD(v,ord)) SORT_G_0(g,s,v):=VECTOR(g SUB (s SUB i SUB (DIMENSION(v)+1)),i,DIMENSION(g)) SORT_G(g,v,ord):=SORT_G_0(g,SORT(APPEND((VECTOR(MDEG(g SUB i,v,ord),i,DIMENSI~ ON(g)) . ord_m)`,[VECTOR(i,i,DIMENSION(g))])`),v) RED_0(g,v,ord,i):=IF(i>DIMENSION(g),g,RED_0(REPLACE_ELEMENT(NF(g SUB i,DELETE~ _ELEMENT(g,i),v,ord),g,i),v,ord,i+1)) RED(g,v,ord):=SORT_G(NON_ZERO(RED_0(g,v,ord,1)),v,ord) VECTOR2SET(v):=IF(DIMENSION(v)=1,{v SUB 1},{v SUB 1} UNION VECTOR2SET(DELETE_~ ELEMENT(v,1))) LC1(ltf,v):=SUBST(ltf,v,VECTOR(1,i,DIMENSION(v))) LC(f,v,ord):=LC1(LT(f,v,ord),v) DIV_MON1(mdeg_v,i,j):=IF(j>DIMENSION(mdeg_v),false,IF(mdeg_v SUB j<=mdeg_v SU~ B i,true,IF(j+1/=i,DIV_MON1(mdeg_v,i,j+1),DIV_MON1(mdeg_v,i,j+2)))) DIV_MON(mdeg_v,i):=DIV_MON1(mdeg_v,i,IF(i>1,1,2)) R_2(g,ltg,mdegg,d,i,v):=IF(i>d OR d=1,VECTOR(g SUB j/LC1(ltg SUB j,v),j,d),IF~ (DIV_MON(mdegg,i),R_2(DELETE_ELEMENT(g,i),DELETE_ELEMENT(ltg,i),DELETE_ELEMEN~ T(mdegg,i),d-1,i,v),R_2(REPLACE_ELEMENT(NF_1(g SUB i,DELETE_ELEMENT(g,i),DELE~ TE_ELEMENT(ltg,i),v,ord),g,i),ltg,mdegg,d,i+1,v))) R_1(f,ltf,d,v):=R_2(f,ltf,VECTOR(MDEG_AUX(ltf SUB i,v),i,d),d,1,v) R_0(f,v,ord):=R_1(f,VECTOR(LT(f SUB i,v,ord),i,DIMENSION(f)),DIMENSION(f),v) REDUCE(f,v,ord):=R_0(NON_ZERO(f),v,ord,DEF_ORD(v,ord)) [G_0(x):=,G_1(x):=] G_3(b,gg,t,v,ord,ij,g):=IF(g=0,G_1(b,gg,t,v,ord),G_0(RED(APPEND(gg,[g]),v,ord~ ),v,ord),G_0(RED(APPEND(gg,[g]),v,ord),v,ord)) G_2(b,gg,t,v,ord,ij):=IF(NOT(COND1(gg SUB (ij SUB 1),gg SUB (ij SUB 2),v)) AN~ D NOT(COND2(gg,ij,v,ord)),G_3(DELETE_ELEMENT(b,1),gg,t,v,ord,ij,NF(S_POLY(gg ~ SUB (ij SUB 1),gg SUB (ij SUB 2),v,ord),gg,v,ord)),G_1(DELETE_ELEMENT(b,1),gg~ ,t,v,ord)) G_1(b,gg,t,v,ord):=IF(b=[],REDUCE(gg,v,ord),G_2(b,gg,t,v,ord,b SUB 1)) G_0(f,v,ord):=G_1(APPEND(VECTOR(VECTOR([i,j],j,i+1,DIMENSION(f)),i,1,DIMENSIO~ N(f))),f,DIMENSION(f),v,ord) GROEBNER(f,v,ord):=G_0(f,v,ord,DEF_ORD(v,ord)) ELIMINATE(f,v1,v2):=SELECT(VECTOR2SET(VARIABLES(g)) SUBSET VECTOR2SET(v2),g,G~ ROEBNER(f,APPEND(v1,v2),EL_ORD(DIMENSION(v1),DIMENSION(v1)+DIMENSION(v2)))) SYSTEM(e,v,k):=GROEBNER(e,APPEND(IF(DIMENSION(v)>0,v,VARIABLES(e),VARIABLES(e~ )),IF(DIMENSION(k)>0,k,[],[])),lex) EIGENSYSTEM(a,ord,v,lambda):=GROEBNER(a . v-lambda*v,APPEND(v,[lambda]),ord) RREF_1(a,v,k):=GRAD(SELECT(TOTAL_DEGREE(p,v)<=1,p,REVERSE_VECTOR(GROEBNER(a .~ v,APPEND(v,k),lex))),v)` RREF(a,k):=RREF_1(a,VECTOR(v_ SUB i,i,DIMENSION(a`)),k) LAGRANGE_MULTIPLIERS_2(e,a,v):=SELECT(VECTOR2SET(VARIABLES(g)) SUBSET VECTOR2~ SET(v),g,GROEBNER(e,APPEND(a,v),lex)) LAGRANGE_MULTIPLIERS_1(f,g,a,v):=LAGRANGE_MULTIPLIERS_2(APPEND(GRAD(g,v) . a-~ GRAD(f,v),g),a,v) LAGRANGE_MULTIPLIERS(f,g,v):=LAGRANGE_MULTIPLIERS_1(f,g,VECTOR(v_ SUB i,i,DIM~ ENSION(g)),v)