gap> R := HomalgRingOfIntegers();; gap> rows := CategoryOfRows( R );; gap> adelman := AdelmanCategory( rows );; gap> obj1 := CategoryOfRowsObject( 1, rows );; gap> obj2 := CategoryOfRowsObject( 2, rows );; gap> id := IdentityMorphism( obj2 );; gap> alpha := CategoryOfRowsMorphism( obj1, HomalgMatrix( [ [ 1, 2 ] ], 1, 2, R ), obj2 );; gap> beta := CategoryOfRowsMorphism( obj2, HomalgMatrix( [ [ 1, 2 ], [ 3, 4 ] ], 2, 2, R ), obj2 );; gap> gamma := CategoryOfRowsMorphism( obj2, HomalgMatrix( [ [ 1, 3 ], [ 3, 4 ] ], 2, 2, R ), obj2 );; gap> obj1_a := AsAdelmanCategoryObject( obj1 );; gap> obj2_a := AsAdelmanCategoryObject( obj2 );; gap> m := AsAdelmanCategoryMorphism( beta );; gap> n := AsAdelmanCategoryMorphism( gamma );; gap> IsWellDefined( m ); true gap> # backwards compatibility > IsIdenticalObj( MorphismDatum( m ), beta ); true gap> IsCongruentForMorphisms( PreCompose( m, n ), PreCompose( n, m ) ); false gap> IsCongruentForMorphisms( SubtractionForMorphisms( m, m ), ZeroMorphism( obj2_a, obj2_a ) ); true gap> IsCongruentForMorphisms( ZeroObjectFunctorial( adelman ), > PreCompose( UniversalMorphismFromZeroObject( obj1_a), UniversalMorphismIntoZeroObject( obj1_a ) ) > ); true gap> d := [ obj1_a, obj2_a ];; gap> pi1 := ProjectionInFactorOfDirectSum( d, 1 );; gap> pi2 := ProjectionInFactorOfDirectSum( d, 2 );; gap> id := IdentityMorphism( DirectSum( d ) );; gap> iota1 := InjectionOfCofactorOfDirectSum( d, 1 );; gap> iota2 := InjectionOfCofactorOfDirectSum( d, 2 );; gap> IsCongruentForMorphisms( PreCompose( pi1, iota1 ) + PreCompose( pi2, iota2 ), id ); true gap> IsCongruentForMorphisms( UniversalMorphismIntoDirectSum( d, [ pi1, pi2 ] ), id ); true gap> IsCongruentForMorphisms( UniversalMorphismFromDirectSum( d, [ iota1, iota2 ] ), id ); true gap> c := CokernelProjection( m );; gap> c2 := CokernelProjection( c );; gap> IsCongruentForMorphisms( c2, ZeroMorphism( Source( c2 ), Range( c2 ) ) ); true gap> IsWellDefined( CokernelProjection( m ) ); true gap> IsCongruentForMorphisms( CokernelColift( m, CokernelProjection( m ) ), IdentityMorphism( CokernelObject( m ) ) ); true gap> k := KernelEmbedding( c );; gap> IsZeroForMorphisms( PreCompose( k, c ) ); true gap> IsCongruentForMorphisms( KernelLift( m, KernelEmbedding( m ) ), IdentityMorphism( KernelObject( m ) ) ); true
gap> R := HomalgRingOfIntegers();; gap> cols := CategoryOfColumns( R );; gap> adelman := AdelmanCategory( cols );; gap> obj1 := CategoryOfColumnsObject( 1, cols );; gap> obj2 := CategoryOfColumnsObject( 2, cols );; gap> id := IdentityMorphism( obj2 );; gap> alpha := CategoryOfColumnsMorphism( obj1, HomalgMatrix( [ [ 1 ], [ 2 ] ], 2, 1, R ), obj2 );; gap> beta := CategoryOfColumnsMorphism( obj2, HomalgMatrix( [ [ 1, 3 ], [ 2, 4 ] ], 2, 2, R ), obj2 );; gap> gamma := CategoryOfColumnsMorphism( obj2, HomalgMatrix( [ [ 1, 3 ], [ 3, 4 ] ], 2, 2, R ), obj2 );; gap> obj1_a := AsAdelmanCategoryObject( obj1 );; gap> obj2_a := AsAdelmanCategoryObject( obj2 );; gap> m := AsAdelmanCategoryMorphism( beta );; gap> n := AsAdelmanCategoryMorphism( gamma );; gap> IsWellDefined( m ); true gap> IsCongruentForMorphisms( PreCompose( m, n ), PreCompose( n, m ) ); false gap> IsCongruentForMorphisms( SubtractionForMorphisms( m, m ), ZeroMorphism( obj2_a, obj2_a ) ); true gap> IsCongruentForMorphisms( ZeroObjectFunctorial( adelman ), > PreCompose( UniversalMorphismFromZeroObject( obj1_a), UniversalMorphismIntoZeroObject( obj1_a ) ) > ); true gap> d := [ obj1_a, obj2_a ];; gap> pi1 := ProjectionInFactorOfDirectSum( d, 1 );; gap> pi2 := ProjectionInFactorOfDirectSum( d, 2 );; gap> id := IdentityMorphism( DirectSum( d ) );; gap> iota1 := InjectionOfCofactorOfDirectSum( d, 1 );; gap> iota2 := InjectionOfCofactorOfDirectSum( d, 2 );; gap> IsCongruentForMorphisms( PreCompose( pi1, iota1 ) + PreCompose( pi2, iota2 ), id ); true gap> IsCongruentForMorphisms( UniversalMorphismIntoDirectSum( d, [ pi1, pi2 ] ), id ); true gap> IsCongruentForMorphisms( UniversalMorphismFromDirectSum( d, [ iota1, iota2 ] ), id ); true gap> c := CokernelProjection( m );; gap> c2 := CokernelProjection( c );; gap> IsCongruentForMorphisms( c2, ZeroMorphism( Source( c2 ), Range( c2 ) ) ); true gap> IsWellDefined( CokernelProjection( m ) ); true gap> IsCongruentForMorphisms( CokernelColift( m, CokernelProjection( m ) ), IdentityMorphism( CokernelObject( m ) ) ); true gap> k := KernelEmbedding( c );; gap> IsZeroForMorphisms( PreCompose( k, c ) ); true gap> IsCongruentForMorphisms( KernelLift( m, KernelEmbedding( m ) ), IdentityMorphism( KernelObject( m ) ) ); true
gap> LoadPackage( "FreydCategoriesForCAP", false ); true gap> LoadPackage( "RingsForHomalg", false ); true gap> R := HomalgRingOfIntegers();; gap> cat := CategoryOfRows( R );; gap> obj1 := CategoryOfRowsObject( 1, cat );; gap> obj2 := CategoryOfRowsObject( 2, cat );; gap> gamma := CategoryOfRowsMorphism( obj2, HomalgMatrix( [ [ 1, 1 ], [ 1, 1 ] ], 2, 2, R ), obj2 );; gap> ## Freyd categories > freyd := FreydCategory( cat );; gap> IsAbelianCategory( freyd ); true gap> obj_gamma := FreydCategoryObject( gamma );; gap> u := RandomMorphismWithFixedSource( obj_gamma, [ [5], [5] ] );; gap> IsWellDefined( u ) and IsEqualForObjects( Source(u), obj_gamma ); true gap> u := RandomMorphismWithFixedSource( obj_gamma, 5 );; gap> IsWellDefined( u ) and IsEqualForObjects( Source(u), obj_gamma ); true gap> u := RandomMorphismWithFixedRange( obj_gamma, [ [5], [5] ] );; gap> IsWellDefined( u ) and IsEqualForObjects( Range(u), obj_gamma ); true gap> u := RandomMorphismWithFixedRange( obj_gamma, 5 );; gap> IsWellDefined( u ) and IsEqualForObjects( Range(u), obj_gamma ); true gap> obj_delta := RandomObject( freyd, [[10],[10],[10]] );; gap> obj_delta := RandomObject( freyd, 10 );; gap> u := RandomMorphismWithFixedSourceAndRange( obj_gamma, obj_delta, [ 5 ] );; gap> IsWellDefined( u ); true gap> IsEqualForObjects( Source(u), obj_gamma ) and IsEqualForObjects( Range(u), obj_delta ); true gap> u := RandomMorphismWithFixedSourceAndRange( obj_gamma, obj_delta, 5 );; gap> IsWellDefined( u ); true gap> IsEqualForObjects( Source(u), obj_gamma ) and IsEqualForObjects( Range(u), obj_delta ); true gap> IsWellDefined( RandomMorphism( freyd, 5 ) ); true gap> IsWellDefined( RandomMorphism( freyd, [[[5],[5],[5]],[[5],[5],[5]],[1]] ) ); true gap> f := FreydCategoryMorphism( obj_gamma, gamma, obj_gamma );; gap> witness := MorphismWitness( f );; gap> g := FreydCategoryMorphism( obj_gamma, ZeroMorphism( obj2, obj2 ), obj_gamma );; gap> IsCongruentForMorphisms( f, g );; gap> c := PreCompose( f, f );; gap> s := g + g;; gap> a := CategoryOfRowsMorphism( obj1, HomalgMatrix( [ [ 2 ] ], 1, 1, R ), obj1 );; gap> Z2 := FreydCategoryObject( a );; gap> id := IdentityMorphism( Z2 );; gap> z := id + id + id;; gap> d := DirectSumFunctorial( [ z, z, z ] );; gap> pr2 := ProjectionInFactorOfDirectSum( [ Z2, Z2, Z2 ], 2 );; gap> pr3 := ProjectionInFactorOfDirectSum( [ Z2, Z2, Z2 ], 3 );; gap> UniversalMorphismIntoDirectSum( [ pr3, pr2 ] );; gap> inj1 := InjectionOfCofactorOfDirectSum( [ Z2, Z2, Z2 ], 1 );; gap> inj2 := InjectionOfCofactorOfDirectSum( [ Z2, Z2, Z2 ], 2 );; gap> UniversalMorphismFromDirectSum( [ inj2, inj1 ] );; gap> ZFree := obj1/freyd;; gap> id := IdentityMorphism( ZFree );; gap> z := id + id;; gap> CokernelProjection( z );; gap> CokernelColift( z, CokernelProjection( z ) );; gap> UniversalMorphismFromZeroObjectWithGivenZeroObject( obj_gamma, ZeroObject( freyd ) );; gap> MultiplyWithElementOfCommutativeRingForMorphisms( 2 / R, f );; gap> S := HomalgFieldOfRationalsInSingular() * "x,y,z";; gap> Rows_S := CategoryOfRows( S );; gap> S3 := CategoryOfRowsObject( 3, Rows_S );; gap> S1 := CategoryOfRowsObject( 1, Rows_S );; gap> mor := CategoryOfRowsMorphism( S3, HomalgMatrix( "[x,y,z]", 3, 1, S ), S1 );; gap> k := FreydCategoryObject( mor );; gap> w := EpimorphismFromSomeProjectiveObjectForKernelObject( UniversalMorphismIntoZeroObject( k ) );; gap> k := KernelEmbedding( w );; gap> ColiftAlongEpimorphism( CokernelProjection( k ), CokernelProjection( k ) );; gap> ## Homomorphism structures > Z4 := FreydCategoryObject( AsCategoryOfRowsMorphism( HomalgMatrix( "[4]", 1, 1, R ), cat ) );; gap> Z3 := FreydCategoryObject( AsCategoryOfRowsMorphism( HomalgMatrix( "[3]", 1, 1, R ), cat ) );; gap> HomomorphismStructureOnObjects( Z4, Z2 );; gap> HomomorphismStructureOnObjects( Z4, Z4 );; gap> HomomorphismStructureOnObjects( Z2, Z4 );; gap> HomomorphismStructureOnObjects( Z3, Z4 );; gap> HomomorphismStructureOnMorphisms( IdentityMorphism( DirectSum( Z4, Z2, Z3 ) ), -IdentityMorphism( DirectSum( Z4, Z3 ) ) );; gap> ## Lifts > S2 := CategoryOfRowsObject( 2, Rows_S );; gap> S4 := CategoryOfRowsObject( 4, Rows_S );; gap> S1_freyd := AsFreydCategoryObject( S1 );; gap> S2_freyd := AsFreydCategoryObject( S2 );; gap> S3_freyd := AsFreydCategoryObject( S3 );; gap> S4_freyd := AsFreydCategoryObject( S4 );; gap> lift := FreydCategoryMorphism( S1_freyd, CategoryOfRowsMorphism( S1, HomalgMatrix( "[x]", 1, 1, S ), S1 ), S1_freyd );; gap> gamma := FreydCategoryMorphism( S1_freyd, CategoryOfRowsMorphism( S1, HomalgMatrix( "[y]", 1,1, S ), S1 ), S1_freyd );; gap> alpha := PreCompose( lift, gamma );; gap> IsLiftable( alpha, gamma ); true gap> Lift( alpha, gamma );; gap> IsColiftable( lift, alpha ); true gap> IsCongruentForMorphisms( PreCompose( lift, Colift( lift, alpha ) ), alpha ); true gap> lift := FreydCategoryMorphism( S2_freyd, CategoryOfRowsMorphism( S2, HomalgMatrix( "[x,y,z,x^2,1,z+1]", 2, 3, S ), S3 ), S3_freyd );; gap> gamma := FreydCategoryMorphism( S3_freyd, CategoryOfRowsMorphism( S3, HomalgMatrix( "[x,y,z,z+1, x^2,y^2,z^2,z^2+1, x^3,y^3,z^3,z^3+1]", 3,4, S ), S4 ), S4_freyd );; gap> alpha := PreCompose( lift, gamma );; gap> Lift( alpha, gamma );; gap> Colift( lift, alpha );; gap> IsCongruentForMorphisms( PreCompose( lift, Colift( lift, alpha ) ), alpha );; gap> interpretation := InterpretMorphismAsMorphismFromDistinguishedObjectToHomomorphismStructure( gamma );; gap> IsCongruentForMorphisms( gamma, > InterpretMorphismFromDistinguishedObjectToHomomorphismStructureAsMorphism( Source( gamma ), Range( gamma ), interpretation ) );; gap> ## Opposite > HomomorphismStructureOnObjects( Opposite( Z4 ), Opposite( Z2 ) );; gap> HomomorphismStructureOnObjects( Z2, Z4 );; gap> interpretation := InterpretMorphismAsMorphismFromDistinguishedObjectToHomomorphismStructure( Opposite( gamma ) );; gap> IsCongruentForMorphisms( Opposite( gamma ), > InterpretMorphismFromDistinguishedObjectToHomomorphismStructureAsMorphism( Source( Opposite( gamma ) ), Range( Opposite( gamma ) ), interpretation ) ); true
gap> R := HomalgRingOfIntegers();; gap> cat := CategoryOfColumns( R );; gap> obj1 := CategoryOfColumnsObject( 1, cat );; gap> obj2 := CategoryOfColumnsObject( 2, cat );; gap> gamma := CategoryOfColumnsMorphism( obj2, HomalgMatrix( [ [ 1, 1 ], [ 1, 1 ] ], 2, 2, R ), obj2 );; gap> ## Freyd categories > freyd := FreydCategory( cat );; gap> IsAbelianCategory( freyd ); true gap> obj_gamma := FreydCategoryObject( gamma );; gap> f := FreydCategoryMorphism( obj_gamma, gamma, obj_gamma );; gap> witness := MorphismWitness( f );; gap> g := FreydCategoryMorphism( obj_gamma, ZeroMorphism( obj2, obj2 ), obj_gamma );; gap> IsCongruentForMorphisms( f, g );; gap> c := PreCompose( f, f );; gap> s := g + g;; gap> a := CategoryOfColumnsMorphism( obj1, HomalgMatrix( [ [ 2 ] ], 1, 1, R ), obj1 );; gap> Z2 := FreydCategoryObject( a );; gap> id := IdentityMorphism( Z2 );; gap> z := id + id + id;; gap> d := DirectSumFunctorial( [ z, z, z ] );; gap> pr2 := ProjectionInFactorOfDirectSum( [ Z2, Z2, Z2 ], 2 );; gap> pr3 := ProjectionInFactorOfDirectSum( [ Z2, Z2, Z2 ], 3 );; gap> UniversalMorphismIntoDirectSum( [ pr3, pr2 ] );; gap> inj1 := InjectionOfCofactorOfDirectSum( [ Z2, Z2, Z2 ], 1 );; gap> inj2 := InjectionOfCofactorOfDirectSum( [ Z2, Z2, Z2 ], 2 );; gap> UniversalMorphismFromDirectSum( [ inj2, inj1 ] );; gap> ZFree := AsFreydCategoryObject( obj1 );; gap> id := IdentityMorphism( ZFree );; gap> z := id + id;; gap> CokernelProjection( z );; gap> CokernelColift( z, CokernelProjection( z ) );; gap> S := HomalgFieldOfRationalsInSingular() * "x,y,z";; gap> Cols_S := CategoryOfColumns( S );; gap> S3 := CategoryOfColumnsObject( 3, Cols_S );; gap> S1 := CategoryOfColumnsObject( 1, Cols_S );; gap> mor := CategoryOfColumnsMorphism( S3, HomalgMatrix( "[x,y,z]", 1, 3, S ), S1 );; gap> k := FreydCategoryObject( mor );; gap> w := EpimorphismFromSomeProjectiveObjectForKernelObject( UniversalMorphismIntoZeroObject( k ) );; gap> k := KernelEmbedding( w );; gap> ColiftAlongEpimorphism( CokernelProjection( k ), CokernelProjection( k ) );; gap> ## Homomorphism structures > Z4 := FreydCategoryObject( AsCategoryOfColumnsMorphism( HomalgMatrix( "[4]", 1, 1, R ), cat ) );; gap> Z3 := FreydCategoryObject( AsCategoryOfColumnsMorphism( HomalgMatrix( "[3]", 1, 1, R ), cat ) );; gap> HomomorphismStructureOnObjects( Z4, Z2 );; gap> HomomorphismStructureOnObjects( Z4, Z4 );; gap> HomomorphismStructureOnObjects( Z2, Z4 );; gap> HomomorphismStructureOnObjects( Z3, Z4 );; gap> HomomorphismStructureOnMorphisms( IdentityMorphism( DirectSum( Z4, Z2, Z3 ) ), -IdentityMorphism( DirectSum( Z4, Z3 ) ) );; gap> ## Lifts > S2 := CategoryOfColumnsObject( 2, Cols_S );; gap> S4 := CategoryOfColumnsObject( 4, Cols_S );; gap> S1_freyd := AsFreydCategoryObject( S1 );; gap> S2_freyd := AsFreydCategoryObject( S2 );; gap> S3_freyd := AsFreydCategoryObject( S3 );; gap> S4_freyd := AsFreydCategoryObject( S4 );; gap> lift := FreydCategoryMorphism( S1_freyd, CategoryOfColumnsMorphism( S1, HomalgMatrix( "[x]", 1, 1, S ), S1 ), S1_freyd );; gap> gamma := FreydCategoryMorphism( S1_freyd, CategoryOfColumnsMorphism( S1, HomalgMatrix( "[y]", 1,1, S ), S1 ), S1_freyd );; gap> alpha := PreCompose( lift, gamma );; gap> Lift( alpha, gamma );; gap> Colift( lift, alpha );; gap> IsCongruentForMorphisms( PreCompose( lift, Colift( lift, alpha ) ), alpha );; gap> lift := FreydCategoryMorphism( S2_freyd, CategoryOfColumnsMorphism( S2, HomalgMatrix( "[x,y,z,x^2,1,z+1]", 3, 2, S ), S3 ), S3_freyd );; gap> gamma := FreydCategoryMorphism( S3_freyd, CategoryOfColumnsMorphism( S3, HomalgMatrix( "[x,y,z,z+1, x^2,y^2,z^2,z^2+1, x^3,y^3,z^3,z^3+1]", 4,3, S ), S4 ), S4_freyd );; gap> alpha := PreCompose( lift, gamma );; gap> Lift( alpha, gamma );; gap> Colift( lift, alpha );; gap> IsCongruentForMorphisms( PreCompose( lift, Colift( lift, alpha ) ), alpha );; gap> interpretation := InterpretMorphismAsMorphismFromDistinguishedObjectToHomomorphismStructure( gamma );; gap> IsCongruentForMorphisms( gamma, > InterpretMorphismFromDistinguishedObjectToHomomorphismStructureAsMorphism( Source( gamma ), Range( gamma ), interpretation ) );; gap> ## Opposite > HomomorphismStructureOnObjects( Opposite( Z4 ), Opposite( Z2 ) );; gap> HomomorphismStructureOnObjects( Z2, Z4 );; gap> interpretation := InterpretMorphismAsMorphismFromDistinguishedObjectToHomomorphismStructure( Opposite( gamma ) );; gap> IsCongruentForMorphisms( Opposite( gamma ), > InterpretMorphismFromDistinguishedObjectToHomomorphismStructureAsMorphism( Source( Opposite( gamma ) ), Range( Opposite( gamma ) ), interpretation ) ); true
gap> LoadPackage( "FreydCategoriesForCAP", false ); true gap> ZZZ := HomalgRingOfIntegers( );; gap> rows := CategoryOfRows( ZZZ );; gap> co_freyd := CoFreydCategory( rows ); CoFreyd( Rows( Z ) ) gap> rows_obj := CategoryOfRowsObject( rows, 1 );; # ZZZ^1 gap> co_freyd_obj := AsCoFreydCategoryObject( rows_obj );; # ZZZ^1 -> 0 gap> rows_mor := CategoryOfRowsMorphism( rows, rows_obj, HomalgMatrix( [ 2 ], 1, 1, ZZZ ), rows_obj );; # ZZZ^1 --2-> ZZZ^1 gap> co_freyd_mor := CoFreydCategoryMorphism( co_freyd_obj, rows_mor, co_freyd_obj );; gap> IsWellDefined( co_freyd_mor ); true gap> Display( KernelObject( co_freyd_mor ) ); -------------------------------- CoRelation morphism: -------------------------------- Source: A row module over Z of rank 1 Matrix: [ [ 2 ] ] Range: A row module over Z of rank 1 A morphism in Rows( Z ) -------------------------------- General description: -------------------------------- An object in CoFreyd( Rows( Z ) ) gap> Display( UnderlyingMorphism( KernelEmbedding( co_freyd_mor ) ) ); Source: A row module over Z of rank 1 Matrix: [ [ 1 ] ] Range: A row module over Z of rank 1 An identity morphism in Rows( Z ) gap> Display( CokernelObject( co_freyd_mor ) ); -------------------------------- CoRelation morphism: -------------------------------- Source: A row module over Z of rank 0 Matrix: (an empty 0 x 0 matrix) Range: A row module over Z of rank 0 A morphism in Rows( Z ) -------------------------------- General description: -------------------------------- An object in CoFreyd( Rows( Z ) ) gap> Display( UnderlyingMorphism( CokernelProjection( co_freyd_mor ) ) ); Source: A row module over Z of rank 1 Matrix: (an empty 1 x 0 matrix) Range: A row module over Z of rank 0 A morphism in Rows( Z )
gap> R := HomalgFieldOfRationalsInSingular() * "x,y,z";; gap> RowsR := CategoryOfRows( R );; gap> m := AsCategoryOfRowsMorphism( > HomalgMatrix( "[[x],[y],[z]]", 3, 1, R ), RowsR > );; gap> mu := AsCokernelImageClosureMorphism( m );; gap> C := CokernelObject( mu );; gap> C2 := AsFinitelyPresentedCokernelImageClosureObject( m );; gap> IsEqualForObjects( C, C2 ); true gap> n := AsCategoryOfRowsMorphism( > HomalgMatrix( "[[x,y],[y^2,z]]", 2, 2, R ), RowsR > );; gap> nu := AsCokernelImageClosureMorphism( n );; gap> nu2 := PreCompose( nu, nu );; gap> IsWellDefined( nu2 ); true gap> IsCongruentForMorphisms( nu, nu2 ); false gap> nu + nu;; gap> nu2 - nu;; gap> cat := CapCategory( nu );; gap> ZeroObject( cat );; gap> ZeroMorphism( Source( nu ), Source( mu ) );; gap> UniversalMorphismIntoZeroObject( Source( nu ) );; gap> UniversalMorphismFromZeroObject( Source( nu ) );; gap> S := Source( mu );; gap> DirectSum( [S, S, S ] );; gap> DirectSumFunctorial( [ nu2, nu ] );; gap> UniversalMorphismIntoDirectSum( [ nu, nu ] );; gap> UniversalMorphismFromDirectSum( [ nu, nu ] );; gap> ProjectionInFactorOfDirectSum( [ S, S, S ], 2 );; gap> InjectionOfCofactorOfDirectSum( [ S, S, S, S ], 4 );; gap> CokernelColift( nu, CokernelProjection( nu ) );; gap> IsCongruentForMorphisms( nu, PreCompose( CoastrictionToImage( nu ), ImageEmbedding( nu ) ) ); true gap> u := UniversalMorphismFromImage( nu, [ nu, IdentityMorphism( Range( nu ) ) ] );; gap> IsWellDefined( u ); true gap> IsCongruentForMorphisms( nu, PreCompose( CoastrictionToImage( nu ), u ) ); true gap> IsCongruentForMorphisms( u, ImageEmbedding( nu ) ); true gap> kernel := KernelObject( mu );; gap> emb := KernelEmbedding( mu );; gap> p := PreCompose( EpimorphismFromSomeProjectiveObject( kernel ), KernelEmbedding( mu ) );; gap> KernelLift( mu, p );; gap> LiftAlongMonomorphism( emb, p );; gap> I_to_A := FunctorCokernelImageClosureToFreydCategory( RowsR );; gap> A_to_I := FunctorFreydCategoryToCokernelImageClosure( RowsR );; gap> ApplyFunctor( I_to_A, kernel );; gap> ApplyFunctor( A_to_I, ApplyFunctor( I_to_A, kernel ) );; gap> nu := NaturalIsomorphismFromIdentityToFinitePresentationOfCokernelImageClosureObject( RowsR );; gap> mu := NaturalIsomorphismFromFinitePresentationOfCokernelImageClosureObjectToIdentity( RowsR );; gap> IsCongruentForMorphisms( > IdentityMorphism( kernel ), > PreCompose( ApplyNaturalTransformation( nu, kernel ), ApplyNaturalTransformation( mu, kernel ) ) > ); true
gap> R := HomalgFieldOfRationalsInSingular() * "x,y,z";; gap> ColsR := CategoryOfColumns( R );; gap> m := AsCategoryOfColumnsMorphism( > HomalgMatrix( "[[x],[y],[z]]", 1, 3, R ), ColsR > );; gap> mu := AsCokernelImageClosureMorphism( m );; gap> C := CokernelObject( mu );; gap> C2 := AsFinitelyPresentedCokernelImageClosureObject( m );; gap> IsEqualForObjects( C, C2 ); true gap> n := AsCategoryOfColumnsMorphism( > HomalgMatrix( "[[x,y],[y^2,z]]", 2, 2, R ), ColsR > );; gap> nu := AsCokernelImageClosureMorphism( n );; gap> nu2 := PreCompose( nu, nu );; gap> IsWellDefined( nu2 ); true gap> IsCongruentForMorphisms( nu, nu2 ); false gap> nu + nu;; gap> nu2 - nu;; gap> cat := CapCategory( nu );; gap> ZeroObject( cat );; gap> ZeroMorphism( Source( nu ), Source( mu ) );; gap> UniversalMorphismIntoZeroObject( Source( nu ) );; gap> UniversalMorphismFromZeroObject( Source( nu ) );; gap> S := Source( mu );; gap> DirectSum( [S, S, S ] );; gap> DirectSumFunctorial( [ nu2, nu ] );; gap> UniversalMorphismIntoDirectSum( [ nu, nu ] );; gap> UniversalMorphismFromDirectSum( [ nu, nu ] );; gap> ProjectionInFactorOfDirectSum( [ S, S, S ], 2 );; gap> InjectionOfCofactorOfDirectSum( [ S, S, S, S ], 4 );; gap> CokernelColift( nu, CokernelProjection( nu ) );; gap> IsCongruentForMorphisms( nu, PreCompose( CoastrictionToImage( nu ), ImageEmbedding( nu ) ) ); true gap> u := UniversalMorphismFromImage( nu, [ nu, IdentityMorphism( Range( nu ) ) ] );; gap> IsWellDefined( u ); true gap> IsCongruentForMorphisms( nu, PreCompose( CoastrictionToImage( nu ), u ) ); true gap> IsCongruentForMorphisms( u, ImageEmbedding( nu ) ); true gap> kernel := KernelObject( mu );; gap> emb := KernelEmbedding( mu );; gap> p := PreCompose( EpimorphismFromSomeProjectiveObject( kernel ), KernelEmbedding( mu ) );; gap> KernelLift( mu, p );; gap> LiftAlongMonomorphism( emb, p );; gap> I_to_A := FunctorCokernelImageClosureToFreydCategory( ColsR );; gap> A_to_I := FunctorFreydCategoryToCokernelImageClosure( ColsR );; gap> ApplyFunctor( I_to_A, kernel );; gap> ApplyFunctor( A_to_I, ApplyFunctor( I_to_A, kernel ) );; gap> nu := NaturalIsomorphismFromIdentityToFinitePresentationOfCokernelImageClosureObject( ColsR );; gap> mu := NaturalIsomorphismFromFinitePresentationOfCokernelImageClosureObjectToIdentity( ColsR );; gap> IsCongruentForMorphisms( > IdentityMorphism( kernel ), > PreCompose( ApplyNaturalTransformation( nu, kernel ), ApplyNaturalTransformation( mu, kernel ) ) > ); true
gap> R := HomalgRingOfIntegers();; gap> RowsR := CategoryOfRows( R );; gap> one := AsCategoryOfRowsMorphism( HomalgMatrix( [ [ 1 ] ], 1, 1, R ), RowsR );; gap> two := AsCategoryOfRowsMorphism( HomalgMatrix( [ [ 2 ] ], 1, 1, R ), RowsR );; gap> four := AsCategoryOfRowsMorphism( HomalgMatrix( [ [ 4 ] ], 1, 1, R ), RowsR );; gap> source := AdelmanCategoryObject( two, two );; gap> range := AdelmanCategoryObject( two, four );; gap> mor := AdelmanCategoryMorphism( source, one, range );; gap> IsZeroForMorphisms( mor ); false gap> emb := EmbeddingFunctorIntoFreydCategory( RowsR );; gap> ind := AdelmanCategoryFunctorInducedByUniversalProperty( emb );; gap> IsZeroForMorphisms( ApplyFunctor( ind, mor ) ); true gap> M := FreydCategoryObject( AsCategoryOfRowsMorphism( HomalgMatrix( [ [ 2, 2, 2 ], [ 4, 4, 6 ] ], 2, 3, R ), RowsR ) );; gap> as_tensor := EmbeddingFunctorOfFreydCategoryIntoAdelmanCategory( RowsR );; gap> Mt := ApplyFunctor( as_tensor, M );; gap> lsat := LeftSatelliteAsEndofunctorOfAdelmanCategory( RowsR );; gap> rsat := RightSatelliteAsEndofunctorOfAdelmanCategory( RowsR );; gap> torsion := ApplyFunctor( ind, ( ApplyFunctor( rsat, ApplyFunctor( lsat, Mt ) ) ) );; gap> unit := UnitOfSatelliteAdjunctionOfAdelmanCategory( RowsR );; gap> IsZeroForMorphisms( ApplyNaturalTransformation( unit, Mt ) ); true gap> counit := CounitOfSatelliteAdjunctionOfAdelmanCategory( RowsR );; gap> t := ApplyNaturalTransformation( counit, Mt );;
The sequence of modules computed via satellites behaves in a way that is not understood in the case when the ring is not Auslander regular.
gap> R := HomalgFieldOfRationalsInSingular() * "x,y";; gap> R := R/"x*y"/"x^2";; gap> RowsR := CategoryOfRows( R );; gap> Freyd := FreydCategory( RowsR );; gap> mat := HomalgMatrix( "[x,y]", 1, 2, R );; gap> M := mat/Freyd;; gap> mu1 := GradeFiltrationNthMonomorphism( M, 1 );; gap> IsMonomorphism( mu1 ); true gap> IsZero( mu1 ); false gap> IsEpimorphism( mu1 ); false gap> mu2 := GradeFiltrationNthMonomorphism( M, 2 );; gap> IsIsomorphism( mu2 ); true gap> IsZero( mu2 ); false gap> mu3 := GradeFiltrationNthMonomorphism( M, 3 );; gap> IsIsomorphism( mu3 ); true gap> IsZero( mu3 ); false gap> mu4 := GradeFiltrationNthMonomorphism( M, 4 );; gap> IsMonomorphism( mu4 ); false gap> IsEpimorphism( mu4 ); true gap> IsZero( mu4 ); false
gap> Qxyz := HomalgFieldOfRationalsInDefaultCAS( ) * "x,y,z";; gap> wmat := HomalgMatrix( "[ \ > x*y, y*z, z, 0, 0, \ > x^3*z,x^2*z^2,0, x*z^2, -z^2, \ > x^4, x^3*z, 0, x^2*z, -x*z, \ > 0, 0, x*y, -y^2, x^2-1,\ > 0, 0, x^2*z, -x*y*z, y*z, \ > 0, 0, x^2*y-x^2,-x*y^2+x*y,y^2-y \ > ]", 6, 5, Qxyz );; gap> RowsR := CategoryOfRows( Qxyz );; gap> Freyd := FreydCategory( RowsR );; gap> Adel := AdelmanCategory( RowsR );; gap> M := wmat/Freyd;;
We compute the grade sequence of functors (it turns out that on the level of functors, we don't get monos)
gap> M_tor := M/Adel;; gap> Mu1 := GradeFiltrationNthNaturalTransformationComponent( M_tor, 1 );; gap> IsZero( Mu1 ); false gap> IsMonomorphism( Mu1 ); true gap> Mu2 := GradeFiltrationNthNaturalTransformationComponent( M_tor, 2 );; gap> IsZero( Mu2 ); false gap> IsMonomorphism( Mu2 ); false gap> Mu3 := GradeFiltrationNthNaturalTransformationComponent( M_tor, 3 );; gap> IsZero( Mu3 ); false gap> IsMonomorphism( Mu3 ); false gap> Mu4 := GradeFiltrationNthNaturalTransformationComponent( M_tor, 4 );; gap> IsZero( Mu4 ); true
We compute the grade sequence of modules (here, we really get monos and thus a filtration)
gap> mu1 := GradeFiltrationNthMonomorphism( M, 1 );; gap> IsZero( mu1 ); false gap> IsMonomorphism( mu1 ); true gap> mu2 := GradeFiltrationNthMonomorphism( M, 2 );; gap> IsZero( mu2 ); false gap> IsMonomorphism( mu2 ); true gap> mu3 := GradeFiltrationNthMonomorphism( M, 3 );; gap> IsZero( mu3 ); false gap> IsMonomorphism( mu3 ); true gap> mu4 := GradeFiltrationNthMonomorphism( M, 4 );; gap> IsZero( mu4 ); true
gap> R := HomalgFieldOfRationalsInSingular() * "x,y,z";; gap> Rows_R := CategoryOfRows( R );; gap> R1 := CategoryOfRowsObject( 1, Rows_R );; gap> R3 := CategoryOfRowsObject( 3, Rows_R );; gap> alpha := CategoryOfRowsMorphism( R3, HomalgMatrix( "[x,y,z]", 3, 1, R ), R1 );; gap> M := FreydCategoryObject( alpha );; gap> c0 := CovariantExtAsFreydCategoryObject( M, 0 );; gap> c1 := CovariantExtAsFreydCategoryObject( M, 1 );; gap> c2 := CovariantExtAsFreydCategoryObject( M, 2 );; gap> IsZeroForObjects( HomomorphismStructureOnObjects( c0, c2 ) ); # = Ext^2( M, M ) false
gap> R := HomalgFieldOfRationalsInSingular() * "x,y,z";; gap> Cols_R := CategoryOfColumns( R );; gap> R1 := CategoryOfColumnsObject( 1, Cols_R );; gap> R3 := CategoryOfColumnsObject( 3, Cols_R );; gap> alpha := CategoryOfColumnsMorphism( R3, HomalgMatrix( "[x,y,z]", 1, 3, R ), R1 );; gap> M := FreydCategoryObject( alpha );; gap> c0 := CovariantExtAsFreydCategoryObject( M, 0 );; gap> c1 := CovariantExtAsFreydCategoryObject( M, 1 );; gap> c2 := CovariantExtAsFreydCategoryObject( M, 2 );; gap> IsZeroForObjects( HomomorphismStructureOnObjects( c0, c2 ) ); # = Ext^2( M, M ) false
#@if IsPackageMarkedForLoading( "FinSetsForCAP", ">= 2023.07-03" ) gap> #Incidence matrix of our proset > K := [ [1, 1, 1], [0, 1, 1], [0, 1, 1] ];; gap> #Construction of a tower of categories > CP_K := ProSetAsCategory( K );; gap> ZZZ := HomalgRingOfIntegers( );; gap> ZP_K := LinearClosure( ZZZ, CP_K, ReturnTrue );; gap> RowsP_K := AdditiveClosure( ZP_K );; gap> a := ProSetAsCategoryObject( 1, CP_K );; gap> b := ProSetAsCategoryObject( 2, CP_K );; gap> c := ProSetAsCategoryObject( 3, CP_K );; gap> #Three random objects in the additive closure > #Such that there exists morphisms from A->B and B->C: > rand_coef := List( [ 1 .. 5 ], i -> Random( [ 2 .. 20 ] ) );; gap> A1 := List( [ 1 .. rand_coef[ 1 ] ], i -> a );; gap> A2 := List( [ 1 .. rand_coef[ 2 ] ], i -> b );; gap> A := Concatenation( A1, A2 );; gap> B1 := List( [ 1 .. rand_coef[ 3 ] ], i -> b );; gap> B2 := List( [ 1 .. rand_coef[ 4 ] ], i -> c );; gap> B := Concatenation( B1, B2 );; gap> C := List([ 1 .. rand_coef[ 5 ] ], i -> c);; gap> #A random lifting problem over ZP_K > MA_B := List( [ 1 .. rand_coef[ 1 ] + rand_coef[ 2 ] ], i -> > List( [ 1 .. rand_coef[ 3 ] + rand_coef[ 4 ] ], j -> > LinearClosureMorphism( LinearClosureObject( A[i], ZP_K ), [Random( [ -20 .. 20 ] )], [ProSetAsCategoryMorphism( A[i], B[j] )], LinearClosureObject( B[j], ZP_K ) ) > ) > );; gap> alpha := MA_B/RowsP_K;; gap> MB_C := List( [ 1 .. rand_coef[ 3 ] + rand_coef[ 4 ] ], i -> > List( [ 1 .. rand_coef[ 5 ] ], j -> > LinearClosureMorphism( LinearClosureObject( B[i], ZP_K ), [Random( [ -20 .. 20 ] )], [ProSetAsCategoryMorphism( B[i], C[j] )], LinearClosureObject( C[j], ZP_K ) ) > ) > );; gap> beta := MB_C/RowsP_K;; gap> gamma := PreCompose( alpha, beta );; gap> lift := Lift( gamma, beta );; gap> PreCompose(lift, beta) = gamma; true #@fi
gap> R := HomalgRingOfIntegers();; gap> rows := CategoryOfRows( R );; gap> adelman := AdelmanCategory( rows );; gap> rowobj := CategoryOfRowsObject( 1, rows );; gap> alpha := ProjectionInFactorOfDirectSum( [ rowobj, rowobj ], 1 );; gap> alpha := AsAdelmanCategoryMorphism( alpha );; gap> obj := CokernelObject( alpha );; gap> IsBijectiveObject( obj ); true gap> beta := 2 * IdentityMorphism( rowobj );; gap> beta := AsAdelmanCategoryMorphism( beta );; gap> obj1 := CokernelObject( beta );; gap> obj2 := KernelObject( beta );; gap> obj3 := ImageObject( beta );; gap> obj4 := HomologyObject( beta, beta );; gap> IsBijectiveObject( obj1 ); false gap> IsInjective( obj1 ); true gap> ProjectiveDimension( obj1 ); 2 gap> IsBijectiveObject( obj2 ); false gap> IsProjective( obj2 ); true gap> InjectiveDimension( obj2 ); 2 gap> ProjectiveDimension( obj3 ); 1 gap> InjectiveDimension( obj3 ); 1 gap> ProjectiveDimension( obj4 ); 2 gap> InjectiveDimension( obj4 ); 2
#@if IsPackageMarkedForLoading( "FinSetsForCAP", ">= 2023.07-03" ) gap> K := [ [1, 1, 1], [0, 1, 1], [0, 1, 1] ];; gap> L := [ [1, 1, 0], [0, 1, 1], [0, 0, 1] ];; gap> P_K := ProSetAsCategory(K);; gap> #ProSetAsCategory(L); gap> a := 1/P_K;; gap> b := ProSetAsCategoryObject(2, P_K);; gap> c := ProSetAsCategoryObject(3, P_K);; gap> d := ProSetAsCategoryObject(4, P_K);; gap> delta := ProSetAsCategoryMorphism(b, a);; gap> IsWellDefined(a); true gap> IsWellDefined(d); false gap> IsWellDefined(delta); false gap> alpha := ProSetAsCategoryMorphism(a, b);; gap> beta := ProSetAsCategoryMorphism(b, c);; gap> gamma := ProSetAsCategoryMorphism(a, c);; gap> gamma = PreCompose(alpha, beta); true gap> id_a := IdentityMorphism(a);; gap> IsWellDefined(Inverse(alpha)); false gap> beta*Inverse(beta) = IdentityMorphism(b); true gap> alpha = Lift(gamma, beta); true gap> IsLiftable(beta, gamma); false gap> Colift(alpha, gamma) = beta; true gap> alpha = HomStructure(a, b, HomStructure(alpha)); true #@fi
gap> F := HomalgRingOfIntegers( 3 );; gap> vec := CategoryOfRows( F );; gap> rel := RelCategory( vec );; gap> A := 1/vec/rel;; gap> id := IdentityMorphism( A );; gap> IsWellDefined( id ); true gap> alpha := HomalgMatrix( "[ 1, 2 ]", 2, 1, F )/vec;; gap> alpha_rel := alpha/rel;; gap> alpha_rel_inv := rel/alpha;; gap> beta := PreCompose( alpha_rel_inv, alpha_rel );; gap> IsCongruentForMorphisms( beta, id ); true gap> IsEqualForMorphisms( beta, id ); false gap> R := HomalgFieldOfRationalsInSingular() * "t";; gap> t := IndeterminatesOfPolynomialRing( R )[1];; gap> cocycle := function( a, b, c ) local e; e := CoastrictionToImage( UniversalMorphismIntoDirectSum( [ ReversedArrow( c ), Arrow( c ) ] ) ); return t^RankOfObject( KernelObject( e ) ); end;; #@if IsPackageMarkedForLoading( "FinSetsForCAP", ">= 2023.07-03" ) gap> T := TwistedLinearClosure( R, rel, cocycle );; gap> gamma := beta/T;; gap> delta := ZeroMorphism( 1/vec, 1/vec )/rel/T;; gap> IsZeroForMorphisms( 3*gamma - 3*gamma ); true gap> IsCongruentForMorphisms( delta, gamma ); false gap> beta := PreCompose( alpha_rel_inv/T, alpha_rel/T );; gap> IsZeroForMorphisms( beta - t * IdentityMorphism( Range( alpha_rel/T ) ) ); true gap> IsZeroForMorphisms( ( gamma * delta ) * gamma - gamma * ( delta * gamma ) ); true #@fi
generated by GAPDoc2HTML