# Singular

#### D.4.8.1 canonMap

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

Usage:
canonMap(id); id= ideal/module,

Return:
a list L, the kernel in two different representations and
the cokernel of the canonical map
M ---> Ext^c_R(Ext^c_R(M,R),R) given by presentations
Here M is the R-module (R=basering) given by the presentation
defined by id, i.e. M=R/id resp. M=R^n/id
c is the codimension of M
L[1] is the preimage of the kernel in R resp. R^n
L[2] is a presentation of the kernel
L[3] is a presentation of the cokernel

Example:
 ```LIB "homolog.lib"; ring s=0,(x,y),dp; ideal i = x,y; canonMap(i); ==> [1]: ==> _[1]=y*gen(1) ==> _[2]=x*gen(1) ==> [2]: ==> _[1]=0 ==> [3]: ==> _[1]=0 ring R = 0,(x,y,z,w),dp; ideal I1 = x,y; ideal I2 = z,w; ideal I = intersect(I1,I2); canonMap(I); ==> [1]: ==> _[1]=yw*gen(1) ==> _[2]=xw*gen(1) ==> _[3]=yz*gen(1) ==> _[4]=xz*gen(1) ==> [2]: ==> _[1]=0 ==> [3]: ==> _[1]=-w*gen(1) ==> _[2]=-z*gen(1) ==> _[3]=-y*gen(1) ==> _[4]=-x*gen(1) module M = syz(I); canonMap(M); ==> [1]: ==> _[1]=z*gen(1)-w*gen(3) ==> _[2]=z*gen(2)-w*gen(4) ==> _[3]=x*gen(1)-y*gen(2) ==> _[4]=x*gen(3)-y*gen(4) ==> [2]: ==> _[1]=0 ==> [3]: ==> _[1]=yw*gen(1) ==> _[2]=xw*gen(1) ==> _[3]=yz*gen(1) ==> _[4]=xz*gen(1) ring S = 0,(x,y,z,t),Wp(3,4,5,1); ideal I = x-t3,y-t4,z-t5; ideal J = eliminate(I,t); ring T = 0,(x,y,z),Wp(3,4,5); ideal p = imap(S,J); ideal p2 = p^2; canonMap(p2); ==> [1]: ==> _[1]=x5*gen(1)-3x2yz*gen(1)+xy3*gen(1)+z3*gen(1) ==> _[2]=x2z2*gen(1)-2xy2z*gen(1)+y4*gen(1) ==> _[3]=x4z*gen(1)-x3y2*gen(1)-xyz2*gen(1)+y3z*gen(1) ==> _[4]=x3yz*gen(1)-x2y3*gen(1)-xz3*gen(1)+y2z2*gen(1) ==> _[5]=x4y2*gen(1)-4xy3z*gen(1)+2y5*gen(1)+z4*gen(1) ==> [2]: ==> _[1]=x*gen(1) ==> _[2]=y*gen(1) ==> _[3]=z*gen(1) ==> [3]: ==> _[1]=0 ```