next | previous | forward | backward | up | top | index | toc | Macaulay2 website
AlgebraicSplines :: ringStructure

ringStructure -- given a sub-module of a free module (viewed as a ring with direct sum structure) which is also a sub-ring, creates a ring map whose image is the module with its ring structure

Synopsis

Description

Let M be a sub-module of the free module $R^k$, where $R=K[x_0,\ldots,x_n]$ for some field K. We view $R^k=Re_0+Re_1+\cdots+Re_{k-1}$ as a ring with component-wise multiplication (i.e. $e_0,\ldots,e_{k-1}$ are idempotents). Suppose further that the identity element of $R^k$, namely $e=e_0+\cdots+e_{k-1}$, is an element of M. Then the M is also a ring; this method creates a map whose image is M with its ring structure.

i1 : V={{0,1},{1,0},{0,-1},{-1,0}};
i2 : F={{0,1,2},{0,2,3}};--two triangles meeting along an edge
i3 : R=QQ[x,y];
i4 : M=splineModule(V,F,1,BaseRing=>R,Homogenize=>false);--create spline module
i5 : phi=ringStructure(M)

              QQ[e ..e , x..y]
                  0   1                                                   2
o5 = map (------------------------, QQ[Y ..Y ], {e x + e x, e y + e y, e x })
                  2        2            0   2     0     1    0     1    0
          (e e , e  - e , e  - e )
            0 1   0    0   1    1

                 QQ[e ..e , x..y]
                     0   1
o5 : RingMap ------------------------ <--- QQ[Y ..Y ]
                     2        2                0   2
             (e e , e  - e , e  - e )
               0 1   0    0   1    1

The target of the map is $R^k$ as a ring.

i6 : T=target phi;
i7 : describe T --direct sum of two copies of R, one for each face; e_i corresponds to the face F_i

         QQ[e ..e , x..y]
             0   1
o7 = ------------------------
             2        2
     (e e , e  - e , e  - e )
       0 1   0    0   1    1

As above, write $e$ for the identity of $R^k$. Then the generators for $M$ as a sub-ring of $R^k$ are the generators of $M$ as an $R$-module (other than $e$), together with the generators $x_0e,x_1e,\ldots,x_ne$. The source of the map created by ringStructure(M) is a polynomial ring in variables $Y_0,\ldots,Y_n,Y_{n+1},\cdots,Y_m$, where $Y_0,\cdots,Y_n$ correspond to the generators $x_0e,\ldots,x_ne$ and $Y_{n+1},\cdots,Y_m$ correspond to the usual generators of M (except for e, if it happens to be a generator of M).

i8 : H=source phi;
i9 : describe H --polynomial ring in three variables, one for each generator of R and each (non-identity) generator of M

o9 = QQ[Y ..Y , Degrees => {2:1, 2}, Heft => {1}, MonomialOrder => {MonomialSize => 32 }, DegreeRank => 1]
         0   2                                                     {GRevLex => {2:1, 2}}
                                                                   {Position => Up     }
i10 : scan(3,i->print phi(H_i))--these are the splines the variables map to
e x + e x
 0     1
e y + e y
 0     1
   2
e x
 0

The kernel of the map created by ringStructure(M) is the ideal of relations on the ring generators. If M is graded, the grading on the source of the map matches up with the grading on M.

i11 : degrees H --degrees of variables are same as degrees of generators of M

o11 = {{1}, {1}, {2}}

o11 : List
i12 : I=ker phi--the ideal of relations among generators

             2      2
o12 = ideal(Y Y  - Y )
             0 2    2

o12 : Ideal of H
i13 : reduceHilbert(hilbertSeries (H/I))--cokernel of phi has the same graded structure as M

            2
       1 + T
o13 = --------
             2
      (1 - T)

o13 : Expression of class Divide
i14 : reduceHilbert(hilbertSeries M)

            2
       1 + T
o14 = --------
             2
      (1 - T)

o14 : Expression of class Divide

It often happens that module generators are redundant as ring generators. These can be eliminated with the option Trim=>true. The remaining variables in the source ring retain their indexing from the output of ringStructure without the Trim=>true option.

i15 : V={{0,0},{0,1},{-1,-1},{1,0}};
i16 : F={{0,1,2},{0,2,3},{0,1,3}};--three triangles meeting at (and surrounding) a vertex
i17 : R=QQ[x,y];
i18 : M=splineModule(V,F,0,BaseRing=>R,Homogenize=>false);
i19 : phi = ringStructure(M);

                             QQ[e ..e , x..y]
                                 0   2
o19 : RingMap --------------------------------------------- <--- QQ[Y ..Y ]
                                  2        2        2                0   3
              (e e , e e , e e , e  - e , e  - e , e  - e )
                0 1   0 2   1 2   0    0   1    1   2    2
i20 : ker phi --notice a generator involves an isolated variable

                                  2
o20 = ideal (Y Y  - Y Y , Y Y  - Y  - Y )
              1 3    2 3   0 2    2    3

o20 : Ideal of QQ[Y ..Y ]
                   0   3
i21 : phi' = ringStructure(M,Trim=>true);

                             QQ[e ..e , x..y]
                                 0   2
o21 : RingMap --------------------------------------------- <--- QQ[Y ..Y ]
                                  2        2        2                0   2
              (e e , e e , e e , e  - e , e  - e , e  - e )
                0 1   0 2   1 2   0    0   1    1   2    2
i22 : ker phi' --now all variables correspond to irredundant generators

                        2      2    3
o22 = ideal(Y Y Y  - Y Y  - Y Y  + Y )
             0 1 2    0 2    1 2    2

o22 : Ideal of QQ[Y ..Y ]
                   0   2

If $\Delta$ is a simplicial complex, write $\Delta_0$ for its vertices and $K[\Delta]$ for the Stanley-Reisner ring of $\Delta$, which is the quotient of the polynomial ring $K[X_v:v\in\Delta_0]$ by monomials corresponding to non-faces. Then, as a ring, $C^0(\Delta)$ is isomorphic to the so-called affine Stanley Reisner ring $\frac{K[\Delta]}{(1-\sum_{v} X_v)K[\Delta]}$. If $\Delta$ is a cone, as above, then the affine Stanley Reisner ring is just the Stanley Reisner ring of the decone of $\Delta$. In the above example the decone is an empty triangle, so $C^0(\Delta)$ should be isomorphic to a polynomial ring in three variables modulo the ideal generated by the product of the variables. The isomorphism can be seen by the following change of variables. Alternatively, the ring structure of $C^0(\Delta)$ with this preferred set of generators is obtained with the command stanleyReisner.

i23 : f = (ker phi')_0

                  2      2    3
o23 = Y Y Y  - Y Y  - Y Y  + Y
       0 1 2    0 2    1 2    2

o23 : QQ[Y ..Y ]
          0   2
i24 : sub(f,{Y_0=>Y_0-Y_1,Y_1=>Y_0-Y_2,Y_2=>Y_0})

o24 = Y Y Y
       0 1 2

o24 : QQ[Y ..Y ]
          0   2

To obtain the sub-ring of $R^k$ which is generated by a specific set of module generators of M, i.e. without adding $x_0e,\ldots,x_ne$ as ring generators, use the option VariableGens=>false. This may be done if the user has a particular choice of ring generators they would like to use - for instance the Courant functions. See courantFunctions.

We may also use ringStructure to create the ring of splines for more general spline modules created using the generalizedSplines method.

i25 : E={{0,1},{1,2},{0,2}};
i26 : S=QQ[x,y];
i27 : I={y-x^2,x+y^2,y-x^3};
i28 : C0=generalizedSplines(E,I);--splines on a non-linear partition
i29 : ringStructure(C0)

                          QQ[e ..e , x..y]
                              0   2                                                                           4       3 2      4      3        2      3                      3      2         2      2       4       3 2      4      3        2      3                      3      2         2       3      2                5      4       3       3      2         2      2            2 2      3        2      2       5      4       3       3      2         2      2            2 2      3        2      2
o29 = map (---------------------------------------------, QQ[Y ..Y ], {e x + e x + e x, e y + e y + e y, - e x y - e x y  - e x  - e x  + e x*y  + e y  + e x*y + e y - e x*y  - e x y + e x*y  + e x , - e x y + e x y  + e x  - e x  + e x*y  - e y  - e x*y + e y + e x*y  + e x y + e x*y  - 2e y  + e x  - 2e x*y, - e x  - e x y + e x y - e x  + e x y + e x*y  - e y  + e y - e x y  - e x  + e x*y  + e x , - e x  + e x y + e x y + e x  + e x y - e x*y  - e y  - e y + e x y  + e x  - e x*y  - e x })
                               2        2        2            0   5     0     1     2    0     1     2      0       0        0      0      0        0      0       0     1        1       1        1       0       0        0      0      0        0      0       0     1        1       1         1      1       1        0      0       0       0      0       0        0      0     1        1      1        1       0      0       0       0      0       0        0      0     1        1      1        1
           (e e , e e , e e , e  - e , e  - e , e  - e )
             0 1   0 2   1 2   0    0   1    1   2    2

                             QQ[e ..e , x..y]
                                 0   2
o29 : RingMap --------------------------------------------- <--- QQ[Y ..Y ]
                                  2        2        2                0   5
              (e e , e e , e e , e  - e , e  - e , e  - e )
                0 1   0 2   1 2   0    0   1    1   2    2

Caveat

The Trim option will not work for quotients of polynomial rings over ZZ or ZZ modulo a non-prime integer.

See also

Ways to use ringStructure :

For the programmer

The object ringStructure is a method function with options.