From df9fcab6ea9459eedb5511de1516d704550c1dea Mon Sep 17 00:00:00 2001 From: Tom Kuhmichel Date: Thu, 3 Nov 2022 12:59:39 +0100 Subject: [PATCH] Introduce IsomorphismFromEqualizerToKernelOfPairwiseDifferencesOfMorphismsIntoDirectProduct And its inverse and duals --- CAP/PackageInfo.g | 2 +- .../TerminalCategoryWithMultipleObjects.g | 2 +- .../TerminalCategoryWithSingleObject.g | 2 +- CAP/gap/AddFunctions.autogen.gd | 76 +++++++++++++++++++ CAP/gap/DerivedMethods.gi | 74 ++++++++++++++++++ CAP/gap/MethodRecord.gi | 28 +++++++ CAP/gap/UniversalObjects.gd | 40 ++++++++++ .../gap/CategoryOfRows.autogen.gd | 4 + .../examples/CohP1.g | 4 +- .../MatrixCategoryPrecompiled.gi | 68 +++++++++++++++++ 10 files changed, 295 insertions(+), 5 deletions(-) diff --git a/CAP/PackageInfo.g b/CAP/PackageInfo.g index 03adb4a5bb..04b2429ec2 100644 --- a/CAP/PackageInfo.g +++ b/CAP/PackageInfo.g @@ -10,7 +10,7 @@ SetPackageInfo( rec( PackageName := "CAP", Subtitle := "Categories, Algorithms, Programming", -Version := "2022.12-13", +Version := "2022.12-14", Date := Concatenation( "01/", ~.Version{[ 6, 7 ]}, "/", ~.Version{[ 1 .. 4 ]} ), License := "GPL-2.0-or-later", diff --git a/CAP/examples/TerminalCategoryWithMultipleObjects.g b/CAP/examples/TerminalCategoryWithMultipleObjects.g index 39482815c2..2241c5ce79 100644 --- a/CAP/examples/TerminalCategoryWithMultipleObjects.g +++ b/CAP/examples/TerminalCategoryWithMultipleObjects.g @@ -10,7 +10,7 @@ T := TerminalCategoryWithMultipleObjects( ); Display( T ); #! A CAP category with name TerminalCategoryWithMultipleObjects( ): #! -#! 63 primitive operations were used to derive 282 operations for this category +#! 63 primitive operations were used to derive 286 operations for this category #! which algorithmically #! * IsCategoryWithDecidableColifts #! * IsCategoryWithDecidableLifts diff --git a/CAP/examples/TerminalCategoryWithSingleObject.g b/CAP/examples/TerminalCategoryWithSingleObject.g index 688b2a2e31..2bd5915f6d 100644 --- a/CAP/examples/TerminalCategoryWithSingleObject.g +++ b/CAP/examples/TerminalCategoryWithSingleObject.g @@ -10,7 +10,7 @@ T := TerminalCategoryWithSingleObject( ); Display( T ); #! A CAP category with name TerminalCategoryWithSingleObject( ): #! -#! 63 primitive operations were used to derive 282 operations for this category +#! 63 primitive operations were used to derive 286 operations for this category #! which algorithmically #! * IsCategoryWithDecidableColifts #! * IsCategoryWithDecidableLifts diff --git a/CAP/gap/AddFunctions.autogen.gd b/CAP/gap/AddFunctions.autogen.gd index e2d9e5426b..d02e58d48f 100644 --- a/CAP/gap/AddFunctions.autogen.gd +++ b/CAP/gap/AddFunctions.autogen.gd @@ -2422,6 +2422,25 @@ DeclareOperation( "AddIsomorphismFromCoequalizerOfCoproductDiagramToPushout", DeclareOperation( "AddIsomorphismFromCoequalizerOfCoproductDiagramToPushout", [ IsCapCategory, IsList ] ); +#! @Description +#! The arguments are a category $C$ and a function $F$. +#! This operation adds the given function $F$ +#! to the category for the basic operation `IsomorphismFromCoequalizerToCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproduct`. +#! $F: ( A, D ) \mapsto \mathtt{IsomorphismFromCoequalizerToCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproduct}(A, D)$. +#! @Returns nothing +#! @Arguments C, F +DeclareOperation( "AddIsomorphismFromCoequalizerToCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproduct", + [ IsCapCategory, IsFunction ] ); + +DeclareOperation( "AddIsomorphismFromCoequalizerToCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproduct", + [ IsCapCategory, IsFunction, IsInt ] ); + +DeclareOperation( "AddIsomorphismFromCoequalizerToCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproduct", + [ IsCapCategory, IsList, IsInt ] ); + +DeclareOperation( "AddIsomorphismFromCoequalizerToCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproduct", + [ IsCapCategory, IsList ] ); + #! @Description #! The arguments are a category $C$ and a function $F$. #! This operation adds the given function $F$ @@ -2460,6 +2479,25 @@ DeclareOperation( "AddIsomorphismFromCokernelOfDiagonalDifferenceToPushout", DeclareOperation( "AddIsomorphismFromCokernelOfDiagonalDifferenceToPushout", [ IsCapCategory, IsList ] ); +#! @Description +#! The arguments are a category $C$ and a function $F$. +#! This operation adds the given function $F$ +#! to the category for the basic operation `IsomorphismFromCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproductToCoequalizer`. +#! $F: ( A, D ) \mapsto \mathtt{IsomorphismFromCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproductToCoequalizer}(A, D)$. +#! @Returns nothing +#! @Arguments C, F +DeclareOperation( "AddIsomorphismFromCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproductToCoequalizer", + [ IsCapCategory, IsFunction ] ); + +DeclareOperation( "AddIsomorphismFromCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproductToCoequalizer", + [ IsCapCategory, IsFunction, IsInt ] ); + +DeclareOperation( "AddIsomorphismFromCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproductToCoequalizer", + [ IsCapCategory, IsList, IsInt ] ); + +DeclareOperation( "AddIsomorphismFromCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproductToCoequalizer", + [ IsCapCategory, IsList ] ); + #! @Description #! The arguments are a category $C$ and a function $F$. #! This operation adds the given function $F$ @@ -2574,6 +2612,25 @@ DeclareOperation( "AddIsomorphismFromEqualizerOfDirectProductDiagramToFiberProdu DeclareOperation( "AddIsomorphismFromEqualizerOfDirectProductDiagramToFiberProduct", [ IsCapCategory, IsList ] ); +#! @Description +#! The arguments are a category $C$ and a function $F$. +#! This operation adds the given function $F$ +#! to the category for the basic operation `IsomorphismFromEqualizerToKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProduct`. +#! $F: ( A, D ) \mapsto \mathtt{IsomorphismFromEqualizerToKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProduct}(A, D)$. +#! @Returns nothing +#! @Arguments C, F +DeclareOperation( "AddIsomorphismFromEqualizerToKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProduct", + [ IsCapCategory, IsFunction ] ); + +DeclareOperation( "AddIsomorphismFromEqualizerToKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProduct", + [ IsCapCategory, IsFunction, IsInt ] ); + +DeclareOperation( "AddIsomorphismFromEqualizerToKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProduct", + [ IsCapCategory, IsList, IsInt ] ); + +DeclareOperation( "AddIsomorphismFromEqualizerToKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProduct", + [ IsCapCategory, IsList ] ); + #! @Description #! The arguments are a category $C$ and a function $F$. #! This operation adds the given function $F$ @@ -2726,6 +2783,25 @@ DeclareOperation( "AddIsomorphismFromKernelOfDiagonalDifferenceToFiberProduct", DeclareOperation( "AddIsomorphismFromKernelOfDiagonalDifferenceToFiberProduct", [ IsCapCategory, IsList ] ); +#! @Description +#! The arguments are a category $C$ and a function $F$. +#! This operation adds the given function $F$ +#! to the category for the basic operation `IsomorphismFromKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProductToEqualizer`. +#! $F: ( A, D ) \mapsto \mathtt{IsomorphismFromKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProductToEqualizer}(A, D)$. +#! @Returns nothing +#! @Arguments C, F +DeclareOperation( "AddIsomorphismFromKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProductToEqualizer", + [ IsCapCategory, IsFunction ] ); + +DeclareOperation( "AddIsomorphismFromKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProductToEqualizer", + [ IsCapCategory, IsFunction, IsInt ] ); + +DeclareOperation( "AddIsomorphismFromKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProductToEqualizer", + [ IsCapCategory, IsList, IsInt ] ); + +DeclareOperation( "AddIsomorphismFromKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProductToEqualizer", + [ IsCapCategory, IsList ] ); + #! @Description #! The arguments are a category $C$ and a function $F$. #! This operation adds the given function $F$ diff --git a/CAP/gap/DerivedMethods.gi b/CAP/gap/DerivedMethods.gi index ac7aa09b21..a6f8362ffe 100644 --- a/CAP/gap/DerivedMethods.gi +++ b/CAP/gap/DerivedMethods.gi @@ -3588,6 +3588,80 @@ AddDerivationToCAP( MereExistenceOfSolutionOfLinearSystemInAbCategory, Description := "MereExistenceOfSolutionOfLinearSystemInAbCategory using the homomorphism structure" ); +## Final methods for Equalizer + +## +AddFinalDerivationBundle( # IsomorphismFromEqualizerToKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProduct + [ [ JointPairwiseDifferencesOfMorphismsIntoDirectProduct, 1 ], + [ KernelObject, 1 ], + [ IdentityMorphism, 1 ] ], + [ Equalizer, + EmbeddingOfEqualizer, + EmbeddingOfEqualizerWithGivenEqualizer, + UniversalMorphismIntoEqualizer, + UniversalMorphismIntoEqualizerWithGivenEqualizer, + IsomorphismFromEqualizerToKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProduct, + IsomorphismFromKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProductToEqualizer ], +[ + IsomorphismFromEqualizerToKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProduct, + function( cat, A, diagram ) + local kernel_of_pairwise_differences; + + kernel_of_pairwise_differences := KernelObject( cat, JointPairwiseDifferencesOfMorphismsIntoDirectProduct( cat, A, diagram ) ); + + return IdentityMorphism( cat, kernel_of_pairwise_differences ); + + end +], +[ + IsomorphismFromKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProductToEqualizer, + function( cat, A, diagram ) + local kernel_of_pairwise_differences; + + kernel_of_pairwise_differences := KernelObject( cat, JointPairwiseDifferencesOfMorphismsIntoDirectProduct( cat, A, diagram ) ); + + return IdentityMorphism( cat, kernel_of_pairwise_differences ); + + end +] : Description := "IsomorphismFromEqualizerToKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProduct as the identity of the kernel of the pairwise differences" ); + +## Final methods for Coequalizer + +## +AddFinalDerivationBundle( # IsomorphismFromCoequalizerToCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproduct + [ [ JointPairwiseDifferencesOfMorphismsFromCoproduct, 1 ], + [ CokernelObject, 1 ], + [ IdentityMorphism, 1 ] ], + [ Coequalizer, + ProjectionOntoCoequalizer, + ProjectionOntoCoequalizerWithGivenCoequalizer, + UniversalMorphismFromCoequalizer, + UniversalMorphismFromCoequalizerWithGivenCoequalizer, + IsomorphismFromCoequalizerToCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproduct, + IsomorphismFromCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproductToCoequalizer ], +[ + IsomorphismFromCoequalizerToCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproduct, + function( cat, A, diagram ) + local cokernel_of_pairwise_differences; + + cokernel_of_pairwise_differences := CokernelObject( cat, JointPairwiseDifferencesOfMorphismsFromCoproduct( cat, A, diagram ) ); + + return IdentityMorphism( cat, cokernel_of_pairwise_differences ); + + end +], +[ + IsomorphismFromCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproductToCoequalizer, + function( cat, A, diagram ) + local cokernel_of_pairwise_differences; + + cokernel_of_pairwise_differences := CokernelObject( cat, JointPairwiseDifferencesOfMorphismsFromCoproduct( cat, A, diagram ) ); + + return IdentityMorphism( cat, cokernel_of_pairwise_differences ); + + end +] : Description := "IsomorphismFromCoequalizerToCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproduct as the identity of the kernel of the pairwise differences" ); + ## Final methods for FiberProduct ## diff --git a/CAP/gap/MethodRecord.gi b/CAP/gap/MethodRecord.gi index 62da1bc9df..54e984cfc9 100644 --- a/CAP/gap/MethodRecord.gi +++ b/CAP/gap/MethodRecord.gi @@ -1619,6 +1619,20 @@ UniversalMorphismIntoEqualizerWithGivenEqualizer := rec( compatible_with_congruence_of_morphisms := false, ), +IsomorphismFromEqualizerToKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProduct := rec( + filter_list := [ "category", "object", "list_of_morphisms" ], + io_type := [ [ "A", "D" ], [ "E", "Delta" ] ], + return_type := "morphism", + dual_operation := "IsomorphismFromCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproductToCoequalizer", +), + +IsomorphismFromKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProductToEqualizer := rec( + filter_list := [ "category", "object", "list_of_morphisms" ], + io_type := [ [ "A", "D" ], [ "Delta", "E" ] ], + return_type := "morphism", + dual_operation := "IsomorphismFromCoequalizerToCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproduct", +), + FiberProduct := rec( filter_list := [ "category", "list_of_morphisms" ], dual_operation := "Pushout", @@ -2049,6 +2063,20 @@ UniversalMorphismFromCoequalizerWithGivenCoequalizer := rec( compatible_with_congruence_of_morphisms := false, ), +IsomorphismFromCoequalizerToCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproduct := rec( + filter_list := [ "category", "object", "list_of_morphisms" ], + io_type := [ [ "A", "D" ], [ "C", "Delta" ] ], + return_type := "morphism", + dual_operation := "IsomorphismFromKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProductToEqualizer", +), + +IsomorphismFromCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproductToCoequalizer := rec( + filter_list := [ "category", "object", "list_of_morphisms" ], + io_type := [ [ "A", "D" ], [ "Delta", "C" ] ], + return_type := "morphism", + dual_operation := "IsomorphismFromEqualizerToKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProduct", +), + Pushout := rec( filter_list := [ "category", "list_of_morphisms" ], dual_operation := "FiberProduct", diff --git a/CAP/gap/UniversalObjects.gd b/CAP/gap/UniversalObjects.gd index 23efca0beb..877ea2b4f4 100644 --- a/CAP/gap/UniversalObjects.gd +++ b/CAP/gap/UniversalObjects.gd @@ -1434,6 +1434,26 @@ DeclareOperation( "EqualizerFunctorialWithGivenEqualizers", DeclareOperation( "JointPairwiseDifferencesOfMorphismsIntoDirectProduct", [ IsCapCategoryObject, IsList ] ); +#! @Description +#! The arguments are an object A and a list of morphisms $D = ( \beta_i: A \rightarrow B )_{i = 1 \dots n}$. +#! The output is a morphism +#! $\mathrm{Equalizer}(D) \rightarrow \Delta$, +#! where $\Delta$ denotes the kernel object equalizing the morphisms $\beta_i$. +#! @Returns a morphism in $\mathrm{Hom}(\mathrm{Equalizer}(D), \Delta)$ +#! @Arguments A, D +DeclareOperation( "IsomorphismFromEqualizerToKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProduct", + [ IsCapCategoryObject, IsList ] ); + +#! @Description +#! The arguments are an object A and a list of morphisms $D = ( \beta_i: A \rightarrow B )_{i = 1 \dots n}$. +#! The output is a morphism +#! $\Delta \rightarrow \mathrm{Equalizer}(D)$, +#! where $\Delta$ denotes the kernel object equalizing the morphisms $\beta_i$. +#! @Returns a morphism in $\mathrm{Hom}(\Delta, \mathrm{Equalizer}(D))$ +#! @Arguments A, D +DeclareOperation( "IsomorphismFromKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProductToEqualizer", + [ IsCapCategoryObject, IsList ] ); + #! @Chapter Universal Objects #################################### @@ -1623,6 +1643,26 @@ DeclareOperation( "CoequalizerFunctorialWithGivenCoequalizers", DeclareOperation( "JointPairwiseDifferencesOfMorphismsFromCoproduct", [ IsCapCategoryObject, IsList ] ); +#! @Description +#! The arguments are an object A and a list of morphisms $D = ( \beta_i: B \rightarrow A )_{i = 1 \dots n}$. +#! The output is a morphism +#! $\mathrm{Coequalizer}(D) \rightarrow \Delta$, +#! where $\Delta$ denotes the cokernel object coequalizing the morphisms $\beta_i$. +#! @Returns a morphism in $\mathrm{Hom}(\mathrm{Coequalizer}(D), \Delta)$ +#! @Arguments A, D +DeclareOperation( "IsomorphismFromCoequalizerToCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproduct", + [ IsCapCategoryObject, IsList ] ); + +#! @Description +#! The arguments are an object A and a list of morphisms $D = ( \beta_i: B \rightarrow A )_{i = 1 \dots n}$. +#! The output is a morphism +#! $\Delta \rightarrow \mathrm{Coequalizer}(D)$, +#! where $\Delta$ denotes the cokernel object coequalizing the morphisms $\beta_i$. +#! @Returns a morphism in $\mathrm{Hom}(\Delta, \mathrm{Coequalizer}(D))$ +#! @Arguments A, D +DeclareOperation( "IsomorphismFromCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproductToCoequalizer", + [ IsCapCategoryObject, IsList ] ); + #! @Chapter Universal Objects #################################### diff --git a/FreydCategoriesForCAP/gap/CategoryOfRows.autogen.gd b/FreydCategoriesForCAP/gap/CategoryOfRows.autogen.gd index d964e5a5b0..6ce524ce0c 100644 --- a/FreydCategoriesForCAP/gap/CategoryOfRows.autogen.gd +++ b/FreydCategoriesForCAP/gap/CategoryOfRows.autogen.gd @@ -368,15 +368,19 @@ #! * #! * #! * +#! * #! * #! * +#! * #! * +#! * #! * #! * #! * #! * #! * #! * +#! * #! * #! * #! * diff --git a/GradedModulePresentationsForCAP/examples/CohP1.g b/GradedModulePresentationsForCAP/examples/CohP1.g index 7e1468de03..9d4fe5aab5 100644 --- a/GradedModulePresentationsForCAP/examples/CohP1.g +++ b/GradedModulePresentationsForCAP/examples/CohP1.g @@ -18,7 +18,7 @@ Display( Sgrmod ); #! A CAP category with name #! The category of graded left f.p. modules over Q[x,y] (with weights [ 1, 1 ]): #! -#! 40 primitive operations were used to derive 207 operations for this category +#! 40 primitive operations were used to derive 211 operations for this category #! which algorithmically #! * IsMonoidalCategory #! * IsAbelianCategoryWithEnoughProjectives @@ -80,7 +80,7 @@ Display( CohP1 ); #! The Serre quotient category of The category of graded left f.p. modules #! over Q[x,y] (with weights [ 1, 1 ]) by test function with name: is_artinian: #! -#! 21 primitive operations were used to derive 164 operations for this category +#! 21 primitive operations were used to derive 168 operations for this category #! which algorithmically #! * IsAbelianCategory Sh := CanonicalProjection( CohP1 ); diff --git a/LinearAlgebraForCAP/gap/precompiled_categories/MatrixCategoryPrecompiled.gi b/LinearAlgebraForCAP/gap/precompiled_categories/MatrixCategoryPrecompiled.gi index b640fee537..daaf2be544 100644 --- a/LinearAlgebraForCAP/gap/precompiled_categories/MatrixCategoryPrecompiled.gi +++ b/LinearAlgebraForCAP/gap/precompiled_categories/MatrixCategoryPrecompiled.gi @@ -2579,6 +2579,23 @@ end , 203 : IsPrecompiledDerivation := true ); + ## + AddIsomorphismFromCoequalizerToCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproduct( cat, + +######## +function ( cat_1, A_1, D_1 ) + local morphism_attr_1_1, deduped_2_1, deduped_3_1, deduped_4_1, deduped_5_1; + deduped_5_1 := Length( D_1 ); + deduped_4_1 := List( D_1, UnderlyingMatrix ); + deduped_3_1 := UnderlyingRing( cat_1 ); + deduped_2_1 := Dimension( A_1 ); + morphism_attr_1_1 := HomalgIdentityMatrix( deduped_2_1 - RowRankOfMatrix( (UnionOfRows( deduped_3_1, deduped_2_1, deduped_4_1{[ 1 .. deduped_5_1 - 1 ]} ) - UnionOfRows( deduped_3_1, deduped_2_1, deduped_4_1{[ 2 .. deduped_5_1 ]} )) ), deduped_3_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 +######## + + , 1409 : IsPrecompiledDerivation := true ); + ## AddIsomorphismFromCoimageToCokernelOfKernel( cat, @@ -2621,6 +2638,23 @@ end , 1305 : IsPrecompiledDerivation := true ); + ## + AddIsomorphismFromCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproductToCoequalizer( cat, + +######## +function ( cat_1, A_1, D_1 ) + local morphism_attr_1_1, deduped_2_1, deduped_3_1, deduped_4_1, deduped_5_1; + deduped_5_1 := Length( D_1 ); + deduped_4_1 := List( D_1, UnderlyingMatrix ); + deduped_3_1 := UnderlyingRing( cat_1 ); + deduped_2_1 := Dimension( A_1 ); + morphism_attr_1_1 := HomalgIdentityMatrix( deduped_2_1 - RowRankOfMatrix( (UnionOfRows( deduped_3_1, deduped_2_1, deduped_4_1{[ 1 .. deduped_5_1 - 1 ]} ) - UnionOfRows( deduped_3_1, deduped_2_1, deduped_4_1{[ 2 .. deduped_5_1 ]} )) ), deduped_3_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 +######## + + , 1409 : IsPrecompiledDerivation := true ); + ## AddIsomorphismFromCokernelOfKernelToCoimage( cat, @@ -2698,6 +2732,23 @@ end , 203 : IsPrecompiledDerivation := true ); + ## + AddIsomorphismFromEqualizerToKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProduct( cat, + +######## +function ( cat_1, A_1, D_1 ) + local morphism_attr_1_1, deduped_2_1, deduped_3_1, deduped_4_1, deduped_5_1; + deduped_5_1 := Length( D_1 ); + deduped_4_1 := List( D_1, UnderlyingMatrix ); + deduped_3_1 := UnderlyingRing( cat_1 ); + deduped_2_1 := Dimension( A_1 ); + morphism_attr_1_1 := HomalgIdentityMatrix( deduped_2_1 - RowRankOfMatrix( (UnionOfColumns( deduped_3_1, deduped_2_1, deduped_4_1{[ 1 .. deduped_5_1 - 1 ]} ) - UnionOfColumns( deduped_3_1, deduped_2_1, deduped_4_1{[ 2 .. deduped_5_1 ]} )) ), deduped_3_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 +######## + + , 1409 : IsPrecompiledDerivation := true ); + ## AddIsomorphismFromFiberProductToKernelOfDiagonalDifference( cat, @@ -2971,6 +3022,23 @@ end , 1305 : IsPrecompiledDerivation := true ); + ## + AddIsomorphismFromKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProductToEqualizer( cat, + +######## +function ( cat_1, A_1, D_1 ) + local morphism_attr_1_1, deduped_2_1, deduped_3_1, deduped_4_1, deduped_5_1; + deduped_5_1 := Length( D_1 ); + deduped_4_1 := List( D_1, UnderlyingMatrix ); + deduped_3_1 := UnderlyingRing( cat_1 ); + deduped_2_1 := Dimension( A_1 ); + morphism_attr_1_1 := HomalgIdentityMatrix( deduped_2_1 - RowRankOfMatrix( (UnionOfColumns( deduped_3_1, deduped_2_1, deduped_4_1{[ 1 .. deduped_5_1 - 1 ]} ) - UnionOfColumns( deduped_3_1, deduped_2_1, deduped_4_1{[ 2 .. deduped_5_1 ]} )) ), deduped_3_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 +######## + + , 1409 : IsPrecompiledDerivation := true ); + ## AddIsomorphismFromObjectToInternalCoHom( cat,