Tue May  4 23:18:39 2004 run on Linux
% ----------------------------------------------------------------------
% $Id: cgb.tst,v 1.3 2003/10/12 14:55:24 sturm Exp $
% ----------------------------------------------------------------------
% Copyright (c) 1999 Andreas Dolzmann and Thomas Sturm
% ----------------------------------------------------------------------
% $Log: cgb.tst,v $
% Revision 1.3  2003/10/12 14:55:24  sturm
% The bootstrapping technique via remflag('(load!-package),'eval); does
% not work for CSL. Added corresponding preprocessing directive for now.
% As a consequence, under CSL "redlog" has to be loaded explicitly when
% using CGB.
%
% Revision 1.2  1999/04/13 21:50:44  sturm
% Removed echo, and gbverbose settings. There is no gbverbose.
%
% Revision 1.1  1999/04/05 08:30:45  dolzmann
% Copied and overworked Rev. 1.6 of the old cgb version.
%
% ----------------------------------------------------------------------
load_package redlog;



% Examples taken from the manual:

load_package groebner;



% 1 Introduction
oo := torder({x,y},lex)$


cgb {a*x,x+y};


{x + y,a*x,a*y}

gsys {a*x,x+y};


{{a <> 0,{x + y,a*x,a*y}},

 {a = 0,{x + y}}}

torder oo;


{{x,y},lex}


% 4 CGB: Comprehensive Groebner Basis
oo := torder({x,y},lex)$


cgb {a*x+y,x+b*y};


{x + b*y,a*x + y,(a*b - 1)*y}

torder oo;


{{x,y},lex}


% 5 GSYS: Groebner System
oo := torder({x,y},lex)$


gsys {a*x+y,x+b*y};


{{a*b - 1 <> 0 and a <> 0,

  {a*x + y,x + b*y,(a*b - 1)*y}},

 {a <> 0 and a*b - 1 = 0,

  {a*x + y,x + b*y}},

 {a = 0,{a*x + y,x + b*y}}}

torder oo;


{{x,y},lex}


% 6 GSYS2CGB: Groebner System to CGB
oo := torder({x,y},lex)$


gsys {a*x+y,x+b*y};


{{a*b - 1 <> 0 and a <> 0,

  {a*x + y,x + b*y,(a*b - 1)*y}},

 {a <> 0 and a*b - 1 = 0,

  {a*x + y,x + b*y}},

 {a = 0,{a*x + y,x + b*y}}}

gsys2cgb ws;


{x + b*y,a*x + y,(a*b - 1)*y}

torder oo;


{{x,y},lex}


% 7 Switch CGBREAL: Computing over the Real Numbers
oo := torder({x,y},lex)$


off cgbreal;


gsys {a*x+y,x-a*y};


   2
{{a  + 1 <> 0 and a <> 0,

                     2
  {a*x + y,x - a*y,(a  + 1)*y}},

              2
 {a <> 0 and a  + 1 = 0,{a*x + y,x - a*y}},

 {a = 0,{a*x + y,x - a*y}}}

on cgbreal;


gsys({a*x+y,x-a*y});


{{a <> 0,

                     2
  {a*x + y,x - a*y,(a  + 1)*y}},

 {a = 0,{a*x + y,x - a*y}}}

torder oo;


{{x,y},lex}


% Miscellaneous examples:

% Dolzmann's Example
oo := torder({x,y,z},lex);


oo := {{},lex}

cgb({a*x+b*y,c*x+d*y,(a*d-b*c)*z});


{c*x + d*y,

 a*x + b*y,

 (a*d - b*c)*y,

 (a*d - b*c)*z}

gsys({a*x+b*y,c*x+d*y,(a*d-b*c)*z});


{{a*d - b*c <> 0 and a <> 0 and c <> 0,

  {a*x + b*y,

   c*x + d*y,

   (a*d - b*c)*y,

   (a*d - b*c)*z}},

 {a*d - b*c <> 0 and a <> 0 and d <> 0 and c = 0,

  {a*x + b*y,c*x + d*y,(a*d - b*c)*z}},

 {a*d - b*c <> 0 and a <> 0 and c = 0 and d = 0,

  {a*x + b*y,(a*d - b*c)*z}},

 {a*d - b*c <> 0 and b <> 0 and c <> 0 and a = 0,

  {a*x + b*y,c*x + d*y,(a*d - b*c)*z}},

 {a*d - b*c <> 0 and b <> 0 and d <> 0 and a = 0 and c = 0,

  {a*x + b*y,c*x + d*y,(a*d - b*c)*z}},

 {a*d - b*c <> 0 and b <> 0 and a = 0 and c = 0 and d = 0,

  {a*x + b*y,(a*d - b*c)*z}},

 {a*d - b*c <> 0 and c <> 0 and a = 0 and b = 0,

  {c*x + d*y,(a*d - b*c)*z}},

 {a*d - b*c <> 0 and d <> 0 and a = 0 and b = 0 and c = 0,

  {c*x + d*y,(a*d - b*c)*z}},

 {a*d - b*c <> 0 and a = 0 and b = 0 and c = 0 and d = 0,

  {(a*d - b*c)*z}},

 {a <> 0 and c <> 0 and a*d - b*c = 0,

  {a*x + b*y,c*x + d*y}},

 {a <> 0 and d <> 0 and a*d - b*c = 0 and c = 0,

  {a*x + b*y,c*x + d*y}},

 {a <> 0 and a*d - b*c = 0 and c = 0 and d = 0,

  {a*x + b*y}},

 {b <> 0 and c <> 0 and a*d - b*c = 0 and a = 0,

  {a*x + b*y,c*x + d*y}},

 {b <> 0 and d <> 0 and a*d - b*c = 0 and a = 0 and c = 0,

  {a*x + b*y,c*x + d*y}},

 {b <> 0 and a*d - b*c = 0 and a = 0 and c = 0 and d = 0,

  {a*x + b*y}},

 {c <> 0 and a*d - b*c = 0 and a = 0 and b = 0,

  {c*x + d*y}},

 {d <> 0 and a*d - b*c = 0 and a = 0 and b = 0 and c = 0,

  {c*x + d*y}},

 {a*d - b*c = 0 and a = 0 and b = 0 and c = 0 and d = 0,

  {}}}

gsys2cgb ws;


{c*x + d*y,

 a*x + b*y,

 (a*d - b*c)*y,

 (a*d - b*c)*z}

torder oo;


{{x,y,z},lex}


% Forsman's Example (hybrid control system).
oo := torder({x1,x2,y2,y1,y0},lex);


oo := {{},lex}

gsys({(u1*u2-u1)*x1+u2*x2+y2,(u2-1)*x1+u2*x2+y1,-x2+y0});


{{u1*u2 - u1 <> 0,

  {(u1*u2 - u1)*x1 + u2*x2 + y2,

   (u2 - 1)*x1 + u2*x2 + y1,

   x2 - y0,

   y2 - u1*y1 - (u1*u2 - u2)*y0}},

 {u2 - 1 <> 0 and u2 <> 0 and u1*u2 - u1 = 0,

  {(u1*u2 - u1)*x1 + u2*x2 + y2,

   (u2 - 1)*x1 + u2*x2 + y1,

   (u1*u2 - u1)*x1 + y2 + u2*y0,

   x2 - y0}},

 {u1*u2 - u1 = 0 and u2 - 1 = 0,

  {(u1*u2 - u1)*x1 + u2*x2 + y2,

   (u2 - 1)*x1 + u2*x2 + y1,

   (u1*u2 - u1 - u2 + 1)*x1 + y2 - y1,

   (u2 - 1)*x1 + y1 + u2*y0,

   x2 - y0}},

 {u1*u2 - u1 = 0 and u2 = 0,

  {(u1*u2 - u1)*x1 + u2*x2 + y2,

   (u2 - 1)*x1 + u2*x2 + y1,

   x2 - y0}}}

torder oo;


{{x1,x2,y2,y1,y0},lex}


% Weispfenning's Example
oo := torder({x,y},lex);


oo := {{},lex}

gsys({v*x*y + x,u*y^2 + x^2});


{{u*v <> 0 and v <> 0,

    2      2
  {x  + u*y ,

   v*x*y + x,

          3      2
   (u*v)*y  + u*y }},

 {u <> 0 and v <> 0 and u*v = 0,

    2      2
  {x  + u*y ,

       3     3
   (u*v )*x*y  + u*x,

   v*x*y + x,

          3      2
   (u*v)*y  + u*y }},

 {u <> 0 and v = 0,

      2        2
  {v*x *y - u*y ,

    2      2
   x  + u*y ,

   v*x*y + x}},

 {v <> 0 and u*v = 0 and u = 0,

    2      2
  {x  + u*y ,v*x*y + x}},

 {u = 0 and v = 0,

    2      2
  {x  + u*y ,v*x*y + x}}}

torder oo;


{{x,y},lex}


% The folllowing three examples are taken from
% Weispfenning, Comprehensive Groebner Bases,
% J. Symbolic Computation (1992) 14, 1-29
   
% Weispfenning's Example 7.1
oo := torder({x},lex);


oo := {{},lex}

gsys({a0*x**2 + a1*x + a2,b0*x**2 + b1*x + b2});


    3   2     2                2              2      2        2
{{a0 *b2  - a0 *a1*b1*b2 - 2*a0 *a2*b0*b2 + a0 *a2*b1  + a0*a1 *b0*b2

                           2   2
   - a0*a1*a2*b0*b1 + a0*a2 *b0  <> 0 and a0*b1 - a1*b0 <> 0 and a0 <> 0

   and b0 <> 0,

     3   2     2                2              2      2        2
  {a0 *b2  - a0 *a1*b1*b2 - 2*a0 *a2*b0*b2 + a0 *a2*b1  + a0*a1 *b0*b2

                            2   2
    - a0*a1*a2*b0*b1 + a0*a2 *b0 }},

                                                   3   2     2
 {a0*b1 - a1*b0 <> 0 and a0 <> 0 and b0 <> 0 and a0 *b2  - a0 *a1*b1*b2

         2              2      2        2                               2   2
   - 2*a0 *a2*b0*b2 + a0 *a2*b1  + a0*a1 *b0*b2 - a0*a1*a2*b0*b1 + a0*a2 *b0

   = 0,

       2
  {a0*x  + a1*x + a2,

       2
   b0*x  + b1*x + b2,

   (a0*b1 - a1*b0)*x + (a0*b2 - a2*b0)}},

       2                   2
 {a0*b2  - a1*b1*b2 + a2*b1  <> 0 and a0 <> 0 and b1 <> 0 and b0 = 0,

               3                          2         2                   2
  {(a0*b0*b1)*x  - (a0*b0*b2 - a1*b0*b1)*x  - (a0*b2  - a1*b1*b2 + a2*b1 )}},

 {a0*b2 - a2*b0 <> 0 and a0 <> 0 and b0 <> 0 and a0*b1 - a1*b0 = 0,

  {(a0*b1 - a1*b0)*x + (a0*b2 - a2*b0)}},

 {a0 <> 0 and b0 <> 0 and a0*b1 - a1*b0 = 0 and a0*b2 - a2*b0 = 0,

       2                 2
  {a0*x  + a1*x + a2,b0*x  + b1*x + b2}},

                               2                   2
 {a0 <> 0 and b1 <> 0 and a0*b2  - a1*b1*b2 + a2*b1  = 0 and b0 = 0,

       2                 2
  {a0*x  + a1*x + a2,b0*x  + b1*x + b2}},

 {a0 <> 0 and b2 <> 0 and b0 = 0 and b1 = 0,

       2
  {b0*x  + b1*x + b2}},

 {a0 <> 0 and b0 = 0 and b1 = 0 and b2 = 0,

       2
  {a0*x  + a1*x + a2}},

    2                   2
 {a1 *b2 - a1*a2*b1 + a2 *b0 <> 0 and a1 <> 0 and b0 <> 0 and a0 = 0,

               3                          2      2                   2
  {(a0*a1*b0)*x  + (a0*a1*b1 - a0*a2*b0)*x  - (a1 *b2 - a1*a2*b1 + a2 *b0)}},

 {a1*b2 - a2*b1 <> 0 and a1 <> 0 and b1 <> 0 and a0 = 0 and b0 = 0,

                    2
  {(a0*b1 - a1*b0)*x  - (a1*b2 - a2*b1)}},

                                       2                   2
 {a1 <> 0 and b0 <> 0 and a0 = 0 and a1 *b2 - a1*a2*b1 + a2 *b0 = 0,

       2                 2
  {a0*x  + a1*x + a2,b0*x  + b1*x + b2}},

 {a1 <> 0 and b1 <> 0 and a0 = 0 and a1*b2 - a2*b1 = 0 and b0 = 0,

       2                 2
  {a0*x  + a1*x + a2,b0*x  + b1*x + b2}},

 {a1 <> 0 and b2 <> 0 and a0 = 0 and b0 = 0 and b1 = 0,

       2
  {b0*x  + b1*x + b2}},

 {a1 <> 0 and a0 = 0 and b0 = 0 and b1 = 0 and b2 = 0,

       2
  {a0*x  + a1*x + a2}},

 {a2 <> 0 and a0 = 0 and a1 = 0,

       2
  {a0*x  + a1*x + a2}},

 {b0 <> 0 and a0 = 0 and a1 = 0 and a2 = 0,

       2
  {b0*x  + b1*x + b2}},

 {b1 <> 0 and a0 = 0 and a1 = 0 and a2 = 0 and b0 = 0,

       2
  {b0*x  + b1*x + b2}},

 {b2 <> 0 and a0 = 0 and a1 = 0 and a2 = 0 and b0 = 0 and b1 = 0,

       2
  {b0*x  + b1*x + b2}},

 {a0 = 0 and a1 = 0 and a2 = 0 and b0 = 0 and b1 = 0 and b2 = 0,

  {}}}

torder oo;


{{x},lex}


% Weispfenning's Example 7.2
oo := torder({x,y},lex);


oo := {{},lex}

gsys({v*x*y + u*x**2 + x,u*y**2 + x**2});


   4        3
{{u *v + u*v  <> 0 and u <> 0 and v <> 0,

      2
  {u*x  + v*x*y + x,

    2      2
   x  + u*y ,

                2  2
   v*x*y + x - u *y ,

    3       5      2  3   3     5    2  2   2
   u *x + (u *v + u *v )*y  - (u  - u *v )*y ,

     7  2    4  4   4       4  3   3     4  2   2
   (u *v  + u *v )*y  + (2*u *v )*y  + (u *v )*y }},

                         4        3
 {u <> 0 and v <> 0 and u *v + u*v  = 0,

      2
  {u*x  + v*x*y + x,

    2      2
   x  + u*y ,

                2  2
   v*x*y + x - u *y ,

    3       5      2  3   3     5    2  2   2
   u *x + (u *v + u *v )*y  - (u  - u *v )*y ,

     7  2    4  4   4       4  3   3     4  2   2
   (u *v  + u *v )*y  + (2*u *v )*y  + (u *v )*y }},

 {u <> 0 and v = 0,

          2       3       3    5  4    2  2
  {(u*v)*x *y + (u *v)*x*y  - u *y  - u *y ,

      2
   u*x  + v*x*y + x,

    2      2
   x  + u*y ,

                2  2
   v*x*y + x - u *y }},

 {v <> 0 and u = 0,

      2              2      2
  {u*x  + v*x*y + x,x  + u*y }},

 {u = 0 and v = 0,

      2              2      2
  {u*x  + v*x*y + x,x  + u*y }}}

torder oo;


{{x,y},lex}


% Weispfenning's Example 7.3
oo := torder({x1,x2,x3,x4},lex);


oo := {{},lex}

gsys {x4 - (a4-a2),x1 + x2 + x3 + x4 + (a1 + a3 + a4),
   x1*x3 + x1*x4 + x2*x3 + x3*x4 - (a1*a4 + a1*a3 + a3*a4),x1*x3*x4 - a1*a3*a4};


       2                                  2     3     2          2
{{a1*a2  - a1*a2*a3 - 3*a1*a2*a4 + 2*a1*a4  - a2  + a2 *a3 + 4*a2 *a4

                         2          2       3
   - 3*a2*a3*a4 - 5*a2*a4  + 2*a3*a4  + 2*a4  <> 0 and a2 - a4 = 0,

                                             2
  {(a2 - a4)*x2*x3 - (a2 - a4)*x2*x4 + (a1*a2  - a1*a2*a3 - 3*a1*a2*a4

                2     3     2          2                          2          2
       + 2*a1*a4  - a2  + a2 *a3 + 4*a2 *a4 - 3*a2*a3*a4 - 5*a2*a4  + 2*a3*a4

             3
       + 2*a4 )}},

 {a2 - a4 <> 0,

  {x1*x3*x4 - a1*a3*a4,

   x1*x3 + x1*x4 + x2*x3 + x3*x4 - (a1*a3 + a1*a4 + a3*a4),

   x1 + x2 + x3 + x4 + (a1 + a3 + a4),

                    2
   (a2 - a4)*x2 - x3  - (a1 - a2 + a3 + 2*a4)*x3

                                   2                                   2
    + (a1*a2 - a1*a3 - 2*a1*a4 - a2  + a2*a3 + 3*a2*a4 - 2*a3*a4 - 2*a4 ),

     3                    2
   x3  + (a1 + a3 + a4)*x3  + (a1*a3 + a1*a4 + a3*a4)*x3 - a1*a3*a4,

   x4 + (a2 - a4)}},

       2                                  2     3     2          2
 {a1*a2  - a1*a2*a3 - 3*a1*a2*a4 + 2*a1*a4  - a2  + a2 *a3 + 4*a2 *a4

                         2          2       3
   - 3*a2*a3*a4 - 5*a2*a4  + 2*a3*a4  + 2*a4  = 0 and a2 - a4 = 0,

  {x1*x3*x4 - a1*a3*a4,

   x1*x3 + x1*x4 + x2*x3 + x3*x4 - (a1*a3 + a1*a4 + a3*a4),

   x1 + x2 + x3 + x4 + (a1 + a3 + a4),

                    2
   (a2 - a4)*x2 - x3  - (a1 - a2 + a3 + 2*a4)*x3

                                   2                                   2
    + (a1*a2 - a1*a3 - 2*a1*a4 - a2  + a2*a3 + 3*a2*a4 - 2*a3*a4 - 2*a4 ),

   x4 + (a2 - a4)}}}

torder oo;


{{x1,x2,x3,x4},lex}


% Pesch's example (Circle through three points)
oo := torder({y,x},revgradlex);


oo := {{},lex}

gsys({2*b2*y + 2*a2*x - b2**2 + a2**2,2*b1*y + 2*a1*x - b1**2 + a1**2});


    2           2        2        2
{{a1 *a2 - a1*a2  + a1*b2  - a2*b1  <> 0 and a1 <> 0 and a2 <> 0 and b1 = 0

   and b2 = 0,

                              2           2        2        2
  {(2*a1*b2 - 2*a2*b1)*y - (a1 *a2 - a1*a2  + a1*b2  - a2*b1 )}},

    2        2        2           2
 {a1 *b2 - a2 *b1 - b1 *b2 + b1*b2  <> 0 and b1 <> 0 and b2 <> 0

   and a1*b2 - a2*b1 = 0,

                              2        2        2           2
  {(2*a1*b2 - 2*a2*b1)*x + (a1 *b2 - a2 *b1 - b1 *b2 + b1*b2 )}},

    2     2
 {a1  - b1  <> 0 and a1 = 0 and b1 = 0,

                            2     2
  {(2*b1)*y + (2*a1)*x + (a1  - b1 )}},

 {a1*b2 - a2*b1 <> 0 and b1 <> 0 and b2 <> 0,

                            2     2
  {(2*b1)*y + (2*a1)*x + (a1  - b1 ),

                            2     2
   (2*b2)*y + (2*a2)*x + (a2  - b2 ),

                              2        2        2           2
   (2*a1*b2 - 2*a2*b1)*x + (a1 *b2 - a2 *b1 - b1 *b2 + b1*b2 )}},

                2     2
 {a1 <> 0 and a2  - b2  <> 0 and a2 = 0 and b1 = 0 and b2 = 0,

                            2     2
  {(2*b2)*y + (2*a2)*x + (a2  - b2 )}},

                            2           2        2        2
 {a1 <> 0 and a2 <> 0 and a1 *a2 - a1*a2  + a1*b2  - a2*b1  = 0 and b1 = 0

   and b2 = 0,

                            2     2
  {(2*b1)*y + (2*a1)*x + (a1  - b1 ),

                            2     2
   (2*b2)*y + (2*a2)*x + (a2  - b2 )}},

 {a1 <> 0 and b2 <> 0 and b1 = 0,

                            2     2
  {(2*b1)*y + (2*a1)*x + (a1  - b1 ),

                            2     2
   (2*b2)*y + (2*a2)*x + (a2  - b2 )}},

                2     2
 {a1 <> 0 and a2  - b2  = 0 and a2 = 0 and b1 = 0 and b2 = 0,

                            2     2
  {(2*b1)*y + (2*a1)*x + (a1  - b1 )}},

    2     2
 {a2  - b2  <> 0 and b1 <> 0 and a2 = 0 and b2 = 0,

                            2     2
  {(2*b2)*y + (2*a2)*x + (a2  - b2 )}},

    2     2            2     2
 {a2  - b2  <> 0 and a1  - b1  = 0 and a1 = 0 and a2 = 0 and b1 = 0 and b2 = 0,

                            2     2
  {(2*b2)*y + (2*a2)*x + (a2  - b2 )}},

 {a2 <> 0 and b1 <> 0 and b2 = 0,

                            2     2
  {(2*b1)*y + (2*a1)*x + (a1  - b1 ),

                            2     2
   (2*b2)*y + (2*a2)*x + (a2  - b2 )}},

                2     2
 {a2 <> 0 and a1  - b1  = 0 and a1 = 0 and b1 = 0 and b2 = 0,

                            2     2
  {(2*b2)*y + (2*a2)*x + (a2  - b2 )}},

                            2        2        2           2
 {b1 <> 0 and b2 <> 0 and a1 *b2 - a2 *b1 - b1 *b2 + b1*b2  = 0

   and a1*b2 - a2*b1 = 0,

                            2     2
  {(2*b1)*y + (2*a1)*x + (a1  - b1 ),

                            2     2
   (2*b2)*y + (2*a2)*x + (a2  - b2 )}},

                2     2
 {b1 <> 0 and a2  - b2  = 0 and a2 = 0 and b2 = 0,

                            2     2
  {(2*b1)*y + (2*a1)*x + (a1  - b1 )}},

                2     2
 {b2 <> 0 and a1  - b1  = 0 and a1 = 0 and b1 = 0,

                            2     2
  {(2*b2)*y + (2*a2)*x + (a2  - b2 )}},

    2     2                      2     2
 {a1  - b1  = 0 and a1 = 0 and a2  - b2  = 0 and a2 = 0 and b1 = 0 and b2 = 0,

  {}}}

torder oo;


{{y,x},revgradlex}


% Effelterre's example (Aspect graphs)
f1 := -4-4*v**2-4*u**2+40*v*v1+24*v-120*v1+8*u-40*v2-68*v1**2-100*v2**2+40*u*v2+
24*v1*v2-4*v1**2*u-4*v2**2*v**2+24*v2**2*v-24*v1*u*v2+8*v*v1*u*v2$


f2 := 8*v*v1*u*v2-4*v1**2*u**2+4*v1**2-4*v2**2*v**2+4*v2**2-16*v**2-16*u**2+16$


f3 := 16*v-48*u+16*v*v1**2-48*u*v2**2-12*v1**2*u+4*v2**2*v-36*v*v1*v2+
12*v1*u*v2+12*v*v2**2*u-
80*u*v1+80*v2*v-20*v1*u*v2**2+20*v2*v*v1**2-20*v1**3*u+20*v2**3*v-12*v1**2*v*u+
12*v2*v**2*v1-12*v1*u**2*v2$


f4 := -160u*v2-1596v2**2+3200*v2-1596-4*u**2+160*u$



% Special case I2, v1=0
oo := torder({v,u},lex);


oo := {{},lex}

gsys(sub(v1=0,{f1,f2,f4}));


                  16                   15                    14
{{1000557799569*v2   - 8971728968760*v2   + 32332553961916*v2

                      13                    12                   11
   - 56816638983720*v2   + 43557281160966*v2   - 2232864400680*v2

                     10                    9                    8
   - 2141149653636*v2   - 24710286679320*v2  + 22557177598385*v2

                     7                   6                   5
   - 4364899181280*v2  + 1970637124608*v2  - 2915313822720*v2

                     4                   3                  2
   + 1467702460416*v2  - 1340557025280*v2  + 685570158592*v2  - 140796887040*v2

                                  7            6            5           4
   + 63647907840 <> 0 and 55175*v2  - 184787*v2  + 144885*v2  + 44895*v2

             3           2
   - 13020*v2  - 35580*v2  + 320*v2 - 6368 <> 0,

                   16                   15                    14
  {1000557799569*v2   - 8971728968760*v2   + 32332553961916*v2

                       13                    12                   11
    - 56816638983720*v2   + 43557281160966*v2   - 2232864400680*v2

                      10                    9                    8
    - 2141149653636*v2   - 24710286679320*v2  + 22557177598385*v2

                      7                   6                   5
    - 4364899181280*v2  + 1970637124608*v2  - 2915313822720*v2

                      4                   3                  2
    + 1467702460416*v2  - 1340557025280*v2  + 685570158592*v2  - 140796887040*v2

    + 63647907840}},

            8              7              6             5             4
 {3389663*v2  - 14658420*v2  + 20230730*v2  - 6945060*v2  - 3218385*v2

              3             2                                       7
   - 497040*v2  + 1656704*v2  - 257280*v2 + 255872 <> 0 and 55175*v2

              6            5           4           3           2
   - 184787*v2  + 144885*v2  + 44895*v2  - 13020*v2  - 35580*v2  + 320*v2 - 6368

   = 0,

             7            6            5            4           3            2
  {(220700*v2  - 739148*v2  + 579540*v2  + 179580*v2  - 52080*v2  - 142320*v2

                                       8              7              6
     + 1280*v2 - 25472)*u + (3389663*v2  - 14658420*v2  + 20230730*v2

                   5             4            3             2
       - 6945060*v2  - 3218385*v2  - 497040*v2  + 1656704*v2  - 257280*v2

       + 255872)}},

          7            6            5           4           3           2
 {55175*v2  - 184787*v2  + 144885*v2  + 44895*v2  - 13020*v2  - 35580*v2

                                            16                   15
   + 320*v2 - 6368 <> 0 and 1000557799569*v2   - 8971728968760*v2

                      14                    13                    12
   + 32332553961916*v2   - 56816638983720*v2   + 43557281160966*v2

                     11                   10                    9
   - 2232864400680*v2   - 2141149653636*v2   - 24710286679320*v2

                      8                   7                   6
   + 22557177598385*v2  - 4364899181280*v2  + 1970637124608*v2

                     5                   4                   3
   - 2915313822720*v2  + 1467702460416*v2  - 1340557025280*v2

                    2
   + 685570158592*v2  - 140796887040*v2 + 63647907840 = 0,

      2       2        2           2                         2
  {(v2  + 1)*v  - (6*v2  + 6)*v + u  - (10*v2 + 2)*u + (25*v2  + 10*v2 + 1),

      2       2      2      2
   (v2  + 4)*v  + 4*u  - (v2  + 4),

        4        2                  3         2
   (6*v2  + 30*v2  + 24)*v - (110*v2  - 122*v2  - 40*v2 - 8)*u

              4          3          2
    - (1223*v2  - 2390*v2  + 1303*v2  + 40*v2 + 8),

    2                           2
   u  + (40*v2 - 40)*u + (399*v2  - 800*v2 + 399),

             7            6            5            4           3            2
   (220700*v2  - 739148*v2  + 579540*v2  + 179580*v2  - 52080*v2  - 142320*v2

                                       8              7              6
     + 1280*v2 - 25472)*u + (3389663*v2  - 14658420*v2  + 20230730*v2

                   5             4            3             2
       - 6945060*v2  - 3218385*v2  - 497040*v2  + 1656704*v2  - 257280*v2

       + 255872)}},

            8              7              6             5             4
 {3389663*v2  - 14658420*v2  + 20230730*v2  - 6945060*v2  - 3218385*v2

              3             2                                      7
   - 497040*v2  + 1656704*v2  - 257280*v2 + 255872 = 0 and 55175*v2

              6            5           4           3           2
   - 184787*v2  + 144885*v2  + 44895*v2  - 13020*v2  - 35580*v2  + 320*v2 - 6368

   = 0,

      2       2        2           2                         2
  {(v2  + 1)*v  - (6*v2  + 6)*v + u  - (10*v2 + 2)*u + (25*v2  + 10*v2 + 1),

      2       2      2      2
   (v2  + 4)*v  + 4*u  - (v2  + 4),

        4        2                  3         2
   (6*v2  + 30*v2  + 24)*v - (110*v2  - 122*v2  - 40*v2 - 8)*u

              4          3          2
    - (1223*v2  - 2390*v2  + 1303*v2  + 40*v2 + 8),

    2                           2
   u  + (40*v2 - 40)*u + (399*v2  - 800*v2 + 399)}}}

torder oo;


{{v,u},lex}

clear f1,f2,f3,f4;



% Sit's Example 2.2
oo := torder({z2,z2},revgradlex);


oo := {{},lex}

gsys({d*z2 + c*z1 - v,b*z2 + a*z1 - u});


{{a*d*z1 - b*c*z1 + b*v - d*u <> 0 and b <> 0 and d <> 0,

  {a*d*z1 - b*c*z1 + b*v - d*u}},

 {a*z1 - u <> 0 and b = 0,

  {b*z2 + (a*z1 - u)}},

 {b <> 0 and c*z1 - v <> 0 and d = 0,

  {d*z2 + (c*z1 - v)}},

 {b <> 0 and d <> 0 and a*d*z1 - b*c*z1 + b*v - d*u = 0,

  {b*z2 + (a*z1 - u),d*z2 + (c*z1 - v)}},

 {b <> 0 and c*z1 - v = 0 and d = 0,

  {b*z2 + (a*z1 - u)}},

 {c*z1 - v <> 0 and a*z1 - u = 0 and b = 0 and d = 0,

  {d*z2 + (c*z1 - v)}},

 {d <> 0 and a*z1 - u = 0 and b = 0,

  {d*z2 + (c*z1 - v)}},

 {a*z1 - u = 0 and b = 0 and c*z1 - v = 0 and d = 0,

  {}}}

torder oo;


{{z2,z2},revgradlex}


% Sit's Example 2.3
oo := torder({z2,z2},revgradlex);


oo := {{},lex}

gsys({x**3*z2 + (x**2+1)*z1,x**2*z2 + x*z1 - 1});


   2
{{x *z1 + z1 <> 0 and x = 0,

    3        2
  {x *z2 + (x *z1 + z1)}},

                     2
 {x*z1 - 1 <> 0 and x *z1 + z1 = 0 and x = 0,

    2
  {x *z2 + (x*z1 - 1)}},

 {x + z1 <> 0 and x <> 0,{x + z1}},

 {x <> 0 and x + z1 = 0,

    3        2           2
  {x *z2 + (x *z1 + z1),x *z2 + (x*z1 - 1)}},

   2
 {x *z1 + z1 = 0 and x*z1 - 1 = 0 and x = 0,{}}}

torder oo;


{{z2,z2},revgradlex}


% Sit's Example 3.3
oo := torder({z3,z2,z2},revgradlex);


oo := {{},lex}

gsys({z3 + b*z2 + a*z1 - 1,a*z3 + z2 + b*z1 - 1,b*z3 + a*z2 + z1 - 1});


   3       2
{{a *z1 - a  - 2*a*b*z1 + a*b + a + z1 - 1 <> 0 and a <> 0 and b = 0,

       2             3       2
  {(a*b  - b)*z3 - (a *z1 - a  - 2*a*b*z1 + a*b + a + z1 - 1)}},

   3       2                         3       2                            2
 {a *z1 - a  - 3*a*b*z1 + a*b + a + b *z1 - b  + b + z1 - 1 <> 0 and a - b  <> 0

   and a <> 0 and b <> 0,

    3       2                         3       2
  {a *z1 - a  - 3*a*b*z1 + a*b + a + b *z1 - b  + b + z1 - 1}},

   2
 {a *z1 - a - b*z1 + 1 <> 0 and a <> 0 and b <> 0 and a*b*z1 - b - z1 + 1 = 0

                            2
   and a*b - 1 = 0 and a - b  = 0,

                    2
  {(a*b - 1)*z2 + (a *z1 - a - b*z1 + 1)}},

                  3       2
 {2*a*b*z1 - a - b *z1 + b  - b - z1 + 1 <> 0 and b <> 0 and a = 0,

     2      2                        3       2
  {(a  - a*b )*z3 + (2*a*b*z1 - a - b *z1 + b  - b - z1 + 1)}},

                                                          2
 {a*b*z1 - b - z1 + 1 <> 0 and a <> 0 and b <> 0 and a - b  = 0,

         2
  {(a - b )*z2 - (a*b*z1 - b - z1 + 1)}},

                                                                          2
 {a*b - 1 <> 0 and a <> 0 and b <> 0 and a*b*z1 - b - z1 + 1 = 0 and a - b  = 0,

  {z3 + b*z2 + (a*z1 - 1),

   b*z3 + a*z2 + (z1 - 1),

   a*z3 + z2 + (b*z1 - 1),

                    2
   (a*b - 1)*z2 + (a *z1 - a - b*z1 + 1)}},

       2
 {a - b  <> 0 and a <> 0 and b <> 0

        3       2                         3       2
   and a *z1 - a  - 3*a*b*z1 + a*b + a + b *z1 - b  + b + z1 - 1 = 0,

  {z3 + b*z2 + (a*z1 - 1),

   b*z3 + a*z2 + (z1 - 1),

   a*z3 + z2 + (b*z1 - 1),

         2
   (a - b )*z2 - (a*b*z1 - b - z1 + 1)}},

                         2
 {a <> 0 and b <> 0 and a *z1 - a - b*z1 + 1 = 0 and a*b*z1 - b - z1 + 1 = 0

                            2
   and a*b - 1 = 0 and a - b  = 0,

  {z3 + b*z2 + (a*z1 - 1),

   b*z3 + a*z2 + (z1 - 1),

   a*z3 + z2 + (b*z1 - 1)}},

              3       2
 {a <> 0 and a *z1 - a  - 2*a*b*z1 + a*b + a + z1 - 1 = 0 and b = 0,

  {z3 + b*z2 + (a*z1 - 1),

   b*z3 + a*z2 + (z1 - 1),

   a*z3 + z2 + (b*z1 - 1)}},

                             3       2
 {b <> 0 and 2*a*b*z1 - a - b *z1 + b  - b - z1 + 1 = 0 and a = 0,

  {z3 + b*z2 + (a*z1 - 1),

   b*z3 + a*z2 + (z1 - 1),

   a*z3 + z2 + (b*z1 - 1)}},

 {z1 - 1 <> 0 and a = 0 and b = 0,

  {b*z3 + a*z2 + (z1 - 1)}},

 {a = 0 and b = 0 and z1 - 1 = 0,

  {z3 + b*z2 + (a*z1 - 1),a*z3 + z2 + (b*z1 - 1)}}}

torder oo;


{{z3,z2,z2},revgradlex}


% Sit's Example 8.3
oo := torder({z4,z3,z2,z2},revgradlex);


oo := {{},lex}

gsys({z4 + c*z3 + b*z2 + a*z1 - w2,2*z4 + z2 - w1,a*z4 - z3 - w4,d*z4 + z3 +
2*z1 - w3,z4 + z1 - w5});


   3         2           2  2         2  2       2           2         2
{{a *c*z1 + a *b*c*w1 + a *c *w3 - 2*a *c *z1 + a *c*d*z1 - a *c*w2 + a *z1

                                                                     2
   + a*b*c*d*w1 - 2*a*b*c*w3 - 2*a*b*c*w4 + 4*a*b*c*z1 + a*b*w1 - a*c *d*w4

   - a*c*d*w2 + 2*a*c*w3 + a*c*w4 - 4*a*c*z1 + a*d*z1 - a*w2 + b*d*w1 - 2*b*w3

   - 2*b*w4 + 4*b*z1 - c*d*w4 - d*w2 + w3 + w4 - 2*z1 <> 0 and a*b + b*d <> 0

   and a*c + 1 <> 0 and a <> 0 and d <> 0,

    3         2           2  2         2  2       2           2         2
  {a *c*z1 + a *b*c*w1 + a *c *w3 - 2*a *c *z1 + a *c*d*z1 - a *c*w2 + a *z1

                                                                      2
    + a*b*c*d*w1 - 2*a*b*c*w3 - 2*a*b*c*w4 + 4*a*b*c*z1 + a*b*w1 - a*c *d*w4

    - a*c*d*w2 + 2*a*c*w3 + a*c*w4 - 4*a*c*z1 + a*d*z1 - a*w2 + b*d*w1 - 2*b*w3

    - 2*b*w4 + 4*b*z1 - c*d*w4 - d*w2 + w3 + w4 - 2*z1}},

   3         2           2         2         2
 {a *c*z1 + a *b*c*w1 - a *c*w2 - a *c*w5 + a *c*z1 - 2*a*b*c*w4 + 2*a*b*w5

   - 2*a*b*z1 + 2*a*c*w4 - a*w5 + a*z1 - 2*b*w4 + w4 <> 0 and a*b <> 0

   and a*c - 2*b + 1 <> 0 and a <> 0 and d <> 0 and a*c + 1 = 0

   and a*w3 - 2*a*z1 - d*w4 = 0 and a + d = 0,

     2  2                                     3         2           2
  {(a *c  - 2*a*b*c + 2*a*c - 2*b + 1)*z3 + (a *c*z1 + a *b*c*w1 - a *c*w2

          2         2
       - a *c*w5 + a *c*z1 - 2*a*b*c*w4 + 2*a*b*w5 - 2*a*b*z1 + 2*a*c*w4 - a*w5

       + a*z1 - 2*b*w4 + w4)}},

   3         2             2           2         2         2
 {a *z1 + 2*a *b*c*w3 - 4*a *b*c*z1 + a *b*w1 + a *d*z1 - a *w2 - 2*a*b*c*d*w4

   + a*b*d*w1 - 2*a*b*w4 - a*d*w2 + a*w4 - 2*b*d*w4 + d*w4 <> 0 and a*b <> 0

   and a + d <> 0 and a <> 0 and d <> 0 and a*c + 1 = 0,

       2        2                                                       3
  {(2*a *b*c - a *c + 2*a*b*c*d + 2*a*b - a*c*d - a + 2*b*d - d)*z3 - (a *z1

            2             2           2         2         2
       + 2*a *b*c*w3 - 4*a *b*c*z1 + a *b*w1 + a *d*z1 - a *w2 - 2*a*b*c*d*w4

       + a*b*d*w1 - 2*a*b*w4 - a*d*w2 + a*w4 - 2*b*d*w4 + d*w4)}},

   2  2       2  2       2                                                2
 {a *c *w5 - a *c *z1 + a *c*z1 + a*b*c*w1 - 2*a*b*c*w5 + 2*a*b*c*z1 - a*c *w4

   - a*c*w2 + 2*a*c*w5 - 2*a*c*z1 + a*z1 + b*w1 - 2*b*w5 + 2*b*z1 - c*w4 - w2

   + w5 - z1 <> 0 and a*c - 2*b + 1 <> 0 and a*c + 1 <> 0 and a <> 0 and d <> 0 

       2
  and a *z1 + a*c*w3 - 2*a*c*z1 + a*d*z1 - a*w2 - c*d*w4 - d*w2 + w3 + w4 - 2*z1

   = 0 and a*b + b*d = 0,

    2  2       2  2       2                                                2
  {a *c *w5 - a *c *z1 + a *c*z1 + a*b*c*w1 - 2*a*b*c*w5 + 2*a*b*c*z1 - a*c *w4

    - a*c*w2 + 2*a*c*w5 - 2*a*c*z1 + a*z1 + b*w1 - 2*b*w5 + 2*b*z1 - c*w4 - w2

    + w5 - z1}},

   2           2         2       2
 {a *c*w3 - 2*a *c*z1 + a *w5 - a *z1 - a*c*d*w4 + a*d*w5 - a*d*z1 - a*w4 - d*w4

                                                               3
   <> 0 and a*b <> 0 and a + d <> 0 and a <> 0 and d <> 0 and a *z1

        2             2           2         2         2
   + 2*a *b*c*w3 - 4*a *b*c*z1 + a *b*w1 + a *d*z1 - a *w2 - 2*a*b*c*d*w4

   + a*b*d*w1 - 2*a*b*w4 - a*d*w2 + a*w4 - 2*b*d*w4 + d*w4 = 0 and a*c + 1 = 0,

     2                           2           2         2       2
  {(a *c + a*c*d + a + d)*z3 - (a *c*w3 - 2*a *c*z1 + a *w5 - a *z1 - a*c*d*w4

       + a*d*w5 - a*d*z1 - a*w4 - d*w4)}},

   2         2
 {a *c*w5 - a *c*z1 + a*c*d*w5 - a*c*d*z1 - a*c*w3 - a*c*w4 + 2*a*c*z1 + a*w5

   - a*z1 + d*w5 - d*z1 - w3 - w4 + 2*z1 <> 0 and a*b + b*d <> 0

                                               3         2           2  2
   and a*c + 1 <> 0 and a <> 0 and d <> 0 and a *c*z1 + a *b*c*w1 + a *c *w3

        2  2       2           2         2
   - 2*a *c *z1 + a *c*d*z1 - a *c*w2 + a *z1 + a*b*c*d*w1 - 2*a*b*c*w3

                                           2
   - 2*a*b*c*w4 + 4*a*b*c*z1 + a*b*w1 - a*c *d*w4 - a*c*d*w2 + 2*a*c*w3 + a*c*w4

   - 4*a*c*z1 + a*d*z1 - a*w2 + b*d*w1 - 2*b*w3 - 2*b*w4 + 4*b*z1 - c*d*w4

   - d*w2 + w3 + w4 - 2*z1 = 0,

    2         2
  {a *c*w5 - a *c*z1 + a*c*d*w5 - a*c*d*z1 - a*c*w3 - a*c*w4 + 2*a*c*z1 + a*w5

    - a*z1 + d*w5 - d*z1 - w3 - w4 + 2*z1}},

   2
 {a *z1 + a*b*w1 + a*c*w3 - 2*a*c*z1 - a*w2 - 2*b*w3 - 2*b*w4 + 4*b*z1 + w3 + w4

   - 2*z1 <> 0 and a*b <> 0 and a <> 0 and d = 0,

                              2
  {(a*c*d - 2*b*d + d)*z4 - (a *z1 + a*b*w1 + a*c*w3 - 2*a*c*z1 - a*w2 - 2*b*w3

       - 2*b*w4 + 4*b*z1 + w3 + w4 - 2*z1)}},

   2
 {a *z1 + a*b*w1 - a*w2 - 2*b*w4 + w4 <> 0 and a*b <> 0 and a <> 0 and d <> 0

   and a*c - 2*b + 1 = 0 and a*c + 1 = 0 and a*w3 - 2*a*z1 - d*w4 = 0

   and a + d = 0,

                          2
  {(a*c - 2*b + 1)*z3 + (a *z1 + a*b*w1 - a*w2 - 2*b*w4 + w4)}},

   2
 {a *z1 + a*c*w3 - 2*a*c*z1 + a*d*z1 - a*w2 - c*d*w4 - d*w2 + w3 + w4 - 2*z1

   <> 0 and a*c + 1 <> 0 and a <> 0 and d <> 0 and a*b + b*d = 0,

                      2
  {(a*b + b*d)*z2 + (a *z1 + a*c*w3 - 2*a*c*z1 + a*d*z1 - a*w2 - c*d*w4 - d*w2

       + w3 + w4 - 2*z1)}},

   2
 {a *z1 + a*c*w3 - 2*a*c*z1 - a*w2 + w3 + w4 - 2*z1 <> 0 and a <> 0 and a*b = 0

   and d = 0,

  {(a*c*d + d)*z4 - (a*b)*z2

        2
    - (a *z1 + a*c*w3 - 2*a*c*z1 - a*w2 + w3 + w4 - 2*z1)}},

   2
 {a *z1 - a*w2 + w4 <> 0 and a <> 0 and d <> 0 and a*b = 0 and a*c + 1 = 0,

                               2
  {(a*c + 1)*z3 + (a*b)*z2 + (a *z1 - a*w2 + w4)}},

                                                             3         2
 {a*b + b*d <> 0 and a*c + 1 <> 0 and a <> 0 and d <> 0 and a *c*z1 + a *b*c*w1

      2  2         2  2       2           2         2
   + a *c *w3 - 2*a *c *z1 + a *c*d*z1 - a *c*w2 + a *z1 + a*b*c*d*w1

                                                        2
   - 2*a*b*c*w3 - 2*a*b*c*w4 + 4*a*b*c*z1 + a*b*w1 - a*c *d*w4 - a*c*d*w2

   + 2*a*c*w3 + a*c*w4 - 4*a*c*z1 + a*d*z1 - a*w2 + b*d*w1 - 2*b*w3 - 2*b*w4

                                                      2         2
   + 4*b*z1 - c*d*w4 - d*w2 + w3 + w4 - 2*z1 = 0 and a *c*w5 - a *c*z1

   + a*c*d*w5 - a*c*d*z1 - a*c*w3 - a*c*w4 + 2*a*c*z1 + a*w5 - a*z1 + d*w5

   - d*z1 - w3 - w4 + 2*z1 = 0,

  {z4 + c*z3 + b*z2 + (a*z1 - w2),

   a*z4 - z3 - w4,

   d*z4 + z3 - (w3 - 2*z1),

   2*z4 + z2 - w1,

   z4 - (w5 - z1),

                               2
   (a*c + 1)*z3 + (a*b)*z2 + (a *z1 - a*w2 + w4),

                      2
   (a*b + b*d)*z2 + (a *z1 + a*c*w3 - 2*a*c*z1 + a*d*z1 - a*w2 - c*d*w4 - d*w2

       + w3 + w4 - 2*z1)}},

                                                             3         2
 {a*b <> 0 and a*c - 2*b + 1 <> 0 and a <> 0 and d <> 0 and a *c*z1 + a *b*c*w1

      2         2         2
   - a *c*w2 - a *c*w5 + a *c*z1 - 2*a*b*c*w4 + 2*a*b*w5 - 2*a*b*z1 + 2*a*c*w4

   - a*w5 + a*z1 - 2*b*w4 + w4 = 0 and a*c + 1 = 0 and a*w3 - 2*a*z1 - d*w4 = 0

   and a + d = 0,

  {z4 + c*z3 + b*z2 + (a*z1 - w2),

   a*z4 - z3 - w4,

   d*z4 + z3 - (w3 - 2*z1),

   2*z4 + z2 - w1,

   z4 - (w5 - z1),

                               2
   (a*c + 1)*z3 + (a*b)*z2 + (a *z1 - a*w2 + w4),

                          2
   (a*c - 2*b + 1)*z3 + (a *z1 + a*b*w1 - a*w2 - 2*b*w4 + w4)}},

 {a*b <> 0 and a*w3 - 2*a*z1 - d*w4 <> 0 and a <> 0 and d <> 0 and a*c + 1 = 0

   and a + d = 0,

  {(a + d)*z3 - (a*w3 - 2*a*z1 - d*w4)}},

                                                                 2
 {a*b <> 0 and a*w5 - a*z1 - w3 - w4 + 2*z1 <> 0 and a <> 0 and a *z1 + a*b*w1

   + a*c*w3 - 2*a*c*z1 - a*w2 - 2*b*w3 - 2*b*w4 + 4*b*z1 + w3 + w4 - 2*z1 = 0

   and d = 0,

  {d*z4 + (a*w5 - a*z1 - w3 - w4 + 2*z1)}},

                                                     3         2
 {a*b <> 0 and a + d <> 0 and a <> 0 and d <> 0 and a *z1 + 2*a *b*c*w3

        2           2         2         2
   - 4*a *b*c*z1 + a *b*w1 + a *d*z1 - a *w2 - 2*a*b*c*d*w4 + a*b*d*w1

   - 2*a*b*w4 - a*d*w2 + a*w4 - 2*b*d*w4 + d*w4 = 0 and 

   2           2         2       2
  a *c*w3 - 2*a *c*z1 + a *w5 - a *z1 - a*c*d*w4 + a*d*w5 - a*d*z1 - a*w4 - d*w4

   = 0 and a*c + 1 = 0,

  {z4 + c*z3 + b*z2 + (a*z1 - w2),

   a*z4 - z3 - w4,

   d*z4 + z3 - (w3 - 2*z1),

   2*z4 + z2 - w1,

   z4 - (w5 - z1),

                               2
   (a*c + 1)*z3 + (a*b)*z2 + (a *z1 - a*w2 + w4),

   (a + d)*z3 - (a*w3 - 2*a*z1 - d*w4)}},

                                      2
 {a*b <> 0 and a <> 0 and d <> 0 and a *z1 + a*b*w1 - a*w2 - 2*b*w4 + w4 = 0

   and a*c - 2*b + 1 = 0 and a*c + 1 = 0 and a*w3 - 2*a*z1 - d*w4 = 0

   and a + d = 0,

  {z4 + c*z3 + b*z2 + (a*z1 - w2),

   a*z4 - z3 - w4,

   d*z4 + z3 - (w3 - 2*z1),

   2*z4 + z2 - w1,

   z4 - (w5 - z1),

                               2
   (a*c + 1)*z3 + (a*b)*z2 + (a *z1 - a*w2 + w4),

   z3 - (a*w5 - a*z1 - w4)}},

                           2
 {a*b <> 0 and a <> 0 and a *z1 + a*b*w1 + a*c*w3 - 2*a*c*z1 - a*w2 - 2*b*w3

   - 2*b*w4 + 4*b*z1 + w3 + w4 - 2*z1 = 0 and a*w5 - a*z1 - w3 - w4 + 2*z1 = 0

   and d = 0,

  {z4 + c*z3 + b*z2 + (a*z1 - w2),

   a*z4 - z3 - w4,

   d*z4 + z3 - (w3 - 2*z1),

   2*z4 + z2 - w1,

   (a*c*d + d)*z4 - (a*b)*z2

        2
    - (a *z1 + a*c*w3 - 2*a*c*z1 - a*w2 + w3 + w4 - 2*z1),

   z4 - (w5 - z1)}},

       2           2
 {a*c*d *z1 + b*c*d *w1 - 2*b*c*d*w3 + 4*b*c*d*z1 - 2*b*d*w5 + 2*b*d*z1 + 2*b*w3

                 2         2         2
   - 4*b*z1 - c*d *w2 - c*d *w5 + c*d *z1 + 2*c*d*w3 - 4*c*d*z1 + d*w5 - d*z1

   - w3 + 2*z1 <> 0 and a <> 0 and b*d <> 0 and 2*b + c*d - 1 <> 0 and d <> 0

        2
   and a *z1 - a*w2 + w4 = 0 and a*b = 0 and a*c + 1 = 0 and c*d - 1 = 0,

                     2  2                         2           2
  {(2*b*c*d - 2*b + c *d  - 2*c*d + 1)*z3 + (a*c*d *z1 + b*c*d *w1 - 2*b*c*d*w3

                                                                 2         2
       + 4*b*c*d*z1 - 2*b*d*w5 + 2*b*d*z1 + 2*b*w3 - 4*b*z1 - c*d *w2 - c*d *w5

            2
       + c*d *z1 + 2*c*d*w3 - 4*c*d*z1 + d*w5 - d*z1 - w3 + 2*z1)}},

 {a*c*d*z1 - a*z1 + b*c*d*w1 - 2*b*c*d*w5 + 2*b*c*d*z1 - b*w1 + 2*b*w5 - 2*b*z1

      2  2       2  2       2           2
   - c *d *w5 + c *d *z1 + c *d*w3 - 2*c *d*z1 - c*d*w2 + 2*c*d*w5 - 2*c*d*z1

   - c*w3 + 2*c*z1 + w2 - w5 + z1 <> 0 and a <> 0 and 2*b + c*d - 1 <> 0

                                    2
   and c*d - 1 <> 0 and d <> 0 and a *z1 - a*w2 + w4 = 0 and a*b = 0

   and a*c + 1 = 0,

  {a*c*d*z1 - a*z1 + b*c*d*w1 - 2*b*c*d*w5 + 2*b*c*d*z1 - b*w1 + 2*b*w5 - 2*b*z1

       2  2       2  2       2           2
    - c *d *w5 + c *d *z1 + c *d*w3 - 2*c *d*z1 - c*d*w2 + 2*c*d*w5 - 2*c*d*z1

    - c*w3 + 2*c*z1 + w2 - w5 + z1}},

 {a*c*w1 + 2*a*z1 - 2*c*w4 + w1 - 2*w2 <> 0 and a*c + 1 <> 0 and a <> 0

   and d <> 0 and 

   2
  a *z1 + a*c*w3 - 2*a*c*z1 + a*d*z1 - a*w2 - c*d*w4 - d*w2 + w3 + w4 - 2*z1 = 0

   and a*b + b*d = 0 and a*c - 2*b + 1 = 0,

  {(a*c - 2*b + 1)*z2 - (a*c*w1 + 2*a*z1 - 2*c*w4 + w1 - 2*w2)}},

 {a*c*w5 - a*c*z1 + a*z1 - c*w4 - w2 + w5 - z1 <> 0 and a*c + 1 <> 0 and a <> 0

   and d <> 0 and 

   2
  a *z1 + a*c*w3 - 2*a*c*z1 + a*d*z1 - a*w2 - c*d*w4 - d*w2 + w3 + w4 - 2*z1 = 0

   and a*b + b*d = 0 and a*c*w1 + 2*a*z1 - 2*c*w4 + w1 - 2*w2 = 0

   and a*c - 2*b + 1 = 0 and b = 0,

  {b*z2 + (a*c*w5 - a*c*z1 + a*z1 - c*w4 - w2 + w5 - z1)}},

                                                                 2  2
 {a*c - 2*b + 1 <> 0 and a*c + 1 <> 0 and a <> 0 and d <> 0 and a *c *w5

      2  2       2                                                2
   - a *c *z1 + a *c*z1 + a*b*c*w1 - 2*a*b*c*w5 + 2*a*b*c*z1 - a*c *w4 - a*c*w2

   + 2*a*c*w5 - 2*a*c*z1 + a*z1 + b*w1 - 2*b*w5 + 2*b*z1 - c*w4 - w2 + w5 - z1

   = 0 and 

   2
  a *z1 + a*c*w3 - 2*a*c*z1 + a*d*z1 - a*w2 - c*d*w4 - d*w2 + w3 + w4 - 2*z1 = 0

   and a*b + b*d = 0,

  {z4 + c*z3 + b*z2 + (a*z1 - w2),

   a*z4 - z3 - w4,

   d*z4 + z3 - (w3 - 2*z1),

   2*z4 + z2 - w1,

   z4 - (w5 - z1),

                               2
   (a*c + 1)*z3 + (a*b)*z2 + (a *z1 - a*w2 + w4),

   (a*c - 2*b + 1)*z2 - (a*c*w1 + 2*a*z1 - 2*c*w4 + w1 - 2*w2)}},

 {a*c + 1 <> 0 and a <> 0 and b <> 0 and d <> 0 and 

   2
  a *z1 + a*c*w3 - 2*a*c*z1 + a*d*z1 - a*w2 - c*d*w4 - d*w2 + w3 + w4 - 2*z1 = 0

   and a*b + b*d = 0 and a*c*w1 + 2*a*z1 - 2*c*w4 + w1 - 2*w2 = 0

   and a*c - 2*b + 1 = 0,

  {z4 + c*z3 + b*z2 + (a*z1 - w2),

   a*z4 - z3 - w4,

   d*z4 + z3 - (w3 - 2*z1),

   2*z4 + z2 - w1,

   z4 - (w5 - z1),

                               2
   (a*c + 1)*z3 + (a*b)*z2 + (a *z1 - a*w2 + w4),

   b*z2 + (a*c*w5 - a*c*z1 + a*z1 - c*w4 - w2 + w5 - z1)}},

 {a*c + 1 <> 0 and a <> 0 and d <> 0 and 

   2
  a *z1 + a*c*w3 - 2*a*c*z1 + a*d*z1 - a*w2 - c*d*w4 - d*w2 + w3 + w4 - 2*z1 = 0

   and a*b + b*d = 0 and a*c*w1 + 2*a*z1 - 2*c*w4 + w1 - 2*w2 = 0

   and a*c*w5 - a*c*z1 + a*z1 - c*w4 - w2 + w5 - z1 = 0 and a*c - 2*b + 1 = 0

   and b = 0,

  {z4 + c*z3 + b*z2 + (a*z1 - w2),

   a*z4 - z3 - w4,

   d*z4 + z3 - (w3 - 2*z1),

   2*z4 + z2 - w1,

   z4 - (w5 - z1),

                               2
   (a*c + 1)*z3 + (a*b)*z2 + (a *z1 - a*w2 + w4)}},

 {a*d*z1 + b*d*w1 - 2*b*w3 - 2*b*w4 + 4*b*z1 - c*d*w4 - d*w2 + w3 + w4 - 2*z1

   <> 0 and b*d <> 0 and d <> 0 and a = 0,

  {(2*a*b + a*c*d - a)*z4 + (a*d*z1 + b*d*w1 - 2*b*w3 - 2*b*w4 + 4*b*z1 - c*d*w4

       - d*w2 + w3 + w4 - 2*z1)}},

 {a*d*z1 + b*d*w1 - 2*b*w3 + 4*b*z1 - d*w2 + w3 - 2*z1 <> 0 and a <> 0

                                2
   and b*d <> 0 and d <> 0 and a *z1 - a*w2 + w4 = 0 and a*b = 0 and a*c + 1 = 0

   and 2*b + c*d - 1 = 0 and c*d - 1 = 0,

  {(2*b + c*d - 1)*z3 + (a*d*z1 + b*d*w1 - 2*b*w3 + 4*b*z1 - d*w2 + w3 - 2*z1)}}

 ,

 {a*d*z1 - c*d*w4 - d*w2 + w3 + w4 - 2*z1 <> 0 and d <> 0 and a = 0 and b*d = 0,

  {(a*c*d - a)*z4 + (b*d)*z2 + (a*d*z1 - c*d*w4 - d*w2 + w3 + w4 - 2*z1)}},

                                                            2
 {a*d*z1 - d*w2 + w3 - 2*z1 <> 0 and a <> 0 and d <> 0 and a *z1 - a*w2 + w4 = 0

   and a*b = 0 and a*c + 1 = 0 and b*d = 0 and c*d - 1 = 0,

  {(c*d - 1)*z3 + (b*d)*z2 + (a*d*z1 - d*w2 + w3 - 2*z1)}},

 {2*a*z1 - c*d*w1 + 2*c*w3 - 4*c*z1 + w1 - 2*w2 <> 0 and a <> 0 and c*d - 1 <> 0

                   2
   and d <> 0 and a *z1 - a*w2 + w4 = 0 and a*b = 0 and a*c + 1 = 0

   and 2*b + c*d - 1 = 0,

  {(2*b + c*d - 1)*z2 + (2*a*z1 - c*d*w1 + 2*c*w3 - 4*c*z1 + w1 - 2*w2)}},

 {2*a*z1 + 2*c*w3 - 4*c*z1 + w1 - 2*w2 <> 0 and a <> 0

        2
   and a *z1 + a*c*w3 - 2*a*c*z1 - a*w2 + w3 + w4 - 2*z1 = 0 and a*b = 0

   and 2*b - 1 = 0 and d = 0,

  {(2*c*d)*z4 - (2*b - 1)*z2 - (2*a*z1 + 2*c*w3 - 4*c*z1 + w1 - 2*w2)}},

 {2*a*z1 - 2*c*w4 + w1 - 2*w2 <> 0 and d <> 0

   and a*d*z1 - c*d*w4 - d*w2 + w3 + w4 - 2*z1 = 0 and a = 0 and b*d = 0

   and 2*b - 1 = 0,

  {(2*a*c)*z4 + (2*b - 1)*z2 + (2*a*z1 - 2*c*w4 + w1 - 2*w2)}},

 {2*a*z1 - 2*c*w4 + w1 - 2*w2 <> 0 and a = 0 and 2*b - 1 = 0 and d = 0

   and w3 + w4 - 2*z1 = 0,

  {(2*a*c)*z4 + (2*b - 1)*z2 + (2*a*z1 - 2*c*w4 + w1 - 2*w2)}},

                                                     2
 {2*a*z1 + w1 - 2*w2 <> 0 and a <> 0 and d <> 0 and a *z1 - a*w2 + w4 = 0

   and a*b = 0 and a*c + 1 = 0 and a*d*z1 - d*w2 + w3 - 2*z1 = 0 and b*d = 0

   and 2*b - 1 = 0 and c*d - 1 = 0 and c = 0,

  {(2*c)*z3 + (2*b - 1)*z2 + (2*a*z1 + w1 - 2*w2)}},

 {a*z1 + b*w1 - 2*b*w5 + 2*b*z1 + c*w3 - 2*c*z1 - w2 + w5 - z1 <> 0 and a <> 0

                         2
   and 2*b - 1 <> 0 and a *z1 + a*c*w3 - 2*a*c*z1 - a*w2 + w3 + w4 - 2*z1 = 0

   and a*b = 0 and d = 0,

  {(c*d)*z4 - (a*z1 + b*w1 - 2*b*w5 + 2*b*z1 + c*w3 - 2*c*z1 - w2 + w5 - z1)}},

 {a*z1 + b*w1 - 2*b*w5 + 2*b*z1 - c*w4 - w2 + w5 - z1 <> 0 and 2*b - 1 <> 0

   and d <> 0 and a*d*z1 - c*d*w4 - d*w2 + w3 + w4 - 2*z1 = 0 and a = 0

   and b*d = 0,

  {(a*c)*z4 + (a*z1 + b*w1 - 2*b*w5 + 2*b*z1 - c*w4 - w2 + w5 - z1)}},

 {a*z1 + b*w1 - 2*b*w5 + 2*b*z1 - c*w4 - w2 + w5 - z1 <> 0 and 2*b - 1 <> 0

   and a = 0 and d = 0 and w3 + w4 - 2*z1 = 0,

  {(a*c)*z4 + (a*z1 + b*w1 - 2*b*w5 + 2*b*z1 - c*w4 - w2 + w5 - z1)}},

 {a*z1 + b*w1 - 2*b*w5 + 2*b*z1 - w2 + w5 - z1 <> 0 and a <> 0 and 2*b - 1 <> 0

                   2
   and d <> 0 and a *z1 - a*w2 + w4 = 0 and a*b = 0 and a*c + 1 = 0

   and a*d*z1 - d*w2 + w3 - 2*z1 = 0 and b*d = 0 and c*d - 1 = 0 and c = 0,

  {c*z3 + (a*z1 + b*w1 - 2*b*w5 + 2*b*z1 - w2 + w5 - z1)}},

 {a*z1 - c*d*w5 + c*d*z1 + c*w3 - 2*c*z1 - w2 + w5 - z1 <> 0 and a <> 0

                                    2
   and c*d - 1 <> 0 and d <> 0 and a *z1 - a*w2 + w4 = 0 and a*b = 0

   and a*c + 1 = 0 and 2*a*z1 - c*d*w1 + 2*c*w3 - 4*c*z1 + w1 - 2*w2 = 0

   and 2*b + c*d - 1 = 0 and b = 0,

  {b*z2 + (a*z1 - c*d*w5 + c*d*z1 + c*w3 - 2*c*z1 - w2 + w5 - z1)}},

 {a <> 0 and b*d <> 0 and 2*b + c*d - 1 <> 0 and d <> 0

        2                                         2           2
   and a *z1 - a*w2 + w4 = 0 and a*b = 0 and a*c*d *z1 + b*c*d *w1 - 2*b*c*d*w3

                                                             2         2
   + 4*b*c*d*z1 - 2*b*d*w5 + 2*b*d*z1 + 2*b*w3 - 4*b*z1 - c*d *w2 - c*d *w5

        2
   + c*d *z1 + 2*c*d*w3 - 4*c*d*z1 + d*w5 - d*z1 - w3 + 2*z1 = 0 and a*c + 1 = 0

   and c*d - 1 = 0,

  {z4 + c*z3 + b*z2 + (a*z1 - w2),

   a*z4 - z3 - w4,

   d*z4 + z3 - (w3 - 2*z1),

   2*z4 + z2 - w1,

   z4 - (w5 - z1),

   (c*d - 1)*z3 + (b*d)*z2 + (a*d*z1 - d*w2 + w3 - 2*z1),

   (2*b + c*d - 1)*z3 + (a*d*z1 + b*d*w1 - 2*b*w3 + 4*b*z1 - d*w2 + w3 - 2*z1)}}

 ,

                                      2
 {a <> 0 and b*d <> 0 and d <> 0 and a *z1 - a*w2 + w4 = 0 and a*b = 0

   and a*c + 1 = 0 and a*d*z1 + b*d*w1 - 2*b*w3 + 4*b*z1 - d*w2 + w3 - 2*z1 = 0

   and 2*b + c*d - 1 = 0 and c*d - 1 = 0,

  {z4 + c*z3 + b*z2 + (a*z1 - w2),

   a*z4 - z3 - w4,

   d*z4 + z3 - (w3 - 2*z1),

   2*z4 + z2 - w1,

   z4 - (w5 - z1),

   (c*d - 1)*z3 + (b*d)*z2 + (a*d*z1 - d*w2 + w3 - 2*z1),

   z3 + (d*w5 - d*z1 - w3 + 2*z1)}},

 {a <> 0 and 2*b + c*d - 1 <> 0 and c*d - 1 <> 0 and d <> 0

        2
   and a *z1 - a*w2 + w4 = 0 and a*b = 0 and a*c*d*z1 - a*z1 + b*c*d*w1

                                                         2  2       2  2
   - 2*b*c*d*w5 + 2*b*c*d*z1 - b*w1 + 2*b*w5 - 2*b*z1 - c *d *w5 + c *d *z1

      2           2
   + c *d*w3 - 2*c *d*z1 - c*d*w2 + 2*c*d*w5 - 2*c*d*z1 - c*w3 + 2*c*z1 + w2

   - w5 + z1 = 0 and a*c + 1 = 0,

  {z4 + c*z3 + b*z2 + (a*z1 - w2),

   a*z4 - z3 - w4,

   d*z4 + z3 - (w3 - 2*z1),

   2*z4 + z2 - w1,

   z4 - (w5 - z1),

   (c*d - 1)*z3 + (b*d)*z2 + (a*d*z1 - d*w2 + w3 - 2*z1),

   (2*b + c*d - 1)*z2 + (2*a*z1 - c*d*w1 + 2*c*w3 - 4*c*z1 + w1 - 2*w2)}},

                                          2
 {a <> 0 and 2*b - 1 <> 0 and d <> 0 and a *z1 - a*w2 + w4 = 0 and a*b = 0

   and a*c + 1 = 0 and a*d*z1 - d*w2 + w3 - 2*z1 = 0

   and a*z1 + b*w1 - 2*b*w5 + 2*b*z1 - w2 + w5 - z1 = 0 and b*d = 0

   and c*d - 1 = 0 and c = 0,

  {z4 + c*z3 + b*z2 + (a*z1 - w2),

   a*z4 - z3 - w4,

   d*z4 + z3 - (w3 - 2*z1),

   2*z4 + z2 - w1,

   z4 - (w5 - z1),

   (2*c)*z3 + (2*b - 1)*z2 + (2*a*z1 + w1 - 2*w2)}},

 {a <> 0 and 2*b - 1 <> 0

        2
   and a *z1 + a*c*w3 - 2*a*c*z1 - a*w2 + w3 + w4 - 2*z1 = 0 and a*b = 0

   and a*z1 + b*w1 - 2*b*w5 + 2*b*z1 + c*w3 - 2*c*z1 - w2 + w5 - z1 = 0

   and d = 0,

  {z4 + c*z3 + b*z2 + (a*z1 - w2),

   a*z4 - z3 - w4,

   d*z4 + z3 - (w3 - 2*z1),

   2*z4 + z2 - w1,

   (2*c*d)*z4 - (2*b - 1)*z2 - (2*a*z1 + 2*c*w3 - 4*c*z1 + w1 - 2*w2),

   z4 - (w5 - z1)}},

                                                     2
 {a <> 0 and b <> 0 and c*d - 1 <> 0 and d <> 0 and a *z1 - a*w2 + w4 = 0

   and a*b = 0 and a*c + 1 = 0

   and 2*a*z1 - c*d*w1 + 2*c*w3 - 4*c*z1 + w1 - 2*w2 = 0 and 2*b + c*d - 1 = 0,

  {z4 + c*z3 + b*z2 + (a*z1 - w2),

   a*z4 - z3 - w4,

   d*z4 + z3 - (w3 - 2*z1),

   2*z4 + z2 - w1,

   z4 - (w5 - z1),

   (c*d - 1)*z3 + (b*d)*z2 + (a*d*z1 - d*w2 + w3 - 2*z1),

   b*z2 + (a*z1 - c*d*w5 + c*d*z1 + c*w3 - 2*c*z1 - w2 + w5 - z1)}},

                                          2
 {a <> 0 and c*d - 1 <> 0 and d <> 0 and a *z1 - a*w2 + w4 = 0 and a*b = 0

   and a*c + 1 = 0 and 2*a*z1 - c*d*w1 + 2*c*w3 - 4*c*z1 + w1 - 2*w2 = 0

   and a*z1 - c*d*w5 + c*d*z1 + c*w3 - 2*c*z1 - w2 + w5 - z1 = 0

   and 2*b + c*d - 1 = 0 and b = 0,

  {z4 + c*z3 + b*z2 + (a*z1 - w2),

   a*z4 - z3 - w4,

   d*z4 + z3 - (w3 - 2*z1),

   2*z4 + z2 - w1,

   z4 - (w5 - z1),

   (c*d - 1)*z3 + (b*d)*z2 + (a*d*z1 - d*w2 + w3 - 2*z1)}},

                                    2
 {a <> 0 and c <> 0 and d <> 0 and a *z1 - a*w2 + w4 = 0 and a*b = 0

   and a*c + 1 = 0 and a*d*z1 - d*w2 + w3 - 2*z1 = 0 and b*d = 0 and c*d - 1 = 0

  ,

  {z4 + c*z3 + b*z2 + (a*z1 - w2),

   a*z4 - z3 - w4,

   d*z4 + z3 - (w3 - 2*z1),

   2*z4 + z2 - w1,

   z4 - (w5 - z1),

   (2*c)*z3 + (2*b - 1)*z2 + (2*a*z1 + w1 - 2*w2),

   z2 - (w1 - 2*w5 + 2*z1)}},

                         2
 {a <> 0 and d <> 0 and a *z1 - a*w2 + w4 = 0 and a*b = 0 and a*c + 1 = 0

   and a*d*z1 - d*w2 + w3 - 2*z1 = 0 and 2*a*z1 + w1 - 2*w2 = 0 and b*d = 0

   and 2*b - 1 = 0 and c*d - 1 = 0 and c = 0,

  {z4 + c*z3 + b*z2 + (a*z1 - w2),

   a*z4 - z3 - w4,

   d*z4 + z3 - (w3 - 2*z1),

   2*z4 + z2 - w1,

   z4 - (w5 - z1),

   c*z3 + b*z2 + (a*z1 - w2 + w5 - z1)}},

              2
 {a <> 0 and a *z1 + a*c*w3 - 2*a*c*z1 - a*w2 + w3 + w4 - 2*z1 = 0 and a*b = 0

   and 2*a*z1 + 2*c*w3 - 4*c*z1 + w1 - 2*w2 = 0 and 2*b - 1 = 0 and d = 0,

  {z4 + c*z3 + b*z2 + (a*z1 - w2),

   a*z4 - z3 - w4,

   d*z4 + z3 - (w3 - 2*z1),

   2*z4 + z2 - w1,

   (c*d)*z4 - b*z2 - (a*z1 + c*w3 - 2*c*z1 - w2 + w5 - z1),

   z4 - (w5 - z1)}},

 {b*d <> 0 and d*w5 - d*z1 - w3 - w4 + 2*z1 <> 0 and d <> 0 and 

  a*d*z1 + b*d*w1 - 2*b*w3 - 2*b*w4 + 4*b*z1 - c*d*w4 - d*w2 + w3 + w4 - 2*z1

   = 0 and a = 0,

  {a*z4 + (d*w5 - d*z1 - w3 - w4 + 2*z1)}},

 {b*d <> 0 and d <> 0 and 

  a*d*z1 + b*d*w1 - 2*b*w3 - 2*b*w4 + 4*b*z1 - c*d*w4 - d*w2 + w3 + w4 - 2*z1

   = 0 and a = 0 and d*w5 - d*z1 - w3 - w4 + 2*z1 = 0,

  {z4 + c*z3 + b*z2 + (a*z1 - w2),

   a*z4 - z3 - w4,

   d*z4 + z3 - (w3 - 2*z1),

   2*z4 + z2 - w1,

   (a*c*d - a)*z4 + (b*d)*z2 + (a*d*z1 - c*d*w4 - d*w2 + w3 + w4 - 2*z1),

   z4 - (w5 - z1)}},

 {2*b - 1 <> 0 and d <> 0 and a*d*z1 - c*d*w4 - d*w2 + w3 + w4 - 2*z1 = 0

   and a*z1 + b*w1 - 2*b*w5 + 2*b*z1 - c*w4 - w2 + w5 - z1 = 0 and a = 0

   and b*d = 0,

  {z4 + c*z3 + b*z2 + (a*z1 - w2),

   a*z4 - z3 - w4,

   d*z4 + z3 - (w3 - 2*z1),

   2*z4 + z2 - w1,

   (2*a*c)*z4 + (2*b - 1)*z2 + (2*a*z1 - 2*c*w4 + w1 - 2*w2),

   z4 - (w5 - z1)}},

 {2*b - 1 <> 0 and a*z1 + b*w1 - 2*b*w5 + 2*b*z1 - c*w4 - w2 + w5 - z1 = 0

   and a = 0 and d = 0 and w3 + w4 - 2*z1 = 0,

  {z4 + c*z3 + b*z2 + (a*z1 - w2),

   a*z4 - z3 - w4,

   d*z4 + z3 - (w3 - 2*z1),

   2*z4 + z2 - w1,

   (2*a*c)*z4 + (2*b - 1)*z2 + (2*a*z1 - 2*c*w4 + w1 - 2*w2),

   z4 - (w5 - z1)}},

 {d <> 0 and a*d*z1 - c*d*w4 - d*w2 + w3 + w4 - 2*z1 = 0

   and 2*a*z1 - 2*c*w4 + w1 - 2*w2 = 0 and a = 0 and b*d = 0 and 2*b - 1 = 0,

  {z4 + c*z3 + b*z2 + (a*z1 - w2),

   a*z4 - z3 - w4,

   d*z4 + z3 - (w3 - 2*z1),

   2*z4 + z2 - w1,

   (a*c)*z4 + b*z2 + (a*z1 - c*w4 - w2 + w5 - z1),

   z4 - (w5 - z1)}},

 {w3 + w4 - 2*z1 <> 0 and a = 0 and d = 0,

  {(a + d)*z4 - (w3 + w4 - 2*z1)}},

 {2*a*z1 - 2*c*w4 + w1 - 2*w2 = 0 and a = 0 and 2*b - 1 = 0 and d = 0

   and w3 + w4 - 2*z1 = 0,

  {z4 + c*z3 + b*z2 + (a*z1 - w2),

   a*z4 - z3 - w4,

   d*z4 + z3 - (w3 - 2*z1),

   2*z4 + z2 - w1,

   (a*c)*z4 + b*z2 + (a*z1 - c*w4 - w2 + w5 - z1),

   z4 - (w5 - z1)}}}

torder oo;


{{z4,z3,z2,z2},revgradlex}


% Two dimensional transportation problem
oo := torder({x33,x32,x31,x23,x22,x21,x13,x12,x11},lex);


oo := {{},lex}

gsys({x11+x12+x13-a1,x11+x21+x31-b1,x12+x22+x32-b2,x13+x23+x33-b3,
x21+x22+x23-a2,x31+x32+x33-a3});


{{a1 + a2 + a3 - b1 - b2 - b3 <> 0,

  {a1 + a2 + a3 - b1 - b2 - b3}},

 {a1 + a2 + a3 - b1 - b2 - b3 = 0,

  {x33 + x32 + x31 - a3,

   x33 + x23 + x13 - b3,

   x32 + x22 + x12 - b2,

   x31 + x21 + x11 - b1,

   x23 + x22 + x21 - a2,

   x13 + x12 + x11 - a1}}}

torder oo;


{{x33,x32,x31,x23,x22,x21,x13,x12,x11},lex}


% Thomas Weis's Example 1
oo := torder({x,y,z},lex);


oo := {{},lex}

gsys({z*y*x-b*y*x-b*z*x+b**2*x-b*z*y+b**2*y+b**2*z-(n3+b**3),
z*y*x-a*y*x-a*z*x+a**2*x-a*z*y+a**2*y+a**2*z-(n3+a**3),
z*y*x-n1});


   3        3
{{a *b - a*b  + a*n1 - a*n3 - b*n1 + b*n3 <> 0 and a - b <> 0

        2        2
   and a *b - a*b  = 0,

     2        2        2        2        2        2
  {(a *b - a*b )*x + (a *b - a*b )*y + (a *b - a*b )*z

        3        3
    - (a *b - a*b  + a*n1 - a*n3 - b*n1 + b*n3)}},

   3
 {a  - n1 + n3 <> 0 and a - b = 0 and a = 0,

                    2              2      2       3
  {a*x*y + a*x*z - a *x + a*y*z - a *y - a *z + (a  - n1 + n3)}},

   2        2
 {a *b - a*b  <> 0 and a - b <> 0,

                            2              2      2       3
  {x*y*z - a*x*y - a*x*z + a *x - a*y*z + a *y + a *z - (a  + n3),

                            2              2      2       3
   x*y*z - b*x*y - b*x*z + b *x - b*y*z + b *y + b *z - (b  + n3),

   x*y*z - n1,

                                 2    2                      2    2
   (a - b)*x*y + (a - b)*x*z - (a  - b )*x + (a - b)*y*z - (a  - b )*y

        2    2        3    3
    - (a  - b )*z + (a  - b ),

     2        2        2        2        2        2
   (a *b - a*b )*x + (a *b - a*b )*y + (a *b - a*b )*z

        3        3
    - (a *b - a*b  + a*n1 - a*n3 - b*n1 + b*n3),

     2        2   2     2        2
   (a *b - a*b )*y  + (a *b - a*b )*y*z

        3        3                                    2        2   2
    - (a *b - a*b  + a*n1 - a*n3 - b*n1 + b*n3)*y + (a *b - a*b )*z

        3        3
    - (a *b - a*b  + a*n1 - a*n3 - b*n1 + b*n3)*z

        3  2    2  3    2       2       2       2
    + (a *b  - a *b  + a *n1 - a *n3 - b *n1 + b *n3),

     2        2   3     3        3                               2
   (a *b - a*b )*z  - (a *b - a*b  + a*n1 - a*n3 - b*n1 + b*n3)*z

        3  2    2  3    2       2       2       2           2           2
    + (a *b  - a *b  + a *n1 - a *n3 - b *n1 + b *n3)*z - (a *b*n1 - a*b *n1)}},

                  3        3                                      2        2
 {a - b <> 0 and a *b - a*b  + a*n1 - a*n3 - b*n1 + b*n3 = 0 and a *b - a*b  = 0

  ,

                            2              2      2       3
  {x*y*z - a*x*y - a*x*z + a *x - a*y*z + a *y + a *z - (a  + n3),

                            2              2      2       3
   x*y*z - b*x*y - b*x*z + b *x - b*y*z + b *y + b *z - (b  + n3),

   x*y*z - n1,

                                 2    2                      2    2
   (a - b)*x*y + (a - b)*x*z - (a  - b )*x + (a - b)*y*z - (a  - b )*y

        2    2        3    3
    - (a  - b )*z + (a  - b ),

              2     2    2          2        2                 2     2    2
   (a - b)*x*z  - (a  - b )*x*z + (a *b - a*b )*x + (a - b)*y*z  - (a  - b )*y*z

        2        2        2    2   2     3    2        2    3
    + (a *b - a*b )*y - (a  - b )*z  + (a  + a *b - a*b  - b )*z

        3        3
    - (a *b - a*b  - a*n3 + b*n3),

            2  2     2    2   2       2        2   2     2    2     2
   (a - b)*y *z  - (a  - b )*y *z + (a *b - a*b )*y  - (a  - b )*y*z

        3    2        2    3          3        3
    + (a  + a *b - a*b  - b )*y*z - (a *b - a*b  - a*n3 + b*n3)*y

        2        2   2     3        3
    + (a *b - a*b )*z  - (a *b - a*b  - a*n3 + b*n3)*z

        3  2    2  3    2       2
    + (a *b  - a *b  - a *n3 + b *n3)}},

 {a <> 0 and a - b = 0,

                            2              2      2       3
  {x*y*z - a*x*y - a*x*z + a *x - a*y*z + a *y + a *z - (a  + n3),

                            2              2      2       3
   x*y*z - b*x*y - b*x*z + b *x - b*y*z + b *y + b *z - (b  + n3),

   x*y*z - n1,

                    2              2      2       3
   a*x*y + a*x*z - a *x + a*y*z - a *y - a *z + (a  - n1 + n3),

        2    2            2    2        2  2     3
   a*x*z  - a *x*z + a*y*z  - a *y*z - a *z  + (a  - n1 + n3)*z + a*n1,

      2  2    2  2      2    2     3
   a*y *z  - a *y *z - a *y*z  + (a  - n1 + n3)*y*z + (a*n1)*y + (a*n1)*z

       2
    - a *n1}},

   3
 {a  - n1 + n3 = 0 and a - b = 0 and a = 0,

                            2              2      2       3
  {x*y*z - a*x*y - a*x*z + a *x - a*y*z + a *y + a *z - (a  + n3),

                            2              2      2       3
   x*y*z - b*x*y - b*x*z + b *x - b*y*z + b *y + b *z - (b  + n3),

   x*y*z - n1}}}

torder oo;


{{x,y,z},lex}


% Thomas Weis's Example 2
oo := torder({z,y,x,w},lex);


oo := {{},lex}

gsys({w*x*y*z-x*y*z-w*y*z+y*z-w*x*z+x*z+w*z-z-w*x*y+x*y+w*y-
y+w*x-x-w-(b-1),
w*x*y*z-2*x*y*z-2*w*y*z+4*y*z-2*w*x*z+4*x*z+4*w*z-8*z-2*w*x*y+4x*y+
4*w*y-8*y+4*w*x-8*x-8*w-(c-16),
w*x*y*z-a,z+y+x+w-v});


{{true,

  {z*y*x*w - z*y*x - z*y*w + z*y - z*x*w + z*x + z*w - z - y*x*w + y*x + y*w - y

    + x*w - x - w - (b - 1),

   z*y*x*w - 2*z*y*x - 2*z*y*w + 4*z*y - 2*z*x*w + 4*z*x + 4*z*w - 8*z - 2*y*x*w

    + 4*y*x + 4*y*w - 8*y + 4*x*w - 8*x - 8*w - (c - 16),

   z*y*x*w - a,

   z + y + x + w - v,

    2      2        2      2                              2
   y *x + y *w - 3*y  + y*x  + 2*y*x*w - (v + 3)*y*x + y*w  - (v + 3)*y*w

                 2        2      2                              2
    + (3*v)*y + x *w - 3*x  + x*w  - (v + 3)*x*w + (3*v)*x - 3*w  + (3*v)*w

    + (b - c - 7*v + 15),

      2                                2                        2
   2*y  + 2*y*x + 2*y*w - (2*v)*y + 2*x  + 2*x*w - (2*v)*x + 2*w  - (2*v)*w

    + (a - 2*b + c + 6*v - 14),

      3      2            2        2
   2*x  + 2*x *w - (2*v)*x  + 2*x*w  - (2*v)*x*w + (a - 2*b + c + 6*v - 14)*x

         3          2
    + 2*w  - (2*v)*w  + (a - 2*b + c + 6*v - 14)*w - (3*a - 4*b + c + 4*v - 12),

      4          3                             2
   2*w  - (2*v)*w  + (a - 2*b + c + 6*v - 14)*w  - (3*a - 4*b + c + 4*v - 12)*w

    + 2*a}}}

torder oo;


{{z,y,x,w},lex}


end;


Time for test: 380 ms, plus GC time: 110 ms
