# Singular

#### D.4.8.5 Ext_R

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

Usage:
Ext_R(v,M[,p]); v int resp. intvec , M module, p int

Compute:
A presentation of Ext^k(M',R); for k=v[1],v[2],..., M'=coker(M). Let
 ``` 0 <-- M' <-- F0 <-M-- F1 <-- F2 <-- ... ```
be a free resolution of M'. If
 ``` 0 --> F0* -A1-> F1* -A2-> F2* -A3-> ... ```
is the dual sequence, Fi*=Hom(Fi,R), then Ext^k = ker(Ak+1)/im(Ak) is presented as in the following exact sequences:
 ``` R^p --syz(Ak+1)-> Fk* ---Ak+1----> Fk+1* , R^q ----Ext^k---> R^p --syz(Ak+1)-> Fk*/im(Ak). ```
Hence, Ext^k=modulo(syz(Ak+1),Ak) presents Ext^k(M',R).

Return:
- module Ext, a presentation of Ext^k(M',R) if v is of type int
- a list of Ext^k (k=v[1],v[2],...) if v is of type intvec.
- In case of a third argument of type int return a list l:
 ``` l[1] = module Ext^k resp. list of Ext^k l[2] = SB of Ext^k resp. list of SB of Ext^k l[3] = matrix resp. list of matrices, each representing a kbase of Ext^k (if finite dimensional) ```

Display:
printlevel >=0: (affine) dimension of Ext^k for each k (default) printlevel >=1: Ak, Ak+1 and kbase of Ext^k in Fk*

Note:
In order to compute Ext^k(M,R) use the command Ext_R(k,syz(M));
By default, the procedure uses the `mres` command. If called with the additional parameter `"sres"`, the `sres` command is used instead.
If the attribute `"isHomog"` has been set for the input module, it is also set for the returned module (accordingly).

Example:
 ```LIB "homolog.lib"; int p = printlevel; printlevel = 1; ring r = 0,(x,y,z),dp; ideal i = x2y,y2z,z3x; module E = Ext_R(1,i); //computes Ext^1(r/i,r) ==> // Computing Ext^1: ==> // Let 0<--coker(M)<--F0<--F1<--F2<--... be a resolution of M, ==> // then F1*-->F2* is given by: ==> x2, -yz,0, ==> 0, z3, -xy, ==> xz2,0, -y2 ==> // and F0*-->F1* is given by: ==> y2z, ==> x2y, ==> xz3 ==> ==> // dimension of Ext^1: -1 ==> is_zero(E); ==> 1 qring R = std(x2+yz); intvec v = 0,2; printlevel = 2; //shows what is going on ideal i = x,y,z; //computes Ext^i(r/(x,y,z),r/(x2+yz)), i=0,2 list L = Ext_R(v,i,1); //over the qring R=r/(x2+yz), std and kbase ==> // Computing Ext^0: ==> // Let 0<--coker(M)<--F0<--F1<--F2<--... be a resolution of M, ==> // then F0*-->F1* is given by: ==> z, ==> y, ==> x ==> // and F-1*-->F0* is given by: ==> 0 ==> ==> // dimension of Ext^0: -1 ==> ==> // columns of matrix are kbase of Ext^0 in F0*: ==> 0 ==> ==> // Computing Ext^2: ==> // Let 0<--coker(M)<--F0<--F1<--F2<--... be a resolution of M, ==> // then F2*-->F3* is given by: ==> x,-y,z, 0, ==> z,x, 0, z, ==> 0,0, x, y, ==> 0,0, -z,x ==> // and F1*-->F2* is given by: ==> y,-z,0, ==> x,0, -z, ==> 0,x, -y, ==> 0,z, x ==> ==> // dimension of Ext^2: 0 ==> // vdim of Ext^2: 1 ==> ==> // columns of matrix are kbase of Ext^2 in F2*: ==> x, ==> -z, ==> 0, ==> 0 ==> printlevel = p; ```