<h3>A <span class="Heading">Overview of the <strong class="pkg">LocalizeRingForHomalg</strong> Package SourceCode</span></h3>
<p>This appendix is included in the documentation to shine some light on the mathematical backgrounds of this Package. Neither is it needed to work with this package nor should the methods presented here be called directly. The functions documented here are entries of the so called ring table and not to be called directly. There are higher level methods in declared and installed in <strong class="pkg">MatricesForHomalg</strong>, which call this functions (--> <code class="code">?MatricesForHomalg:The Basic Matrix Operations</code>).</p>
<p>We only present the simpler procedures, where no transformation matrices are computed, since the computation of transformation matrices carries no further mathematical ideas.</p>
<p>There are some methods in localized rings, where homalg is able to fall back on procedures of the corresponding global ring. Furthermore these methods work quite good together with Mora's algorithm as implemented in Singular, since we can treat it like a global ring. We will present some methods as an example, to show the idea:
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ BasisOfRowModule</code>( <var class="Arg">M</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: a "basis" of the module generated by M</p>
<p>This procedure computes a basis by using the Funcod of the underlying computation ring. If the computation ring is given by Mora's Algorithm, we will indeed compute a local basis. If we just use the global ring for computations, this will be a global basis and is just computed for some simplifications and not for the use of reducing by it. Of course we can just forget about the denominator of M.
<div class="example"><pre>
BasisOfRowModule :=
function( M )
Info(
InfoLocalizeRingForHomalg,
2, "Start BasisOfRowModule with ",
NumberRows( M ), "x", NumberColumns( M )
);
return HomalgLocalMatrix( BasisOfRowModule( Numerator( M ) ), HomalgRing( M ) );
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DecideZeroRows</code>( <var class="Arg">A</var>, <var class="Arg">B</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: a "reduced"form of <var class="Arg">A</var> with respect to <var class="Arg">B</var></p>
<p>This procedure just calls the DecideZeroRows of the computation ring for the numerator of <varclass="Arg">A</var>.</p>
<p>If we use Mora's algorithm this procedure will just call it. The result is divided by the denominator of A afterwards. Again we do not need to care about the denominator of B.
<p>If we use the reduction implemented in this package, this Funcod is overwritten and will not be called.</p>
<div class="example"><pre>
DecideZeroRows :=
function( A, B )
local R, ComputationRing, hook, result;
Info(
InfoLocalizeRingForHomalg,
2, "Start DecideZeroRows with ",
NumberRows( A ), "x", NumberColumns( A ), " and ",
NumberRows( B ), "x", NumberColumns( B )
);
R := HomalgRing( A );
ComputationRing := AssociatedComputationRing( R );
result := DecideZeroRows( Numerator( A ) , Numerator( B ) );
result := HomalgLocalMatrix( result, Denominator( A ) , R );
Info( InfoLocalizeRingForHomalgShowUnits, 1, "DecideZeroRows: produces denominator: ", Name( Denominator( result ) ) );
return result;
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SyzygiesGeneratorsOfRows</code>( <var class="Arg">M</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: a "basis" of the syzygies of the arguments (for details consult the homalg help)</p>
<p>It is easy to see, that a global syzygy is also a local syzygy and vice versa when clearing the local Syzygy of its denominators. So this procedure just calls the syzygy Funcod of the underlying computation ring.</p>
<div class="example"><pre>
SyzygiesGeneratorsOfRows :=
function( M )
Info(
InfoLocalizeRingForHomalg,
2, "Start SyzygiesGeneratorsOfRows with ",
NumberRows( M ), "x", NumberColumns( M )
);
return HomalgLocalMatrix(\
SyzygiesGeneratorsOfRows( Numerator( M ) ), HomalgRing( M )\
);
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DecideZeroRows</code>( <var class="Arg">B</var>, <var class="Arg">A</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: a "reduced"form of <var class="Arg">B</var> with respect to <var class="Arg">A</var></p>
<p>This procedure is the mathematical core procedure of this package. We use a trick to decide locally, whether <var class="Arg">B</var> can be reduced to zero by <var class="Arg">A</var> with a global computation. First a heuristic is used by just checking, whether the element lies inside the global module, generated by the generators of the local module. This of course implies this for the local module having the advantage of a short computation time and leaving a normal form free of denominators. If this check fails, we use our trick to check for each row of <var class="Arg">B</var> independently, whether it lies in the module generated by <var class="Arg">B</var>.</p>
<div class="example"><pre>
DecideZeroRows :=
function( B, A )
local R, T, m, gens, n, GlobalR, one, N, b, numB, denB, i, B1, A1, B2, A2, B3;
Info(
InfoLocalizeRingForHomalg,
2, "Start DecideZeroRows with ",
NumberRows( B ), "x", NumberColumns( B ), " and ",
NumberRows( A ), "x", NumberColumns( A )
);
R := HomalgRing( B );
GlobalR := AssociatedComputationRing( R );
T := HomalgVoidMatrix( R );
gens := GeneratorsOfMaximalLeftIdeal( R );
n := NumberRows( gens );
one := One( GlobalR );
m := NumberRows( A );
A1 := Numerator( A );
N := HomalgZeroMatrix( 0, NumberColumns( B ), R );
b := Eval( B );
numB := b[1];
denB := b[2];
for i in [ 1 .. NumberRows( B ) ] do
#use global reduction as heuristic
B1 := CertainRows( numB, [ i ] );
B2 := HomalgLocalMatrix( DecideZeroRows( B1, A1 ), R );
#if it is nonzero, check whether local reduction makes it zero
if not IsZero( B2 ) then
A2 := UnionOfRows( A1, gens * B1 );
A2 := BasisOfRows( A2 );
B3 := HomalgLocalMatrix( DecideZeroRows( B1, A2 ), R );
if IsZero( B3 ) then
B2 := B3;
fi;
fi;
<p>The package <strong class="pkg">LocalizeRingForHomalg</strong> also implements tool functions. These are referred to from <strong class="pkg">MatricesForHomalg</strong> automatically. We list the implemented methods here are and refer to the <strong class="pkg">MatricesForHomalg</strong> documentation (--> <code class="code">?MatricesForHomalg: The Matrix Tool Operations</code> and <code class="code">?MatricesForHomalg:RingElement</code>) for details. All tools functions from <strong class="pkg">MatricesForHomalg</strong> not listed here are also supported by fallback tools.</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 und die Messung sind noch experimentell.