Skip to content

Commit

Permalink
installed derivations for Abelian categories
Browse files Browse the repository at this point in the history
* IsomorphismFromKernelOfCokernelToImageObject
* IsomorphismFromCoimageToCokernelOfKernel
  • Loading branch information
mohamed-barakat committed Dec 19, 2022
1 parent ef9b637 commit 0af42c7
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 18 deletions.
40 changes: 40 additions & 0 deletions CAP/gap/DerivedMethods.gi
Original file line number Diff line number Diff line change
Expand Up @@ -1820,6 +1820,26 @@ AddDerivationToCAP( IsomorphismFromKernelOfCokernelToImageObject,

end : Description := "IsomorphismFromKernelOfCokernelToImageObject as the inverse of IsomorphismFromImageObjectToKernelOfCokernel" );

##
AddDerivationToCAP( IsomorphismFromKernelOfCokernelToImageObject,
[ [ ImageEmbedding, 1 ],
[ CokernelProjection, 1 ],
[ KernelEmbedding, 1 ],
[ LiftAlongMonomorphism, 1 ] ],

function( cat, mor )
local image_embedding, ker_of_coker_embedding;

image_embedding := ImageEmbedding( cat, mor );

ker_of_coker_embedding := KernelEmbedding( cat, CokernelProjection( cat, mor ) );

return LiftAlongMonomorphism( cat, image_embedding, ker_of_coker_embedding );

end : CategoryFilter := IsAbelianCategory, ##FIXME: PreAbelian?
Description := "IsomorphismFromKernelOfCokernelToImageObject as the unique lift of the kernel of the cokernel along the image embedding"
);

##
AddDerivationToCAP( IsomorphismFromImageObjectToKernelOfCokernel,

Expand Down Expand Up @@ -1875,6 +1895,26 @@ AddDerivationToCAP( IsomorphismFromCoimageToCokernelOfKernel,

end : Description := "IsomorphismFromCoimageToCokernelOfKernel as the inverse of IsomorphismFromCokernelOfKernelToCoimage" );

##
AddDerivationToCAP( IsomorphismFromCoimageToCokernelOfKernel,
[ [ CoimageProjection, 1 ],
[ KernelEmbedding, 1 ],
[ CokernelProjection, 1 ],
[ ColiftAlongEpimorphism, 1 ] ],

function( cat, mor )
local coimage_projection, coker_of_ker_projection;

coimage_projection := CoimageProjection( cat, mor );

coker_of_ker_projection := CokernelProjection( cat, KernelEmbedding( cat, mor ) );

return ColiftAlongEpimorphism( cat, coimage_projection, coker_of_ker_projection );

end : CategoryFilter := IsAbelianCategory, ##FIXME: PreAbelian?
Description := "IsomorphismFromCoimageToCokernelOfKernel as the unique colift of the cokernel of the kernel along the coimage projection"
);

##
AddDerivationToCAP( IsomorphismFromFiberProductToKernelOfDiagonalDifference,

Expand Down
10 changes: 10 additions & 0 deletions LinearAlgebraForCAP/gap/CompilerLogic.gi
Original file line number Diff line number Diff line change
Expand Up @@ -54,3 +54,13 @@ CapJitAddLogicTemplate(
needed_packages := [ [ "MatricesForHomalg", ">= 2020.05.19" ] ],
)
);

# RightDivide( B, A ) * RightDivide( A, C ) => RightDivide( B, C )
CapJitAddLogicTemplate(
rec(
variable_names := [ "A", "B", "C" ],
variable_filters := [ "IsHomalgMatrix", "IsHomalgMatrix", "IsHomalgMatrix" ],
src_template := "RightDivide( B, A ) * RightDivide( A, C )",
dst_template := "RightDivide( B, C )",
)
);
Original file line number Diff line number Diff line change
Expand Up @@ -2165,16 +2165,14 @@ end

########
function ( cat_1, C_1, alpha_1, I_1 )
local morphism_attr_1_1, deduped_2_1, deduped_3_1, deduped_4_1;
deduped_4_1 := UnderlyingRing( cat_1 );
deduped_3_1 := UnderlyingMatrix( alpha_1 );
deduped_2_1 := SyzygiesOfRows( SyzygiesOfColumns( deduped_3_1 ) );
morphism_attr_1_1 := RightDivide( HomalgIdentityMatrix( RowRankOfMatrix( deduped_3_1 ), deduped_4_1 ), RightDivide( LeftDivide( BasisOfColumns( deduped_3_1 ), deduped_3_1 ), deduped_2_1 ) * RightDivide( HomalgIdentityMatrix( NumberRows( deduped_2_1 ), deduped_4_1 ), RightDivide( BasisOfRows( deduped_3_1 ), deduped_2_1 ) ) );
local morphism_attr_1_1, deduped_2_1;
deduped_2_1 := UnderlyingMatrix( alpha_1 );
morphism_attr_1_1 := RightDivide( HomalgIdentityMatrix( RowRankOfMatrix( deduped_2_1 ), UnderlyingRing( cat_1 ) ), RightDivide( LeftDivide( BasisOfColumns( deduped_2_1 ), deduped_2_1 ), BasisOfRows( deduped_2_1 ) ) );
return CreateCapCategoryMorphismWithAttributes( cat_1, CreateCapCategoryObjectWithAttributes( cat_1, Dimension, NumberRows( morphism_attr_1_1 ) ), C_1, UnderlyingMatrix, morphism_attr_1_1 );
end
########

, 1817 : IsPrecompiledDerivation := true );
, 1512 : IsPrecompiledDerivation := true );

##
AddIsAutomorphism( cat,
Expand Down Expand Up @@ -2603,12 +2601,12 @@ end
function ( cat_1, alpha_1 )
local morphism_attr_1_1, deduped_2_1;
deduped_2_1 := UnderlyingMatrix( alpha_1 );
morphism_attr_1_1 := RightDivide( HomalgIdentityMatrix( ColumnRankOfMatrix( deduped_2_1 ), UnderlyingRing( cat_1 ) ), LeftDivide( SyzygiesOfColumns( SyzygiesOfRows( deduped_2_1 ) ), BasisOfColumns( deduped_2_1 ) ) );
morphism_attr_1_1 := LeftDivide( BasisOfColumns( deduped_2_1 ), SyzygiesOfColumns( SyzygiesOfRows( deduped_2_1 ) ) );
return CreateCapCategoryMorphismWithAttributes( cat_1, CreateCapCategoryObjectWithAttributes( cat_1, Dimension, NumberRows( morphism_attr_1_1 ) ), CreateCapCategoryObjectWithAttributes( cat_1, Dimension, NumberColumns( morphism_attr_1_1 ) ), UnderlyingMatrix, morphism_attr_1_1 );
end
########

, 808 : IsPrecompiledDerivation := true );
, 503 : IsPrecompiledDerivation := true );

##
AddIsomorphismFromCokernelOfDiagonalDifferenceToPushout( cat,
Expand Down Expand Up @@ -2984,15 +2982,14 @@ end

########
function ( cat_1, alpha_1 )
local morphism_attr_1_1, deduped_2_1, deduped_3_1;
deduped_3_1 := UnderlyingMatrix( alpha_1 );
deduped_2_1 := SyzygiesOfRows( SyzygiesOfColumns( deduped_3_1 ) );
morphism_attr_1_1 := RightDivide( HomalgIdentityMatrix( NumberRows( deduped_2_1 ), UnderlyingRing( cat_1 ) ), RightDivide( BasisOfRows( deduped_3_1 ), deduped_2_1 ) );
local morphism_attr_1_1, deduped_2_1;
deduped_2_1 := UnderlyingMatrix( alpha_1 );
morphism_attr_1_1 := RightDivide( SyzygiesOfRows( SyzygiesOfColumns( deduped_2_1 ) ), BasisOfRows( deduped_2_1 ) );
return CreateCapCategoryMorphismWithAttributes( cat_1, CreateCapCategoryObjectWithAttributes( cat_1, Dimension, NumberRows( morphism_attr_1_1 ) ), CreateCapCategoryObjectWithAttributes( cat_1, Dimension, NumberColumns( morphism_attr_1_1 ) ), UnderlyingMatrix, morphism_attr_1_1 );
end
########

, 808 : IsPrecompiledDerivation := true );
, 503 : IsPrecompiledDerivation := true );

##
AddIsomorphismFromKernelOfDiagonalDifferenceToFiberProduct( cat,
Expand Down Expand Up @@ -4139,15 +4136,14 @@ end

########
function ( cat_1, C_1, alpha_1, I_1 )
local morphism_attr_1_1, deduped_2_1, deduped_3_1;
deduped_3_1 := UnderlyingMatrix( alpha_1 );
deduped_2_1 := SyzygiesOfRows( SyzygiesOfColumns( deduped_3_1 ) );
morphism_attr_1_1 := RightDivide( LeftDivide( BasisOfColumns( deduped_3_1 ), deduped_3_1 ), deduped_2_1 ) * RightDivide( HomalgIdentityMatrix( NumberRows( deduped_2_1 ), UnderlyingRing( cat_1 ) ), RightDivide( BasisOfRows( deduped_3_1 ), deduped_2_1 ) );
local morphism_attr_1_1, deduped_2_1;
deduped_2_1 := UnderlyingMatrix( alpha_1 );
morphism_attr_1_1 := RightDivide( LeftDivide( BasisOfColumns( deduped_2_1 ), deduped_2_1 ), BasisOfRows( deduped_2_1 ) );
return CreateCapCategoryMorphismWithAttributes( cat_1, C_1, CreateCapCategoryObjectWithAttributes( cat_1, Dimension, NumberColumns( morphism_attr_1_1 ) ), UnderlyingMatrix, morphism_attr_1_1 );
end
########

, 1614 : IsPrecompiledDerivation := true );
, 1309 : IsPrecompiledDerivation := true );

##
AddMorphismFromFiberProductToSink( cat,
Expand Down

0 comments on commit 0af42c7

Please sign in to comment.