<p>A <strong class="pkg">homalg</strong> map is a data structures for maps (module homomorphisms) between finitely generated modules. Each map in <strong class="pkg">homalg</strong> knows its source (--> <code class="func">Source</code> (<a href="https://homalg-project.github.io/homalg_project/homalg/doc/chap4_mj.html#X7DE8173F80E07AB1"><span class="RefLink">homalg: Source</span></a>)) and its target (--> <code class="func">Range</code> (<a href="https://homalg-project.github.io/homalg_project/homalg/doc/chap4_mj.html#X829F76BB80BD55DB"><span class="RefLink">homalg: Range</span></a>)). A map is represented by a <strong class="pkg">homalg</strong> matrix relative to the current set of generators of the source resp. target <strong class="pkg">homalg</strong> module. As with modules (--> Chapter <a href="chap7_mj.html#X8183A6857B0C3633"><span class="RefLink">7</span></a>), maps in <strong class="pkg">homalg</strong> are realized in an intrinsic manner: If the presentations of the source or/and target module are altered after the map was constructed, a new adapted representation matrix of the map is automatically computed whenever needed. For this the internal transition matrices of the modules are used. <strong class="pkg">homalg</strong> uses the so-called <em>associative</em> convention for maps. This means that maps of left modules are applied from the right, whereas maps of right modules from the left.</p>
<p>The <strong class="pkg">GAP</strong> category of <strong class="pkg">homalg</strong> maps.</p>
<p>(It is a subcategory of the <strong class="pkg">GAP</strong> categories <code class="code">IsHomalgModuleOrMap</code> and <code class="code">IsHomalgStaticMorphism</code>.)</p>
<div class="example"><pre>
DeclareCategory( "IsHomalgMap",
IsHomalgModuleOrMap and
IsHomalgStaticMorphism );
</pre></div>
<p>The <strong class="pkg">GAP</strong> category of <strong class="pkg">homalg</strong> self-maps.</p>
<p>(It is a subcategory of the <strong class="pkg">GAP</strong> categories <code class="code">IsHomalgMap</code> and <code class="code">IsHomalgEndomorphism</code>.)</p>
<div class="example"><pre>
DeclareCategory( "IsHomalgSelfMap",
IsHomalgMap and
IsHomalgEndomorphism );
</pre></div>
<p>The <strong class="pkg">GAP</strong> representation of maps between finitley generated <strong class="pkg">homalg</strong> modules.</p>
<p>(It is a representation of the <strong class="pkg">GAP</strong> category <code class="func">IsHomalgChainMorphism</code> (<a href="https://homalg-project.github.io/homalg_project/homalg/doc/chap7_mj.html#X7CB62E188027B7C5"><span class="RefLink">homalg: IsHomalgChainMorphism</span></a>), which is a subrepresentation of the <strong class="pkg">GAP</strong> representation <code class="code">IsStaticMorphismOfFinitelyGeneratedObjectsRep</code>.)</p>
<p>This constructor returns a map (homomorphism) of finitely presented modules. It is represented by the <strong class="pkg">homalg</strong> matrix <var class="Arg">mat</var> relative to the current set of generators of the source <strong class="pkg">homalg</strong> module <var class="Arg">M</var> and target module <var class="Arg">N</var> (--> <a href="chap7_mj.html#X7DB16C4B87DD115F"><span class="RefLink">7.2</span></a>). Unless the source module is free <em>and</em> given on free generators the returned map will cautiously be indicated using parenthesis: <q>homomorphism</q>. To verify if the result is indeed a well defined map use <code class="func">IsMorphism</code> (<a href="https://homalg-project.github.io/homalg_project/homalg/doc/chap4_mj.html#X7F66120A814DC16B"><span class="RefLink">homalg: IsMorphism</span></a>). If the presentations of the source or/and target module are altered after the map was constructed, a new adapted representation matrix of the map is automatically computed whenever needed. For this the internal transition matrices of the modules are used. If source and target are identical objects, and only then, the map is created as a selfmap (endomorphism). <strong class="pkg">homalg</strong> uses the so-called <em>associative</em> convention for maps. This means that maps of left modules are applied from the right, whereas maps of right modules from the left.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">zz := HomalgRingOfIntegers( );;</span>
<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, -2, -4, \</span>
<span class="GAPprompt">></span> <span class="GAPinput">0, 1, 4, 7, \</span>
<span class="GAPprompt">></span> <span class="GAPinput">1, 0, -2, -4 \</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">Display( phi );</span>
[ [ 1, 0, -2, -4 ],
[ 0, 1, 4, 7 ],
[ 1, 0, -2, -4 ] ]
the map is currently represented by the above 3 x 4 matrix
<span class="GAPprompt">gap></span> <span class="GAPinput">ByASmallerPresentation( M );</span>
<A rank 1 left module presented by 1 relation for 2 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( last );</span>
Z/< 3 > + Z^(1 x 1)
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( phi );</span>
[ [ 2, 1, 0, -1 ],
[ 1, 0, -2, -4 ] ]
the map is currently represented by the above 2 x 4 matrix
<span class="GAPprompt">gap></span> <span class="GAPinput">ByASmallerPresentation( N );</span>
<A rank 2 left module presented by 1 relation for 3 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( N );</span>
Z/< 4 > + Z^(1 x 2)
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( phi );</span>
[ [ -8, 0, 0 ],
[ -3, -1, -2 ] ]
the map is currently represented by the above 2 x 3 matrix
<span class="GAPprompt">gap></span> <span class="GAPinput">ByASmallerPresentation( phi );</span>
<A non-zero homomorphism of left modules>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( phi );</span>
[ [ 0, 0, 0 ],
[ 1, -1, -2 ] ]
the map is currently represented by the above 2 x 3 matrix
</pre></div>
<p>To construct a map with source being a not yet specified free module</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">N;</span>
<A rank 2 left module presented by 1 relation for 3 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">SetPositionOfTheDefaultSetOfGenerators( N, 1 );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">N;</span>
<A rank 2 left module presented by 2 relations for 4 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">psi := HomalgMap( mat, "free", N );</span>
<A homomorphism of left modules>
<span class="GAPprompt">gap></span> <span class="GAPinput">Source( psi );</span>
<A free left module of rank 3 on free generators>
</pre></div>
<p>To construct a map between not yet specified free left modules</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">chi := HomalgMap( mat ); ## or chi := HomalgMap( mat, "l" );</span>
<A homomorphism of left modules>
<span class="GAPprompt">gap></span> <span class="GAPinput">Source( chi );</span>
<A free left module of rank 3 on free generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Range( chi );</span>
<A free left module of rank 4 on free generators>
</pre></div>
<p>To construct a map between not yet specified free right modules</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">kappa := HomalgMap( mat, "r" );</span>
<A homomorphism of right modules>
<span class="GAPprompt">gap></span> <span class="GAPinput">Source( kappa );</span>
<A free right module of rank 4 on free generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Range( kappa );</span>
<A free right module of rank 3 on free generators>
</pre></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ HomalgZeroMap</code>( <var class="Arg">M</var>, <var class="Arg">N</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: a <strong class="pkg">homalg</strong> map</p>
<p>The constructor returns the zero map between the source <strong class="pkg">homalg</strong> module <var class="Arg">M</var> and the target <strong class="pkg">homalg</strong> module <var class="Arg">N</var>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">zz := HomalgRingOfIntegers( );;</span>
<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">HomalgZeroMap( M, N );</span>
<The zero morphism of left modules>
</pre></div>
<p>Compute a pre-inverse of the morphism <var class="Arg">phi</var> in case one exists. For a pre-inverse to exist <var class="Arg">phi</var> must be an epimorphism. For <em>commutative</em> rings <strong class="pkg">homalg</strong> has an algorithm installed which decides the existence and returns a pre-inverse in case one exists. If a pre-inverse does not exist then <code class="code">false</code> is returned. The algorithm finds a particular solution of a two-side inhomogeneous linear system over <span class="SimpleMath">\(R := \)</span><code class="code">HomalgRing</code><span class="SimpleMath">\(( \textit{phi} )\)</span>. For <em>non</em>commutative rings a heuristic method is installed. If it finds a pre-inverse it returns it, otherwise it returns <code class="code">fail</code> (--> <a href="chap1_mj.html#X7C31B1FE786E596E"><span class="RefLink">Principal limitation</span></a>). The operation <code class="code">PreInverse</code> is used to install a method for the property <code class="func">IsSplitEpimorphism</code> (<a href="https://homalg-project.github.io/homalg_project/homalg/doc/chap4_mj.html#X80A66EFA862E56BC"><span class="RefLink">homalg: IsSplitEpimorphism</span></a>).</p>
<p><code class="code">PreInverse</code> checks if it can decide the projectivity of <code class="code">Range</code><span class="SimpleMath">\(( \textit{phi} )\)</span>.</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.