  
  [1X2 [33X[0;0YExamples and Tests[133X[101X
  
  
  [1X2.1 [33X[0;0YBasic Commands[133X[101X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XLoadPackage( "LinearAlgebraForCAP", false );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XQ := HomalgFieldOfRationals();;[127X[104X
    [4X[25Xgap>[125X [27Xvec := MatrixCategory( Q );;[127X[104X
    [4X[25Xgap>[125X [27Xa := MatrixCategoryObject( vec, 3 );[127X[104X
    [4X[28X<A vector space object over Q of dimension 3>[128X[104X
    [4X[25Xgap>[125X [27XIsProjective( a );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xap := 3/vec;;[127X[104X
    [4X[25Xgap>[125X [27XIsEqualForObjects( a, ap );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xb := MatrixCategoryObject( vec, 4 );[127X[104X
    [4X[28X<A vector space object over Q of dimension 4>[128X[104X
    [4X[25Xgap>[125X [27Xhomalg_matrix := HomalgMatrix( [ [ 1, 0, 0, 0 ],[127X[104X
    [4X[25X>[125X [27X                                  [ 0, 1, 0, -1 ],[127X[104X
    [4X[25X>[125X [27X                                  [ -1, 0, 2, 1 ] ], 3, 4, Q );;[127X[104X
    [4X[25Xgap>[125X [27Xalpha := VectorSpaceMorphism( a, homalg_matrix, b );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
  [4X[32X[104X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27X# @drop_example_in_Julia: view/print/display strings of matrices differ between GAP and Julia, see https://github.com/homalg-project/MatricesForHomalg.jl/issues/41[127X[104X
    [4X[25X>[125X [27XDisplay( alpha );[127X[104X
    [4X[28X[ [   1,   0,   0,   0 ],[128X[104X
    [4X[28X  [   0,   1,   0,  -1 ],[128X[104X
    [4X[28X  [  -1,   0,   2,   1 ] ][128X[104X
    [4X[28X[128X[104X
    [4X[28XA morphism in Category of matrices over Q[128X[104X
  [4X[32X[104X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xalphap := homalg_matrix/vec;;[127X[104X
    [4X[25Xgap>[125X [27XIsCongruentForMorphisms( alpha, alphap );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xhomalg_matrix := HomalgMatrix( [ [ 1, 1, 0, 0 ],[127X[104X
    [4X[25X>[125X [27X                                  [ 0, 1, 0, -1 ],[127X[104X
    [4X[25X>[125X [27X                                  [ -1, 0, 2, 1 ] ], 3, 4, Q );;[127X[104X
    [4X[25Xgap>[125X [27Xbeta := VectorSpaceMorphism( a, homalg_matrix, b );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27XCokernelObject( alpha );[127X[104X
    [4X[28X<A vector space object over Q of dimension 1>[128X[104X
    [4X[25Xgap>[125X [27Xc := CokernelProjection( alpha );;[127X[104X
    [4X[25Xgap>[125X [27XDisplay( EntriesOfHomalgMatrixAsListList( UnderlyingMatrix( c ) ) );[127X[104X
    [4X[28X[ [ 0 ], [ 1 ], [ -1/2 ], [ 1 ] ][128X[104X
    [4X[25Xgap>[125X [27Xgamma := UniversalMorphismIntoDirectSum( [ c, c ] );;[127X[104X
    [4X[25Xgap>[125X [27XDisplay( EntriesOfHomalgMatrixAsListList( UnderlyingMatrix( gamma ) ) );[127X[104X
    [4X[28X[ [ 0, 0 ], [ 1, 1 ], [ -1/2, -1/2 ], [ 1, 1 ] ][128X[104X
    [4X[25Xgap>[125X [27Xcolift := CokernelColift( alpha, gamma );;[127X[104X
    [4X[25Xgap>[125X [27XIsEqualForMorphisms( PreCompose( c, colift ), gamma );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XFiberProduct( alpha, beta );[127X[104X
    [4X[28X<A vector space object over Q of dimension 2>[128X[104X
    [4X[25Xgap>[125X [27XF := FiberProduct( alpha, beta );[127X[104X
    [4X[28X<A vector space object over Q of dimension 2>[128X[104X
    [4X[25Xgap>[125X [27Xp1 := ProjectionInFactorOfFiberProduct( [ alpha, beta ], 1 );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27XDisplay( EntriesOfHomalgMatrixAsListList( UnderlyingMatrix( PreCompose( p1, alpha ) ) ) );[127X[104X
    [4X[28X[ [ 0, 1, 0, -1 ], [ -1, 0, 2, 1 ] ][128X[104X
    [4X[25Xgap>[125X [27XPushout( alpha, beta );[127X[104X
    [4X[28X<A vector space object over Q of dimension 5>[128X[104X
    [4X[25Xgap>[125X [27Xi1 := InjectionOfCofactorOfPushout( [ alpha, beta ], 1 );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xi2 := InjectionOfCofactorOfPushout( [ alpha, beta ], 2 );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xu := UniversalMorphismFromDirectSum( [ b, b ], [ i1, i2 ] );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
  [4X[32X[104X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27X# @drop_example_in_Julia: differences in the output of SyzygiesOfRows, see https://github.com/homalg-project/MatricesForHomalg.jl/issues/50[127X[104X
    [4X[25X>[125X [27XDisplay( EntriesOfHomalgMatrixAsListList( UnderlyingMatrix( u ) ) );[127X[104X
    [4X[28X[ [ 0, 1, 1, 0, 0 ],\[128X[104X
    [4X[28X [ 1, 0, 1, 0, -1 ],\[128X[104X
    [4X[28X [ -1/2, 0, 1/2, 1, 1/2 ],\[128X[104X
    [4X[28X [ 1, 0, 0, 0, 0 ],\[128X[104X
    [4X[28X [ 0, 1, 0, 0, 0 ],\[128X[104X
    [4X[28X [ 0, 0, 1, 0, 0 ],\[128X[104X
    [4X[28X [ 0, 0, 0, 1, 0 ],\[128X[104X
    [4X[28X [ 0, 0, 0, 0, 1 ] ][128X[104X
  [4X[32X[104X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XKernelObjectFunctorial( u, IdentityMorphism( Source( u ) ), u ) = IdentityMorphism( MatrixCategoryObject( vec, 3 ) );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIsZeroForMorphisms( CokernelObjectFunctorial( u, IdentityMorphism( Range( u ) ), u ) );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XDirectProductFunctorial( [ u, u ] ) = DirectSumFunctorial( [ u, u ] );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XCoproductFunctorial( [ u, u ] ) = DirectSumFunctorial( [ u, u ] );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIsCongruentForMorphisms([127X[104X
    [4X[25X>[125X [27X    FiberProductFunctorial( [ u, u ], [ IdentityMorphism( Source( u ) ), IdentityMorphism( Source( u ) ) ], [ u, u ] ),[127X[104X
    [4X[25X>[125X [27X    IdentityMorphism( FiberProduct( [ u, u ] ) )[127X[104X
    [4X[25X>[125X [27X);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIsCongruentForMorphisms([127X[104X
    [4X[25X>[125X [27X    PushoutFunctorial( [ u, u ], [ IdentityMorphism( Range( u ) ), IdentityMorphism( Range( u ) ) ], [ u, u ] ),[127X[104X
    [4X[25X>[125X [27X    IdentityMorphism( Pushout( [ u, u ] ) )[127X[104X
    [4X[25X>[125X [27X);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIsCongruentForMorphisms( ((1/2) / Q) * alpha, alpha * ((1/2) / Q) );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XDimension( HomomorphismStructureOnObjects( a, b ) ) = Dimension( a ) * Dimension( b );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIsCongruentForMorphisms([127X[104X
    [4X[25X>[125X [27X    PreCompose( [ u, DualOnMorphisms( i1 ), DualOnMorphisms( alpha ) ] ),[127X[104X
    [4X[25X>[125X [27X    InterpretMorphismFromDistinguishedObjectToHomomorphismStructureAsMorphism( Source( u ), Source( alpha ),[127X[104X
    [4X[25X>[125X [27X         PreCompose([127X[104X
    [4X[25X>[125X [27X             InterpretMorphismAsMorphismFromDistinguishedObjectToHomomorphismStructure( DualOnMorphisms( i1 ) ),[127X[104X
    [4X[25X>[125X [27X             HomomorphismStructureOnMorphisms( u, DualOnMorphisms( alpha ) )[127X[104X
    [4X[25X>[125X [27X         )[127X[104X
    [4X[25X>[125X [27X    )[127X[104X
    [4X[25X>[125X [27X);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xop := Opposite( vec );;[127X[104X
    [4X[25Xgap>[125X [27Xalpha_op := Opposite( op, alpha );[127X[104X
    [4X[28X<A morphism in Opposite( Category of matrices over Q )>[128X[104X
    [4X[25Xgap>[125X [27Xbasis := BasisOfExternalHom( Source( alpha_op ), Range( alpha_op ) );;[127X[104X
    [4X[25Xgap>[125X [27Xcoeffs := CoefficientsOfMorphism( alpha_op );;[127X[104X
    [4X[25Xgap>[125X [27XDisplay( coeffs );[127X[104X
    [4X[28X[ 1, 0, 0, 0, 0, 1, 0, -1, -1, 0, 2, 1 ][128X[104X
    [4X[25Xgap>[125X [27XIsEqualForMorphisms( alpha_op, LinearCombinationOfMorphisms( Source( alpha_op ), coeffs, basis, Range( alpha_op ) ) );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xvec := CapCategory( alpha );;[127X[104X
    [4X[25Xgap>[125X [27Xt := TensorUnit( vec );;[127X[104X
    [4X[25Xgap>[125X [27Xz := ZeroObject( vec );;[127X[104X
    [4X[25Xgap>[125X [27XIsCongruentForMorphisms([127X[104X
    [4X[25X>[125X [27X    ZeroObjectFunctorial( vec ),[127X[104X
    [4X[25X>[125X [27X    InterpretMorphismFromDistinguishedObjectToHomomorphismStructureAsMorphism( z, z, ZeroMorphism( t, z ) )[127X[104X
    [4X[25X>[125X [27X);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIsCongruentForMorphisms([127X[104X
    [4X[25X>[125X [27X    ZeroObjectFunctorial( vec ),[127X[104X
    [4X[25X>[125X [27X    InterpretMorphismFromDistinguishedObjectToHomomorphismStructureAsMorphism([127X[104X
    [4X[25X>[125X [27X        z, z,[127X[104X
    [4X[25X>[125X [27X        InterpretMorphismAsMorphismFromDistinguishedObjectToHomomorphismStructure( ZeroObjectFunctorial( vec ) )[127X[104X
    [4X[25X>[125X [27X    )[127X[104X
    [4X[25X>[125X [27X);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xright_side := PreCompose( [ i1, DualOnMorphisms( u ), u ] );;[127X[104X
    [4X[25Xgap>[125X [27Xx := SolveLinearSystemInAbCategory( [ [ i1 ] ], [ [ u ] ], [ right_side ] )[1];;[127X[104X
    [4X[25Xgap>[125X [27XIsCongruentForMorphisms( PreCompose( [ i1, x, u ] ), right_side );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xa_otimes_b := TensorProductOnObjects( a, b );[127X[104X
    [4X[28X<A vector space object over Q of dimension 12>[128X[104X
    [4X[25Xgap>[125X [27Xhom_ab := InternalHomOnObjects( a, b );[127X[104X
    [4X[28X<A vector space object over Q of dimension 12>[128X[104X
    [4X[25Xgap>[125X [27Xcohom_ab := InternalCoHomOnObjects( a, b );[127X[104X
    [4X[28X<A vector space object over Q of dimension 12>[128X[104X
    [4X[25Xgap>[125X [27Xhom_ab = cohom_ab;[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xunit_ab := VectorSpaceMorphism([127X[104X
    [4X[25X>[125X [27X          a_otimes_b,[127X[104X
    [4X[25X>[125X [27X          HomalgIdentityMatrix( Dimension( a_otimes_b ), Q ),[127X[104X
    [4X[25X>[125X [27X          a_otimes_b[127X[104X
    [4X[25X>[125X [27X          );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xunit_hom_ab := VectorSpaceMorphism([127X[104X
    [4X[25X>[125X [27X              hom_ab,[127X[104X
    [4X[25X>[125X [27X              HomalgIdentityMatrix( Dimension( hom_ab ), Q ),[127X[104X
    [4X[25X>[125X [27X              hom_ab[127X[104X
    [4X[25X>[125X [27X            );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xunit_cohom_ab := VectorSpaceMorphism([127X[104X
    [4X[25X>[125X [27X                cohom_ab,[127X[104X
    [4X[25X>[125X [27X                HomalgIdentityMatrix( Dimension( cohom_ab ), Q ),[127X[104X
    [4X[25X>[125X [27X                cohom_ab[127X[104X
    [4X[25X>[125X [27X              );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xev_ab := ClosedMonoidalLeftEvaluationMorphism( a, b );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xcoev_ab := ClosedMonoidalLeftCoevaluationMorphism( a, b );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xcoev_ba := ClosedMonoidalLeftCoevaluationMorphism( b, a );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xcocl_ev_ab := CoclosedMonoidalLeftEvaluationMorphism( a, b );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xcocl_ev_ba := CoclosedMonoidalLeftEvaluationMorphism( b, a );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xcocl_coev_ab := CoclosedMonoidalLeftCoevaluationMorphism( a, b );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xcocl_coev_ba := CoclosedMonoidalLeftCoevaluationMorphism( b, a );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27XUnderlyingMatrix( ev_ab ) = TransposedMatrix( UnderlyingMatrix( cocl_ev_ab ) );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XUnderlyingMatrix( coev_ab ) = TransposedMatrix( UnderlyingMatrix( cocl_coev_ab ) );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XUnderlyingMatrix( coev_ba ) = TransposedMatrix( UnderlyingMatrix( cocl_coev_ba ) );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xtensor_hom_adj_1_hom_ab := InternalHomToTensorProductLeftAdjunctMorphism( a, b, unit_hom_ab );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xcohom_tensor_adj_1_cohom_ab := InternalCoHomToTensorProductLeftAdjunctMorphism( a, b, unit_cohom_ab );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xtensor_hom_adj_1_ab := TensorProductToInternalHomLeftAdjunctMorphism( a, b, unit_ab );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xcohom_tensor_adj_1_ab := TensorProductToInternalCoHomLeftAdjunctMorphism( a, b, unit_ab );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xev_ab = tensor_hom_adj_1_hom_ab;[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xcocl_ev_ba = cohom_tensor_adj_1_cohom_ab;[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xcoev_ba = tensor_hom_adj_1_ab;[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xcocl_coev_ba = cohom_tensor_adj_1_ab;[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xc := MatrixCategoryObject( vec, 2 );[127X[104X
    [4X[28X<A vector space object over Q of dimension 2>[128X[104X
    [4X[25Xgap>[125X [27Xd := MatrixCategoryObject( vec, 1 );[127X[104X
    [4X[28X<A vector space object over Q of dimension 1>[128X[104X
  [4X[32X[104X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xpre_compose := MonoidalPreComposeMorphism( a, b, c );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xpost_compose := MonoidalPostComposeMorphism( a, b, c );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xpre_cocompose := MonoidalPreCoComposeMorphism( c, b, a );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xpost_cocompose := MonoidalPostCoComposeMorphism( c, b, a );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27XUnderlyingMatrix( pre_compose ) = TransposedMatrix( UnderlyingMatrix( pre_cocompose ) );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XUnderlyingMatrix( post_compose ) = TransposedMatrix( UnderlyingMatrix( post_cocompose ) );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xtp_hom_comp := TensorProductInternalHomCompatibilityMorphism( [ a, b, c, d ] );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xcohom_tp_comp := InternalCoHomTensorProductCompatibilityMorphism( [ b, d, a, c ] );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27XUnderlyingMatrix( tp_hom_comp ) = TransposedMatrix( UnderlyingMatrix( cohom_tp_comp ) );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xlambda := LambdaIntroduction( alpha );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xlambda_elim := LambdaElimination( a, b, lambda );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xalpha = lambda_elim;[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xalpha_op := VectorSpaceMorphism( b, TransposedMatrix( UnderlyingMatrix( alpha ) ), a );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xcolambda := CoLambdaIntroduction( alpha_op );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xcolambda_elim := CoLambdaElimination( b, a, colambda );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xalpha_op = colambda_elim;[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XUnderlyingMatrix( lambda ) = TransposedMatrix( UnderlyingMatrix( colambda ) );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xdelta := PreCompose( colambda, lambda);[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27XDisplay( EntriesOfHomalgMatrixAsListList( UnderlyingMatrix( TraceMap( delta ) ) ) );[127X[104X
    [4X[28X[ [ 9 ] ][128X[104X
    [4X[25Xgap>[125X [27XDisplay( EntriesOfHomalgMatrixAsListList( UnderlyingMatrix( CoTraceMap( delta ) ) ) );[127X[104X
    [4X[28X[ [ 9 ] ][128X[104X
    [4X[25Xgap>[125X [27XTraceMap( delta ) = CoTraceMap( delta );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XRankMorphism( a ) = CoRankMorphism( a );[127X[104X
    [4X[28Xtrue[128X[104X
  [4X[32X[104X
  
  
  [1X2.2 [33X[0;0YFunctors[133X[101X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XLoadPackage( "LinearAlgebraForCAP", false );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xring := HomalgFieldOfRationals( );;[127X[104X
    [4X[25Xgap>[125X [27Xvec := MatrixCategory( ring );;[127X[104X
    [4X[25Xgap>[125X [27XF := CapFunctor( "CohomForVec", [ vec, [ vec, true ] ], vec );;[127X[104X
    [4X[25Xgap>[125X [27Xobj_func := function( A, B ) return TensorProductOnObjects( A, DualOnObjects( B ) ); end;;[127X[104X
    [4X[25Xgap>[125X [27Xmor_func := function( source, alpha, beta, range ) return TensorProductOnMorphismsWithGivenTensorProducts( source, alpha, DualOnMorphisms( beta ), range ); end;;[127X[104X
    [4X[25Xgap>[125X [27XAddObjectFunction( F, obj_func );;[127X[104X
    [4X[25Xgap>[125X [27XAddMorphismFunction( F, mor_func );;[127X[104X
    [4X[25Xgap>[125X [27XDisplay( InputSignature( F ) );[127X[104X
    [4X[28X[ [ Category of matrices over Q, false ], [ Category of matrices over Q, true ] ][128X[104X
    [4X[25Xgap>[125X [27XV1 := TensorUnit( vec );;[127X[104X
    [4X[25Xgap>[125X [27XV3 := DirectSum( V1, V1, V1 );;[127X[104X
    [4X[25Xgap>[125X [27Xpi1 := ProjectionInFactorOfDirectSum( [ V1, V1 ], 1 );;[127X[104X
    [4X[25Xgap>[125X [27Xpi2 := ProjectionInFactorOfDirectSum( [ V3, V1 ], 1 );;[127X[104X
    [4X[25Xgap>[125X [27Xvalue1 := ApplyFunctor( F, pi1, pi2 );;[127X[104X
    [4X[25Xgap>[125X [27Xinput := ProductCategoryMorphism( SourceOfFunctor( F ), [ pi1, Opposite( pi2 ) ] );;[127X[104X
    [4X[25Xgap>[125X [27Xvalue2 := ApplyFunctor( F, input );;[127X[104X
    [4X[25Xgap>[125X [27XIsCongruentForMorphisms( value1, value2 );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XInstallFunctor( F, "F_installation" );;[127X[104X
    [4X[25Xgap>[125X [27XF_installation( pi1, pi2 );;[127X[104X
    [4X[25Xgap>[125X [27XF_installation( input );;[127X[104X
    [4X[25Xgap>[125X [27XF_installationOnObjects( V1, V1 );;[127X[104X
    [4X[25Xgap>[125X [27XF_installationOnObjects( ProductCategoryObject( SourceOfFunctor( F ), [ V1, Opposite( V1 ) ] ) );;[127X[104X
    [4X[25Xgap>[125X [27XF_installationOnMorphisms( pi1, pi2 );;[127X[104X
    [4X[25Xgap>[125X [27XF_installationOnMorphisms( input );;[127X[104X
    [4X[25Xgap>[125X [27XF2 := CapFunctor( "CohomForVec2", ProductCategory( [ vec, Opposite( vec ) ] ), vec );;[127X[104X
    [4X[25Xgap>[125X [27XAddObjectFunction( F2, a -> obj_func( a[1], Opposite( a[2] ) ) );;[127X[104X
    [4X[25Xgap>[125X [27XAddMorphismFunction( F2, function( source, datum, range ) return mor_func( source, datum[1], Opposite( datum[2] ), range ); end );;[127X[104X
    [4X[25Xgap>[125X [27Xinput := ProductCategoryMorphism( SourceOfFunctor( F2 ), [ pi1, Opposite( pi2 ) ] );;[127X[104X
    [4X[25Xgap>[125X [27Xvalue3 := ApplyFunctor( F2, input );;[127X[104X
    [4X[25Xgap>[125X [27XIsCongruentForMorphisms( value1, value3 );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XDisplay( InputSignature( F2 ) );[127X[104X
    [4X[28X[ [ Product of: Category of matrices over Q, Opposite( Category of matrices over Q ), false ] ][128X[104X
    [4X[25Xgap>[125X [27XInstallFunctor( F2, "F_installation2" );;[127X[104X
    [4X[25Xgap>[125X [27XF_installation2( input );;[127X[104X
    [4X[25Xgap>[125X [27XF_installation2OnObjects( ProductCategoryObject( SourceOfFunctor( F2 ), [ V1, Opposite( V1 ) ] ) );;[127X[104X
    [4X[25Xgap>[125X [27XF_installation2OnMorphisms( input );;[127X[104X
  [4X[32X[104X
  
  
  [1X2.3 [33X[0;0YSolving (Homogeneous) Linear Systems[133X[101X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XLoadPackage( "LinearAlgebraForCAP", false );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XQQ := HomalgFieldOfRationals();;[127X[104X
    [4X[25Xgap>[125X [27XQQ_mat := MatrixCategory( QQ );[127X[104X
    [4X[28XCategory of matrices over Q[128X[104X
    [4X[25Xgap>[125X [27Xt := TensorUnit( QQ_mat );[127X[104X
    [4X[28X<A vector space object over Q of dimension 1>[128X[104X
    [4X[25Xgap>[125X [27Xid_t := IdentityMorphism( t );[127X[104X
    [4X[28X<An identity morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27X1*(11)*7 + 2*(12)*8 + 3*(13)*9;[127X[104X
    [4X[28X620[128X[104X
    [4X[25Xgap>[125X [27X4*(11)*3 + 5*(12)*4 + 6*(13)*1;[127X[104X
    [4X[28X450[128X[104X
    [4X[25Xgap>[125X [27Xalpha :=  [ [ 1/QQ * id_t, 2/QQ * id_t, 3/QQ * id_t ], [ 4/QQ * id_t, 5/QQ * id_t, 6/QQ * id_t ] ];;[127X[104X
    [4X[25Xgap>[125X [27Xbeta := [ [ 7/QQ * id_t, 8/QQ * id_t, 9/QQ * id_t ], [ 3/QQ * id_t, 4/QQ * id_t, 1/QQ * id_t ] ];;[127X[104X
    [4X[25Xgap>[125X [27Xgamma := [ 620/QQ * id_t, 450/QQ * id_t ];;[127X[104X
    [4X[25Xgap>[125X [27XMereExistenceOfSolutionOfLinearSystemInAbCategory([127X[104X
    [4X[25X>[125X [27X                                  QQ_mat, alpha, beta, gamma );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XMereExistenceOfUniqueSolutionOfLinearSystemInAbCategory([127X[104X
    [4X[25X>[125X [27X                                  QQ_mat, alpha, beta, gamma );[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[25Xgap>[125X [27Xx := SolveLinearSystemInAbCategory( QQ_mat, alpha, beta, gamma );;[127X[104X
    [4X[25Xgap>[125X [27X(1*7)/QQ * x[1] + (2*8)/QQ * x[2] + (3*9)/QQ * x[3] = gamma[1];[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27X(4*3)/QQ * x[1] + (5*4)/QQ * x[2] + (6*1)/QQ * x[3] = gamma[2];[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XMereExistenceOfUniqueSolutionOfHomogeneousLinearSystemInAbCategory([127X[104X
    [4X[25X>[125X [27X                                  QQ_mat, alpha, beta );[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[25Xgap>[125X [27XB := BasisOfSolutionsOfHomogeneousLinearSystemInLinearCategory([127X[104X
    [4X[25X>[125X [27X                                  QQ_mat, alpha, beta );;[127X[104X
    [4X[25Xgap>[125X [27XLength( B );[127X[104X
    [4X[28X1[128X[104X
    [4X[25Xgap>[125X [27X(1*7)/QQ * B[1][1] + (2*8)/QQ * B[1][2] + (3*9)/QQ * B[1][3] = 0/QQ * id_t;[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27X(4*3)/QQ * B[1][1] + (5*4)/QQ * B[1][2] + (6*1)/QQ * B[1][3] = 0/QQ * id_t;[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27X2*(11)*5 + 3*(12)*7 + 9*(13)*2;[127X[104X
    [4X[28X596[128X[104X
    [4X[25Xgap>[125X [27XAdd( alpha, [ 2/QQ * id_t, 3/QQ * id_t, 9/QQ * id_t ] );;[127X[104X
    [4X[25Xgap>[125X [27XAdd( beta, [ 5/QQ * id_t, 7/QQ * id_t, 2/QQ * id_t ] );;[127X[104X
    [4X[25Xgap>[125X [27XAdd( gamma, 596/QQ * id_t );;[127X[104X
    [4X[25Xgap>[125X [27XMereExistenceOfSolutionOfLinearSystemInAbCategory([127X[104X
    [4X[25X>[125X [27X                                  QQ_mat, alpha, beta, gamma );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XMereExistenceOfUniqueSolutionOfLinearSystemInAbCategory([127X[104X
    [4X[25X>[125X [27X                                  QQ_mat, alpha, beta, gamma );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xx := SolveLinearSystemInAbCategory( QQ_mat, alpha, beta, gamma );;[127X[104X
    [4X[25Xgap>[125X [27X(1*7)/QQ * x[1] + (2*8)/QQ * x[2] + (3*9)/QQ * x[3] = gamma[1];[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27X(4*3)/QQ * x[1] + (5*4)/QQ * x[2] + (6*1)/QQ * x[3] = gamma[2];[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27X(2*5)/QQ * x[1] + (3*7)/QQ * x[2] + (9*2)/QQ * x[3] = gamma[3];[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XMereExistenceOfUniqueSolutionOfHomogeneousLinearSystemInAbCategory([127X[104X
    [4X[25X>[125X [27X                                  QQ_mat, alpha, beta );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XB := BasisOfSolutionsOfHomogeneousLinearSystemInLinearCategory([127X[104X
    [4X[25X>[125X [27X                                  QQ_mat, alpha, beta );;[127X[104X
    [4X[25Xgap>[125X [27XLength( B );[127X[104X
    [4X[28X0[128X[104X
    [4X[25Xgap>[125X [27Xalpha := [ [ 2/QQ * id_t, 3/QQ * id_t ] ];;[127X[104X
    [4X[25Xgap>[125X [27Xdelta := [ [ 3/QQ * id_t, 3/QQ * id_t ] ];;[127X[104X
    [4X[25Xgap>[125X [27XB := BasisOfSolutionsOfHomogeneousDoubleLinearSystemInLinearCategory( alpha, delta );;[127X[104X
    [4X[25Xgap>[125X [27XLength( B );[127X[104X
    [4X[28X1[128X[104X
    [4X[25Xgap>[125X [27Xmor1 := PreCompose( alpha[1][1], B[1][1] ) + PreCompose( alpha[1][2], B[1][2] );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xmor2 := PreCompose( B[1][1], delta[1][1] ) + PreCompose( B[1][2], delta[1][2] );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xmor1 = mor2;[127X[104X
    [4X[28Xtrue[128X[104X
  [4X[32X[104X
  
  
  [1X2.4 [33X[0;0YHomology object[133X[101X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xfield := HomalgFieldOfRationals( );;[127X[104X
    [4X[25Xgap>[125X [27Xvec := MatrixCategory( field );;[127X[104X
    [4X[25Xgap>[125X [27XA := MatrixCategoryObject( vec, 1 );;[127X[104X
    [4X[25Xgap>[125X [27XB := MatrixCategoryObject( vec, 2 );;[127X[104X
    [4X[25Xgap>[125X [27XC := MatrixCategoryObject( vec, 3 );;[127X[104X
    [4X[25Xgap>[125X [27Xalpha := VectorSpaceMorphism( A, HomalgMatrix( [ [ 1, 0, 0 ] ], 1, 3, field ), C );;[127X[104X
    [4X[25Xgap>[125X [27Xbeta := VectorSpaceMorphism( C, HomalgMatrix( [ [ 1, 0 ], [ 1, 1 ], [ 1, 2 ] ], 3, 2, field ), B );;[127X[104X
    [4X[25Xgap>[125X [27XIsZeroForMorphisms( PreCompose( alpha, beta ) );[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[25Xgap>[125X [27XIsCongruentForMorphisms([127X[104X
    [4X[25X>[125X [27X    IdentityMorphism( HomologyObject( alpha, beta ) ),[127X[104X
    [4X[25X>[125X [27X    HomologyObjectFunctorial( alpha, beta, IdentityMorphism( C ), alpha, beta )[127X[104X
    [4X[25X>[125X [27X);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xkernel_beta := KernelEmbedding( beta );;[127X[104X
    [4X[25Xgap>[125X [27XK := Source( kernel_beta );;[127X[104X
    [4X[25Xgap>[125X [27XIsIsomorphism([127X[104X
    [4X[25X>[125X [27X    HomologyObjectFunctorial( [127X[104X
    [4X[25X>[125X [27X        MorphismFromZeroObject( K ), [127X[104X
    [4X[25X>[125X [27X        MorphismIntoZeroObject( K ),[127X[104X
    [4X[25X>[125X [27X        kernel_beta,[127X[104X
    [4X[25X>[125X [27X        MorphismFromZeroObject( Source( beta ) ),[127X[104X
    [4X[25X>[125X [27X        beta[127X[104X
    [4X[25X>[125X [27X    )[127X[104X
    [4X[25X>[125X [27X);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xcokernel_alpha := CokernelProjection( alpha );;[127X[104X
    [4X[25Xgap>[125X [27XCo := Range( cokernel_alpha );;[127X[104X
    [4X[25Xgap>[125X [27XIsIsomorphism([127X[104X
    [4X[25X>[125X [27X    HomologyObjectFunctorial( [127X[104X
    [4X[25X>[125X [27X        alpha,[127X[104X
    [4X[25X>[125X [27X        MorphismIntoZeroObject( Range( alpha ) ),[127X[104X
    [4X[25X>[125X [27X        cokernel_alpha,[127X[104X
    [4X[25X>[125X [27X        MorphismFromZeroObject( Co ),[127X[104X
    [4X[25X>[125X [27X        MorphismIntoZeroObject( Co )[127X[104X
    [4X[25X>[125X [27X    )[127X[104X
    [4X[25X>[125X [27X);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xop := Opposite( vec );;[127X[104X
    [4X[25Xgap>[125X [27Xalpha_op := Opposite( op, alpha );;[127X[104X
    [4X[25Xgap>[125X [27Xbeta_op := Opposite( op, beta );;[127X[104X
    [4X[25Xgap>[125X [27XIsCongruentForMorphisms([127X[104X
    [4X[25X>[125X [27X    IdentityMorphism( HomologyObject( beta_op, alpha_op ) ),[127X[104X
    [4X[25X>[125X [27X    HomologyObjectFunctorial( beta_op, alpha_op, IdentityMorphism( Opposite( C ) ), beta_op, alpha_op )[127X[104X
    [4X[25X>[125X [27X);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xkernel_beta := KernelEmbedding( beta_op );;[127X[104X
    [4X[25Xgap>[125X [27XK := Source( kernel_beta );;[127X[104X
    [4X[25Xgap>[125X [27XIsIsomorphism([127X[104X
    [4X[25X>[125X [27X    HomologyObjectFunctorial( [127X[104X
    [4X[25X>[125X [27X        MorphismFromZeroObject( K ), [127X[104X
    [4X[25X>[125X [27X        MorphismIntoZeroObject( K ),[127X[104X
    [4X[25X>[125X [27X        kernel_beta,[127X[104X
    [4X[25X>[125X [27X        MorphismFromZeroObject( Source( beta_op ) ),[127X[104X
    [4X[25X>[125X [27X        beta_op[127X[104X
    [4X[25X>[125X [27X    )[127X[104X
    [4X[25X>[125X [27X);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xcokernel_alpha := CokernelProjection( alpha_op );;[127X[104X
    [4X[25Xgap>[125X [27XCo := Range( cokernel_alpha );;[127X[104X
    [4X[25Xgap>[125X [27XIsIsomorphism([127X[104X
    [4X[25X>[125X [27X    HomologyObjectFunctorial( [127X[104X
    [4X[25X>[125X [27X        alpha_op,[127X[104X
    [4X[25X>[125X [27X        MorphismIntoZeroObject( Range( alpha_op ) ),[127X[104X
    [4X[25X>[125X [27X        cokernel_alpha,[127X[104X
    [4X[25X>[125X [27X        MorphismFromZeroObject( Co ),[127X[104X
    [4X[25X>[125X [27X        MorphismIntoZeroObject( Co )[127X[104X
    [4X[25X>[125X [27X    )[127X[104X
    [4X[25X>[125X [27X);[127X[104X
    [4X[28Xtrue[128X[104X
  [4X[32X[104X
  
  
  [1X2.5 [33X[0;0YLiftable[133X[101X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xfield := HomalgFieldOfRationals( );;[127X[104X
    [4X[25Xgap>[125X [27Xvec := MatrixCategory( field );;[127X[104X
    [4X[25Xgap>[125X [27XV := MatrixCategoryObject( vec, 1 );;[127X[104X
    [4X[25Xgap>[125X [27XW := MatrixCategoryObject( vec, 2 );;[127X[104X
    [4X[25Xgap>[125X [27Xalpha := VectorSpaceMorphism( V, HomalgMatrix( [ [ 1, -1 ] ], 1, 2, field ), W );;[127X[104X
    [4X[25Xgap>[125X [27Xbeta := VectorSpaceMorphism( W, HomalgMatrix( [ [ 1, 2 ], [ 3, 4 ] ], 2, 2, field ), W );;[127X[104X
    [4X[25Xgap>[125X [27XIsLiftable( alpha, beta );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIsLiftable( beta, alpha );[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[25Xgap>[125X [27XIsLiftableAlongMonomorphism( beta, alpha );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xgamma := VectorSpaceMorphism( W, HomalgMatrix( [ [ 1 ], [ 1 ] ], 2, 1, field ), V );;[127X[104X
    [4X[25Xgap>[125X [27XIsColiftable( beta, gamma );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIsColiftable( gamma, beta );[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[25Xgap>[125X [27XIsColiftableAlongEpimorphism( beta, gamma );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XPreCompose( PreInverseForMorphisms( gamma ), gamma ) = IdentityMorphism( V );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XPreCompose( alpha, PostInverseForMorphisms( alpha ) ) = IdentityMorphism( V );[127X[104X
    [4X[28Xtrue[128X[104X
  [4X[32X[104X
  
  
  [1X2.6 [33X[0;0YMonoidal structure[133X[101X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XLoadPackage( "LinearAlgebraForCAP", false );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XQ := HomalgFieldOfRationals();;[127X[104X
    [4X[25Xgap>[125X [27Xvec := MatrixCategory( Q );;[127X[104X
    [4X[25Xgap>[125X [27Xa := MatrixCategoryObject( vec, 1 );[127X[104X
    [4X[28X<A vector space object over Q of dimension 1>[128X[104X
    [4X[25Xgap>[125X [27Xb := MatrixCategoryObject( vec, 2 );[127X[104X
    [4X[28X<A vector space object over Q of dimension 2>[128X[104X
    [4X[25Xgap>[125X [27Xc := MatrixCategoryObject( vec, 3 );[127X[104X
    [4X[28X<A vector space object over Q of dimension 3>[128X[104X
    [4X[25Xgap>[125X [27Xz := ZeroObject( vec );[127X[104X
    [4X[28X<A vector space object over Q of dimension 0>[128X[104X
    [4X[25Xgap>[125X [27Xalpha := VectorSpaceMorphism( a, [ [ 1, 0 ] ], b );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xbeta := VectorSpaceMorphism( b,[127X[104X
    [4X[25X>[125X [27X                [ [ 1, 0, 0 ], [ 0, 1, 0 ] ], c );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xgamma := VectorSpaceMorphism( c,[127X[104X
    [4X[25X>[125X [27X                 [ [ 0, 1, 1 ], [ 1, 0, 1 ], [ 1, 1, 0 ] ], c );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27XIsCongruentForMorphisms([127X[104X
    [4X[25X>[125X [27X    TensorProductOnMorphisms( alpha, beta ),[127X[104X
    [4X[25X>[125X [27X    TensorProductOnMorphisms( beta, alpha )[127X[104X
    [4X[25X>[125X [27X);[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[25Xgap>[125X [27XIsCongruentForMorphisms([127X[104X
    [4X[25X>[125X [27X    AssociatorRightToLeft( a, b, c ),[127X[104X
    [4X[25X>[125X [27X    IdentityMorphism( TensorProductOnObjects( a, TensorProductOnObjects( b, c ) ) )[127X[104X
    [4X[25X>[125X [27X);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIsCongruentForMorphisms([127X[104X
    [4X[25X>[125X [27X    gamma,[127X[104X
    [4X[25X>[125X [27X    LambdaElimination( c, c, LambdaIntroduction( gamma ) )[127X[104X
    [4X[25X>[125X [27X);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIsZeroForMorphisms( TraceMap( gamma ) );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIsCongruentForMorphisms([127X[104X
    [4X[25X>[125X [27X    RankMorphism( DirectSum( a, b ) ),[127X[104X
    [4X[25X>[125X [27X    RankMorphism( c )[127X[104X
    [4X[25X>[125X [27X);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIsCongruentForMorphisms([127X[104X
    [4X[25X>[125X [27X    Braiding( b, c ),[127X[104X
    [4X[25X>[125X [27X    IdentityMorphism( TensorProductOnObjects( b, c ) )[127X[104X
    [4X[25X>[125X [27X);[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[25Xgap>[125X [27XIsCongruentForMorphisms([127X[104X
    [4X[25X>[125X [27X    PreCompose( Braiding( b, c ), Braiding( c, b ) ),[127X[104X
    [4X[25X>[125X [27X    IdentityMorphism( TensorProductOnObjects( b, c ) )[127X[104X
    [4X[25X>[125X [27X);[127X[104X
    [4X[28Xtrue[128X[104X
  [4X[32X[104X
  
  
  [1X2.7 [33X[0;0YMorphismFromSourceToPushout and MorphismFromFiberProductToSink[133X[101X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xfield := HomalgFieldOfRationals( );;[127X[104X
    [4X[25Xgap>[125X [27Xvec := MatrixCategory( field );;[127X[104X
    [4X[25Xgap>[125X [27XA := MatrixCategoryObject( vec, 3 );;[127X[104X
    [4X[25Xgap>[125X [27XB := MatrixCategoryObject( vec, 2 );;[127X[104X
    [4X[25Xgap>[125X [27Xalpha := VectorSpaceMorphism( B, HomalgMatrix( [ [ 1, -1, 1 ], [ 1, 1, 1 ] ], 2, 3, field ), A );;[127X[104X
    [4X[25Xgap>[125X [27Xbeta := VectorSpaceMorphism( B, HomalgMatrix( [ [ 1, 2, 1 ], [ 2, 1, 1 ] ], 2, 3, field ), A );;[127X[104X
    [4X[25Xgap>[125X [27Xm := MorphismFromFiberProductToSink( [ alpha, beta ] );;[127X[104X
    [4X[25Xgap>[125X [27XIsCongruentForMorphisms([127X[104X
    [4X[25X>[125X [27X    m,[127X[104X
    [4X[25X>[125X [27X    PreCompose( ProjectionInFactorOfFiberProduct( [ alpha, beta ], 1 ), alpha )[127X[104X
    [4X[25X>[125X [27X);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIsCongruentForMorphisms([127X[104X
    [4X[25X>[125X [27X    m,[127X[104X
    [4X[25X>[125X [27X    PreCompose( ProjectionInFactorOfFiberProduct( [ alpha, beta ], 2 ), beta )[127X[104X
    [4X[25X>[125X [27X);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIsCongruentForMorphisms([127X[104X
    [4X[25X>[125X [27XMorphismFromKernelObjectToSink( alpha ),[127X[104X
    [4X[25X>[125X [27X    PreCompose( KernelEmbedding( alpha ), alpha )[127X[104X
    [4X[25X>[125X [27X);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xalpha_p := DualOnMorphisms( alpha );;[127X[104X
    [4X[25Xgap>[125X [27Xbeta_p := DualOnMorphisms( beta );;[127X[104X
    [4X[25Xgap>[125X [27Xm_p := MorphismFromSourceToPushout( [ alpha_p, beta_p ] );;[127X[104X
    [4X[25Xgap>[125X [27XIsCongruentForMorphisms([127X[104X
    [4X[25X>[125X [27X    m_p,[127X[104X
    [4X[25X>[125X [27X    PreCompose( alpha_p, InjectionOfCofactorOfPushout( [ alpha_p, beta_p ], 1 ) )[127X[104X
    [4X[25X>[125X [27X);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIsCongruentForMorphisms([127X[104X
    [4X[25X>[125X [27X    m_p,[127X[104X
    [4X[25X>[125X [27X    PreCompose( beta_p, InjectionOfCofactorOfPushout( [ alpha_p, beta_p ], 2 ) )[127X[104X
    [4X[25X>[125X [27X);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIsCongruentForMorphisms([127X[104X
    [4X[25X>[125X [27X    MorphismFromSourceToCokernelObject( alpha_p ),[127X[104X
    [4X[25X>[125X [27X    PreCompose( alpha_p, CokernelProjection( alpha_p ) )[127X[104X
    [4X[25X>[125X [27X);[127X[104X
    [4X[28Xtrue[128X[104X
  [4X[32X[104X
  
  
  [1X2.8 [33X[0;0YOpposite category[133X[101X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XLoadPackage( "LinearAlgebraForCAP", ">= 2024.01-04", false );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XQQ := HomalgFieldOfRationals();;[127X[104X
    [4X[25Xgap>[125X [27Xvec := MatrixCategory( QQ );;[127X[104X
    [4X[25Xgap>[125X [27Xop := Opposite( vec );;[127X[104X
    [4X[25Xgap>[125X [27XPerform( ListKnownCategoricalProperties( op ), Display );[127X[104X
    [4X[28XIsAbCategory[128X[104X
    [4X[28XIsAbelianCategory[128X[104X
    [4X[28XIsAbelianCategoryWithEnoughInjectives[128X[104X
    [4X[28XIsAbelianCategoryWithEnoughProjectives[128X[104X
    [4X[28XIsAdditiveCategory[128X[104X
    [4X[28XIsAdditiveMonoidalCategory[128X[104X
    [4X[28XIsBraidedMonoidalCategory[128X[104X
    [4X[28XIsCategoryWithCoequalizers[128X[104X
    [4X[28XIsCategoryWithCokernels[128X[104X
    [4X[28XIsCategoryWithEqualizers[128X[104X
    [4X[28XIsCategoryWithInitialObject[128X[104X
    [4X[28XIsCategoryWithKernels[128X[104X
    [4X[28XIsCategoryWithTerminalObject[128X[104X
    [4X[28XIsCategoryWithZeroObject[128X[104X
    [4X[28XIsClosedMonoidalCategory[128X[104X
    [4X[28XIsCoclosedMonoidalCategory[128X[104X
    [4X[28XIsEnrichedOverCommutativeRegularSemigroup[128X[104X
    [4X[28XIsEquippedWithHomomorphismStructure[128X[104X
    [4X[28XIsLinearCategoryOverCommutativeRing[128X[104X
    [4X[28XIsLinearCategoryOverCommutativeRingWithFinitelyGeneratedFreeExternalHoms[128X[104X
    [4X[28XIsMonoidalCategory[128X[104X
    [4X[28XIsPreAbelianCategory[128X[104X
    [4X[28XIsRigidSymmetricClosedMonoidalCategory[128X[104X
    [4X[28XIsRigidSymmetricCoclosedMonoidalCategory[128X[104X
    [4X[28XIsSkeletalCategory[128X[104X
    [4X[28XIsStrictMonoidalCategory[128X[104X
    [4X[28XIsSymmetricClosedMonoidalCategory[128X[104X
    [4X[28XIsSymmetricCoclosedMonoidalCategory[128X[104X
    [4X[28XIsSymmetricMonoidalCategory[128X[104X
    [4X[25Xgap>[125X [27XV1 := Opposite( TensorUnit( vec ) );;[127X[104X
    [4X[25Xgap>[125X [27XV2 := DirectSum( V1, V1 );;[127X[104X
    [4X[25Xgap>[125X [27XV3 := DirectSum( V1, V2 );;[127X[104X
    [4X[25Xgap>[125X [27XV4 := DirectSum( V1, V3 );;[127X[104X
    [4X[25Xgap>[125X [27XV5 := DirectSum( V1, V4 );;[127X[104X
    [4X[25Xgap>[125X [27XIsWellDefined( MorphismBetweenDirectSums( op, [ ], [ ], [ V1 ] ) );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIsWellDefined( MorphismBetweenDirectSums( op, [ V1 ], [ [ ] ], [ ] ) );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xalpha13 := InjectionOfCofactorOfDirectSum( [ V1, V2 ], 1 );;[127X[104X
    [4X[25Xgap>[125X [27Xalpha14 := InjectionOfCofactorOfDirectSum( [ V1, V2, V1 ], 3 );;[127X[104X
    [4X[25Xgap>[125X [27Xalpha15 := InjectionOfCofactorOfDirectSum( [ V2, V1, V2 ], 2 );;[127X[104X
    [4X[25Xgap>[125X [27Xalpha23 := InjectionOfCofactorOfDirectSum( [ V2, V1 ], 1 );;[127X[104X
    [4X[25Xgap>[125X [27Xalpha24 := InjectionOfCofactorOfDirectSum( [ V1, V2, V1 ], 2 );;[127X[104X
    [4X[25Xgap>[125X [27Xalpha25 := InjectionOfCofactorOfDirectSum( [ V2, V2, V1 ], 1 );;[127X[104X
    [4X[25Xgap>[125X [27Xmat := [[127X[104X
    [4X[25X>[125X [27X    [ alpha13, alpha14, alpha15 ],[127X[104X
    [4X[25X>[125X [27X    [ alpha23, alpha24, alpha25 ][127X[104X
    [4X[25X>[125X [27X];;[127X[104X
    [4X[25Xgap>[125X [27Xmor := MorphismBetweenDirectSums( mat );;[127X[104X
    [4X[25Xgap>[125X [27XIsWellDefined( mor );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIsWellDefined( Opposite( mor ) );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIsCongruentForMorphisms([127X[104X
    [4X[25X>[125X [27X    UniversalMorphismFromImage( mor, [ CoastrictionToImage( mor ), ImageEmbedding( mor ) ] ),[127X[104X
    [4X[25X>[125X [27X    IdentityMorphism( ImageObject( mor ) )[127X[104X
    [4X[25X>[125X [27X);[127X[104X
    [4X[28Xtrue[128X[104X
  [4X[32X[104X
  
  
  [1X2.9 [33X[0;0YPreComposeList and PostComposeList[133X[101X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xfield := HomalgFieldOfRationals( );;[127X[104X
    [4X[25Xgap>[125X [27Xvec := MatrixCategory( field );;[127X[104X
    [4X[25Xgap>[125X [27XA := MatrixCategoryObject( vec, 1 );;[127X[104X
    [4X[25Xgap>[125X [27XB := MatrixCategoryObject( vec, 2 );;[127X[104X
    [4X[25Xgap>[125X [27XC := MatrixCategoryObject( vec, 3 );;[127X[104X
    [4X[25Xgap>[125X [27Xalpha := VectorSpaceMorphism( A, HomalgMatrix( [ [ 1, 0, 0 ] ], 1, 3, field ), C );;[127X[104X
    [4X[25Xgap>[125X [27Xbeta := VectorSpaceMorphism( C, HomalgMatrix( [ [ 1, 0 ], [ 1, 1 ], [ 1, 2 ] ], 3, 2, field ), B );;[127X[104X
    [4X[25Xgap>[125X [27XIsCongruentForMorphisms( PreCompose( alpha, beta ), PostCompose( beta, alpha ) );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIsCongruentForMorphisms( PreComposeList( A, [ ], A ), IdentityMorphism( A ) );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIsCongruentForMorphisms( PreComposeList( A, [ alpha ], C ), alpha );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIsCongruentForMorphisms( PreComposeList( A, [ alpha, beta ], B ), PreCompose( alpha, beta ) );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIsCongruentForMorphisms( PostComposeList( A, [ ], A ), IdentityMorphism( A ) );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIsCongruentForMorphisms( PostComposeList( A, [ alpha ], C ), alpha );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIsCongruentForMorphisms( PostComposeList( A, [ beta, alpha ], B ), PostCompose( beta, alpha ) );[127X[104X
    [4X[28Xtrue[128X[104X
  [4X[32X[104X
  
  
  [1X2.10 [33X[0;0YSplit epi summand[133X[101X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XLoadPackage( "LinearAlgebraForCAP", false );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XQ := HomalgFieldOfRationals();;[127X[104X
    [4X[25Xgap>[125X [27XQmat := MatrixCategory( Q );;[127X[104X
    [4X[25Xgap>[125X [27Xa := MatrixCategoryObject( Qmat, 3 );;[127X[104X
    [4X[25Xgap>[125X [27Xb := MatrixCategoryObject( Qmat, 4 );;[127X[104X
    [4X[25Xgap>[125X [27Xhomalg_matrix := HomalgMatrix( [ [ 1, 0, 0, 0 ],[127X[104X
    [4X[25X>[125X [27X                                  [ 0, 1, 0, -1 ],[127X[104X
    [4X[25X>[125X [27X                                  [ -1, 0, 2, 1 ] ], 3, 4, Q );;[127X[104X
    [4X[25Xgap>[125X [27Xalpha := VectorSpaceMorphism( a, homalg_matrix, b );;[127X[104X
    [4X[25Xgap>[125X [27Xbeta := SomeReductionBySplitEpiSummand( alpha );;[127X[104X
    [4X[25Xgap>[125X [27XIsWellDefinedForMorphisms( beta );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XDimension( Source( beta ) );[127X[104X
    [4X[28X0[128X[104X
    [4X[25Xgap>[125X [27XDimension( Range( beta ) );[127X[104X
    [4X[28X1[128X[104X
    [4X[25Xgap>[125X [27Xgamma := SomeReductionBySplitEpiSummand_MorphismFromInputRange( alpha );;[127X[104X
    [4X[25Xgap>[125X [27XDisplay( EntriesOfHomalgMatrixAsListList( UnderlyingMatrix( gamma ) ) );[127X[104X
    [4X[28X[ [ 0 ], [ 1 ], [ -1/2 ], [ 1 ] ][128X[104X
  [4X[32X[104X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27X# @drop_example_in_Julia: differences in the output of (Safe)RightDivide, see https://github.com/homalg-project/MatricesForHomalg.jl/issues/50[127X[104X
    [4X[25X>[125X [27Xdelta := SomeReductionBySplitEpiSummand_MorphismToInputRange( alpha );;[127X[104X
    [4X[25Xgap>[125X [27XDisplay( EntriesOfHomalgMatrixAsListList( UnderlyingMatrix( delta ) ) );[127X[104X
    [4X[28X[ [ 0, 1, 0, 0 ] ][128X[104X
  [4X[32X[104X
  
  
  [1X2.11 [33X[0;0YKernel[133X[101X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XQ := HomalgFieldOfRationals();;[127X[104X
    [4X[25Xgap>[125X [27Xvec := MatrixCategory( Q );;[127X[104X
    [4X[25Xgap>[125X [27XV := MatrixCategoryObject( vec, 2 );[127X[104X
    [4X[28X<A vector space object over Q of dimension 2>[128X[104X
    [4X[25Xgap>[125X [27XW := MatrixCategoryObject( vec, 3 );[127X[104X
    [4X[28X<A vector space object over Q of dimension 3>[128X[104X
    [4X[25Xgap>[125X [27Xalpha := VectorSpaceMorphism( V, [ [ 1, 1, 1 ], [ -1, -1, -1 ] ], W );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xk := KernelObject( alpha );[127X[104X
    [4X[28X<A vector space object over Q of dimension 1>[128X[104X
    [4X[25Xgap>[125X [27XT := MatrixCategoryObject( vec, 2 );[127X[104X
    [4X[28X<A vector space object over Q of dimension 2>[128X[104X
    [4X[25Xgap>[125X [27Xtau := VectorSpaceMorphism( T, [ [ 2, 2 ], [ 2, 2 ] ], V );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xk_lift := KernelLift( alpha, tau );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27XHasKernelEmbedding( alpha );[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[25Xgap>[125X [27XKernelEmbedding( alpha );[127X[104X
    [4X[28X<A split monomorphism in Category of matrices over Q>[128X[104X
  [4X[32X[104X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XQ := HomalgFieldOfRationals();;[127X[104X
    [4X[25Xgap>[125X [27Xvec := MatrixCategory( Q );;[127X[104X
    [4X[25Xgap>[125X [27XV := MatrixCategoryObject( vec, 2 );[127X[104X
    [4X[28X<A vector space object over Q of dimension 2>[128X[104X
    [4X[25Xgap>[125X [27XW := MatrixCategoryObject( vec, 3 );[127X[104X
    [4X[28X<A vector space object over Q of dimension 3>[128X[104X
    [4X[25Xgap>[125X [27Xalpha := VectorSpaceMorphism( V, [ [ 1, 1, 1 ], [ -1, -1, -1 ] ], W );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xk := KernelObject( alpha );[127X[104X
    [4X[28X<A vector space object over Q of dimension 1>[128X[104X
    [4X[25Xgap>[125X [27XT := MatrixCategoryObject( vec, 2 );[127X[104X
    [4X[28X<A vector space object over Q of dimension 2>[128X[104X
    [4X[25Xgap>[125X [27Xtau := VectorSpaceMorphism( T, [ [ 2, 2 ], [ 2, 2 ] ], V );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xk_lift := KernelLift( alpha, tau );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27XHasKernelEmbedding( alpha );[127X[104X
    [4X[28Xfalse[128X[104X
  [4X[32X[104X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XQ := HomalgFieldOfRationals();;[127X[104X
    [4X[25Xgap>[125X [27Xvec := MatrixCategory( Q );;[127X[104X
    [4X[25Xgap>[125X [27XV := MatrixCategoryObject( vec, 2 );[127X[104X
    [4X[28X<A vector space object over Q of dimension 2>[128X[104X
    [4X[25Xgap>[125X [27XW := MatrixCategoryObject( vec, 3 );[127X[104X
    [4X[28X<A vector space object over Q of dimension 3>[128X[104X
    [4X[25Xgap>[125X [27Xalpha := VectorSpaceMorphism( V, [ [ 1, 1, 1 ], [ -1, -1, -1 ] ], W );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xk := KernelObject( alpha );[127X[104X
    [4X[28X<A vector space object over Q of dimension 1>[128X[104X
    [4X[25Xgap>[125X [27Xk_emb := KernelEmbedding( alpha );[127X[104X
    [4X[28X<A split monomorphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27XIsEqualForObjects( Source( k_emb ), k );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XV := MatrixCategoryObject( vec, 2 );[127X[104X
    [4X[28X<A vector space object over Q of dimension 2>[128X[104X
    [4X[25Xgap>[125X [27XW := MatrixCategoryObject( vec, 3 );[127X[104X
    [4X[28X<A vector space object over Q of dimension 3>[128X[104X
    [4X[25Xgap>[125X [27Xbeta := VectorSpaceMorphism( V, [ [ 1, 1, 1 ], [ -1, -1, -1 ] ], W );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xk_emb := KernelEmbedding( beta );[127X[104X
    [4X[28X<A split monomorphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27XIsIdenticalObj( Source( k_emb ), KernelObject( beta ) );[127X[104X
    [4X[28Xtrue[128X[104X
  [4X[32X[104X
  
  
  [1X2.12 [33X[0;0YFiberProduct[133X[101X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XQ := HomalgFieldOfRationals();;[127X[104X
    [4X[25Xgap>[125X [27Xvec := MatrixCategory( Q );;[127X[104X
    [4X[25Xgap>[125X [27XA := MatrixCategoryObject( vec, 1 );[127X[104X
    [4X[28X<A vector space object over Q of dimension 1>[128X[104X
    [4X[25Xgap>[125X [27XB := MatrixCategoryObject( vec, 2 );[127X[104X
    [4X[28X<A vector space object over Q of dimension 2>[128X[104X
    [4X[25Xgap>[125X [27XC := MatrixCategoryObject( vec, 3 );[127X[104X
    [4X[28X<A vector space object over Q of dimension 3>[128X[104X
    [4X[25Xgap>[125X [27XAtoC := VectorSpaceMorphism( A, [ [ 1, 2, 0 ] ], C );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27XBtoC := VectorSpaceMorphism( B, [ [ 1, 0, 0 ], [ 0, 1, 0 ] ], C );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27XP := FiberProduct( AtoC, BtoC );[127X[104X
    [4X[28X<A vector space object over Q of dimension 1>[128X[104X
    [4X[25Xgap>[125X [27Xp1 := ProjectionInFactorOfFiberProduct( [ AtoC, BtoC ], 1 );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
    [4X[25Xgap>[125X [27Xp2 := ProjectionInFactorOfFiberProduct( [ AtoC, BtoC ], 2 );[127X[104X
    [4X[28X<A morphism in Category of matrices over Q>[128X[104X
  [4X[32X[104X
  
  
  [1X2.13 [33X[0;0YWrapperCategory[133X[101X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XLoadPackage( "LinearAlgebraForCAP", false );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XQ := HomalgFieldOfRationals( );;[127X[104X
    [4X[25Xgap>[125X [27XQmat := MatrixCategory( Q );[127X[104X
    [4X[28XCategory of matrices over Q[128X[104X
    [4X[25Xgap>[125X [27XWrapper := WrapperCategory( Qmat, rec( ) );[127X[104X
    [4X[28XWrapperCategory( Category of matrices over Q )[128X[104X
    [4X[25Xgap>[125X [27Xmor := ZeroMorphism( ZeroObject( Wrapper ), ZeroObject( Wrapper ) );;[127X[104X
    [4X[25Xgap>[125X [27X(2 / Q) * mor;;[127X[104X
    [4X[25Xgap>[125X [27XBasisOfExternalHom( Source( mor ), Range( mor ) );;[127X[104X
    [4X[25Xgap>[125X [27XCoefficientsOfMorphism( mor );;[127X[104X
    [4X[25Xgap>[125X [27Xdistinguished_object := DistinguishedObjectOfHomomorphismStructure( Wrapper );;[127X[104X
    [4X[25Xgap>[125X [27Xobject := HomomorphismStructureOnObjects( Source( mor ), Source( mor ) );;[127X[104X
    [4X[25Xgap>[125X [27XHomomorphismStructureOnMorphisms( mor, mor );;[127X[104X
    [4X[25Xgap>[125X [27XHomomorphismStructureOnMorphismsWithGivenObjects( object, mor, mor, object );;[127X[104X
    [4X[25Xgap>[125X [27Xiota := InterpretMorphismAsMorphismFromDistinguishedObjectToHomomorphismStructure( mor );;[127X[104X
    [4X[25Xgap>[125X [27XInterpretMorphismAsMorphismFromDistinguishedObjectToHomomorphismStructureWithGivenObjects( distinguished_object, mor, object );;[127X[104X
    [4X[25Xgap>[125X [27Xbeta := InterpretMorphismFromDistinguishedObjectToHomomorphismStructureAsMorphism( Source( mor ), Range( mor ), iota );;[127X[104X
    [4X[25Xgap>[125X [27XIsCongruentForMorphisms( mor, beta );[127X[104X
    [4X[28Xtrue[128X[104X
  [4X[32X[104X
  
