Skip to content

Commit

Permalink
Merge pull request #225 from mohamed-barakat/CoimageProjection
Browse files Browse the repository at this point in the history
AddAstrictionToCoimage
  • Loading branch information
zickgraf authored Nov 6, 2023
2 parents 478e58a + 240dcdf commit 079eb91
Show file tree
Hide file tree
Showing 7 changed files with 104 additions and 57 deletions.
4 changes: 2 additions & 2 deletions PackageInfo.g
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ SetPackageInfo( rec(

PackageName := "FinSetsForCAP",
Subtitle := "The elementary topos of (skeletal) finite sets",
Version := "2023.10-02",
Version := "2023.10-03",

Date := (function ( ) if IsBound( GAPInfo.SystemEnvironment.GAP_PKG_RELEASE_DATE ) then return GAPInfo.SystemEnvironment.GAP_PKG_RELEASE_DATE; else return Concatenation( ~.Version{[ 1 .. 4 ]}, "-", ~.Version{[ 6, 7 ]}, "-01" ); fi; end)( ),
License := "GPL-2.0-or-later",
Expand Down Expand Up @@ -100,7 +100,7 @@ Dependencies := rec(
NeededOtherPackages := [
[ "CAP", ">= 2023.09-11" ],
[ "CartesianCategories", ">= 2023.08-13" ],
[ "Toposes", ">= 2023.10-01" ],
[ "Toposes", ">= 2023.10-13" ],
],
SuggestedOtherPackages := [ ],
ExternalConditions := [ ],
Expand Down
3 changes: 3 additions & 0 deletions doc/Doc.autodoc
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,9 @@
@InsertChunk SkeletalImageEmbedding
@InsertChunk SkeletalCoastrictionToImage

@Subsection Skeletal Coimage
@InsertChunk SkeletalCoimageObject

@Subsection Skeletal Preimage
@InsertChunk SkeletalPreimage

Expand Down
5 changes: 3 additions & 2 deletions examples/CoimageObject.g
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,11 @@ IsEpimorphism( phi );
#! false
IsSplitEpimorphism( phi );
#! false
iota := AstrictionToCoimage( phi );
#! <A morphism in FinSets>
pi := CoimageProjection( phi );
#! <An epimorphism in FinSets>
iota := AstrictionToCoimage( phi );
#! <A morphism in FinSets>
PreCompose( pi, iota ) = phi;
#! true

#! @EndExample
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

LoadPackage( "FinSetsForCAP", false );
#! true
LoadPackage( "CompilerForCAP", false );
LoadPackage( "CompilerForCAP", ">= 2023.10-03", false );
#! true

ReadPackage( "FinSetsForCAP", "gap/CompilerLogic.gi" );
Expand All @@ -24,6 +24,8 @@ primitive_operations :=
category_constructor( : no_precompiled_code := true ) );;
list_of_operations :=
SortedList( Concatenation( primitive_operations, [
"CoastrictionToImage",
"CoimageProjection",
"IsHomSetInhabited",
"TruthMorphismOfImplies",
#"HasPushoutComplement",
Expand Down
32 changes: 32 additions & 0 deletions examples/SkeletalCoimageObject.g
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#! @Chunk SkeletalCoimageObject

#! @Example
LoadPackage( "FinSetsForCAP", false );
#! true
m := FinSet( 3 );
#! |3|
n := FinSet( 3 );
#! |3|
phi := MapOfFinSets( m, [ 1, 0, 1 ], n );
#! |3| → |3|
I := CoimageObject( phi );
#! |2|
IsMonomorphism( phi );
#! false
IsSplitMonomorphism( phi );
#! false
IsEpimorphism( phi );
#! false
IsSplitEpimorphism( phi );
#! false
pi := CoimageProjection( phi );
#! |3| → |2|
iota := AstrictionToCoimage( phi );
#! |2| → |3|
PreCompose( pi, iota ) = phi;
#! true
Display( iota );
#! { 0, 1 } ⱶ[ 1, 0 ]→ { 0, 1, 2 }
Display( ImageEmbedding( phi ) );
#! { 0, 1 } ⱶ[ 0, 1 ]→ { 0, 1, 2 }
#! @EndExample
44 changes: 16 additions & 28 deletions gap/SkeletalFinSets.gi
Original file line number Diff line number Diff line change
Expand Up @@ -356,14 +356,6 @@ AddPreCompose( SkeletalFinSets,

end );

##
AddImageObject( SkeletalFinSets,
function ( cat, phi )

return ObjectConstructor( cat, BigInt( Length( Set( AsList( phi ) ) ) ) );

end );

## the function SKELETAL_FIN_SETS_IsEpimorphism
## has linear runtime complexity
AddIsEpimorphism( SkeletalFinSets,
Expand Down Expand Up @@ -484,36 +476,32 @@ AddColift( SkeletalFinSets,
end );

##
AddImageEmbeddingWithGivenImageObject( SkeletalFinSets,
function ( cat, phi, image )
AddImageEmbedding( SkeletalFinSets,
function ( cat, phi )
local map;

map := Set( AsList( phi ) );

return MorphismConstructor( cat, ObjectConstructor( cat, BigInt( Length( map ) ) ), map, Range( phi ) );

return MorphismConstructor( cat, image, Set( AsList( phi ) ), Range( phi ) );

end );

##
AddCoastrictionToImageWithGivenImageObject( SkeletalFinSets,
function ( cat, phi, image_object )
local G, images, s, L, l, pi;

G := AsList( phi );

images := Set( G );

s := Source( phi );

L := List( s, i -> -1 + BigInt( SafePosition( images, G[1 + i] ) ) );
AddAstrictionToCoimage( SkeletalFinSets,
function ( cat, phi )
local L, map;

pi := MorphismConstructor( cat, s, L, image_object );
L := AsList( phi );

#% CAP_JIT_DROP_NEXT_STATEMENT
Assert( 3, IsEpimorphism( cat, pi ) );
## unlike ImageObject which is a subobject of the range,
## the CoimageObject is a factor object of the source,
## and we want to retain the sorting of the source:
map := DuplicateFreeList( L );

return pi;
return MorphismConstructor( cat, ObjectConstructor( cat, BigInt( Length( map ) ) ), map, Range( phi ) );

end );


## Limits

##
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,19 @@
#
BindGlobal( "ADD_FUNCTIONS_FOR_SkeletalCategoryOfFiniteSetsWithMorphismsGivenByListsPrecompiled", function ( cat )

##
AddAstrictionToCoimage( cat,

########
function ( cat_1, alpha_1 )
local deduped_1_1;
deduped_1_1 := DuplicateFreeList( AsList( alpha_1 ) );
return CreateCapCategoryMorphismWithAttributes( cat_1, CreateCapCategoryObjectWithAttributes( cat_1, Length, BigInt( Length( deduped_1_1 ) ) ), Range( alpha_1 ), AsList, deduped_1_1 );
end
########

, 100 );

##
AddCartesianBraidingInverseWithGivenDirectProducts( cat,

Expand Down Expand Up @@ -157,21 +170,21 @@ end
, 100 );

##
AddCoastrictionToImageWithGivenImageObject( cat,
AddCoastrictionToImage( cat,

########
function ( cat_1, alpha_1, I_1 )
local hoisted_2_1, deduped_3_1, deduped_4_1;
deduped_4_1 := AsList( alpha_1 );
deduped_3_1 := Source( alpha_1 );
hoisted_2_1 := SSortedList( deduped_4_1 );
return CreateCapCategoryMorphismWithAttributes( cat_1, deduped_3_1, I_1, AsList, List( [ 0 .. Length( deduped_3_1 ) - 1 ], function ( i_2 )
return -1 + BigInt( SafePosition( hoisted_2_1, deduped_4_1[(1 + i_2)] ) );
function ( cat_1, alpha_1 )
local deduped_3_1, deduped_4_1, deduped_5_1;
deduped_5_1 := AsList( alpha_1 );
deduped_4_1 := Source( alpha_1 );
deduped_3_1 := SSortedList( deduped_5_1 );
return CreateCapCategoryMorphismWithAttributes( cat_1, deduped_4_1, CreateCapCategoryObjectWithAttributes( cat_1, Length, BigInt( Length( deduped_3_1 ) ) ), AsList, List( [ 0 .. Length( deduped_4_1 ) - 1 ], function ( x_2 )
return -1 + BigInt( SafePosition( deduped_3_1, deduped_5_1[(1 + x_2)] ) );
end ) );
end
########

, 100 );
, 202 : IsPrecompiledDerivation := true );

##
AddCoequalizer( cat,
Expand All @@ -184,6 +197,23 @@ end

, 100 );

##
AddCoimageProjection( cat,

########
function ( cat_1, alpha_1 )
local deduped_3_1, deduped_4_1, deduped_5_1;
deduped_5_1 := AsList( alpha_1 );
deduped_4_1 := Source( alpha_1 );
deduped_3_1 := DuplicateFreeList( deduped_5_1 );
return CreateCapCategoryMorphismWithAttributes( cat_1, deduped_4_1, CreateCapCategoryObjectWithAttributes( cat_1, Length, BigInt( Length( deduped_3_1 ) ) ), AsList, List( [ 0 .. Length( deduped_4_1 ) - 1 ], function ( x_2 )
return -1 + BigInt( SafePosition( deduped_3_1, deduped_5_1[(1 + x_2)] ) );
end ) );
end
########

, 202 : IsPrecompiledDerivation := true );

##
AddColift( cat,

Expand Down Expand Up @@ -345,22 +375,13 @@ end
, 100 );

##
AddImageEmbeddingWithGivenImageObject( cat,
AddImageEmbedding( cat,

########
function ( cat_1, alpha_1, I_1 )
return CreateCapCategoryMorphismWithAttributes( cat_1, I_1, Range( alpha_1 ), AsList, SSortedList( AsList( alpha_1 ) ) );
end
########

, 100 );

##
AddImageObject( cat,

########
function ( cat_1, arg2_1 )
return CreateCapCategoryObjectWithAttributes( cat_1, Length, BigInt( Length( SSortedList( AsList( arg2_1 ) ) ) ) );
function ( cat_1, alpha_1 )
local deduped_1_1;
deduped_1_1 := SSortedList( AsList( alpha_1 ) );
return CreateCapCategoryMorphismWithAttributes( cat_1, CreateCapCategoryObjectWithAttributes( cat_1, Length, BigInt( Length( deduped_1_1 ) ) ), Range( alpha_1 ), AsList, deduped_1_1 );
end
########

Expand Down Expand Up @@ -816,7 +837,7 @@ function ( cat_1, l_1, m_1 )
end
########

, 19767 : IsPrecompiledDerivation := true );
, 19464 : IsPrecompiledDerivation := true );

##
AddSomeInjectiveObject( cat,
Expand Down

0 comments on commit 079eb91

Please sign in to comment.