Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/GAP/pkg/linearalgebraforcap/doc/   (Algebra von RWTH Aachen Version 4.15.1©)  Datei vom 17.8.2025 mit Größe 69 kB image not shown  

Quelle  chap2.html   Sprache: HTML

 
 products/Sources/formale Sprachen/GAP/pkg/linearalgebraforcap/doc/chap2.html


<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>GAP (LinearAlgebraForCAP) - Chapter 2: Examples and Tests</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta name="generator" content="GAPDoc2HTML" />
<link rel="stylesheet" type="text/css" href="manual.css" />
<script src="manual.js" type="text/javascript"></script>
<script type="text/javascript">overwriteStyle();</script>
</head>
<body class="chap2"  onload="jscontent()">


<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chapInd.html">Ind</a>  </div>

<div class="chlinkprevnexttop"> <a href="chap0.html">[Top of Book]</a>   <a href="chap0.html#contents">[Contents]</a>    <a href="chap1.html">[Previous Chapter]</a>    <a href="chapInd.html">[Next Chapter]</a>   </div>

<p id="mathjaxlink" class="pcenter"><a href="chap2_mj.html">[MathJax on]</a></p>
<p><a id="X7967FE8E7BBDF485" name="X7967FE8E7BBDF485"></a></p>
<div class="ChapSects"><a href="chap2.html#X7967FE8E7BBDF485">2 <span class="Heading">Examples and Tests</span></a>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap2.html#X8104A77D7B5CCD4F">2.1 <span class="Heading">Basic Commands</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap2.html#X78D1062D78BE08C1">2.2 <span class="Heading">Functors</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap2.html#X85B1F5077BE75340">2.3 <span class="Heading">Solving (Homogeneous) Linear Systems</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap2.html#X852F59737EC57965">2.4 <span class="Heading">Homology object</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap2.html#X7CDB7FF27D734D2D">2.5 <span class="Heading">Liftable</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap2.html#X797080CE873BB56D">2.6 <span class="Heading">Monoidal structure</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap2.html#X8218390A785F1EDB">2.7 <span class="Heading">MorphismFromSourceToPushout and MorphismFromFiberProductToSink</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap2.html#X84410C637B3C1D0E">2.8 <span class="Heading">Opposite category</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap2.html#X7F34E29281DF3FCE">2.9 <span class="Heading">PreComposeList and PostComposeList</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap2.html#X87F5609A7B33C58C">2.10 <span class="Heading">Split epi summand</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap2.html#X7DCD99628504B810">2.11 <span class="Heading">Kernel</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap2.html#X7DE20941803BFBD9">2.12 <span class="Heading">FiberProduct</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap2.html#X8245BF297DF9A3E7">2.13 <span class="Heading">WrapperCategory</span></a>
</span>
</div>
</div>

<h3>2 <span class="Heading">Examples and Tests</span></h3>

<p><a id="X8104A77D7B5CCD4F" name="X8104A77D7B5CCD4F"></a></p>

<h4>2.1 <span class="Heading">Basic Commands</span></h4>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">LoadPackage( "LinearAlgebraForCAP", false );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">Q := HomalgFieldOfRationals();;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">vec := MatrixCategory( Q );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">a := MatrixCategoryObject( vec, 3 );</span>
<A vector space object over Q of dimension 3>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsProjective( a );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">ap := 3/vec;;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsEqualForObjects( a, ap );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">b := MatrixCategoryObject( vec, 4 );</span>
<A vector space object over Q of dimension 4>
<span class="GAPprompt">gap></span> <span class="GAPinput">homalg_matrix := HomalgMatrix( [ [ 1, 0, 0, 0 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">                                  [ 0, 1, 0, -1 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">                                  [ -1, 0, 2, 1 ] ], 3, 4, Q );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">alpha := VectorSpaceMorphism( a, homalg_matrix, b );</span>
<A morphism in Category of matrices over Q>
</pre></div>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput"># @drop_example_in_Julia: view/print/display strings of matrices differ between GAP and Julia, see https://github.com/homalg-project/MatricesForHomalg.jl/issues/41</span>
<span class="GAPprompt">></span> <span class="GAPinput">Display( alpha );</span>
[ [   1,   0,   0,   0 ],
  [   0,   1,   0,  -1 ],
  [  -1,   0,   2,   1 ] ]

A morphism in Category of matrices over Q
</pre></div>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">alphap := homalg_matrix/vec;;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms( alpha, alphap );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">homalg_matrix := HomalgMatrix( [ [ 1, 1, 0, 0 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">                                  [ 0, 1, 0, -1 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">                                  [ -1, 0, 2, 1 ] ], 3, 4, Q );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">beta := VectorSpaceMorphism( a, homalg_matrix, b );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">CokernelObject( alpha );</span>
<A vector space object over Q of dimension 1>
<span class="GAPprompt">gap></span> <span class="GAPinput">c := CokernelProjection( alpha );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( EntriesOfHomalgMatrixAsListList( UnderlyingMatrix( c ) ) );</span>
[ [ 0 ], [ 1 ], [ -1/2 ], [ 1 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">gamma := UniversalMorphismIntoDirectSum( [ c, c ] );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( EntriesOfHomalgMatrixAsListList( UnderlyingMatrix( gamma ) ) );</span>
[ [ 0, 0 ], [ 1, 1 ], [ -1/2, -1/2 ], [ 1, 1 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">colift := CokernelColift( alpha, gamma );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsEqualForMorphisms( PreCompose( c, colift ), gamma );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">FiberProduct( alpha, beta );</span>
<A vector space object over Q of dimension 2>
<span class="GAPprompt">gap></span> <span class="GAPinput">F := FiberProduct( alpha, beta );</span>
<A vector space object over Q of dimension 2>
<span class="GAPprompt">gap></span> <span class="GAPinput">p1 := ProjectionInFactorOfFiberProduct( [ alpha, beta ], 1 );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( EntriesOfHomalgMatrixAsListList( UnderlyingMatrix( PreCompose( p1, alpha ) ) ) );</span>
[ [ 0, 1, 0, -1 ], [ -1, 0, 2, 1 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Pushout( alpha, beta );</span>
<A vector space object over Q of dimension 5>
<span class="GAPprompt">gap></span> <span class="GAPinput">i1 := InjectionOfCofactorOfPushout( [ alpha, beta ], 1 );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">i2 := InjectionOfCofactorOfPushout( [ alpha, beta ], 2 );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">u := UniversalMorphismFromDirectSum( [ b, b ], [ i1, i2 ] );</span>
<A morphism in Category of matrices over Q>
</pre></div>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput"># @drop_example_in_Julia: differences in the output of SyzygiesOfRows, see https://github.com/homalg-project/MatricesForHomalg.jl/issues/50</span>
<span class="GAPprompt">></span> <span class="GAPinput">Display( EntriesOfHomalgMatrixAsListList( UnderlyingMatrix( u ) ) );</span>
[ [ 0, 1, 1, 0, 0 ],\
 [ 1, 0, 1, 0, -1 ],\
 [ -1/2, 0, 1/2, 1, 1/2 ],\
 [ 1, 0, 0, 0, 0 ],\
 [ 0, 1, 0, 0, 0 ],\
 [ 0, 0, 1, 0, 0 ],\
 [ 0, 0, 0, 1, 0 ],\
 [ 0, 0, 0, 0, 1 ] ]
</pre></div>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">KernelObjectFunctorial( u, IdentityMorphism( Source( u ) ), u ) = IdentityMorphism( MatrixCategoryObject( vec, 3 ) );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsZeroForMorphisms( CokernelObjectFunctorial( u, IdentityMorphism( Range( u ) ), u ) );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">DirectProductFunctorial( [ u, u ] ) = DirectSumFunctorial( [ u, u ] );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">CoproductFunctorial( [ u, u ] ) = DirectSumFunctorial( [ u, u ] );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms(</span>
<span class="GAPprompt">></span> <span class="GAPinput">    FiberProductFunctorial( [ u, u ], [ IdentityMorphism( Source( u ) ), IdentityMorphism( Source( u ) ) ], [ u, u ] ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">    IdentityMorphism( FiberProduct( [ u, u ] ) )</span>
<span class="GAPprompt">></span> <span class="GAPinput">);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms(</span>
<span class="GAPprompt">></span> <span class="GAPinput">    PushoutFunctorial( [ u, u ], [ IdentityMorphism( Range( u ) ), IdentityMorphism( Range( u ) ) ], [ u, u ] ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">    IdentityMorphism( Pushout( [ u, u ] ) )</span>
<span class="GAPprompt">></span> <span class="GAPinput">);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms( ((1/2) / Q) * alpha, alpha * ((1/2) / Q) );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">Dimension( HomomorphismStructureOnObjects( a, b ) ) = Dimension( a ) * Dimension( b );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms(</span>
<span class="GAPprompt">></span> <span class="GAPinput">    PreCompose( [ u, DualOnMorphisms( i1 ), DualOnMorphisms( alpha ) ] ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">    InterpretMorphismFromDistinguishedObjectToHomomorphismStructureAsMorphism( Source( u ), Source( alpha ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">         PreCompose(</span>
<span class="GAPprompt">></span> <span class="GAPinput">             InterpretMorphismAsMorphismFromDistinguishedObjectToHomomorphismStructure( DualOnMorphisms( i1 ) ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">             HomomorphismStructureOnMorphisms( u, DualOnMorphisms( alpha ) )</span>
<span class="GAPprompt">></span> <span class="GAPinput">         )</span>
<span class="GAPprompt">></span> <span class="GAPinput">    )</span>
<span class="GAPprompt">></span> <span class="GAPinput">);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">op := Opposite( vec );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">alpha_op := Opposite( op, alpha );</span>
<A morphism in Opposite( Category of matrices over Q )>
<span class="GAPprompt">gap></span> <span class="GAPinput">basis := BasisOfExternalHom( Source( alpha_op ), Range( alpha_op ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">coeffs := CoefficientsOfMorphism( alpha_op );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( coeffs );</span>
[ 1, 0, 0, 0, 0, 1, 0, -1, -1, 0, 2, 1 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">IsEqualForMorphisms( alpha_op, LinearCombinationOfMorphisms( Source( alpha_op ), coeffs, basis, Range( alpha_op ) ) );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">vec := CapCategory( alpha );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">t := TensorUnit( vec );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">z := ZeroObject( vec );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms(</span>
<span class="GAPprompt">></span> <span class="GAPinput">    ZeroObjectFunctorial( vec ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">    InterpretMorphismFromDistinguishedObjectToHomomorphismStructureAsMorphism( z, z, ZeroMorphism( t, z ) )</span>
<span class="GAPprompt">></span> <span class="GAPinput">);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms(</span>
<span class="GAPprompt">></span> <span class="GAPinput">    ZeroObjectFunctorial( vec ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">    InterpretMorphismFromDistinguishedObjectToHomomorphismStructureAsMorphism(</span>
<span class="GAPprompt">></span> <span class="GAPinput">        z, z,</span>
<span class="GAPprompt">></span> <span class="GAPinput">        InterpretMorphismAsMorphismFromDistinguishedObjectToHomomorphismStructure( ZeroObjectFunctorial( vec ) )</span>
<span class="GAPprompt">></span> <span class="GAPinput">    )</span>
<span class="GAPprompt">></span> <span class="GAPinput">);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">right_side := PreCompose( [ i1, DualOnMorphisms( u ), u ] );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">x := SolveLinearSystemInAbCategory( [ [ i1 ] ], [ [ u ] ], [ right_side ] )[1];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms( PreCompose( [ i1, x, u ] ), right_side );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">a_otimes_b := TensorProductOnObjects( a, b );</span>
<A vector space object over Q of dimension 12>
<span class="GAPprompt">gap></span> <span class="GAPinput">hom_ab := InternalHomOnObjects( a, b );</span>
<A vector space object over Q of dimension 12>
<span class="GAPprompt">gap></span> <span class="GAPinput">cohom_ab := InternalCoHomOnObjects( a, b );</span>
<A vector space object over Q of dimension 12>
<span class="GAPprompt">gap></span> <span class="GAPinput">hom_ab = cohom_ab;</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">unit_ab := VectorSpaceMorphism(</span>
<span class="GAPprompt">></span> <span class="GAPinput">          a_otimes_b,</span>
<span class="GAPprompt">></span> <span class="GAPinput">          HomalgIdentityMatrix( Dimension( a_otimes_b ), Q ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">          a_otimes_b</span>
<span class="GAPprompt">></span> <span class="GAPinput">          );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">unit_hom_ab := VectorSpaceMorphism(</span>
<span class="GAPprompt">></span> <span class="GAPinput">              hom_ab,</span>
<span class="GAPprompt">></span> <span class="GAPinput">              HomalgIdentityMatrix( Dimension( hom_ab ), Q ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">              hom_ab</span>
<span class="GAPprompt">></span> <span class="GAPinput">            );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">unit_cohom_ab := VectorSpaceMorphism(</span>
<span class="GAPprompt">></span> <span class="GAPinput">                cohom_ab,</span>
<span class="GAPprompt">></span> <span class="GAPinput">                HomalgIdentityMatrix( Dimension( cohom_ab ), Q ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">                cohom_ab</span>
<span class="GAPprompt">></span> <span class="GAPinput">              );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">ev_ab := ClosedMonoidalLeftEvaluationMorphism( a, b );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">coev_ab := ClosedMonoidalLeftCoevaluationMorphism( a, b );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">coev_ba := ClosedMonoidalLeftCoevaluationMorphism( b, a );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">cocl_ev_ab := CoclosedMonoidalLeftEvaluationMorphism( a, b );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">cocl_ev_ba := CoclosedMonoidalLeftEvaluationMorphism( b, a );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">cocl_coev_ab := CoclosedMonoidalLeftCoevaluationMorphism( a, b );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">cocl_coev_ba := CoclosedMonoidalLeftCoevaluationMorphism( b, a );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">UnderlyingMatrix( ev_ab ) = TransposedMatrix( UnderlyingMatrix( cocl_ev_ab ) );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">UnderlyingMatrix( coev_ab ) = TransposedMatrix( UnderlyingMatrix( cocl_coev_ab ) );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">UnderlyingMatrix( coev_ba ) = TransposedMatrix( UnderlyingMatrix( cocl_coev_ba ) );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">tensor_hom_adj_1_hom_ab := InternalHomToTensorProductLeftAdjunctMorphism( a, b, unit_hom_ab );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">cohom_tensor_adj_1_cohom_ab := InternalCoHomToTensorProductLeftAdjunctMorphism( a, b, unit_cohom_ab );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">tensor_hom_adj_1_ab := TensorProductToInternalHomLeftAdjunctMorphism( a, b, unit_ab );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">cohom_tensor_adj_1_ab := TensorProductToInternalCoHomLeftAdjunctMorphism( a, b, unit_ab );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">ev_ab = tensor_hom_adj_1_hom_ab;</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">cocl_ev_ba = cohom_tensor_adj_1_cohom_ab;</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">coev_ba = tensor_hom_adj_1_ab;</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">cocl_coev_ba = cohom_tensor_adj_1_ab;</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">c := MatrixCategoryObject( vec, 2 );</span>
<A vector space object over Q of dimension 2>
<span class="GAPprompt">gap></span> <span class="GAPinput">d := MatrixCategoryObject( vec, 1 );</span>
<A vector space object over Q of dimension 1>
</pre></div>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">pre_compose := MonoidalPreComposeMorphism( a, b, c );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">post_compose := MonoidalPostComposeMorphism( a, b, c );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">pre_cocompose := MonoidalPreCoComposeMorphism( c, b, a );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">post_cocompose := MonoidalPostCoComposeMorphism( c, b, a );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">UnderlyingMatrix( pre_compose ) = TransposedMatrix( UnderlyingMatrix( pre_cocompose ) );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">UnderlyingMatrix( post_compose ) = TransposedMatrix( UnderlyingMatrix( post_cocompose ) );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">tp_hom_comp := TensorProductInternalHomCompatibilityMorphism( [ a, b, c, d ] );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">cohom_tp_comp := InternalCoHomTensorProductCompatibilityMorphism( [ b, d, a, c ] );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">UnderlyingMatrix( tp_hom_comp ) = TransposedMatrix( UnderlyingMatrix( cohom_tp_comp ) );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">lambda := LambdaIntroduction( alpha );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">lambda_elim := LambdaElimination( a, b, lambda );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">alpha = lambda_elim;</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">alpha_op := VectorSpaceMorphism( b, TransposedMatrix( UnderlyingMatrix( alpha ) ), a );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">colambda := CoLambdaIntroduction( alpha_op );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">colambda_elim := CoLambdaElimination( b, a, colambda );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">alpha_op = colambda_elim;</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">UnderlyingMatrix( lambda ) = TransposedMatrix( UnderlyingMatrix( colambda ) );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">delta := PreCompose( colambda, lambda);</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( EntriesOfHomalgMatrixAsListList( UnderlyingMatrix( TraceMap( delta ) ) ) );</span>
[ [ 9 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( EntriesOfHomalgMatrixAsListList( UnderlyingMatrix( CoTraceMap( delta ) ) ) );</span>
[ [ 9 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">TraceMap( delta ) = CoTraceMap( delta );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">RankMorphism( a ) = CoRankMorphism( a );</span>
true
</pre></div>

<p><a id="X78D1062D78BE08C1" name="X78D1062D78BE08C1"></a></p>

<h4>2.2 <span class="Heading">Functors</span></h4>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">LoadPackage( "LinearAlgebraForCAP", false );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">ring := HomalgFieldOfRationals( );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">vec := MatrixCategory( ring );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">F := CapFunctor( "CohomForVec", [ vec, [ vec, true ] ], vec );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">obj_func := function( A, B ) return TensorProductOnObjects( A, DualOnObjects( B ) ); end;;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">mor_func := function( source, alpha, beta, range ) return TensorProductOnMorphismsWithGivenTensorProducts( source, alpha, DualOnMorphisms( beta ), range ); end;;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">AddObjectFunction( F, obj_func );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">AddMorphismFunction( F, mor_func );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( InputSignature( F ) );</span>
[ [ Category of matrices over Q, false ], [ Category of matrices over Q, true ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">V1 := TensorUnit( vec );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">V3 := DirectSum( V1, V1, V1 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">pi1 := ProjectionInFactorOfDirectSum( [ V1, V1 ], 1 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">pi2 := ProjectionInFactorOfDirectSum( [ V3, V1 ], 1 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">value1 := ApplyFunctor( F, pi1, pi2 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">input := ProductCategoryMorphism( SourceOfFunctor( F ), [ pi1, Opposite( pi2 ) ] );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">value2 := ApplyFunctor( F, input );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms( value1, value2 );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">InstallFunctor( F, "F_installation" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">F_installation( pi1, pi2 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">F_installation( input );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">F_installationOnObjects( V1, V1 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">F_installationOnObjects( ProductCategoryObject( SourceOfFunctor( F ), [ V1, Opposite( V1 ) ] ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">F_installationOnMorphisms( pi1, pi2 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">F_installationOnMorphisms( input );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">F2 := CapFunctor( "CohomForVec2", ProductCategory( [ vec, Opposite( vec ) ] ), vec );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">AddObjectFunction( F2, a -> obj_func( a[1], Opposite( a[2] ) ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">AddMorphismFunction( F2, functionsource, datum, range ) return mor_func( source, datum[1], Opposite( datum[2] ), range ); end );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">input := ProductCategoryMorphism( SourceOfFunctor( F2 ), [ pi1, Opposite( pi2 ) ] );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">value3 := ApplyFunctor( F2, input );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms( value1, value3 );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( InputSignature( F2 ) );</span>
[ [ Product of: Category of matrices over Q, Opposite( Category of matrices over Q ), false ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">InstallFunctor( F2, "F_installation2" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">F_installation2( input );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">F_installation2OnObjects( ProductCategoryObject( SourceOfFunctor( F2 ), [ V1, Opposite( V1 ) ] ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">F_installation2OnMorphisms( input );;</span>
</pre></div>

<p><a id="X85B1F5077BE75340" name="X85B1F5077BE75340"></a></p>

<h4>2.3 <span class="Heading">Solving (Homogeneous) Linear Systems</span></h4>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">LoadPackage( "LinearAlgebraForCAP", false );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">QQ := HomalgFieldOfRationals();;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">QQ_mat := MatrixCategory( QQ );</span>
Category of matrices over Q
<span class="GAPprompt">gap></span> <span class="GAPinput">t := TensorUnit( QQ_mat );</span>
<A vector space object over Q of dimension 1>
<span class="GAPprompt">gap></span> <span class="GAPinput">id_t := IdentityMorphism( t );</span>
<An identity morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">1*(11)*7 + 2*(12)*8 + 3*(13)*9;</span>
620
<span class="GAPprompt">gap></span> <span class="GAPinput">4*(11)*3 + 5*(12)*4 + 6*(13)*1;</span>
450
<span class="GAPprompt">gap></span> <span class="GAPinput">alpha :=  [ [ 1/QQ * id_t, 2/QQ * id_t, 3/QQ * id_t ], [ 4/QQ * id_t, 5/QQ * id_t, 6/QQ * id_t ] ];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">beta := [ [ 7/QQ * id_t, 8/QQ * id_t, 9/QQ * id_t ], [ 3/QQ * id_t, 4/QQ * id_t, 1/QQ * id_t ] ];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">gamma := [ 620/QQ * id_t, 450/QQ * id_t ];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">MereExistenceOfSolutionOfLinearSystemInAbCategory(</span>
<span class="GAPprompt">></span> <span class="GAPinput">                                  QQ_mat, alpha, beta, gamma );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">MereExistenceOfUniqueSolutionOfLinearSystemInAbCategory(</span>
<span class="GAPprompt">></span> <span class="GAPinput">                                  QQ_mat, alpha, beta, gamma );</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">x := SolveLinearSystemInAbCategory( QQ_mat, alpha, beta, gamma );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">(1*7)/QQ * x[1] + (2*8)/QQ * x[2] + (3*9)/QQ * x[3] = gamma[1];</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">(4*3)/QQ * x[1] + (5*4)/QQ * x[2] + (6*1)/QQ * x[3] = gamma[2];</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">MereExistenceOfUniqueSolutionOfHomogeneousLinearSystemInAbCategory(</span>
<span class="GAPprompt">></span> <span class="GAPinput">                                  QQ_mat, alpha, beta );</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">B := BasisOfSolutionsOfHomogeneousLinearSystemInLinearCategory(</span>
<span class="GAPprompt">></span> <span class="GAPinput">                                  QQ_mat, alpha, beta );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Length( B );</span>
1
<span class="GAPprompt">gap></span> <span class="GAPinput">(1*7)/QQ * B[1][1] + (2*8)/QQ * B[1][2] + (3*9)/QQ * B[1][3] = 0/QQ * id_t;</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">(4*3)/QQ * B[1][1] + (5*4)/QQ * B[1][2] + (6*1)/QQ * B[1][3] = 0/QQ * id_t;</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">2*(11)*5 + 3*(12)*7 + 9*(13)*2;</span>
596
<span class="GAPprompt">gap></span> <span class="GAPinput">Add( alpha, [ 2/QQ * id_t, 3/QQ * id_t, 9/QQ * id_t ] );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Add( beta, [ 5/QQ * id_t, 7/QQ * id_t, 2/QQ * id_t ] );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Add( gamma, 596/QQ * id_t );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">MereExistenceOfSolutionOfLinearSystemInAbCategory(</span>
<span class="GAPprompt">></span> <span class="GAPinput">                                  QQ_mat, alpha, beta, gamma );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">MereExistenceOfUniqueSolutionOfLinearSystemInAbCategory(</span>
<span class="GAPprompt">></span> <span class="GAPinput">                                  QQ_mat, alpha, beta, gamma );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">x := SolveLinearSystemInAbCategory( QQ_mat, alpha, beta, gamma );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">(1*7)/QQ * x[1] + (2*8)/QQ * x[2] + (3*9)/QQ * x[3] = gamma[1];</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">(4*3)/QQ * x[1] + (5*4)/QQ * x[2] + (6*1)/QQ * x[3] = gamma[2];</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">(2*5)/QQ * x[1] + (3*7)/QQ * x[2] + (9*2)/QQ * x[3] = gamma[3];</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">MereExistenceOfUniqueSolutionOfHomogeneousLinearSystemInAbCategory(</span>
<span class="GAPprompt">></span> <span class="GAPinput">                                  QQ_mat, alpha, beta );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">B := BasisOfSolutionsOfHomogeneousLinearSystemInLinearCategory(</span>
<span class="GAPprompt">></span> <span class="GAPinput">                                  QQ_mat, alpha, beta );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Length( B );</span>
0
<span class="GAPprompt">gap></span> <span class="GAPinput">alpha := [ [ 2/QQ * id_t, 3/QQ * id_t ] ];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">delta := [ [ 3/QQ * id_t, 3/QQ * id_t ] ];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">B := BasisOfSolutionsOfHomogeneousDoubleLinearSystemInLinearCategory( alpha, delta );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Length( B );</span>
1
<span class="GAPprompt">gap></span> <span class="GAPinput">mor1 := PreCompose( alpha[1][1], B[1][1] ) + PreCompose( alpha[1][2], B[1][2] );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">mor2 := PreCompose( B[1][1], delta[1][1] ) + PreCompose( B[1][2], delta[1][2] );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">mor1 = mor2;</span>
true
</pre></div>

<p><a id="X852F59737EC57965" name="X852F59737EC57965"></a></p>

<h4>2.4 <span class="Heading">Homology object</span></h4>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">field := HomalgFieldOfRationals( );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">vec := MatrixCategory( field );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">A := MatrixCategoryObject( vec, 1 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">B := MatrixCategoryObject( vec, 2 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">C := MatrixCategoryObject( vec, 3 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">alpha := VectorSpaceMorphism( A, HomalgMatrix( [ [ 1, 0, 0 ] ], 1, 3, field ), C );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">beta := VectorSpaceMorphism( C, HomalgMatrix( [ [ 1, 0 ], [ 1, 1 ], [ 1, 2 ] ], 3, 2, field ), B );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsZeroForMorphisms( PreCompose( alpha, beta ) );</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms(</span>
<span class="GAPprompt">></span> <span class="GAPinput">    IdentityMorphism( HomologyObject( alpha, beta ) ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">    HomologyObjectFunctorial( alpha, beta, IdentityMorphism( C ), alpha, beta )</span>
<span class="GAPprompt">></span> <span class="GAPinput">);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">kernel_beta := KernelEmbedding( beta );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">K := Source( kernel_beta );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsIsomorphism(</span>
<span class="GAPprompt">></span> <span class="GAPinput">    HomologyObjectFunctorial( </span>
<span class="GAPprompt">></span> <span class="GAPinput">        MorphismFromZeroObject( K ), </span>
<span class="GAPprompt">></span> <span class="GAPinput">        MorphismIntoZeroObject( K ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">        kernel_beta,</span>
<span class="GAPprompt">></span> <span class="GAPinput">        MorphismFromZeroObject( Source( beta ) ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">        beta</span>
<span class="GAPprompt">></span> <span class="GAPinput">    )</span>
<span class="GAPprompt">></span> <span class="GAPinput">);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">cokernel_alpha := CokernelProjection( alpha );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Co := Range( cokernel_alpha );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsIsomorphism(</span>
<span class="GAPprompt">></span> <span class="GAPinput">    HomologyObjectFunctorial( </span>
<span class="GAPprompt">></span> <span class="GAPinput">        alpha,</span>
<span class="GAPprompt">></span> <span class="GAPinput">        MorphismIntoZeroObject( Range( alpha ) ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">        cokernel_alpha,</span>
<span class="GAPprompt">></span> <span class="GAPinput">        MorphismFromZeroObject( Co ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">        MorphismIntoZeroObject( Co )</span>
<span class="GAPprompt">></span> <span class="GAPinput">    )</span>
<span class="GAPprompt">></span> <span class="GAPinput">);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">op := Opposite( vec );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">alpha_op := Opposite( op, alpha );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">beta_op := Opposite( op, beta );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms(</span>
<span class="GAPprompt">></span> <span class="GAPinput">    IdentityMorphism( HomologyObject( beta_op, alpha_op ) ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">    HomologyObjectFunctorial( beta_op, alpha_op, IdentityMorphism( Opposite( C ) ), beta_op, alpha_op )</span>
<span class="GAPprompt">></span> <span class="GAPinput">);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">kernel_beta := KernelEmbedding( beta_op );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">K := Source( kernel_beta );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsIsomorphism(</span>
<span class="GAPprompt">></span> <span class="GAPinput">    HomologyObjectFunctorial( </span>
<span class="GAPprompt">></span> <span class="GAPinput">        MorphismFromZeroObject( K ), </span>
<span class="GAPprompt">></span> <span class="GAPinput">        MorphismIntoZeroObject( K ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">        kernel_beta,</span>
<span class="GAPprompt">></span> <span class="GAPinput">        MorphismFromZeroObject( Source( beta_op ) ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">        beta_op</span>
<span class="GAPprompt">></span> <span class="GAPinput">    )</span>
<span class="GAPprompt">></span> <span class="GAPinput">);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">cokernel_alpha := CokernelProjection( alpha_op );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Co := Range( cokernel_alpha );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsIsomorphism(</span>
<span class="GAPprompt">></span> <span class="GAPinput">    HomologyObjectFunctorial( </span>
<span class="GAPprompt">></span> <span class="GAPinput">        alpha_op,</span>
<span class="GAPprompt">></span> <span class="GAPinput">        MorphismIntoZeroObject( Range( alpha_op ) ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">        cokernel_alpha,</span>
<span class="GAPprompt">></span> <span class="GAPinput">        MorphismFromZeroObject( Co ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">        MorphismIntoZeroObject( Co )</span>
<span class="GAPprompt">></span> <span class="GAPinput">    )</span>
<span class="GAPprompt">></span> <span class="GAPinput">);</span>
true
</pre></div>

<p><a id="X7CDB7FF27D734D2D" name="X7CDB7FF27D734D2D"></a></p>

<h4>2.5 <span class="Heading">Liftable</span></h4>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">field := HomalgFieldOfRationals( );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">vec := MatrixCategory( field );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">V := MatrixCategoryObject( vec, 1 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">W := MatrixCategoryObject( vec, 2 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">alpha := VectorSpaceMorphism( V, HomalgMatrix( [ [ 1, -1 ] ], 1, 2, field ), W );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">beta := VectorSpaceMorphism( W, HomalgMatrix( [ [ 1, 2 ], [ 3, 4 ] ], 2, 2, field ), W );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsLiftable( alpha, beta );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsLiftable( beta, alpha );</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">IsLiftableAlongMonomorphism( beta, alpha );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">gamma := VectorSpaceMorphism( W, HomalgMatrix( [ [ 1 ], [ 1 ] ], 2, 1, field ), V );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsColiftable( beta, gamma );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsColiftable( gamma, beta );</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">IsColiftableAlongEpimorphism( beta, gamma );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">PreCompose( PreInverseForMorphisms( gamma ), gamma ) = IdentityMorphism( V );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">PreCompose( alpha, PostInverseForMorphisms( alpha ) ) = IdentityMorphism( V );</span>
true
</pre></div>

<p><a id="X797080CE873BB56D" name="X797080CE873BB56D"></a></p>

<h4>2.6 <span class="Heading">Monoidal structure</span></h4>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">LoadPackage( "LinearAlgebraForCAP", false );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">Q := HomalgFieldOfRationals();;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">vec := MatrixCategory( Q );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">a := MatrixCategoryObject( vec, 1 );</span>
<A vector space object over Q of dimension 1>
<span class="GAPprompt">gap></span> <span class="GAPinput">b := MatrixCategoryObject( vec, 2 );</span>
<A vector space object over Q of dimension 2>
<span class="GAPprompt">gap></span> <span class="GAPinput">c := MatrixCategoryObject( vec, 3 );</span>
<A vector space object over Q of dimension 3>
<span class="GAPprompt">gap></span> <span class="GAPinput">z := ZeroObject( vec );</span>
<A vector space object over Q of dimension 0>
<span class="GAPprompt">gap></span> <span class="GAPinput">alpha := VectorSpaceMorphism( a, [ [ 1, 0 ] ], b );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">beta := VectorSpaceMorphism( b,</span>
<span class="GAPprompt">></span> <span class="GAPinput">                [ [ 1, 0, 0 ], [ 0, 1, 0 ] ], c );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">gamma := VectorSpaceMorphism( c,</span>
<span class="GAPprompt">></span> <span class="GAPinput">                 [ [ 0, 1, 1 ], [ 1, 0, 1 ], [ 1, 1, 0 ] ], c );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms(</span>
<span class="GAPprompt">></span> <span class="GAPinput">    TensorProductOnMorphisms( alpha, beta ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">    TensorProductOnMorphisms( beta, alpha )</span>
<span class="GAPprompt">></span> <span class="GAPinput">);</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms(</span>
<span class="GAPprompt">></span> <span class="GAPinput">    AssociatorRightToLeft( a, b, c ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">    IdentityMorphism( TensorProductOnObjects( a, TensorProductOnObjects( b, c ) ) )</span>
<span class="GAPprompt">></span> <span class="GAPinput">);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms(</span>
<span class="GAPprompt">></span> <span class="GAPinput">    gamma,</span>
<span class="GAPprompt">></span> <span class="GAPinput">    LambdaElimination( c, c, LambdaIntroduction( gamma ) )</span>
<span class="GAPprompt">></span> <span class="GAPinput">);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsZeroForMorphisms( TraceMap( gamma ) );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms(</span>
<span class="GAPprompt">></span> <span class="GAPinput">    RankMorphism( DirectSum( a, b ) ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">    RankMorphism( c )</span>
<span class="GAPprompt">></span> <span class="GAPinput">);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms(</span>
<span class="GAPprompt">></span> <span class="GAPinput">    Braiding( b, c ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">    IdentityMorphism( TensorProductOnObjects( b, c ) )</span>
<span class="GAPprompt">></span> <span class="GAPinput">);</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms(</span>
<span class="GAPprompt">></span> <span class="GAPinput">    PreCompose( Braiding( b, c ), Braiding( c, b ) ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">    IdentityMorphism( TensorProductOnObjects( b, c ) )</span>
<span class="GAPprompt">></span> <span class="GAPinput">);</span>
true
</pre></div>

<p><a id="X8218390A785F1EDB" name="X8218390A785F1EDB"></a></p>

<h4>2.7 <span class="Heading">MorphismFromSourceToPushout and MorphismFromFiberProductToSink</span></h4>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">field := HomalgFieldOfRationals( );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">vec := MatrixCategory( field );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">A := MatrixCategoryObject( vec, 3 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">B := MatrixCategoryObject( vec, 2 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">alpha := VectorSpaceMorphism( B, HomalgMatrix( [ [ 1, -1, 1 ], [ 1, 1, 1 ] ], 2, 3, field ), A );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">beta := VectorSpaceMorphism( B, HomalgMatrix( [ [ 1, 2, 1 ], [ 2, 1, 1 ] ], 2, 3, field ), A );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">m := MorphismFromFiberProductToSink( [ alpha, beta ] );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms(</span>
<span class="GAPprompt">></span> <span class="GAPinput">    m,</span>
<span class="GAPprompt">></span> <span class="GAPinput">    PreCompose( ProjectionInFactorOfFiberProduct( [ alpha, beta ], 1 ), alpha )</span>
<span class="GAPprompt">></span> <span class="GAPinput">);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms(</span>
<span class="GAPprompt">></span> <span class="GAPinput">    m,</span>
<span class="GAPprompt">></span> <span class="GAPinput">    PreCompose( ProjectionInFactorOfFiberProduct( [ alpha, beta ], 2 ), beta )</span>
<span class="GAPprompt">></span> <span class="GAPinput">);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms(</span>
<span class="GAPprompt">></span> <span class="GAPinput">MorphismFromKernelObjectToSink( alpha ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">    PreCompose( KernelEmbedding( alpha ), alpha )</span>
<span class="GAPprompt">></span> <span class="GAPinput">);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">alpha_p := DualOnMorphisms( alpha );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">beta_p := DualOnMorphisms( beta );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">m_p := MorphismFromSourceToPushout( [ alpha_p, beta_p ] );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms(</span>
<span class="GAPprompt">></span> <span class="GAPinput">    m_p,</span>
<span class="GAPprompt">></span> <span class="GAPinput">    PreCompose( alpha_p, InjectionOfCofactorOfPushout( [ alpha_p, beta_p ], 1 ) )</span>
<span class="GAPprompt">></span> <span class="GAPinput">);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms(</span>
<span class="GAPprompt">></span> <span class="GAPinput">    m_p,</span>
<span class="GAPprompt">></span> <span class="GAPinput">    PreCompose( beta_p, InjectionOfCofactorOfPushout( [ alpha_p, beta_p ], 2 ) )</span>
<span class="GAPprompt">></span> <span class="GAPinput">);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms(</span>
<span class="GAPprompt">></span> <span class="GAPinput">    MorphismFromSourceToCokernelObject( alpha_p ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">    PreCompose( alpha_p, CokernelProjection( alpha_p ) )</span>
<span class="GAPprompt">></span> <span class="GAPinput">);</span>
true
</pre></div>

<p><a id="X84410C637B3C1D0E" name="X84410C637B3C1D0E"></a></p>

<h4>2.8 <span class="Heading">Opposite category</span></h4>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">LoadPackage( "LinearAlgebraForCAP"">= 2024.01-04", false );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">QQ := HomalgFieldOfRationals();;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">vec := MatrixCategory( QQ );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">op := Opposite( vec );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Perform( ListKnownCategoricalProperties( op ), Display );</span>
IsAbCategory
IsAbelianCategory
IsAbelianCategoryWithEnoughInjectives
IsAbelianCategoryWithEnoughProjectives
IsAdditiveCategory
IsAdditiveMonoidalCategory
IsBraidedMonoidalCategory
IsCategoryWithCoequalizers
IsCategoryWithCokernels
IsCategoryWithEqualizers
IsCategoryWithInitialObject
IsCategoryWithKernels
IsCategoryWithTerminalObject
IsCategoryWithZeroObject
IsClosedMonoidalCategory
IsCoclosedMonoidalCategory
IsEnrichedOverCommutativeRegularSemigroup
IsEquippedWithHomomorphismStructure
IsLinearCategoryOverCommutativeRing
IsLinearCategoryOverCommutativeRingWithFinitelyGeneratedFreeExternalHoms
IsMonoidalCategory
IsPreAbelianCategory
IsRigidSymmetricClosedMonoidalCategory
IsRigidSymmetricCoclosedMonoidalCategory
IsSkeletalCategory
IsStrictMonoidalCategory
IsSymmetricClosedMonoidalCategory
IsSymmetricCoclosedMonoidalCategory
IsSymmetricMonoidalCategory
<span class="GAPprompt">gap></span> <span class="GAPinput">V1 := Opposite( TensorUnit( vec ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">V2 := DirectSum( V1, V1 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">V3 := DirectSum( V1, V2 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">V4 := DirectSum( V1, V3 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">V5 := DirectSum( V1, V4 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsWellDefined( MorphismBetweenDirectSums( op, [ ], [ ], [ V1 ] ) );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsWellDefined( MorphismBetweenDirectSums( op, [ V1 ], [ [ ] ], [ ] ) );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">alpha13 := InjectionOfCofactorOfDirectSum( [ V1, V2 ], 1 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">alpha14 := InjectionOfCofactorOfDirectSum( [ V1, V2, V1 ], 3 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">alpha15 := InjectionOfCofactorOfDirectSum( [ V2, V1, V2 ], 2 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">alpha23 := InjectionOfCofactorOfDirectSum( [ V2, V1 ], 1 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">alpha24 := InjectionOfCofactorOfDirectSum( [ V1, V2, V1 ], 2 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">alpha25 := InjectionOfCofactorOfDirectSum( [ V2, V2, V1 ], 1 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">mat := [</span>
<span class="GAPprompt">></span> <span class="GAPinput">    [ alpha13, alpha14, alpha15 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">    [ alpha23, alpha24, alpha25 ]</span>
<span class="GAPprompt">></span> <span class="GAPinput">];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">mor := MorphismBetweenDirectSums( mat );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsWellDefined( mor );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsWellDefined( Opposite( mor ) );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms(</span>
<span class="GAPprompt">></span> <span class="GAPinput">    UniversalMorphismFromImage( mor, [ CoastrictionToImage( mor ), ImageEmbedding( mor ) ] ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">    IdentityMorphism( ImageObject( mor ) )</span>
<span class="GAPprompt">></span> <span class="GAPinput">);</span>
true
</pre></div>

<p><a id="X7F34E29281DF3FCE" name="X7F34E29281DF3FCE"></a></p>

<h4>2.9 <span class="Heading">PreComposeList and PostComposeList</span></h4>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">field := HomalgFieldOfRationals( );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">vec := MatrixCategory( field );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">A := MatrixCategoryObject( vec, 1 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">B := MatrixCategoryObject( vec, 2 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">C := MatrixCategoryObject( vec, 3 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">alpha := VectorSpaceMorphism( A, HomalgMatrix( [ [ 1, 0, 0 ] ], 1, 3, field ), C );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">beta := VectorSpaceMorphism( C, HomalgMatrix( [ [ 1, 0 ], [ 1, 1 ], [ 1, 2 ] ], 3, 2, field ), B );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms( PreCompose( alpha, beta ), PostCompose( beta, alpha ) );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms( PreComposeList( A, [ ], A ), IdentityMorphism( A ) );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms( PreComposeList( A, [ alpha ], C ), alpha );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms( PreComposeList( A, [ alpha, beta ], B ), PreCompose( alpha, beta ) );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms( PostComposeList( A, [ ], A ), IdentityMorphism( A ) );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms( PostComposeList( A, [ alpha ], C ), alpha );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms( PostComposeList( A, [ beta, alpha ], B ), PostCompose( beta, alpha ) );</span>
true
</pre></div>

<p><a id="X87F5609A7B33C58C" name="X87F5609A7B33C58C"></a></p>

<h4>2.10 <span class="Heading">Split epi summand</span></h4>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">LoadPackage( "LinearAlgebraForCAP", false );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">Q := HomalgFieldOfRationals();;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Qmat := MatrixCategory( Q );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">a := MatrixCategoryObject( Qmat, 3 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">b := MatrixCategoryObject( Qmat, 4 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">homalg_matrix := HomalgMatrix( [ [ 1, 0, 0, 0 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">                                  [ 0, 1, 0, -1 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">                                  [ -1, 0, 2, 1 ] ], 3, 4, Q );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">alpha := VectorSpaceMorphism( a, homalg_matrix, b );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">beta := SomeReductionBySplitEpiSummand( alpha );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsWellDefinedForMorphisms( beta );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">Dimension( Source( beta ) );</span>
0
<span class="GAPprompt">gap></span> <span class="GAPinput">Dimension( Range( beta ) );</span>
1
<span class="GAPprompt">gap></span> <span class="GAPinput">gamma := SomeReductionBySplitEpiSummand_MorphismFromInputRange( alpha );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( EntriesOfHomalgMatrixAsListList( UnderlyingMatrix( gamma ) ) );</span>
[ [ 0 ], [ 1 ], [ -1/2 ], [ 1 ] ]
</pre></div>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput"># @drop_example_in_Julia: differences in the output of (Safe)RightDivide, see https://github.com/homalg-project/MatricesForHomalg.jl/issues/50</span>
<span class="GAPprompt">></span> <span class="GAPinput">delta := SomeReductionBySplitEpiSummand_MorphismToInputRange( alpha );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( EntriesOfHomalgMatrixAsListList( UnderlyingMatrix( delta ) ) );</span>
[ [ 0, 1, 0, 0 ] ]
</pre></div>

<p><a id="X7DCD99628504B810" name="X7DCD99628504B810"></a></p>

<h4>2.11 <span class="Heading">Kernel</span></h4>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">Q := HomalgFieldOfRationals();;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">vec := MatrixCategory( Q );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">V := MatrixCategoryObject( vec, 2 );</span>
<A vector space object over Q of dimension 2>
<span class="GAPprompt">gap></span> <span class="GAPinput">W := MatrixCategoryObject( vec, 3 );</span>
<A vector space object over Q of dimension 3>
<span class="GAPprompt">gap></span> <span class="GAPinput">alpha := VectorSpaceMorphism( V, [ [ 1, 1, 1 ], [ -1, -1, -1 ] ], W );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">k := KernelObject( alpha );</span>
<A vector space object over Q of dimension 1>
<span class="GAPprompt">gap></span> <span class="GAPinput">T := MatrixCategoryObject( vec, 2 );</span>
<A vector space object over Q of dimension 2>
<span class="GAPprompt">gap></span> <span class="GAPinput">tau := VectorSpaceMorphism( T, [ [ 2, 2 ], [ 2, 2 ] ], V );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">k_lift := KernelLift( alpha, tau );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">HasKernelEmbedding( alpha );</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">KernelEmbedding( alpha );</span>
<A split monomorphism in Category of matrices over Q>
</pre></div>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">Q := HomalgFieldOfRationals();;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">vec := MatrixCategory( Q );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">V := MatrixCategoryObject( vec, 2 );</span>
<A vector space object over Q of dimension 2>
<span class="GAPprompt">gap></span> <span class="GAPinput">W := MatrixCategoryObject( vec, 3 );</span>
<A vector space object over Q of dimension 3>
<span class="GAPprompt">gap></span> <span class="GAPinput">alpha := VectorSpaceMorphism( V, [ [ 1, 1, 1 ], [ -1, -1, -1 ] ], W );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">k := KernelObject( alpha );</span>
<A vector space object over Q of dimension 1>
<span class="GAPprompt">gap></span> <span class="GAPinput">T := MatrixCategoryObject( vec, 2 );</span>
<A vector space object over Q of dimension 2>
<span class="GAPprompt">gap></span> <span class="GAPinput">tau := VectorSpaceMorphism( T, [ [ 2, 2 ], [ 2, 2 ] ], V );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">k_lift := KernelLift( alpha, tau );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">HasKernelEmbedding( alpha );</span>
false
</pre></div>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">Q := HomalgFieldOfRationals();;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">vec := MatrixCategory( Q );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">V := MatrixCategoryObject( vec, 2 );</span>
<A vector space object over Q of dimension 2>
<span class="GAPprompt">gap></span> <span class="GAPinput">W := MatrixCategoryObject( vec, 3 );</span>
<A vector space object over Q of dimension 3>
<span class="GAPprompt">gap></span> <span class="GAPinput">alpha := VectorSpaceMorphism( V, [ [ 1, 1, 1 ], [ -1, -1, -1 ] ], W );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">k := KernelObject( alpha );</span>
<A vector space object over Q of dimension 1>
<span class="GAPprompt">gap></span> <span class="GAPinput">k_emb := KernelEmbedding( alpha );</span>
<A split monomorphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsEqualForObjects( Source( k_emb ), k );</span>
true
--> --------------------

--> maximum size reached

--> --------------------

100%


¤ Dauer der Verarbeitung: 0.24 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

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.