Goto Chapter: Top 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Ind
 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 

14 Precompilation
 14.1 Precompiling the finite strict coproduct completion
 14.2 Precompiling SkeletalFinSets
 14.3 Extracting LeftCartesianDistributivityFactoring from ur-algorithms using CategoryFromDataTables
 14.4 Extracting LeftCartesianDistributivityFactoring from ur-algorithms using PathCategory

14 Precompilation

14.1 Precompiling the finite strict coproduct completion

#@if ValueOption( "no_precompiled_code" ) <> true
gap> LoadPackage( "FiniteCocompletions", false );
true
gap> LoadPackage( "CompilerForCAP", ">= 2023.12-09", false );
true
gap> ReadPackageOnce( "FinSetsForCAP", "gap/CompilerLogic.gi" );
true
gap> ReadPackageOnce( "Algebroids", "gap/CompilerLogic.gi" );
true
gap> ReadPackageOnce( "FunctorCategories", "gap/CompilerLogic.gi" );
true
gap> free_category_of_quiver := { quiver, sFinSets } -> CategoryFromDataTables( FreeCategory( quiver : range_of_HomStructure := sFinSets, FinalizeCategory := true ) );;
gap> category_constructor :=
>   function( quiver )
>     local sFinSets; sFinSets := SkeletalCategoryOfFiniteSets( : FinalizeCategory := true, overhead := true ); return FiniteStrictCoproductCompletion( CategoryFromDataTables( FreeCategory( quiver : range_of_HomStructure := sFinSets, FinalizeCategory := true ) : FinalizeCategory := true ) ); end;;
gap> given_arguments := [ RightQuiver( "q(2)[m:1->2]" ) ];;
gap> compiled_category_name := "FiniteStrictCoproductCompletionOfCategoryFromDataTablesPrecompiled";;
gap> package_name := "FiniteCocompletions";;
gap> CapJitPrecompileCategoryAndCompareResult(
>     category_constructor,
>     given_arguments,
>     package_name,
>     compiled_category_name
>    : operations := [ #"CoproductOnMorphismsWithGivenCoproducts", # <- derived and leads to an error
>                      #"CoproductFunctorialWithGivenCoproducts", # <- derived
>                      "HomomorphismStructureOnObjects",
>                      "HomomorphismStructureOnMorphismsWithGivenObjects",
>                      "InterpretMorphismFromDistinguishedObjectToHomomorphismStructureAsMorphism",
>                      "MorphismsOfExternalHom",
>                      #"ExponentialOnObjects",
>                      ]
> );;
gap> FiniteStrictCoproductCompletionOfCategoryFromDataTablesPrecompiled( given_arguments[1] );
FiniteStrictCoproductCompletion( FreeCategory( RightQuiver( "q(2)[m:1->2]" ) ) )
gap> cat := FiniteStrictCoproductCompletion( free_category_of_quiver( given_arguments[1], SkeletalFinSets ) );
FiniteStrictCoproductCompletion( FreeCategory( RightQuiver( "q(2)[m:1->2]" ) ) )
gap> cat!.precompiled_functions_added;
true
#@fi

14.2 Precompiling SkeletalFinSets

#@if ValueOption( "no_precompiled_code" ) <> true
gap> LoadPackage( "FiniteCocompletions", false );
true
gap> LoadPackage( "CompilerForCAP", ">= 2023.12-09", false );
true
gap> ReadPackageOnce( "FiniteCocompletions", "gap/CompilerLogic.gi" );
true
gap> category_constructor :=
>   {} -> SkeletalCategoryOfFiniteSetsAsFiniteStrictCoproductCompletionOfTerminalCategory( );;
gap> given_arguments := [ ];;
gap> compiled_category_name :=
>   "SkeletalCategoryOfFiniteSetsAsFiniteStrictCoproductCompletionOfTerminalCategoryPrecompiled";;
gap> package_name := "FiniteCocompletions";;
gap> primitive_operations :=
>   ListPrimitivelyInstalledOperationsOfCategory( category_constructor() );;
gap> list_of_operations :=
>   SortedList( Concatenation( primitive_operations, [
>           #"CartesianLambdaIntroduction",
>           #"CartesianLambdaElimination",
>           ] ) );;
gap> CapJitPrecompileCategoryAndCompareResult(
>         category_constructor,
>         given_arguments,
>         package_name,
>         compiled_category_name
>         : operations := list_of_operations,
>         number_of_objectified_objects_in_data_structure_of_object := 1,
>         number_of_objectified_morphisms_in_data_structure_of_object := 0,
>         number_of_objectified_objects_in_data_structure_of_morphism := 2,
>         number_of_objectified_morphisms_in_data_structure_of_morphism := 1
> );;
gap> SkeletalCategoryOfFiniteSetsAsFiniteStrictCoproductCompletionOfTerminalCategoryPrecompiled( );
SkeletalFinSetsAsFiniteStrictCoproductCompletionOfTerminalCategory
gap> cat := SkeletalCategoryOfFiniteSetsAsFiniteStrictCoproductCompletionOfTerminalCategory( );
SkeletalFinSetsAsFiniteStrictCoproductCompletionOfTerminalCategory
gap> cat!.precompiled_functions_added;
true
#@fi

14.3 Extracting LeftCartesianDistributivityFactoring from ur-algorithms using CategoryFromDataTables

#@if ValueOption( "no_precompiled_code" ) <> true
gap> LoadPackage( "FiniteCocompletions", false );
true
gap> LoadPackage( "CompilerForCAP", ">= 2023.12-09", false );
true
gap> ReadPackageOnce( "FinSetsForCAP", "gap/CompilerLogic.gi" );
true
gap> sFinSets := CategoryOfSkeletalFinSets( : no_precompiled_code := true );
SkeletalFinSets
gap> q := RightQuiver( "Q(a,b,c)[]" );
Q(a,b,c)[]
gap> C := FreeCategory( q : range_of_HomStructure := sFinSets );
FreeCategory( RightQuiver( "Q(a,b,c)[]" ) )
gap> C := CategoryFromDataTables( C :
>              set_category_attribute_resolving_functions := true,
>              no_precompiled_code := true );
FreeCategory( RightQuiver( "Q(a,b,c)[]" ) )
gap> DC := FreeDistributiveCategoryWithStrictProductAndCoproducts( C );
FreeDistributiveCategoryWithStrictProductAndCoproducts(
FreeCategory( RightQuiver( "Q(a,b,c)[]" ) ) )
gap> UPC := ModelingCategory( DC );
FiniteStrictCoproductCompletion( FiniteStrictProductCompletion(
FreeCategory( RightQuiver( "Q(a,b,c)[]" ) ) ) )
gap> PC := UnderlyingCategory( UPC );
FiniteStrictProductCompletion( FreeCategory( RightQuiver( "Q(a,b,c)[]" ) ) )
gap> a := DC.a;
<An object in FreeDistributiveCategoryWithStrictProductAndCoproducts(
 FreeCategory( RightQuiver( "Q(a,b,c)[]" ) ) )>
gap> b := DC.b;
<An object in FreeDistributiveCategoryWithStrictProductAndCoproducts(
 FreeCategory( RightQuiver( "Q(a,b,c)[]" ) ) )>
gap> c := DC.c;
<An object in FreeDistributiveCategoryWithStrictProductAndCoproducts(
 FreeCategory( RightQuiver( "Q(a,b,c)[]" ) ) )>
gap> axb_u_axc := Coproduct( DirectProduct( a, b ), DirectProduct( a, c ) );
<An object in FreeDistributiveCategoryWithStrictProductAndCoproducts(
 FreeCategory( RightQuiver( "Q(a,b,c)[]" ) ) )>
gap> a_x_buc := DirectProduct( a, Coproduct( b, c ) );
<An object in FreeDistributiveCategoryWithStrictProductAndCoproducts(
 FreeCategory( RightQuiver( "Q(a,b,c)[]" ) ) )>
gap> axb_u_axc = a_x_buc;
true
gap> implemented_func :=
>   function( T, source, a, b, c, target )
>     return LeftCartesianDistributivityFactoringWithGivenObjects( T,
>                    source,
>                    a,
>                    [ b, c ],
>                    target ); end;
function( T, source, a, b, c, target ) ... end
gap> lfactor_implemented := implemented_func( DC, axb_u_axc, a, b, c, a_x_buc );
<A morphism in FreeDistributiveCategoryWithStrictProductAndCoproducts(
 FreeCategory( RightQuiver( "Q(a,b,c)[]" ) ) )>
gap> StartTimer( "LeftCartesianDistributivityFactoringWithGivenObjects" );
gap> StopCompilationAtPrimitivelyInstalledOperationsOfCategory( DC );
gap> ReadPackageOnce( "FiniteCocompletions",
>     "examples/precompileLeftCartesianDistributivityFactoring_CompilerLogic.g" );
true
gap> compiled_implemented_func :=
>   CapJitCompiledFunction( implemented_func,
>           DC,
>           [ "category", "object", "object", "object", "object", "object" ],
>           "morphism" );
function( T_1, source_1, a_1, b_1, c_1, target_1 ) ... end
gap> StopTimer( "LeftCartesianDistributivityFactoringWithGivenObjects" );
gap> #DisplayTimer( "LeftCartesianDistributivityFactoringWithGivenObjects" );
gap> compiled_implemented_func( DC, axb_u_axc, a, b, c, a_x_buc ) =
>   lfactor_implemented;
true
gap> Display( compiled_implemented_func );
function ( T_1, source_1, a_1, b_1, c_1, target_1 )
    local deduped_1_1, deduped_2_1, deduped_3_1, deduped_4_1,
          deduped_5_1, deduped_6_1, deduped_7_1, deduped_8_1;
    deduped_8_1 := [ b_1, c_1 ];
    deduped_7_1 := [ a_1, c_1 ];
    deduped_6_1 := [ a_1, b_1 ];
    deduped_5_1 := Coproduct( T_1, deduped_8_1 );
    deduped_4_1 := DirectProduct( T_1, deduped_7_1 );
    deduped_3_1 := DirectProduct( T_1, deduped_6_1 );
    deduped_2_1 := [ a_1, deduped_5_1 ];
    deduped_1_1 := DirectProduct( T_1, deduped_2_1 );
    return
      UniversalMorphismFromCoproductWithGivenCoproduct( T_1,
        [ deduped_3_1, deduped_4_1 ],
        target_1,
        [ UniversalMorphismIntoDirectProductWithGivenDirectProduct( T_1,
            deduped_2_1,
            deduped_3_1,
            [ ProjectionInFactorOfDirectProductWithGivenDirectProduct( T_1,
                    deduped_6_1, 1,
                    deduped_3_1 ),
              PreCompose( T_1,
                  ProjectionInFactorOfDirectProductWithGivenDirectProduct( T_1,
                          deduped_6_1,
                          2,
                          deduped_3_1 ),
                  InjectionOfCofactorOfCoproductWithGivenCoproduct( T_1,
                          deduped_8_1,
                          1,
                          deduped_5_1 ) ) ],
            deduped_1_1 ),
          UniversalMorphismIntoDirectProductWithGivenDirectProduct( T_1,
              deduped_2_1,
              deduped_4_1,
              [ ProjectionInFactorOfDirectProductWithGivenDirectProduct( T_1,
                  deduped_7_1,
                  1,
                  deduped_4_1 ),
                PreCompose( T_1,
                    ProjectionInFactorOfDirectProductWithGivenDirectProduct( T_1,
                            deduped_7_1,
                            2,
                            deduped_4_1 ),
                    InjectionOfCofactorOfCoproductWithGivenCoproduct( T_1,
                            deduped_8_1,
                            2,
                            deduped_5_1 ) ) ],
              deduped_1_1 ) ],
        source_1 );
end
gap> ContinueCompilationAtPrimitivelyInstalledOperationsOfCategory( DC );
gap> ContinueCompilationAtPrimitivelyInstalledOperationsOfCategory( C );
gap> hom_axb_u_axc_a_x_buc := MorphismsOfExternalHom( axb_u_axc, a_x_buc );;
gap> Length( hom_axb_u_axc_a_x_buc ) = 1;
true
gap> lfactor := hom_axb_u_axc_a_x_buc[1];
<A morphism in FreeDistributiveCategoryWithStrictProductAndCoproducts(
 FreeCategory( RightQuiver( "Q(a,b,c)[]" ) ) )>
gap> IsOne( lfactor );
true
gap> lfactor_reconstructed :=
>   CellAsEvaluatableString( lfactor, [ "DC", "UPC", "PC", "C" ] );;
gap> lfactor = EvalString( lfactor_reconstructed );
true
gap> hom_a_x_buc_axb_u_axc := MorphismsOfExternalHom( a_x_buc, axb_u_axc );;
gap> Length( hom_a_x_buc_axb_u_axc ) = 1;
true
gap> lexpand := hom_a_x_buc_axb_u_axc[1];
<A morphism in FreeDistributiveCategoryWithStrictProductAndCoproducts(
 FreeCategory( RightQuiver( "Q(a,b,c)[]" ) ) )>
gap> IsOne( lexpand );
true
gap> Inverse( lfactor ) = lexpand;
true
gap> lexpand_reconstructed :=
>   CellAsEvaluatableString( lexpand, [ "DC", "UPC", "PC", "C" ] );;
gap> lexpand_reconstructed = lfactor_reconstructed;
true
gap> lexpand = EvalString( lexpand_reconstructed );
true
gap> ReadPackage( "FiniteCocompletions",
>         "examples/precompileLeftCartesianDistributivityFactoring_func.g" );
true
gap> func( DC, a_x_buc, a, b, c, axb_u_axc ) = lfactor;
true
gap> T := DummyCategory( rec( name := "A placeholder distributive category",
>        properties := [ "IsDistributiveCategory" ],
>        list_of_operations_to_install :=
>        Concatenation( [ "ObjectConstructor", "MorphismConstructor" ],
>        CAP_INTERNAL_CONSTRUCTIVE_CATEGORIES_RECORD.IsDistributiveCategory ) ) );
A placeholder distributive category
gap> StartTimer( "LeftCartesianDistributivityFactoringWithGivenObjects" );
gap> StopCompilationAtPrimitivelyInstalledOperationsOfCategory( T );
gap> compiled_func :=
>   CapJitCompiledFunction( func,
>           T,
>           [ "category", "object", "object", "object", "object", "object" ],
>           "morphism" );
function( T_1, source_1, a_1, b_1, c_1, target_1 ) ... end
gap> StopTimer( "LeftCartesianDistributivityFactoringWithGivenObjects" );
gap> #DisplayTimer( "LeftCartesianDistributivityFactoringWithGivenObjects" );
gap> compiled_func( DC, axb_u_axc, a, b, c, a_x_buc ) = lfactor;
true
gap> Display( compiled_func );
function ( T_1, source_1, a_1, b_1, c_1, target_1 )
    local deduped_1_1, deduped_2_1, deduped_3_1, deduped_4_1, deduped_5_1;
    deduped_5_1 := [ a_1, c_1 ];
    deduped_4_1 := [ a_1, b_1 ];
    deduped_3_1 := DirectProduct( T_1, deduped_5_1 );
    deduped_2_1 := DirectProduct( T_1, deduped_4_1 );
    deduped_1_1 := [ deduped_2_1, deduped_3_1 ];
    return
      UniversalMorphismFromCoproductWithGivenCoproduct( T_1,
        deduped_1_1,
        target_1,
        [ PreCompose( T_1,
            UniversalMorphismIntoDirectProductWithGivenDirectProduct( T_1,
                deduped_4_1,
                deduped_2_1,
                [ ProjectionInFactorOfDirectProductWithGivenDirectProduct( T_1,
                        deduped_4_1,
                        1,
                        deduped_2_1 ),
                  ProjectionInFactorOfDirectProductWithGivenDirectProduct( T_1,
                          deduped_4_1,
                          2, deduped_2_1 ) ],
                deduped_2_1 ),
            InjectionOfCofactorOfCoproductWithGivenCoproduct( T_1,
                deduped_1_1,
                1,
                target_1 ) ),
          PreCompose( T_1,
              UniversalMorphismIntoDirectProductWithGivenDirectProduct( T_1,
                  deduped_5_1,
                  deduped_3_1,
                  [ ProjectionInFactorOfDirectProductWithGivenDirectProduct( T_1,
                          deduped_5_1,
                          1,
                          deduped_3_1 ),
                    ProjectionInFactorOfDirectProductWithGivenDirectProduct( T_1,
                            deduped_5_1,
                            2,
                            deduped_3_1 ) ],
                  deduped_3_1 ),
              InjectionOfCofactorOfCoproductWithGivenCoproduct( T_1,
                  deduped_1_1,
                  2,
                  target_1 ) ) ],
        source_1 );
end
#@fi

14.4 Extracting LeftCartesianDistributivityFactoring from ur-algorithms using PathCategory

#@if ValueOption( "no_precompiled_code" ) <> true
gap> LoadPackage( "FiniteCocompletions", false );
true
gap> LoadPackage( "CompilerForCAP", ">= 2023.12-09", false );
true
gap> ReadPackageOnce( "FinSetsForCAP", "gap/CompilerLogic.gi" );
true
gap> sFinSets := CategoryOfSkeletalFinSets( : no_precompiled_code := true );
SkeletalFinSets
gap> q := FinQuiver( "Q(a,b,c)[]" );
FinQuiver( "Q(a,b,c)[]" )
gap> C := PathCategory( q : range_of_HomStructure := sFinSets );
PathCategory( FinQuiver( "Q(a,b,c)[]" ) )
gap> DC := FreeDistributiveCategoryWithStrictProductAndCoproducts( C );
FreeDistributiveCategoryWithStrictProductAndCoproducts(
PathCategory( FinQuiver( "Q(a,b,c)[]" ) ) )
gap> UPC := ModelingCategory( DC );
FiniteStrictCoproductCompletion( FiniteStrictProductCompletion(
PathCategory( FinQuiver( "Q(a,b,c)[]" ) ) ) )
gap> PC := UnderlyingCategory( UPC );
FiniteStrictProductCompletion( PathCategory( FinQuiver( "Q(a,b,c)[]" ) ) )
gap> a := DC.a;
<An object in FreeDistributiveCategoryWithStrictProductAndCoproducts(
 PathCategory( FinQuiver( "Q(a,b,c)[]" ) ) )>
gap> b := DC.b;
<An object in FreeDistributiveCategoryWithStrictProductAndCoproducts(
 PathCategory( FinQuiver( "Q(a,b,c)[]" ) ) )>
gap> c := DC.c;
<An object in FreeDistributiveCategoryWithStrictProductAndCoproducts(
 PathCategory( FinQuiver( "Q(a,b,c)[]" ) ) )>
gap> axb_u_axc := Coproduct( DirectProduct( a, b ), DirectProduct( a, c ) );
<An object in FreeDistributiveCategoryWithStrictProductAndCoproducts(
 PathCategory( FinQuiver( "Q(a,b,c)[]" ) ) )>
gap> a_x_buc := DirectProduct( a, Coproduct( b, c ) );
<An object in FreeDistributiveCategoryWithStrictProductAndCoproducts(
 PathCategory( FinQuiver( "Q(a,b,c)[]" ) ) )>
gap> axb_u_axc = a_x_buc;
true
gap> implemented_func :=
>   function( T, source, a, b, c, target )
>     return LeftCartesianDistributivityFactoringWithGivenObjects( T,
>                    source,
>                    a,
>                    [ b, c ],
>                    target ); end;
function( T, source, a, b, c, target ) ... end
gap> lfactor_implemented := implemented_func( DC, axb_u_axc, a, b, c, a_x_buc );
<A morphism in FreeDistributiveCategoryWithStrictProductAndCoproducts(
 PathCategory( FinQuiver( "Q(a,b,c)[]" ) ) )>
gap> StartTimer( "LeftCartesianDistributivityFactoringWithGivenObjects" );
gap> StopCompilationAtPrimitivelyInstalledOperationsOfCategory( DC );
gap> ReadPackageOnce( "FiniteCocompletions",
>     "examples/precompileLeftCartesianDistributivityFactoring_CompilerLogic.g" );
true
gap> compiled_implemented_func :=
>   CapJitCompiledFunction( implemented_func,
>           DC,
>           [ "category", "object", "object", "object", "object", "object" ],
>           "morphism" );
function( T_1, source_1, a_1, b_1, c_1, target_1 ) ... end
gap> StopTimer( "LeftCartesianDistributivityFactoringWithGivenObjects" );
gap> #DisplayTimer( "LeftCartesianDistributivityFactoringWithGivenObjects" );
gap> compiled_implemented_func( DC, axb_u_axc, a, b, c, a_x_buc ) =
>   lfactor_implemented;
true
gap> Display( compiled_implemented_func );
function ( T_1, source_1, a_1, b_1, c_1, target_1 )
    local deduped_1_1, deduped_2_1, deduped_3_1, deduped_4_1,
          deduped_5_1, deduped_6_1, deduped_7_1, deduped_8_1;
    deduped_8_1 := [ b_1, c_1 ];
    deduped_7_1 := [ a_1, c_1 ];
    deduped_6_1 := [ a_1, b_1 ];
    deduped_5_1 := Coproduct( T_1, deduped_8_1 );
    deduped_4_1 := DirectProduct( T_1, deduped_7_1 );
    deduped_3_1 := DirectProduct( T_1, deduped_6_1 );
    deduped_2_1 := [ a_1, deduped_5_1 ];
    deduped_1_1 := DirectProduct( T_1, deduped_2_1 );
    return
      UniversalMorphismFromCoproductWithGivenCoproduct( T_1,
        [ deduped_3_1, deduped_4_1 ],
        target_1,
        [ UniversalMorphismIntoDirectProductWithGivenDirectProduct( T_1,
            deduped_2_1,
            deduped_3_1,
            [ ProjectionInFactorOfDirectProductWithGivenDirectProduct( T_1,
                    deduped_6_1, 1,
                    deduped_3_1 ),
              PreCompose( T_1,
                  ProjectionInFactorOfDirectProductWithGivenDirectProduct( T_1,
                          deduped_6_1,
                          2,
                          deduped_3_1 ),
                  InjectionOfCofactorOfCoproductWithGivenCoproduct( T_1,
                          deduped_8_1,
                          1,
                          deduped_5_1 ) ) ],
            deduped_1_1 ),
          UniversalMorphismIntoDirectProductWithGivenDirectProduct( T_1,
              deduped_2_1,
              deduped_4_1,
              [ ProjectionInFactorOfDirectProductWithGivenDirectProduct( T_1,
                  deduped_7_1,
                  1,
                  deduped_4_1 ),
                PreCompose( T_1,
                    ProjectionInFactorOfDirectProductWithGivenDirectProduct( T_1,
                            deduped_7_1,
                            2,
                            deduped_4_1 ),
                    InjectionOfCofactorOfCoproductWithGivenCoproduct( T_1,
                            deduped_8_1,
                            2,
                            deduped_5_1 ) ) ],
              deduped_1_1 ) ],
        source_1 );
end
gap> ContinueCompilationAtPrimitivelyInstalledOperationsOfCategory( DC );
gap> ContinueCompilationAtPrimitivelyInstalledOperationsOfCategory( C );
gap> hom_axb_u_axc_a_x_buc := MorphismsOfExternalHom( axb_u_axc, a_x_buc );;
gap> Length( hom_axb_u_axc_a_x_buc ) = 1;
true
gap> lfactor := hom_axb_u_axc_a_x_buc[1];
<A morphism in FreeDistributiveCategoryWithStrictProductAndCoproducts(
 PathCategory( FinQuiver( "Q(a,b,c)[]" ) ) )>
gap> IsOne( lfactor );
true
gap> lfactor_reconstructed :=
>   CellAsEvaluatableString( lfactor, [ "DC", "UPC", "PC", "C" ] );;
gap> lfactor = EvalString( lfactor_reconstructed );
true
gap> hom_a_x_buc_axb_u_axc := MorphismsOfExternalHom( a_x_buc, axb_u_axc );;
gap> Length( hom_a_x_buc_axb_u_axc ) = 1;
true
gap> lexpand := hom_a_x_buc_axb_u_axc[1];
<A morphism in FreeDistributiveCategoryWithStrictProductAndCoproducts(
 PathCategory( FinQuiver( "Q(a,b,c)[]" ) ) )>
gap> IsOne( lexpand );
true
gap> Inverse( lfactor ) = lexpand;
true
gap> lexpand_reconstructed :=
>   CellAsEvaluatableString( lexpand, [ "DC", "UPC", "PC", "C" ] );;
gap> lexpand_reconstructed = lfactor_reconstructed;
true
gap> lexpand = EvalString( lexpand_reconstructed );
true
gap> ReadPackage( "FiniteCocompletions",
>         "examples/precompileLeftCartesianDistributivityFactoring_func.g" );
true
gap> func( DC, a_x_buc, a, b, c, axb_u_axc ) = lfactor;
true
gap> T := DummyCategory( rec( name := "A placeholder distributive category",
>        properties := [ "IsDistributiveCategory" ],
>        list_of_operations_to_install :=
>        Concatenation( [ "ObjectConstructor", "MorphismConstructor" ],
>        CAP_INTERNAL_CONSTRUCTIVE_CATEGORIES_RECORD.IsDistributiveCategory ) ) );
A placeholder distributive category
gap> StartTimer( "LeftCartesianDistributivityFactoringWithGivenObjects" );
gap> StopCompilationAtPrimitivelyInstalledOperationsOfCategory( T );
gap> compiled_func :=
>   CapJitCompiledFunction( func,
>           T,
>           [ "category", "object", "object", "object", "object", "object" ],
>           "morphism" );
function( T_1, source_1, a_1, b_1, c_1, target_1 ) ... end
gap> StopTimer( "LeftCartesianDistributivityFactoringWithGivenObjects" );
gap> #DisplayTimer( "LeftCartesianDistributivityFactoringWithGivenObjects" );
gap> compiled_func( DC, axb_u_axc, a, b, c, a_x_buc ) = lfactor;
true
gap> Display( compiled_func );
function ( T_1, source_1, a_1, b_1, c_1, target_1 )
    local deduped_1_1, deduped_2_1, deduped_3_1, deduped_4_1, deduped_5_1;
    deduped_5_1 := [ a_1, c_1 ];
    deduped_4_1 := [ a_1, b_1 ];
    deduped_3_1 := DirectProduct( T_1, deduped_5_1 );
    deduped_2_1 := DirectProduct( T_1, deduped_4_1 );
    deduped_1_1 := [ deduped_2_1, deduped_3_1 ];
    return
      UniversalMorphismFromCoproductWithGivenCoproduct( T_1,
        deduped_1_1,
        target_1,
        [ PreCompose( T_1,
            UniversalMorphismIntoDirectProductWithGivenDirectProduct( T_1,
                deduped_4_1,
                deduped_2_1,
                [ ProjectionInFactorOfDirectProductWithGivenDirectProduct( T_1,
                        deduped_4_1,
                        1,
                        deduped_2_1 ),
                  ProjectionInFactorOfDirectProductWithGivenDirectProduct( T_1,
                          deduped_4_1,
                          2, deduped_2_1 ) ],
                deduped_2_1 ),
            InjectionOfCofactorOfCoproductWithGivenCoproduct( T_1,
                deduped_1_1,
                1,
                target_1 ) ),
          PreCompose( T_1,
              UniversalMorphismIntoDirectProductWithGivenDirectProduct( T_1,
                  deduped_5_1,
                  deduped_3_1,
                  [ ProjectionInFactorOfDirectProductWithGivenDirectProduct( T_1,
                          deduped_5_1,
                          1,
                          deduped_3_1 ),
                    ProjectionInFactorOfDirectProductWithGivenDirectProduct( T_1,
                            deduped_5_1,
                            2,
                            deduped_3_1 ) ],
                  deduped_3_1 ),
              InjectionOfCofactorOfCoproductWithGivenCoproduct( T_1,
                  deduped_1_1,
                  2,
                  target_1 ) ) ],
        source_1 );
end
#@fi
 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 
Goto Chapter: Top 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Ind

generated by GAPDoc2HTML