From ApCoCoAWiki


presentation Ext modules as quotients of free modules


 In the first form the function computes the I-th Ext module of M and N.

It returns a presentation of <formula>Ext^I_R(M,N)</formula> as a quotient of a free module.

IMPORTANT: the only exception to the type of M or N (or even of the

output) is when they are either a zero module or a free module.

In these cases their type is indeed MOD.

It computes Ext via a presentation of the quotient of the two modules

 <formula>Im(Phi*_{I-1})</formula>, where
 -   <formula>Phi_I</formula>   is the I-th map in the free resolution of M
 -   <formula>Phi*_I</formula>   is the map <formula>Hom(Phi_I,N)</formula>
 in the dual of the free resolution.

Main differences with the previous version include:

- SHIFTS have been removed, consequently only standard homogeneous

 modules and quotients are supported

- as a consequence of 1), the type Tagged("Shifted") has been

 removed. Ext will just be a Tagged("Quotient")

- The former functions Presentation(), HomPresentation() and

 KerPresentation() have been removed

- The algorithm uses Res() to compute the maps needed, and not

 SyzOfGens anylonger, believed to cause troubles

- The function Ext always has THREE variables, see syntax...

In the second form the variable I is a LIST of nonnegative

integers. In this case the function Ext prints all the Ext modules corresponding to the integers in I. The output is of special type Tagged("$ext.ExtList") which is basically just the list of pairs <formula>{(J,Ext^J(M,N))|J in I}</formula> in which the first element is an integer of I and the second element is the correpsonding Ext module.

VERY IMPORTANT: CoCoA cannot accept the ring R as one of the inputs,

so if you want to calculate the module <formula>Ext^I_R(M,R)</formula>
you need to type something like

Ext(I, M, Ideal(1));


Ext(I, M, R^1);


Ext(I, M, R/Ideal(0));

NOTE: The input is pretty flexible in terms of what you can use for M

and N. For example they can be zero modules or free modules. See some
examples below.


  Use R ::= Q[x,y,z];
  I := Ideal(x^5, y^3, z^2);
  Ideal(0) : (I);
  $hom.Hom(R^1/Module(I), R^1);   -- from Hom package
  Ext(0, R/I, R^1);   --- all those things should be isomorphic
  Ext(0..4, R/I, R/Ideal(0)); -- another way to define the ring R as a quotient
Ext^0 = Module([[0]])

Ext^1 = Module([[0]])

Ext^2 = Module([[0]])

Ext^3 = R^1/Module([[x^5], [y^3], [z^2]])

Ext^4 = Module([[0]])

  N := Module([x^2,y], [x+z,0]);
  Ext(0..4, R/I, R^2/N);
Ext^0 = Module([[0]])

Ext^1 = Module([[0]])

Ext^2 = R^2/Module([[0, x + z], [y, 0], [0, z^2], [z^2, 0], [0, y^3], [x^5, 0]])

Ext^3 = R^2/Module([[x + z, 0], [0, z^2], [z^2, 0], [y^3, 0], [0, x^5], [0, y]])

Ext^4 = Module([[0]])


Since version 4.7.3 the output modules are presented minimally.


Ext(I:INT, M:TAGGED(<coc_quotes>Quotient</coc_quotes>), Q:TAGGED(<coc_quotes>Quotient</coc_quotes>)): TAGGED(<coc_quotes>Quotient</coc_quotes>)
Ext(I:LIST, M:TAGGED(<coc_quotes>Quotient</coc_quotes>), Q:TAGGED(<coc_quotes>Quotient</coc_quotes>)): TAGGED(<coc_quotes>$ext.ExtList</coc_quotes>)