Computation of the inverse system at a multiple point

Description

The algorithm computes the structure of the local ring and the generators of the dual space of a multiple isolated point. It is described in
@Article{MBmega96,
  author =      "Mourrain, B.",
  title =       "Isolated points, duality and residues",
  journal =     "J. of Pure and Applied Algebra", 
  year =        "1996",
  file =        "ftp://www.inria.fr/safir/9606-BM-mega.ps.gz",
  volume =      "117 \& 118",
  pages =       "469-493",
  note =        "Special issue for the proc. of the 4th Int. Symp. on
                 Effective Methods in Algebraic Geometry (MEGA)"
}
An implementattion by B. Bertrand is available here.

Example

> read invsyst:
> f := [x[1]^2-x[1]+x[2]+x[3]+x[4]+x[5]-4, x[2]^2+x[1]-x[2]+x[3]+x[4]+x[5]-4,
 	x[3]^2+x[1]+x[2]-x[3]+x[4]+x[5]-4, x[4]^2+x[1]+x[2]+x[3]-x[4]+x[5]-4, 
 	x[5]^2+x[1]+x[2]+x[3]+x[4]-x[5]-4]:
> F:=map(expand,subs(x[1]=u[1]+1,x[2]=u[2]+1,x[3]=u[3]+1,
	x[4]=u[4]+1,x[5]=u[5]+1,f)):
> invsyst(F,[0,0,0,0,0]);
[[1],

    [-d[1] + d[3], -d[1] + d[4], -d[1] + d[5], -d[1] + d[2]], [

           2         2         2                                 2
    -2 d[1]  - 2 d[2]  - 2 d[3]  + d[3] d[2] + d[4] d[3] - 2 d[4]

                                                2
     + d[4] d[2] + 2 d[5] + 2 d[5] d[1] - 2 d[5] ,

                                                          2
    d[4] d[1] - d[4] d[3] - d[5] d[1] + d[5] d[3], -2 d[1]

                         2         2                     2
     + d[2] d[1] - 2 d[2]  - 2 d[3]  + d[4] d[3] - 2 d[4]

                                                          2         2
     + d[4] d[2] + 2 d[5] + d[5] d[1] + d[5] d[3] - 2 d[5] , -2 d[1]

             2                     2         2
     - 2 d[2]  + d[3] d[1] - 2 d[3]  - 2 d[4]  + 2 d[4] d[2] + 2 d[5]

                                     2        2         2         2
     + d[5] d[1] + d[5] d[3] - 2 d[5] , 2 d[1]  + 2 d[2]  + 2 d[3]

                         2
     - d[4] d[3] + 2 d[4]  - 2 d[4] d[2] - 2 d[5] - 2 d[5] d[1]

                                     2
     - d[5] d[3] + d[5] d[4] + 2 d[5] ,

    d[4] d[3] - d[4] d[2] - d[5] d[3] + d[5] d[2]], [-4 d[3] d[1]

                      2         3         2         2
     - 4 d[5] + 4 d[1]  + 2 d[1]  + 4 d[4]  + 2 d[4]  d[1]

             2                            2
     + 2 d[2]  d[1] - 2 d[5] d[1] + 4 d[5]  + 4 d[5] d[3] - 2 %6

             2                   2              2              2
     - 2 d[5]  d[4] - 2 d[5] d[1]  - 2 d[5] d[2]  - 2 d[5] d[3]

                  2                                     2
     - 2 d[5] d[4]  - 6 d[5] d[2] + 2 d[5] d[4] + 4 d[3]

                           2              3         3         3
     - 4 d[4] d[3] + 2 d[3]  d[1] + 2 d[2]  - 2 d[4]  - 2 d[5]

             2         2              2
     + 4 d[2]  + 2 d[5]  d[2] + 2 d[3]  d[2] - %4 + d[5] d[4] d[2]

             2                   2              2              2
     + 2 d[4]  d[2] - 2 d[4] d[1]  - 2 d[4] d[2]  - 2 d[4] d[3]

             2                        2
     + 2 d[5]  d[1] - %3 + 2 d[2] d[1]  + %2 + 2 %1, -4 d[3] d[1]

                      2         3         2              2
     - 4 d[5] + 4 d[1]  + 2 d[1]  + 4 d[4]  + %5 + 2 d[4]  d[1]

             2                            2
     + 2 d[2]  d[1] - 2 d[5] d[1] + 4 d[5]  + 6 d[5] d[3] - %6

                  2              2              2              2
     - 2 d[5] d[1]  - 2 d[5] d[2]  - 2 d[5] d[3]  - 2 d[5] d[4]

                           2                       2              3
     - 6 d[5] d[2] + 4 d[3]  - 4 d[4] d[3] + 2 d[3]  d[1] + 2 d[2]

             3         2         3         2                   2
     - 2 d[5]  + 4 d[2]  - 2 d[3]  + 2 d[5]  d[2] - 2 d[3] d[1]

                  2         2                   2              2
     - 2 d[3] d[2]  + 2 d[3]  d[2] - %4 - 2 d[4]  d[3] + 2 d[4]  d[2]

             2              2                          2
     + 2 d[5]  d[1] - 2 d[5]  d[3] - 2 %3 + 2 d[2] d[1]  + 2 %1

                                                    2         2
     + d[5] d[3] d[2], 4 d[3] d[1] + 4 d[5] - 4 d[1]  - 4 d[4]  - %5

             2                                 2              2
     - 4 d[5]  - 4 d[5] d[3] + %6 + 2 d[5] d[1]  + 2 d[5] d[2]

                  2              2                       2
     + 2 d[5] d[3]  + 2 d[5] d[4]  + 6 d[5] d[2] - 4 d[3]

                           3         3         2         2
     + 4 d[4] d[3] - 2 d[2]  + 2 d[5]  - 4 d[2]  - 2 d[5]  d[2]

             2              2                        2
     - 2 d[3]  d[2] - 2 d[4]  d[2] + %3 - 2 d[2] d[1]  - %2 - %1

                                                     2         3
     + d[4] d[3] d[2], -4 d[3] d[1] - 4 d[5] + 4 d[1]  + 2 d[1]

             2              2              2
     + 4 d[4]  + %5 + 2 d[4]  d[1] + 2 d[2]  d[1] - 2 d[5] d[1]

             2                              2                   2
     + 4 d[5]  + 6 d[5] d[3] - 2 %6 - 2 d[5]  d[4] - 2 d[5] d[1]

                  2              2              2
     - 2 d[5] d[2]  - 2 d[5] d[3]  - 2 d[5] d[4]  - 8 d[5] d[2]

                           2                       2              3
     + 2 d[5] d[4] + 4 d[3]  - 4 d[4] d[3] + 2 d[3]  d[1] + 4 d[2]

             3         3         2         3         2
     - 2 d[4]  - 2 d[5]  + 4 d[2]  - 2 d[3]  + 4 d[5]  d[2]

                  2              2         2
     - 2 d[3] d[1]  - 2 d[3] d[2]  + 4 d[3]  d[2] - 2 %4

             2              2                   2              2
     - 2 d[4]  d[3] + 4 d[4]  d[2] - 2 d[4] d[1]  - 2 d[4] d[2]

                  2         2              2
     - 2 d[4] d[3]  + 2 d[5]  d[1] - 2 d[5]  d[3] - 2 %3

                  2
     + 4 d[2] d[1]  + %2 + 3 %1 + d[4] d[3] d[1]], [-16 d[3] d[1]

                        2         3          2
     - 16 d[5] + 16 d[1]  + 2 d[1]  + 16 d[4]

                                       2
     + 9/2 d[5] d[4] d[3] d[2] - 3 d[5]  d[3] d[2]

                                            2
     + 9/2 d[5] d[4] d[3] d[1] - 3 d[5] d[4]  d[1]

                  2                   2                        2
     - 3 d[5] d[2]  d[1] - 3 d[5] d[4]  d[3] - 3 d[5] d[3] d[1]

                       2         3                   3
     - 3 d[5] d[3] d[2]  - 3 d[5]  d[3] - 3 d[5] d[3]

             2
     - 3 d[5]  d[3] d[1] + 9/2 d[5] d[4] d[2] d[1]

                       2                   2                   2
     - 3 d[5] d[2] d[1]  - 3 d[5] d[4] d[1]  - 3 d[5] d[4] d[2]

                       2              2                   2
     - 3 d[5] d[4] d[3]  - 3 d[5] d[3]  d[2] - 3 d[5] d[4]  d[2]

                                            2              3
     + 9/2 d[5] d[3] d[2] d[1] - 3 d[5] d[3]  d[1] - 3 d[5]  d[1]

                  3              3         3              3
     - 3 d[5] d[2]  - 3 d[5] d[4]  - 3 d[5]  d[2] - 3 d[5]  d[4]

              2     2          2     2          2     2
     + 12 d[5]  d[1]  + 12 d[5]  d[2]  + 12 d[5]  d[3]

              2     2         2                   2
     + 12 d[5]  d[4]  - 3 d[5]  d[2] d[1] - 3 d[5]  d[4] d[2]

             2                   2                        3
     - 3 d[5]  d[4] d[1] - 3 d[5]  d[4] d[3] - 3 d[5] d[1]

              2     2          2     2          4          4
     + 12 d[3]  d[1]  + 12 d[3]  d[2]  + 12 d[3]  + 12 d[1]

              4              2                             2
     + 12 d[5]  - %5 - 3 d[4]  d[3] d[2] - 3 d[4] d[2] d[1]

                                                 2
     + 9/2 d[4] d[3] d[2] d[1] - 3 d[4] d[3] d[2]

                  2                   2                        2
     - 3 d[4] d[3]  d[2] - 3 d[4] d[3]  d[1] - 3 d[4] d[3] d[1]

             3              3               2     2          2     2
     - 3 d[4]  d[3] - 3 d[4]  d[2] + 12 d[4]  d[1]  + 12 d[4]  d[2]

              2     2         3                   3              3
     + 12 d[4]  d[3]  - 3 d[4]  d[1] - 3 d[4] d[2]  - 3 d[4] d[3]

                       2              2                   3
     - 3 d[3] d[2] d[1]  - 3 d[3] d[2]  d[1] - 3 d[3] d[1]

             3                   3         3              2
     - 3 d[3]  d[1] - 3 d[3] d[2]  - 3 d[3]  d[2] - 3 d[3]  d[2] d[1]

              4          4         2              2
     + 12 d[2]  + 12 d[4]  + 2 d[4]  d[1] + 2 d[2]  d[1]

                            2                        2
     - 2 d[5] d[1] + 16 d[5]  + 4 d[5] d[3] - 12 d[5]  d[4]

                  2              2              2              2
     + 2 d[5] d[1]  + 2 d[5] d[2]  + 2 d[5] d[3]  + 2 d[5] d[4]

                                           2         2
     - 16 d[5] d[2] - 4 d[5] d[4] + 16 d[3]  + 2 d[3]  d[1]

              3         3          2         3              2
     - 12 d[4]  + 2 d[5]  + 16 d[2]  - 4 d[3]  - 4 d[3] d[1]

                  2                                   2
     - 4 d[3] d[2]  - 3 %4 + 4 d[5] d[4] d[2] - 4 d[4]  d[3]

                   2               2               2         2
     - 12 d[4] d[1]  - 12 d[4] d[2]  - 12 d[4] d[3]  + 2 d[5]  d[1]

             2                                        3
     - 4 d[5]  d[3] + 4 %3 + 3 %2 + 6 %1 - 3 d[4] d[1]

             2                   2                        2
     - 3 d[4]  d[2] d[1] - 3 d[4]  d[3] d[1] - 3 d[4] d[2]  d[1]

              2     2              3         3
     + 12 d[2]  d[1]  - 3 d[2] d[1]  - 3 d[2]  d[1]

     + 7 d[4] d[3] d[2] + 6 d[4] d[3] d[1]]]

%1 := d[5] d[4] d[3]

%2 := d[5] d[4] d[1]

%3 := d[4] d[2] d[1]

%4 := d[5] d[2] d[1]

%5 := d[5] d[3] d[1]

%6 := d[3] d[2] d[1]