<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ functor_Cokernel</code></td><td class="tdright">( global variable )</td></tr></table></div>
<p>The functor that associates to a map its cokernel.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Cokernel</code>( <var class="Arg">phi</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>The following example also makes use of the natural transformation <code class="code">CokernelEpi</code>.</p>
the map is currently represented by the above 4 x 2 matrix
<span class="GAPprompt">gap></span> <span class="GAPinput">DefectOfExactness( phi, nu );</span>
<A zero left module>
<span class="GAPprompt">gap></span> <span class="GAPinput">ByASmallerPresentation( nu );</span>
<A non-zero epimorphism of left modules>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( nu );</span>
[ [ 2, 0 ],
[ 1, -2 ],
[ 0, 1 ] ]
the map is currently represented by the above 3 x 2 matrix
<span class="GAPprompt">gap></span> <span class="GAPinput">PreInverse( nu );</span>
false
</pre></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ functor_ImageObject</code></td><td class="tdright">( global variable )</td></tr></table></div>
<p>The functor that associates to a map its image.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ImageObject</code>( <var class="Arg">phi</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>The following example also makes use of the natural transformations <code class="code">ImageObjectEpi</code> and <code class="code">ImageObjectEmb</code>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">zz := HomalgRingOfIntegers( );</span>
Z
<span class="GAPprompt">gap></span> <span class="GAPinput">M := HomalgMatrix( "[ 2, 3, 4, 5, 6, 7 ]", 2, 3, zz );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">M := LeftPresentation( M );</span>
<A non-torsion left module presented by 2 relations for 3 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">N := HomalgMatrix( "[ 2, 3, 4, 5, 6, 7, 8, 9 ]", 2, 4, zz );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">N := LeftPresentation( N );</span>
<A non-torsion left module presented by 2 relations for 4 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">mat := HomalgMatrix( "[ \
<span class="GAPprompt">></span> <span class="GAPinput">1, 0, -3, -6, \</span>
<span class="GAPprompt">></span> <span class="GAPinput">0, 1, 6, 11, \</span>
<span class="GAPprompt">></span> <span class="GAPinput">1, 0, -3, -6 \</span>
<span class="GAPprompt">></span> <span class="GAPinput">]", 3, 4, zz );;
<span class="GAPprompt">gap></span> <span class="GAPinput">phi := HomalgMap( mat, M, N );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsMorphism( phi );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">phi;</span>
<A homomorphism of left modules>
<span class="GAPprompt">gap></span> <span class="GAPinput">im := ImageObject( phi );</span>
<A left module presented by yet unknown relations for 3 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">ByASmallerPresentation( im );</span>
<A free left module of rank 1 on a free generator>
<span class="GAPprompt">gap></span> <span class="GAPinput">pi := ImageObjectEpi( phi );</span>
<A non-zero split epimorphism of left modules>
<span class="GAPprompt">gap></span> <span class="GAPinput">epsilon := ImageObjectEmb( phi );</span>
<A monomorphism of left modules>
<span class="GAPprompt">gap></span> <span class="GAPinput">phi = pi * epsilon;</span>
true
</pre></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Kernel</code>( <var class="Arg">phi</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>The following example also makes use of the natural transformation <code class="code">KernelEmb</code>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">zz := HomalgRingOfIntegers( );</span>
Z
<span class="GAPprompt">gap></span> <span class="GAPinput">M := HomalgMatrix( "[ 2, 3, 4, 5, 6, 7 ]", 2, 3, zz );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">M := LeftPresentation( M );</span>
<A non-torsion left module presented by 2 relations for 3 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">N := HomalgMatrix( "[ 2, 3, 4, 5, 6, 7, 8, 9 ]", 2, 4, zz );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">N := LeftPresentation( N );</span>
<A non-torsion left module presented by 2 relations for 4 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">mat := HomalgMatrix( "[ \
<span class="GAPprompt">></span> <span class="GAPinput">1, 0, -3, -6, \</span>
<span class="GAPprompt">></span> <span class="GAPinput">0, 1, 6, 11, \</span>
<span class="GAPprompt">></span> <span class="GAPinput">1, 0, -3, -6 \</span>
<span class="GAPprompt">></span> <span class="GAPinput">]", 3, 4, zz );;
<span class="GAPprompt">gap></span> <span class="GAPinput">phi := HomalgMap( mat, M, N );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsMorphism( phi );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">phi;</span>
<A homomorphism of left modules>
<span class="GAPprompt">gap></span> <span class="GAPinput">ker := Kernel( phi );</span>
<A cyclic left module presented by yet unknown relations for a cyclic generato\
r>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( ker );</span>
Z/< -3 >
<span class="GAPprompt">gap></span> <span class="GAPinput">ByASmallerPresentation( last );</span>
<A cyclic torsion left module presented by 1 relation for a cyclic generator>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( ker );</span>
Z/< 3 >
<span class="GAPprompt">gap></span> <span class="GAPinput">iota := KernelEmb( phi );</span>
<A monomorphism of left modules>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( iota );</span>
[ [ 0, 1, 2 ] ]
the map is currently represented by the above 1 x 3 matrix
<span class="GAPprompt">gap></span> <span class="GAPinput">DefectOfExactness( iota, phi );</span>
<A zero left module>
<span class="GAPprompt">gap></span> <span class="GAPinput">ByASmallerPresentation( iota );</span>
<A non-zero monomorphism of left modules>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( iota );</span>
[ [ 1, 0 ] ]
the map is currently represented by the above 1 x 2 matrix
<span class="GAPprompt">gap></span> <span class="GAPinput">PostInverse( iota );</span>
<A non-zero split epimorphism of left modules>
</pre></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DefectOfExactness</code>( <var class="Arg">phi</var>, <var class="Arg">psi</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>We follow the associative convention for applying maps. For left modules <var class="Arg">phi</var> is applied first and from the right. For right modules <var class="Arg">psi</var> is applied first and from the left.</p>
<p>The following example also makes use of the natural transformation <code class="code">KernelEmb</code>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">zz := HomalgRingOfIntegers( );</span>
Z
<span class="GAPprompt">gap></span> <span class="GAPinput">M := HomalgMatrix( "[ 2, 3, 4, 0, 5, 6, 7, 0 ]", 2, 4, zz );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">M := LeftPresentation( M );</span>
<A non-torsion left module presented by 2 relations for 4 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">N := HomalgMatrix( "[ 2, 3, 4, 5, 6, 7, 8, 9 ]", 2, 4, zz );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">N := LeftPresentation( N );</span>
<A non-torsion left module presented by 2 relations for 4 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">mat := HomalgMatrix( "[ \
<span class="GAPprompt">></span> <span class="GAPinput">1, 3, 3, 3, \</span>
<span class="GAPprompt">></span> <span class="GAPinput">0, 3, 10, 17, \</span>
<span class="GAPprompt">></span> <span class="GAPinput">1, 3, 3, 3, \</span>
<span class="GAPprompt">></span> <span class="GAPinput">0, 0, 0, 0 \</span>
<span class="GAPprompt">></span> <span class="GAPinput">]", 4, 4, zz );;
<span class="GAPprompt">gap></span> <span class="GAPinput">phi := HomalgMap( mat, M, N );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsMorphism( phi );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">phi;</span>
<A homomorphism of left modules>
<span class="GAPprompt">gap></span> <span class="GAPinput">iota := KernelEmb( phi );</span>
<A monomorphism of left modules>
<span class="GAPprompt">gap></span> <span class="GAPinput">DefectOfExactness( iota, phi );</span>
<A zero left module>
<span class="GAPprompt">gap></span> <span class="GAPinput">hom_iota := Hom( iota ); ## a shorthand for Hom( iota, zz );</span>
<A homomorphism of right modules>
<span class="GAPprompt">gap></span> <span class="GAPinput">hom_phi := Hom( phi ); ## a shorthand for Hom( phi, zz );</span>
<A homomorphism of right modules>
<span class="GAPprompt">gap></span> <span class="GAPinput">DefectOfExactness( hom_iota, hom_phi );</span>
<A cyclic right module on a cyclic generator satisfying yet unknown relations>
<span class="GAPprompt">gap></span> <span class="GAPinput">ByASmallerPresentation( last );</span>
<A cyclic torsion right module on a cyclic generator satisfying 1 relation>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( last );</span>
Z/< 2 >
</pre></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Hom</code>( <var class="Arg">o1</var>, <var class="Arg">o2</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p><var class="Arg">o1</var> resp. <var class="Arg">o2</var> could be a module, a map, a complex (of modules or of again of complexes), or a chain morphism.</p>
<p>Each generator of a module of homomorphisms is displayed as a matrix of appropriate dimensions.</p>
the map is currently represented by the above 3 x 4 matrix
<span class="GAPprompt">gap></span> <span class="GAPinput">homNM := Source( psi );</span>
<A rank 2 right module on 4 generators satisfying 2 relations>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsIdenticalObj( homNM, Hom( N, M ) ); ## the caching at work</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">homMM := Range( psi );</span>
<A rank 1 right module on 3 generators satisfying 2 relations>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsIdenticalObj( homMM, Hom( M, M ) ); ## the caching at work</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( homNM );</span>
Z/< 3 > + Z/< 3 > + Z^(2 x 1)
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( homMM );</span>
Z/< 3 > + Z/< 3 > + Z^(1 x 1)
<span class="GAPprompt">gap></span> <span class="GAPinput">IsMonomorphism( psi );</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">IsEpimorphism( psi );</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">GeneratorsOfModule( homMM );</span>
<A set of 3 generators of a homalg right module>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( last );</span>
[ [ 0, 0, 0 ],
[ 0, 1, 2 ],
[ 0, 0, 0 ] ]
the map is currently represented by the above 3 x 3 matrix
[ [ 0, 2, 4 ],
[ 0, 0, 0 ],
[ 0, 2, 4 ] ]
the map is currently represented by the above 3 x 3 matrix
[ [ 0, 0, 1 ],
[ 0, 2, 2 ],
[ 0, 0, 1 ] ]
the map is currently represented by the above 3 x 3 matrix
a set of 3 generators given by the the above matrices
<span class="GAPprompt">gap></span> <span class="GAPinput">GeneratorsOfModule( homNM );</span>
<A set of 4 generators of a homalg right module>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( last );</span>
[ [ 0, 1, 2 ],
[ 0, 1, 2 ],
[ 0, 1, 2 ],
[ 0, 0, 0 ] ]
the map is currently represented by the above 4 x 3 matrix
s s
. s
<span class="GAPprompt">gap></span> <span class="GAPinput">filt := FiltrationBySpectralSequence( II_E );</span>
<A descending filtration with degrees [ -1 .. 0 ] and graded parts:
-1: <A non-zero cyclic torsion right module on a cyclic generator satisfying
yet unknown relations>
0: <A rank 1 right module on 3 generators satisfying 2 relations>
of
<A right module on 4 generators satisfying yet unknown relations>>
<span class="GAPprompt">gap></span> <span class="GAPinput">ByASmallerPresentation( filt );</span>
<A descending filtration with degrees [ -1 .. 0 ] and graded parts:
-1: <A non-zero cyclic torsion right module on a cyclic generator satisfying 1\
relation>
0: <A rank 1 right module on 2 generators satisfying 1 relation>
of
<A rank 1 right module on 3 generators satisfying 2 relations>>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( filt );</span>
Degree -1:
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ TensorProduct</code>( <var class="Arg">o1</var>, <var class="Arg">o2</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ \*</code>( <var class="Arg">o1</var>, <var class="Arg">o2</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p><var class="Arg">o1</var> resp. <var class="Arg">o2</var> could be a module, a map, a complex (of modules or of again of complexes), or a chain morphism.</p>
<p>The symbol <code class="code">*</code> is a shorthand for several operations associated with the functor <code class="code">Functor_TensorProduct_for_fp_modules</code> installed under the name <code class="code">TensorProduct</code>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">zz := HomalgRingOfIntegers( );</span>
Z
<span class="GAPprompt">gap></span> <span class="GAPinput">M := HomalgMatrix( "[ 2, 3, 4, 5, 6, 7 ]", 2, 3, zz );</span>
<A 2 x 3 matrix over an internal ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">M := LeftPresentation( M );</span>
<A non-torsion left module presented by 2 relations for 3 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">N := HomalgMatrix( "[ 2, 3, 4, 5, 6, 7, 8, 9 ]", 2, 4, zz );</span>
<A 2 x 4 matrix over an internal ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">N := LeftPresentation( N );</span>
<A non-torsion left module presented by 2 relations for 4 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">mat := HomalgMatrix( "[ \
<span class="GAPprompt">></span> <span class="GAPinput">1, 0, -3, -6, \</span>
<span class="GAPprompt">></span> <span class="GAPinput">0, 1, 6, 11, \</span>
<span class="GAPprompt">></span> <span class="GAPinput">1, 0, -3, -6 \</span>
<span class="GAPprompt">></span> <span class="GAPinput">]", 3, 4, zz );
<A 3 x 4 matrix over an internal ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">phi := HomalgMap( mat, M, N );</span>
<A "homomorphism" of left modules>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsMorphism( phi );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">phi;</span>
<A homomorphism of left modules>
<span class="GAPprompt">gap></span> <span class="GAPinput">L := Hom( zz, M );</span>
<A rank 1 right module on 3 generators satisfying yet unknown relations>
<span class="GAPprompt">gap></span> <span class="GAPinput">ByASmallerPresentation( L );</span>
<A rank 1 right module on 2 generators satisfying 1 relation>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( L );</span>
Z/< 3 > + Z^(1 x 1)
<span class="GAPprompt">gap></span> <span class="GAPinput">L;</span>
<A rank 1 right module on 2 generators satisfying 1 relation>
<span class="GAPprompt">gap></span> <span class="GAPinput">psi := phi * L;</span>
<A homomorphism of right modules>
<span class="GAPprompt">gap></span> <span class="GAPinput">ByASmallerPresentation( psi );</span>
<A non-zero homomorphism of right modules>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( psi );</span>
[ [ 0, 0, 1, 1 ],
[ 0, 0, 8, 1 ],
[ 0, 0, 0, -2 ],
[ 0, 0, 0, 2 ] ]
the map is currently represented by the above 4 x 4 matrix
<span class="GAPprompt">gap></span> <span class="GAPinput">ML := Source( psi );</span>
<A rank 1 right module on 4 generators satisfying 3 relations>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsIdenticalObj( ML, M * L ); ## the caching at work</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">NL := Range( psi );</span>
<A rank 2 right module on 4 generators satisfying 2 relations>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsIdenticalObj( NL, N * L ); ## the caching at work</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( ML );</span>
Z/< 3 > + Z/< 3 > + Z/< 3 > + Z^(1 x 1)
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( NL );</span>
Z/< 3 > + Z/< 12 > + Z^(2 x 1)
</pre></div>
<p>Now we compute a certain natural filtration on the tensor product <span class="SimpleMath">\(M\)</span><code class="code">*</code><span class="SimpleMath">\(L\)</span>:</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">P := Resolution( M );</span>
<A non-zero right acyclic complex containing a single morphism of left modules\
at degrees [ 0 .. 1 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">GP := Hom( P );</span>
<A non-zero acyclic cocomplex containing a single morphism of right modules at\
degrees [ 0 .. 1 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">CE := Resolution( GP );</span>
<An acyclic cocomplex containing a single morphism of right complexes at degre\
es [ 0 .. 1 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">FCE := Hom( CE, L );</span>
<A non-zero acyclic complex containing a single morphism of left cocomplexes a\
t degrees [ 0 .. 1 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">BC := HomalgBicomplex( FCE );</span>
<A non-zero bicomplex containing left modules at bidegrees [ 0 .. 1 ]x
[ -1 .. 0 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">II_E := SecondSpectralSequenceWithFiltration( BC );</span>
<A stable homological spectral sequence with sheets at levels
[ 0 .. 2 ] each consisting of left modules at bidegrees [ -1 .. 0 ]x
[ 0 .. 1 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( II_E );</span>
The associated transposed spectral sequence:
s s
. s
<span class="GAPprompt">gap></span> <span class="GAPinput">filt := FiltrationBySpectralSequence( II_E );</span>
<An ascending filtration with degrees [ -1 .. 0 ] and graded parts:
0: <A rank 1 left module presented by 1 relation for 2 generators>
-1: <A non-zero left module presented by 2 relations for 2 generators>
of
<A non-zero left module presented by 4 relations for 4 generators>>
<span class="GAPprompt">gap></span> <span class="GAPinput">ByASmallerPresentation( filt );</span>
<An ascending filtration with degrees [ -1 .. 0 ] and graded parts:
0: <A rank 1 left module presented by 1 relation for 2 generators>
-1: <A non-zero torsion left module presented by 2 relations
for 2 generators>
of
<A rank 1 left module presented by 3 relations for 4 generators>>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( filt );</span>
Degree 0:
<p>Below is the only <em>specific</em> line of code used to define <code class="code">Functor_Ext_for_fp_modules</code> and all the different operations <code class="code">Ext</code> in <strong class="pkg">homalg</strong>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Ext</code>( [<var class="Arg">c</var>, ]<var class="Arg">o1</var>, <var class="Arg">o2</var>[, <var class="Arg">str</var>] )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Compute the <var class="Arg">c</var>-th extension object of <var class="Arg">o1</var> with <var class="Arg">o2</var> where <var class="Arg">c</var> is a nonnegative integer and <var class="Arg">o1</var> resp. <var class="Arg">o2</var> could be a module, a map, a complex (of modules or of again of complexes), or a chain morphism. If <var class="Arg">str</var>=<q>a</q> then the (cohomologically) graded object <span class="SimpleMath">\(Ext^i(\)</span><var class="Arg">o1</var>,<var class="Arg">o2</var><span class="SimpleMath">\()\)</span> for <span class="SimpleMath">\(0 \leq i \leq\)</span><varclass="Arg">c</var> is computed. If neither <var class="Arg">c</var> nor <var class="Arg">str</var> is specified then the cohomologically graded object <span class="SimpleMath">\(Ext^i(\)</span><var class="Arg">o1</var>,<var class="Arg">o2</var><span class="SimpleMath">\()\)</span> for <span class="SimpleMath">\(0 \leq i \leq d\)</span> is computed, where <span class="SimpleMath">\(d\)</span> is the length of the internally computed free resolution of <var class="Arg">o1</var>.</p>
<p>Each generator of a module of extensions is displayed as a matrix of appropriate dimensions.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">zz := HomalgRingOfIntegers( );</span>
Z
<span class="GAPprompt">gap></span> <span class="GAPinput">M := HomalgMatrix( "[ 2, 3, 4, 5, 6, 7 ]", 2, 3, zz );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">M := LeftPresentation( M );</span>
<A non-torsion left module presented by 2 relations for 3 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">N := TorsionObject( M );</span>
<A cyclic torsion left module presented by yet unknown relations for a cyclic \
generator>
<span class="GAPprompt">gap></span> <span class="GAPinput">iota := TorsionObjectEmb( M );</span>
<A monomorphism of left modules>
<span class="GAPprompt">gap></span> <span class="GAPinput">psi := Ext( 1, iota, N );</span>
<A homomorphism of right modules>
<span class="GAPprompt">gap></span> <span class="GAPinput">ByASmallerPresentation( psi );</span>
<A non-zero homomorphism of right modules>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( psi );</span>
[ [ 1 ] ]
the map is currently represented by the above 1 x 1 matrix
<span class="GAPprompt">gap></span> <span class="GAPinput">extNN := Range( psi );</span>
<A non-zero cyclic torsion right module on a cyclic generator satisfying 1 rel\
ation>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsIdenticalObj( extNN, Ext( 1, N, N ) ); ## the caching at work</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">extMN := Source( psi );</span>
<A non-zero cyclic torsion right module on a cyclic generator satisfying 1 rel\
ation>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsIdenticalObj( extMN, Ext( 1, M, N ) ); ## the caching at work</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( extNN );</span>
Z/< 3 >
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( extMN );</span>
Z/< 3 >
</pre></div>
<p>Below is the only <em>specific</em> line of code used to define <code class="code">Functor_Tor_for_fp_modules</code> and all the different operations <code class="code">Tor</code> in <strong class="pkg">homalg</strong>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Tor</code>( [<var class="Arg">c</var>, ]<var class="Arg">o1</var>, <var class="Arg">o2</var>[, <var class="Arg">str</var>] )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Compute the <var class="Arg">c</var>-th torsion object of <var class="Arg">o1</var> with <var class="Arg">o2</var> where <var class="Arg">c</var> is a nonnegative integer and <var class="Arg">o1</var> resp. <var class="Arg">o2</var> could be a module, a map, a complex (of modules or of again of complexes), or a chain morphism. If <var class="Arg">str</var>=<q>a</q> then the (cohomologically) graded object <span class="SimpleMath">\(Tor_i(\)</span><var class="Arg">o1</var>,<var class="Arg">o2</var><span class="SimpleMath">\()\)</span> for <span class="SimpleMath">\(0 \leq i \leq\)</span><var class="Arg">c</var> is computed. If neither <var class="Arg">c</var> nor <var class="Arg">str</var> is specified then the cohomologically graded object <span class="SimpleMath">\(Tor_i(\)</span><varclass="Arg">o1</var>,<var class="Arg">o2</var><span class="SimpleMath">\()\)</span> for <span class="SimpleMath">\(0 \leq i \leq d\)</span> is computed, where <span class="SimpleMath">\(d\)</span> is the length of the internally computed free resolution of <var class="Arg">o1</var>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">zz := HomalgRingOfIntegers( );</span>
Z
<span class="GAPprompt">gap></span> <span class="GAPinput">M := HomalgMatrix( "[ 2, 3, 4, 5, 6, 7 ]", 2, 3, zz );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">M := LeftPresentation( M );</span>
<A non-torsion left module presented by 2 relations for 3 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">N := TorsionObject( M );</span>
<A cyclic torsion left module presented by yet unknown relations for a cyclic \
generator>
<span class="GAPprompt">gap></span> <span class="GAPinput">iota := TorsionObjectEmb( M );</span>
<A monomorphism of left modules>
<span class="GAPprompt">gap></span> <span class="GAPinput">psi := Tor( 1, iota, N );</span>
<A homomorphism of left modules>
<span class="GAPprompt">gap></span> <span class="GAPinput">ByASmallerPresentation( psi );</span>
<A non-zero homomorphism of left modules>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( psi );</span>
[ [ 1 ] ]
the map is currently represented by the above 1 x 1 matrix
<span class="GAPprompt">gap></span> <span class="GAPinput">torNN := Source( psi );</span>
<A non-zero cyclic torsion left module presented by 1 relation for a cyclic ge\
nerator>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsIdenticalObj( torNN, Tor( 1, N, N ) ); ## the caching at work</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">torMN := Range( psi );</span>
<A non-zero cyclic torsion left module presented by 1 relation for a cyclic ge\
nerator>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsIdenticalObj( torMN, Tor( 1, M, N ) ); ## the caching at work</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( torNN );</span>
Z/< 3 >
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( torMN );</span>
Z/< 3 >
</pre></div>
<p>Below is the only <em>specific</em> line of code used to define <code class="code">Functor_RHom_for_fp_modules</code> and all the different operations <code class="code">RHom</code> in <strong class="pkg">homalg</strong>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RHom</code>( [<var class="Arg">c</var>, ]<var class="Arg">o1</var>, <var class="Arg">o2</var>[, <var class="Arg">str</var>] )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Compute the <var class="Arg">c</var>-th extension object of <var class="Arg">o1</var> with <var class="Arg">o2</var> where <var class="Arg">c</var> is a nonnegative integer and <var class="Arg">o1</var> resp. <var class="Arg">o2</var> could be a module, a map, a complex (of modules or of again of complexes), or a chain morphism. The string <var class="Arg">str</var> may take different values:</p>
<ul>
<li><p>If <var class="Arg">str</var>=<q>a</q> then <span class="SimpleMath">\(R^i Hom(\)</span><var class="Arg">o1</var>,<var class="Arg">o2</var><span class="SimpleMath">\()\)</span> for <span class="SimpleMath">\(0 \leq i \leq\)</span><var class="Arg">c</var> is computed.</p>
</li>
<li><p>If <var class="Arg">str</var>=<q>c</q> then the <var class="Arg">c</var>-th connecting homomorphism with respect to the short exact sequence <var class="Arg">o1</var> is computed.</p>
</li>
<li><p>If <var class="Arg">str</var>=<q>t</q> then the exact triangle upto cohomological degree <var class="Arg">c</var> with respect to the short exact sequence <var class="Arg">o1</var> is computed.</p>
</li>
</ul>
<p>If neither <var class="Arg">c</var> nor <var class="Arg">str</var> is specified then the cohomologically graded object <span class="SimpleMath">\(R^i Hom(\)</span><var class="Arg">o1</var>,<var class="Arg">o2</var><span class="SimpleMath">\()\)</span> for <span class="SimpleMath">\(0 \leq i \leq d\)</span> is computed, where <span class="SimpleMath">\(d\)</span> is the length of the internally computed free resolution of <var class="Arg">o1</var>.</p>
<p>Each generator of a module of derived homomorphisms is displayed as a matrix of appropriate dimensions.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">zz := HomalgRingOfIntegers( );</span>
Z
<span class="GAPprompt">gap></span> <span class="GAPinput">m := HomalgMatrix( [ [ 8, 0 ], [ 0, 2 ] ], zz );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">M := LeftPresentation( m );</span>
<A left module presented by 2 relations for 2 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( M );</span>
Z/< 8 > + Z/< 2 >
<span class="GAPprompt">gap></span> <span class="GAPinput">M;</span>
<A torsion left module presented by 2 relations for 2 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">a := HomalgMatrix( [ [ 2, 0 ] ], zz );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">alpha := HomalgMap( a, "free", M );</span>
<A homomorphism of left modules>
<span class="GAPprompt">gap></span> <span class="GAPinput">pi := CokernelEpi( alpha );</span>
<An epimorphism of left modules>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( pi );</span>
[ [ 1, 0 ],
[ 0, 1 ] ]
the map is currently represented by the above 2 x 2 matrix
<span class="GAPprompt">gap></span> <span class="GAPinput">iota := KernelEmb( pi );</span>
<A monomorphism of left modules>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( iota );</span>
[ [ 2, 0 ] ]
the map is currently represented by the above 1 x 2 matrix
<span class="GAPprompt">gap></span> <span class="GAPinput">N := Kernel( pi );</span>
<A cyclic torsion left module presented by yet unknown relations for a cyclic \
generator>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( N );</span>
Z/< 4 >
<span class="GAPprompt">gap></span> <span class="GAPinput">C := HomalgComplex( pi );</span>
<A left acyclic complex containing a single morphism of left modules at degree\
s [ 0 .. 1 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">Add( C, iota );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">ByASmallerPresentation( C );</span>
<A non-zero short exact sequence containing
2 morphisms of left modules at degrees [ 0 .. 2 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( C );</span>
-------------------------
at homology degree: 2
Z/< 4 >
-------------------------
[ [ 0, 6 ] ]
the map is currently represented by the above 1 x 2 matrix
------------v------------
at homology degree: 1
Z/< 2 > + Z/< 8 >
-------------------------
[ [ 0, 1 ],
[ 1, 1 ] ]
the map is currently represented by the above 2 x 2 matrix
------------v------------
at homology degree: 0
Z/< 2 > + Z/< 2 >
-------------------------
<span class="GAPprompt">gap></span> <span class="GAPinput">T := RHom( C, N );</span>
<An exact cotriangle containing 3 morphisms of right cocomplexes at degrees
[ 0, 1, 2, 0 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">ByASmallerPresentation( T );</span>
<A non-zero exact cotriangle containing
3 morphisms of right cocomplexes at degrees [ 0, 1, 2, 0 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">L := LongSequence( T );</span>
<A cosequence containing 5 morphisms of right modules at degrees [ 0 .. 5 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( L );</span>
-------------------------
at cohomology degree: 5
Z/< 4 >
------------^------------
[ [ 0, 3 ] ]
the map is currently represented by the above 1 x 2 matrix
-------------------------
at cohomology degree: 4
Z/< 2 > + Z/< 4 >
------------^------------
[ [ 0, 1 ],
[ 0, 0 ] ]
the map is currently represented by the above 2 x 2 matrix
-------------------------
at cohomology degree: 3
Z/< 2 > + Z/< 2 >
------------^------------
[ [ 1 ],
[ 0 ] ]
the map is currently represented by the above 2 x 1 matrix
-------------------------
at cohomology degree: 2
Z/< 4 >
------------^------------
[ [ 0, 2 ] ]
the map is currently represented by the above 1 x 2 matrix
-------------------------
at cohomology degree: 1
Z/< 2 > + Z/< 4 >
------------^------------
[ [ 0, 1 ],
[ 2, 2 ] ]
the map is currently represented by the above 2 x 2 matrix
-------------------------
at cohomology degree: 0
Z/< 2 > + Z/< 2 >
-------------------------
<span class="GAPprompt">gap></span> <span class="GAPinput">IsExactSequence( L );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">L;</span>
<An exact cosequence containing 5 morphisms of right modules at degrees
[ 0 .. 5 ]>
</pre></div>
<p>Below is the only <em>specific</em> line of code used to define <code class="code">Functor_LTensorProduct_for_fp_modules</code> and all the different operations <code class="code">LTensorProduct</code> in <strong class="pkg">homalg</strong>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ LTensorProduct</code>( [<var class="Arg">c</var>, ]<var class="Arg">o1</var>, <var class="Arg">o2</var>[, <var class="Arg">str</var>] )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Compute the <var class="Arg">c</var>-th torsion object of <var class="Arg">o1</var> with <var class="Arg">o2</var> where <var class="Arg">c</var> is a nonnegative integer and <var class="Arg">o1</var> resp. <var class="Arg">o2</var> could be a module, a map, a complex (of modules or of again of complexes), or a chain morphism. The string <var class="Arg">str</var> may take different values:</p>
<ul>
<li><p>If <var class="Arg">str</var>=<q>a</q> then <span class="SimpleMath">\(L_i TensorProduct(\)</span><var class="Arg">o1</var>,<var class="Arg">o2</var><span class="SimpleMath">\()\)</span> for <span class="SimpleMath">\(0 \leq i \leq\)</span><var class="Arg">c</var> is computed.</p>
</li>
<li><p>If <var class="Arg">str</var>=<q>c</q> then the <var class="Arg">c</var>-th connecting homomorphism with respect to the short exact sequence <var class="Arg">o1</var> is computed.</p>
</li>
<li><p>If <var class="Arg">str</var>=<q>t</q> then the exact triangle upto cohomological degree <var class="Arg">c</var> with respect to the short exact sequence <var class="Arg">o1</var> is computed.</p>
</li>
</ul>
<p>If neither <var class="Arg">c</var> nor <var class="Arg">str</var> is specified then the cohomologically graded object <span class="SimpleMath">\(L_i TensorProduct(\)</span><var class="Arg">o1</var>,<var class="Arg">o2</var><span class="SimpleMath">\()\)</span> for <span class="SimpleMath">\(0 \leq i \leq d\)</span> is computed, where <span class="SimpleMath">\(d\)</span> is the length of the internally computed free resolution of <var class="Arg">o1</var>.</p>
<p>Each generator of a module of derived homomorphisms is displayed as a matrix of appropriate dimensions.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">zz := HomalgRingOfIntegers( );</span>
Z
<span class="GAPprompt">gap></span> <span class="GAPinput">m := HomalgMatrix( [ [ 8, 0 ], [ 0, 2 ] ], zz );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">M := LeftPresentation( m );</span>
<A left module presented by 2 relations for 2 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( M );</span>
Z/< 8 > + Z/< 2 >
<span class="GAPprompt">gap></span> <span class="GAPinput">M;</span>
<A torsion left module presented by 2 relations for 2 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">a := HomalgMatrix( [ [ 2, 0 ] ], zz );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">alpha := HomalgMap( a, "free", M );</span>
<A homomorphism of left modules>
<span class="GAPprompt">gap></span> <span class="GAPinput">pi := CokernelEpi( alpha );</span>
<An epimorphism of left modules>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( pi );</span>
[ [ 1, 0 ],
[ 0, 1 ] ]
the map is currently represented by the above 2 x 2 matrix
<span class="GAPprompt">gap></span> <span class="GAPinput">iota := KernelEmb( pi );</span>
<A monomorphism of left modules>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( iota );</span>
[ [ 2, 0 ] ]
the map is currently represented by the above 1 x 2 matrix
<span class="GAPprompt">gap></span> <span class="GAPinput">N := Kernel( pi );</span>
<A cyclic torsion left module presented by yet unknown relations for a cyclic \
generator>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( N );</span>
Z/< 4 >
<span class="GAPprompt">gap></span> <span class="GAPinput">C := HomalgComplex( pi );</span>
<A left acyclic complex containing a single morphism of left modules at degree\
s [ 0 .. 1 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">Add( C, iota );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">ByASmallerPresentation( C );</span>
<A non-zero short exact sequence containing
2 morphisms of left modules at degrees [ 0 .. 2 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( C );</span>
-------------------------
at homology degree: 2
Z/< 4 >
-------------------------
[ [ 0, 6 ] ]
the map is currently represented by the above 1 x 2 matrix
------------v------------
at homology degree: 1
Z/< 2 > + Z/< 8 >
-------------------------
[ [ 0, 1 ],
[ 1, 1 ] ]
the map is currently represented by the above 2 x 2 matrix
------------v------------
at homology degree: 0
Z/< 2 > + Z/< 2 >
-------------------------
<span class="GAPprompt">gap></span> <span class="GAPinput">T := LTensorProduct( C, N );</span>
<An exact triangle containing 3 morphisms of left complexes at degrees
[ 1, 2, 3, 1 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">ByASmallerPresentation( T );</span>
<A non-zero exact triangle containing
3 morphisms of left complexes at degrees [ 1, 2, 3, 1 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">L := LongSequence( T );</span>
<A sequence containing 5 morphisms of left modules at degrees [ 0 .. 5 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( L );</span>
-------------------------
at homology degree: 5
Z/< 4 >
-------------------------
[ [ 0, 3 ] ]
the map is currently represented by the above 1 x 2 matrix
------------v------------
at homology degree: 4
Z/< 2 > + Z/< 4 >
-------------------------
[ [ 0, 1 ],
[ 0, 0 ] ]
the map is currently represented by the above 2 x 2 matrix
------------v------------
at homology degree: 3
Z/< 2 > + Z/< 2 >
-------------------------
[ [ 2 ],
[ 0 ] ]
the map is currently represented by the above 2 x 1 matrix
------------v------------
at homology degree: 2
Z/< 4 >
-------------------------
[ [ 0, 2 ] ]
the map is currently represented by the above 1 x 2 matrix
------------v------------
at homology degree: 1
Z/< 2 > + Z/< 4 >
-------------------------
[ [ 0, 1 ],
[ 1, 1 ] ]
the map is currently represented by the above 2 x 2 matrix
------------v------------
at homology degree: 0
Z/< 2 > + Z/< 2 >
-------------------------
<span class="GAPprompt">gap></span> <span class="GAPinput">IsExactSequence( L );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">L;</span>
<An exact sequence containing 5 morphisms of left modules at degrees
[ 0 .. 5 ]>
</pre></div>
<p>Below is the only <em>specific</em> line of code used to define <code class="code">Functor_HomHom_for_fp_modules</code> and all the different operations <code class="code">HomHom</code> in <strong class="pkg">homalg</strong>.</p>
<p>Below is the only <em>specific</em> line of code used to define <code class="code">Functor_LHomHom_for_fp_modules</code> and all the different operations <code class="code">LHomHom</code> in <strong class="pkg">homalg</strong>.</p>
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.