gap> LoadPackage( "AdditiveClosuresForCAP", false ); true gap> Q := HomalgFieldOfRationals();; gap> R := RingAsCategory( Q ); RingAsCategory( Q ) gap> A := AdditiveClosure( R ); AdditiveClosure( RingAsCategory( Q ) ) gap> u := TensorUnit( A ); <An object in AdditiveClosure( RingAsCategory( Q ) )\ defined by 1 underlying objects> gap> mor1 := [ [ 1 / R, 2 / R ] ] / A; <A morphism in AdditiveClosure( RingAsCategory( Q ) )\ defined by a 1 x 2 matrix of underlying morphisms> gap> mor2 := [ [ 3 / R, 4 / R ] ] / A; <A morphism in AdditiveClosure( RingAsCategory( Q ) )\ defined by a 1 x 2 matrix of underlying morphisms> gap> T := TensorProduct( mor1, mor2 ); <A morphism in AdditiveClosure( RingAsCategory( Q ) )\ defined by a 1 x 4 matrix of underlying morphisms> gap> Display( T ); A 1 x 4 matrix with entries in RingAsCategory( Q ) [1,1]: <3> [1,2]: <4> [1,3]: <6> [1,4]: <8> gap> Display( Range( T ) ); A formal direct sum consisting of 4 objects. * * * *
gap> LoadPackage( "AdditiveClosuresForCAP", false ); true gap> T := TerminalCategoryWithMultipleObjects( ); TerminalCategoryWithMultipleObjects( ) gap> A := "A" / T; <A zero object in TerminalCategoryWithMultipleObjects( )> gap> B := "B" / T; <A zero object in TerminalCategoryWithMultipleObjects( )> gap> AT := AdditiveClosure( T ); AdditiveClosure( TerminalCategoryWithMultipleObjects( ) ) gap> ABAA := [ A, B, A, A ] / AT; <An object in AdditiveClosure( TerminalCategoryWithMultipleObjects( ) )\ defined by 4 underlying objects> gap> BAB := [ B, A, B ] / AT; <An object in AdditiveClosure( TerminalCategoryWithMultipleObjects( ) )\ defined by 3 underlying objects> gap> AB := [ A, B ] / AT; <An object in AdditiveClosure( TerminalCategoryWithMultipleObjects( ) )\ defined by 2 underlying objects> gap> mor_AB := MorphismConstructor( A, "A -> B", B ); <A zero, isomorphism in TerminalCategoryWithMultipleObjects( )> gap> mor_BA := MorphismConstructor( B, "B -> A", A ); <A zero, isomorphism in TerminalCategoryWithMultipleObjects( )> gap> id_A := IdentityMorphism( A ); <A zero, identity morphism in TerminalCategoryWithMultipleObjects( )> gap> id_B := IdentityMorphism( B ); <A zero, identity morphism in TerminalCategoryWithMultipleObjects( )> gap> alpha := MorphismConstructor( ABAA, > [ [ mor_AB, id_A, mor_AB ], > [ id_B, mor_BA, id_B ], > [ mor_AB, id_A, mor_AB ], > [ mor_AB, id_A, mor_AB ] ], > BAB ); <A morphism in AdditiveClosure( TerminalCategoryWithMultipleObjects( ) )\ defined by a 4 x 3 matrix of underlying morphisms> gap> IsWellDefined( alpha ); true gap> alpha2 := TensorProduct( alpha, alpha ); <A morphism in AdditiveClosure( TerminalCategoryWithMultipleObjects( ) )\ defined by a 16 x 9 matrix of underlying morphisms> gap> IsWellDefined( alpha2 ); true gap> IsIsomorphism( alpha2 ); true gap> left := LeftUnitor( ABAA ); <A morphism in AdditiveClosure( TerminalCategoryWithMultipleObjects( ) )\ defined by a 4 x 4 matrix of underlying morphisms> gap> IsWellDefined( left ); true gap> left_inv := LeftUnitorInverse( ABAA ); <A morphism in AdditiveClosure( TerminalCategoryWithMultipleObjects( ) )\ defined by a 4 x 4 matrix of underlying morphisms> gap> PreCompose( left, left_inv ) = IdentityMorphism( Source( left ) ); true gap> PreCompose( left_inv, left ) = IdentityMorphism( Range( left ) ); true gap> right := RightUnitor( BAB ); <A morphism in AdditiveClosure( TerminalCategoryWithMultipleObjects( ) )\ defined by a 3 x 3 matrix of underlying morphisms> gap> IsWellDefined( right ); true gap> right_inv := RightUnitorInverse( BAB ); <A morphism in AdditiveClosure( TerminalCategoryWithMultipleObjects( ) )\ defined by a 3 x 3 matrix of underlying morphisms> gap> PreCompose( right, right_inv ) = IdentityMorphism( Source( right ) ); true gap> PreCompose( right_inv, right ) = IdentityMorphism( Range( right ) ); true gap> aslr := AssociatorLeftToRight( AB, BAB, AB ); <A morphism in AdditiveClosure( TerminalCategoryWithMultipleObjects( ) )\ defined by a 12 x 12 matrix of underlying morphisms> gap> IsWellDefined( aslr ); true gap> asrl := AssociatorRightToLeft( AB, BAB, AB ); <A morphism in AdditiveClosure( TerminalCategoryWithMultipleObjects( ) )\ defined by a 12 x 12 matrix of underlying morphisms> gap> PreCompose( aslr, asrl ) = IdentityMorphism( Source( aslr ) ); true gap> PreCompose( asrl, aslr ) = IdentityMorphism( Range( aslr ) ); true
gap> LoadPackage( "RingsForHomalg", false ); true gap> LoadPackage( "AdditiveClosuresForCAP", false ); true gap> R := HomalgRingOfIntegers();; gap> cat := CategoryOfRows( R );; gap> obj1 := CategoryOfRowsObject( 1, cat );; gap> obj2 := CategoryOfRowsObject( 2, cat );; gap> IsIsomorphicForObjects( obj1, obj2 ); false gap> IsIsomorphicForObjects( obj2, obj2 ); true gap> IsIsomorphism( SomeIsomorphismBetweenObjects( obj2, obj2 ) ); true 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> comp := PreCompose( alpha, beta );; gap> IsZeroForMorphisms( comp );; gap> zero := ZeroMorphism( obj1, obj2 );; gap> IsZeroForMorphisms( zero );; gap> ZeroObject( cat );; gap> UniversalMorphismIntoZeroObject( obj2 );; gap> UniversalMorphismFromZeroObject( obj1 );; gap> IsCongruentForMorphisms( > SumOfMorphisms( obj1, [ alpha, alpha, alpha ], obj2 ), > AdditionForMorphisms( alpha, AdditionForMorphisms( alpha, alpha ) ) > ); true gap> IsCongruentForMorphisms( > SumOfMorphisms( obj1, [ ], obj2 ), > ZeroMorphism( obj1, obj2 ) > ); true gap> DirectSum( obj1, obj2 );; gap> DirectSumFunctorial( [ alpha, beta, id ] );; gap> proj := ProjectionInFactorOfDirectSum( [ obj2, obj1, obj2 ], 2 );; gap> IsZeroForMorphisms( ComponentOfMorphismFromDirectSum( proj, [ obj2, obj1, obj2 ], 1 ) ); true gap> IsOne( ComponentOfMorphismFromDirectSum( proj, [ obj2, obj1, obj2 ], 2 ) ); true gap> IsZeroForMorphisms( ComponentOfMorphismFromDirectSum( proj, [ obj2, obj1, obj2 ], 3 ) ); true gap> IsZeroForMorphisms( ComponentOfMorphismFromCoproduct( proj, [ obj2, obj1, obj2 ], 1 ) ); true gap> IsOne( ComponentOfMorphismFromCoproduct( proj, [ obj2, obj1, obj2 ], 2 ) ); true gap> IsZeroForMorphisms( ComponentOfMorphismFromCoproduct( proj, [ obj2, obj1, obj2 ], 3 ) ); true gap> UniversalMorphismIntoDirectSum( [ alpha, alpha, alpha ] );; gap> inj := InjectionOfCofactorOfDirectSum( [ obj2, obj2, obj1 ], 2 );; gap> IsZeroForMorphisms( ComponentOfMorphismIntoDirectSum( inj, [ obj2, obj2, obj1 ], 1 ) ); true gap> IsOne( ComponentOfMorphismIntoDirectSum( inj, [ obj2, obj2, obj1 ], 2 ) ); true gap> IsZeroForMorphisms( ComponentOfMorphismIntoDirectSum( inj, [ obj2, obj2, obj1 ], 3 ) ); true gap> IsZeroForMorphisms( ComponentOfMorphismIntoDirectProduct( inj, [ obj2, obj2, obj1 ], 1 ) ); true gap> IsOne( ComponentOfMorphismIntoDirectProduct( inj, [ obj2, obj2, obj1 ], 2 ) ); true gap> IsZeroForMorphisms( ComponentOfMorphismIntoDirectProduct( inj, [ obj2, obj2, obj1 ], 3 ) ); true gap> gamma := CategoryOfRowsMorphism( obj2, HomalgMatrix( [ [ 1, 1 ], [ 1, 1 ] ], 2, 2, R ), obj2 );; gap> IsColiftable( beta, gamma ); true gap> IsColiftable( gamma, beta ); false gap> ProjectionInFirstFactorOfWeakBiFiberProduct( gamma, gamma );; gap> ProjectionInFirstFactorOfWeakBiFiberProduct( gamma, ZeroMorphism( Range( gamma ), Range( gamma ) ) );; gap> lift_arg_1 := PreCompose( ProjectionInFirstFactorOfWeakBiFiberProduct( gamma, gamma + gamma ), gamma );; gap> lift_arg_2 := gamma + gamma;; gap> IsLiftable( lift_arg_1, lift_arg_2 );; gap> Lift( lift_arg_1, lift_arg_2 );; gap> pi1 := ProjectionInFirstFactorOfWeakBiFiberProduct( alpha, beta );; gap> pi2 := ProjectionInSecondFactorOfWeakBiFiberProduct( alpha, beta );; gap> IsEqualForMorphisms( PreCompose( pi1, alpha ), PreCompose( pi2, beta ) );; gap> inj1 := InjectionOfFirstCofactorOfWeakBiPushout( gamma + gamma, gamma );; gap> inj2 := InjectionOfSecondCofactorOfWeakBiPushout( gamma + gamma, gamma );; gap> IsEqualForMorphisms( PreCompose( gamma + gamma, inj1 ), PreCompose( gamma, inj2 ) );; gap> WeakKernelLift( WeakCokernelProjection( gamma ), gamma );; gap> pi1 := InjectionOfFirstCofactorOfWeakBiPushout( alpha, alpha );; gap> pi2 := InjectionOfSecondCofactorOfWeakBiPushout( alpha, alpha );; gap> UniversalMorphismFromWeakBiPushout( alpha, alpha, pi1, pi2 );; 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> biased_w := CategoryOfRowsMorphism( S3, HomalgMatrix( "[x,0,0,0,x,0,0,0,x]", 3, 3, S ), S3 );; gap> biased_h := CategoryOfRowsMorphism( S3, HomalgMatrix( "[x*y, x*z, y^2]", 3, 3, S ), S3 );; gap> BiasedWeakFiberProduct( biased_h, biased_w );; gap> ProjectionOfBiasedWeakFiberProduct( biased_h, biased_w );; gap> IsCongruentForMorphisms( > PreCompose( UniversalMorphismIntoBiasedWeakFiberProduct( biased_h, biased_w, biased_h ), ProjectionOfBiasedWeakFiberProduct( biased_h, biased_w ) ), > biased_h > ); true gap> IsCongruentForMorphisms( > PreCompose( InjectionOfBiasedWeakPushout( biased_h, biased_w ), UniversalMorphismFromBiasedWeakPushout( biased_h, biased_w, biased_h )), > biased_h > ); true gap> ## Homomorphism structures > a := InterpretMorphismAsMorphismFromDistinguishedObjectToHomomorphismStructure( gamma );; gap> IsCongruentForMorphisms( InterpretMorphismFromDistinguishedObjectToHomomorphismStructureAsMorphism( Source( a ), Range( a ), InterpretMorphismAsMorphismFromDistinguishedObjectToHomomorphismStructure( a ) ), a );; gap> a := ZeroObjectFunctorial( cat );; gap> IsCongruentForMorphisms( InterpretMorphismFromDistinguishedObjectToHomomorphismStructureAsMorphism( Source( a ), Range( a ), InterpretMorphismAsMorphismFromDistinguishedObjectToHomomorphismStructure( a ) ), a );;
gap> R := HomalgRingOfIntegers();; gap> cat := CategoryOfColumns( R );; gap> obj1 := CategoryOfColumnsObject( 1, cat );; gap> obj2 := CategoryOfColumnsObject( 2, cat );; gap> id := IdentityMorphism( obj2 );; gap> alpha := CategoryOfColumnsMorphism( obj1, HomalgMatrix( [ [ 1 ], [ 2 ] ], 1, 2, R ), obj2 );; gap> beta := CategoryOfColumnsMorphism( obj2, HomalgMatrix( [ [ 1, 2 ], [ 3, 4 ] ], 2, 2, R ), obj2 );; gap> comp := PreCompose( alpha, beta );; gap> IsZeroForMorphisms( comp );; gap> zero := ZeroMorphism( obj1, obj2 );; gap> IsZeroForMorphisms( zero );; gap> ZeroObject( cat );; gap> UniversalMorphismIntoZeroObject( obj2 );; gap> UniversalMorphismFromZeroObject( obj1 );; gap> DirectSum( obj1, obj2 );; gap> DirectSumFunctorial( [ alpha, beta, id ] );; gap> proj := ProjectionInFactorOfDirectSum( [ obj2, obj1, obj2 ], 2 );; gap> IsZeroForMorphisms( ComponentOfMorphismFromDirectSum( proj, [ obj2, obj1, obj2 ], 1 ) ); true gap> IsOne( ComponentOfMorphismFromDirectSum( proj, [ obj2, obj1, obj2 ], 2 ) ); true gap> IsZeroForMorphisms( ComponentOfMorphismFromDirectSum( proj, [ obj2, obj1, obj2 ], 3 ) ); true gap> UniversalMorphismIntoDirectSum( [ alpha, alpha, alpha ] );; gap> inj := InjectionOfCofactorOfDirectSum( [ obj2, obj2, obj1 ], 2 );; gap> IsZeroForMorphisms( ComponentOfMorphismIntoDirectSum( inj, [ obj2, obj2, obj1 ], 1 ) ); true gap> IsOne( ComponentOfMorphismIntoDirectSum( inj, [ obj2, obj2, obj1 ], 2 ) ); true gap> IsZeroForMorphisms( ComponentOfMorphismIntoDirectSum( inj, [ obj2, obj2, obj1 ], 3 ) ); true gap> gamma := CategoryOfColumnsMorphism( obj2, HomalgMatrix( [ [ 1, 1 ], [ 1, 1 ] ], 2, 2, R ), obj2 );; gap> IsColiftable( beta, gamma ); false gap> IsColiftable( gamma, beta ); false gap> ProjectionInFirstFactorOfWeakBiFiberProduct( gamma, gamma );; gap> ProjectionInFirstFactorOfWeakBiFiberProduct( gamma, ZeroMorphism( Range( gamma ), Range( gamma ) ) );; gap> lift_arg_1 := PreCompose( ProjectionInFirstFactorOfWeakBiFiberProduct( gamma, gamma + gamma ), gamma );; gap> lift_arg_2 := gamma + gamma;; gap> IsLiftable( lift_arg_1, lift_arg_2 );; gap> Lift( lift_arg_1, lift_arg_2 );; gap> pi1 := ProjectionInFirstFactorOfWeakBiFiberProduct( alpha, beta );; gap> pi2 := ProjectionInSecondFactorOfWeakBiFiberProduct( alpha, beta );; gap> IsEqualForMorphisms( PreCompose( pi1, alpha ), PreCompose( pi2, beta ) );; gap> inj1 := InjectionOfFirstCofactorOfWeakBiPushout( gamma + gamma, gamma );; gap> inj2 := InjectionOfSecondCofactorOfWeakBiPushout( gamma + gamma, gamma );; gap> IsEqualForMorphisms( PreCompose( gamma + gamma, inj1 ), PreCompose( gamma, inj2 ) );; gap> WeakKernelLift( WeakCokernelProjection( gamma ), gamma );; gap> pi1 := InjectionOfFirstCofactorOfWeakBiPushout( alpha, alpha );; gap> pi2 := InjectionOfSecondCofactorOfWeakBiPushout( alpha, alpha );; gap> UniversalMorphismFromWeakBiPushout( alpha, alpha, pi1, pi2 );; 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> biased_w := CategoryOfColumnsMorphism( S3, HomalgMatrix( "[x,0,0,0,x,0,0,0,x]", 3, 3, S ), S3 );; gap> biased_h := CategoryOfColumnsMorphism( S3, HomalgMatrix( "[x*y, x*z, y^2]", 3, 3, S ), S3 );; gap> BiasedWeakFiberProduct( biased_h, biased_w );; gap> ProjectionOfBiasedWeakFiberProduct( biased_h, biased_w );; gap> IsCongruentForMorphisms( > PreCompose( UniversalMorphismIntoBiasedWeakFiberProduct( biased_h, biased_w, biased_h ), ProjectionOfBiasedWeakFiberProduct( biased_h, biased_w ) ), > biased_h > ); true gap> IsCongruentForMorphisms( > PreCompose( InjectionOfBiasedWeakPushout( biased_h, biased_w ), UniversalMorphismFromBiasedWeakPushout( biased_h, biased_w, biased_h )), > biased_h > ); true gap> ## Homomorphism structures > a := InterpretMorphismAsMorphismFromDistinguishedObjectToHomomorphismStructure( gamma );; gap> IsCongruentForMorphisms( InterpretMorphismFromDistinguishedObjectToHomomorphismStructureAsMorphism( Source( a ), Range( a ), InterpretMorphismAsMorphismFromDistinguishedObjectToHomomorphismStructure( a ) ), a );; gap> a := ZeroObjectFunctorial( cat );; gap> IsCongruentForMorphisms( InterpretMorphismFromDistinguishedObjectToHomomorphismStructureAsMorphism( Source( a ), Range( a ), InterpretMorphismAsMorphismFromDistinguishedObjectToHomomorphismStructure( a ) ), a );;
gap> LoadPackage( "RingsForHomalg", false ); true gap> LoadPackage( "AdditiveClosuresForCAP", false ); true gap> EEE := KoszulDualRing( HomalgFieldOfRationalsInSingular( ) * "x,y" );; gap> Eoid := RingAsCategory( EEE );; gap> a := RingAsCategoryMorphism( Eoid, 1/2 );; gap> b := RingAsCategoryMorphism( Eoid, -2/3 );; gap> u := RingAsCategoryUniqueObject( Eoid );; gap> IsCongruentForMorphisms( a, > InterpretMorphismFromDistinguishedObjectToHomomorphismStructureAsMorphism( > u,u, > InterpretMorphismAsMorphismFromDistinguishedObjectToHomomorphismStructure( > a > ) > ) > ); true gap> a = HomStructure( u, u, HomStructure( a ) ); true gap> IsEqualForObjects( HomStructure( Eoid ), DistinguishedObjectOfHomomorphismStructure( Eoid ) ); true gap> c := RingAsCategoryMorphism( Eoid, 3 );; gap> d := RingAsCategoryMorphism( Eoid, 0 );; gap> left_coeffs := [ [ a, b ], [ c, d ] ];; gap> right_coeffs := [ [ PreCompose( a, b ), PreCompose( b, c ) ], [ c, PreCompose( a, a ) ] ];; gap> right_side := [ a, b ];; gap> MereExistenceOfSolutionOfLinearSystemInAbCategory( left_coeffs, right_coeffs, right_side ); true gap> solution := > SolveLinearSystemInAbCategory( > left_coeffs, > right_coeffs, > right_side > );; gap> ForAll( [ 1, 2 ], i -> > IsCongruentForMorphisms( > Sum( List( [ 1, 2 ], j -> PreCompose( [ left_coeffs[i][j], solution[j], right_coeffs[i][j] ] ) ) ), > right_side[i] > ) > ); true gap> IsLiftable( c, d ); false gap> LiftOrFail( c, d ); fail gap> IsLiftable( d, c ); true gap> LiftOrFail( d, c ); <0> gap> Lift( d, c ); <0> gap> IsColiftable( c, d ); true gap> ColiftOrFail( c, d ); <0> gap> Colift( c, d ); <0> gap> IsColiftable( d, c ); false gap> ColiftOrFail( d, c ); fail
Assume that we have the constructors CategoryOfRows
and CategoryOfColumns
but no constructor Opposite
. Then we can still model Opposite( CategoryOfRows )
as CategoryOfColumns
using ReinterpretationOfCategory
. This can be achieved up to minor modifications by swapping object_constructor
and modeling_tower_object_constructor
and so on in CategoryOfColums_as_Opposite_CategoryOfRows
. With this, objects and morphisms indeed have the attribute Opposite
as desired. Getting ObjectDatum
and MorphismDatum
to return this attribute would also be possible, but would require more effort than simply swapping object_constructor
and modeling_tower_object_constructor
and so.
gap> LoadPackage( "AdditiveClosuresForCAP", false ); true gap> QQ := HomalgFieldOfRationals( );; gap> cols := CategoryOfColumns( QQ );; gap> rows := CategoryOfRows( QQ );; gap> object_constructor := > { cat, rank } -> CreateCapCategoryObjectWithAttributes( cat, > Opposite, CategoryOfRowsObject( Opposite( cat ), rank ) > );; gap> modeling_tower_object_constructor := > { cat, rank } -> CreateCapCategoryObjectWithAttributes( ModelingCategory( cat ), > RankOfObject, rank > );; gap> object_datum := { cat, obj } -> RankOfObject( Opposite( obj ) );; gap> modeling_tower_object_datum := { cat, obj } -> RankOfObject( obj );; gap> morphism_constructor := > { cat, source, underlying_matrix, range } -> > CreateCapCategoryMorphismWithAttributes( > cat, > source, range, > Opposite, CategoryOfRowsMorphism( > Opposite( cat ), > Opposite( range ), > underlying_matrix, > Opposite( source ) > ) > );; gap> modeling_tower_morphism_constructor := > { cat, source, underlying_matrix, range } -> > CreateCapCategoryMorphismWithAttributes( > ModelingCategory( cat ), > source, range, > UnderlyingMatrix, underlying_matrix > );; gap> morphism_datum := { cat, mor } -> UnderlyingMatrix( Opposite( mor ) );; gap> modeling_tower_morphism_datum := { cat, mor } -> UnderlyingMatrix( mor );; gap> op := ReinterpretationOfCategory( cols, rec( > name := Concatenation( "Opposite( ", Name( rows )," )" ), > category_filter := WasCreatedAsOppositeCategory, > category_object_filter := IsCapCategoryOppositeObject, > category_morphism_filter := IsCapCategoryOppositeMorphism, > object_constructor := object_constructor, > object_datum := object_datum, > morphism_constructor := morphism_constructor, > morphism_datum := morphism_datum, > modeling_tower_object_constructor := modeling_tower_object_constructor, > modeling_tower_object_datum := modeling_tower_object_datum, > modeling_tower_morphism_constructor := modeling_tower_morphism_constructor, > modeling_tower_morphism_datum := modeling_tower_morphism_datum, > only_primitive_operations := true, > ) ); Opposite( Rows( Q ) ) gap> SetOpposite( op, rows ); gap> source := ObjectConstructor( op, 1 ); <An object in Opposite( Rows( Q ) )> gap> range := ObjectConstructor( op, 2 ); <An object in Opposite( Rows( Q ) )> gap> zero := ZeroMorphism( source, range ); <A zero morphism in Opposite( Rows( Q ) )> gap> sum := AdditionForMorphisms( zero, zero ); <A morphism in Opposite( Rows( Q ) )> gap> # notice that source and range are indeed swapped compared to the above > Display( Source( Opposite( sum ) ) ); A row module over Q of rank 2 gap> Display( Range( Opposite( sum ) ) ); A row module over Q of rank 1
gap> LoadPackage( "AdditiveClosuresForCAP", false ); true gap> R := HomalgRingOfIntegers( ) ;; gap> cat := CategoryOfColumns( R );; gap> A := RandomObjectByInteger( cat, 2 );; gap> B := RandomObjectByInteger( cat, 2 );; gap> mor1 := RandomMorphismByInteger( cat, 2 );; gap> mor2 := RandomMorphismWithFixedSourceByInteger( cat, CategoryOfColumnsObject( cat, 3 ), 2 );; gap> mor3 := RandomMorphismWithFixedRangeByInteger( cat, CategoryOfColumnsObject( cat, 3 ), 2 );; gap> mor4 := RandomMorphismWithFixedSourceAndRangeByInteger( cat, CategoryOfColumnsObject( cat, 3 ), CategoryOfColumnsObject( cat, 4 ), 2 );; gap> RankOfObject( Source( mor2 ) ) = 3; true gap> RankOfObject( Range( mor3 ) ) = 3; true gap> RankOfObject( Source( mor4 ) ) = 3; true gap> RankOfObject( Range( mor4 ) ) = 4; true
gap> LoadPackage( "AdditiveClosuresForCAP", false ); true gap> QQ := HomalgFieldOfRationalsInSingular( );; gap> QQxy := QQ * "x,y";; gap> EQQxy := KoszulDualRing( QQxy );; gap> R := KoszulDualRing( HomalgRingOfIntegersInSingular( ) * "x,y" );; gap> CAP_INTERNAL_GENERATE_DOCUMENTATION_FOR_CATEGORY_INSTANCES( > [ > [ CategoryOfRows( R ), "CategoryOfRows of an arbitrary ring", 0 ], > [ CategoryOfRows( EQQxy ), "CategoryOfRows of an exterior algebra over a field", 1 ], > [ CategoryOfRows( QQxy ), "CategoryOfRows of a commutative ring", 1 ], > [ CategoryOfRows( QQ ), "CategoryOfRows of a field", 3 ], > ], > "AdditiveClosuresForCAP", > "CategoryOfRows.autogen.gd", > "Category of rows", > "Supported CAP operations" > );
gap> CR := RingAsCategory( Integers );; gap> u := RingAsCategoryUniqueObject( CR );; gap> IsObjectFiniteCategory( CR ); true gap> SetOfObjectsOfCategory( CR ) = [ u ]; true gap> alpha := 2 / CR; <2> gap> IsOne( alpha ); false gap> MorphismDatum( alpha ); 2 gap> IsZeroForMorphisms( alpha ); false gap> alpha * alpha; <4> gap> -alpha; <-2> gap> IsZeroForMorphisms( alpha + AdditiveInverse( alpha ) ); true gap> beta := RingAsCategoryMorphism( 1/2, CR );; gap> IsWellDefined( beta ); false gap> gamma := IdentityMorphism( u ); <1> gap> IsOne( gamma ); true gap> delta := ZeroMorphism( u, u ); <0> gap> IsZeroForMorphisms( delta ); true gap> 2 * alpha; <4> gap> Lift( alpha * alpha, alpha ); <2> gap> Colift( alpha, alpha * alpha ); <2> gap> BasisOfExternalHom( u, u ); [ <1> ] gap> CoefficientsOfMorphism( alpha ); [ 2 ] gap> IsCongruentForMorphisms( alpha, LinearCombinationOfMorphisms( u, CoefficientsOfMorphism( alpha ), BasisOfExternalHom( u, u ), u ) ); true gap> TensorUnit( CR ); * gap> TensorUnit( CR ) = u; true gap> TensorProductOnObjects( u, u ); * gap> TensorProductOnObjects( u, u ) = u; true gap> TensorProductOnMorphisms( alpha, beta ); <1> gap> Braiding( u, u ); <1> gap> DualOnObjects( u ) = u; true gap> DualOnMorphisms( alpha ) = alpha; true gap> EvaluationForDual( u ); <1> gap> CoevaluationForDual( u ); <1> gap> CoDualOnObjects( u ) = u; true gap> CoDualOnMorphisms( beta ) = beta; true gap> CoclosedEvaluationForCoDual( u ); <1> gap> CoclosedCoevaluationForCoDual( u ); <1> gap> EEE := KoszulDualRing( HomalgFieldOfRationalsInSingular( ) * "x,y" );; gap> CE := RingAsCategory( EEE );; gap> u := RingAsCategoryUniqueObject( CE );; gap> alpha := ("2 + 3 * e0 + 4 * e1 + 5 * e0*e1" / EEE) / CE; <5*e0*e1+3*e0+4*e1+2> gap> IsOne( alpha ); false gap> IsZeroForMorphisms( alpha ); false gap> alpha * alpha; <20*e0*e1+12*e0+16*e1+4> gap> -alpha; <-5*e0*e1-3*e0-4*e1-2> gap> IsZeroForMorphisms( alpha + AdditiveInverse( alpha ) ); true gap> gamma := IdentityMorphism( u ); <1> gap> IsOne( gamma ); true gap> delta := ZeroMorphism( u, u ); <0> gap> IsZeroForMorphisms( delta ); true gap> 2 * alpha; <10*e0*e1+6*e0+8*e1+4> gap> Lift( alpha * alpha, alpha ); <5*e0*e1+3*e0+4*e1+2> gap> Colift( alpha, alpha * alpha ); <5*e0*e1+3*e0+4*e1+2> gap> basis := BasisOfExternalHom( u, u ); [ <1>, <e0>, <e1>, <e0*e1> ] gap> coeffs := CoefficientsOfMorphism( alpha ); [ 2, 3, 4, 5 ] gap> IsCongruentForMorphisms( alpha, LinearCombinationOfMorphisms( u, coeffs, basis, u ) ); true gap> u_op := Opposite( u ); <An object in Opposite( RingAsCategory( Q{e0,e1} ) )> gap> alpha_op := Opposite( alpha ); <A morphism in Opposite( RingAsCategory( Q{e0,e1} ) )> gap> basis := BasisOfExternalHom( u_op, u_op );; gap> coeffs := CoefficientsOfMorphism( alpha_op ); [ 2, 3, 4, 5 ] gap> IsCongruentForMorphisms( alpha_op, LinearCombinationOfMorphisms( u_op, coeffs, basis, u_op ) ); true
generated by GAPDoc2HTML