Goto Chapter: Top 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Ind
 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 

6 Example on category of rows
 6.1 Constructors of objects
 6.2 Constructors of morphisms
 6.3 A few categorical constructions for category of rows
 6.4 Simplifications

6 Example on category of rows

6.1 Constructors of objects

gap> S := HomalgRingOfIntegers();;
gap> rows := CategoryOfRows( S );
Rows( Z )
gap> obj1 := CategoryOfRowsObject( 2, rows );
<A row module over Z of rank 2>
gap> obj2 := CategoryOfRowsObject( 8, rows );
<A row module over Z of rank 8>

6.2 Constructors of morphisms

gap> obj3 := CategoryOfRowsObject( 1, rows );
<A row module over Z of rank 1>
gap> IsWellDefined( obj1 );
true
gap> obj4 := CategoryOfRowsObject( 2, rows );
<A row module over Z of rank 2>
gap> mor := CategoryOfRowsMorphism( obj3, HomalgMatrix( [[1,2]], 1, 2, S ), obj4 );
<A morphism in Rows( Z )>
gap> IsWellDefined( mor );
true
gap> Display( Source( mor ) );
A row module over Z of rank 1
gap> Display( Range( mor ) );
A row module over Z of rank 2
gap> Display( UnderlyingMatrix( mor ) );
[ [  1, 2 ] ]

6.3 A few categorical constructions for category of rows

gap> Length( AdditiveGenerators( rows ) );
1
gap> ZeroObject( rows );
<A row module over Z of rank 0>
gap> obj5 := CategoryOfRowsObject( 2, rows );
<A row module over Z of rank 2>
gap> Display( ZeroMorphism( ZeroObject( rows ), obj5 ) );
A zero, split monomorphism in Rows( Z )

Source: 
A row module over Z of rank 0

Matrix: 
(an empty 0 x 2 matrix)

Range: 
A row module over Z of rank 2
gap> obj6 := CategoryOfRowsObject( 1, rows );
<A row module over Z of rank 1>
gap> Display( IdentityMorphism( obj6 ) );
An identity morphism in Rows( Z )

Source: 
A row module over Z of rank 1

Matrix: 
[ [  1 ] ]

Range: 
A row module over Z of rank 1
gap> directSum := DirectSum( [ obj5, obj6 ] );
<A row module over Z of rank 3>
gap> Display( directSum );
A row module over Z of rank 3
gap> i1 := InjectionOfCofactorOfDirectSum( [ obj5, obj6 ], 1 );
<A morphism in Rows( Z )>
gap> Display( i1 );
A morphism in Rows( Z )

Source: 
A row module over Z of rank 2

Matrix: 
[ [  1,  0,  0 ],
  [  0,  1,  0 ] ]

Range: 
A row module over Z of rank 3
gap> i2 := InjectionOfCofactorOfDirectSum( [ obj5, obj6 ], 2 );
<A morphism in Rows( Z )>
gap> Display( i2 );
A morphism in Rows( Z )

Source: 
A row module over Z of rank 1

Matrix: 
[ [  0,  0,  1 ] ]

Range: 
A row module over Z of rank 3
gap> proj1 := ProjectionInFactorOfDirectSum( [ obj5, obj6 ], 1 );
<A morphism in Rows( Z )>
gap> Display( proj1 );
A morphism in Rows( Z )

Source: 
A row module over Z of rank 3

Matrix: 
[ [  1,  0 ],
  [  0,  1 ],
  [  0,  0 ] ]

Range: 
A row module over Z of rank 2
gap> proj2 := ProjectionInFactorOfDirectSum( [ obj5, obj6 ], 2 );
<A morphism in Rows( Z )>
gap> Display( proj2 );
A morphism in Rows( Z )

Source: 
A row module over Z of rank 3

Matrix: 
[ [  0 ],
  [  0 ],
  [  1 ] ]

Range: 
A row module over Z of rank 1
gap> k := WeakKernelEmbedding( proj1 );
<A morphism in Rows( Z )>
gap> Display( k );
A morphism in Rows( Z )

Source: 
A row module over Z of rank 1

Matrix: 
[ [  0,  0,  1 ] ]

Range: 
A row module over Z of rank 3
gap> ck := WeakCokernelProjection( k );
<A morphism in Rows( Z )>
gap> Display( ck );
A morphism in Rows( Z )

Source: 
A row module over Z of rank 3

Matrix: 
[ [   0,  -1 ],
  [   1,   0 ],
  [   0,   0 ] ]

Range: 
A row module over Z of rank 2
gap> IsMonomorphism( k );
true
gap> IsEpimorphism( k );
false
gap> IsMonomorphism( ck );
false
gap> IsEpimorphism( ck );
true
gap> mor1 := CategoryOfRowsMorphism( obj5, HomalgMatrix( [[ 1 ], [ 2 ]], 2, 1, S ), obj6 );
<A morphism in Rows( Z )>
gap> Display( mor1 );
A morphism in Rows( Z )

Source: 
A row module over Z of rank 2

Matrix: 
[ [  1 ],
  [  2 ] ]

Range: 
A row module over Z of rank 1
gap> mor2 := IdentityMorphism( obj6 );
<An identity morphism in Rows( Z )>
gap> Display( mor2 );
An identity morphism in Rows( Z )

Source: 
A row module over Z of rank 1

Matrix: 
[ [  1 ] ]

Range: 
A row module over Z of rank 1
gap> lift := Lift( mor1, mor2 );
<A morphism in Rows( Z )>
gap> Display( lift );
A morphism in Rows( Z )

Source: 
A row module over Z of rank 2

Matrix: 
[ [  1 ],
  [  2 ] ]

Range: 
A row module over Z of rank 1
gap> source := CategoryOfRowsObject( 1, rows );
<A row module over Z of rank 1>
gap> range := CategoryOfRowsObject( 2, rows );
<A row module over Z of rank 2>
gap> mor := CategoryOfRowsMorphism( source, HomalgMatrix( [[ 2, 3 ]], 1, 2, S ), range );
<A morphism in Rows( Z )>
gap> colift := Colift( mor2, mor );
<A morphism in Rows( Z )>
gap> Display( colift );
A morphism in Rows( Z )

Source: 
A row module over Z of rank 1

Matrix: 
[ [  2,  3 ] ]

Range: 
A row module over Z of rank 2
gap> fp := WeakBiFiberProduct( mor1, mor2 );
<A row module over Z of rank 2>
gap> fp_proj := ProjectionOfBiasedWeakFiberProduct( mor1, mor2 );
<A morphism in Rows( Z )>
gap> Display( fp_proj );
A morphism in Rows( Z )

Source: 
A row module over Z of rank 2

Matrix: 
[ [  -2,   1 ],
  [  -1,   0 ] ]

Range: 
A row module over Z of rank 2
gap> po := WeakBiPushout( mor, mor2 );
<A row module over Z of rank 2>
gap> inj_push := InjectionOfBiasedWeakPushout( mor, mor2 );
<A morphism in Rows( Z )>
gap> Display( inj_push );
A morphism in Rows( Z )

Source: 
A row module over Z of rank 2

Matrix: 
[ [  -3,   1 ],
  [   2,  -1 ] ]

Range: 
A row module over Z of rank 2
gap> Q := HomalgFieldOfRationals();;
gap> rows := CategoryOfRows( Q );;
gap> homalg_matrix := HomalgMatrix( [ [ 1, 0 ],
>                                  [ 0, 1 ],
>                                  [ -2, 0] ], 3, 2, Q );;
gap> alpha := homalg_matrix / rows;;
gap> diagram := [ alpha, (2 / Q) * alpha, (3 / Q) * alpha ];;
gap> equalizer := EmbeddingOfEqualizer( diagram );;
gap> Display( EntriesOfHomalgMatrixAsListList( UnderlyingMatrix( equalizer ) ) );
[ [ 2, 0, 1 ] ]
gap> equalizer_d1 := PreCompose( equalizer, diagram[1] );;
gap> equalizer_d2 := PreCompose( equalizer, diagram[2] );;
gap> equalizer_d3 := PreCompose( equalizer, diagram[3] );;
gap> IsEqualForMorphisms( equalizer_d1, equalizer_d2 );
true
gap> IsEqualForMorphisms( equalizer_d2, equalizer_d3 );
true
gap> IsEqualForMorphisms( equalizer_d1, equalizer_d3 );
true
gap> universal_morphism := UniversalMorphismIntoEqualizer( Source(alpha), diagram, Source( (2 / Q) * equalizer ), (2 / Q) * equalizer );;
gap> Display( EntriesOfHomalgMatrixAsListList( UnderlyingMatrix( universal_morphism ) ) );
[ [ 2 ] ]
gap> IsEqualForMorphisms( PreCompose( universal_morphism, equalizer ), (2 / Q) * equalizer );
true
gap> Q := HomalgFieldOfRationals();;
gap> rows := CategoryOfRows( Q );;
gap> homalg_matrix := HomalgMatrix( [ [ 1, 0, -2 ],
>                                  [ 0, 1, 0 ] ], 2, 3, Q );;
gap> alpha := homalg_matrix / rows;;
gap> diagram := [ alpha, (2 / Q) * alpha, (3 / Q) * alpha ];;
gap> coequalizer := ProjectionOntoCoequalizer( diagram );;
gap> Display( EntriesOfHomalgMatrixAsListList( UnderlyingMatrix( coequalizer ) ) );
[ [ 2 ], [ 0 ], [ 1 ] ]
gap> coequalizer_d1 := PreCompose( diagram[1], coequalizer );;
gap> coequalizer_d2 := PreCompose( diagram[2], coequalizer );;
gap> coequalizer_d3 := PreCompose( diagram[3], coequalizer );;
gap> IsEqualForMorphisms( coequalizer_d1, coequalizer_d2 );
true
gap> IsEqualForMorphisms( coequalizer_d2, coequalizer_d3 );
true
gap> IsEqualForMorphisms( coequalizer_d1, coequalizer_d3 );
true
gap> universal_morphism := UniversalMorphismFromCoequalizer( Range(alpha), diagram, Range( (2 / Q) * coequalizer ), (2 / Q) * coequalizer );;
gap> Display( EntriesOfHomalgMatrixAsListList( UnderlyingMatrix( universal_morphism ) ) );
[ [ 2 ] ]
gap> IsEqualForMorphisms( PreCompose( coequalizer,  universal_morphism ), (2 / Q) * coequalizer );
true

6.4 Simplifications

gap> R := HomalgRingOfIntegers();;
gap> rows := CategoryOfRows( R );;
gap> M := HomalgMatrix( [ [ 2, 2, 2 ], [ 3, 3, 3 ] ], 2, 3, R );;
gap> alpha := AsCategoryOfRowsMorphism( M, rows );;
gap> pi := PreCompose( [
>     SimplifySourceAndRange_IsoFromInputSource( alpha, infinity ),
>     SimplifySourceAndRange( alpha, infinity ),
>     SimplifySourceAndRange_IsoToInputRange( alpha, infinity ) ] );;
gap> IsCongruentForMorphisms( pi, alpha );
true
gap> IsOne(
>     PreCompose( SimplifySourceAndRange_IsoFromInputSource( alpha, infinity ), SimplifySourceAndRange_IsoToInputSource( alpha, infinity ) )
> );
true
gap> IsOne(
>     PreCompose( SimplifySourceAndRange_IsoFromInputRange( alpha, infinity ), SimplifySourceAndRange_IsoToInputRange( alpha, infinity ) )
> );
true
gap> pi2 := PreCompose(
>     SimplifySource_IsoFromInputObject( alpha, infinity ),
>     SimplifySource( alpha, infinity )
> );;
gap> IsCongruentForMorphisms( pi2, alpha );
true
gap> IsOne( PreCompose( SimplifySource_IsoFromInputObject( alpha, infinity ), SimplifySource_IsoToInputObject( alpha, infinity ) ) );
true
gap> pi3 := PreCompose(
>     SimplifyRange( alpha, infinity ),
>     SimplifyRange_IsoToInputObject( alpha, infinity )
> );;
gap> IsCongruentForMorphisms( pi3, alpha );
true
gap> IsOne( PreCompose( SimplifyRange_IsoFromInputObject( alpha, infinity ), SimplifyRange_IsoToInputObject( alpha, infinity ) ) );
true
gap> R := HomalgRingOfIntegers();;
gap> cols := CategoryOfColumns( R );;
gap> M := HomalgMatrix( [ [ 2, 2, 2 ], [ 3, 3, 3 ] ], 2, 3, R );;
gap> alpha := AsCategoryOfColumnsMorphism( M, cols );;
gap> pi := PreCompose( [
>     SimplifySourceAndRange_IsoFromInputSource( alpha, infinity ),
>     SimplifySourceAndRange( alpha, infinity ), 
>     SimplifySourceAndRange_IsoToInputRange( alpha, infinity ) ] );;
gap> IsCongruentForMorphisms( pi, alpha );
true
gap> IsOne(
>     PreCompose( SimplifySourceAndRange_IsoFromInputSource( alpha, infinity ), SimplifySourceAndRange_IsoToInputSource( alpha, infinity ) )
> );
true
gap> IsOne(
>     PreCompose( SimplifySourceAndRange_IsoFromInputRange( alpha, infinity ), SimplifySourceAndRange_IsoToInputRange( alpha, infinity ) )
> );
true
gap> pi2 := PreCompose(
>     SimplifySource_IsoFromInputObject( alpha, infinity ),
>     SimplifySource( alpha, infinity )
> );;
gap> IsCongruentForMorphisms( pi2, alpha );
true
gap> IsOne( PreCompose( SimplifySource_IsoFromInputObject( alpha, infinity ), SimplifySource_IsoToInputObject( alpha, infinity ) ) );
true
gap> pi3 := PreCompose(
>     SimplifyRange( alpha, infinity ),
>     SimplifyRange_IsoToInputObject( alpha, infinity )
> );;
gap> IsCongruentForMorphisms( pi3, alpha );
true
gap> IsOne( PreCompose( SimplifyRange_IsoFromInputObject( alpha, infinity ), SimplifyRange_IsoToInputObject( alpha, infinity ) ) );
true
gap> Qxyz := HomalgFieldOfRationalsInDefaultCAS( ) * "x,y,z";;
gap> A3 := RingOfDerivations( Qxyz, "Dx,Dy,Dz" );;
gap> M1 := HomalgMatrix( "[ \
> Dx  \
> ]", 1, 1, A3 );;
gap> M2 := HomalgMatrix( "[ \
> Dx, \
> Dy  \
> ]", 2, 1, A3 );;
gap> M3 := HomalgMatrix( "[ \
> Dx, \
> Dy, \
> Dz  \
> ]", 3, 1, A3 );;
gap> M := DiagMat( [ M1, M2, M3 ] );;
gap> M := ShallowCopy( M );;
gap> SetIsMutableMatrix( M, true );;
gap> M[ 1, 2 ] := "1";;
gap> M[ 2, 3 ] := "1";;
gap> M[ 3, 3 ] := "1";;
gap> MakeImmutable( M );;
gap> tau1 := HomalgMatrix( "[ \
> 1, Dx, Dz, \
> 0,  0,  1, \
> 0,  1, Dy  \
> ]", 3, 3, A3 );;
gap> tau2 := HomalgMatrix( "[ \
> 0,  1, Dz+x*y, \
> 0,  0,      1, \
> 1, Dz,    x-y  \
> ]", 3, 3, A3 );;
gap> tau3 := HomalgMatrix( "[ \
> 1,  0, 0, \
> 1,  1, 0, \
> 0, -1, 1  \
> ]", 3, 3, A3 );;
gap> tau := tau1 * tau2 * tau3;;
gap> M := M * tau;;
gap> rows := CategoryOfRows( A3 );;
gap> alpha := AsCategoryOfRowsMorphism( M, rows );;
gap> Mrows := FreydCategoryObject( alpha );;
gap> Srows := SimplifyObject( Mrows, infinity );;
gap> RankOfObject( Source( RelationMorphism( Srows ) ) );
4
gap> RankOfObject( Range( RelationMorphism( Srows ) ) );
2
gap> IsIsomorphism( SimplifyObject_IsoFromInputObject( Mrows, infinity ) );
true
gap> IsIsomorphism( SimplifyObject_IsoToInputObject( Mrows, infinity ) );
true

Computing the grade filtration:

gap> mu1 := GradeFiltrationNthMonomorphism( Mrows, 1 );;
gap> IsZero( mu1 );
false
gap> IsMonomorphism( mu1 );
true
gap> mu2 := GradeFiltrationNthMonomorphism( Mrows, 2 );;
gap> IsZero( mu2 );
false
gap> IsMonomorphism( mu2 );
true
gap> mu3 := GradeFiltrationNthMonomorphism( Mrows, 3 );;
gap> IsZero( mu3 );
false
gap> IsMonomorphism( mu3 );
true
gap> mu4 := GradeFiltrationNthMonomorphism( Mrows, 4 );;
gap> IsZero( mu4 );
true
gap> cols := CategoryOfColumns( A3 );;
gap> alpha := AsCategoryOfColumnsMorphism( M, cols );;
gap> Mcols := FreydCategoryObject( alpha );;
gap> Scols := SimplifyObject( Mcols, infinity );;
gap> RankOfObject( Source( RelationMorphism( Scols ) ) );
1
gap> RankOfObject( Range( RelationMorphism( Scols ) ) );
4
gap> IsIsomorphism( SimplifyObject_IsoFromInputObject( Mcols, infinity ) );
true
gap> IsIsomorphism( SimplifyObject_IsoToInputObject( Mcols, infinity ) );
true
 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 
Goto Chapter: Top 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Ind

generated by GAPDoc2HTML