# Singular

#### D.4.8.3 cupproduct

Procedure from library `homolog.lib` (see homolog_lib).

Usage:
cupproduct(M,N,P,p,q[,any]); M,N,P modules, p,q integers

Compute:
cup-product Ext^p(M',N') x Ext^q(N',P') ---> Ext^(p+q)(M',P'), where M':=R^m/M, if M in R^m, R basering (i.e. M':=coker(matrix(M)))

Assume:
all Ext's are of finite dimension

Return:
- if called with 5 arguments: matrix of the associated linear map Ext^p (tensor) Ext^q --> Ext^(p+q), i.e. the columns of <matrix> present the coordinates of the cup products (b_i & c_j) with respect to a kbase of Ext^p+q (b_i resp. c_j are the chosen bases of Ext^p, resp. Ext^q).
- if called with 6 arguments: list L,
 ``` L[1] = matrix (see above) L[2] = matrix of kbase of Ext^p(M',N') L[3] = matrix of kbase of Ext^q(N',P') L[4] = matrix of kbase of Ext^p+q(N',P') ```

Note:
printlevel >=1; shows what is going on.
printlevel >=2; shows the result in another representation.
For computing the cupproduct of M,N itself, apply proc to syz(M), syz(N)!

Example:
 ```LIB "homolog.lib"; int p = printlevel; ring rr = 32003,(x,y,z),(dp,C); ideal I = x4+y3+z2; qring o = std(I); module M = [x,y,0,z],[y2,-x3,z,0],[z,0,-y,-x3],[0,z,x,-y2]; print(cupproduct(M,M,M,1,3)); ==> 1,0, 0, 0,0,0,0,0,0,0, 0,0,0,0,0,0, ==> 0,-1,0, 0,1,0,0,0,0,0, 0,0,0,0,0,0, ==> 0,0, -1,0,0,0,0,0,1,0, 0,0,0,0,0,0, ==> 0,0, 0, 1,0,0,1,0,0,-1,0,0,1,0,0,0 printlevel = 3; list l = (cupproduct(M,M,M,1,3,"any")); ==> // vdim Ext(M,N) = 4 ==> // kbase of Ext^p(M,N) ==> // - the columns present the kbase elements in Hom(F(p),G(0)) ==> // - F(*),G(*) are free resolutions of M and N ==> 0, 0, 1, 0, ==> 0, y, 0, 0, ==> 1, 0, 0, 0, ==> 0, 0, 0, y, ==> 0, -1,0, 0, ==> 0, 0, x2,0, ==> 0, 0, 0, -x2, ==> 1, 0, 0, 0, ==> 0, 0, 0, -1, ==> -1,0, 0, 0, ==> 0, 1, 0, 0, ==> 0, 0, 1, 0, ==> -1,0, 0, 0, ==> 0, 0, 0, x2y, ==> 0, 0, x2,0, ==> 0, -y,0, 0 ==> // vdim Ext(N,P) = 4 ==> // kbase of Ext(N,P): ==> 0, 0, 1, 0, ==> 0, 0, 0, y, ==> 1, 0, 0, 0, ==> 0, -y,0, 0, ==> 0, -1,0, 0, ==> 1, 0, 0, 0, ==> 0, 0, 0, -x2, ==> 0, 0, -x2,0, ==> 0, 0, 0, -1, ==> 0, 0, 1, 0, ==> 0, 1, 0, 0, ==> 1, 0, 0, 0, ==> -1,0, 0, 0, ==> 0, -y,0, 0, ==> 0, 0, x2, 0, ==> 0, 0, 0, -x2y ==> // kbase of Ext^q(N,P) ==> // - the columns present the kbase elements in Hom(G(q),H(0)) ==> // - G(*),H(*) are free resolutions of N and P ==> 0, 0, 1, 0, ==> 0, 0, 0, y, ==> 1, 0, 0, 0, ==> 0, -y,0, 0, ==> 0, -1,0, 0, ==> 1, 0, 0, 0, ==> 0, 0, 0, -x2, ==> 0, 0, -x2,0, ==> 0, 0, 0, -1, ==> 0, 0, 1, 0, ==> 0, 1, 0, 0, ==> 1, 0, 0, 0, ==> -1,0, 0, 0, ==> 0, -y,0, 0, ==> 0, 0, x2, 0, ==> 0, 0, 0, -x2y ==> // vdim Ext(M,P) = 4 ==> // kbase of Ext^p+q(M,P) ==> // - the columns present the kbase elements in Hom(F(p+q),H(0)) ==> // - F(*),H(*) are free resolutions of M and P ==> 0, 0, 1, 0, ==> 0, 0, 0, y, ==> 1, 0, 0, 0, ==> 0, -y,0, 0, ==> 0, -1,0, 0, ==> 1, 0, 0, 0, ==> 0, 0, 0, -x2, ==> 0, 0, -x2,0, ==> 0, 0, 0, -1, ==> 0, 0, 1, 0, ==> 0, 1, 0, 0, ==> 1, 0, 0, 0, ==> -1,0, 0, 0, ==> 0, -y,0, 0, ==> 0, 0, x2, 0, ==> 0, 0, 0, -x2y ==> // lifting of kbase of Ext^p(M,N) ==> // - the columns present liftings of kbase elements in Hom(F(p+q),G(q)) ==> 1,0, 0, 0, ==> 0,-y,0, 0, ==> 0,0, x2,0, ==> 0,0, 0, x2y, ==> 0,1, 0, 0, ==> 1,0, 0, 0, ==> 0,0, 0, -x2, ==> 0,0, x2,0, ==> 0,0, -1,0, ==> 0,0, 0, y, ==> 1,0, 0, 0, ==> 0,y, 0, 0, ==> 0,0, 0, -1, ==> 0,0, -1,0, ==> 0,-1,0, 0, ==> 1,0, 0, 0 ==> // matrix of cup-products (in Ext^p+q) ==> 0, 0, -1, 0, 0, 0, 0, y, 1, 0, 0, 0, 0, y, 0, 0, ==> 0, 0, 0, y, 0, 0, y, 0, 0, -y, 0, 0, y, 0, 0, 0, ==> 1, 0, 0, 0, 0, y, 0, 0, 0, 0, x2, 0, 0, 0, 0, -x2y, ==> 0, y, 0, 0, -y,0, 0, 0, 0, 0, 0, x2y,0, 0, x2y,0, ==> 0, 1, 0, 0, -1,0, 0, 0, 0, 0, 0, x2, 0, 0, x2, 0, ==> 1, 0, 0, 0, 0, y, 0, 0, 0, 0, x2, 0, 0, 0, 0, -x2y, ==> 0, 0, 0, -x2, 0, 0, -x2, 0, 0, x2, 0, 0, -x2, 0, 0, 0, ==> 0, 0, x2, 0, 0, 0, 0, -x2y,-x2,0, 0, 0, 0, -x2y,0, 0, ==> 0, 0, 0, -1, 0, 0, -1, 0, 0, 1, 0, 0, -1, 0, 0, 0, ==> 0, 0, -1, 0, 0, 0, 0, y, 1, 0, 0, 0, 0, y, 0, 0, ==> 0, -1,0, 0, 1, 0, 0, 0, 0, 0, 0, -x2,0, 0, -x2,0, ==> 1, 0, 0, 0, 0, y, 0, 0, 0, 0, x2, 0, 0, 0, 0, -x2y, ==> -1,0, 0, 0, 0, -y,0, 0, 0, 0, -x2,0, 0, 0, 0, x2y, ==> 0, y, 0, 0, -y,0, 0, 0, 0, 0, 0, x2y,0, 0, x2y,0, ==> 0, 0, -x2,0, 0, 0, 0, x2y, x2, 0, 0, 0, 0, x2y, 0, 0, ==> 0, 0, 0, -x2y,0, 0, -x2y,0, 0, x2y,0, 0, -x2y,0, 0, 0 ==> ////// end level 2 ////// ==> // the associated matrices of the bilinear mapping 'cup' ==> // corresponding to the kbase elements of Ext^p+q(M,P) are shown, ==> // i.e. the rows of the final matrix are written as matrix of ==> // a bilinear form on Ext^p x Ext^q ==> //----component 1: ==> 1,0,0,0, ==> 0,0,0,0, ==> 0,0,0,0, ==> 0,0,0,0 ==> //----component 2: ==> 0,-1,0,0, ==> 1,0, 0,0, ==> 0,0, 0,0, ==> 0,0, 0,0 ==> //----component 3: ==> 0,0,-1,0, ==> 0,0,0, 0, ==> 1,0,0, 0, ==> 0,0,0, 0 ==> //----component 4: ==> 0,0, 0,1, ==> 0,0, 1,0, ==> 0,-1,0,0, ==> 1,0, 0,0 ==> ////// end level 3 ////// show(l[1]);show(l[2]); ==> // matrix, 4x16 ==> 1,0, 0, 0,0,0,0,0,0,0, 0,0,0,0,0,0, ==> 0,-1,0, 0,1,0,0,0,0,0, 0,0,0,0,0,0, ==> 0,0, -1,0,0,0,0,0,1,0, 0,0,0,0,0,0, ==> 0,0, 0, 1,0,0,1,0,0,-1,0,0,1,0,0,0 ==> // matrix, 16x4 ==> 0, 0, 1, 0, ==> 0, y, 0, 0, ==> 1, 0, 0, 0, ==> 0, 0, 0, y, ==> 0, -1,0, 0, ==> 0, 0, x2,0, ==> 0, 0, 0, -x2, ==> 1, 0, 0, 0, ==> 0, 0, 0, -1, ==> -1,0, 0, 0, ==> 0, 1, 0, 0, ==> 0, 0, 1, 0, ==> -1,0, 0, 0, ==> 0, 0, 0, x2y, ==> 0, 0, x2,0, ==> 0, -y,0, 0 printlevel = p; ```