@@ -1929,6 +1929,86 @@ AddDerivationToCAP( IsomorphismFromCoimageToCokernelOfKernel,
19291929
19301930end : Description := " IsomorphismFromCoimageToCokernelOfKernel as the inverse of IsomorphismFromCokernelOfKernelToCoimage" );
19311931
1932+ # #
1933+ AddDerivationToCAP( IsomorphismFromEqualizerToKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProduct,
1934+
1935+ function ( cat, A, diagram )
1936+ local joint_pairwise_differences, equalizer_embedding;
1937+
1938+ joint_pairwise_differences := JointPairwiseDifferencesOfMorphismsIntoDirectProduct( cat, A, diagram );
1939+
1940+ equalizer_embedding := EmbeddingOfEqualizer( cat, A, diagram );
1941+
1942+ return KernelLift( cat, joint_pairwise_differences, Source( equalizer_embedding ), equalizer_embedding );
1943+
1944+ end : Description := " IsomorphismFromEqualizerToKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProduct using the universal property of the kernel" );
1945+
1946+ # #
1947+ AddDerivationToCAP( IsomorphismFromKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProductToEqualizer,
1948+
1949+ function ( cat, A, diagram )
1950+ local kernel_embedding;
1951+
1952+ kernel_embedding := KernelEmbedding( cat, JointPairwiseDifferencesOfMorphismsIntoDirectProduct( cat, A, diagram ) );
1953+
1954+ return UniversalMorphismIntoEqualizer( cat, A, diagram, Source( kernel_embedding ), kernel_embedding );
1955+
1956+ end : Description := " IsomorphismFromKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProductToEqualizer using the universal property of the equalizer" );
1957+
1958+ # #
1959+ AddDerivationToCAP( IsomorphismFromCoequalizerToCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproduct,
1960+
1961+ function ( cat, A, diagram )
1962+ local cokernel_proj;
1963+
1964+ cokernel_proj := CokernelProjection( cat, JointPairwiseDifferencesOfMorphismsFromCoproduct( cat, A, diagram ) );
1965+
1966+ return UniversalMorphismFromCoequalizer( cat, A, diagram, Range( cokernel_proj ), cokernel_proj );
1967+
1968+ end : Description := " IsomorphismFromCoequalizerToCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproduct using the universal property of the coequalizer" );
1969+
1970+ # #
1971+ AddDerivationToCAP( IsomorphismFromCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproductToCoequalizer,
1972+
1973+ function ( cat, A, diagram )
1974+ local joint_pairwise_differences, coequalizer_projection;
1975+
1976+ joint_pairwise_differences := JointPairwiseDifferencesOfMorphismsFromCoproduct( cat, A, diagram );
1977+
1978+ coequalizer_projection := ProjectionOntoCoequalizer( cat, A, diagram );
1979+
1980+ return CokernelColift( cat, joint_pairwise_differences, Range( coequalizer_projection ), coequalizer_projection );
1981+
1982+ end : Description := " IsomorphismFromCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproductToCoequalizer using the universal property of the cokernel" );
1983+
1984+ # #
1985+ AddDerivationToCAP( IsomorphismFromFiberProductToEqualizerOfDirectProductDiagram,
1986+ [ [ DirectProduct, 1 ] ,
1987+ [ PreCompose, 2 ] ,
1988+ [ ProjectionInFactorOfDirectProductWithGivenDirectProduct, 2 ] ,
1989+ [ ProjectionInFactorOfFiberProduct, 2 ] ,
1990+ [ UniversalMorphismIntoDirectProductWithGivenDirectProduct, 1 ] ,
1991+ [ FiberProduct, 1 ] ,
1992+ [ UniversalMorphismIntoEqualizer, 1 ] ] ,
1993+
1994+ function ( cat, diagram )
1995+ local sources_of_diagram, direct_product, direct_product_diagram, test_source, fiber_product_embedding;
1996+
1997+ sources_of_diagram := List( diagram, Source );
1998+
1999+ direct_product := DirectProduct( cat, sources_of_diagram );
2000+
2001+ direct_product_diagram := List( [ 1 .. Length( sources_of_diagram ) ] ,
2002+ i -> PreCompose( cat, ProjectionInFactorOfDirectProductWithGivenDirectProduct( cat, sources_of_diagram, i, direct_product ), diagram[ i ] ) );
2003+
2004+ test_source := List( [ 1 .. Length( diagram ) ] , i -> ProjectionInFactorOfFiberProduct( cat, diagram, i ) );
2005+
2006+ fiber_product_embedding := UniversalMorphismIntoDirectProductWithGivenDirectProduct( cat, sources_of_diagram, FiberProduct( cat, diagram ), test_source, direct_product );
2007+
2008+ return UniversalMorphismIntoEqualizer( cat, direct_product, direct_product_diagram, Source( fiber_product_embedding ), fiber_product_embedding );
2009+
2010+ end : Description := " IsomorphismFromFiberProductToEqualizerOfDirectProductDiagram using the universal property of the equalizer" );
2011+
19322012# #
19332013AddDerivationToCAP( IsomorphismFromFiberProductToEqualizerOfDirectProductDiagram,
19342014 [ [ IsomorphismFromEqualizerOfDirectProductDiagramToFiberProduct, 1 ] ,
@@ -1940,6 +2020,32 @@ AddDerivationToCAP( IsomorphismFromFiberProductToEqualizerOfDirectProductDiagram
19402020
19412021end : Description := " IsomorphismFromFiberProductToEqualizerOfDirectProductDiagram as the inverse of IsomorphismFromEqualizerOfDirectProductDiagramToFiberProduct" );
19422022
2023+ # #
2024+ AddDerivationToCAP( IsomorphismFromEqualizerOfDirectProductDiagramToFiberProduct,
2025+ [ [ PreCompose, 4 ] ,
2026+ [ ProjectionInFactorOfDirectProductWithGivenDirectProduct, 2 ] ,
2027+ [ DirectProduct, 1 ] ,
2028+ [ EmbeddingOfEqualizer, 1 ] ,
2029+ [ UniversalMorphismIntoFiberProduct, 1 ] ] ,
2030+
2031+ function ( cat, diagram )
2032+ local sources_of_diagram, direct_product_diagram, direct_product, equalizer_embedding, equalizer_of_direct_product_diagram;
2033+
2034+ sources_of_diagram := List( diagram, Source );
2035+
2036+ direct_product := DirectProduct( cat, sources_of_diagram );
2037+
2038+ direct_product_diagram := List( [ 1 .. Length( sources_of_diagram ) ] ,
2039+ i -> PreCompose( cat, ProjectionInFactorOfDirectProductWithGivenDirectProduct( cat, sources_of_diagram, i, direct_product ), diagram[ i ] ) );
2040+
2041+ equalizer_embedding := EmbeddingOfEqualizer( cat, direct_product, direct_product_diagram );
2042+
2043+ equalizer_of_direct_product_diagram := List( [ 1 .. Length( direct_product_diagram ) ] , i -> PreCompose( cat, equalizer_embedding, direct_product_diagram[ i ] ) );
2044+
2045+ return UniversalMorphismIntoFiberProduct( cat, diagram, Source( equalizer_embedding ), equalizer_of_direct_product_diagram );
2046+
2047+ end : Description := " IsomorphismFromEqualizerOfDirectProductDiagramToFiberProduct using the universal property of the fiber product" );
2048+
19432049# #
19442050AddDerivationToCAP( IsomorphismFromEqualizerOfDirectProductDiagramToFiberProduct,
19452051 [ [ IsomorphismFromFiberProductToEqualizerOfDirectProductDiagram, 1 ] ,
@@ -1951,6 +2057,32 @@ AddDerivationToCAP( IsomorphismFromEqualizerOfDirectProductDiagramToFiberProduct
19512057
19522058end : Description := " IsomorphismFromEqualizerOfDirectProductDiagramToFiberProduct as the inverse of IsomorphismFromFiberProductToEqualizerOfDirectProductDiagram" );
19532059
2060+ # #
2061+ AddDerivationToCAP( IsomorphismFromPushoutToCoequalizerOfCoproductDiagram,
2062+ [ [ Coproduct, 1 ] ,
2063+ [ PreCompose, 4 ] ,
2064+ [ InjectionOfCofactorOfCoproductWithGivenCoproduct, 2 ] ,
2065+ [ ProjectionOntoCoequalizer, 1 ] ,
2066+ [ UniversalMorphismFromPushout, 1 ] ] ,
2067+
2068+ function ( cat, diagram )
2069+ local ranges_of_diagram, coproduct, coproduct_diagram, coequalizer_projection, coequalizer_of_coproduct_diagram;
2070+
2071+ ranges_of_diagram := List( diagram, Range );
2072+
2073+ coproduct := Coproduct( cat, ranges_of_diagram );
2074+
2075+ coproduct_diagram := List( [ 1 .. Length( ranges_of_diagram ) ] ,
2076+ i -> PreCompose( cat, diagram[ i ] , InjectionOfCofactorOfCoproductWithGivenCoproduct( cat, ranges_of_diagram, i, coproduct ) ) );
2077+
2078+ coequalizer_projection := ProjectionOntoCoequalizer( cat, coproduct, coproduct_diagram );
2079+
2080+ coequalizer_of_coproduct_diagram := List( [ 1 .. Length( coproduct_diagram ) ] , i -> PreCompose( cat, coproduct_diagram[ i ] , coequalizer_projection ) );
2081+
2082+ return UniversalMorphismFromPushout( cat, diagram, Range( coequalizer_projection ), coequalizer_of_coproduct_diagram );
2083+
2084+ end : Description := " IsomorphismFromPushoutToCoequalizerOfCoproductDiagram using the universal property of the pushout" );
2085+
19542086# #
19552087AddDerivationToCAP( IsomorphismFromPushoutToCoequalizerOfCoproductDiagram,
19562088 [ [ IsomorphismFromCoequalizerOfCoproductDiagramToPushout , 1 ] ,
@@ -1962,6 +2094,34 @@ AddDerivationToCAP( IsomorphismFromPushoutToCoequalizerOfCoproductDiagram,
19622094
19632095end : Description := " IsomorphismFromPushoutToCoequalizerOfCoproductDiagram as the inverse of IsomorphismFromCoequalizerOfCoproductDiagramToPushout" );
19642096
2097+ # #
2098+ AddDerivationToCAP( IsomorphismFromCoequalizerOfCoproductDiagramToPushout,
2099+ [ [ Coproduct, 1 ] ,
2100+ [ PreCompose, 2 ] ,
2101+ [ InjectionOfCofactorOfCoproductWithGivenCoproduct, 2 ] ,
2102+ [ InjectionOfCofactorOfPushout, 2 ] ,
2103+ [ UniversalMorphismFromCoproductWithGivenCoproduct, 1 ] ,
2104+ [ Pushout, 1 ] ,
2105+ [ UniversalMorphismFromCoequalizer, 1 ] ] ,
2106+
2107+ function ( cat, diagram )
2108+ local ranges_of_diagram, coproduct, coproduct_diagram, test_source, pushout_injection;
2109+
2110+ ranges_of_diagram := List( diagram, Range );
2111+
2112+ coproduct := Coproduct( cat, ranges_of_diagram );
2113+
2114+ coproduct_diagram := List( [ 1 .. Length( ranges_of_diagram ) ] ,
2115+ i -> PreCompose( cat, diagram[ i ] , InjectionOfCofactorOfCoproductWithGivenCoproduct( cat, ranges_of_diagram, i, coproduct ) ) );
2116+
2117+ test_source := List( [ 1 .. Length( diagram ) ] , i -> InjectionOfCofactorOfPushout( cat, diagram, i ) );
2118+
2119+ pushout_injection := UniversalMorphismFromCoproductWithGivenCoproduct( cat, ranges_of_diagram, Pushout( cat, diagram ), test_source, coproduct );
2120+
2121+ return UniversalMorphismFromCoequalizer( cat, coproduct, coproduct_diagram, Source( pushout_injection ), pushout_injection );
2122+
2123+ end : Description := " IsomorphismFromCoequalizerOfCoproductDiagramToPushout using the universal property of the coequalizer" );
2124+
19652125# #
19662126AddDerivationToCAP( IsomorphismFromCoequalizerOfCoproductDiagramToPushout,
19672127 [ [ IsomorphismFromPushoutToCoequalizerOfCoproductDiagram, 1 ] ,
0 commit comments