Skip to content

Commit 45fc7bb

Browse files
authored
Merge pull request #66 from mohamed-barakat/logic
Test internal logic
2 parents b68d76a + c98b767 commit 45fc7bb

File tree

6 files changed

+128
-26
lines changed

6 files changed

+128
-26
lines changed

PackageInfo.g

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ SetPackageInfo( rec(
1010

1111
PackageName := "FinSetsForCAP",
1212
Subtitle := "The elementary topos of (skeletal) finite sets",
13-
Version := "2020.11-05",
13+
Version := "2020.11-13",
1414

1515
Date := Concatenation( "01/", ~.Version{[ 6, 7 ]}, "/", ~.Version{[ 1 .. 4 ]} ),
1616
License := "GPL-2.0-or-later",
@@ -100,7 +100,7 @@ Dependencies := rec(
100100
NeededOtherPackages := [
101101
[ "GAPDoc", ">= 1.5" ],
102102
[ "CAP", ">= 2021.05-02" ],
103-
[ "Toposes", ">= 2021.11-05" ],
103+
[ "Toposes", ">= 2021.11-11" ],
104104
],
105105
SuggestedOtherPackages := [ ],
106106
ExternalConditions := [ ],

doc/Doc.autodoc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,3 +119,6 @@
119119

120120
@Subsection Skeletal topos properties
121121
@InsertChunk SkeletalTopos
122+
123+
@Subsection Skeletal Subobject Classifier
124+
@InsertChunk SkeletalSubobjectClassifier
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#! @Chunk SkeletalSubobjectClassifier
2+
3+
LoadPackage( "FinSetsForCAP" );
4+
5+
# Below we see that the internal logic
6+
# of the category SkeletalFinSets is classical logic,
7+
# i.e., the topos SkeletalFinSets is Boolean.
8+
9+
#! @Example
10+
Display( SubobjectClassifier( SkeletalFinSets ) );
11+
#! 2
12+
Display( TruthMorphismOfTrue( SkeletalFinSets ) );
13+
#! [ 1, [ 1 ], 2 ]
14+
Display( TruthMorphismOfFalse( SkeletalFinSets ) );
15+
#! [ 1, [ 2 ], 2 ]
16+
Display( TruthMorphismOfNot( SkeletalFinSets ) );
17+
#! [ 2, [ 2, 1 ], 2 ]
18+
Display( CartesianSquareOfSubobjectClassifier( SkeletalFinSets ) );
19+
#! 4
20+
Display( TruthMorphismOfAnd( SkeletalFinSets ) );
21+
#! [ 4, [ 1, 2, 2, 2 ], 2 ]
22+
Display( TruthMorphismOfOr( SkeletalFinSets ) );
23+
#! [ 4, [ 1, 1, 1, 2 ], 2 ]
24+
Display( TruthMorphismOfImplies( SkeletalFinSets ) );
25+
#! [ 4, [ 1, 2, 1, 1 ], 2 ]
26+
S := FinSet( 5 );
27+
#! <An object in SkeletalFinSets>
28+
A := FinSet( 2 );
29+
#! <An object in SkeletalFinSets>
30+
m := MapOfFinSets( A, [ 1, 5 ], S );
31+
#! <A morphism in SkeletalFinSets>
32+
Display( ClassifyingMorphismOfSubobject( m ) );
33+
#! [ 5, [ 1, 2, 2, 2, 1 ], 2 ]
34+
#! @EndExample

examples/SubobjectClassifier.g

Lines changed: 41 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,49 @@
22

33
LoadPackage( "FinSetsForCAP" );
44

5+
# Below we see that the internal logic
6+
# of the category FinSets is classical logic,
7+
# i.e., the topos FinSets is Boolean.
8+
59
#! @Example
6-
S := FinSet([1,2,3,4,5]);
10+
Display( SubobjectClassifier( FinSets ) );
11+
#! [ "true", "false" ]
12+
Display( TruthMorphismOfTrue( FinSets ) );
13+
#! [ [ "*" ], [ [ "*", "true" ] ], [ "true", "false" ] ]
14+
Display( TruthMorphismOfFalse( FinSets ) );
15+
#! [ [ "*" ], [ [ "*", "false" ] ], [ "true", "false" ] ]
16+
Display( TruthMorphismOfNot( FinSets ) );
17+
#! [ [ "true", "false" ],
18+
#! [ [ "false", "true" ], [ "true", "false" ] ],
19+
#! [ "true", "false" ] ]
20+
Display( CartesianSquareOfSubobjectClassifier( FinSets ) );
21+
#! [ [ "true", "true" ], [ "true", "false" ],
22+
#! [ "false", "true" ], [ "false", "false" ] ]
23+
Display( TruthMorphismOfAnd( FinSets ) );
24+
#! [ [ [ "true", "true" ], [ "true", "false" ],
25+
#! [ "false", "true" ], [ "false", "false" ] ],
26+
#! [ [ [ "false", "false" ], "false" ], [ [ "false", "true" ], "false" ],
27+
#! [ [ "true", "false" ], "false" ], [ [ "true", "true" ], "true" ] ],
28+
#! [ "true", "false" ] ]
29+
Display( TruthMorphismOfOr( FinSets ) );
30+
#! [ [ [ "true", "true" ], [ "true", "false" ],
31+
#! [ "false", "true" ], [ "false", "false" ] ],
32+
#! [ [ [ "false", "false" ], "false" ], [ [ "false", "true" ], "true" ],
33+
#! [ [ "true", "false" ], "true" ], [ [ "true", "true" ], "true" ] ],
34+
#! [ "true", "false" ] ]
35+
Display( TruthMorphismOfImplies( FinSets ) );
36+
#! [ [ [ "true", "true" ], [ "true", "false" ],
37+
#! [ "false", "true" ], [ "false", "false" ] ],
38+
#! [ [ [ "false", "false" ], "true" ], [ [ "false", "true" ], "true" ],
39+
#! [ [ "true", "false" ], "false" ], [ [ "true", "true" ], "true" ] ],
40+
#! [ "true", "false" ] ]
41+
S := FinSet( [ 1, 2, 3, 4, 5 ] );
742
#! <An object in FinSets>
8-
A := FinSet([1,5]);
43+
A := FinSet( [ 1, 5 ] );
944
#! <An object in FinSets>
10-
m := MapOfFinSets(A, List(AsList(A), x -> [x,x]), S);
11-
#! <A morphism in FinSets>
12-
Display(TruthMorphismOfTrue(FinSets));
13-
#! [ [ "*" ], [ [ "*", "true" ] ], [ "true", "false" ] ]
14-
Display(ClassifyingMorphismOfSubobject(m));
15-
#! [ [ 1, 2, 3, 4, 5 ], [ [ 1, "true" ], [ 2, "false" ], [ 3, "false" ],
45+
m := EmbeddingOfFinSets( A, S );
46+
#! <A monomorphism in FinSets>
47+
Display( ClassifyingMorphismOfSubobject( m ) );
48+
#! [ [ 1, 2, 3, 4, 5 ], [ [ 1, "true" ], [ 2, "false" ], [ 3, "false" ],
1649
#! [ 4, "false" ], [ 5, "true" ] ], [ "true", "false" ] ]
17-
1850
#! @EndExample

gap/FinSetsForCAP.gi

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1004,21 +1004,24 @@ end );
10041004

10051005
##
10061006
AddClassifyingMorphismOfSubobjectWithGivenSubobjectClassifier( category_of_finite_sets,
1007-
function ( category_of_finite_sets, monomorphism, omega )
1008-
local range, image, r, x;
1009-
1010-
r := [ ];
1011-
range := Range( monomorphism );
1012-
1013-
for x in range do
1014-
if x in ImageObject( monomorphism ) then
1015-
Add( r, [ x, "true" ] );
1016-
else
1017-
Add( r, [ x, "false" ] );
1018-
fi;
1019-
od;
1020-
1021-
return MapOfFinSets( range, r, omega );
1007+
function ( category_of_finite_sets, monomorphism, Omega )
1008+
local range, images;
1009+
1010+
range := Range( monomorphism );
1011+
1012+
images := List( range,
1013+
function ( x )
1014+
1015+
if x in ImageObject( monomorphism ) then
1016+
return [ x, "true" ];
1017+
fi;
1018+
1019+
return [ x, "false" ];
1020+
1021+
end );
1022+
1023+
return MapOfFinSets( range, images, Omega );
1024+
10221025
end );
10231026

10241027
end );

gap/SkeletalFinSetsForCAP.gi

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -777,6 +777,36 @@ AddCartesianEvaluationMorphismWithGivenSource( SkeletalFinSets,
777777

778778
end );
779779

780+
##
781+
AddSubobjectClassifier( SkeletalFinSets,
782+
function ( cat )
783+
784+
return FinSet( cat, 2 );
785+
786+
end );
787+
788+
##
789+
AddClassifyingMorphismOfSubobjectWithGivenSubobjectClassifier( SkeletalFinSets,
790+
function ( cat, monomorphism, Omega )
791+
local range, images;
792+
793+
range := Range( monomorphism );
794+
795+
images := List( range,
796+
function ( x )
797+
798+
if x in AsList( monomorphism ) then
799+
return 1;
800+
fi;
801+
802+
return 2;
803+
804+
end );
805+
806+
return MapOfFinSets( range, images, Omega );
807+
808+
end );
809+
780810
end );
781811

782812
##

0 commit comments

Comments
 (0)