with(Groebner); with(ArrayTools); with(PolynomialIdeals); with(ListTools); Extendd := proc(A, B) RETURN(Array([op(convert(A, list)), op(convert(B, list))])); end proc; Appendd := proc(A, h) RETURN(Array([op(convert(A, list)), h])); end proc; Removee := proc(A, h) local B; B := convert(A, list); B := subsop(h = NULL, B); RETURN(convert(B, Array)); end proc; Lt := proc(f, t) RETURN(LeadingTerm(f, t)[1]*LeadingTerm(f, t)[2]); end proc; Division := proc(f, L, t) local p, flag, i, r; global count; p := f; r := 0; while p <> 0 do i := 1; flag := false; while i <= ArrayNumElems(L) and flag = false do if divide(Lt(p, t), Lt(L[i], t), 'q') then p := expand(p - q*L[i]); count := count + 1; flag := true; else i := i + 1; end if; end do; if flag = false then r := r + Lt(p, t); p := p - Lt(p, t); end if; end do; RETURN(r); end proc; Sort := proc(L, t) RETURN(sort(L, (b, a) -> TestOrder(a[3], b[3], t))); end proc; Pair := proc(G, LtG, g, t) local P, A, A1, a, i, j, u, n, C; global pount, pk; P := Array([]); u := LeadingMonomial(g, t); n := ArrayNumElems(LtG); A := Array([seq(lcm(LtG[j], u)/u, j = 1 .. n)]); A1 := Array([op({op(Basis(convert(A, list), t))} minus {seq(LtG[j], j = 1 .. n)})]); pk := pk + n - ArrayNumElems(A1); for a in A1 do member(a, A, 'q'); P := Appendd(P, Array([g, G[q], lcm(u, LtG[q])])); pount := pount + 1; end do; RETURN(P); end proc; PairS := proc(g, t) local P, A, A1, a, i, j, u, na, C; global pount, pk, no, nb, G, LtG, str, n, GO, GW, m; P := Array([]); u := LeadingMonomial(g, t); na := ArrayNumElems(LtG); A := Array([seq(lcm(LtG[j], u)/u, j = 1 .. na)]); A1 := Array([op({op(Basis(convert(A, list), t))} minus {seq(LtG[j], j = 1 .. na)})]); pk := pk + na - ArrayNumElems(A1); for a in A1 do member(a, A, 'q'); if 1 <= q and q <= no then P := Appendd(P, Array([n, q, lcm(u, LtG[q]), str union {o}, SPolynomial(g, GO[q], t), m, u, LtG[q]])); elif no + 1 <= q and q <= 2*no then P := Appendd(P, Array([n, q - no, lcm(u, LtG[q]), str union {w}, SPolynomial(g, GW[q - no], t), m, u, LtG[q]])); else P := Appendd(P, Array([n, q - 2*no, lcm(u, LtG[q]), str union {b}, SPolynomial(g, B[q - 2*no], t), m, u, LtG[q]])); end if; pount := pount + 1; end do; RETURN(P); end proc; Pairw := proc(g, f, t) local P, A, A1, a, i, j, u, na, q, C, AA; global pount, pk, TT, no, G, LtG, n, GW, GO, ps; P := Array([]); u := LeadingMonomial(g, t); na := ArrayNumElems(LtG); A := Array([seq(lcm(LtG[j], u)/u, j = 1 .. na)]); AA := Removee(A, n + no); A1 := Array([op({op(Basis(convert(AA, list), t))} minus {seq(LtG[j], j = 1 .. na)})]); pk := pk + na - ArrayNumElems(A1); for a in A1 do member(a, A, 'q'); if 1 <= q and q <= no then if n <> q or n = q and TT[n] = false then P := Appendd(P, Array([n, q, lcm(u, LtG[q]), {o, w}, SPolynomial(g, GO[q], t), n, u, LtG[q]])); else ps := ps + 1; end if; elif no + 1 <= q and q < n then if TT[n] = false or TT[q - no] = false then P := Appendd(P, Array([n, q - no, lcm(u, LtG[q]), {w}, SPolynomial(g, GW[q - no], t), n, u, LtG[q]])); else ps := ps + 1; end if; elif q = na then if TT[n] = false then P := Appendd(P, Array([n, infinity, lcm(u, LtG[q]), {w, f}, SPolynomial(g, f, t), n, u, LtG[q]])); else ps := ps + 1; end if; elif 2*no < q then P := Appendd(P, Array([n, q - 2*no, lcm(u, LtG[q]), {b, w}, SPolynomial(g, B[q - 2*no], t), n, u, LtG[q]])); end if; pount := pount + 1; end do; RETURN(P); end proc; Pairc := proc(g, t) local P, A, A1, a, i, j, u, n, C, T, qq, ll; global pount, pk, B, LtB, G, LtG; u := w*mul(x[i], i = 1 .. 10); n := ArrayNumElems(LtG); A := Array([seq(lcm(LtG[j], u)/u, j = 1 .. n)]); A1 := Array([op({op(Basis(convert(A, list), t))} minus {seq(LtG[j], j = 1 .. n)})]); pk := pk + n - ArrayNumElems(A1); T := NULL; for a in A1 do member(a, A, 'q'); T := T, q; end do; T := {seq(i, i = 1 .. n)} minus {T}; T := convert(T, list); T := Reverse(T); G := convert(G, list); LtG := convert(LtG, list); for qq to nops(T) do B := Appendd(B, G[T[qq]]); LtB := Appendd(LtB, LtG[T[qq]]); G := subsop(T[qq] = NULL, G); LtG := subsop(T[qq] = NULL, LtG); end do; G := convert(G, Array); LtG := convert(LtG, Array); ll := ArrayNumElems(G); P := Array([seq(Array([infinity, i, lcm(u, LtG[i]), {f, o}]), i = 1 .. ll)]); pount := pount + ll; RETURN(P); end proc; CriterionS := proc(p, t) global S; if p[4] = {o, w} and TT[p[1]] = true and TT[p[2]] = true then if member([p[2], p[1], p[4]], S) or member([p[1], p[2], p[4]], S) then RETURN(false); end if; end if; if p[4] = {o} then if member([p[1], p[2], {w}], S) or member([p[2], p[1], {w}], S) then RETURN(false); end if; end if; if p[4] = {w} then if member([p[1], p[2], {o}], S) or member([p[2], p[1], {o}], S) then RETURN(false); end if; end if; RETURN(true); end proc; CommonFactor := proc(f) local A, gc, i, g, G; if f = 0 then RETURN(0); else A := [op(expand(f))]; gc := A[1]; for i from 2 to nops(A) do gc := gcd(gc, A[i]); end do; RETURN(simplify(f/gc)); end if; end proc; BSH := proc(F, t) local G, LtG, P, i, p, s, h, g, n, M, m, LtM, f; global count, pount, rount; G := Array([seq(CommonFactor(f), f in F)]); LtG := Array([seq(LeadingMonomial(g, t), g in G)]); P := Array([]); for i from 2 to ArrayNumElems(G) do P := Extendd(P, Pair(G[1 .. i - 1], LtG[1 .. i - 1], G[i], t)); end do; while ArrayNumElems(P) <> 0 do P := Sort(P, t); p := P[-1]; P := Array(1 .. ArrayNumElems(P) - 1, P); s := SPolynomial(p[1], p[2], t); count := count + 1; h := CommonFactor(Division(CommonFactor(s), G, t)); if h <> 0 then P := Extendd(P, Pair(G, LtG, h, t)); G := Appendd(G, h); LtG := Appendd(LtG, LeadingMonomial(h, t)); else rount := rount + 1; end if; end do; LtM := Array(Basis(convert(LtG, list), t)); M := Array([]); for m in LtM do member(m, LtG, 'q'); M := Appendd(M, G[q]); end do; RETURN(M, LtM); end proc; BSHSat := proc(F, f, t) #This algorithm computes a Grobner basis for an ideal using the new structure described in our paper. local P, i, p, s, h, g, hw, sw, cp, LtGO, LtGW, Lth, Lthw, p23, A, pw, firsttime, firstbytes, secondtime, secondbytes; global count, pount, rount, pk, TT, B, LtB, G, LtG, n, str, no, nb, GW, GO, LtGG, m, S, ps, Ltf; firsttime, firstbytes := kernelopts(cputime, bytesused); count := 0; pount := 0; rount := 0; pk := 0; m := 0; ps := 0; G, LtG := BSH(F, t); B := Array([]); LtB := Array([]); LtGG := Array([]); Ltf := LeadingMonomial(f, t); A := Array([]); A := Extendd(A, Pairc(f, t)); GO, LtGO := G, LtG; GW, LtGW := Array([]), Array([]); TT := Array([]); nb := ArrayNumElems(B); no := ArrayNumElems(GO); cp := 0; while ArrayNumElems(A) <> 0 do p := A[1]; A := Removee(A, 1); s := CommonFactor(SPolynomial(f, GO[p[2] - cp], t)); count := count + 1; h := CommonFactor(Division(s, Extendd(Extendd(GO, GW), Appendd(B, f)), t)); if h <> 0 then Lth := LeadingMonomial(h, t); if Lth = LeadingMonomial(s, t) then TT := Appendd(TT, true); else TT := Appendd(TT, false); end if; GW := Appendd(GW, h); LtGW := Appendd(LtGW, Lth); LtGG := Appendd(LtGG, Lth); else B := Appendd(B, GO[p[2] - cp]); nb := nb + 1; LtB := Appendd(LtB, LtGO[p[2] - cp]); GO := Removee(GO, p[2] - cp); no := no - 1; LtGO := Removee(LtGO, p[2] - cp); cp := cp + 1; end if; end do; P := Array([]); G := Extendd(Extendd(GO, GW), Appendd(B, f)); LtG := Extendd(Extendd(LtGO, LtGW), Appendd(LtB, Ltf)); for i to no do n := i; P := Extendd(P, Pairw(GW[i], f, t)); end do; S := Array([]); G := Extendd(GO, GW); LtG := Extendd(LtGO, LtGW); m := no; while ArrayNumElems(P) <> 0 do P := Sort(P, t); p := P[-1]; P := Array(1 .. ArrayNumElems(P) - 1, P); if nops(remove(has, [p[7], p[8]], w)) = 2 and gcd(p[7], p[8]) = 1 then ps := ps + 1; else if CriterionS(p, t) = true then S := Append(S, [p[1], p[2], p[4]]); s := CommonFactor(p[5]); count := count + 1; h := CommonFactor(Division(s, Extendd(G, Appendd(B, f)), t)); if h <> 0 then Lth := LeadingMonomial(h, t); m := m + 1; LtGG := Appendd(LtGG, Lth); G, LtG := Extendd(Extendd(GO, GW), B), Extendd(Extendd(LtGO, LtGW), LtB); sw := CommonFactor(SPolynomial(h, f, t)); hw := CommonFactor(Division(sw, Extendd(G, Appendd(B, f)), t)); if hw <> 0 then str := {o}; n := no + 1; P := Extendd(P, PairS(h, t)); Lthw := LeadingMonomial(hw, t); m := m + 1; LtGG := Appendd(LtGG, Lthw); str := {w}; P := Extendd(P, PairS(hw, t)); GO := Appendd(GO, h); LtGO := Appendd(LtGO, Lth); GW := Appendd(GW, hw); LtGW := Appendd(LtGW, Lthw); G := Extendd(GO, GW); LtG := Extendd(LtGO, LtGW); no := no + 1; if Lthw = LeadingMonomial(sw, t) then TT := Appendd(TT, true); else TT := Appendd(TT, false); end if; else str := {b}; n := nb + 1; P := Extendd(P, PairS(h, t)); B := Appendd(B, h); LtB := Appendd(LtB, Lth); nb := nb + 1; rount := rount + 1; end if; else rount := rount + 1; end if; else ps := ps + 1; end if; end if; end do; secondtime, secondbytes := kernelopts(cputime, bytesused); printf("%-1s %1s %1s %1s: %3a %3a\n", The, cpu, time, is, secondtime - firsttime, sec); printf("%-1s %1s %1s: %3a %3a\n", The, used, memory, secondbytes - firstbytes, bytes); printf("%-1s %1s %1s %1s: %3a\n", number, of, Spoly, is, count); printf("%-1s %1s %1s %1s: %3a\n", number, of, pairs, is, pount); printf("%-1s %1s %1s %1s: %3a\n", number, of, zeros, is, rount); printf("%-1s %1s %1s: %3a\n", BSH, criterians, is, pk); printf("%-1s %1s %1s: %3a\n", new, criterian, is, ps); RETURN(Extendd(G, B)); end proc; BSHC := proc(F, t)#This is the Berkesch-Schreyer algorithm that computes a Grobner basis for the saturation of the given ideal (by using Rabinowitsch's trick and by removing the common factors). local G, LtG, P, i, p, s, h, g, f, n, firsttime, firstbytes, secondtime, secondbytes; global count, pount, rount, pk; firsttime, firstbytes := kernelopts(cputime, bytesused); pk := 0; count := 0; pount := 0; rount := 0; G := Array([seq(CommonFactor(f), f in F)]); LtG := Array([seq(LeadingMonomial(g, t), g in G)]); P := Array([]); for i from 2 to ArrayNumElems(G) do P := Extendd(P, Pair(G[1 .. i - 1], LtG[1 .. i - 1], G[i], t)); end do; while ArrayNumElems(P) <> 0 do P := Sort(P, t); p := P[-1]; P := Array(1 .. ArrayNumElems(P) - 1, P); s := SPolynomial(p[1], p[2], t); count := count + 1; h := CommonFactor(Division(CommonFactor(s), G, t)); if h <> 0 then P := Extendd(P, Pair(G, LtG, h, t)); G := Appendd(G, h); LtG := Appendd(LtG, LeadingMonomial(h, t)); else rount := rount + 1; end if; end do; secondtime, secondbytes := kernelopts(cputime, bytesused); printf("%-1s %1s %1s %1s: %3a %3a\n", The, cpu, time, is, secondtime - firsttime, sec); printf("%-1s %1s %1s: %3a %3a\n", The, used, memory, secondbytes - firstbytes, bytes); printf("%-1s %1s %1s %1s: %3a\n", number, of, Spoly, is, count); printf("%-1s %1s %1s %1s: %3a\n", number, of, pairs, is, pount); printf("%-1s %1s %1s %1s: %3a\n", number, of, zeros, is, rount); printf("%-1s %1s %1s: %3a\n", BSH, criterians, is, pk); RETURN(G); end proc; tord := plex(w, seq(x[i], i = 1 .. 10)); F := [x[1]^5*x[2]^3*x[3]*x[4]*x[5]^3*x[6]*x[7]^5*x[8]^4*x[10]^2 - x[1]*x[2]^3*x[3]*x[4]^5*x[5]^3*x[6]^2*x[7]^5*x[8]^2*x[9]*x[10]^2, x[1]^5*x[2]^4*x[3]^4*x[4]^3*x[6]^3*x[7]*x[8]*x[9]^4*x[10] - x[1]^4*x[2]^3*x[7]*x[8]^4*x[9]^5*x[10]^3, -x[1]^4*x[2]^5*x[3]^3*x[4]^2*x[5]^4*x[6]^4*x[8]*x[9]*x[10]^3 - x[1]^2*x[3]^2*x[5]^4*x[7]^3*x[8]*x[9]^2*x[10]]; BSHSat(F,mul(x[i], i = 1 .. 10),tord); BSHC(F,tord); F := [x[1]^4*x[3]^3*x[4]^4*x[5]^2*x[6]^3*x[7]^3*x[8]^4*x[9]^4*x[10] + x[1]^4*x[2]^5*x[3]^3*x[5]^2*x[6]^3*x[7]^2*x[8]^3*x[9]^5, -x[1]^4*x[2]^3*x[4]^2*x[5]^4*x[6]^4*x[9]^4*x[10]^4 + x[1]^3*x[2]^4*x[5]^2*x[6]^2*x[8]^4*x[9]^2, -x[1]^4*x[2]^5*x[4]^3*x[5]^5*x[6]*x[8]^2*x[9]^2*x[10]^4 + x[1]^2*x[2]*x[3]^3*x[4]^2*x[9]^3*x[10], -x[1]^5*x[3]^2*x[4]*x[5]^2*x[6]^4*x[7]^5*x[9]^2*x[10]^2 - x[1]^2*x[2]^4*x[3]*x[5]*x[6]*x[7]^5*x[8]*x[9]^2*x[10]^5]; BSHSat(F,mul(x[i], i = 1 .. 10),tord); BSHC(F,tord); F := [x[1]^4*x[2]^5*x[3]^5*x[4]^4*x[5]^3*x[6]^2*x[7]^2*x[8]*x[9]*x[10]^3 + x[2]*x[3]^4*x[4]^4*x[5]*x[6]^4*x[7]^5*x[8]^2*x[9]^3, x[1]^3*x[3]^4*x[4]^5*x[6]^3*x[7]^4*x[8]^5*x[10]^4 + x[2]^3*x[3]*x[4]^5*x[5]^3*x[6]^4*x[7]^5*x[8]*x[9]^5, x[3]^4*x[4]^5*x[5]*x[6]^4*x[7]^5*x[9]^2*x[10]^2 + x[2]^4*x[3]^4*x[4]^2*x[7]*x[8]^2*x[9]*x[10], x[1]^4*x[2]*x[4]^2*x[5]^5*x[6]^4*x[7]^3*x[8]^4*x[9]*x[10] + x[1]^3*x[3]^3*x[4]^5*x[5]^3*x[6]*x[7]*x[9]^4*x[10]]; BSHSat(F,mul(x[i], i = 1 .. 10),tord); BSHC(F,tord); F := [-x[1]*x[2]^4*x[3]^5*x[4]*x[5]^2*x[6]^3*x[7]^3*x[8]^5*x[9]^4*x[10]^2 - x[1]^4*x[2]*x[3]^2*x[4]*x[5]*x[6]^3*x[7]^2*x[8]^2*x[10], x[2]^5*x[3]^4*x[4]^5*x[5]^3*x[6]^2*x[7]^5*x[8]^4*x[9]^2*x[10]^4 - x[1]^3*x[2]^4*x[3]^5*x[4]*x[5]^2*x[6]*x[7]^5*x[8]^3*x[10]^4, x[1]*x[2]^3*x[3]*x[5]^4*x[7]^3*x[8]^3*x[9]^4*x[10]^2 + x[1]*x[2]^2*x[5]^2*x[6]^4*x[7]^4*x[8]*x[9]*x[10], x[1]*x[2]^2*x[3]^4*x[4]^4*x[5]^3*x[6]^2*x[7]^2*x[8]^4*x[9]^5*x[10]^2 - x[2]^3*x[3]^2*x[4]^4*x[5]^3*x[6]^5*x[7]^3*x[8]^3*x[9]*x[10], -x[1]^4*x[2]*x[3]^3*x[4]^4*x[5]^3*x[6]^5*x[8]^5*x[9]^2 + x[1]*x[2]^3*x[4]^4*x[5]*x[6]^2*x[7]*x[8]^3*x[9]^5*x[10]^5]; BSHSat(F,mul(x[i], i = 1 .. 10),tord); BSHC(F,tord); F := [-x[1]^10*x[2]^10*x[3]*x[4]^9*x[6]^8*x[7]^3*x[8]^9*x[10]^6 + x[1]^3*x[2]^10*x[3]^9*x[4]^6*x[5]^9*x[6]^7*x[7]^3*x[8]*x[9]^3*x[10]^4, -x[2]^6*x[3]^5*x[5]^3*x[6]^9*x[7]^10*x[8]^6*x[10]^8 + x[1]^3*x[2]^2*x[3]^4*x[5]^5*x[6]^10*x[7]^2*x[8]^8*x[9]^6*x[10]^5, -x[1]^6*x[2]^9*x[3]^6*x[4]^2*x[6]^2*x[7]^9*x[8]^6*x[9]^9*x[10]^6 - x[1]^6*x[2]^9*x[3]*x[4]*x[5]^5*x[7]^5*x[8]^4*x[9]^2*x[10]^10]; BSHSat(F,mul(x[i], i = 1 .. 10),tord); BSHC(F,tord); F := [x[1]^2*x[2]*x[3]^8*x[4]^6*x[5]^9*x[6]^10*x[7]^6*x[8]^8*x[9]^7*x[10]^10 + x[1]*x[2]^9*x[3]*x[4]*x[5]^3*x[6]^2*x[7]^10*x[8]^4*x[10]^6, x[1]^5*x[3]^4*x[4]^8*x[5]*x[6]^6*x[7]^3*x[8]^4*x[9]^9*x[10]^9 + x[1]^2*x[2]^8*x[3]^10*x[4]^10*x[5]^3*x[6]*x[8]^9*x[9]^3, x[1]^6*x[2]^9*x[3]^5*x[4]^5*x[5]^8*x[6]^9*x[7]^10*x[8]^3*x[10]^4 - x[2]^4*x[3]^6*x[4]^9*x[5]^7*x[6]^9*x[7]^8*x[8]^3*x[9]^8*x[10]^4]; BSHSat(F,mul(x[i], i = 1 .. 10),tord); BSHC(F,tord); F := [-x[1]^9*x[2]^10*x[3]*x[4]*x[5]^3*x[6]^7*x[7]^10*x[8]^2*x[9]^8*x[10]^9 - x[1]^6*x[2]^9*x[3]^5*x[4]*x[5]^10*x[6]^3*x[7]^5*x[8]^4*x[9]^10, -x[1]*x[2]^10*x[3]^7*x[4]^9*x[5]^8*x[6]^10*x[8]^5*x[9]^6*x[10]^6 + x[1]^2*x[2]^4*x[3]^2*x[4]^7*x[5]^9*x[6]^2*x[9]^2*x[10]^4, -x[1]^6*x[2]^3*x[3]^2*x[4]^9*x[5]^8*x[6]^9*x[7]^10*x[8]^3*x[9]^8*x[10]^6 - x[1]^9*x[2]^9*x[3]^9*x[4]^10*x[5]*x[6]^7*x[7]^3*x[8]*x[9]^8*x[10]^4, -x[1]^6*x[2]*x[3]^8*x[4]^4*x[5]^8*x[6]^8*x[7]^3*x[8]^2*x[9]^3*x[10]^5 - x[2]^9*x[3]*x[4]^10*x[5]^3*x[6]^6*x[7]^7*x[9]^5*x[10]^3]; BSHSat(F,mul(x[i], i = 1 .. 10),tord); BSHC(F,tord); F := [-x[1]^10*x[2]^6*x[3]*x[5]^4*x[6]^9*x[7]^2*x[8]^9*x[9]^3*x[10]^5 + x[1]^6*x[2]^8*x[3]^5*x[5]*x[6]^8*x[7]^4*x[8]^2*x[9]*x[10]^4, x[1]^8*x[2]^9*x[4]^4*x[5]^8*x[8]^2*x[9]^8*x[10]^8 - x[1]^2*x[2]^8*x[3]^7*x[4]^4*x[5]^3*x[6]^2*x[7]^2*x[8]^8*x[9]^2*x[10]^7, x[1]^10*x[2]^8*x[3]^3*x[4]^8*x[5]*x[6]^4*x[7]^4*x[8]^7*x[10] - x[1]^4*x[2]^7*x[3]*x[5]^8*x[6]^6*x[8]^8*x[9]^4, -x[1]^3*x[2]^7*x[3]^4*x[5]^4*x[6]^9*x[7]^4*x[8]^4*x[9]^4*x[10]^9 + x[1]^5*x[2]^5*x[3]^6*x[5]^3*x[6]*x[7]^7*x[8]*x[9]*x[10]^3]; BSHSat(F,mul(x[i], i = 1 .. 10),tord); BSHC(F,tord); F := [x[1]^12*x[2]^7*x[3]^18*x[4]^3*x[5]^14*x[6]^19*x[7]^13*x[8]^20*x[9]^8*x[10]^3 - x[1]^6*x[2]^15*x[3]^3*x[4]^12*x[5]^2*x[6]^4*x[7]^2*x[8]^9*x[9]^8*x[10]^15, x[1]^16*x[2]^19*x[3]^16*x[4]^18*x[5]^15*x[6]^8*x[7]^15*x[8]^9*x[9]^18*x[10]^2 + x[1]^4*x[2]^20*x[3]^19*x[4]^7*x[5]^19*x[6]^5*x[7]^3*x[8]^9*x[9]^12*x[10]^3]; BSHSat(F,mul(x[i], i = 1 .. 10),tord); BSHC(F,tord); F := [x[1]^20*x[2]^11*x[3]^18*x[4]^30*x[5]^7*x[6]^25*x[7]^2*x[8]^16*x[9]^16*x[10]^2 - x[1]^4*x[2]^9*x[3]^25*x[4]^9*x[5]^26*x[6]*x[7]^7*x[8]^19*x[9]^14*x[10], x[1]^21*x[2]^7*x[3]^25*x[4]^28*x[5]*x[6]^10*x[7]^10*x[8]^29*x[9]^5*x[10]^7 + x[1]^22*x[2]^8*x[3]^19*x[4]^25*x[5]^2*x[6]^17*x[7]^24*x[8]^16*x[10]^4]; BSHSat(F,mul(x[i], i = 1 .. 10),tord); BSHC(F,tord);