homalg-project / categoricaltowers Goto Github PK
View Code? Open in Web Editor NEWTowers of category constructors
License: GNU General Public License v2.0
Towers of category constructors
License: GNU General Public License v2.0
If you keep the `false`, the corresponding `tst` file can be executed directly without errors.
Originally posted by @zickgraf in #371 (comment)
The create_func_*s are not adapted to the equalizer now getting the source as an explicit argument.
This should be addressed in a future PR.
Originally posted by @mohamed-barakat in #119 (comment)
What is the purpose of the following line?
According to the documentation the record F
should contain images of the morphisms.
CategoricalTowers/Toposes/gap/ToposDerivedMethods.gi
Lines 1072 to 1097 in 2dd1e99
The list of preconditions suggests that the category cat
must have a TerminalObject, while this operation is utilized only in RangeCategoryOfHomomorphismStructure( cat )
. This hinders the use of this derivation-bundle to derive hom-structure in other categories, e.g., finite path-categories.
TruthMorphismOfTrueToSieveFunctorAndEmbedding
is needed in PreSheaves
to install:
SubobjectClassifier
TruthMorphismOfTrueWithGivenObjects
SievesOfPathsToTruth
needed to install
ClassifyingMorphismOfSubobjectWithGivenSubobjectClassifier
Error, reached the pre-set memory limit
(change it with the -o command line option) in ...
Timer sieves (stopped): started 1 times with a total runtime of 25661274 ms ( = 25661274000 μs per run)
function ( B_1 )
local hoisted_1_1, hoisted_2_1, hoisted_3_1, hoisted_4_1, hoisted_5_1, hoisted_6_1, hoisted_7_1, hoisted_8_1, hoisted_9_1, hoisted_10_1, hoisted_11_1, hoisted_12_1,
hoisted_13_1, hoisted_14_1, hoisted_15_1, hoisted_16_1, hoisted_17_1, hoisted_18_1, hoisted_19_1, hoisted_20_1, hoisted_21_1, hoisted_22_1, hoisted_23_1,
hoisted_24_1, hoisted_25_1, hoisted_26_1, hoisted_27_1, hoisted_28_1, hoisted_29_1, hoisted_30_1, hoisted_31_1, hoisted_32_1, hoisted_33_1, hoisted_34_1,
deduped_35_1, deduped_36_1, deduped_37_1, deduped_38_1, deduped_39_1, deduped_40_1, deduped_41_1, deduped_42_1, deduped_43_1, deduped_44_1;
deduped_44_1 := BasisPathsByVertexIndex( B_1 );
deduped_43_1 := RangeCategoryOfHomomorphismStructure( B_1 );
deduped_42_1 := SetOfGeneratingMorphisms( B_1 );
deduped_41_1 := SetOfObjects( B_1 );
deduped_40_1 := CreateCapCategoryObjectWithAttributes( deduped_43_1, Length, 1 );
deduped_39_1 := Length( deduped_42_1 );
deduped_38_1 := Length( deduped_41_1 );
deduped_37_1 := [ 1 .. deduped_39_1 ];
deduped_36_1 := [ 1 .. deduped_38_1 ];
hoisted_23_1 := deduped_43_1;
hoisted_21_1 := [ 1 ];
hoisted_20_1 := UnderlyingQuiverAlgebra( B_1 );
hoisted_19_1 := deduped_44_1;
hoisted_18_1 := List( deduped_41_1, function ( logic_new_func_x_2 )
return VertexIndex( UnderlyingVertex( logic_new_func_x_2 ) );
end );
hoisted_12_1 := [ 1 .. Length( deduped_36_1 ) ];
hoisted_4_1 := deduped_36_1;
hoisted_2_1 := deduped_41_1;
hoisted_1_1 := List( deduped_44_1, function ( logic_new_func_list_2 )
return List( logic_new_func_list_2, Length );
end );
hoisted_3_1 := List( deduped_41_1, function ( logic_new_func_x_2 )
local hoisted_1_2;
hoisted_1_2 := VertexIndex( UnderlyingVertex( logic_new_func_x_2 ) );
return List( hoisted_2_1, function ( logic_new_func_x_3 )
return hoisted_1_1[VertexIndex( UnderlyingVertex( logic_new_func_x_3 ) )][hoisted_1_2];
end );
end );
hoisted_11_1 := List( deduped_36_1, function ( logic_new_func_x_2 )
local hoisted_1_2;
hoisted_1_2 := hoisted_3_1[logic_new_func_x_2];
return List( hoisted_4_1, function ( logic_new_func_x_3 )
return List( hoisted_4_1, function ( logic_new_func_x_4 )
return [ hoisted_3_1[logic_new_func_x_4][logic_new_func_x_3], hoisted_1_2[logic_new_func_x_4] ];
end );
end );
end );
hoisted_6_1 := List( deduped_36_1, function ( logic_new_func_x_2 )
local hoisted_1_2;
hoisted_1_2 := hoisted_3_1[logic_new_func_x_2];
return List( hoisted_4_1, function ( logic_new_func_x_3 )
return List( hoisted_4_1, function ( logic_new_func_x_4 )
return hoisted_3_1[logic_new_func_x_4][logic_new_func_x_3] * hoisted_1_2[logic_new_func_x_4];
end );
end );
end );
hoisted_10_1 := List( deduped_36_1, function ( logic_new_func_x_2 )
local hoisted_1_2;
hoisted_1_2 := hoisted_6_1[logic_new_func_x_2];
return List( hoisted_4_1, function ( logic_new_func_x_3 )
local hoisted_1_3;
hoisted_1_3 := hoisted_1_2[logic_new_func_x_3];
return List( hoisted_4_1, function ( logic_new_func_x_4 )
return hoisted_1_3[logic_new_func_x_4];
end );
end );
end );
hoisted_22_1 := List( deduped_36_1, function ( logic_new_func_x_2 )
local hoisted_1_2, hoisted_2_2, hoisted_3_2, hoisted_4_2, hoisted_5_2, hoisted_6_2, hoisted_7_2, hoisted_8_2;
hoisted_7_2 := hoisted_11_1[logic_new_func_x_2];
hoisted_6_2 := hoisted_6_1[logic_new_func_x_2];
hoisted_5_2 := hoisted_18_1[logic_new_func_x_2];
hoisted_1_2 := hoisted_10_1[logic_new_func_x_2];
hoisted_8_2 := List( hoisted_4_1, function ( logic_new_func_x_3 )
local hoisted_1_3, hoisted_2_3, hoisted_3_3, hoisted_4_3, hoisted_5_3, deduped_6_3;
deduped_6_3 := hoisted_19_1[hoisted_18_1[logic_new_func_x_3]];
hoisted_5_3 := deduped_6_3[hoisted_5_2];
hoisted_4_3 := hoisted_7_2[logic_new_func_x_3];
hoisted_3_3 := hoisted_6_2[logic_new_func_x_3];
hoisted_2_3 := deduped_6_3;
hoisted_1_3 := hoisted_1_2[logic_new_func_x_3];
return Concatenation( List( hoisted_4_1, function ( logic_new_func_x_4 )
local hoisted_1_4, hoisted_2_4, hoisted_3_4, hoisted_4_4, hoisted_5_4, hoisted_6_4, deduped_7_4, deduped_8_4, deduped_9_4;
deduped_9_4 := hoisted_18_1[logic_new_func_x_4];
deduped_8_4 := hoisted_4_3[logic_new_func_x_4];
deduped_7_4 := [ 0 .. hoisted_3_3[logic_new_func_x_4] - 1 ];
hoisted_6_4 := hoisted_19_1[deduped_9_4][hoisted_5_2];
hoisted_4_4 := deduped_8_4[2];
hoisted_1_4 := deduped_8_4[1];
hoisted_5_4 := List( deduped_7_4, function ( i_5 )
return REM_INT( QUO_INT( i_5, hoisted_1_4 ), hoisted_4_4 );
end );
hoisted_3_4 := hoisted_2_3[deduped_9_4];
hoisted_2_4 := List( deduped_7_4, function ( i_5 )
return REM_INT( i_5, hoisted_1_4 );
end );
return List( [ 0 .. hoisted_1_3[logic_new_func_x_4] - 1 ], function ( i_5 )
local deduped_1_5;
deduped_1_5 := 1 + i_5;
return
-1
+ SafePosition( hoisted_5_3, BasisPathOfPathAlgebraBasisElement(
QuiverAlgebraElement( hoisted_20_1, hoisted_21_1, hoisted_3_4{[ (1 + hoisted_2_4[deduped_1_5]) ]} )
* QuiverAlgebraElement( hoisted_20_1, hoisted_21_1, hoisted_6_4{[ (1 + hoisted_5_4[deduped_1_5]) ]} ) ) );
end );
end ) );
end );
hoisted_3_2 := hoisted_3_1[logic_new_func_x_2];
hoisted_4_2 := List( hoisted_4_1, function ( logic_new_func_x_3 )
return hoisted_3_2[logic_new_func_x_3];
end );
hoisted_2_2 := List( hoisted_4_1, function ( logic_new_func_x_3 )
local hoisted_1_3;
hoisted_1_3 := hoisted_1_2[logic_new_func_x_3];
return Sum( List( hoisted_4_1, function ( logic_new_func_x_4 )
return hoisted_1_3[logic_new_func_x_4];
end ) );
end );
return Concatenation( List( hoisted_12_1, function ( logic_new_func_x_3 )
local hoisted_1_3, hoisted_2_3, deduped_3_3;
deduped_3_3 := Sum( hoisted_4_2{[ 1 .. logic_new_func_x_3 - 1 ]} );
hoisted_2_3 := [ deduped_3_3 .. deduped_3_3 + hoisted_4_2[logic_new_func_x_3] - 1 ];
hoisted_1_3 := hoisted_8_2[logic_new_func_x_3];
return List( [ 0 .. hoisted_2_2[logic_new_func_x_3] - 1 ], function ( i_4 )
return hoisted_2_3[1 + hoisted_1_3[(1 + i_4)]];
end );
end ) );
end );
hoisted_14_1 := deduped_38_1;
hoisted_13_1 := List( deduped_36_1, function ( logic_new_func_x_2 )
local hoisted_1_2;
hoisted_1_2 := hoisted_10_1[logic_new_func_x_2];
return Concatenation( List( hoisted_4_1, function ( logic_new_func_x_3 )
return List( hoisted_4_1, function ( logic_new_func_x_4 )
return hoisted_1_2[logic_new_func_x_4][logic_new_func_x_3];
end );
end ) );
end );
hoisted_15_1 := List( deduped_36_1, function ( logic_new_func_x_2 )
local hoisted_1_2;
hoisted_1_2 := hoisted_13_1[logic_new_func_x_2];
return Concatenation( Concatenation( List( hoisted_4_1, function ( logic_new_func_x_3 )
return List( hoisted_4_1, function ( logic_new_func_x_4 )
local deduped_1_4, deduped_2_4;
deduped_2_4 := hoisted_14_1 * (logic_new_func_x_4 - 1) + logic_new_func_x_3;
deduped_1_4 := Sum( hoisted_1_2{[ 1 .. deduped_2_4 - 1 ]} );
return [ deduped_1_4 .. deduped_1_4 + hoisted_1_2[deduped_2_4] - 1 ];
end );
end ) ) );
end );
hoisted_16_1 := List( deduped_36_1, function ( logic_new_func_x_2 )
return hoisted_15_1[logic_new_func_x_2];
end );
hoisted_7_1 := List( deduped_36_1, function ( logic_new_func_x_2 )
local hoisted_1_2;
hoisted_1_2 := hoisted_6_1[logic_new_func_x_2];
return Sum( Concatenation( List( hoisted_4_1, function ( logic_new_func_x_3 )
local hoisted_1_3;
hoisted_1_3 := hoisted_1_2[logic_new_func_x_3];
return List( hoisted_4_1, function ( logic_new_func_x_4 )
return hoisted_1_3[logic_new_func_x_4];
end );
end ) ) );
end );
hoisted_8_1 := List( deduped_36_1, function ( logic_new_func_x_2 )
return hoisted_7_1[logic_new_func_x_2];
end );
hoisted_17_1 := List( deduped_36_1, function ( logic_new_func_x_2 )
local hoisted_1_2, hoisted_2_2, hoisted_3_2, hoisted_4_2, hoisted_5_2, hoisted_6_2, hoisted_7_2, hoisted_8_2, hoisted_9_2;
hoisted_6_2 := hoisted_11_1[logic_new_func_x_2];
hoisted_5_2 := hoisted_6_1[logic_new_func_x_2];
hoisted_7_2 := List( hoisted_4_1, function ( logic_new_func_x_3 )
return Concatenation( List( hoisted_4_1, function ( logic_new_func_x_4 )
local hoisted_1_4, hoisted_2_4, deduped_3_4;
deduped_3_4 := hoisted_6_2[logic_new_func_x_4][logic_new_func_x_3];
hoisted_2_4 := deduped_3_4[2];
hoisted_1_4 := deduped_3_4[1];
return List( [ 0 .. hoisted_5_2[logic_new_func_x_4][logic_new_func_x_3] - 1 ], function ( i_5 )
return REM_INT( QUO_INT( i_5, hoisted_1_4 ), hoisted_2_4 );
end );
end ) );
end );
hoisted_3_2 := hoisted_3_1[logic_new_func_x_2];
hoisted_4_2 := List( hoisted_4_1, function ( logic_new_func_x_3 )
return hoisted_3_2[logic_new_func_x_3];
end );
hoisted_1_2 := hoisted_10_1[logic_new_func_x_2];
hoisted_2_2 := List( hoisted_4_1, function ( logic_new_func_x_3 )
return Sum( List( hoisted_4_1, function ( logic_new_func_x_4 )
return hoisted_1_2[logic_new_func_x_4][logic_new_func_x_3];
end ) );
end );
hoisted_9_2 := Concatenation( List( hoisted_12_1, function ( logic_new_func_x_3 )
local hoisted_1_3, hoisted_2_3, deduped_3_3;
deduped_3_3 := Sum( hoisted_4_2{[ 1 .. logic_new_func_x_3 - 1 ]} );
hoisted_2_3 := [ deduped_3_3 .. deduped_3_3 + hoisted_4_2[logic_new_func_x_3] - 1 ];
hoisted_1_3 := hoisted_7_2[logic_new_func_x_3];
return List( [ 0 .. hoisted_2_2[logic_new_func_x_3] - 1 ], function ( i_4 )
return hoisted_2_3[1 + hoisted_1_3[(1 + i_4)]];
end );
end ) );
hoisted_8_2 := hoisted_16_1[logic_new_func_x_2];
return List( [ 0 .. hoisted_8_1[logic_new_func_x_2] - 1 ], function ( i_3 )
return hoisted_9_2[1 + hoisted_8_2[(1 + i_3)]];
end );
end );
hoisted_9_1 := List( deduped_36_1, function ( logic_new_func_x_2 )
return hoisted_8_1[logic_new_func_x_2];
end );
hoisted_5_1 := List( deduped_36_1, function ( logic_new_func_x_2 )
local hoisted_1_2;
hoisted_1_2 := hoisted_3_1[logic_new_func_x_2];
return Sum( List( hoisted_4_1, function ( logic_new_func_x_3 )
return hoisted_1_2[logic_new_func_x_3];
end ) );
end );
deduped_35_1 := List( deduped_36_1, function ( logic_new_func_x_2 )
local hoisted_1_2, hoisted_2_2, hoisted_3_2, hoisted_4_2, hoisted_5_2, hoisted_6_2, hoisted_7_2, hoisted_8_2, hoisted_9_2, hoisted_10_2, deduped_11_2,
deduped_12_2, deduped_13_2, deduped_14_2;
deduped_14_2 := hoisted_5_1[logic_new_func_x_2];
deduped_13_2 := 2 ^ deduped_14_2;
deduped_12_2 := [ 0 .. deduped_14_2 - 1 ];
deduped_11_2 := [ 0 .. deduped_13_2 - 1 ];
hoisted_9_2 := CAP_JIT_INCOMPLETE_LOGIC( [ 0 .. deduped_14_2 ^ deduped_14_2 - 1 ][1 + deduped_14_2 * GeometricSumDiff1( deduped_14_2, deduped_14_2 )] );
hoisted_8_2 := hoisted_22_1[logic_new_func_x_2];
hoisted_7_2 := hoisted_17_1[logic_new_func_x_2];
hoisted_6_2 := hoisted_9_1[logic_new_func_x_2];
hoisted_5_2 := deduped_12_2;
hoisted_1_2 := deduped_13_2;
hoisted_4_2 := List( [ 0 .. deduped_13_2 * deduped_14_2 - 1 ], function ( i_3 )
return REM_INT( QUO_INT( i_3, 2 ^ QUO_INT( i_3, hoisted_1_2 ) ), 2 );
end );
hoisted_2_2 := deduped_14_2;
hoisted_3_2 := List( deduped_12_2, function ( logic_new_func_x_3 )
return REM_INT( logic_new_func_x_3, hoisted_2_2 );
end );
hoisted_10_2 := List( deduped_11_2, function ( i_3 )
local hoisted_1_3, hoisted_2_3, hoisted_3_3, hoisted_4_3, hoisted_5_3, hoisted_6_3, hoisted_7_3, hoisted_8_3, hoisted_9_3, deduped_10_3,
deduped_11_3, deduped_12_3, deduped_13_3;
hoisted_1_3 := List( hoisted_5_2, function ( logic_new_func_x_4 )
return hoisted_4_2[1 + (i_3 + hoisted_3_2[(1 + logic_new_func_x_4)] * hoisted_1_2)];
end );
deduped_13_3 := Filtered( hoisted_5_2, function ( x_4 )
return hoisted_1_3[1 + REM_INT( x_4, hoisted_2_2 )] = 1;
end );
deduped_12_3 := Length( deduped_13_3 );
deduped_11_3 := [ 0 .. hoisted_6_2 * deduped_12_3 - 1 ];
hoisted_2_3 := deduped_13_3;
hoisted_4_3 := List( [ 0 .. deduped_12_3 - 1 ], function ( i_4 )
return hoisted_3_2[1 + hoisted_2_3[(1 + i_4)]];
end );
hoisted_3_3 := deduped_12_3;
deduped_10_3 := Filtered( deduped_11_3, function ( x_4 )
return hoisted_7_2[1 + REM_INT( x_4, hoisted_6_2 )] = hoisted_4_3[1 + REM_INT( QUO_INT( x_4, hoisted_6_2 ), hoisted_3_3 )];
end );
hoisted_6_3 := List( deduped_11_3, function ( i_4 )
return REM_INT( i_4, hoisted_6_2 );
end );
hoisted_5_3 := deduped_10_3;
hoisted_7_3 := List( [ 0 .. Length( deduped_10_3 ) - 1 ], function ( logic_new_func_x_4 )
return hoisted_8_2[1 + hoisted_6_3[(1 + hoisted_5_3[(1 + logic_new_func_x_4)])]];
end );
hoisted_8_3 := List( hoisted_5_2, function ( x_4 )
if x_4 in hoisted_7_3 then
return 1;
else
return 0;
fi;
return;
end );
hoisted_9_3 := List( hoisted_5_2, function ( logic_new_func_x_4 )
return hoisted_8_3[1 + REM_INT( QUO_INT( hoisted_9_2, hoisted_2_2 ^ logic_new_func_x_4 ), hoisted_2_2 )];
end );
return Sum( List( hoisted_5_2, function ( k_4 )
return hoisted_9_3[(1 + k_4)] * 2 ^ k_4;
end ) );
end );
return CreateCapCategoryObjectWithAttributes( hoisted_23_1, Length, Length( Filtered( deduped_11_2, function ( x_3 )
return hoisted_10_2[1 + x_3] = x_3;
end ) ) );
end );
hoisted_34_1 := deduped_40_1;
hoisted_32_1 := [ 0, 1 ];
hoisted_30_1 := HomStructureOnBasisPaths( B_1 );
hoisted_31_1 := List( deduped_42_1, function ( logic_new_func_x_2 )
local hoisted_1_2, hoisted_2_2, hoisted_3_2, hoisted_4_2, hoisted_5_2, hoisted_6_2, deduped_7_2, deduped_8_2;
deduped_8_2 := VertexIndex( UnderlyingVertex( Range( logic_new_func_x_2 ) ) );
deduped_7_2 := VertexIndex( UnderlyingVertex( Source( logic_new_func_x_2 ) ) );
hoisted_5_2 := SafePosition( hoisted_19_1[deduped_7_2][deduped_8_2], BasisPathOfPathAlgebraBasisElement( UnderlyingQuiverAlgebraElement( logic_new_func_x_2
) ) );
hoisted_3_2 := deduped_8_2;
hoisted_1_2 := deduped_7_2;
hoisted_6_2 := List( hoisted_2_1, function ( logic_new_func_x_3 )
local hoisted_1_3, deduped_2_3, deduped_3_3;
deduped_3_3 := UnderlyingVertex( logic_new_func_x_3 );
deduped_2_3 := VertexIndex( deduped_3_3 );
hoisted_1_3 := hoisted_30_1[deduped_2_3][hoisted_1_2][deduped_2_3][hoisted_3_2][SafePosition( hoisted_19_1[deduped_2_3][deduped_2_3],
QuiverVertexAsIdentityPath( deduped_3_3 ) )][hoisted_5_2];
return List( [ 1 .. hoisted_1_1[deduped_2_3][hoisted_1_2] ], function ( phi_index_4 )
return hoisted_1_3[phi_index_4];
end );
end );
hoisted_4_2 := List( hoisted_2_1, function ( logic_new_func_x_3 )
return hoisted_1_1[VertexIndex( UnderlyingVertex( logic_new_func_x_3 ) )][hoisted_3_2];
end );
hoisted_2_2 := List( hoisted_2_1, function ( logic_new_func_x_3 )
return hoisted_1_1[VertexIndex( UnderlyingVertex( logic_new_func_x_3 ) )][hoisted_1_2];
end );
return Concatenation( List( hoisted_4_1, function ( logic_new_func_x_3 )
local hoisted_1_3, hoisted_2_3, deduped_3_3;
deduped_3_3 := Sum( hoisted_4_2{[ 1 .. logic_new_func_x_3 - 1 ]} );
hoisted_2_3 := [ deduped_3_3 .. deduped_3_3 + hoisted_4_2[logic_new_func_x_3] - 1 ];
hoisted_1_3 := hoisted_6_2[logic_new_func_x_3];
return List( [ 0 .. hoisted_2_2[logic_new_func_x_3] - 1 ], function ( i_4 )
return hoisted_2_3[1 + hoisted_1_3[(1 + i_4)]];
end );
end ) );
end );
hoisted_29_1 := List( deduped_42_1, function ( logic_new_func_x_2 )
local hoisted_1_2;
hoisted_1_2 := VertexIndex( UnderlyingVertex( Source( logic_new_func_x_2 ) ) );
return Sum( List( hoisted_2_1, function ( logic_new_func_x_3 )
return hoisted_1_1[VertexIndex( UnderlyingVertex( logic_new_func_x_3 ) )][hoisted_1_2];
end ) );
end );
hoisted_28_1 := List( deduped_42_1, function ( logic_new_func_x_2 )
local hoisted_1_2;
hoisted_1_2 := VertexIndex( UnderlyingVertex( Range( logic_new_func_x_2 ) ) );
return Sum( List( hoisted_2_1, function ( logic_new_func_x_3 )
return hoisted_1_1[VertexIndex( UnderlyingVertex( logic_new_func_x_3 ) )][hoisted_1_2];
end ) );
end );
hoisted_33_1 := List( deduped_37_1, function ( logic_new_func_x_2 )
local hoisted_1_2, hoisted_2_2, hoisted_3_2, deduped_4_2;
deduped_4_2 := hoisted_28_1[logic_new_func_x_2];
hoisted_3_2 := [ 0 .. hoisted_29_1[logic_new_func_x_2] - 1 ];
hoisted_2_2 := hoisted_31_1[logic_new_func_x_2];
hoisted_1_2 := [ 0 .. deduped_4_2 - 1 ];
return List( [ 0 .. 2 ^ deduped_4_2 - 1 ], function ( i_3 )
local hoisted_1_3, hoisted_2_3;
hoisted_1_3 := List( hoisted_1_2, function ( j_4 )
return REM_INT( QUO_INT( i_3, 2 ^ j_4 ), 2 );
end );
hoisted_2_3 := List( hoisted_3_2, function ( logic_new_func_x_4 )
return hoisted_32_1[1 + hoisted_1_3[(1 + hoisted_2_2[(1 + logic_new_func_x_4)])]];
end );
return Sum( List( hoisted_3_2, function ( k_4 )
return hoisted_2_3[(1 + k_4)] * 2 ^ k_4;
end ) );
end );
end );
hoisted_27_1 := List( deduped_36_1, function ( logic_new_func_x_2 )
local hoisted_1_2, hoisted_2_2, hoisted_3_2, hoisted_4_2, hoisted_5_2, hoisted_6_2, hoisted_7_2, hoisted_8_2, hoisted_9_2, hoisted_10_2, deduped_11_2,
deduped_12_2, deduped_13_2, deduped_14_2;
deduped_14_2 := hoisted_5_1[logic_new_func_x_2];
deduped_13_2 := 2 ^ deduped_14_2;
deduped_12_2 := [ 0 .. deduped_14_2 - 1 ];
deduped_11_2 := [ 0 .. deduped_13_2 - 1 ];
hoisted_9_2 := CAP_JIT_INCOMPLETE_LOGIC( [ 0 .. deduped_14_2 ^ deduped_14_2 - 1 ][1 + deduped_14_2 * GeometricSumDiff1( deduped_14_2, deduped_14_2 )] );
hoisted_8_2 := hoisted_22_1[logic_new_func_x_2];
hoisted_7_2 := hoisted_17_1[logic_new_func_x_2];
hoisted_6_2 := hoisted_9_1[logic_new_func_x_2];
hoisted_5_2 := deduped_12_2;
hoisted_1_2 := deduped_13_2;
hoisted_4_2 := List( [ 0 .. deduped_13_2 * deduped_14_2 - 1 ], function ( i_3 )
return REM_INT( QUO_INT( i_3, 2 ^ QUO_INT( i_3, hoisted_1_2 ) ), 2 );
end );
hoisted_2_2 := deduped_14_2;
hoisted_3_2 := List( deduped_12_2, function ( logic_new_func_x_3 )
return REM_INT( logic_new_func_x_3, hoisted_2_2 );
end );
hoisted_10_2 := List( deduped_11_2, function ( i_3 )
local hoisted_1_3, hoisted_2_3, hoisted_3_3, hoisted_4_3, hoisted_5_3, hoisted_6_3, hoisted_7_3, hoisted_8_3, hoisted_9_3, deduped_10_3,
deduped_11_3, deduped_12_3, deduped_13_3;
hoisted_1_3 := List( hoisted_5_2, function ( logic_new_func_x_4 )
return hoisted_4_2[1 + (i_3 + hoisted_3_2[(1 + logic_new_func_x_4)] * hoisted_1_2)];
end );
deduped_13_3 := Filtered( hoisted_5_2, function ( x_4 )
return hoisted_1_3[1 + REM_INT( x_4, hoisted_2_2 )] = 1;
end );
deduped_12_3 := Length( deduped_13_3 );
deduped_11_3 := [ 0 .. hoisted_6_2 * deduped_12_3 - 1 ];
hoisted_2_3 := deduped_13_3;
hoisted_4_3 := List( [ 0 .. deduped_12_3 - 1 ], function ( i_4 )
return hoisted_3_2[1 + hoisted_2_3[(1 + i_4)]];
end );
hoisted_3_3 := deduped_12_3;
deduped_10_3 := Filtered( deduped_11_3, function ( x_4 )
return hoisted_7_2[1 + REM_INT( x_4, hoisted_6_2 )] = hoisted_4_3[1 + REM_INT( QUO_INT( x_4, hoisted_6_2 ), hoisted_3_3 )];
end );
hoisted_6_3 := List( deduped_11_3, function ( i_4 )
return REM_INT( i_4, hoisted_6_2 );
end );
hoisted_5_3 := deduped_10_3;
hoisted_7_3 := List( [ 0 .. Length( deduped_10_3 ) - 1 ], function ( logic_new_func_x_4 )
return hoisted_8_2[1 + hoisted_6_3[(1 + hoisted_5_3[(1 + logic_new_func_x_4)])]];
end );
hoisted_8_3 := List( hoisted_5_2, function ( x_4 )
if x_4 in hoisted_7_3 then
return 1;
else
return 0;
fi;
return;
end );
hoisted_9_3 := List( hoisted_5_2, function ( logic_new_func_x_4 )
return hoisted_8_3[1 + REM_INT( QUO_INT( hoisted_9_2, hoisted_2_2 ^ logic_new_func_x_4 ), hoisted_2_2 )];
end );
return Sum( List( hoisted_5_2, function ( k_4 )
return hoisted_9_3[(1 + k_4)] * 2 ^ k_4;
end ) );
end );
return Filtered( deduped_11_2, function ( x_3 )
return hoisted_10_2[1 + x_3] = x_3;
end );
end );
hoisted_26_1 := List( deduped_36_1, function ( logic_new_func_x_2 )
local hoisted_1_2, hoisted_2_2, hoisted_3_2, hoisted_4_2, hoisted_5_2, hoisted_6_2, hoisted_7_2, hoisted_8_2, hoisted_9_2, hoisted_10_2, deduped_11_2,
deduped_12_2, deduped_13_2, deduped_14_2;
deduped_14_2 := hoisted_5_1[logic_new_func_x_2];
deduped_13_2 := 2 ^ deduped_14_2;
deduped_12_2 := [ 0 .. deduped_14_2 - 1 ];
deduped_11_2 := [ 0 .. deduped_13_2 - 1 ];
hoisted_9_2 := CAP_JIT_INCOMPLETE_LOGIC( [ 0 .. deduped_14_2 ^ deduped_14_2 - 1 ][1 + deduped_14_2 * GeometricSumDiff1( deduped_14_2, deduped_14_2 )] );
hoisted_8_2 := hoisted_22_1[logic_new_func_x_2];
hoisted_7_2 := hoisted_17_1[logic_new_func_x_2];
hoisted_6_2 := hoisted_9_1[logic_new_func_x_2];
hoisted_5_2 := deduped_12_2;
hoisted_1_2 := deduped_13_2;
hoisted_4_2 := List( [ 0 .. deduped_13_2 * deduped_14_2 - 1 ], function ( i_3 )
return REM_INT( QUO_INT( i_3, 2 ^ QUO_INT( i_3, hoisted_1_2 ) ), 2 );
end );
hoisted_2_2 := deduped_14_2;
hoisted_3_2 := List( deduped_12_2, function ( logic_new_func_x_3 )
return REM_INT( logic_new_func_x_3, hoisted_2_2 );
end );
hoisted_10_2 := List( deduped_11_2, function ( i_3 )
local hoisted_1_3, hoisted_2_3, hoisted_3_3, hoisted_4_3, hoisted_5_3, hoisted_6_3, hoisted_7_3, hoisted_8_3, hoisted_9_3, deduped_10_3,
deduped_11_3, deduped_12_3, deduped_13_3;
hoisted_1_3 := List( hoisted_5_2, function ( logic_new_func_x_4 )
return hoisted_4_2[1 + (i_3 + hoisted_3_2[(1 + logic_new_func_x_4)] * hoisted_1_2)];
end );
deduped_13_3 := Filtered( hoisted_5_2, function ( x_4 )
return hoisted_1_3[1 + REM_INT( x_4, hoisted_2_2 )] = 1;
end );
deduped_12_3 := Length( deduped_13_3 );
deduped_11_3 := [ 0 .. hoisted_6_2 * deduped_12_3 - 1 ];
hoisted_2_3 := deduped_13_3;
hoisted_4_3 := List( [ 0 .. deduped_12_3 - 1 ], function ( i_4 )
return hoisted_3_2[1 + hoisted_2_3[(1 + i_4)]];
end );
hoisted_3_3 := deduped_12_3;
deduped_10_3 := Filtered( deduped_11_3, function ( x_4 )
return hoisted_7_2[1 + REM_INT( x_4, hoisted_6_2 )] = hoisted_4_3[1 + REM_INT( QUO_INT( x_4, hoisted_6_2 ), hoisted_3_3 )];
end );
hoisted_6_3 := List( deduped_11_3, function ( i_4 )
return REM_INT( i_4, hoisted_6_2 );
end );
hoisted_5_3 := deduped_10_3;
hoisted_7_3 := List( [ 0 .. Length( deduped_10_3 ) - 1 ], function ( logic_new_func_x_4 )
return hoisted_8_2[1 + hoisted_6_3[(1 + hoisted_5_3[(1 + logic_new_func_x_4)])]];
end );
hoisted_8_3 := List( hoisted_5_2, function ( x_4 )
if x_4 in hoisted_7_3 then
return 1;
else
return 0;
fi;
return;
end );
hoisted_9_3 := List( hoisted_5_2, function ( logic_new_func_x_4 )
return hoisted_8_3[1 + REM_INT( QUO_INT( hoisted_9_2, hoisted_2_2 ^ logic_new_func_x_4 ), hoisted_2_2 )];
end );
return Sum( List( hoisted_5_2, function ( k_4 )
return hoisted_9_3[(1 + k_4)] * 2 ^ k_4;
end ) );
end );
return Length( Filtered( deduped_11_2, function ( x_3 )
return hoisted_10_2[1 + x_3] = x_3;
end ) );
end );
hoisted_25_1 := deduped_35_1;
hoisted_24_1 := DefiningPairOfUnderlyingQuiver( B_1 )[2];
return NTuple( 5, NTuple( 2, deduped_35_1, List( deduped_37_1, function ( m_2 )
local hoisted_1_2, hoisted_2_2, hoisted_3_2, hoisted_4_2, deduped_5_2, deduped_6_2, deduped_7_2, deduped_8_2;
deduped_8_2 := hoisted_24_1[m_2];
deduped_7_2 := 1 + deduped_8_2[1];
deduped_6_2 := 1 + deduped_8_2[2];
deduped_5_2 := [ 0 .. hoisted_26_1[deduped_6_2] - 1 ];
hoisted_4_2 := hoisted_27_1[deduped_7_2];
hoisted_2_2 := hoisted_33_1[m_2];
hoisted_1_2 := hoisted_27_1[deduped_6_2];
hoisted_3_2 := List( deduped_5_2, function ( i_3 )
return hoisted_2_2[1 + hoisted_1_2[(1 + i_3)]];
end );
return CreateCapCategoryMorphismWithAttributes( hoisted_23_1, hoisted_25_1[deduped_6_2], hoisted_25_1[deduped_7_2], AsList,
List( deduped_5_2, function ( x_3 )
return -1 + SafePosition( hoisted_4_2, hoisted_3_2[(1 + x_3)] );
end ) );
end ) ), NTuple( 2, ListWithIdenticalEntries( deduped_38_1, deduped_40_1 ), ListWithIdenticalEntries( deduped_39_1, CreateCapCategoryMorphismWithAttributes(
deduped_43_1, deduped_40_1, deduped_40_1, AsList, [ 0 ] ) ) ), NTuple( 2, List( deduped_36_1, function ( logic_new_func_x_2 )
return CreateCapCategoryObjectWithAttributes( hoisted_23_1, Length, 2 ^ hoisted_5_1[logic_new_func_x_2] );
end ), List( deduped_37_1, function ( m_2 )
local hoisted_1_2, hoisted_2_2, hoisted_3_2, deduped_4_2, deduped_5_2, deduped_6_2;
deduped_6_2 := hoisted_29_1[m_2];
deduped_5_2 := hoisted_28_1[m_2];
deduped_4_2 := 2 ^ deduped_5_2;
hoisted_3_2 := [ 0 .. deduped_6_2 - 1 ];
hoisted_2_2 := hoisted_31_1[m_2];
hoisted_1_2 := [ 0 .. deduped_5_2 - 1 ];
return CreateCapCategoryMorphismWithAttributes( hoisted_23_1, CreateCapCategoryObjectWithAttributes( hoisted_23_1, Length, deduped_4_2 ),
CreateCapCategoryObjectWithAttributes( hoisted_23_1, Length, 2 ^ deduped_6_2 ), AsList, List( [ 0 .. deduped_4_2 - 1 ], function ( i_3 )
local hoisted_1_3, hoisted_2_3;
hoisted_1_3 := List( hoisted_1_2, function ( j_4 )
return REM_INT( QUO_INT( i_3, 2 ^ j_4 ), 2 );
end );
hoisted_2_3 := List( hoisted_3_2, function ( logic_new_func_x_4 )
return hoisted_32_1[1 + hoisted_1_3[(1 + hoisted_2_2[(1 + logic_new_func_x_4)])]];
end );
return Sum( List( hoisted_3_2, function ( k_4 )
return hoisted_2_3[(1 + k_4)] * 2 ^ k_4;
end ) );
end ) );
end ) ), List( deduped_36_1, function ( logic_new_func_x_2 )
local hoisted_1_2, hoisted_2_2, hoisted_3_2, hoisted_4_2, hoisted_5_2, hoisted_6_2, hoisted_7_2, hoisted_8_2, hoisted_9_2, hoisted_10_2, hoisted_11_2,
hoisted_12_2, deduped_13_2, deduped_14_2, deduped_15_2, deduped_16_2, deduped_17_2;
deduped_17_2 := hoisted_5_1[logic_new_func_x_2];
deduped_16_2 := 2 ^ deduped_17_2;
deduped_15_2 := [ 0 .. deduped_17_2 - 1 ];
deduped_14_2 := [ 0 .. deduped_16_2 - 1 ];
hoisted_9_2 := CAP_JIT_INCOMPLETE_LOGIC( [ 0 .. deduped_17_2 ^ deduped_17_2 - 1 ][1 + deduped_17_2 * GeometricSumDiff1( deduped_17_2, deduped_17_2 )] );
hoisted_8_2 := hoisted_22_1[logic_new_func_x_2];
hoisted_7_2 := hoisted_17_1[logic_new_func_x_2];
hoisted_6_2 := hoisted_9_1[logic_new_func_x_2];
hoisted_5_2 := deduped_15_2;
hoisted_1_2 := deduped_16_2;
hoisted_4_2 := List( [ 0 .. deduped_16_2 * deduped_17_2 - 1 ], function ( i_3 )
return REM_INT( QUO_INT( i_3, 2 ^ QUO_INT( i_3, hoisted_1_2 ) ), 2 );
end );
hoisted_2_2 := deduped_17_2;
hoisted_3_2 := List( deduped_15_2, function ( logic_new_func_x_3 )
return REM_INT( logic_new_func_x_3, hoisted_2_2 );
end );
hoisted_10_2 := List( deduped_14_2, function ( i_3 )
local hoisted_1_3, hoisted_2_3, hoisted_3_3, hoisted_4_3, hoisted_5_3, hoisted_6_3, hoisted_7_3, hoisted_8_3, hoisted_9_3, deduped_10_3,
deduped_11_3, deduped_12_3, deduped_13_3;
hoisted_1_3 := List( hoisted_5_2, function ( logic_new_func_x_4 )
return hoisted_4_2[1 + (i_3 + hoisted_3_2[(1 + logic_new_func_x_4)] * hoisted_1_2)];
end );
deduped_13_3 := Filtered( hoisted_5_2, function ( x_4 )
return hoisted_1_3[1 + REM_INT( x_4, hoisted_2_2 )] = 1;
end );
deduped_12_3 := Length( deduped_13_3 );
deduped_11_3 := [ 0 .. hoisted_6_2 * deduped_12_3 - 1 ];
hoisted_2_3 := deduped_13_3;
hoisted_4_3 := List( [ 0 .. deduped_12_3 - 1 ], function ( i_4 )
return hoisted_3_2[1 + hoisted_2_3[(1 + i_4)]];
end );
hoisted_3_3 := deduped_12_3;
deduped_10_3 := Filtered( deduped_11_3, function ( x_4 )
return hoisted_7_2[1 + REM_INT( x_4, hoisted_6_2 )] = hoisted_4_3[1 + REM_INT( QUO_INT( x_4, hoisted_6_2 ), hoisted_3_3 )];
end );
hoisted_6_3 := List( deduped_11_3, function ( i_4 )
return REM_INT( i_4, hoisted_6_2 );
end );
hoisted_5_3 := deduped_10_3;
hoisted_7_3 := List( [ 0 .. Length( deduped_10_3 ) - 1 ], function ( logic_new_func_x_4 )
return hoisted_8_2[1 + hoisted_6_3[(1 + hoisted_5_3[(1 + logic_new_func_x_4)])]];
end );
hoisted_8_3 := List( hoisted_5_2, function ( x_4 )
if x_4 in hoisted_7_3 then
return 1;
else
return 0;
fi;
return;
end );
hoisted_9_3 := List( hoisted_5_2, function ( logic_new_func_x_4 )
return hoisted_8_3[1 + REM_INT( QUO_INT( hoisted_9_2, hoisted_2_2 ^ logic_new_func_x_4 ), hoisted_2_2 )];
end );
return Sum( List( hoisted_5_2, function ( k_4 )
return hoisted_9_3[(1 + k_4)] * 2 ^ k_4;
end ) );
end );
deduped_13_2 := Filtered( deduped_14_2, function ( x_3 )
return hoisted_10_2[1 + x_3] = x_3;
end );
hoisted_11_2 := List( deduped_15_2, function ( x_3 )
if x_3 in hoisted_5_2 then
return 1;
else
return 0;
fi;
return;
end );
hoisted_12_2 := List( deduped_15_2, function ( logic_new_func_x_3 )
return hoisted_11_2[1 + REM_INT( QUO_INT( hoisted_9_2, hoisted_2_2 ^ logic_new_func_x_3 ), hoisted_2_2 )];
end );
return CreateCapCategoryMorphismWithAttributes( hoisted_23_1, hoisted_34_1, CreateCapCategoryObjectWithAttributes( hoisted_23_1, Length,
Length( deduped_13_2 ) ), AsList, ListWithIdenticalEntries( 1, -1 + SafePosition( deduped_13_2, Sum( List( deduped_15_2, function ( k_3 )
return hoisted_12_2[(1 + k_3)] * 2 ^ k_3;
end ) ) ) ) );
end ), List( deduped_36_1, function ( logic_new_func_x_2 )
local hoisted_1_2, hoisted_2_2, hoisted_3_2, hoisted_4_2, hoisted_5_2, hoisted_6_2, hoisted_7_2, hoisted_8_2, hoisted_9_2, hoisted_10_2, deduped_11_2,
deduped_12_2, deduped_13_2, deduped_14_2, deduped_15_2;
deduped_15_2 := hoisted_5_1[logic_new_func_x_2];
deduped_14_2 := 2 ^ deduped_15_2;
deduped_13_2 := [ 0 .. deduped_15_2 - 1 ];
deduped_12_2 := [ 0 .. deduped_14_2 - 1 ];
hoisted_9_2 := CAP_JIT_INCOMPLETE_LOGIC( [ 0 .. deduped_15_2 ^ deduped_15_2 - 1 ][1 + deduped_15_2 * GeometricSumDiff1( deduped_15_2, deduped_15_2 )] );
hoisted_8_2 := hoisted_22_1[logic_new_func_x_2];
hoisted_7_2 := hoisted_17_1[logic_new_func_x_2];
hoisted_6_2 := hoisted_9_1[logic_new_func_x_2];
hoisted_5_2 := deduped_13_2;
hoisted_1_2 := deduped_14_2;
hoisted_4_2 := List( [ 0 .. deduped_14_2 * deduped_15_2 - 1 ], function ( i_3 )
return REM_INT( QUO_INT( i_3, 2 ^ QUO_INT( i_3, hoisted_1_2 ) ), 2 );
end );
hoisted_2_2 := deduped_15_2;
hoisted_3_2 := List( deduped_13_2, function ( logic_new_func_x_3 )
return REM_INT( logic_new_func_x_3, hoisted_2_2 );
end );
hoisted_10_2 := List( deduped_12_2, function ( i_3 )
local hoisted_1_3, hoisted_2_3, hoisted_3_3, hoisted_4_3, hoisted_5_3, hoisted_6_3, hoisted_7_3, hoisted_8_3, hoisted_9_3, deduped_10_3,
deduped_11_3, deduped_12_3, deduped_13_3;
hoisted_1_3 := List( hoisted_5_2, function ( logic_new_func_x_4 )
return hoisted_4_2[1 + (i_3 + hoisted_3_2[(1 + logic_new_func_x_4)] * hoisted_1_2)];
end );
deduped_13_3 := Filtered( hoisted_5_2, function ( x_4 )
return hoisted_1_3[1 + REM_INT( x_4, hoisted_2_2 )] = 1;
end );
deduped_12_3 := Length( deduped_13_3 );
deduped_11_3 := [ 0 .. hoisted_6_2 * deduped_12_3 - 1 ];
hoisted_2_3 := deduped_13_3;
hoisted_4_3 := List( [ 0 .. deduped_12_3 - 1 ], function ( i_4 )
return hoisted_3_2[1 + hoisted_2_3[(1 + i_4)]];
end );
hoisted_3_3 := deduped_12_3;
deduped_10_3 := Filtered( deduped_11_3, function ( x_4 )
return hoisted_7_2[1 + REM_INT( x_4, hoisted_6_2 )] = hoisted_4_3[1 + REM_INT( QUO_INT( x_4, hoisted_6_2 ), hoisted_3_3 )];
end );
hoisted_6_3 := List( deduped_11_3, function ( i_4 )
return REM_INT( i_4, hoisted_6_2 );
end );
hoisted_5_3 := deduped_10_3;
hoisted_7_3 := List( [ 0 .. Length( deduped_10_3 ) - 1 ], function ( logic_new_func_x_4 )
return hoisted_8_2[1 + hoisted_6_3[(1 + hoisted_5_3[(1 + logic_new_func_x_4)])]];
end );
hoisted_8_3 := List( hoisted_5_2, function ( x_4 )
if x_4 in hoisted_7_3 then
return 1;
else
return 0;
fi;
return;
end );
hoisted_9_3 := List( hoisted_5_2, function ( logic_new_func_x_4 )
return hoisted_8_3[1 + REM_INT( QUO_INT( hoisted_9_2, hoisted_2_2 ^ logic_new_func_x_4 ), hoisted_2_2 )];
end );
return Sum( List( hoisted_5_2, function ( k_4 )
return hoisted_9_3[(1 + k_4)] * 2 ^ k_4;
end ) );
end );
deduped_11_2 := Filtered( deduped_12_2, function ( x_3 )
return hoisted_10_2[1 + x_3] = x_3;
end );
return CreateCapCategoryMorphismWithAttributes( hoisted_23_1, CreateCapCategoryObjectWithAttributes( hoisted_23_1, Length, Length( deduped_11_2 ) ),
CreateCapCategoryObjectWithAttributes( hoisted_23_1, Length, deduped_14_2 ), AsList, deduped_11_2 );
end ) );
end
I suggest decreasing the dependency on the correct functioning of HigherHomologicalAlgebra
in the tests, avoiding circular dependencies in the tests.
These optimizations are not fully implemented (see homalg-project/LazyCategories#6) and thus can lead to unexpected errors. We now have CompilerForCAP for doing optimizations.
RangeCategoryOfHomomorphismStructure
is not a mutable attribute, if it is already set in
CategoricalTowers/Locales/gap/IntervalCategory.gi
Lines 242 to 248 in 508d62c
overwriting it does not work. This is (for example) the case for ProsetAsCategory
.
Also, the line not IsIntervalCategory( V )
is unexpected. Should this line filter out the fail
case? Then I would check for V <> fail
. If the code explicitly requires an interval category, a warning or an error should be printed when a wrong category is given.
To reproduce the problem, call SetInfoLevel( InfoAttributes, 3 );
before loading "ComplexesCategories".
Remark: The tensor unit is the trivial monoid object. Hence, this is a special case of the monoidal structure of slice categories over monoid objects.
The truncated simplicial category is finite and should hence carry a SkeletalFinSets
-Hom-structure:
gap> LoadPackage( "FpCategories", false );
true
gap> F := PathCategory( FinQuiver( "Delta(C0,C1,C2)[id:C1->C0,s:C0->C1,t:C0->C1,is:C2->C1,it:C2->C1,ps:C1->C2,pt:C1->C2,mu:C1->C2]" ) );
PathCategory( FinQuiver( "Delta(C0,C1,C2)[id:C1-≻C0,s:C0-≻C1,t:C0-≻C1,is:C2-≻C1,it:C2-≻C1,ps:C1-≻C2,pt:C1-≻C2,mu:C1-≻C2]" ) )
gap> Delta2 := F /
> [ [ PreCompose( F.s, F.id ), IdentityMorphism( F.C0 ) ],
> [ PreCompose( F.t, F.id ), IdentityMorphism( F.C0 ) ],
> [ PreCompose( F.ps, F.is ), IdentityMorphism( F.C1 ) ],
> [ PreCompose( F.pt, F.it ), IdentityMorphism( F.C1 ) ],
> [ PreCompose( F.is, F.id ), PreCompose( F.it, F.id ) ], ## s(1_M) = M = t(1_M)
> [ PreCompose( F.pt, F.is ), PreCompose( F.id, F.t ) ],
> [ PreCompose( F.ps, F.it ), PreCompose( F.id, F.s ) ],
> [ PreCompose( F.s, F.pt ), PreCompose( F.t, F.ps ) ],
> [ PreCompose( F.s, F.mu ), PreCompose( F.s, F.ps ) ],
> [ PreCompose( F.t, F.mu ), PreCompose( F.t, F.pt ) ],
> [ PreCompose( F.mu, F.is ), IdentityMorphism( F.C1 ) ],
> [ PreCompose( F.mu, F.it ), IdentityMorphism( F.C1 ) ] ];
PathCategory( FinQuiver( "Delta(C0,C1,C2)[id:C1-≻C0,s:C0-≻C1,t:C0-≻C1,is:C2-≻C1,it:C2-≻C1,ps:C1-≻C2,pt:C1-≻C2,mu:C1-≻C2]" ) ) / [ s•id = id(C0), t•id\
= id(C0), ps•is = id(C1), ... ]
gap> Display( Delta2 );
A CAP category with name PathCategory( FinQuiver( "Delta(C0,C1,C2)[id:C1-≻C0,s:C0-≻C1,t:C0-≻C1,is:C2-≻C1,it:C2-≻C1,ps:C1-≻C2,pt:C1-≻C2,mu:C1-≻C2]" ) ) / \
[ s•id = id(C0), t•id = id(C0), ps•is = id(C1), ... ]:
24 primitive operations were used to derive 29 operations for this category
gap> CanCompute( Delta2, "HomomorphismStructureOnObjects" );
false
I think that the current representation of literal lists as for example seen in cell 35 of https://github.com/homalg-project/CategoricalTowers/blob/f9066b25c0c46765b46bc31941dea427fe85cbf5/FiniteCocompletions/examples/notebooks/CartesianDiagonal.ipynb is quite misleading. I suggest to create separate nodes labeled "[ ... ]" for literal lists in the tree. In this example, there would be two separate nodes collecting the arrows 1 and 2 and the arrows 4 and 5 in the input of "UniversalMorphismIntoDirectProduct..." into two literal lists.
Regarding AdditiveClosureOfAlgebroid: The warnings come from
and
(and do not involve AdditiveClosure). QPA seems to have well-defined equalities for quivers and quiver algebras, so simply replacing IsIdenticalObj
by =
should be sufficient.
Originally posted by @zickgraf in #284 (comment)
For example:
The source of MorphismFromFiberProductToSink
is FiberProduct
, not IntersectionSubobject
, and the latter is not necessarily modeled via the former.
Install
for
Currently:
gap> CheckConstructivenessOfCategory( constructible_objects, "IsBooleanAlgebra" );
[ "ExponentialOnObjects", "CoexponentialOnObjects" ]
This implementation of this method works for PreSheaves
(IsFpCategory
, SkeletalFinSets
). It could be slightly modified to work for PreSheaves
(IsAlgebroid
, MatrixCategory
).
So I was wondering if there is a missing categorical concept that would unify both implementations.
I have other similar examples.
@kamalsaleh The CI of FunctorCategories is failing:
########> Diff in /home/gap/.gap/pkg/CategoricalTowers/FunctorCategories/\
/tst/functorcategories78.tst:139
# Input is:
CP := CreateComplex( ComplexesCategoryByCochains( PSh ), P, 0 );
# Expected output:
<An object in Complexes category by cochains( PreSheaves( Algebroid(\
Q,
FreeCategory( RightQuiver( "q(4)[x:1->1,a:1->2,b:2->4,c:1->3,d:3->4,y:4->4]" )\
) )
/ relations, Rows( Q ) ) ) supported on the interval [ 0 .. 0 ]>
# But found:
<An object in Complexes category by cochains( PreSheaves( Algebroid(\
Q, FreeCa\
tegory( RightQuiver( "q(4)[x:1->1,a:1->2,b:2->4,c:1->3,d:3->4,y:4->4]" ) ) ) /\
\
relations, Rows( Q ) ) ) supported on the interval [ 0 ]>
Could you look into this?
A draft might be found in https://github.com/kamalsaleh/Algebroids/blob/c706c84e77506f496f4ec7bcf1999cbee05129ef/gap/tmp.gi#L1-L69
This would allow to execute
LoadPackage( "GroupRepresentationsForCAP" );
LoadPackage( "GradedCategories" );
LoadPackage( "InternalModules" );
again without errors. In particular, the part of homalg-project/InternalModules@8a8c90b which moves LoadPackage( "InternalModules" );
to the top to avoid errors could be reverted.
I would like to get rid of IsEqualToIdentityMorphism and IsEqualToZeroMorphism because I think they should more or less only be used in the context of natural transformations and they can easily be misinterpreted/misused. For example, IsEqualToZeroMorphism should probably be replaced by IsZeroForMorphisms here:
CategoricalTowers/CategoryConstructor/gap/Tools.gi
Lines 278 to 282 in 379e882
@mohamed-barakat @kamalsaleh Could you look at the places where you use those two operations and check if they are actually used correctly?
Then probably some logic template does not respect the matrix equality (like in homalg-project/CAP_project#1194 (comment)) -> you should investigate, because the result might not be consistent.
Originally posted by @zickgraf in #110 (comment)
The name of an algebroid is changed in AddBialgebroidStructure
and in AddAntipode
. However names of morphisms between algebroids do not change afterwards, as seen in the following example:
LoadPackage( "Bialgebroid" );
q := RightQuiver( "q(1)[t:1->1]" );
Q := HomalgFieldOfRationals( );
Qq := PathAlgebra( Q, q );
B := Algebroid( Qq );
IdentityFunctor(B);
#! Identity functor of Algebra generated by the right quiver q(1)[t:1->1]
B2 := B^2;
B0 := B^0;
counit_rec := rec( t := 0 );;
comult_rec := rec( t := B2.1xt + B2.tx1 );;
AddBialgebroidStructure( B, counit_rec, comult_rec );
IdentityFunctor(B);
#! Identity functor of Algebra generated by the right quiver q(1)[t:1->1]
antipode_rec := rec( t:= -B.t );;
AddAntipode(B, antipode_rec );
IdentityFunctor(B);
#! Identity functor of Algebra generated by the right quiver q(1)[t:1->1]
Optimizing MorphismsOfExternalHom in FinQuivers comes down to optimizing the homomorphism structure:
This in turn comes down to optimizing the computation of the Limit of ExternalHomDiagram in FinSets:
https://github.com/homalg-project/FunctorCategories/blob/3937a2464545ba6d656997dd5fa08a225f9faf38/gap/PreSheaves.gi#L1390-L1399
This Limit is a binary equalizer, which is a Filtered
in FinSets.
Structure of HomomorphismStructureOnObjects
in FinQuivers:
The loops over the very large range deduped_26_1
are the expensive parts of the code.
The code selects (Filtered
) all the numbers in deduped_26_1
for which a certain equality holds.
The equality compares two 4-digit numbers in base deduped_31_1
.
The number on the left-hand side of the equality is [ deduped_1_2, deduped_1_2, deduped_2_2, deduped_2_2 ]
(little-endian, i.e. least significant bit first).
deduped_1_2
and deduped_2_2
can easily be enumerated, because they are constructed as i -> REM_INT( QUO_INT( i, ... ), deduped_31_1 )
.
The digits of the number on the right-hand side of the equality come from compositions of maps in FinSets. The first and the third digit arise from a composition with a REM_INT
construction, the second and the forth digit arise from a composition with a REM_INT( QUO_INT( i, ... ), ... )
construction. So this is more intricate and probably the source of the semantics of the whole construction.
I see two approaches for further optimizations:
n + 1
if digit n
matches (i.e. reduce the work done in the loops over deduped_26_1
).deduped_26_1
completely).Both optimizations seem to go beyond the usual peephole optimizations implemented in logic functions and templates, so they have to be done manually first. Afterwards we can look at how to teach those strategies to the compiler.
@mohamed-barakat: I think you once said that you could read off the length of the result easily from the input. If you could also construct the numbers in the result with a similar reasoning, that would directly give us solution 2.
gap> LoadPackage( "Algebroids" : OnlyNeeded );
Loading AutoDoc 2022.10.20 (Generate documentation from GAP source code)
Loading Gauss 2023.02-04 (Extended Gauss functionality for GAP)
Loading ToolsForHomalg 2023.10-01 (Special methods and knowledge propagation tools)
Loading CAP 2023.10-07 (Categories, Algorithms, Programming)
Loading homalg 2023.10-01 (A homological algebra meta-package for computable Abelian categories)
Loading MatricesForHomalg 2023.11-01 (Matrices for the homalg project)
Loading CartesianCategories 2023.10-01 (Cartesian and cocartesian categories and various subdoctrines)
Loading MonoidalCategories 2023.10-01 (Monoidal and monoidal (co)closed categories)
Loading ToolsForHigherHomologicalAlgebra 2023.03-01 (Tools for the Higher Homological Algebra project)
Loading GaussForHomalg 2023.10-01 (Gauss functionality for the homalg project)
Loading HomalgToCAS 2023.08-01 (A window to the outer world)
Loading Toposes 2023.11-02 (Elementary toposes)
Loading CategoryConstructor 2023.11-02 (Construct categories out of given ones)
Loading GeneralizedMorphismsForCAP 2023.08-02 (Implementations of generalized morphisms for the CAP project)
Loading Modules 2023.10-01 (A homalg based package for the Abelian category of finitely presented modules over computable rings)
Loading RingsForHomalg 2023.11-02 (Dictionaries of external rings)
Loading FinSetsForCAP 2023.10-02 (The elementary topos of (skeletal) finite sets)
Loading PreSheaves 2023.11-01 (Categories of (co)presheaves)
Loading QuotientCategories 2023.10-02 (Quotient categories)
Loading GradedRingForHomalg 2023.08-01 (Endow Commutative Rings with an Abelian Grading)
Loading ComplexesCategories 2023.07-02 (Category of (co)chain complexes of an additive category)
Loading FreydCategoriesForCAP 2023.10-06 (Freyd categories - Formal (co)kernels for additive categories)
Loading QPA 2.0-dev (Quivers and Path Algebras)
Syntax warning: Unbound global variable in /home/fabian/.gap/pkg/CategoricalTowers/Algebroids/gap/GroebnerBasesForPathCategories.gi:111
List( PositionsSublist( i_f, i_g ),
^^^^^^^^^^^^^^^^
Syntax warning: Unbound global variable in /home/fabian/.gap/pkg/CategoricalTowers/Algebroids/gap/GroebnerBasesForPathCategories.gi:125
List( PositionsSublist( i_g, i_f ),
^^^^^^^^^^^^^^^^
Loading Algebroids 2023.10-13 (Algebroids and bialgebroids as preadditive categories generated by enhanced quivers)
true
I cannot find the package which defines PositionsSublist
.
Since yesterday (https://github.com/homalg-project/CategoricalTowers/actions/runs/5274719367/jobs/9539462031), the CI is timing out. The hang seems to happen while testing the notebooks in FunctorCategories. I suspect this is due to a bug triggered by Julia master. I don't know why the gap-docker-master
job did not hang yesterday, it should be based on the same Julia version as gap-docker
. But today it also hangs. FinSetsForCAP tests notebooks but is not affected by this, so the issue has to be specific to the kind of notebooks in FunctorCategories (maybe the graphs?).
I currently do not have the time to look into this. @mohamed-barakat Could you test the notebooks in FunctorCategories with latest Julia master and try to narrow down where the hang occurs (e.g., when printing graphs)?
as suggested by @kamalsaleh
It takes > 5 minutes on my laptop. Before 1ec0f5b (resp. zickgraf/Toposes.jl@ae46445) this was much better (< 1.5 minutes). Since Julia has no caching (except attributes) I'm not sure why changing the order of examples causes such a large difference.
Background: There is also a difference in memory usage. Since yesterday, presumably Julia commit 5f36833b71e8bcce6ab9c89e8e98246638e465a1, Julia needs a bit more memory. This makes the tests of Toposes.jl run out of memory in GitHub actions. Hence, I had to disable the test in homalg-project/PackageJanitor@bab0662.
We need to compile SubobjectClassifier( FinQuivers )
to its value, e.g., simply by evaluating it. We expect this to have a significant impact on other commands like ListOfSubobjects
, PushoutComplement
, DPO
, etc.
The coverage of lines 1048ff. in the following file is currently not stable:
https://app.codecov.io/gh/homalg-project/CategoricalTowers/commit/7207e10a872e58e376dc5431db8275534bd31ff9/blob/FunctorCategories/gap/PreSheaves.gi#L1048
https://app.codecov.io/gh/homalg-project/CategoricalTowers/pull/218/indirect-changes#6eb4344af37b9cb47821100bedbc965b-L1048
That is, sometimes the line is covered and sometimes it is not. This is usually due to races in caching and garbage collection. Please add a test which covers this line explicitly to avoid unexpected increases or decreases in code coverage.
Try the following code:
LoadPackage( "SubcategoriesForCAP" );
LoadPackage( "LazyCategories" );
dummy := DummyCategory( rec(
list_of_operations_to_install := [
"PreCompose",
"IdentityMorphism",
"ProjectionOfBiasedWeakFiberProduct",
"ProjectionInFactorOfFiberProductWithGivenFiberProduct",
"UniversalMorphismIntoFiberProductWithGivenFiberProduct"
],
) );
dummy := TerminalCategoryWithMultipleObjects( );
L := LazyCategory( dummy : optimize := 0 );
B := CreateCapCategoryObjectWithAttributes( dummy ) / L;
S := SliceCategory( B );
DerivationsOfMethodByCategory( S, "DirectProduct" );
DerivationsOfMethodByCategory( S, "ProjectionInFactorOfDirectProductWithGivenDirectProduct" );
obj := IdentityMorphism( B ) / S;
mor := ProjectionInFactorOfDirectProduct( [ obj, obj, obj ], 3 );
Assert( 0, IsWellDefinedForMorphisms( mor ) );
The assertion does not hold. This is probably due to
not being compatible with .Could not get rid of all global variables
:
brk> CAP_JIT_INTERNAL_GLOBAL_VARIABLE_16;
FunctorCategory( FreeCategory( RightQuiver( "q(V,A)[s:V->A,t:V->A]" ) ), SkeletalFinSets )
The reason for the error is that YonedaFibration
calls FunctorCategory( B )
:
WARNING: Could not find declaration of FunctorCategory (current input: [ <Category "IsFpCategory"> ])
while compiling function with name "YonedaFibration method"
located at ~/.gap/pkg/FunctorCategories/gap/FunctorCategories.gi:945
Error, Could not get rid of all global variables, see <function_string>. You should use category_hints.category_attribute_names. at ~/.gap/pkg/CAP_project/CompilerForCAP//gap/PrecompileCategory.gi:159 called from
CapJitPrecompileCategory( category_constructor, given_arguments, package_name, compiled_category_name
); at ~/.gap/pkg/CAP_project/CompilerForCAP//gap/PrecompileCategory.gi:353 called from
<function "CapJitPrecompileCategoryAndCompareResult">( <arguments> )
called from read-eval loop at PrecompileFinQuiversClassifyingMorphismOfSubobject.g:35
you can 'quit;' to quit to outer loop, or
you can 'return;' to continue
brk> Display( function_string );
function ( cat_1, alpha_1 )
local hoisted_1_1, hoisted_2_1, hoisted_3_1, hoisted_4_1, hoisted_5_1, hoisted_6_1, hoisted_7_1, hoisted_8_1, hoisted_9_1, hoisted_10_1, hoisted_11_1, hoisted_12_1,\
hoisted_13_1, hoisted_14_1, hoisted_15_1, hoisted_16_1, hoisted_17_1, hoisted_18_1, hoisted_19_1, hoisted_20_1, hoisted_21_1, hoisted_22_1, hoisted_23_1, hoisted_24_1,\
hoisted_25_1, hoisted_26_1, hoisted_27_1, hoisted_28_1, hoisted_29_1, hoisted_30_1, hoisted_31_1, hoisted_32_1, deduped_33_1, deduped_34_1, deduped_35_1, deduped_36_1,\
deduped_37_1, deduped_38_1, deduped_39_1, deduped_40_1, deduped_41_1, deduped_42_1, deduped_43_1, deduped_44_1, deduped_45_1, deduped_46_1, deduped_47_1, deduped_48_1,\
deduped_49_1, deduped_50_1, deduped_51_1, deduped_52_1, deduped_53_1, deduped_54_1, deduped_55_1, deduped_56_1, deduped_57_1, deduped_58_1, deduped_59_1, deduped_60_1,\
deduped_61_1, deduped_62_1, deduped_63_1, deduped_64_1;
deduped_64_1 := [ 1 ];
deduped_63_1 := DefiningPairOfQuiverMorphism( alpha_1 );
deduped_62_1 := RangeCategoryOfHomomorphismStructure( cat_1 );
deduped_61_1 := Range( alpha_1 );
deduped_60_1 := DefiningTripleOfQuiver( Source( alpha_1 ) );
deduped_59_1 := DefiningTripleOfQuiver( deduped_61_1 );
deduped_58_1 := CreateCapCategoryObjectWithAttributes( deduped_62_1, Length, 2 );
deduped_57_1 := CreateCapCategoryObjectWithAttributes( deduped_62_1, Length, 1 );
deduped_56_1 := ModelingCategory( ModelingCategory( cat_1 ) );
deduped_55_1 := deduped_60_1[3];
deduped_54_1 := deduped_59_1[3];
deduped_53_1 := Source( deduped_56_1 );
deduped_52_1 := SetOfGeneratingMorphisms( deduped_56_1 );
deduped_51_1 := SetOfObjects( deduped_56_1 );
deduped_50_1 := CreateCapCategoryObjectWithAttributes( deduped_62_1, Length, deduped_60_1[2] );
deduped_49_1 := CreateCapCategoryObjectWithAttributes( deduped_62_1, Length, deduped_60_1[1] );
deduped_48_1 := CreateCapCategoryObjectWithAttributes( deduped_62_1, Length, deduped_59_1[2] );
deduped_47_1 := CreateCapCategoryObjectWithAttributes( deduped_62_1, Length, deduped_59_1[1] );
deduped_46_1 := BasisPathsByVertexIndex( deduped_53_1 );
deduped_45_1 := Length( deduped_52_1 );
deduped_44_1 := Length( deduped_51_1 );
deduped_43_1 := [ 1 .. deduped_45_1 ];
deduped_42_1 := [ 1 .. deduped_44_1 ];
deduped_41_1 := CreateCapCategoryObjectWithAttributes( deduped_62_1, Length, deduped_44_1 );
deduped_40_1 := CreateCapCategoryObjectWithAttributes( deduped_56_1, Source, deduped_53_1, Range, deduped_62_1, ValuesOfPreSheaf, NTuple( 2, [ deduped_47_1, deduped\
_48_1 ], [ CreateCapCategoryMorphismWithAttributes( deduped_62_1, deduped_48_1, deduped_47_1, AsList, List( deduped_54_1, function ( a_2 )
return a_2[1];
end ) ), CreateCapCategoryMorphismWithAttributes( deduped_62_1, deduped_48_1, deduped_47_1, AsList, List( deduped_54_1, function ( a_2 )
return a_2[2];
end ) ) ] ) );
hoisted_20_1 := deduped_62_1;
hoisted_16_1 := HomStructureOnBasisPaths( deduped_53_1 );
hoisted_7_1 := deduped_46_1;
hoisted_3_1 := deduped_42_1;
hoisted_2_1 := deduped_51_1;
hoisted_1_1 := List( deduped_46_1, function ( logic_new_func_list_2 )
return List( logic_new_func_list_2, Length );
end );
deduped_39_1 := List( deduped_52_1, function ( psi_2 )
local hoisted_1_2, hoisted_2_2, hoisted_3_2, hoisted_4_2, hoisted_5_2, hoisted_6_2, deduped_7_2, deduped_8_2, deduped_9_2, deduped_10_2;
deduped_10_2 := VertexIndex( UnderlyingVertex( Range( psi_2 ) ) );
deduped_9_2 := VertexIndex( UnderlyingVertex( Source( psi_2 ) ) );
hoisted_2_2 := deduped_10_2;
deduped_8_2 := List( hoisted_2_1, function ( logic_new_func_x_3 )
return hoisted_1_1[VertexIndex( UnderlyingVertex( logic_new_func_x_3 ) )][hoisted_2_2];
end );
hoisted_1_2 := deduped_9_2;
deduped_7_2 := List( hoisted_2_1, function ( logic_new_func_x_3 )
return hoisted_1_1[VertexIndex( UnderlyingVertex( logic_new_func_x_3 ) )][hoisted_1_2];
end );
hoisted_5_2 := SafePosition( hoisted_7_1[deduped_9_2][deduped_10_2], BasisPathOfPathAlgebraBasisElement( UnderlyingQuiverAlgebraElement( psi_2 ) ) );
hoisted_6_2 := List( hoisted_2_1, function ( logic_new_func_x_3 )
local hoisted_1_3, deduped_2_3, deduped_3_3;
deduped_3_3 := UnderlyingVertex( logic_new_func_x_3 );
deduped_2_3 := VertexIndex( deduped_3_3 );
hoisted_1_3 := hoisted_16_1[deduped_2_3][hoisted_1_2][deduped_2_3][hoisted_2_2][SafePosition( hoisted_7_1[deduped_2_3][deduped_2_3], QuiverVertexAsI\
dentityPath( deduped_3_3 ) )][hoisted_5_2];
return List( [ 1 .. hoisted_1_1[deduped_2_3][hoisted_1_2] ], function ( phi_index_4 )
return hoisted_1_3[phi_index_4];
end );
end );
hoisted_4_2 := deduped_8_2;
hoisted_3_2 := deduped_7_2;
return CreateCapCategoryMorphismWithAttributes( hoisted_20_1, CreateCapCategoryObjectWithAttributes( hoisted_20_1, Length, Sum( deduped_7_2 ) ), CreateCapCa\
tegoryObjectWithAttributes( hoisted_20_1, Length, Sum( deduped_8_2 ) ), AsList, Concatenation( List( hoisted_3_1, function ( logic_new_func_x_3 )
local hoisted_1_3, hoisted_2_3, deduped_3_3;
deduped_3_3 := Sum( hoisted_4_2{[ 1 .. logic_new_func_x_3 - 1 ]} );
hoisted_2_3 := [ deduped_3_3 .. deduped_3_3 + hoisted_4_2[logic_new_func_x_3] - 1 ];
hoisted_1_3 := hoisted_6_2[logic_new_func_x_3];
return List( [ 0 .. hoisted_3_2[logic_new_func_x_3] - 1 ], function ( i_4 )
return hoisted_2_3[1 + hoisted_1_3[(1 + i_4)]];
end );
end ) ) );
end );
hoisted_23_1 := List( deduped_51_1, function ( c_2 )
local hoisted_1_2;
hoisted_1_2 := VertexIndex( UnderlyingVertex( c_2 ) );
return List( hoisted_2_1, function ( a_3 )
return CreateCapCategoryObjectWithAttributes( hoisted_20_1, Length, hoisted_1_1[VertexIndex( UnderlyingVertex( a_3 ) )][hoisted_1_2] );
end );
end );
deduped_38_1 := CreateCapCategoryObjectWithAttributes( CAP_JIT_INTERNAL_GLOBAL_VARIABLE_16, Source, deduped_53_1, Range, deduped_62_1, ValuesOfFunctor, NTuple( 2, L\
ist( deduped_42_1, function ( c_2 )
return CreateCapCategoryObjectWithAttributes( hoisted_20_1, Length, Sum( List( hoisted_23_1[c_2], Length ) ) );
end ), deduped_39_1 ) );
CategoryConstructor
is now robust and flexible and used to construct several categories
FinGSetsForCAP/gap/FinGSetsForCAP.gi
FunctorCategories/gap/FunctorCategories.gi
IntrinsicCategories/gap/IntrinsicCategories.gi
LazyCategories/gap/LazyCategory.gi
Locales/gap/ProsetOfCategory.gi
QuotientCategories/gap/QuotientCategories.gi
SubcategoriesForCAP/gap/FullSubcategory.gi
SubcategoriesForCAP/gap/SliceCategory.gi
SubcategoriesForCAP/gap/Subcategory.gi
gap> LoadPackage( "Algebroids" );
# true
gap> q := RightQuiver( "q(*)[a:*->*,b:*->*,c:*->*]" );
# q(*)[a:*->*,b:*->*,c:*->*]
gap> F := FreeCategory( q );
# FreeCategory( RightQuiver( "q(*)[a:*->*,b:*->*,c:*->*]" ) )
gap> C := F / [ [ F.aaaaaaa, F.a ], [F.bbbbbb, F.b], [F.cccccc, F.c], [ F.ab, F.c ], [ F.ba, F.c ], [ F.ac, F.b ], [ F.ca, F.b ] ];
# FreeCategory( RightQuiver( "q(*)[a:*->*,b:*->*,c:*->*]" ) ) / relations
gap> RangeCategoryOfHomomorphismStructure( C );
# SkeletalFinSets
gap> CategoryFromDataTables( C );
Error, Assertion failure in
pos <> fail at /home/kamal/.gap/pkg/CAP_project/CAP/gap/ToolsForCategories.gi:1284 called from
SafePosition( mors, g ) at /home/kamal/.gap/pkg/CategoricalTowers/Algebroids/gap/FpCategories.gi:188 called from
func( C[i] ) at /home/kamal/Software/gap-4.12.1/lib/coll.gi:663 called from
List( ArrowList( path ), function ( g )
return -1 + SafePosition( mors, g );
end ) at /home/kamal/.gap/pkg/CategoricalTowers/Algebroids/gap/FpCategories.gi:188 called from
func( pair[1] ) at /home/kamal/.gap/pkg/CategoricalTowers/Algebroids/gap/FpCategories.gi:191 called from
func( C[i] ) at /home/kamal/Software/gap-4.12.1/lib/coll.gi:663 called from
... at *stdin*:51
you may 'return;'
brk> mors;
[ (a), (b), (b) ]
brk> g;
(c)
CategoricalTowers/CategoryConstructor/gap/ToolsMethodRecord.gi
Lines 130 to 135 in c5c579a
https://github.com/homalg-project/CategoricalTowers/actions/runs/4050701671/jobs/6968340296:
2023-01-31T05:20:58.8572145Z /usr/lib/git-core/git-subtree: 301: Maximum function recursion depth (1000) reached
This should
a) make the CI fail so we know about it,
b) not happen :D
I have seen on nLab that IsDistributiveCategory
is standard terminology for a bicartesian category with a distributivity law for products and coproducts. I would still suggest to call it IsDistributiveBicartesianCategory
in CAP to avoid confusion , especially if we later introduce .IsDistributiveMonoidalCategory
. Otherwise it would be very easy to confuse IsMonoidalCategory and IsDistributiveCategory
and IsDistributiveMonoidalCategory
, i.e. assume an implication in at least one direction
$ gap FunctorCategories/examples/PrecompileFinReflexiveQuiversAsCCC.g
WARNING: Could not find declaration of CAP_JIT_INCOMPLETE_LOGIC (current input: [ <Category "IsInt"> ])
while compiling function with name "Function added to FreeCategory( RightQuiver( "Delta(C0,C1)[id:C1->C0,s:C0->C1,t:C0->C1]" ) ) / [ s*id = C0, t*id = C0 ] for IdentityMorphism"
located at ~/.gap/pkg/CategoricalTowers/Algebroids//gap/precompiled_categories/CategoryFromDataTablesPrecompiled.gi:45
...
WARNING: Could not find declaration of CAP_JIT_INCOMPLETE_LOGIC (current input: [ <Category "IsInt"> ])
while compiling function with name "Function added to PreSheaves( FreeCategory( RightQuiver( "Delta(C0,C1)[id:C1->C0,s:C0->C1,t:C0->C1]" ) ) / [ s*id = C0, t*id = C0 ], SkeletalFinSets ) for ExponentialOnObjects"
located at ~/.gap/pkg/CategoricalTowers/FunctorCategories//gap/PreSheaves.gi:1231
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.