GithubHelp home page GithubHelp logo

homalg-project / categoricaltowers Goto Github PK

View Code? Open in Web Editor NEW
6.0 7.0 4.0 20 MB

Towers of category constructors

License: GNU General Public License v2.0

GAP 71.80% Shell 0.68% Makefile 0.96% Python 0.06% Jupyter Notebook 26.11% TeX 0.01% Julia 0.38%
category-theory completions category-constructors cocompletions categorical-towers finite-strict-product-completion category-of-copresheaves category-of-presheaves finite-strict-coproduct-completion finite-colimit-cocompletion

categoricaltowers's People

Contributors

fingolfin avatar heiderich avatar kamalsaleh avatar markuslh avatar mohamed-barakat avatar mroman42 avatar ninja-koala avatar sebasguts avatar sebastianpos avatar tschitschibor avatar zickgraf avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

categoricaltowers's Issues

Refine the preconditions in the derivation-bundle that installs "Hom-Structure" using "MorphismsOfExternalHom"

##
AddFinalDerivationBundle( "adding the homomorphism structure using MorphismsOfExternalHom",
[ [ TerminalObject, 1 ],
[ MorphismsOfExternalHom, 2 ],
[ ObjectConstructor, 1 ],
[ PreComposeList, 2 ],
[ MorphismConstructor, 1 ],
],
[ DistinguishedObjectOfHomomorphismStructure,
HomomorphismStructureOnObjects,
HomomorphismStructureOnMorphisms,
HomomorphismStructureOnMorphismsWithGivenObjects,
InterpretMorphismAsMorphismFromDistinguishedObjectToHomomorphismStructure,
InterpretMorphismAsMorphismFromDistinguishedObjectToHomomorphismStructureWithGivenObjects,
InterpretMorphismFromDistinguishedObjectToHomomorphismStructureAsMorphism
],
[
DistinguishedObjectOfHomomorphismStructure,
[ [ TerminalObject, 1 ] ],
function( cat )
return TerminalObject( RangeCategoryOfHomomorphismStructure( cat ) );
end
],

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 successfully compiled in 427 minutes ~ 7 hours

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

Using the option `range_of_HomStructure` for `ProsetAsCategory` does not work

RangeCategoryOfHomomorphismStructure is not a mutable attribute, if it is already set in

V := ValueOption( "range_of_HomStructure" );
if not IsIntervalCategory( V ) then
V := IntervalCategory;
fi;
SetRangeCategoryOfHomomorphismStructure( preordered_set, V );

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".

Bug in GroebnerBasis

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

LazyCategories: Show literal lists as separate nodes of the tree

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

Regarding AdditiveClosureOfAlgebroid: The warnings come from

return IsQuiverVertex( v ) and IsIdenticalObj( QuiverOfPath( v ), UnderlyingQuiver( category ) );

and

if not IsIdenticalObj( AlgebraOfElement( m ), UnderlyingQuiverAlgebra( category ) ) then

(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)

Install (Co)exponentialOnObjects for ConstructibleObjects

Install

  • ExponentialOnObjects
  • CoexponentialOnObjects

for

  • ConstructibleObjectsAsUnionOfSingleDifferences
  • ConstructibleObjectsAsUnionOfMultipleDifferences

Currently:

gap> CheckConstructivenessOfCategory( constructible_objects, "IsBooleanAlgebra" );
[ "ExponentialOnObjects", "CoexponentialOnObjects" ]

CI failing due to changes in HigherHomologicalAlgebra

@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?

Get rid of IsEqualToIdentity/ZeroMorphism

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:

if IsEndomorphism( cat, delta_ij ) and not IsEqualToZeroMorphism( cat, alpha_ij ) then
return IdentityMorphism( cat, Source( delta_ij ) );
else
return ZeroMorphism( cat, Source( delta_ij ), Range( delta_ij ) );
fi;

@mohamed-barakat @kamalsaleh Could you look at the places where you use those two operations and check if they are actually used correctly?

Names of morphisms (functors) between algebroids

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

Optimizing MorphismsOfExternalHom in FinQuivers comes down to optimizing the homomorphism structure:

https://github.com/homalg-project/Toposes/blob/0f4a0d1c29afb47da7f1e29e5ac407a599e33069/gap/ToposDerivedMethods.gi#L293-L311

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:

https://github.com/homalg-project/FunctorCategories/blob/60b029a10930cf40b3b5caf31e7896edf660e2f7/gap/precompiled_categories/FinQuiversPrecompiled.gi#L80

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:

  1. Compare the two numbers digit-wise and only compute digit n + 1 if digit n matches (i.e. reduce the work done in the loops over deduped_26_1).
  2. Enumerate the selected numbers in the result using combinatorics instead of checking all possible combinations (i.e. get rid of the loops over 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.

Missing dependency of Algebroids

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.

CI hanging while testing notebooks in FunctorCategories

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)?

`PushoutComplement_FinSets.g` takes a long time in Toposes.jl

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.

Make code coverage stable

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.

ProjectionInFactorOfDirectProduct in slice category is broken

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

AddDirectProduct( S, # WeakDirectProduct
not being compatible with
AddProjectionInFactorOfDirectProductWithGivenDirectProduct( Slice_over_B,
.

Compile ClassifyingMorphismOfSubobject/SievesOfPathsToTruth

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 ) );

Start using CategoryConstructor in GradedCategories

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

Algebroids: Assertion failure in CategoryFromDataTables

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)

Terminology: `IsDistributiveCategory` vs. `IsDistributiveBicartesianCategory`

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.

WARNING: Could not find declaration of CAP_JIT_INCOMPLETE_LOGIC (current input: [ <Category "IsInt"> ])

$ 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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.