Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/GAP/pkg/polymaking/tst/   (Algebra von RWTH Aachen Version 4.15.1©)  Datei vom 4.9.2023 mit Größe 148 B image not shown  

Quelle  chap9.html   Sprache: unbekannt

 
<?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 (GeneralizedMorphismsForCAP) - Chapter 9: 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="chap9"  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="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chap8.html">8</a>  <a href="chap9.html">9</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="chap8.html">[Previous Chapter]</a>    <a href="chapInd.html">[Next Chapter]</a>   </div>

<p id="mathjaxlink" class="pcenter"><a href="chap9_mj.html">[MathJax on]</a></p>
<p><a id="X7967FE8E7BBDF485" name="X7967FE8E7BBDF485"></a></p>
<div class="ChapSects"><a href="chap9.html#X7967FE8E7BBDF485">9 <span class="Heading">Examples and Tests</span></a>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap9.html#X8104A77D7B5CCD4F">9.1 <span class="Heading">Basic Commands</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap9.html#X8769971A878B6648">9.2 <span class="Heading">Intersection of Nodal Curve and Cusp</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap9.html#X8245BF297DF9A3E7">9.3 <span class="Heading">WrapperCategory</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap9.html#X8325B23C86E16E76">9.4 <span class="Heading">Sweep</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap9.html#X86FB477C7908A3A6">9.5 <span class="Heading">Generalized Morphisms Category</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap9.html#X7E8AFE5085FF7E15">9.6 <span class="Heading">IsWellDefined</span></a>
</span>
</div>
</div>

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

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

<h4>9.1 <span class="Heading">Basic Commands</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">A := VectorSpaceObject( 4, Q );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">B := VectorSpaceObject( 3, Q );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">C := VectorSpaceObject( 2, Q );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">alpha := VectorSpaceMorphism( A, </span>
<span class="GAPprompt">></span> <span class="GAPinput">HomalgMatrix( [ [ 1, 1, 1 ], [ 0, 1, 1 ], </span>
<span class="GAPprompt">></span> <span class="GAPinput">[ 1, 0, 1 ], [ 1, 1, 0 ] ], 4, 3, Q ), B );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">gamma := VectorSpaceMorphism( C, </span>
<span class="GAPprompt">></span> <span class="GAPinput">HomalgMatrix( [ [ -1, 1, -1 ], [ 1, 0, -1 ] ], 2, 3, Q ), B );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">p := ProjectionInFactorOfFiberProduct( [ alpha, gamma ], 1 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">q := ProjectionInFactorOfFiberProduct( [ alpha, gamma ], 2 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">PreCompose( AsGeneralizedMorphism( alpha ), GeneralizedInverse( gamma ) );</span>
<A morphism in Generalized morphism category of Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">gen1 := PreCompose( AsGeneralizedMorphism( alpha ), </span>
<span class="GAPprompt">></span> <span class="GAPinput">                       GeneralizedInverse( gamma ) );</span>
<A morphism in Generalized morphism category of Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">gen2 := PreCompose( GeneralizedInverse( p ), AsGeneralizedMorphism( q ) );</span>
<A morphism in Generalized morphism category of Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms( gen1, gen2 );</span>
true
</pre></div>

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

<h4>9.2 <span class="Heading">Intersection of Nodal Curve and Cusp</span></h4>

<p>We are going to intersect the nodal curve <span class="Math">f = y^2 - x^2(x+1)</span> and the cusp <span class="Math">g = (x+y)^2 - (y-x)^3</span>. The two curves are arranged in a way such that they intersect at <span class="Math">(0,0)</span> with intersection number as high as possible. We are going to compute this intersection number using the definition of the intersection number as the length of the module <span class="Math">R/(f,g)</span> localized at <span class="Math">(0,0)</span>. In order to model modules over the localization of <span class="Math">Q[x,y]</span> at <span class="Math">(0,0)</span>, we use a suitable Serre quotient category. 1 2 1 1 true We are going to intersect the nodal curve <span class="Math">f = y^2 - x^2(x+1)</span> and the cusp <span class="Math">g = (x+y)^2 - (y-x)^3</span>. The two curves are arranged in a way such that they intersect at <span class="Math">(0,0)</span> with intersection number as high as possible. We are going to compute this intersection number using the definition of the intersection number as the length of the module <span class="Math">R/(f,g)</span> localized at <span class="Math">(0,0)</span>. In order to model modules over the localization of <span class="Math">Q[x,y]</span> at <span class="Math">(0,0)</span>, we use a suitable Serre quotient category. 1 2 1 1 true We are going to intersect the nodal curve <span class="Math">f = y^2 - x^2(x+1)</span> and the cusp <span class="Math">g = (x+y)^2 - (y-x)^3</span>. The two curves are arranged in a way such that they intersect at <span class="Math">(0,0)</span> with intersection number as high as possible. We are going to compute this intersection number using the definition of the intersection number as the length of the module <span class="Math">R/(f,g)</span> localized at <span class="Math">(0,0)</span>. In order to model modules over the localization of <span class="Math">Q[x,y]</span> at <span class="Math">(0,0)</span>, we use a suitable Serre quotient category. 1 2 1 1 true</p>

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

<h4>9.3 <span class="Heading">WrapperCategory</span></h4>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">LoadPackage( "LinearAlgebraForCAP" );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">LoadPackage( "GeneralizedMorphismsForCAP", false );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">old_generalized_morphism_standard := CAP_INTERNAL!.generalized_morphism_standard;;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">SwitchGeneralizedMorphismStandard( "cospan" );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Q := HomalgFieldOfRationals( );</span>
Q
<span class="GAPprompt">gap></span> <span class="GAPinput">id := HomalgIdentityMatrix( 8, Q );</span>
<An unevaluated 8 x 8 identity matrix over an internal ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">a := CertainColumns( CertainRows( id, [ 1, 2, 3 ] ), [ 2, 3, 4, 5 ] );</span>
<An unevaluated non-zero 3 x 4 matrix over an internal ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">b := CertainColumns( CertainRows( id, [ 1, 2, 3, 4 ] ), [ 2, 3, 4, 5, 6 ] );</span>
<An unevaluated non-zero 4 x 5 matrix over an internal ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">c := CertainColumns( CertainRows( id, [ 1, 2, 3, 4, 5 ] ), [ 3, 4, 5, 6, 7, 8 ] );</span>
<An unevaluated non-zero 5 x 6 matrix over an internal ring>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsZero( a * b );</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">IsZero( b * c );</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">IsZero( a * b * c );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">Qmat := MatrixCategory( Q );</span>
Category of matrices over Q
<span class="GAPprompt">gap></span> <span class="GAPinput">Wrapper := WrapperCategory( Qmat, rec( ) );</span>
WrapperCategory( Category of matrices over Q )
<span class="GAPprompt">gap></span> <span class="GAPinput">a := a / Wrapper;</span>
<A morphism in WrapperCategory( Category of matrices over Q )>
<span class="GAPprompt">gap></span> <span class="GAPinput">b := b / Wrapper;</span>
<A morphism in WrapperCategory( Category of matrices over Q )>
<span class="GAPprompt">gap></span> <span class="GAPinput">c := c / Wrapper;</span>
<A morphism in WrapperCategory( Category of matrices over Q )>
<span class="GAPprompt">gap></span> <span class="GAPinput">d := CokernelProjection( a );</span>
<An epimorphism in WrapperCategory( Category of matrices over Q )>
<span class="GAPprompt">gap></span> <span class="GAPinput">e := CokernelColift( a, PreCompose( b, c ) );</span>
<A morphism in WrapperCategory( Category of matrices over Q )>
<span class="GAPprompt">gap></span> <span class="GAPinput">f := KernelEmbedding( e );</span>
<A monomorphism in WrapperCategory( Category of matrices over Q )>
<span class="GAPprompt">gap></span> <span class="GAPinput">g := KernelEmbedding( c );</span>
<A monomorphism in WrapperCategory( Category of matrices over Q )>
<span class="GAPprompt">gap></span> <span class="GAPinput">h := KernelLift( c, PreCompose( a, b ) );</span>
<A morphism in WrapperCategory( Category of matrices over Q )>
<span class="GAPprompt">gap></span> <span class="GAPinput">i := CokernelProjection( h );</span>
<An epi morphism in WrapperCategory( Category of matrices over Q )>
<span class="GAPprompt">gap></span> <span class="GAPinput">ff := AsGeneralizedMorphism( f );</span>
<A morphism in Generalized morphism category of
 WrapperCategory( Category of matrices over Q ) by cospan>
<span class="GAPprompt">gap></span> <span class="GAPinput">dd := AsGeneralizedMorphism( d );</span>
<A morphism in Generalized morphism category of
 WrapperCategory( Category of matrices over Q ) by cospan>
<span class="GAPprompt">gap></span> <span class="GAPinput">bb := AsGeneralizedMorphism( b );</span>
<A morphism in Generalized morphism category of
 WrapperCategory( Category of matrices over Q ) by cospan>
<span class="GAPprompt">gap></span> <span class="GAPinput">gg := AsGeneralizedMorphism( g );</span>
<A morphism in Generalized morphism category of
 WrapperCategory( Category of matrices over Q ) by cospan>
<span class="GAPprompt">gap></span> <span class="GAPinput">ii := AsGeneralizedMorphism( i );</span>
<A morphism in Generalized morphism category of
 WrapperCategory( Category of matrices over Q ) by cospan>
<span class="GAPprompt">gap></span> <span class="GAPinput">ss := PreCompose( [ ff, PseudoInverse( dd ), bb, PseudoInverse( gg ), ii ] );</span>
<A morphism in Generalized morphism category of
 WrapperCategory( Category of matrices over Q ) by cospan>
<span class="GAPprompt">gap></span> <span class="GAPinput">s := HonestRepresentative( ss );</span>
<A morphism in WrapperCategory( Category of matrices over Q )>
<span class="GAPprompt">gap></span> <span class="GAPinput">j := KernelObjectFunctorial( b, d, e );</span>
<A morphism in WrapperCategory( Category of matrices over Q )>
<span class="GAPprompt">gap></span> <span class="GAPinput">k := CokernelObjectFunctorial( h, g, b );</span>
<A morphism in WrapperCategory( Category of matrices over Q )>
<span class="GAPprompt">gap></span> <span class="GAPinput">HK := HomologyObject( j, s );</span>
<An object in WrapperCategory( Category of matrices over Q )>
<span class="GAPprompt">gap></span> <span class="GAPinput">HC := HomologyObject( s, k );</span>
<An object in WrapperCategory( Category of matrices over Q )>
<span class="GAPprompt">gap></span> <span class="GAPinput">SwitchGeneralizedMorphismStandard( old_generalized_morphism_standard );</span>
</pre></div>

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

<h4>9.4 <span class="Heading">Sweep</span></h4>

<p><span class="Math">\href{https://terrytao.wordpress.com/2015/10/07/sweeping-a-matrix-rotates-its-graph/}{\textrm{Geometric interpretation of sweeping a matrix by Terence Tao.}}</span></p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">Q := HomalgFieldOfRationals();;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">V := VectorSpaceObject( 3, Q );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">mat := HomalgMatrix( [ [ 9, 8, 7 ], [ 6, 5, 4 ], [ 3, 2, 1 ] ], 3, 3, Q );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">alpha := VectorSpaceMorphism( V, mat, V );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">graph := FiberProductEmbeddingInDirectSum( </span>
<span class="GAPprompt">></span> <span class="GAPinput">            [ alpha, IdentityMorphism( V ) ] );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( graph );</span>
[ [     1,    -2,     1,     0,     0,     0 ],
  [  -4/3,   7/3,     0,     2,     1,     0 ],
  [   5/3,  -8/3,     0,    -1,     0,     1 ] ]

A morphism in Category of matrices over Q
<span class="GAPprompt">gap></span> <span class="GAPinput">D := DirectSum( V, V );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">rotmat := HomalgMatrix( [ [ 0, 0, 0, -1, 0, 0 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">                             [ 0, 1, 0, 0, 0, 0 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">                             [ 0, 0, 1, 0, 0, 0 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">                             [ 1, 0, 0, 0, 0, 0 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">                             [ 0, 0, 0, 0, 1, 0 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">                             [ 0, 0, 0, 0, 0, 1 ] ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">                             6, 6, Q );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">rot := VectorSpaceMorphism( D, rotmat, D );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">p := PreCompose( graph, rot );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( p );</span>
[ [     0,    -2,     1,    -1,     0,     0 ],
  [     2,   7/3,     0,   4/3,     1,     0 ],
  [    -1,  -8/3,     0,  -5/3,     0,     1 ] ]

A morphism in Category of matrices over Q
<span class="GAPprompt">gap></span> <span class="GAPinput">pi1 := ProjectionInFactorOfDirectSum( [ V, V ], 1 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">pi2 := ProjectionInFactorOfDirectSum( [ V, V ], 2 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">reversed_arrow := PreCompose( p, pi1 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">arrow := PreCompose( p, pi2 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">g := GeneralizedMorphismBySpan( reversed_arrow, arrow );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsHonest( g );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">sweep_1_alpha := HonestRepresentative( g );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( sweep_1_alpha );</span>
[ [  -1/9,   8/9,   7/9 ],
  [   2/3,  -1/3,  -2/3 ],
  [   1/3,  -2/3,  -4/3 ] ]

A morphism in Category of matrices over Q
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( alpha );</span>
[ [  9,  8,  7 ],
  [  6,  5,  4 ],
  [  3,  2,  1 ] ]

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

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

<h4>9.5 <span class="Heading">Generalized Morphisms Category</span></h4>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">Q := HomalgFieldOfRationals();</span>
Q
<span class="GAPprompt">gap></span> <span class="GAPinput">B := VectorSpaceObject( 2, Q );</span>
<A vector space object over Q of dimension 2>
<span class="GAPprompt">gap></span> <span class="GAPinput">C := VectorSpaceObject( 3, Q );</span>
<A vector space object over Q of dimension 3>
<span class="GAPprompt">gap></span> <span class="GAPinput">B_1 := VectorSpaceObject( 1, Q );</span>
<A vector space object over Q of dimension 1>
<span class="GAPprompt">gap></span> <span class="GAPinput">C_1 := VectorSpaceObject( 2, Q );</span>
<A vector space object over Q of dimension 2>
<span class="GAPprompt">gap></span> <span class="GAPinput">c1_source_aid := VectorSpaceMorphism( B_1, [ [ 1, 0 ] ], B );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">SetIsSubobject( c1_source_aid, true );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">c1_range_aid := VectorSpaceMorphism( C, [ [ 1, 0 ], [ 0, 1 ], [ 0, 0 ] ], C_1 );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">SetIsFactorobject( c1_range_aid, true );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">c1_associated := VectorSpaceMorphism( B_1, [ [ 1, 1 ] ], C_1 );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">c1 := GeneralizedMorphism( c1_source_aid, c1_associated, c1_range_aid );</span>
<A morphism in Generalized morphism category of Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">B_2 := VectorSpaceObject( 1, Q );</span>
<A vector space object over Q of dimension 1>
<span class="GAPprompt">gap></span> <span class="GAPinput">C_2 := VectorSpaceObject( 2, Q );</span>
<A vector space object over Q of dimension 2>
<span class="GAPprompt">gap></span> <span class="GAPinput">c2_source_aid := VectorSpaceMorphism( B_2, [ [ 2, 0 ] ], B );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">SetIsSubobject( c2_source_aid, true );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">c2_range_aid := VectorSpaceMorphism( C, [ [ 3, 0 ], [ 0, 3 ], [ 0, 0 ] ], C_2 );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">SetIsFactorobject( c2_range_aid, true );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">c2_associated := VectorSpaceMorphism( B_2, [ [ 6, 6 ] ], C_2 );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">c2 := GeneralizedMorphism( c2_source_aid, c2_associated, c2_range_aid );</span>
<A morphism in Generalized morphism category of Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms( c1, c2 );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms( c1, c1 );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">c3_associated := VectorSpaceMorphism( B_1, [ [ 2, 2 ] ], C_1 );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">c3 := GeneralizedMorphism( c1_source_aid, c3_associated, c1_range_aid );</span>
<A morphism in Generalized morphism category of Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms( c1, c3 );</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCongruentForMorphisms( c2, c3 );</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">c1 + c2;</span>
<A morphism in Generalized morphism category of Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">Arrow( c1 + c2 );</span>
<A morphism in Category of matrices over Q>
</pre></div>

<p>First composition test:</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">Q := HomalgFieldOfRationals();</span>
Q
<span class="GAPprompt">gap></span> <span class="GAPinput">A := VectorSpaceObject( 1, Q );</span>
<A vector space object over Q of dimension 1>
<span class="GAPprompt">gap></span> <span class="GAPinput">B := VectorSpaceObject( 2, Q );</span>
<A vector space object over Q of dimension 2>
<span class="GAPprompt">gap></span> <span class="GAPinput">C := VectorSpaceObject( 3, Q );</span>
<A vector space object over Q of dimension 3>
<span class="GAPprompt">gap></span> <span class="GAPinput">phi_tilde_associated := VectorSpaceMorphism( A, [ [ 1, 2, 0 ] ], C );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">phi_tilde_source_aid := VectorSpaceMorphism( A, [ [ 1, 2 ] ], B );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">phi_tilde := GeneralizedMorphismWithSourceAid( phi_tilde_source_aid, phi_tilde_associated );</span>
<A morphism in Generalized morphism category of Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">psi_tilde_associated := IdentityMorphism( B );</span>
<An identity morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">psi_tilde_source_aid := VectorSpaceMorphism( B, [ [ 1, 0, 0 ], [ 0, 1, 0 ] ], C );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">psi_tilde := GeneralizedMorphismWithSourceAid( psi_tilde_source_aid, psi_tilde_associated );</span>
<A morphism in Generalized morphism category of Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">composition := PreCompose( phi_tilde, psi_tilde );</span>
<A morphism in Generalized morphism category of Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">Arrow( composition );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">SourceAid( composition );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">RangeAid( composition );</span>
<An identity morphism in Category of matrices over Q>
</pre></div>

<p>Second composition test</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">Q := HomalgFieldOfRationals();</span>
Q
<span class="GAPprompt">gap></span> <span class="GAPinput">A := VectorSpaceObject( 1, Q );</span>
<A vector space object over Q of dimension 1>
<span class="GAPprompt">gap></span> <span class="GAPinput">B := VectorSpaceObject( 2, Q );</span>
<A vector space object over Q of dimension 2>
<span class="GAPprompt">gap></span> <span class="GAPinput">C := VectorSpaceObject( 3, Q );</span>
<A vector space object over Q of dimension 3>
<span class="GAPprompt">gap></span> <span class="GAPinput">phi2_tilde_associated := VectorSpaceMorphism( A, [ [ 1, 5 ] ], B );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">phi2_tilde_range_aid := VectorSpaceMorphism( C, [ [ 1, 0 ], [ 0, 1 ], [ 1, 1 ] ], B );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">phi2_tilde := GeneralizedMorphismWithRangeAid( phi2_tilde_associated, phi2_tilde_range_aid );</span>
<A morphism in Generalized morphism category of Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">psi2_tilde_associated := VectorSpaceMorphism( C, [ [ 1 ], [ 3 ], [ 4 ] ], A );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">psi2_tilde_range_aid := VectorSpaceMorphism( B, [ [ 1 ], [ 1 ] ], A );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">psi2_tilde := GeneralizedMorphismWithRangeAid( psi2_tilde_associated, psi2_tilde_range_aid );</span>
<A morphism in Generalized morphism category of Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">composition2 := PreCompose( phi2_tilde, psi2_tilde );</span>
<A morphism in Generalized morphism category of Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">Arrow( composition2 );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">RangeAid( composition2 );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">SourceAid( composition2 );</span>
<An identity morphism in Category of matrices over Q>
</pre></div>

<p>Third composition test</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">Q := HomalgFieldOfRationals();</span>
Q
<span class="GAPprompt">gap></span> <span class="GAPinput">A := VectorSpaceObject( 3, Q );</span>
<A vector space object over Q of dimension 3>
<span class="GAPprompt">gap></span> <span class="GAPinput">Asub := VectorSpaceObject( 2, Q );</span>
<A vector space object over Q of dimension 2>
<span class="GAPprompt">gap></span> <span class="GAPinput">B := VectorSpaceObject( 3, Q );</span>
<A vector space object over Q of dimension 3>
<span class="GAPprompt">gap></span> <span class="GAPinput">Bfac := VectorSpaceObject( 1, Q );</span>
<A vector space object over Q of dimension 1>
<span class="GAPprompt">gap></span> <span class="GAPinput">Bsub := VectorSpaceObject( 2, Q );</span>
<A vector space object over Q of dimension 2>
<span class="GAPprompt">gap></span> <span class="GAPinput">C := VectorSpaceObject( 3, Q );</span>
<A vector space object over Q of dimension 3>
<span class="GAPprompt">gap></span> <span class="GAPinput">Cfac := VectorSpaceObject( 1, Q );</span>
<A vector space object over Q of dimension 1>
<span class="GAPprompt">gap></span> <span class="GAPinput">Asub_into_A := VectorSpaceMorphism( Asub, [ [ 1, 0, 0 ], [ 0, 1, 0 ] ], A );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">Asub_to_Bfac := VectorSpaceMorphism( Asub, [ [ 1 ], [ 1 ] ], Bfac );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">B_onto_Bfac := VectorSpaceMorphism( B, [ [ 1 ], [ 1 ], [ 1 ] ], Bfac );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">Bsub_into_B := VectorSpaceMorphism( Bsub, [ [ 2, 2, 0 ], [ 0, 2, 2 ] ], B );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">Bsub_to_Cfac := VectorSpaceMorphism( Bsub, [ [ 3 ], [ 0 ] ], Cfac );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">C_onto_Cfac := VectorSpaceMorphism( C, [ [ 1 ], [ 2 ], [ 3 ] ], Cfac );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">generalized_morphism1 := GeneralizedMorphism( Asub_into_A, Asub_to_Bfac, B_onto_Bfac );</span>
<A morphism in Generalized morphism category of Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">generalized_morphism2 := GeneralizedMorphism( Bsub_into_B, Bsub_to_Cfac, C_onto_Cfac );</span>
<A morphism in Generalized morphism category of Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsWellDefined( generalized_morphism1 );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsWellDefined( generalized_morphism2 );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">p := PreCompose( generalized_morphism1, generalized_morphism2 );</span>
<A morphism in Generalized morphism category of Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">SourceAid( p );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">Arrow( p );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">RangeAid( p );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">A := VectorSpaceObject( 3, Q );</span>
<A vector space object over Q of dimension 3>
<span class="GAPprompt">gap></span> <span class="GAPinput">Asub := VectorSpaceObject( 2, Q );</span>
<A vector space object over Q of dimension 2>
<span class="GAPprompt">gap></span> <span class="GAPinput">B := VectorSpaceObject( 3, Q );</span>
<A vector space object over Q of dimension 3>
<span class="GAPprompt">gap></span> <span class="GAPinput">Bfac := VectorSpaceObject( 1, Q );</span>
<A vector space object over Q of dimension 1>
<span class="GAPprompt">gap></span> <span class="GAPinput">Bsub := VectorSpaceObject( 2, Q );</span>
<A vector space object over Q of dimension 2>
<span class="GAPprompt">gap></span> <span class="GAPinput">C := VectorSpaceObject( 3, Q );</span>
<A vector space object over Q of dimension 3>
<span class="GAPprompt">gap></span> <span class="GAPinput">Cfac := VectorSpaceObject( 2, Q );</span>
<A vector space object over Q of dimension 2>
<span class="GAPprompt">gap></span> <span class="GAPinput">Bsub_to_Cfac := VectorSpaceMorphism( Bsub, [ [ 3, 3 ], [ 0, 0 ] ], Cfac );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">C_onto_Cfac := VectorSpaceMorphism( C, [ [ 1, 0 ], [ 0, 2 ], [ 3, 3 ] ], Cfac );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">generalized_morphism1 := GeneralizedMorphism( Asub_into_A, Asub_to_Bfac, B_onto_Bfac );</span>
<A morphism in Generalized morphism category of Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">generalized_morphism2 := GeneralizedMorphism( Bsub_into_B, Bsub_to_Cfac, C_onto_Cfac );</span>
<A morphism in Generalized morphism category of Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsWellDefined( generalized_morphism1 );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsWellDefined( generalized_morphism2 );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">p := PreCompose( generalized_morphism1, generalized_morphism2 );</span>
<A morphism in Generalized morphism category of Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">SourceAid( p );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">Arrow( p );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">RangeAid( p );</span>
<A morphism in Category of matrices over Q>
</pre></div>

<p>Honest representative test</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">Q := HomalgFieldOfRationals();</span>
Q
<span class="GAPprompt">gap></span> <span class="GAPinput">A := VectorSpaceObject( 1, Q );</span>
<A vector space object over Q of dimension 1>
<span class="GAPprompt">gap></span> <span class="GAPinput">B := VectorSpaceObject( 2, Q );</span>
<A vector space object over Q of dimension 2>
<span class="GAPprompt">gap></span> <span class="GAPinput">phi_tilde_source_aid := VectorSpaceMorphism( A, [ [ 2 ] ], A );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">phi_tilde_associated := VectorSpaceMorphism( A, [ [ 1, 1 ] ], B );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">phi_tilde_range_aid := VectorSpaceMorphism( B, [ [ 1, 2 ], [ 3, 4 ] ], B );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">phi_tilde := GeneralizedMorphism( phi_tilde_source_aid, phi_tilde_associated, phi_tilde_range_aid );</span>
<A morphism in Generalized morphism category of Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">HonestRepresentative( phi_tilde );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsWellDefined( phi_tilde );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsWellDefined( psi_tilde );</span>
true
</pre></div>

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

<h4>9.6 <span class="Heading">IsWellDefined</span></h4>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">Q := HomalgFieldOfRationals();</span>
Q
<span class="GAPprompt">gap></span> <span class="GAPinput">A := VectorSpaceObject( 1, Q );</span>
<A vector space object over Q of dimension 1>
<span class="GAPprompt">gap></span> <span class="GAPinput">B := VectorSpaceObject( 2, Q );</span>
<A vector space object over Q of dimension 2>
<span class="GAPprompt">gap></span> <span class="GAPinput">alpha := VectorSpaceMorphism( A, [ [ 1, 2 ] ], B );</span>
<A morphism in Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">g := GeneralizedMorphism( alpha, alpha, alpha );</span>
<A morphism in Generalized morphism category of Category of matrices over Q>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsWellDefined( alpha );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsWellDefined( g );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsEqualForObjects( A, B );</span>
false
</pre></div>


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


<div class="chlinkbot"><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="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chap8.html">8</a>  <a href="chap9.html">9</a>  <a href="chapInd.html">Ind</a>  </div>

<hr />
<p class="foot">generated by <a href="https://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
</body>
</html>

100%


[ zur Elbe Produktseite wechseln0.21Quellennavigators  Analyse erneut starten  ]