Skip to content

Commit 8630a3a

Browse files
authored
Merge pull request #1237 from TKuh/Isomorphisms
Derivations for Isomorphisms
2 parents aa8d25b + 0225924 commit 8630a3a

File tree

2 files changed

+183
-1
lines changed

2 files changed

+183
-1
lines changed

CAP/PackageInfo.g

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ SetPackageInfo( rec(
1010

1111
PackageName := "CAP",
1212
Subtitle := "Categories, Algorithms, Programming",
13-
Version := "2023.02-02",
13+
Version := "2023.02-03",
1414
Date := Concatenation( "01/", ~.Version{[ 6, 7 ]}, "/", ~.Version{[ 1 .. 4 ]} ),
1515
License := "GPL-2.0-or-later",
1616

CAP/gap/DerivedMethods.gi

Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1929,6 +1929,100 @@ AddDerivationToCAP( IsomorphismFromCoimageToCokernelOfKernel,
19291929

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

1932+
##
1933+
AddDerivationToCAP( IsomorphismFromEqualizerToKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProduct,
1934+
1935+
function( cat, A, diagram )
1936+
local joint_pairwise_differences, equalizer, equalizer_embedding;
1937+
1938+
joint_pairwise_differences := JointPairwiseDifferencesOfMorphismsIntoDirectProduct( cat, A, diagram );
1939+
1940+
equalizer := Equalizer( cat, A, diagram );
1941+
1942+
equalizer_embedding := EmbeddingOfEqualizerWithGivenEqualizer( cat, A, diagram, equalizer );
1943+
1944+
return KernelLift( cat, joint_pairwise_differences, equalizer, equalizer_embedding );
1945+
1946+
end : Description := "IsomorphismFromEqualizerToKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProduct using the universal property of the kernel" );
1947+
1948+
##
1949+
AddDerivationToCAP( IsomorphismFromKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProductToEqualizer,
1950+
1951+
function( cat, A, diagram )
1952+
local joint_pairwise_differences, kernel_object, kernel_embedding;
1953+
1954+
joint_pairwise_differences := JointPairwiseDifferencesOfMorphismsIntoDirectProduct( cat, A, diagram );
1955+
1956+
kernel_object := KernelObject( cat, joint_pairwise_differences );
1957+
1958+
kernel_embedding := KernelEmbeddingWithGivenKernelObject( cat, joint_pairwise_differences, kernel_object );
1959+
1960+
return UniversalMorphismIntoEqualizer( cat, A, diagram, kernel_object, kernel_embedding );
1961+
1962+
end : Description := "IsomorphismFromKernelOfJointPairwiseDifferencesOfMorphismsIntoDirectProductToEqualizer using the universal property of the equalizer" );
1963+
1964+
##
1965+
AddDerivationToCAP( IsomorphismFromCoequalizerToCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproduct,
1966+
1967+
function( cat, A, diagram )
1968+
local joint_pairwise_differences, cokernel_object, cokernel_proj;
1969+
1970+
joint_pairwise_differences := JointPairwiseDifferencesOfMorphismsFromCoproduct( cat, A, diagram );
1971+
1972+
cokernel_object := CokernelObject( cat, joint_pairwise_differences );
1973+
1974+
cokernel_proj := CokernelProjectionWithGivenCokernelObject( cat, joint_pairwise_differences, cokernel_object );
1975+
1976+
return UniversalMorphismFromCoequalizer( cat, A, diagram, cokernel_object, cokernel_proj );
1977+
1978+
end : Description := "IsomorphismFromCoequalizerToCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproduct using the universal property of the coequalizer" );
1979+
1980+
##
1981+
AddDerivationToCAP( IsomorphismFromCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproductToCoequalizer,
1982+
1983+
function( cat, A, diagram )
1984+
local joint_pairwise_differences, coequalizer, coequalizer_projection;
1985+
1986+
joint_pairwise_differences := JointPairwiseDifferencesOfMorphismsFromCoproduct( cat, A, diagram );
1987+
1988+
coequalizer := Coequalizer( cat, A, diagram );
1989+
1990+
coequalizer_projection := ProjectionOntoCoequalizerWithGivenCoequalizer( cat, A, diagram, coequalizer );
1991+
1992+
return CokernelColift( cat, joint_pairwise_differences, coequalizer, coequalizer_projection );
1993+
1994+
end : Description := "IsomorphismFromCokernelOfJointPairwiseDifferencesOfMorphismsFromCoproductToCoequalizer using the universal property of the cokernel" );
1995+
1996+
##
1997+
AddDerivationToCAP( IsomorphismFromFiberProductToEqualizerOfDirectProductDiagram,
1998+
[ [ DirectProduct, 1 ],
1999+
[ PreCompose, 2 ],
2000+
[ ProjectionInFactorOfDirectProductWithGivenDirectProduct, 2 ],
2001+
[ ProjectionInFactorOfFiberProductWithGivenFiberProduct, 2 ],
2002+
[ UniversalMorphismIntoDirectProductWithGivenDirectProduct, 1 ],
2003+
[ FiberProduct, 1 ],
2004+
[ UniversalMorphismIntoEqualizer, 1 ] ],
2005+
2006+
function( cat, diagram )
2007+
local sources_of_diagram, direct_product, direct_product_diagram, fiber_product, test_source, fiber_product_embedding;
2008+
2009+
sources_of_diagram := List( diagram, Source );
2010+
2011+
direct_product := DirectProduct( cat, sources_of_diagram );
2012+
2013+
direct_product_diagram := List( [ 1.. Length( sources_of_diagram ) ],
2014+
i -> PreCompose( cat, ProjectionInFactorOfDirectProductWithGivenDirectProduct( cat, sources_of_diagram, i, direct_product ), diagram[ i ] ) );
2015+
2016+
fiber_product := FiberProduct( cat, diagram );
2017+
2018+
test_source := List( [ 1 .. Length( diagram ) ], i -> ProjectionInFactorOfFiberProductWithGivenFiberProduct( cat, diagram, i, fiber_product ) );
2019+
2020+
fiber_product_embedding := UniversalMorphismIntoDirectProductWithGivenDirectProduct( cat, sources_of_diagram, fiber_product, test_source, direct_product );
2021+
2022+
return UniversalMorphismIntoEqualizer( cat, direct_product, direct_product_diagram, fiber_product, fiber_product_embedding );
2023+
2024+
end : Description := "IsomorphismFromFiberProductToEqualizerOfDirectProductDiagram using the universal property of the equalizer" );
2025+
19322026
##
19332027
AddDerivationToCAP( IsomorphismFromFiberProductToEqualizerOfDirectProductDiagram,
19342028
[ [ IsomorphismFromEqualizerOfDirectProductDiagramToFiberProduct, 1 ],
@@ -1940,6 +2034,35 @@ AddDerivationToCAP( IsomorphismFromFiberProductToEqualizerOfDirectProductDiagram
19402034

19412035
end : Description := "IsomorphismFromFiberProductToEqualizerOfDirectProductDiagram as the inverse of IsomorphismFromEqualizerOfDirectProductDiagramToFiberProduct" );
19422036

2037+
##
2038+
AddDerivationToCAP( IsomorphismFromEqualizerOfDirectProductDiagramToFiberProduct,
2039+
[ [ PreCompose, 4 ],
2040+
[ ProjectionInFactorOfDirectProductWithGivenDirectProduct, 2 ],
2041+
[ DirectProduct, 1 ],
2042+
[ Equalizer, 1 ],
2043+
[ EmbeddingOfEqualizerWithGivenEqualizer, 1 ],
2044+
[ UniversalMorphismIntoFiberProduct, 1 ] ],
2045+
2046+
function( cat, diagram )
2047+
local sources_of_diagram, direct_product, direct_product_diagram, equalizer, equalizer_embedding, equalizer_of_direct_product_diagram;
2048+
2049+
sources_of_diagram := List( diagram, Source );
2050+
2051+
direct_product := DirectProduct( cat, sources_of_diagram );
2052+
2053+
direct_product_diagram := List( [ 1.. Length( sources_of_diagram ) ],
2054+
i -> PreCompose( cat, ProjectionInFactorOfDirectProductWithGivenDirectProduct( cat, sources_of_diagram, i, direct_product ), diagram[ i ] ) );
2055+
2056+
equalizer := Equalizer( cat, direct_product, direct_product_diagram );
2057+
2058+
equalizer_embedding := EmbeddingOfEqualizerWithGivenEqualizer( cat, direct_product, direct_product_diagram, equalizer );
2059+
2060+
equalizer_of_direct_product_diagram := List( [ 1 .. Length( direct_product_diagram ) ], i -> PreCompose( cat, equalizer_embedding, direct_product_diagram[ i ] ) );
2061+
2062+
return UniversalMorphismIntoFiberProduct( cat, diagram, equalizer, equalizer_of_direct_product_diagram );
2063+
2064+
end : Description := "IsomorphismFromEqualizerOfDirectProductDiagramToFiberProduct using the universal property of the fiber product" );
2065+
19432066
##
19442067
AddDerivationToCAP( IsomorphismFromEqualizerOfDirectProductDiagramToFiberProduct,
19452068
[ [ IsomorphismFromFiberProductToEqualizerOfDirectProductDiagram, 1 ],
@@ -1951,6 +2074,35 @@ AddDerivationToCAP( IsomorphismFromEqualizerOfDirectProductDiagramToFiberProduct
19512074

19522075
end : Description := "IsomorphismFromEqualizerOfDirectProductDiagramToFiberProduct as the inverse of IsomorphismFromFiberProductToEqualizerOfDirectProductDiagram" );
19532076

2077+
##
2078+
AddDerivationToCAP( IsomorphismFromPushoutToCoequalizerOfCoproductDiagram,
2079+
[ [ Coproduct, 1 ],
2080+
[ PreCompose, 4 ],
2081+
[ InjectionOfCofactorOfCoproductWithGivenCoproduct, 2 ],
2082+
[ Coequalizer, 1 ],
2083+
[ ProjectionOntoCoequalizerWithGivenCoequalizer, 1 ],
2084+
[ UniversalMorphismFromPushout, 1 ] ],
2085+
2086+
function( cat, diagram )
2087+
local ranges_of_diagram, coproduct, coproduct_diagram, coequalizer, coequalizer_projection, coequalizer_of_coproduct_diagram;
2088+
2089+
ranges_of_diagram := List( diagram, Range );
2090+
2091+
coproduct := Coproduct( cat, ranges_of_diagram );
2092+
2093+
coproduct_diagram := List( [ 1 .. Length( ranges_of_diagram ) ],
2094+
i -> PreCompose( cat, diagram[ i ], InjectionOfCofactorOfCoproductWithGivenCoproduct( cat, ranges_of_diagram, i, coproduct ) ) );
2095+
2096+
coequalizer := Coequalizer( cat, coproduct, coproduct_diagram );
2097+
2098+
coequalizer_projection := ProjectionOntoCoequalizerWithGivenCoequalizer( cat, coproduct, coproduct_diagram, coequalizer );
2099+
2100+
coequalizer_of_coproduct_diagram := List( [ 1 .. Length( coproduct_diagram ) ], i -> PreCompose( cat, coproduct_diagram[ i ], coequalizer_projection ) );
2101+
2102+
return UniversalMorphismFromPushout( cat, diagram, coequalizer, coequalizer_of_coproduct_diagram );
2103+
2104+
end : Description := "IsomorphismFromPushoutToCoequalizerOfCoproductDiagram using the universal property of the pushout" );
2105+
19542106
##
19552107
AddDerivationToCAP( IsomorphismFromPushoutToCoequalizerOfCoproductDiagram,
19562108
[ [ IsomorphismFromCoequalizerOfCoproductDiagramToPushout , 1 ],
@@ -1962,6 +2114,36 @@ AddDerivationToCAP( IsomorphismFromPushoutToCoequalizerOfCoproductDiagram,
19622114

19632115
end : Description := "IsomorphismFromPushoutToCoequalizerOfCoproductDiagram as the inverse of IsomorphismFromCoequalizerOfCoproductDiagramToPushout" );
19642116

2117+
##
2118+
AddDerivationToCAP( IsomorphismFromCoequalizerOfCoproductDiagramToPushout,
2119+
[ [ Coproduct, 1 ],
2120+
[ PreCompose, 2 ],
2121+
[ InjectionOfCofactorOfCoproductWithGivenCoproduct, 2 ],
2122+
[ InjectionOfCofactorOfPushoutWithGivenPushout, 2 ],
2123+
[ UniversalMorphismFromCoproductWithGivenCoproduct, 1 ],
2124+
[ Pushout, 1 ],
2125+
[ UniversalMorphismFromCoequalizer, 1 ] ],
2126+
2127+
function( cat, diagram )
2128+
local ranges_of_diagram, coproduct, coproduct_diagram, pushout, test_sink, pushout_injection;
2129+
2130+
ranges_of_diagram := List( diagram, Range );
2131+
2132+
coproduct := Coproduct( cat, ranges_of_diagram );
2133+
2134+
coproduct_diagram := List( [ 1 .. Length( ranges_of_diagram ) ],
2135+
i -> PreCompose( cat, diagram[ i ], InjectionOfCofactorOfCoproductWithGivenCoproduct( cat, ranges_of_diagram, i, coproduct ) ) );
2136+
2137+
pushout := Pushout( cat, diagram );
2138+
2139+
test_sink := List( [ 1 .. Length( diagram ) ], i -> InjectionOfCofactorOfPushoutWithGivenPushout( cat, diagram, i, pushout ) );
2140+
2141+
pushout_injection := UniversalMorphismFromCoproductWithGivenCoproduct( cat, ranges_of_diagram, pushout, test_sink, coproduct );
2142+
2143+
return UniversalMorphismFromCoequalizer( cat, coproduct, coproduct_diagram, pushout, pushout_injection );
2144+
2145+
end : Description := "IsomorphismFromCoequalizerOfCoproductDiagramToPushout using the universal property of the coequalizer" );
2146+
19652147
##
19662148
AddDerivationToCAP( IsomorphismFromCoequalizerOfCoproductDiagramToPushout,
19672149
[ [ IsomorphismFromPushoutToCoequalizerOfCoproductDiagram, 1 ],

0 commit comments

Comments
 (0)