This command factors one map through another. One nice application of this is to compute twisted matrix factorizations. If the maps input are homogeneous, then the degrees must match up for the command to work.
If M does not factor through N, then the return value L is such that M - N*L is the reduction of M modulo a Groebner basis for the image of N.
Here is an example of doing so over a PI Sklyanin algebra. Note that since quotients of quotients are (unfortunately) not yet implemented, we have to do a bit of acrobatics to define the quotient of the Sklyanin we want.
i3 : g = 2*(-y^3-x*y*z+y*x*z+x^3)
3 3
o3 = -2y +2yxz-2xyz+2x
o3 : A
|
i4 : J = (ideal B) + ncIdeal {g}
2 2 2 3 3
o4 = Two-sided ideal {zy+yz-x , zx-y +xz, -z +yx+xy, -2y +2yxz-2xyz+2x }
o4 : NCIdeal
|
i5 : B' = A/J -- Factor of sklyanin
--Calling Bergman for NCGB calculation.
Complete!
o5 = B'
o5 : NCQuotientRing
|
i6 : k = ncMatrix {{x,y,z}}
o6 = | x y z |
o6 : NCMatrix
|
i7 : BprimeToB = ncMap(B,B',gens B) -- way to lift back from B' to B
o7 = NCRingMap B <--- B'
o7 : NCRingMap
|
i8 : M = BprimeToB rightKernelBergman rightKernelBergman k -- second syzygy of k over B
--Calling Bergman for NCGB calculation.
Complete!
--Calling Bergman for NCGB calculation.
Complete!
--Calling Bergman for NCGB calculation.
Complete!
--Calling Bergman for NCGB calculation.
Complete!
--Calling Bergman for NCGB calculation.
Complete!
--Calling Bergman for NCGB calculation.
Complete!
o8 = | -z y*z -y^2 -y*x-2*x*y |
| x y*x+x*y y*z+x^2 -y^2+3*x*z |
| y -x*z -x*y x^2 |
| 0 -2*y -2*x -2*z |
o8 : NCMatrix
|
At this point, M is maximal Cohen-Macaulay B'-module, and hence the projective dimension of M as a B-module is 1. Since M is a B' module, multiplication by g on the complex that gives the resolution over B is null homotopic. This means we may factor the map f through f times the identity. We do so below.
i9 : gId = g*(ncMatrix applyTable(entries id_(ZZ^4), i -> promote(i,B)))
o9 = | -2*y^3+2*y*x*z-2*x*y*z+2*x^3 0 0 0 |
| 0 -2*y^3+2*y*x*z-2*x*y*z+2*x^3 0 0 |
| 0 0 -2*y^3+2*y*x*z-2*x*y*z+2*x^3 0 |
| 0 0 0 -2*y^3+2*y*x*z-2*x*y*z+2*x^3 |
o9 : NCMatrix
|
i10 : assignDegrees(gId,{2,2,2,3},{5,5,5,6});
|
i11 : M' = gId // M
--Calling Bergman for NCGB calculation.
Complete!
o11 = | -2*y*x 0 -2*y^2+2*x*z y*x*z+x^3 |
| -x z -y y^2-x*z |
| -y -x z y*z-x^2 |
| z y x 0 |
o11 : NCMatrix
|
i12 : M*M' == gId
o12 = true
|