diff --git a/PackageInfo.g b/PackageInfo.g index 72223e5d..e37e3575 100644 --- a/PackageInfo.g +++ b/PackageInfo.g @@ -10,7 +10,7 @@ SetPackageInfo( rec( PackageName := "FinGSetsForCAP", Subtitle := "The (skeletal) elementary topos of finite G-sets", -Version := "2026.05-07", +Version := "2026.05-08", Date := (function ( ) if IsBound( GAPInfo.SystemEnvironment.GAP_PKG_RELEASE_DATE ) then return GAPInfo.SystemEnvironment.GAP_PKG_RELEASE_DATE; else return Concatenation( ~.Version{[ 1 .. 4 ]}, "-", ~.Version{[ 6, 7 ]}, "-01" ); fi; end)( ), License := "GPL-2.0-or-later", @@ -100,7 +100,8 @@ Dependencies := rec( NeededOtherPackages := [ [ "GAPDoc", ">= 1.5" ], [ "CAP", ">= 2026.05-04" ], - [ "GroupsAsCategoriesForCAP", ">= 2026.05-03" ], + [ "GroupsAsCategoriesForCAP", ">= 2026.05-04" ], + [ "Toposes", ">= 2022.05-03" ], [ "FinSetsForCAP", ">= 2022.05-01" ], ], ExternalConditions := [ ], diff --git a/examples/precompile_SkeletalCategoryOfTransitiveLeftGSets.g b/examples/precompile_SkeletalCategoryOfTransitiveLeftGSets.g index 809b6350..cbc44c27 100644 --- a/examples/precompile_SkeletalCategoryOfTransitiveLeftGSets.g +++ b/examples/precompile_SkeletalCategoryOfTransitiveLeftGSets.g @@ -8,7 +8,11 @@ LoadPackage( "FinGSetsForCAP", false ); #! true -LoadPackage( "CompilerForCAP", ">= 2026.05-01", false ); +LoadPackage( "CompilerForCAP", ">= 2026.05-03", false ); +#! true +ReadPackageOnce( "FinSetsForCAP", "gap/CompilerLogic.gi" ); +#! true +ReadPackageOnce( "FinGSetsForCAP", "gap/CompilerLogic.gi" ); #! true category_constructor := @@ -20,18 +24,11 @@ given_arguments := [ C2 ];; compiled_category_name := "SkeletalCategoryOfTransitiveLeftGSets_precompiled";; package_name := "FinGSetsForCAP";; -#primitive_operations := -# ListPrimitivelyInstalledOperationsOfCategory( -# category_constructor( given_arguments[1] -# : no_precompiled_code := true ) );; -list_of_operations := - #SortedList( Concatenation( primitive_operations, - [ "SetOfObjectsOfCategory", - "IsEqualForObjects", - "IsWellDefinedForObjects", - "IsWellDefinedForMorphisms", - ];; - #) );; +all_operations := + ListInstalledOperationsOfCategory( + category_constructor( given_arguments[1] + : no_precompiled_code := true ) );; +list_of_operations := SortedList( all_operations );; CapJitPrecompileCategoryAndCompareResult( category_constructor, diff --git a/gap/CompilerLogic.gi b/gap/CompilerLogic.gi new file mode 100644 index 00000000..de4ca091 --- /dev/null +++ b/gap/CompilerLogic.gi @@ -0,0 +1,32 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# FinGSetsForCAP: The (skeletal) elementary topos of finite G-sets +# +# Implementations +# + +CapJitAddLogicTemplate( + rec( + variable_names := [ "v", "b" ], + variable_filters := [ IsBigInt, IsBigInt ], + src_template := "DigitInPositionalNotation( v, BigInt( 0 ), BigInt( 1 ), b )", + dst_template := "v", + ) +); + +CapJitAddLogicTemplate( + rec( + variable_names := [ "gs", "U", "TG", "source", "target", "h" ], + variable_filters := [ IsList, IsList, IsSkeletalCategoryOfTransitiveLeftGSets, IsObjectInSkeletalCategoryOfTransitiveLeftGSets, IsObjectInSkeletalCategoryOfTransitiveLeftGSets, IsMultiplicativeElementWithInverse ], + src_template := "SafeUniquePositionProperty( List( gs, g -> CreateCapCategoryMorphismWithAttributes( TG, source, target, UnderlyingGroupElement, g ) ), mor -> MultiplyGroupElements( InverseImmutable( UnderlyingGroupElement( mor ) ), h ) in U[ObjectNumber( Range( mor ) )] )", + dst_template := "SafeUniquePositionProperty( gs, g -> MultiplyGroupElements( InverseImmutable( g ), h ) in U[ObjectNumber( target )] )", + ) +); + +CapJitAddLogicTemplate( + rec( + variable_names := [ "iota", "func" ], + variable_filters := [ IsMorphismInSkeletalCategoryOfFiniteSets, IsFunction ], + src_template := "SafeUniquePositionProperty( List( [ 0 .. Cardinality( Target( iota ) ) - 1 ], func ), mor -> AsList( mor ) = AsList( iota ) )", + dst_template := "1 + AsList( iota )[1]", + ) +); diff --git a/gap/SkeletalCategoryOfTransitiveLeftGSets.gd b/gap/SkeletalCategoryOfTransitiveLeftGSets.gd index d20139a2..a476a048 100644 --- a/gap/SkeletalCategoryOfTransitiveLeftGSets.gd +++ b/gap/SkeletalCategoryOfTransitiveLeftGSets.gd @@ -186,11 +186,11 @@ end ); DeclareAttribute( "UnderlyingGroup", IsSkeletalCategoryOfTransitiveLeftGSets ); -#CapJitAddTypeSignature( "UnderlyingGroup", [ IsSkeletalCategoryOfTransitiveLeftGSets ], function ( input_types ) -# -# return CapJitDataTypeOfGroup( UnderlyingGroup( input_types[1].category ) ); -# -#end ); +CapJitAddTypeSignature( "UnderlyingGroup", [ IsSkeletalCategoryOfTransitiveLeftGSets ], function ( input_types ) + + return CapJitDataTypeOfGroup( UnderlyingGroup( input_types[1].category ) ); + +end ); #! @Description #! The group $G$ underlying the skeletal category C of transitive left $G$-set, viewed as a category on one object. @@ -219,7 +219,7 @@ DeclareAttribute( "UnderlyingTableOfMarks", DeclareAttribute( "NumberOfObjects", IsSkeletalCategoryOfTransitiveLeftGSets ); -#CapJitAddTypeSignature( "NumberOfObjects", [ IsSkeletalCategoryOfTransitiveLeftGSets ], IsBigInt ); +CapJitAddTypeSignature( "NumberOfObjects", [ IsSkeletalCategoryOfTransitiveLeftGSets ], IsBigInt ); #! @Description #! The list of cardinalities of objects of the skeletal category C of transitive left $G$-set. @@ -228,11 +228,11 @@ DeclareAttribute( "NumberOfObjects", DeclareAttribute( "CardinalitiesOfObjects", IsSkeletalCategoryOfTransitiveLeftGSets ); -#CapJitAddTypeSignature( "CardinalitiesOfObjects", [ IsSkeletalCategoryOfTransitiveLeftGSets ], function ( input_types ) -# -# return CapJitDataTypeOfListOf( IsBigInt ); -# -#end ); +CapJitAddTypeSignature( "CardinalitiesOfObjects", [ IsSkeletalCategoryOfTransitiveLeftGSets ], function ( input_types ) + + return CapJitDataTypeOfListOf( IsBigInt ); + +end ); #! @Description #! The list of subgroups up to conjugation of the underlying group. @@ -241,11 +241,11 @@ DeclareAttribute( "CardinalitiesOfObjects", DeclareAttribute( "RepresentativesOfSubgroupsUpToConjugation", IsSkeletalCategoryOfTransitiveLeftGSets ); -#CapJitAddTypeSignature( "RepresentativesOfSubgroupsUpToConjugation", [ IsSkeletalCategoryOfTransitiveLeftGSets ], function ( input_types ) -# -# return CapJitDataTypeOfListOf( CapJitDataTypeOfSubgroup( UnderlyingGroup( input_types[1].category ) ) ); -# -#end ); +CapJitAddTypeSignature( "RepresentativesOfSubgroupsUpToConjugation", [ IsSkeletalCategoryOfTransitiveLeftGSets ], function ( input_types ) + + return CapJitDataTypeOfListOf( CapJitDataTypeOfSubgroup( UnderlyingGroup( input_types[1].category ) ) ); + +end ); #! @Description #! The positive integer $i$ such that the transitive left $G$-set Omega $\cong U_i \backslash G$. diff --git a/gap/SkeletalCategoryOfTransitiveLeftGSets.gi b/gap/SkeletalCategoryOfTransitiveLeftGSets.gi index 0281bb99..d6c674cb 100644 --- a/gap/SkeletalCategoryOfTransitiveLeftGSets.gi +++ b/gap/SkeletalCategoryOfTransitiveLeftGSets.gi @@ -658,11 +658,9 @@ InstallMethod( SkeletalCategoryOfTransitiveLeftGSets, Append( SkeletalTransitiveLeftGSets!.compiler_hints.category_attribute_names, [ "UnderlyingGroup", - "UnderlyingGroupAsCategory", "UnderlyingTableOfMarks", "NumberOfObjects", "CardinalitiesOfObjects", - "SetOfObjectsAsUnresolvableAttribute", "RepresentativesOfSubgroupsUpToConjugation", ] ); @@ -736,7 +734,7 @@ InstallMethodForCompilerForCAP( SetOfObjects, function ( SkeletalTransitiveLeftGSets ) - return SetOfObjectsAsUnresolvableAttribute( SkeletalTransitiveLeftGSets ); + return SetOfObjectsOfCategory( SkeletalTransitiveLeftGSets ); end ); diff --git a/gap/precompiled_categories/SkeletalCategoryOfTransitiveLeftGSets_precompiled.gi b/gap/precompiled_categories/SkeletalCategoryOfTransitiveLeftGSets_precompiled.gi index 93cc1443..df971f3f 100644 --- a/gap/precompiled_categories/SkeletalCategoryOfTransitiveLeftGSets_precompiled.gi +++ b/gap/precompiled_categories/SkeletalCategoryOfTransitiveLeftGSets_precompiled.gi @@ -5,6 +5,1818 @@ # BindGlobal( "ADD_FUNCTIONS_FOR_SkeletalCategoryOfTransitiveLeftGSets_precompiled", function ( cat ) + ## + AddCoequalizer( cat, + +######## +function ( cat_1, Y_1, morphisms_1 ) + local hoisted_1_1, hoisted_2_1, hoisted_3_1, hoisted_4_1, deduped_8_1, deduped_9_1, deduped_10_1, deduped_11_1, deduped_12_1; + deduped_12_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_11_1 := UnderlyingGroup( cat_1 ); + deduped_10_1 := Length( morphisms_1 ); + deduped_9_1 := [ 1 .. deduped_10_1 ]; + hoisted_3_1 := List( deduped_9_1, function ( i_2 ) + return CAP_JIT_INCOMPLETE_LOGIC( UnderlyingGroupElement( CAP_JIT_INCOMPLETE_LOGIC( morphisms_1[i_2] ) ) ); + end ); + hoisted_2_1 := List( deduped_9_1, function ( i_2 ) + return CAP_JIT_INCOMPLETE_LOGIC( InverseImmutable( UnderlyingGroupElement( CAP_JIT_INCOMPLETE_LOGIC( morphisms_1[i_2] ) ) ) ); + end ); + deduped_8_1 := SubmagmaWithInverses( deduped_11_1, Concatenation( CAP_JIT_INCOMPLETE_LOGIC( GeneratorsOfMagmaWithInverses( CAP_JIT_INCOMPLETE_LOGIC( deduped_12_1[ObjectNumber( Y_1 )] ) ) ), List( [ 1 .. deduped_10_1 - 1 ], function ( i_2 ) + return MultiplyGroupElements( hoisted_2_1[i_2], hoisted_3_1[i_2 + 1] ); + end ) ) ); + hoisted_4_1 := Index( deduped_11_1, deduped_8_1 ); + hoisted_1_1 := CardinalitiesOfObjects( cat_1 ); + return CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, SafeFirst( Filtered( [ 1 .. NumberOfObjects( cat_1 ) ], function ( i_2 ) + return hoisted_1_1[i_2] = hoisted_4_1; + end ), function ( c_2 ) + return IsConjugate( deduped_11_1, deduped_8_1, deduped_12_1[c_2] ); + end ) ); +end +######## + + , 101 : IsPrecompiledDerivation := true ); + + ## + cat!.cached_precompiled_functions.Coequalizer := + +######## +function ( cat_1, Y_1, morphisms_1 ) + local hoisted_1_1, hoisted_2_1, hoisted_3_1, hoisted_4_1, hoisted_5_1, hoisted_6_1, deduped_10_1, deduped_11_1, deduped_12_1, deduped_13_1, deduped_14_1; + deduped_14_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_13_1 := UnderlyingGroup( cat_1 ); + deduped_12_1 := Length( morphisms_1 ); + deduped_11_1 := [ 1 .. deduped_12_1 ]; + hoisted_4_1 := List( morphisms_1, UnderlyingGroupElement ); + hoisted_5_1 := List( deduped_11_1, function ( i_2 ) + return hoisted_4_1[i_2]; + end ); + hoisted_2_1 := List( morphisms_1, function ( x_2 ) + return InverseImmutable( UnderlyingGroupElement( x_2 ) ); + end ); + hoisted_3_1 := List( deduped_11_1, function ( i_2 ) + return hoisted_2_1[i_2]; + end ); + deduped_10_1 := SubmagmaWithInverses( deduped_13_1, Concatenation( List( deduped_14_1, GeneratorsOfMagmaWithInverses )[ObjectNumber( Y_1 )], List( [ 1 .. deduped_12_1 - 1 ], function ( i_2 ) + return MultiplyGroupElements( hoisted_3_1[i_2], hoisted_5_1[i_2 + 1] ); + end ) ) ); + hoisted_6_1 := Index( deduped_13_1, deduped_10_1 ); + hoisted_1_1 := CardinalitiesOfObjects( cat_1 ); + return CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, SafeFirst( Filtered( [ 1 .. NumberOfObjects( cat_1 ) ], function ( i_2 ) + return hoisted_1_1[i_2] = hoisted_6_1; + end ), function ( c_2 ) + return IsConjugate( deduped_13_1, deduped_10_1, deduped_14_1[c_2] ); + end ) ); +end +######## + + ; + + ## + AddCoequalizerFunctorial( cat, + +######## +function ( cat_1, morphisms_1, mu_1, morphismsp_1 ) + local deduped_1_1, hoisted_2_1, hoisted_3_1, hoisted_4_1, hoisted_8_1, hoisted_9_1, hoisted_10_1, deduped_12_1, deduped_13_1, deduped_14_1, deduped_15_1, deduped_16_1, deduped_17_1, deduped_18_1, deduped_19_1, deduped_20_1, deduped_21_1, deduped_22_1, deduped_23_1; + deduped_23_1 := Length( morphismsp_1 ); + deduped_22_1 := Length( morphisms_1 ); + deduped_21_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_20_1 := UnderlyingGroup( cat_1 ); + deduped_19_1 := [ 1 .. deduped_23_1 ]; + deduped_18_1 := [ 1 .. deduped_22_1 ]; + deduped_17_1 := [ 1 .. NumberOfObjects( cat_1 ) ]; + deduped_16_1 := List( deduped_21_1, GeneratorsOfMagmaWithInverses ); + hoisted_9_1 := List( deduped_19_1, function ( i_2 ) + return CAP_JIT_INCOMPLETE_LOGIC( UnderlyingGroupElement( CAP_JIT_INCOMPLETE_LOGIC( morphismsp_1[i_2] ) ) ); + end ); + hoisted_8_1 := List( deduped_19_1, function ( i_2 ) + return CAP_JIT_INCOMPLETE_LOGIC( InverseImmutable( UnderlyingGroupElement( CAP_JIT_INCOMPLETE_LOGIC( morphismsp_1[i_2] ) ) ) ); + end ); + deduped_13_1 := SubmagmaWithInverses( deduped_20_1, Concatenation( deduped_16_1[ObjectNumber( Range( mu_1 ) )], List( [ 1 .. deduped_23_1 - 1 ], function ( i_2 ) + return MultiplyGroupElements( hoisted_8_1[i_2], hoisted_9_1[i_2 + 1] ); + end ) ) ); + hoisted_10_1 := Index( deduped_20_1, deduped_13_1 ); + deduped_1_1 := CardinalitiesOfObjects( cat_1 ); + deduped_15_1 := SafeFirst( Filtered( deduped_17_1, function ( i_2 ) + return deduped_1_1[i_2] = hoisted_10_1; + end ), function ( c_2 ) + return IsConjugate( deduped_20_1, deduped_13_1, deduped_21_1[c_2] ); + end ); + hoisted_3_1 := List( deduped_18_1, function ( i_2 ) + return CAP_JIT_INCOMPLETE_LOGIC( UnderlyingGroupElement( CAP_JIT_INCOMPLETE_LOGIC( morphisms_1[i_2] ) ) ); + end ); + hoisted_2_1 := List( deduped_18_1, function ( i_2 ) + return CAP_JIT_INCOMPLETE_LOGIC( InverseImmutable( UnderlyingGroupElement( CAP_JIT_INCOMPLETE_LOGIC( morphisms_1[i_2] ) ) ) ); + end ); + deduped_12_1 := SubmagmaWithInverses( deduped_20_1, Concatenation( deduped_16_1[ObjectNumber( Source( mu_1 ) )], List( [ 1 .. deduped_22_1 - 1 ], function ( i_2 ) + return MultiplyGroupElements( hoisted_2_1[i_2], hoisted_3_1[i_2 + 1] ); + end ) ) ); + hoisted_4_1 := Index( deduped_20_1, deduped_12_1 ); + deduped_14_1 := SafeFirst( Filtered( deduped_17_1, function ( i_2 ) + return deduped_1_1[i_2] = hoisted_4_1; + end ), function ( c_2 ) + return IsConjugate( deduped_20_1, deduped_12_1, deduped_21_1[c_2] ); + end ); + return CreateCapCategoryMorphismWithAttributes( cat_1, CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_14_1 ), CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_15_1 ), UnderlyingGroupElement, MultiplyGroupElements( InverseImmutable( RepresentativeAction( deduped_20_1, deduped_12_1, deduped_21_1[deduped_14_1] ) ), MultiplyGroupElements( UnderlyingGroupElement( mu_1 ), RepresentativeAction( deduped_20_1, deduped_13_1, deduped_21_1[deduped_15_1] ) ) ) ); +end +######## + + , 609 : IsPrecompiledDerivation := true ); + + ## + cat!.cached_precompiled_functions.CoequalizerFunctorial := + +######## +function ( cat_1, morphisms_1, mu_1, morphismsp_1 ) + local deduped_1_1, hoisted_2_1, hoisted_3_1, hoisted_4_1, hoisted_5_1, hoisted_6_1, hoisted_10_1, hoisted_11_1, hoisted_12_1, hoisted_13_1, hoisted_14_1, deduped_16_1, deduped_17_1, deduped_18_1, deduped_19_1, deduped_20_1, deduped_21_1, deduped_22_1, deduped_23_1, deduped_24_1, deduped_25_1, deduped_26_1, deduped_27_1; + deduped_27_1 := Length( morphismsp_1 ); + deduped_26_1 := Length( morphisms_1 ); + deduped_25_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_24_1 := UnderlyingGroup( cat_1 ); + deduped_23_1 := [ 1 .. deduped_27_1 ]; + deduped_22_1 := [ 1 .. deduped_26_1 ]; + deduped_21_1 := [ 1 .. NumberOfObjects( cat_1 ) ]; + deduped_20_1 := List( deduped_25_1, GeneratorsOfMagmaWithInverses ); + hoisted_12_1 := List( morphismsp_1, UnderlyingGroupElement ); + hoisted_13_1 := List( deduped_23_1, function ( i_2 ) + return hoisted_12_1[i_2]; + end ); + hoisted_10_1 := List( morphismsp_1, function ( x_2 ) + return InverseImmutable( UnderlyingGroupElement( x_2 ) ); + end ); + hoisted_11_1 := List( deduped_23_1, function ( i_2 ) + return hoisted_10_1[i_2]; + end ); + deduped_17_1 := SubmagmaWithInverses( deduped_24_1, Concatenation( deduped_20_1[ObjectNumber( Range( mu_1 ) )], List( [ 1 .. deduped_27_1 - 1 ], function ( i_2 ) + return MultiplyGroupElements( hoisted_11_1[i_2], hoisted_13_1[i_2 + 1] ); + end ) ) ); + hoisted_14_1 := Index( deduped_24_1, deduped_17_1 ); + deduped_1_1 := CardinalitiesOfObjects( cat_1 ); + deduped_19_1 := SafeFirst( Filtered( deduped_21_1, function ( i_2 ) + return deduped_1_1[i_2] = hoisted_14_1; + end ), function ( c_2 ) + return IsConjugate( deduped_24_1, deduped_17_1, deduped_25_1[c_2] ); + end ); + hoisted_4_1 := List( morphisms_1, UnderlyingGroupElement ); + hoisted_5_1 := List( deduped_22_1, function ( i_2 ) + return hoisted_4_1[i_2]; + end ); + hoisted_2_1 := List( morphisms_1, function ( x_2 ) + return InverseImmutable( UnderlyingGroupElement( x_2 ) ); + end ); + hoisted_3_1 := List( deduped_22_1, function ( i_2 ) + return hoisted_2_1[i_2]; + end ); + deduped_16_1 := SubmagmaWithInverses( deduped_24_1, Concatenation( deduped_20_1[ObjectNumber( Source( mu_1 ) )], List( [ 1 .. deduped_26_1 - 1 ], function ( i_2 ) + return MultiplyGroupElements( hoisted_3_1[i_2], hoisted_5_1[i_2 + 1] ); + end ) ) ); + hoisted_6_1 := Index( deduped_24_1, deduped_16_1 ); + deduped_18_1 := SafeFirst( Filtered( deduped_21_1, function ( i_2 ) + return deduped_1_1[i_2] = hoisted_6_1; + end ), function ( c_2 ) + return IsConjugate( deduped_24_1, deduped_16_1, deduped_25_1[c_2] ); + end ); + return CreateCapCategoryMorphismWithAttributes( cat_1, CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_18_1 ), CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_19_1 ), UnderlyingGroupElement, MultiplyGroupElements( InverseImmutable( RepresentativeAction( deduped_24_1, deduped_16_1, deduped_25_1[deduped_18_1] ) ), MultiplyGroupElements( UnderlyingGroupElement( mu_1 ), RepresentativeAction( deduped_24_1, deduped_17_1, deduped_25_1[deduped_19_1] ) ) ) ); +end +######## + + ; + + ## + AddCoequalizerFunctorialWithGivenCoequalizers( cat, + +######## +function ( cat_1, P_1, morphisms_1, mu_1, morphismsp_1, Pp_1 ) + local deduped_1_1, hoisted_2_1, hoisted_3_1, hoisted_4_1, hoisted_8_1, hoisted_9_1, hoisted_10_1, deduped_12_1, deduped_13_1, deduped_14_1, deduped_15_1, deduped_16_1, deduped_17_1, deduped_18_1, deduped_19_1, deduped_20_1, deduped_21_1, deduped_22_1, deduped_23_1; + deduped_23_1 := Length( morphismsp_1 ); + deduped_22_1 := Length( morphisms_1 ); + deduped_21_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_20_1 := UnderlyingGroup( cat_1 ); + deduped_19_1 := [ 1 .. deduped_23_1 ]; + deduped_18_1 := [ 1 .. deduped_22_1 ]; + deduped_17_1 := [ 1 .. NumberOfObjects( cat_1 ) ]; + deduped_16_1 := List( deduped_21_1, GeneratorsOfMagmaWithInverses ); + hoisted_9_1 := List( deduped_19_1, function ( i_2 ) + return CAP_JIT_INCOMPLETE_LOGIC( UnderlyingGroupElement( CAP_JIT_INCOMPLETE_LOGIC( morphismsp_1[i_2] ) ) ); + end ); + hoisted_8_1 := List( deduped_19_1, function ( i_2 ) + return CAP_JIT_INCOMPLETE_LOGIC( InverseImmutable( UnderlyingGroupElement( CAP_JIT_INCOMPLETE_LOGIC( morphismsp_1[i_2] ) ) ) ); + end ); + deduped_13_1 := SubmagmaWithInverses( deduped_20_1, Concatenation( deduped_16_1[ObjectNumber( Range( mu_1 ) )], List( [ 1 .. deduped_23_1 - 1 ], function ( i_2 ) + return MultiplyGroupElements( hoisted_8_1[i_2], hoisted_9_1[i_2 + 1] ); + end ) ) ); + hoisted_10_1 := Index( deduped_20_1, deduped_13_1 ); + deduped_1_1 := CardinalitiesOfObjects( cat_1 ); + deduped_15_1 := SafeFirst( Filtered( deduped_17_1, function ( i_2 ) + return deduped_1_1[i_2] = hoisted_10_1; + end ), function ( c_2 ) + return IsConjugate( deduped_20_1, deduped_13_1, deduped_21_1[c_2] ); + end ); + hoisted_3_1 := List( deduped_18_1, function ( i_2 ) + return CAP_JIT_INCOMPLETE_LOGIC( UnderlyingGroupElement( CAP_JIT_INCOMPLETE_LOGIC( morphisms_1[i_2] ) ) ); + end ); + hoisted_2_1 := List( deduped_18_1, function ( i_2 ) + return CAP_JIT_INCOMPLETE_LOGIC( InverseImmutable( UnderlyingGroupElement( CAP_JIT_INCOMPLETE_LOGIC( morphisms_1[i_2] ) ) ) ); + end ); + deduped_12_1 := SubmagmaWithInverses( deduped_20_1, Concatenation( deduped_16_1[ObjectNumber( Source( mu_1 ) )], List( [ 1 .. deduped_22_1 - 1 ], function ( i_2 ) + return MultiplyGroupElements( hoisted_2_1[i_2], hoisted_3_1[i_2 + 1] ); + end ) ) ); + hoisted_4_1 := Index( deduped_20_1, deduped_12_1 ); + deduped_14_1 := SafeFirst( Filtered( deduped_17_1, function ( i_2 ) + return deduped_1_1[i_2] = hoisted_4_1; + end ), function ( c_2 ) + return IsConjugate( deduped_20_1, deduped_12_1, deduped_21_1[c_2] ); + end ); + return CreateCapCategoryMorphismWithAttributes( cat_1, CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_14_1 ), CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_15_1 ), UnderlyingGroupElement, MultiplyGroupElements( InverseImmutable( RepresentativeAction( deduped_20_1, deduped_12_1, deduped_21_1[deduped_14_1] ) ), MultiplyGroupElements( UnderlyingGroupElement( mu_1 ), RepresentativeAction( deduped_20_1, deduped_13_1, deduped_21_1[deduped_15_1] ) ) ) ); +end +######## + + , 406 : IsPrecompiledDerivation := true ); + + ## + cat!.cached_precompiled_functions.CoequalizerFunctorialWithGivenCoequalizers := + +######## +function ( cat_1, P_1, morphisms_1, mu_1, morphismsp_1, Pp_1 ) + local deduped_1_1, hoisted_2_1, hoisted_3_1, hoisted_4_1, hoisted_5_1, hoisted_6_1, hoisted_10_1, hoisted_11_1, hoisted_12_1, hoisted_13_1, hoisted_14_1, deduped_16_1, deduped_17_1, deduped_18_1, deduped_19_1, deduped_20_1, deduped_21_1, deduped_22_1, deduped_23_1, deduped_24_1, deduped_25_1, deduped_26_1, deduped_27_1; + deduped_27_1 := Length( morphismsp_1 ); + deduped_26_1 := Length( morphisms_1 ); + deduped_25_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_24_1 := UnderlyingGroup( cat_1 ); + deduped_23_1 := [ 1 .. deduped_27_1 ]; + deduped_22_1 := [ 1 .. deduped_26_1 ]; + deduped_21_1 := [ 1 .. NumberOfObjects( cat_1 ) ]; + deduped_20_1 := List( deduped_25_1, GeneratorsOfMagmaWithInverses ); + hoisted_12_1 := List( morphismsp_1, UnderlyingGroupElement ); + hoisted_13_1 := List( deduped_23_1, function ( i_2 ) + return hoisted_12_1[i_2]; + end ); + hoisted_10_1 := List( morphismsp_1, function ( x_2 ) + return InverseImmutable( UnderlyingGroupElement( x_2 ) ); + end ); + hoisted_11_1 := List( deduped_23_1, function ( i_2 ) + return hoisted_10_1[i_2]; + end ); + deduped_17_1 := SubmagmaWithInverses( deduped_24_1, Concatenation( deduped_20_1[ObjectNumber( Range( mu_1 ) )], List( [ 1 .. deduped_27_1 - 1 ], function ( i_2 ) + return MultiplyGroupElements( hoisted_11_1[i_2], hoisted_13_1[i_2 + 1] ); + end ) ) ); + hoisted_14_1 := Index( deduped_24_1, deduped_17_1 ); + deduped_1_1 := CardinalitiesOfObjects( cat_1 ); + deduped_19_1 := SafeFirst( Filtered( deduped_21_1, function ( i_2 ) + return deduped_1_1[i_2] = hoisted_14_1; + end ), function ( c_2 ) + return IsConjugate( deduped_24_1, deduped_17_1, deduped_25_1[c_2] ); + end ); + hoisted_4_1 := List( morphisms_1, UnderlyingGroupElement ); + hoisted_5_1 := List( deduped_22_1, function ( i_2 ) + return hoisted_4_1[i_2]; + end ); + hoisted_2_1 := List( morphisms_1, function ( x_2 ) + return InverseImmutable( UnderlyingGroupElement( x_2 ) ); + end ); + hoisted_3_1 := List( deduped_22_1, function ( i_2 ) + return hoisted_2_1[i_2]; + end ); + deduped_16_1 := SubmagmaWithInverses( deduped_24_1, Concatenation( deduped_20_1[ObjectNumber( Source( mu_1 ) )], List( [ 1 .. deduped_26_1 - 1 ], function ( i_2 ) + return MultiplyGroupElements( hoisted_3_1[i_2], hoisted_5_1[i_2 + 1] ); + end ) ) ); + hoisted_6_1 := Index( deduped_24_1, deduped_16_1 ); + deduped_18_1 := SafeFirst( Filtered( deduped_21_1, function ( i_2 ) + return deduped_1_1[i_2] = hoisted_6_1; + end ), function ( c_2 ) + return IsConjugate( deduped_24_1, deduped_16_1, deduped_25_1[c_2] ); + end ); + return CreateCapCategoryMorphismWithAttributes( cat_1, CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_18_1 ), CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_19_1 ), UnderlyingGroupElement, MultiplyGroupElements( InverseImmutable( RepresentativeAction( deduped_24_1, deduped_16_1, deduped_25_1[deduped_18_1] ) ), MultiplyGroupElements( UnderlyingGroupElement( mu_1 ), RepresentativeAction( deduped_24_1, deduped_17_1, deduped_25_1[deduped_19_1] ) ) ) ); +end +######## + + ; + + ## + AddCoequalizerOfIdentityAndAutomorphisms( cat, + +######## +function ( cat_1, Y_1, automorphisms_1 ) + local hoisted_1_1, hoisted_2_1, deduped_6_1, deduped_7_1, deduped_8_1; + deduped_8_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_7_1 := UnderlyingGroup( cat_1 ); + deduped_6_1 := SubmagmaWithInverses( deduped_7_1, Concatenation( CAP_JIT_INCOMPLETE_LOGIC( GeneratorsOfMagmaWithInverses( CAP_JIT_INCOMPLETE_LOGIC( deduped_8_1[ObjectNumber( Y_1 )] ) ) ), List( [ 1 .. Length( automorphisms_1 ) ], function ( i_2 ) + return CAP_JIT_INCOMPLETE_LOGIC( UnderlyingGroupElement( CAP_JIT_INCOMPLETE_LOGIC( automorphisms_1[i_2] ) ) ); + end ) ) ); + hoisted_2_1 := Index( deduped_7_1, deduped_6_1 ); + hoisted_1_1 := CardinalitiesOfObjects( cat_1 ); + return CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, SafeFirst( Filtered( [ 1 .. NumberOfObjects( cat_1 ) ], function ( i_2 ) + return hoisted_1_1[i_2] = hoisted_2_1; + end ), function ( c_2 ) + return IsConjugate( deduped_7_1, deduped_6_1, deduped_8_1[c_2] ); + end ) ); +end +######## + + , 101 : IsPrecompiledDerivation := true ); + + ## + cat!.cached_precompiled_functions.CoequalizerOfIdentityAndAutomorphisms := + +######## +function ( cat_1, Y_1, automorphisms_1 ) + local hoisted_1_1, hoisted_2_1, hoisted_3_1, deduped_7_1, deduped_8_1, deduped_9_1; + deduped_9_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_8_1 := UnderlyingGroup( cat_1 ); + hoisted_2_1 := List( automorphisms_1, UnderlyingGroupElement ); + deduped_7_1 := SubmagmaWithInverses( deduped_8_1, Concatenation( List( deduped_9_1, GeneratorsOfMagmaWithInverses )[ObjectNumber( Y_1 )], List( [ 1 .. Length( automorphisms_1 ) ], function ( i_2 ) + return hoisted_2_1[i_2]; + end ) ) ); + hoisted_3_1 := Index( deduped_8_1, deduped_7_1 ); + hoisted_1_1 := CardinalitiesOfObjects( cat_1 ); + return CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, SafeFirst( Filtered( [ 1 .. NumberOfObjects( cat_1 ) ], function ( i_2 ) + return hoisted_1_1[i_2] = hoisted_3_1; + end ), function ( c_2 ) + return IsConjugate( deduped_8_1, deduped_7_1, deduped_9_1[c_2] ); + end ) ); +end +######## + + ; + + ## + AddCoequalizerOfIdentityAndAutomorphismsFunctorial( cat, + +######## +function ( cat_1, automorphisms_1, mu_1, automorphismsp_1 ) + local deduped_1_1, hoisted_2_1, hoisted_6_1, deduped_8_1, deduped_9_1, deduped_10_1, deduped_11_1, deduped_12_1, deduped_13_1, deduped_14_1, deduped_15_1; + deduped_15_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_14_1 := UnderlyingGroup( cat_1 ); + deduped_13_1 := [ 1 .. NumberOfObjects( cat_1 ) ]; + deduped_12_1 := List( deduped_15_1, GeneratorsOfMagmaWithInverses ); + deduped_9_1 := SubmagmaWithInverses( deduped_14_1, Concatenation( deduped_12_1[ObjectNumber( Range( mu_1 ) )], List( [ 1 .. Length( automorphismsp_1 ) ], function ( i_2 ) + return CAP_JIT_INCOMPLETE_LOGIC( UnderlyingGroupElement( CAP_JIT_INCOMPLETE_LOGIC( automorphismsp_1[i_2] ) ) ); + end ) ) ); + hoisted_6_1 := Index( deduped_14_1, deduped_9_1 ); + deduped_1_1 := CardinalitiesOfObjects( cat_1 ); + deduped_11_1 := SafeFirst( Filtered( deduped_13_1, function ( i_2 ) + return deduped_1_1[i_2] = hoisted_6_1; + end ), function ( c_2 ) + return IsConjugate( deduped_14_1, deduped_9_1, deduped_15_1[c_2] ); + end ); + deduped_8_1 := SubmagmaWithInverses( deduped_14_1, Concatenation( deduped_12_1[ObjectNumber( Source( mu_1 ) )], List( [ 1 .. Length( automorphisms_1 ) ], function ( i_2 ) + return CAP_JIT_INCOMPLETE_LOGIC( UnderlyingGroupElement( CAP_JIT_INCOMPLETE_LOGIC( automorphisms_1[i_2] ) ) ); + end ) ) ); + hoisted_2_1 := Index( deduped_14_1, deduped_8_1 ); + deduped_10_1 := SafeFirst( Filtered( deduped_13_1, function ( i_2 ) + return deduped_1_1[i_2] = hoisted_2_1; + end ), function ( c_2 ) + return IsConjugate( deduped_14_1, deduped_8_1, deduped_15_1[c_2] ); + end ); + return CreateCapCategoryMorphismWithAttributes( cat_1, CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_10_1 ), CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_11_1 ), UnderlyingGroupElement, MultiplyGroupElements( InverseImmutable( RepresentativeAction( deduped_14_1, deduped_8_1, deduped_15_1[deduped_10_1] ) ), MultiplyGroupElements( UnderlyingGroupElement( mu_1 ), RepresentativeAction( deduped_14_1, deduped_9_1, deduped_15_1[deduped_11_1] ) ) ) ); +end +######## + + , 608 : IsPrecompiledDerivation := true ); + + ## + cat!.cached_precompiled_functions.CoequalizerOfIdentityAndAutomorphismsFunctorial := + +######## +function ( cat_1, automorphisms_1, mu_1, automorphismsp_1 ) + local deduped_1_1, hoisted_2_1, hoisted_3_1, hoisted_7_1, hoisted_8_1, deduped_10_1, deduped_11_1, deduped_12_1, deduped_13_1, deduped_14_1, deduped_15_1, deduped_16_1, deduped_17_1; + deduped_17_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_16_1 := UnderlyingGroup( cat_1 ); + deduped_15_1 := [ 1 .. NumberOfObjects( cat_1 ) ]; + deduped_14_1 := List( deduped_17_1, GeneratorsOfMagmaWithInverses ); + hoisted_7_1 := List( automorphismsp_1, UnderlyingGroupElement ); + deduped_11_1 := SubmagmaWithInverses( deduped_16_1, Concatenation( deduped_14_1[ObjectNumber( Range( mu_1 ) )], List( [ 1 .. Length( automorphismsp_1 ) ], function ( i_2 ) + return hoisted_7_1[i_2]; + end ) ) ); + hoisted_8_1 := Index( deduped_16_1, deduped_11_1 ); + deduped_1_1 := CardinalitiesOfObjects( cat_1 ); + deduped_13_1 := SafeFirst( Filtered( deduped_15_1, function ( i_2 ) + return deduped_1_1[i_2] = hoisted_8_1; + end ), function ( c_2 ) + return IsConjugate( deduped_16_1, deduped_11_1, deduped_17_1[c_2] ); + end ); + hoisted_2_1 := List( automorphisms_1, UnderlyingGroupElement ); + deduped_10_1 := SubmagmaWithInverses( deduped_16_1, Concatenation( deduped_14_1[ObjectNumber( Source( mu_1 ) )], List( [ 1 .. Length( automorphisms_1 ) ], function ( i_2 ) + return hoisted_2_1[i_2]; + end ) ) ); + hoisted_3_1 := Index( deduped_16_1, deduped_10_1 ); + deduped_12_1 := SafeFirst( Filtered( deduped_15_1, function ( i_2 ) + return deduped_1_1[i_2] = hoisted_3_1; + end ), function ( c_2 ) + return IsConjugate( deduped_16_1, deduped_10_1, deduped_17_1[c_2] ); + end ); + return CreateCapCategoryMorphismWithAttributes( cat_1, CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_12_1 ), CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_13_1 ), UnderlyingGroupElement, MultiplyGroupElements( InverseImmutable( RepresentativeAction( deduped_16_1, deduped_10_1, deduped_17_1[deduped_12_1] ) ), MultiplyGroupElements( UnderlyingGroupElement( mu_1 ), RepresentativeAction( deduped_16_1, deduped_11_1, deduped_17_1[deduped_13_1] ) ) ) ); +end +######## + + ; + + ## + AddCoequalizerOfIdentityAndAutomorphismsFunctorialWithGivenCoequalizers( cat, + +######## +function ( cat_1, P_1, automorphisms_1, mu_1, automorphismsp_1, Pp_1 ) + local deduped_1_1, hoisted_2_1, hoisted_6_1, deduped_8_1, deduped_9_1, deduped_10_1, deduped_11_1, deduped_12_1, deduped_13_1, deduped_14_1, deduped_15_1; + deduped_15_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_14_1 := UnderlyingGroup( cat_1 ); + deduped_13_1 := [ 1 .. NumberOfObjects( cat_1 ) ]; + deduped_12_1 := List( deduped_15_1, GeneratorsOfMagmaWithInverses ); + deduped_9_1 := SubmagmaWithInverses( deduped_14_1, Concatenation( deduped_12_1[ObjectNumber( Range( mu_1 ) )], List( [ 1 .. Length( automorphismsp_1 ) ], function ( i_2 ) + return CAP_JIT_INCOMPLETE_LOGIC( UnderlyingGroupElement( CAP_JIT_INCOMPLETE_LOGIC( automorphismsp_1[i_2] ) ) ); + end ) ) ); + hoisted_6_1 := Index( deduped_14_1, deduped_9_1 ); + deduped_1_1 := CardinalitiesOfObjects( cat_1 ); + deduped_11_1 := SafeFirst( Filtered( deduped_13_1, function ( i_2 ) + return deduped_1_1[i_2] = hoisted_6_1; + end ), function ( c_2 ) + return IsConjugate( deduped_14_1, deduped_9_1, deduped_15_1[c_2] ); + end ); + deduped_8_1 := SubmagmaWithInverses( deduped_14_1, Concatenation( deduped_12_1[ObjectNumber( Source( mu_1 ) )], List( [ 1 .. Length( automorphisms_1 ) ], function ( i_2 ) + return CAP_JIT_INCOMPLETE_LOGIC( UnderlyingGroupElement( CAP_JIT_INCOMPLETE_LOGIC( automorphisms_1[i_2] ) ) ); + end ) ) ); + hoisted_2_1 := Index( deduped_14_1, deduped_8_1 ); + deduped_10_1 := SafeFirst( Filtered( deduped_13_1, function ( i_2 ) + return deduped_1_1[i_2] = hoisted_2_1; + end ), function ( c_2 ) + return IsConjugate( deduped_14_1, deduped_8_1, deduped_15_1[c_2] ); + end ); + return CreateCapCategoryMorphismWithAttributes( cat_1, CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_10_1 ), CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_11_1 ), UnderlyingGroupElement, MultiplyGroupElements( InverseImmutable( RepresentativeAction( deduped_14_1, deduped_8_1, deduped_15_1[deduped_10_1] ) ), MultiplyGroupElements( UnderlyingGroupElement( mu_1 ), RepresentativeAction( deduped_14_1, deduped_9_1, deduped_15_1[deduped_11_1] ) ) ) ); +end +######## + + , 405 : IsPrecompiledDerivation := true ); + + ## + cat!.cached_precompiled_functions.CoequalizerOfIdentityAndAutomorphismsFunctorialWithGivenCoequalizers := + +######## +function ( cat_1, P_1, automorphisms_1, mu_1, automorphismsp_1, Pp_1 ) + local deduped_1_1, hoisted_2_1, hoisted_3_1, hoisted_7_1, hoisted_8_1, deduped_10_1, deduped_11_1, deduped_12_1, deduped_13_1, deduped_14_1, deduped_15_1, deduped_16_1, deduped_17_1; + deduped_17_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_16_1 := UnderlyingGroup( cat_1 ); + deduped_15_1 := [ 1 .. NumberOfObjects( cat_1 ) ]; + deduped_14_1 := List( deduped_17_1, GeneratorsOfMagmaWithInverses ); + hoisted_7_1 := List( automorphismsp_1, UnderlyingGroupElement ); + deduped_11_1 := SubmagmaWithInverses( deduped_16_1, Concatenation( deduped_14_1[ObjectNumber( Range( mu_1 ) )], List( [ 1 .. Length( automorphismsp_1 ) ], function ( i_2 ) + return hoisted_7_1[i_2]; + end ) ) ); + hoisted_8_1 := Index( deduped_16_1, deduped_11_1 ); + deduped_1_1 := CardinalitiesOfObjects( cat_1 ); + deduped_13_1 := SafeFirst( Filtered( deduped_15_1, function ( i_2 ) + return deduped_1_1[i_2] = hoisted_8_1; + end ), function ( c_2 ) + return IsConjugate( deduped_16_1, deduped_11_1, deduped_17_1[c_2] ); + end ); + hoisted_2_1 := List( automorphisms_1, UnderlyingGroupElement ); + deduped_10_1 := SubmagmaWithInverses( deduped_16_1, Concatenation( deduped_14_1[ObjectNumber( Source( mu_1 ) )], List( [ 1 .. Length( automorphisms_1 ) ], function ( i_2 ) + return hoisted_2_1[i_2]; + end ) ) ); + hoisted_3_1 := Index( deduped_16_1, deduped_10_1 ); + deduped_12_1 := SafeFirst( Filtered( deduped_15_1, function ( i_2 ) + return deduped_1_1[i_2] = hoisted_3_1; + end ), function ( c_2 ) + return IsConjugate( deduped_16_1, deduped_10_1, deduped_17_1[c_2] ); + end ); + return CreateCapCategoryMorphismWithAttributes( cat_1, CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_12_1 ), CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_13_1 ), UnderlyingGroupElement, MultiplyGroupElements( InverseImmutable( RepresentativeAction( deduped_16_1, deduped_10_1, deduped_17_1[deduped_12_1] ) ), MultiplyGroupElements( UnderlyingGroupElement( mu_1 ), RepresentativeAction( deduped_16_1, deduped_11_1, deduped_17_1[deduped_13_1] ) ) ) ); +end +######## + + ; + + ## + AddColift( cat, + +######## +function ( cat_1, alpha_1, beta_1 ) + return CreateCapCategoryMorphismWithAttributes( cat_1, Range( alpha_1 ), Range( beta_1 ), UnderlyingGroupElement, MultiplyGroupElements( InverseImmutable( UnderlyingGroupElement( alpha_1 ) ), UnderlyingGroupElement( beta_1 ) ) ); +end +######## + + , 100 ); + + ## + AddColiftAlongEpimorphism( cat, + +######## +function ( cat_1, epsilon_1, tau_1 ) + return CreateCapCategoryMorphismWithAttributes( cat_1, Range( epsilon_1 ), Range( tau_1 ), UnderlyingGroupElement, MultiplyGroupElements( InverseImmutable( UnderlyingGroupElement( epsilon_1 ) ), UnderlyingGroupElement( tau_1 ) ) ); +end +######## + + , 101 : IsPrecompiledDerivation := true ); + + ## + AddDistinguishedObjectOfHomomorphismStructure( cat, + +######## +function ( cat_1 ) + return CreateCapCategoryObjectWithAttributes( RangeCategoryOfHomomorphismStructure( cat_1 ), Cardinality, BigInt( 1 ) ); +end +######## + + , 101 : IsPrecompiledDerivation := true ); + + ## + AddHomomorphismStructureOnMorphisms( cat, + +######## +function ( cat_1, alpha_1, beta_1 ) + local hoisted_1_1, hoisted_3_1, hoisted_5_1, hoisted_6_1, deduped_9_1, deduped_10_1, deduped_11_1, deduped_12_1, deduped_13_1, deduped_14_1, deduped_15_1, deduped_16_1; + deduped_16_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_15_1 := UnderlyingGroup( cat_1 ); + deduped_14_1 := RangeCategoryOfHomomorphismStructure( cat_1 ); + deduped_13_1 := OneImmutable( deduped_15_1 ); + deduped_12_1 := deduped_16_1[ObjectNumber( Range( beta_1 ) )]; + deduped_11_1 := deduped_16_1[ObjectNumber( Source( beta_1 ) )]; + hoisted_3_1 := deduped_16_1[ObjectNumber( Source( alpha_1 ) )]; + deduped_10_1 := Filtered( List( RightTransversal( deduped_15_1, deduped_12_1 ), InverseImmutable ), function ( g_2 ) + return IsSubset( deduped_12_1, ConjugateSubgroup( hoisted_3_1, g_2 ) ); + end ); + hoisted_1_1 := deduped_16_1[ObjectNumber( Range( alpha_1 ) )]; + deduped_9_1 := Filtered( List( RightTransversal( deduped_15_1, deduped_11_1 ), InverseImmutable ), function ( g_2 ) + return IsSubset( deduped_11_1, ConjugateSubgroup( hoisted_1_1, g_2 ) ); + end ); + hoisted_6_1 := UnderlyingGroupElement( beta_1 ); + hoisted_5_1 := MultiplyGroupElements( deduped_13_1, UnderlyingGroupElement( alpha_1 ) ); + return CreateCapCategoryMorphismWithAttributes( deduped_14_1, CreateCapCategoryObjectWithAttributes( deduped_14_1, Cardinality, BigInt( Length( deduped_9_1 ) ) ), CreateCapCategoryObjectWithAttributes( deduped_14_1, Cardinality, BigInt( Length( deduped_10_1 ) ) ), AsList, List( deduped_9_1, function ( g_2 ) + local hoisted_1_2; + hoisted_1_2 := MultiplyGroupElements( MultiplyGroupElements( MultiplyGroupElements( hoisted_5_1, g_2 ), hoisted_6_1 ), deduped_13_1 ); + return -1 + BigInt( SafeUniquePositionProperty( deduped_10_1, function ( g_3 ) + return MultiplyGroupElements( InverseImmutable( g_3 ), hoisted_1_2 ) in deduped_12_1; + end ) ); + end ) ); +end +######## + + , 2708 : IsPrecompiledDerivation := true ); + + ## + AddHomomorphismStructureOnMorphismsWithGivenObjects( cat, + +######## +function ( cat_1, source_1, alpha_1, beta_1, range_1 ) + local hoisted_1_1, hoisted_3_1, hoisted_5_1, hoisted_6_1, hoisted_8_1, deduped_9_1, deduped_10_1, deduped_11_1, deduped_12_1, deduped_13_1; + deduped_13_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_12_1 := UnderlyingGroup( cat_1 ); + deduped_11_1 := OneImmutable( deduped_12_1 ); + deduped_10_1 := deduped_13_1[ObjectNumber( Target( beta_1 ) )]; + deduped_9_1 := deduped_13_1[ObjectNumber( Source( beta_1 ) )]; + hoisted_3_1 := deduped_13_1[ObjectNumber( Source( alpha_1 ) )]; + hoisted_8_1 := Filtered( List( RightTransversal( deduped_12_1, deduped_10_1 ), InverseImmutable ), function ( g_2 ) + return IsSubset( deduped_10_1, ConjugateSubgroup( hoisted_3_1, g_2 ) ); + end ); + hoisted_6_1 := UnderlyingGroupElement( beta_1 ); + hoisted_5_1 := MultiplyGroupElements( deduped_11_1, UnderlyingGroupElement( alpha_1 ) ); + hoisted_1_1 := deduped_13_1[ObjectNumber( Target( alpha_1 ) )]; + return CreateCapCategoryMorphismWithAttributes( RangeCategoryOfHomomorphismStructure( cat_1 ), source_1, range_1, AsList, List( Filtered( List( RightTransversal( deduped_12_1, deduped_9_1 ), InverseImmutable ), function ( g_2 ) + return IsSubset( deduped_9_1, ConjugateSubgroup( hoisted_1_1, g_2 ) ); + end ), function ( g_2 ) + local hoisted_1_2; + hoisted_1_2 := MultiplyGroupElements( MultiplyGroupElements( MultiplyGroupElements( hoisted_5_1, g_2 ), hoisted_6_1 ), deduped_11_1 ); + return -1 + BigInt( SafeUniquePositionProperty( hoisted_8_1, function ( g_3 ) + return MultiplyGroupElements( InverseImmutable( g_3 ), hoisted_1_2 ) in deduped_10_1; + end ) ); + end ) ); +end +######## + + , 2305 : IsPrecompiledDerivation := true ); + + ## + AddHomomorphismStructureOnObjects( cat, + +######## +function ( cat_1, arg2_1, arg3_1 ) + local hoisted_1_1, deduped_3_1, deduped_4_1; + deduped_4_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_3_1 := deduped_4_1[ObjectNumber( arg3_1 )]; + hoisted_1_1 := deduped_4_1[ObjectNumber( arg2_1 )]; + return CreateCapCategoryObjectWithAttributes( RangeCategoryOfHomomorphismStructure( cat_1 ), Cardinality, BigInt( Length( Filtered( List( RightTransversal( UnderlyingGroup( cat_1 ), deduped_3_1 ), InverseImmutable ), function ( g_2 ) + return IsSubset( deduped_3_1, ConjugateSubgroup( hoisted_1_1, g_2 ) ); + end ) ) ) ); +end +######## + + , 201 : IsPrecompiledDerivation := true ); + + ## + AddIdentityMorphism( cat, + +######## +function ( cat_1, a_1 ) + return CreateCapCategoryMorphismWithAttributes( cat_1, a_1, a_1, UnderlyingGroupElement, OneImmutable( UnderlyingGroup( cat_1 ) ) ); +end +######## + + , 100 ); + + ## + AddInjectiveColift( cat, + +######## +function ( cat_1, alpha_1, beta_1 ) + return CreateCapCategoryMorphismWithAttributes( cat_1, Range( alpha_1 ), Range( beta_1 ), UnderlyingGroupElement, MultiplyGroupElements( InverseImmutable( UnderlyingGroupElement( alpha_1 ) ), UnderlyingGroupElement( beta_1 ) ) ); +end +######## + + , 101 : IsPrecompiledDerivation := true ); + + ## + AddInterpretMorphismAsMorphismFromDistinguishedObjectToHomomorphismStructure( cat, + +######## +function ( cat_1, alpha_1 ) + local hoisted_1_1, hoisted_3_1, deduped_4_1, deduped_5_1, deduped_6_1, deduped_7_1; + deduped_7_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_6_1 := RangeCategoryOfHomomorphismStructure( cat_1 ); + deduped_5_1 := deduped_7_1[ObjectNumber( Range( alpha_1 ) )]; + hoisted_1_1 := deduped_7_1[ObjectNumber( Source( alpha_1 ) )]; + deduped_4_1 := Filtered( List( RightTransversal( UnderlyingGroup( cat_1 ), deduped_5_1 ), InverseImmutable ), function ( g_2 ) + return IsSubset( deduped_5_1, ConjugateSubgroup( hoisted_1_1, g_2 ) ); + end ); + hoisted_3_1 := UnderlyingGroupElement( alpha_1 ); + return CreateCapCategoryMorphismWithAttributes( deduped_6_1, CreateCapCategoryObjectWithAttributes( deduped_6_1, Cardinality, BigInt( 1 ) ), CreateCapCategoryObjectWithAttributes( deduped_6_1, Cardinality, BigInt( Length( deduped_4_1 ) ) ), AsList, [ -1 + BigInt( SafeUniquePositionProperty( deduped_4_1, function ( g_2 ) + return MultiplyGroupElements( InverseImmutable( g_2 ), hoisted_3_1 ) in deduped_5_1; + end ) ) ] ); +end +######## + + , 704 : IsPrecompiledDerivation := true ); + + ## + AddInterpretMorphismAsMorphismFromDistinguishedObjectToHomomorphismStructureWithGivenObjects( cat, + +######## +function ( cat_1, source_1, alpha_1, range_1 ) + local hoisted_1_1, hoisted_3_1, deduped_4_1, deduped_5_1; + deduped_5_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_4_1 := deduped_5_1[ObjectNumber( Target( alpha_1 ) )]; + hoisted_3_1 := UnderlyingGroupElement( alpha_1 ); + hoisted_1_1 := deduped_5_1[ObjectNumber( Source( alpha_1 ) )]; + return CreateCapCategoryMorphismWithAttributes( RangeCategoryOfHomomorphismStructure( cat_1 ), source_1, range_1, AsList, [ -1 + BigInt( SafeUniquePositionProperty( Filtered( List( RightTransversal( UnderlyingGroup( cat_1 ), deduped_4_1 ), InverseImmutable ), function ( g_2 ) + return IsSubset( deduped_4_1, ConjugateSubgroup( hoisted_1_1, g_2 ) ); + end ), function ( g_2 ) + return MultiplyGroupElements( InverseImmutable( g_2 ), hoisted_3_1 ) in deduped_4_1; + end ) ) ] ); +end +######## + + , 401 : IsPrecompiledDerivation := true ); + + ## + AddInterpretMorphismFromDistinguishedObjectToHomomorphismStructureAsMorphism( cat, + +######## +function ( cat_1, source_1, range_1, alpha_1 ) + local hoisted_1_1, deduped_3_1, deduped_4_1; + deduped_4_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_3_1 := deduped_4_1[ObjectNumber( range_1 )]; + hoisted_1_1 := deduped_4_1[ObjectNumber( source_1 )]; + return CAP_JIT_INCOMPLETE_LOGIC( CreateCapCategoryMorphismWithAttributes( cat_1, source_1, range_1, UnderlyingGroupElement, CAP_JIT_INCOMPLETE_LOGIC( Filtered( List( RightTransversal( UnderlyingGroup( cat_1 ), deduped_3_1 ), InverseImmutable ), function ( g_2 ) + return IsSubset( deduped_3_1, ConjugateSubgroup( hoisted_1_1, g_2 ) ); + end )[1 + AsList( alpha_1 )[1]] ) ) ); +end +######## + + , 805 : IsPrecompiledDerivation := true ); + + ## + cat!.cached_precompiled_functions.InterpretMorphismFromDistinguishedObjectToHomomorphismStructureAsMorphism := + +######## +function ( cat_1, source_1, range_1, alpha_1 ) + local hoisted_1_1, deduped_3_1, deduped_4_1; + deduped_4_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_3_1 := deduped_4_1[ObjectNumber( range_1 )]; + hoisted_1_1 := deduped_4_1[ObjectNumber( source_1 )]; + return List( Filtered( List( RightTransversal( UnderlyingGroup( cat_1 ), deduped_3_1 ), InverseImmutable ), function ( g_2 ) + return IsSubset( deduped_3_1, ConjugateSubgroup( hoisted_1_1, g_2 ) ); + end ), function ( g_2 ) + return CreateCapCategoryMorphismWithAttributes( cat_1, source_1, range_1, UnderlyingGroupElement, g_2 ); + end )[1 + AsList( alpha_1 )[1]]; +end +######## + + ; + + ## + AddInverseForMorphisms( cat, + +######## +function ( cat_1, alpha_1 ) + return CreateCapCategoryMorphismWithAttributes( cat_1, Range( alpha_1 ), Source( alpha_1 ), UnderlyingGroupElement, MultiplyGroupElements( OneImmutable( UnderlyingGroup( cat_1 ) ), InverseImmutable( UnderlyingGroupElement( alpha_1 ) ) ) ); +end +######## + + , 202 : IsPrecompiledDerivation := true ); + + ## + AddIsAutomorphism( cat, + +######## +function ( cat_1, arg2_1 ) + local deduped_1_1; + deduped_1_1 := ObjectNumber( Source( arg2_1 ) ) = ObjectNumber( Range( arg2_1 ) ); + return deduped_1_1 and deduped_1_1; +end +######## + + , 202 : IsPrecompiledDerivation := true ); + + ## + AddIsCodominating( cat, + +######## +function ( cat_1, arg2_1, arg3_1 ) + local deduped_1_1; + deduped_1_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + return IsSubset( deduped_1_1[ObjectNumber( Range( arg2_1 ) )], ConjugateSubgroup( deduped_1_1[ObjectNumber( Range( arg3_1 ) )], MultiplyGroupElements( InverseImmutable( UnderlyingGroupElement( arg3_1 ) ), UnderlyingGroupElement( arg2_1 ) ) ) ); +end +######## + + , 102 : IsPrecompiledDerivation := true ); + + ## + AddIsColiftable( cat, + +######## +function ( cat_1, arg2_1, arg3_1 ) + local deduped_1_1; + deduped_1_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + return IsSubset( deduped_1_1[ObjectNumber( Range( arg3_1 ) )], ConjugateSubgroup( deduped_1_1[ObjectNumber( Range( arg2_1 ) )], MultiplyGroupElements( InverseImmutable( UnderlyingGroupElement( arg2_1 ) ), UnderlyingGroupElement( arg3_1 ) ) ) ); +end +######## + + , 100 ); + + ## + AddIsColiftableAlongEpimorphism( cat, + +######## +function ( cat_1, arg2_1, arg3_1 ) + local deduped_1_1; + deduped_1_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + return IsSubset( deduped_1_1[ObjectNumber( Range( arg3_1 ) )], ConjugateSubgroup( deduped_1_1[ObjectNumber( Range( arg2_1 ) )], MultiplyGroupElements( InverseImmutable( UnderlyingGroupElement( arg2_1 ) ), UnderlyingGroupElement( arg3_1 ) ) ) ); +end +######## + + , 101 : IsPrecompiledDerivation := true ); + + ## + AddIsCongruentForMorphisms( cat, + +######## +function ( cat_1, arg2_1, arg3_1 ) + return MultiplyGroupElements( InverseImmutable( UnderlyingGroupElement( arg2_1 ) ), UnderlyingGroupElement( arg3_1 ) ) in RepresentativesOfSubgroupsUpToConjugation( cat_1 )[ObjectNumber( Range( arg2_1 ) )]; +end +######## + + , 100 ); + + ## + AddIsDominating( cat, + +######## +function ( cat_1, arg2_1, arg3_1 ) + local deduped_1_1; + deduped_1_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + return IsSubset( deduped_1_1[ObjectNumber( Source( arg3_1 ) )], ConjugateSubgroup( deduped_1_1[ObjectNumber( Source( arg2_1 ) )], MultiplyGroupElements( UnderlyingGroupElement( arg2_1 ), InverseImmutable( UnderlyingGroupElement( arg3_1 ) ) ) ) ); +end +######## + + , 102 : IsPrecompiledDerivation := true ); + + ## + AddIsEndomorphism( cat, + +######## +function ( cat_1, arg2_1 ) + return ObjectNumber( Source( arg2_1 ) ) = ObjectNumber( Range( arg2_1 ) ); +end +######## + + , 101 : IsPrecompiledDerivation := true ); + + ## + AddIsEpimorphism( cat, + +######## +function ( cat_1, arg2_1 ) + return true; +end +######## + + , 100 ); + + ## + AddIsEqualAsFactorobjects( cat, + +######## +function ( cat_1, arg2_1, arg3_1 ) + local deduped_1_1, deduped_2_1, deduped_3_1, deduped_4_1, deduped_5_1; + deduped_5_1 := UnderlyingGroupElement( arg2_1 ); + deduped_4_1 := UnderlyingGroupElement( arg3_1 ); + deduped_3_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_2_1 := deduped_3_1[ObjectNumber( Range( arg3_1 ) )]; + deduped_1_1 := deduped_3_1[ObjectNumber( Range( arg2_1 ) )]; + return IsSubset( deduped_1_1, ConjugateSubgroup( deduped_2_1, MultiplyGroupElements( InverseImmutable( deduped_4_1 ), deduped_5_1 ) ) ) and IsSubset( deduped_2_1, ConjugateSubgroup( deduped_1_1, MultiplyGroupElements( InverseImmutable( deduped_5_1 ), deduped_4_1 ) ) ); +end +######## + + , 205 : IsPrecompiledDerivation := true ); + + ## + AddIsEqualAsSubobjects( cat, + +######## +function ( cat_1, arg2_1, arg3_1 ) + local deduped_1_1, deduped_2_1, deduped_3_1, deduped_4_1, deduped_5_1; + deduped_5_1 := UnderlyingGroupElement( arg3_1 ); + deduped_4_1 := UnderlyingGroupElement( arg2_1 ); + deduped_3_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_2_1 := deduped_3_1[ObjectNumber( Source( arg2_1 ) )]; + deduped_1_1 := deduped_3_1[ObjectNumber( Source( arg3_1 ) )]; + return IsSubset( deduped_1_1, ConjugateSubgroup( deduped_2_1, MultiplyGroupElements( deduped_4_1, InverseImmutable( deduped_5_1 ) ) ) ) and IsSubset( deduped_2_1, ConjugateSubgroup( deduped_1_1, MultiplyGroupElements( deduped_5_1, InverseImmutable( deduped_4_1 ) ) ) ); +end +######## + + , 205 : IsPrecompiledDerivation := true ); + + ## + AddIsEqualForMorphisms( cat, + +######## +function ( cat_1, arg2_1, arg3_1 ) + return UnderlyingGroupElement( arg2_1 ) = UnderlyingGroupElement( arg3_1 ); +end +######## + + , 100 ); + + ## + AddIsEqualForMorphismsOnMor( cat, + +######## +function ( cat_1, arg2_1, arg3_1 ) + if ObjectNumber( Source( arg2_1 ) ) = ObjectNumber( Source( arg3_1 ) ) and ObjectNumber( Range( arg2_1 ) ) = ObjectNumber( Range( arg3_1 ) ) then + return UnderlyingGroupElement( arg2_1 ) = UnderlyingGroupElement( arg3_1 ); + else + return false; + fi; + return; +end +######## + + , 301 : IsPrecompiledDerivation := true ); + + ## + AddIsEqualForObjects( cat, + +######## +function ( cat_1, arg2_1, arg3_1 ) + return ObjectNumber( arg2_1 ) = ObjectNumber( arg3_1 ); +end +######## + + , 100 ); + + ## + AddIsEqualToIdentityMorphism( cat, + +######## +function ( cat_1, arg2_1 ) + if true and ObjectNumber( Range( arg2_1 ) ) = ObjectNumber( Source( arg2_1 ) ) then + return UnderlyingGroupElement( arg2_1 ) = OneImmutable( UnderlyingGroup( cat_1 ) ); + else + return false; + fi; + return; +end +######## + + , 402 : IsPrecompiledDerivation := true ); + + ## + AddIsHomSetInhabited( cat, + +######## +function ( cat_1, arg2_1, arg3_1 ) + local hoisted_2_1, deduped_3_1, deduped_4_1; + deduped_4_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_3_1 := deduped_4_1[ObjectNumber( arg3_1 )]; + hoisted_2_1 := deduped_4_1[ObjectNumber( arg2_1 )]; + return ForAny( List( RightTransversal( UnderlyingGroup( cat_1 ), deduped_3_1 ), InverseImmutable ), function ( g_2 ) + return IsSubset( ConjugateSubgroup( deduped_3_1, InverseImmutable( g_2 ) ), hoisted_2_1 ); + end ); +end +######## + + , 100 ); + + ## + AddIsIdempotent( cat, + +######## +function ( cat_1, arg2_1 ) + local deduped_1_1; + deduped_1_1 := UnderlyingGroupElement( arg2_1 ); + return MultiplyGroupElements( InverseImmutable( MultiplyGroupElements( deduped_1_1, deduped_1_1 ) ), deduped_1_1 ) in RepresentativesOfSubgroupsUpToConjugation( cat_1 )[ObjectNumber( Range( arg2_1 ) )]; +end +######## + + , 201 : IsPrecompiledDerivation := true ); + + ## + AddIsIsomorphicForObjects( cat, + +######## +function ( cat_1, object_1_1, object_2_1 ) + return ObjectNumber( object_1_1 ) = ObjectNumber( object_2_1 ); +end +######## + + , 101 : IsPrecompiledDerivation := true ); + + ## + AddIsIsomorphism( cat, + +######## +function ( cat_1, arg2_1 ) + return ObjectNumber( Source( arg2_1 ) ) = ObjectNumber( Range( arg2_1 ) ); +end +######## + + , 100 ); + + ## + AddIsLiftable( cat, + +######## +function ( cat_1, arg2_1, arg3_1 ) + local deduped_1_1; + deduped_1_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + return IsSubset( deduped_1_1[ObjectNumber( Source( arg3_1 ) )], ConjugateSubgroup( deduped_1_1[ObjectNumber( Source( arg2_1 ) )], MultiplyGroupElements( UnderlyingGroupElement( arg2_1 ), InverseImmutable( UnderlyingGroupElement( arg3_1 ) ) ) ) ); +end +######## + + , 100 ); + + ## + AddIsLiftableAlongMonomorphism( cat, + +######## +function ( cat_1, arg2_1, arg3_1 ) + local deduped_1_1; + deduped_1_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + return IsSubset( deduped_1_1[ObjectNumber( Source( arg2_1 ) )], ConjugateSubgroup( deduped_1_1[ObjectNumber( Source( arg3_1 ) )], MultiplyGroupElements( UnderlyingGroupElement( arg3_1 ), InverseImmutable( UnderlyingGroupElement( arg2_1 ) ) ) ) ); +end +######## + + , 101 : IsPrecompiledDerivation := true ); + + ## + AddIsMonomorphism( cat, + +######## +function ( cat_1, arg2_1 ) + return ObjectNumber( Source( arg2_1 ) ) = ObjectNumber( Range( arg2_1 ) ); +end +######## + + , 100 ); + + ## + AddIsOne( cat, + +######## +function ( cat_1, arg2_1 ) + return MultiplyGroupElements( InverseImmutable( OneImmutable( UnderlyingGroup( cat_1 ) ) ), UnderlyingGroupElement( arg2_1 ) ) in RepresentativesOfSubgroupsUpToConjugation( cat_1 )[ObjectNumber( Source( arg2_1 ) )]; +end +######## + + , 201 : IsPrecompiledDerivation := true ); + + ## + AddIsSplitEpimorphism( cat, + +######## +function ( cat_1, arg2_1 ) + local deduped_1_1; + deduped_1_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + return IsSubset( deduped_1_1[ObjectNumber( Source( arg2_1 ) )], ConjugateSubgroup( deduped_1_1[ObjectNumber( Range( arg2_1 ) )], MultiplyGroupElements( OneImmutable( UnderlyingGroup( cat_1 ) ), InverseImmutable( UnderlyingGroupElement( arg2_1 ) ) ) ) ); +end +######## + + , 201 : IsPrecompiledDerivation := true ); + + ## + AddIsSplitMonomorphism( cat, + +######## +function ( cat_1, arg2_1 ) + local deduped_1_1; + deduped_1_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + return IsSubset( deduped_1_1[ObjectNumber( Source( arg2_1 ) )], ConjugateSubgroup( deduped_1_1[ObjectNumber( Range( arg2_1 ) )], MultiplyGroupElements( InverseImmutable( UnderlyingGroupElement( arg2_1 ) ), OneImmutable( UnderlyingGroup( cat_1 ) ) ) ) ); +end +######## + + , 201 : IsPrecompiledDerivation := true ); + + ## + AddIsTerminal( cat, + +######## +function ( cat_1, arg2_1 ) + return ObjectNumber( arg2_1 ) = NumberOfObjects( cat_1 ); +end +######## + + , 302 : IsPrecompiledDerivation := true ); + + ## + AddIsWellDefinedForMorphisms( cat, + +######## +function ( cat_1, alpha_1 ) + local deduped_1_1, deduped_2_1; + deduped_2_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_1_1 := UnderlyingGroupElement( alpha_1 ); + return deduped_1_1 in UnderlyingGroup( cat_1 ) and IsSubset( deduped_2_1[ObjectNumber( Range( alpha_1 ) )], ConjugateSubgroup( deduped_2_1[ObjectNumber( Source( alpha_1 ) )], deduped_1_1 ) ); +end +######## + + , 100 ); + + ## + AddIsWellDefinedForMorphismsWithGivenSourceAndRange( cat, + +######## +function ( cat_1, source_1, alpha_1, range_1 ) + local deduped_1_1, deduped_2_1, deduped_3_1, deduped_4_1; + deduped_4_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_3_1 := UnderlyingGroupElement( alpha_1 ); + deduped_2_1 := ObjectNumber( Source( alpha_1 ) ); + deduped_1_1 := ObjectNumber( Range( alpha_1 ) ); + return deduped_3_1 in UnderlyingGroup( cat_1 ) and IsSubset( deduped_4_1[deduped_1_1], ConjugateSubgroup( deduped_4_1[deduped_2_1], deduped_3_1 ) ) and deduped_2_1 = ObjectNumber( source_1 ) and deduped_1_1 = ObjectNumber( range_1 ); +end +######## + + , 301 : IsPrecompiledDerivation := true ); + + ## + AddIsWellDefinedForObjects( cat, + +######## +function ( cat_1, arg2_1 ) + return ObjectNumber( arg2_1 ) in [ 1 .. NumberOfObjects( cat_1 ) ]; +end +######## + + , 100 ); + + ## + AddIsomorphismFromCoequalizerOfIdentityAndAutomorphismsToCoequalizer( cat, + +######## +function ( cat_1, Y_1, automorphisms_1 ) + local deduped_1_1, hoisted_2_1, hoisted_6_1, hoisted_8_1, deduped_10_1, deduped_11_1, deduped_12_1, deduped_13_1, deduped_14_1, deduped_15_1, deduped_16_1, deduped_17_1, deduped_18_1, deduped_19_1, deduped_20_1; + deduped_20_1 := Length( automorphisms_1 ); + deduped_19_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_18_1 := UnderlyingGroup( cat_1 ); + deduped_17_1 := [ 1 .. deduped_20_1 ]; + deduped_16_1 := [ 1 .. NumberOfObjects( cat_1 ) ]; + deduped_13_1 := CAP_JIT_INCOMPLETE_LOGIC( GeneratorsOfMagmaWithInverses( CAP_JIT_INCOMPLETE_LOGIC( deduped_19_1[ObjectNumber( Y_1 )] ) ) ); + deduped_12_1 := List( deduped_17_1, function ( i_2 ) + return CAP_JIT_INCOMPLETE_LOGIC( UnderlyingGroupElement( CAP_JIT_INCOMPLETE_LOGIC( automorphisms_1[i_2] ) ) ); + end ); + hoisted_6_1 := List( deduped_17_1, function ( i_2 ) + return CAP_JIT_INCOMPLETE_LOGIC( InverseImmutable( UnderlyingGroupElement( CAP_JIT_INCOMPLETE_LOGIC( automorphisms_1[i_2] ) ) ) ); + end ); + deduped_11_1 := SubmagmaWithInverses( deduped_18_1, Concatenation( deduped_13_1, List( [ 1 .. deduped_20_1 - 1 ], function ( i_2 ) + return MultiplyGroupElements( hoisted_6_1[i_2], deduped_12_1[i_2 + 1] ); + end ) ) ); + hoisted_8_1 := Index( deduped_18_1, deduped_11_1 ); + deduped_1_1 := CardinalitiesOfObjects( cat_1 ); + deduped_15_1 := SafeFirst( Filtered( deduped_16_1, function ( i_2 ) + return deduped_1_1[i_2] = hoisted_8_1; + end ), function ( c_2 ) + return IsConjugate( deduped_18_1, deduped_11_1, deduped_19_1[c_2] ); + end ); + deduped_10_1 := SubmagmaWithInverses( deduped_18_1, Concatenation( deduped_13_1, deduped_12_1 ) ); + hoisted_2_1 := Index( deduped_18_1, deduped_10_1 ); + deduped_14_1 := SafeFirst( Filtered( deduped_16_1, function ( i_2 ) + return deduped_1_1[i_2] = hoisted_2_1; + end ), function ( c_2 ) + return IsConjugate( deduped_18_1, deduped_10_1, deduped_19_1[c_2] ); + end ); + return CreateCapCategoryMorphismWithAttributes( cat_1, CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_14_1 ), CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_15_1 ), UnderlyingGroupElement, MultiplyGroupElements( InverseImmutable( RepresentativeAction( deduped_18_1, deduped_10_1, deduped_19_1[deduped_14_1] ) ), RepresentativeAction( deduped_18_1, deduped_11_1, deduped_19_1[deduped_15_1] ) ) ); +end +######## + + , 302 : IsPrecompiledDerivation := true ); + + ## + cat!.cached_precompiled_functions.IsomorphismFromCoequalizerOfIdentityAndAutomorphismsToCoequalizer := + +######## +function ( cat_1, Y_1, automorphisms_1 ) + local deduped_1_1, hoisted_2_1, hoisted_3_1, hoisted_7_1, hoisted_8_1, hoisted_10_1, deduped_12_1, deduped_13_1, deduped_14_1, deduped_15_1, deduped_16_1, deduped_17_1, deduped_18_1, deduped_19_1, deduped_20_1, deduped_21_1, deduped_22_1; + deduped_22_1 := Length( automorphisms_1 ); + deduped_21_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_20_1 := UnderlyingGroup( cat_1 ); + deduped_19_1 := [ 1 .. deduped_22_1 ]; + deduped_18_1 := [ 1 .. NumberOfObjects( cat_1 ) ]; + hoisted_2_1 := List( automorphisms_1, UnderlyingGroupElement ); + deduped_17_1 := List( deduped_19_1, function ( i_2 ) + return hoisted_2_1[i_2]; + end ); + deduped_16_1 := List( deduped_21_1, GeneratorsOfMagmaWithInverses )[ObjectNumber( Y_1 )]; + hoisted_7_1 := List( automorphisms_1, function ( x_2 ) + return InverseImmutable( UnderlyingGroupElement( x_2 ) ); + end ); + hoisted_8_1 := List( deduped_19_1, function ( i_2 ) + return hoisted_7_1[i_2]; + end ); + deduped_12_1 := SubmagmaWithInverses( deduped_20_1, Concatenation( deduped_16_1, List( [ 1 .. deduped_22_1 - 1 ], function ( i_2 ) + return MultiplyGroupElements( hoisted_8_1[i_2], deduped_17_1[i_2 + 1] ); + end ) ) ); + hoisted_10_1 := Index( deduped_20_1, deduped_12_1 ); + deduped_1_1 := CardinalitiesOfObjects( cat_1 ); + deduped_15_1 := SafeFirst( Filtered( deduped_18_1, function ( i_2 ) + return deduped_1_1[i_2] = hoisted_10_1; + end ), function ( c_2 ) + return IsConjugate( deduped_20_1, deduped_12_1, deduped_21_1[c_2] ); + end ); + deduped_13_1 := SubmagmaWithInverses( deduped_20_1, Concatenation( deduped_16_1, deduped_17_1 ) ); + hoisted_3_1 := Index( deduped_20_1, deduped_13_1 ); + deduped_14_1 := SafeFirst( Filtered( deduped_18_1, function ( i_2 ) + return deduped_1_1[i_2] = hoisted_3_1; + end ), function ( c_2 ) + return IsConjugate( deduped_20_1, deduped_13_1, deduped_21_1[c_2] ); + end ); + return CreateCapCategoryMorphismWithAttributes( cat_1, CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_14_1 ), CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_15_1 ), UnderlyingGroupElement, MultiplyGroupElements( InverseImmutable( RepresentativeAction( deduped_20_1, deduped_13_1, deduped_21_1[deduped_14_1] ) ), RepresentativeAction( deduped_20_1, deduped_12_1, deduped_21_1[deduped_15_1] ) ) ); +end +######## + + ; + + ## + AddIsomorphismFromCoequalizerToCoequalizerOfIdentityAndAutomorphisms( cat, + +######## +function ( cat_1, Y_1, automorphisms_1 ) + local deduped_1_1, hoisted_2_1, hoisted_4_1, hoisted_8_1, deduped_10_1, deduped_11_1, deduped_12_1, deduped_13_1, deduped_14_1, deduped_15_1, deduped_16_1, deduped_17_1, deduped_18_1, deduped_19_1, deduped_20_1; + deduped_20_1 := Length( automorphisms_1 ); + deduped_19_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_18_1 := UnderlyingGroup( cat_1 ); + deduped_17_1 := [ 1 .. deduped_20_1 ]; + deduped_16_1 := [ 1 .. NumberOfObjects( cat_1 ) ]; + deduped_13_1 := CAP_JIT_INCOMPLETE_LOGIC( GeneratorsOfMagmaWithInverses( CAP_JIT_INCOMPLETE_LOGIC( deduped_19_1[ObjectNumber( Y_1 )] ) ) ); + deduped_12_1 := List( deduped_17_1, function ( i_2 ) + return CAP_JIT_INCOMPLETE_LOGIC( UnderlyingGroupElement( CAP_JIT_INCOMPLETE_LOGIC( automorphisms_1[i_2] ) ) ); + end ); + deduped_10_1 := SubmagmaWithInverses( deduped_18_1, Concatenation( deduped_13_1, deduped_12_1 ) ); + hoisted_8_1 := Index( deduped_18_1, deduped_10_1 ); + deduped_1_1 := CardinalitiesOfObjects( cat_1 ); + deduped_15_1 := SafeFirst( Filtered( deduped_16_1, function ( i_2 ) + return deduped_1_1[i_2] = hoisted_8_1; + end ), function ( c_2 ) + return IsConjugate( deduped_18_1, deduped_10_1, deduped_19_1[c_2] ); + end ); + hoisted_2_1 := List( deduped_17_1, function ( i_2 ) + return CAP_JIT_INCOMPLETE_LOGIC( InverseImmutable( UnderlyingGroupElement( CAP_JIT_INCOMPLETE_LOGIC( automorphisms_1[i_2] ) ) ) ); + end ); + deduped_11_1 := SubmagmaWithInverses( deduped_18_1, Concatenation( deduped_13_1, List( [ 1 .. deduped_20_1 - 1 ], function ( i_2 ) + return MultiplyGroupElements( hoisted_2_1[i_2], deduped_12_1[i_2 + 1] ); + end ) ) ); + hoisted_4_1 := Index( deduped_18_1, deduped_11_1 ); + deduped_14_1 := SafeFirst( Filtered( deduped_16_1, function ( i_2 ) + return deduped_1_1[i_2] = hoisted_4_1; + end ), function ( c_2 ) + return IsConjugate( deduped_18_1, deduped_11_1, deduped_19_1[c_2] ); + end ); + return CreateCapCategoryMorphismWithAttributes( cat_1, CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_14_1 ), CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_15_1 ), UnderlyingGroupElement, MultiplyGroupElements( InverseImmutable( RepresentativeAction( deduped_18_1, deduped_11_1, deduped_19_1[deduped_14_1] ) ), RepresentativeAction( deduped_18_1, deduped_10_1, deduped_19_1[deduped_15_1] ) ) ); +end +######## + + , 302 : IsPrecompiledDerivation := true ); + + ## + cat!.cached_precompiled_functions.IsomorphismFromCoequalizerToCoequalizerOfIdentityAndAutomorphisms := + +######## +function ( cat_1, Y_1, automorphisms_1 ) + local deduped_1_1, hoisted_2_1, hoisted_3_1, hoisted_4_1, hoisted_6_1, hoisted_10_1, deduped_12_1, deduped_13_1, deduped_14_1, deduped_15_1, deduped_16_1, deduped_17_1, deduped_18_1, deduped_19_1, deduped_20_1, deduped_21_1, deduped_22_1; + deduped_22_1 := Length( automorphisms_1 ); + deduped_21_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_20_1 := UnderlyingGroup( cat_1 ); + deduped_19_1 := [ 1 .. deduped_22_1 ]; + deduped_18_1 := [ 1 .. NumberOfObjects( cat_1 ) ]; + hoisted_4_1 := List( automorphisms_1, UnderlyingGroupElement ); + deduped_17_1 := List( deduped_19_1, function ( i_2 ) + return hoisted_4_1[i_2]; + end ); + deduped_16_1 := List( deduped_21_1, GeneratorsOfMagmaWithInverses )[ObjectNumber( Y_1 )]; + deduped_13_1 := SubmagmaWithInverses( deduped_20_1, Concatenation( deduped_16_1, deduped_17_1 ) ); + hoisted_10_1 := Index( deduped_20_1, deduped_13_1 ); + deduped_1_1 := CardinalitiesOfObjects( cat_1 ); + deduped_15_1 := SafeFirst( Filtered( deduped_18_1, function ( i_2 ) + return deduped_1_1[i_2] = hoisted_10_1; + end ), function ( c_2 ) + return IsConjugate( deduped_20_1, deduped_13_1, deduped_21_1[c_2] ); + end ); + hoisted_2_1 := List( automorphisms_1, function ( x_2 ) + return InverseImmutable( UnderlyingGroupElement( x_2 ) ); + end ); + hoisted_3_1 := List( deduped_19_1, function ( i_2 ) + return hoisted_2_1[i_2]; + end ); + deduped_12_1 := SubmagmaWithInverses( deduped_20_1, Concatenation( deduped_16_1, List( [ 1 .. deduped_22_1 - 1 ], function ( i_2 ) + return MultiplyGroupElements( hoisted_3_1[i_2], deduped_17_1[i_2 + 1] ); + end ) ) ); + hoisted_6_1 := Index( deduped_20_1, deduped_12_1 ); + deduped_14_1 := SafeFirst( Filtered( deduped_18_1, function ( i_2 ) + return deduped_1_1[i_2] = hoisted_6_1; + end ), function ( c_2 ) + return IsConjugate( deduped_20_1, deduped_12_1, deduped_21_1[c_2] ); + end ); + return CreateCapCategoryMorphismWithAttributes( cat_1, CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_14_1 ), CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_15_1 ), UnderlyingGroupElement, MultiplyGroupElements( InverseImmutable( RepresentativeAction( deduped_20_1, deduped_12_1, deduped_21_1[deduped_14_1] ) ), RepresentativeAction( deduped_20_1, deduped_13_1, deduped_21_1[deduped_15_1] ) ) ); +end +######## + + ; + + ## + AddLift( cat, + +######## +function ( cat_1, alpha_1, beta_1 ) + return CreateCapCategoryMorphismWithAttributes( cat_1, Source( alpha_1 ), Source( beta_1 ), UnderlyingGroupElement, MultiplyGroupElements( UnderlyingGroupElement( alpha_1 ), InverseImmutable( UnderlyingGroupElement( beta_1 ) ) ) ); +end +######## + + , 100 ); + + ## + AddLiftAlongMonomorphism( cat, + +######## +function ( cat_1, iota_1, tau_1 ) + return CreateCapCategoryMorphismWithAttributes( cat_1, Source( tau_1 ), Source( iota_1 ), UnderlyingGroupElement, MultiplyGroupElements( UnderlyingGroupElement( tau_1 ), InverseImmutable( UnderlyingGroupElement( iota_1 ) ) ) ); +end +######## + + , 101 : IsPrecompiledDerivation := true ); + + ## + AddMorphismConstructor( cat, + +######## +function ( cat_1, arg2_1, arg3_1, arg4_1 ) + return CreateCapCategoryMorphismWithAttributes( cat_1, arg2_1, arg4_1, UnderlyingGroupElement, arg3_1 ); +end +######## + + , 100 ); + + ## + AddMorphismDatum( cat, + +######## +function ( cat_1, arg2_1 ) + return UnderlyingGroupElement( arg2_1 ); +end +######## + + , 100 ); + + ## + AddMorphismFromSourceToCoequalizer( cat, + +######## +function ( cat_1, Y_1, morphisms_1 ) + local hoisted_1_1, hoisted_2_1, hoisted_4_1, hoisted_5_1, deduped_9_1, deduped_10_1, deduped_11_1, deduped_12_1, deduped_13_1, deduped_14_1, deduped_15_1; + deduped_15_1 := Length( morphisms_1 ); + deduped_14_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_13_1 := UnderlyingGroup( cat_1 ); + deduped_12_1 := List( morphisms_1, UnderlyingGroupElement ); + deduped_11_1 := [ 1 .. deduped_15_1 ]; + hoisted_4_1 := List( deduped_11_1, function ( i_2 ) + return deduped_12_1[i_2]; + end ); + hoisted_2_1 := List( deduped_11_1, function ( i_2 ) + return CAP_JIT_INCOMPLETE_LOGIC( InverseImmutable( UnderlyingGroupElement( CAP_JIT_INCOMPLETE_LOGIC( morphisms_1[i_2] ) ) ) ); + end ); + deduped_9_1 := SubmagmaWithInverses( deduped_13_1, Concatenation( CAP_JIT_INCOMPLETE_LOGIC( GeneratorsOfMagmaWithInverses( CAP_JIT_INCOMPLETE_LOGIC( deduped_14_1[ObjectNumber( Y_1 )] ) ) ), List( [ 1 .. deduped_15_1 - 1 ], function ( i_2 ) + return MultiplyGroupElements( hoisted_2_1[i_2], hoisted_4_1[i_2 + 1] ); + end ) ) ); + hoisted_5_1 := Index( deduped_13_1, deduped_9_1 ); + hoisted_1_1 := CardinalitiesOfObjects( cat_1 ); + deduped_10_1 := SafeFirst( Filtered( [ 1 .. NumberOfObjects( cat_1 ) ], function ( i_2 ) + return hoisted_1_1[i_2] = hoisted_5_1; + end ), function ( c_2 ) + return IsConjugate( deduped_13_1, deduped_9_1, deduped_14_1[c_2] ); + end ); + return CreateCapCategoryMorphismWithAttributes( cat_1, CAP_JIT_INCOMPLETE_LOGIC( Source( CAP_JIT_INCOMPLETE_LOGIC( morphisms_1[1] ) ) ), CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_10_1 ), UnderlyingGroupElement, MultiplyGroupElements( deduped_12_1[1], RepresentativeAction( deduped_13_1, deduped_9_1, deduped_14_1[deduped_10_1] ) ) ); +end +######## + + , 202 : IsPrecompiledDerivation := true ); + + ## + cat!.cached_precompiled_functions.MorphismFromSourceToCoequalizer := + +######## +function ( cat_1, Y_1, morphisms_1 ) + local hoisted_1_1, hoisted_2_1, hoisted_3_1, hoisted_5_1, hoisted_6_1, deduped_10_1, deduped_11_1, deduped_12_1, deduped_13_1, deduped_14_1, deduped_15_1, deduped_16_1; + deduped_16_1 := Length( morphisms_1 ); + deduped_15_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_14_1 := UnderlyingGroup( cat_1 ); + deduped_13_1 := List( morphisms_1, UnderlyingGroupElement ); + deduped_12_1 := [ 1 .. deduped_16_1 ]; + hoisted_5_1 := List( deduped_12_1, function ( i_2 ) + return deduped_13_1[i_2]; + end ); + hoisted_2_1 := List( morphisms_1, function ( x_2 ) + return InverseImmutable( UnderlyingGroupElement( x_2 ) ); + end ); + hoisted_3_1 := List( deduped_12_1, function ( i_2 ) + return hoisted_2_1[i_2]; + end ); + deduped_10_1 := SubmagmaWithInverses( deduped_14_1, Concatenation( List( deduped_15_1, GeneratorsOfMagmaWithInverses )[ObjectNumber( Y_1 )], List( [ 1 .. deduped_16_1 - 1 ], function ( i_2 ) + return MultiplyGroupElements( hoisted_3_1[i_2], hoisted_5_1[i_2 + 1] ); + end ) ) ); + hoisted_6_1 := Index( deduped_14_1, deduped_10_1 ); + hoisted_1_1 := CardinalitiesOfObjects( cat_1 ); + deduped_11_1 := SafeFirst( Filtered( [ 1 .. NumberOfObjects( cat_1 ) ], function ( i_2 ) + return hoisted_1_1[i_2] = hoisted_6_1; + end ), function ( c_2 ) + return IsConjugate( deduped_14_1, deduped_10_1, deduped_15_1[c_2] ); + end ); + return CreateCapCategoryMorphismWithAttributes( cat_1, List( morphisms_1, Source )[1], CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_11_1 ), UnderlyingGroupElement, MultiplyGroupElements( deduped_13_1[1], RepresentativeAction( deduped_14_1, deduped_10_1, deduped_15_1[deduped_11_1] ) ) ); +end +######## + + ; + + ## + AddMorphismFromSourceToCoequalizerWithGivenCoequalizer( cat, + +######## +function ( cat_1, Y_1, morphisms_1, P_1 ) + local hoisted_1_1, hoisted_2_1, hoisted_4_1, hoisted_5_1, deduped_9_1, deduped_10_1, deduped_11_1, deduped_12_1, deduped_13_1, deduped_14_1, deduped_15_1; + deduped_15_1 := Length( morphisms_1 ); + deduped_14_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_13_1 := UnderlyingGroup( cat_1 ); + deduped_12_1 := List( morphisms_1, UnderlyingGroupElement ); + deduped_11_1 := [ 1 .. deduped_15_1 ]; + hoisted_4_1 := List( deduped_11_1, function ( i_2 ) + return deduped_12_1[i_2]; + end ); + hoisted_2_1 := List( deduped_11_1, function ( i_2 ) + return CAP_JIT_INCOMPLETE_LOGIC( InverseImmutable( UnderlyingGroupElement( CAP_JIT_INCOMPLETE_LOGIC( morphisms_1[i_2] ) ) ) ); + end ); + deduped_9_1 := SubmagmaWithInverses( deduped_13_1, Concatenation( CAP_JIT_INCOMPLETE_LOGIC( GeneratorsOfMagmaWithInverses( CAP_JIT_INCOMPLETE_LOGIC( deduped_14_1[ObjectNumber( Y_1 )] ) ) ), List( [ 1 .. deduped_15_1 - 1 ], function ( i_2 ) + return MultiplyGroupElements( hoisted_2_1[i_2], hoisted_4_1[i_2 + 1] ); + end ) ) ); + hoisted_5_1 := Index( deduped_13_1, deduped_9_1 ); + hoisted_1_1 := CardinalitiesOfObjects( cat_1 ); + deduped_10_1 := SafeFirst( Filtered( [ 1 .. NumberOfObjects( cat_1 ) ], function ( i_2 ) + return hoisted_1_1[i_2] = hoisted_5_1; + end ), function ( c_2 ) + return IsConjugate( deduped_13_1, deduped_9_1, deduped_14_1[c_2] ); + end ); + return CreateCapCategoryMorphismWithAttributes( cat_1, CAP_JIT_INCOMPLETE_LOGIC( Source( CAP_JIT_INCOMPLETE_LOGIC( morphisms_1[1] ) ) ), CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_10_1 ), UnderlyingGroupElement, MultiplyGroupElements( deduped_12_1[1], RepresentativeAction( deduped_13_1, deduped_9_1, deduped_14_1[deduped_10_1] ) ) ); +end +######## + + , 203 : IsPrecompiledDerivation := true ); + + ## + cat!.cached_precompiled_functions.MorphismFromSourceToCoequalizerWithGivenCoequalizer := + +######## +function ( cat_1, Y_1, morphisms_1, P_1 ) + local hoisted_1_1, hoisted_2_1, hoisted_3_1, hoisted_5_1, hoisted_6_1, deduped_10_1, deduped_11_1, deduped_12_1, deduped_13_1, deduped_14_1, deduped_15_1, deduped_16_1; + deduped_16_1 := Length( morphisms_1 ); + deduped_15_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_14_1 := UnderlyingGroup( cat_1 ); + deduped_13_1 := List( morphisms_1, UnderlyingGroupElement ); + deduped_12_1 := [ 1 .. deduped_16_1 ]; + hoisted_5_1 := List( deduped_12_1, function ( i_2 ) + return deduped_13_1[i_2]; + end ); + hoisted_2_1 := List( morphisms_1, function ( x_2 ) + return InverseImmutable( UnderlyingGroupElement( x_2 ) ); + end ); + hoisted_3_1 := List( deduped_12_1, function ( i_2 ) + return hoisted_2_1[i_2]; + end ); + deduped_10_1 := SubmagmaWithInverses( deduped_14_1, Concatenation( List( deduped_15_1, GeneratorsOfMagmaWithInverses )[ObjectNumber( Y_1 )], List( [ 1 .. deduped_16_1 - 1 ], function ( i_2 ) + return MultiplyGroupElements( hoisted_3_1[i_2], hoisted_5_1[i_2 + 1] ); + end ) ) ); + hoisted_6_1 := Index( deduped_14_1, deduped_10_1 ); + hoisted_1_1 := CardinalitiesOfObjects( cat_1 ); + deduped_11_1 := SafeFirst( Filtered( [ 1 .. NumberOfObjects( cat_1 ) ], function ( i_2 ) + return hoisted_1_1[i_2] = hoisted_6_1; + end ), function ( c_2 ) + return IsConjugate( deduped_14_1, deduped_10_1, deduped_15_1[c_2] ); + end ); + return CreateCapCategoryMorphismWithAttributes( cat_1, List( morphisms_1, Source )[1], CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_11_1 ), UnderlyingGroupElement, MultiplyGroupElements( deduped_13_1[1], RepresentativeAction( deduped_14_1, deduped_10_1, deduped_15_1[deduped_11_1] ) ) ); +end +######## + + ; + + ## + AddMorphismsOfExternalHom( cat, + +######## +function ( cat_1, arg2_1, arg3_1 ) + local hoisted_1_1, deduped_3_1, deduped_4_1; + deduped_4_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_3_1 := deduped_4_1[ObjectNumber( arg3_1 )]; + hoisted_1_1 := deduped_4_1[ObjectNumber( arg2_1 )]; + return List( Filtered( List( RightTransversal( UnderlyingGroup( cat_1 ), deduped_3_1 ), InverseImmutable ), function ( g_2 ) + return IsSubset( deduped_3_1, ConjugateSubgroup( hoisted_1_1, g_2 ) ); + end ), function ( g_2 ) + return CreateCapCategoryMorphismWithAttributes( cat_1, arg2_1, arg3_1, UnderlyingGroupElement, g_2 ); + end ); +end +######## + + , 100 ); + + ## + AddObjectConstructor( cat, + +######## +function ( cat_1, arg2_1 ) + return CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, arg2_1 ); +end +######## + + , 100 ); + + ## + AddObjectDatum( cat, + +######## +function ( cat_1, arg2_1 ) + return ObjectNumber( arg2_1 ); +end +######## + + , 100 ); + + ## + AddPostCompose( cat, + +######## +function ( cat_1, beta_1, alpha_1 ) + return CreateCapCategoryMorphismWithAttributes( cat_1, Source( alpha_1 ), Range( beta_1 ), UnderlyingGroupElement, MultiplyGroupElements( UnderlyingGroupElement( alpha_1 ), UnderlyingGroupElement( beta_1 ) ) ); +end +######## + + , 101 : IsPrecompiledDerivation := true ); + + ## + AddPostComposeList( cat, + +######## +function ( cat_1, source_1, list_of_morphisms_1, range_1 ) + local deduped_1_1; + deduped_1_1 := OneImmutable( UnderlyingGroup( cat_1 ) ); + return CreateCapCategoryMorphismWithAttributes( cat_1, source_1, range_1, UnderlyingGroupElement, Iterated( List( list_of_morphisms_1, UnderlyingGroupElement ), function ( alpha_2, beta_2 ) + return MultiplyGroupElements( beta_2, alpha_2 ); + end, deduped_1_1, deduped_1_1 ) ); +end +######## + + , 403 : IsPrecompiledDerivation := true ); + + ## + AddPostInverseForMorphisms( cat, + +######## +function ( cat_1, alpha_1 ) + return CreateCapCategoryMorphismWithAttributes( cat_1, Range( alpha_1 ), Source( alpha_1 ), UnderlyingGroupElement, MultiplyGroupElements( InverseImmutable( UnderlyingGroupElement( alpha_1 ) ), OneImmutable( UnderlyingGroup( cat_1 ) ) ) ); +end +######## + + , 201 : IsPrecompiledDerivation := true ); + + ## + AddPreCompose( cat, + +######## +function ( cat_1, alpha_1, beta_1 ) + return CreateCapCategoryMorphismWithAttributes( cat_1, Source( alpha_1 ), Range( beta_1 ), UnderlyingGroupElement, MultiplyGroupElements( UnderlyingGroupElement( alpha_1 ), UnderlyingGroupElement( beta_1 ) ) ); +end +######## + + , 100 ); + + ## + AddPreComposeList( cat, + +######## +function ( cat_1, source_1, list_of_morphisms_1, range_1 ) + local deduped_1_1; + deduped_1_1 := OneImmutable( UnderlyingGroup( cat_1 ) ); + return CreateCapCategoryMorphismWithAttributes( cat_1, source_1, range_1, UnderlyingGroupElement, Iterated( List( list_of_morphisms_1, UnderlyingGroupElement ), function ( alpha_2, beta_2 ) + return MultiplyGroupElements( alpha_2, beta_2 ); + end, deduped_1_1, deduped_1_1 ) ); +end +######## + + , 401 : IsPrecompiledDerivation := true ); + + ## + AddPreInverseForMorphisms( cat, + +######## +function ( cat_1, alpha_1 ) + return CreateCapCategoryMorphismWithAttributes( cat_1, Range( alpha_1 ), Source( alpha_1 ), UnderlyingGroupElement, MultiplyGroupElements( OneImmutable( UnderlyingGroup( cat_1 ) ), InverseImmutable( UnderlyingGroupElement( alpha_1 ) ) ) ); +end +######## + + , 201 : IsPrecompiledDerivation := true ); + + ## + AddProjectionOntoCoequalizer( cat, + +######## +function ( cat_1, Y_1, morphisms_1 ) + local hoisted_1_1, hoisted_2_1, hoisted_3_1, hoisted_4_1, deduped_8_1, deduped_9_1, deduped_10_1, deduped_11_1, deduped_12_1, deduped_13_1; + deduped_13_1 := Length( morphisms_1 ); + deduped_12_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_11_1 := UnderlyingGroup( cat_1 ); + deduped_10_1 := [ 1 .. deduped_13_1 ]; + hoisted_3_1 := List( deduped_10_1, function ( i_2 ) + return CAP_JIT_INCOMPLETE_LOGIC( UnderlyingGroupElement( CAP_JIT_INCOMPLETE_LOGIC( morphisms_1[i_2] ) ) ); + end ); + hoisted_2_1 := List( deduped_10_1, function ( i_2 ) + return CAP_JIT_INCOMPLETE_LOGIC( InverseImmutable( UnderlyingGroupElement( CAP_JIT_INCOMPLETE_LOGIC( morphisms_1[i_2] ) ) ) ); + end ); + deduped_8_1 := SubmagmaWithInverses( deduped_11_1, Concatenation( CAP_JIT_INCOMPLETE_LOGIC( GeneratorsOfMagmaWithInverses( CAP_JIT_INCOMPLETE_LOGIC( deduped_12_1[ObjectNumber( Y_1 )] ) ) ), List( [ 1 .. deduped_13_1 - 1 ], function ( i_2 ) + return MultiplyGroupElements( hoisted_2_1[i_2], hoisted_3_1[i_2 + 1] ); + end ) ) ); + hoisted_4_1 := Index( deduped_11_1, deduped_8_1 ); + hoisted_1_1 := CardinalitiesOfObjects( cat_1 ); + deduped_9_1 := SafeFirst( Filtered( [ 1 .. NumberOfObjects( cat_1 ) ], function ( i_2 ) + return hoisted_1_1[i_2] = hoisted_4_1; + end ), function ( c_2 ) + return IsConjugate( deduped_11_1, deduped_8_1, deduped_12_1[c_2] ); + end ); + return CreateCapCategoryMorphismWithAttributes( cat_1, Y_1, CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_9_1 ), UnderlyingGroupElement, RepresentativeAction( deduped_11_1, deduped_8_1, deduped_12_1[deduped_9_1] ) ); +end +######## + + , 100 ); + + ## + cat!.cached_precompiled_functions.ProjectionOntoCoequalizer := + +######## +function ( cat_1, Y_1, morphisms_1 ) + local hoisted_1_1, hoisted_2_1, hoisted_3_1, hoisted_4_1, hoisted_5_1, hoisted_6_1, deduped_10_1, deduped_11_1, deduped_12_1, deduped_13_1, deduped_14_1, deduped_15_1; + deduped_15_1 := Length( morphisms_1 ); + deduped_14_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_13_1 := UnderlyingGroup( cat_1 ); + deduped_12_1 := [ 1 .. deduped_15_1 ]; + hoisted_4_1 := List( morphisms_1, UnderlyingGroupElement ); + hoisted_5_1 := List( deduped_12_1, function ( i_2 ) + return hoisted_4_1[i_2]; + end ); + hoisted_2_1 := List( morphisms_1, function ( x_2 ) + return InverseImmutable( UnderlyingGroupElement( x_2 ) ); + end ); + hoisted_3_1 := List( deduped_12_1, function ( i_2 ) + return hoisted_2_1[i_2]; + end ); + deduped_10_1 := SubmagmaWithInverses( deduped_13_1, Concatenation( List( deduped_14_1, GeneratorsOfMagmaWithInverses )[ObjectNumber( Y_1 )], List( [ 1 .. deduped_15_1 - 1 ], function ( i_2 ) + return MultiplyGroupElements( hoisted_3_1[i_2], hoisted_5_1[i_2 + 1] ); + end ) ) ); + hoisted_6_1 := Index( deduped_13_1, deduped_10_1 ); + hoisted_1_1 := CardinalitiesOfObjects( cat_1 ); + deduped_11_1 := SafeFirst( Filtered( [ 1 .. NumberOfObjects( cat_1 ) ], function ( i_2 ) + return hoisted_1_1[i_2] = hoisted_6_1; + end ), function ( c_2 ) + return IsConjugate( deduped_13_1, deduped_10_1, deduped_14_1[c_2] ); + end ); + return CreateCapCategoryMorphismWithAttributes( cat_1, Y_1, CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_11_1 ), UnderlyingGroupElement, RepresentativeAction( deduped_13_1, deduped_10_1, deduped_14_1[deduped_11_1] ) ); +end +######## + + ; + + ## + AddProjectionOntoCoequalizerOfIdentityAndAutomorphisms( cat, + +######## +function ( cat_1, Y_1, automorphisms_1 ) + local hoisted_1_1, hoisted_2_1, deduped_6_1, deduped_7_1, deduped_8_1, deduped_9_1; + deduped_9_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_8_1 := UnderlyingGroup( cat_1 ); + deduped_6_1 := SubmagmaWithInverses( deduped_8_1, Concatenation( CAP_JIT_INCOMPLETE_LOGIC( GeneratorsOfMagmaWithInverses( CAP_JIT_INCOMPLETE_LOGIC( deduped_9_1[ObjectNumber( Y_1 )] ) ) ), List( [ 1 .. Length( automorphisms_1 ) ], function ( i_2 ) + return CAP_JIT_INCOMPLETE_LOGIC( UnderlyingGroupElement( CAP_JIT_INCOMPLETE_LOGIC( automorphisms_1[i_2] ) ) ); + end ) ) ); + hoisted_2_1 := Index( deduped_8_1, deduped_6_1 ); + hoisted_1_1 := CardinalitiesOfObjects( cat_1 ); + deduped_7_1 := SafeFirst( Filtered( [ 1 .. NumberOfObjects( cat_1 ) ], function ( i_2 ) + return hoisted_1_1[i_2] = hoisted_2_1; + end ), function ( c_2 ) + return IsConjugate( deduped_8_1, deduped_6_1, deduped_9_1[c_2] ); + end ); + return CreateCapCategoryMorphismWithAttributes( cat_1, Y_1, CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_7_1 ), UnderlyingGroupElement, RepresentativeAction( deduped_8_1, deduped_6_1, deduped_9_1[deduped_7_1] ) ); +end +######## + + , 100 ); + + ## + cat!.cached_precompiled_functions.ProjectionOntoCoequalizerOfIdentityAndAutomorphisms := + +######## +function ( cat_1, Y_1, automorphisms_1 ) + local hoisted_1_1, hoisted_2_1, hoisted_3_1, deduped_7_1, deduped_8_1, deduped_9_1, deduped_10_1; + deduped_10_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_9_1 := UnderlyingGroup( cat_1 ); + hoisted_2_1 := List( automorphisms_1, UnderlyingGroupElement ); + deduped_7_1 := SubmagmaWithInverses( deduped_9_1, Concatenation( List( deduped_10_1, GeneratorsOfMagmaWithInverses )[ObjectNumber( Y_1 )], List( [ 1 .. Length( automorphisms_1 ) ], function ( i_2 ) + return hoisted_2_1[i_2]; + end ) ) ); + hoisted_3_1 := Index( deduped_9_1, deduped_7_1 ); + hoisted_1_1 := CardinalitiesOfObjects( cat_1 ); + deduped_8_1 := SafeFirst( Filtered( [ 1 .. NumberOfObjects( cat_1 ) ], function ( i_2 ) + return hoisted_1_1[i_2] = hoisted_3_1; + end ), function ( c_2 ) + return IsConjugate( deduped_9_1, deduped_7_1, deduped_10_1[c_2] ); + end ); + return CreateCapCategoryMorphismWithAttributes( cat_1, Y_1, CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_8_1 ), UnderlyingGroupElement, RepresentativeAction( deduped_9_1, deduped_7_1, deduped_10_1[deduped_8_1] ) ); +end +######## + + ; + + ## + AddProjectionOntoCoequalizerOfIdentityAndAutomorphismsWithGivenCoequalizer( cat, + +######## +function ( cat_1, Y_1, automorphisms_1, P_1 ) + local hoisted_1_1, hoisted_2_1, deduped_6_1, deduped_7_1, deduped_8_1, deduped_9_1; + deduped_9_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_8_1 := UnderlyingGroup( cat_1 ); + deduped_6_1 := SubmagmaWithInverses( deduped_8_1, Concatenation( CAP_JIT_INCOMPLETE_LOGIC( GeneratorsOfMagmaWithInverses( CAP_JIT_INCOMPLETE_LOGIC( deduped_9_1[ObjectNumber( Y_1 )] ) ) ), List( [ 1 .. Length( automorphisms_1 ) ], function ( i_2 ) + return CAP_JIT_INCOMPLETE_LOGIC( UnderlyingGroupElement( CAP_JIT_INCOMPLETE_LOGIC( automorphisms_1[i_2] ) ) ); + end ) ) ); + hoisted_2_1 := Index( deduped_8_1, deduped_6_1 ); + hoisted_1_1 := CardinalitiesOfObjects( cat_1 ); + deduped_7_1 := SafeFirst( Filtered( [ 1 .. NumberOfObjects( cat_1 ) ], function ( i_2 ) + return hoisted_1_1[i_2] = hoisted_2_1; + end ), function ( c_2 ) + return IsConjugate( deduped_8_1, deduped_6_1, deduped_9_1[c_2] ); + end ); + return CreateCapCategoryMorphismWithAttributes( cat_1, Y_1, CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_7_1 ), UnderlyingGroupElement, RepresentativeAction( deduped_8_1, deduped_6_1, deduped_9_1[deduped_7_1] ) ); +end +######## + + , 101 : IsPrecompiledDerivation := true ); + + ## + cat!.cached_precompiled_functions.ProjectionOntoCoequalizerOfIdentityAndAutomorphismsWithGivenCoequalizer := + +######## +function ( cat_1, Y_1, automorphisms_1, P_1 ) + local hoisted_1_1, hoisted_2_1, hoisted_3_1, deduped_7_1, deduped_8_1, deduped_9_1, deduped_10_1; + deduped_10_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_9_1 := UnderlyingGroup( cat_1 ); + hoisted_2_1 := List( automorphisms_1, UnderlyingGroupElement ); + deduped_7_1 := SubmagmaWithInverses( deduped_9_1, Concatenation( List( deduped_10_1, GeneratorsOfMagmaWithInverses )[ObjectNumber( Y_1 )], List( [ 1 .. Length( automorphisms_1 ) ], function ( i_2 ) + return hoisted_2_1[i_2]; + end ) ) ); + hoisted_3_1 := Index( deduped_9_1, deduped_7_1 ); + hoisted_1_1 := CardinalitiesOfObjects( cat_1 ); + deduped_8_1 := SafeFirst( Filtered( [ 1 .. NumberOfObjects( cat_1 ) ], function ( i_2 ) + return hoisted_1_1[i_2] = hoisted_3_1; + end ), function ( c_2 ) + return IsConjugate( deduped_9_1, deduped_7_1, deduped_10_1[c_2] ); + end ); + return CreateCapCategoryMorphismWithAttributes( cat_1, Y_1, CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_8_1 ), UnderlyingGroupElement, RepresentativeAction( deduped_9_1, deduped_7_1, deduped_10_1[deduped_8_1] ) ); +end +######## + + ; + + ## + AddProjectionOntoCoequalizerWithGivenCoequalizer( cat, + +######## +function ( cat_1, Y_1, morphisms_1, P_1 ) + local hoisted_1_1, hoisted_2_1, hoisted_3_1, hoisted_4_1, deduped_8_1, deduped_9_1, deduped_10_1, deduped_11_1, deduped_12_1, deduped_13_1; + deduped_13_1 := Length( morphisms_1 ); + deduped_12_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_11_1 := UnderlyingGroup( cat_1 ); + deduped_10_1 := [ 1 .. deduped_13_1 ]; + hoisted_3_1 := List( deduped_10_1, function ( i_2 ) + return CAP_JIT_INCOMPLETE_LOGIC( UnderlyingGroupElement( CAP_JIT_INCOMPLETE_LOGIC( morphisms_1[i_2] ) ) ); + end ); + hoisted_2_1 := List( deduped_10_1, function ( i_2 ) + return CAP_JIT_INCOMPLETE_LOGIC( InverseImmutable( UnderlyingGroupElement( CAP_JIT_INCOMPLETE_LOGIC( morphisms_1[i_2] ) ) ) ); + end ); + deduped_8_1 := SubmagmaWithInverses( deduped_11_1, Concatenation( CAP_JIT_INCOMPLETE_LOGIC( GeneratorsOfMagmaWithInverses( CAP_JIT_INCOMPLETE_LOGIC( deduped_12_1[ObjectNumber( Y_1 )] ) ) ), List( [ 1 .. deduped_13_1 - 1 ], function ( i_2 ) + return MultiplyGroupElements( hoisted_2_1[i_2], hoisted_3_1[i_2 + 1] ); + end ) ) ); + hoisted_4_1 := Index( deduped_11_1, deduped_8_1 ); + hoisted_1_1 := CardinalitiesOfObjects( cat_1 ); + deduped_9_1 := SafeFirst( Filtered( [ 1 .. NumberOfObjects( cat_1 ) ], function ( i_2 ) + return hoisted_1_1[i_2] = hoisted_4_1; + end ), function ( c_2 ) + return IsConjugate( deduped_11_1, deduped_8_1, deduped_12_1[c_2] ); + end ); + return CreateCapCategoryMorphismWithAttributes( cat_1, Y_1, CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_9_1 ), UnderlyingGroupElement, RepresentativeAction( deduped_11_1, deduped_8_1, deduped_12_1[deduped_9_1] ) ); +end +######## + + , 101 : IsPrecompiledDerivation := true ); + + ## + cat!.cached_precompiled_functions.ProjectionOntoCoequalizerWithGivenCoequalizer := + +######## +function ( cat_1, Y_1, morphisms_1, P_1 ) + local hoisted_1_1, hoisted_2_1, hoisted_3_1, hoisted_4_1, hoisted_5_1, hoisted_6_1, deduped_10_1, deduped_11_1, deduped_12_1, deduped_13_1, deduped_14_1, deduped_15_1; + deduped_15_1 := Length( morphisms_1 ); + deduped_14_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_13_1 := UnderlyingGroup( cat_1 ); + deduped_12_1 := [ 1 .. deduped_15_1 ]; + hoisted_4_1 := List( morphisms_1, UnderlyingGroupElement ); + hoisted_5_1 := List( deduped_12_1, function ( i_2 ) + return hoisted_4_1[i_2]; + end ); + hoisted_2_1 := List( morphisms_1, function ( x_2 ) + return InverseImmutable( UnderlyingGroupElement( x_2 ) ); + end ); + hoisted_3_1 := List( deduped_12_1, function ( i_2 ) + return hoisted_2_1[i_2]; + end ); + deduped_10_1 := SubmagmaWithInverses( deduped_13_1, Concatenation( List( deduped_14_1, GeneratorsOfMagmaWithInverses )[ObjectNumber( Y_1 )], List( [ 1 .. deduped_15_1 - 1 ], function ( i_2 ) + return MultiplyGroupElements( hoisted_3_1[i_2], hoisted_5_1[i_2 + 1] ); + end ) ) ); + hoisted_6_1 := Index( deduped_13_1, deduped_10_1 ); + hoisted_1_1 := CardinalitiesOfObjects( cat_1 ); + deduped_11_1 := SafeFirst( Filtered( [ 1 .. NumberOfObjects( cat_1 ) ], function ( i_2 ) + return hoisted_1_1[i_2] = hoisted_6_1; + end ), function ( c_2 ) + return IsConjugate( deduped_13_1, deduped_10_1, deduped_14_1[c_2] ); + end ); + return CreateCapCategoryMorphismWithAttributes( cat_1, Y_1, CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_11_1 ), UnderlyingGroupElement, RepresentativeAction( deduped_13_1, deduped_10_1, deduped_14_1[deduped_11_1] ) ); +end +######## + + ; + + ## + AddProjectiveLift( cat, + +######## +function ( cat_1, alpha_1, beta_1 ) + return CreateCapCategoryMorphismWithAttributes( cat_1, Source( alpha_1 ), Source( beta_1 ), UnderlyingGroupElement, MultiplyGroupElements( UnderlyingGroupElement( alpha_1 ), InverseImmutable( UnderlyingGroupElement( beta_1 ) ) ) ); +end +######## + + , 101 : IsPrecompiledDerivation := true ); + + ## + AddSetOfMorphismsOfFiniteCategory( cat, + +######## +function ( cat_1 ) + local deduped_1_1, hoisted_2_1, deduped_4_1; + deduped_4_1 := [ 1 .. NumberOfObjects( cat_1 ) ]; + hoisted_2_1 := UnderlyingGroup( cat_1 ); + deduped_1_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + return Concatenation( List( deduped_4_1, function ( i_2 ) + local hoisted_2_2, hoisted_3_2, deduped_4_2; + deduped_4_2 := deduped_1_1[i_2]; + hoisted_3_2 := CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, i_2 ); + hoisted_2_2 := List( RightTransversal( hoisted_2_1, deduped_4_2 ), InverseImmutable ); + return Concatenation( List( deduped_4_1, function ( i_3 ) + local hoisted_1_3, hoisted_2_3; + hoisted_2_3 := CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, i_3 ); + hoisted_1_3 := deduped_1_1[i_3]; + return List( Filtered( hoisted_2_2, function ( g_4 ) + return IsSubset( deduped_4_2, ConjugateSubgroup( hoisted_1_3, g_4 ) ); + end ), function ( g_4 ) + return CreateCapCategoryMorphismWithAttributes( cat_1, hoisted_2_3, hoisted_3_2, UnderlyingGroupElement, g_4 ); + end ); + end ) ); + end ) ); +end +######## + + , 501 : IsPrecompiledDerivation := true ); + ## AddSetOfObjectsOfCategory( cat, @@ -19,36 +1831,302 @@ end , 100 ); ## - AddIsEqualForObjects( cat, + AddSomeIsomorphismBetweenObjects( cat, ######## -function ( cat_1, arg2_1, arg3_1 ) - return ObjectNumber( arg2_1 ) = ObjectNumber( arg3_1 ); +function ( cat_1, object_1_1, object_2_1 ) + return CreateCapCategoryMorphismWithAttributes( cat_1, object_1_1, object_1_1, UnderlyingGroupElement, OneImmutable( UnderlyingGroup( cat_1 ) ) ); end ######## - , 100 ); + , 101 : IsPrecompiledDerivation := true ); ## - AddIsWellDefinedForObjects( cat, + AddTerminalObject( cat, ######## -function ( cat_1, arg2_1 ) - return ObjectNumber( arg2_1 ) in [ 1 .. NumberOfObjects( cat_1 ) ]; +function ( cat_1 ) + return CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, NumberOfObjects( cat_1 ) ); end ######## , 100 ); ## - AddIsWellDefinedForMorphisms( cat, + AddTerminalObjectFunctorial( cat, ######## -function ( cat_1, alpha_1 ) - local deduped_1_1, deduped_2_1; - deduped_2_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); - deduped_1_1 := UnderlyingGroupElement( alpha_1 ); - return deduped_1_1 in UnderlyingGroup( cat_1 ) and IsSubset( deduped_2_1[ObjectNumber( Range( alpha_1 ) )], ConjugateSubgroup( deduped_2_1[ObjectNumber( Source( alpha_1 ) )], deduped_1_1 ) ); +function ( cat_1 ) + local deduped_1_1; + deduped_1_1 := CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, NumberOfObjects( cat_1 ) ); + return CreateCapCategoryMorphismWithAttributes( cat_1, deduped_1_1, deduped_1_1, UnderlyingGroupElement, OneImmutable( UnderlyingGroup( cat_1 ) ) ); +end +######## + + , 201 : IsPrecompiledDerivation := true ); + + ## + AddTerminalObjectFunctorialWithGivenTerminalObjects( cat, + +######## +function ( cat_1, P_1, Pp_1 ) + return CreateCapCategoryMorphismWithAttributes( cat_1, P_1, Pp_1, UnderlyingGroupElement, OneImmutable( UnderlyingGroup( cat_1 ) ) ); +end +######## + + , 101 : IsPrecompiledDerivation := true ); + + ## + AddUniversalMorphismFromCoequalizer( cat, + +######## +function ( cat_1, Y_1, morphisms_1, T_1, tau_1 ) + local hoisted_1_1, hoisted_2_1, hoisted_3_1, hoisted_4_1, deduped_8_1, deduped_9_1, deduped_10_1, deduped_11_1, deduped_12_1, deduped_13_1; + deduped_13_1 := Length( morphisms_1 ); + deduped_12_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_11_1 := UnderlyingGroup( cat_1 ); + deduped_10_1 := [ 1 .. deduped_13_1 ]; + hoisted_3_1 := List( deduped_10_1, function ( i_2 ) + return CAP_JIT_INCOMPLETE_LOGIC( UnderlyingGroupElement( CAP_JIT_INCOMPLETE_LOGIC( morphisms_1[i_2] ) ) ); + end ); + hoisted_2_1 := List( deduped_10_1, function ( i_2 ) + return CAP_JIT_INCOMPLETE_LOGIC( InverseImmutable( UnderlyingGroupElement( CAP_JIT_INCOMPLETE_LOGIC( morphisms_1[i_2] ) ) ) ); + end ); + deduped_8_1 := SubmagmaWithInverses( deduped_11_1, Concatenation( CAP_JIT_INCOMPLETE_LOGIC( GeneratorsOfMagmaWithInverses( CAP_JIT_INCOMPLETE_LOGIC( deduped_12_1[ObjectNumber( Y_1 )] ) ) ), List( [ 1 .. deduped_13_1 - 1 ], function ( i_2 ) + return MultiplyGroupElements( hoisted_2_1[i_2], hoisted_3_1[i_2 + 1] ); + end ) ) ); + hoisted_4_1 := Index( deduped_11_1, deduped_8_1 ); + hoisted_1_1 := CardinalitiesOfObjects( cat_1 ); + deduped_9_1 := SafeFirst( Filtered( [ 1 .. NumberOfObjects( cat_1 ) ], function ( i_2 ) + return hoisted_1_1[i_2] = hoisted_4_1; + end ), function ( c_2 ) + return IsConjugate( deduped_11_1, deduped_8_1, deduped_12_1[c_2] ); + end ); + return CreateCapCategoryMorphismWithAttributes( cat_1, CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_9_1 ), Range( tau_1 ), UnderlyingGroupElement, MultiplyGroupElements( InverseImmutable( RepresentativeAction( deduped_11_1, deduped_8_1, deduped_12_1[deduped_9_1] ) ), UnderlyingGroupElement( tau_1 ) ) ); +end +######## + + , 202 : IsPrecompiledDerivation := true ); + + ## + cat!.cached_precompiled_functions.UniversalMorphismFromCoequalizer := + +######## +function ( cat_1, Y_1, morphisms_1, T_1, tau_1 ) + local hoisted_1_1, hoisted_2_1, hoisted_3_1, hoisted_4_1, hoisted_5_1, hoisted_6_1, deduped_10_1, deduped_11_1, deduped_12_1, deduped_13_1, deduped_14_1, deduped_15_1; + deduped_15_1 := Length( morphisms_1 ); + deduped_14_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_13_1 := UnderlyingGroup( cat_1 ); + deduped_12_1 := [ 1 .. deduped_15_1 ]; + hoisted_4_1 := List( morphisms_1, UnderlyingGroupElement ); + hoisted_5_1 := List( deduped_12_1, function ( i_2 ) + return hoisted_4_1[i_2]; + end ); + hoisted_2_1 := List( morphisms_1, function ( x_2 ) + return InverseImmutable( UnderlyingGroupElement( x_2 ) ); + end ); + hoisted_3_1 := List( deduped_12_1, function ( i_2 ) + return hoisted_2_1[i_2]; + end ); + deduped_10_1 := SubmagmaWithInverses( deduped_13_1, Concatenation( List( deduped_14_1, GeneratorsOfMagmaWithInverses )[ObjectNumber( Y_1 )], List( [ 1 .. deduped_15_1 - 1 ], function ( i_2 ) + return MultiplyGroupElements( hoisted_3_1[i_2], hoisted_5_1[i_2 + 1] ); + end ) ) ); + hoisted_6_1 := Index( deduped_13_1, deduped_10_1 ); + hoisted_1_1 := CardinalitiesOfObjects( cat_1 ); + deduped_11_1 := SafeFirst( Filtered( [ 1 .. NumberOfObjects( cat_1 ) ], function ( i_2 ) + return hoisted_1_1[i_2] = hoisted_6_1; + end ), function ( c_2 ) + return IsConjugate( deduped_13_1, deduped_10_1, deduped_14_1[c_2] ); + end ); + return CreateCapCategoryMorphismWithAttributes( cat_1, CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_11_1 ), Range( tau_1 ), UnderlyingGroupElement, MultiplyGroupElements( InverseImmutable( RepresentativeAction( deduped_13_1, deduped_10_1, deduped_14_1[deduped_11_1] ) ), UnderlyingGroupElement( tau_1 ) ) ); +end +######## + + ; + + ## + AddUniversalMorphismFromCoequalizerOfIdentityAndAutomorphisms( cat, + +######## +function ( cat_1, Y_1, automorphisms_1, T_1, tau_1 ) + local hoisted_1_1, hoisted_2_1, deduped_6_1, deduped_7_1, deduped_8_1, deduped_9_1; + deduped_9_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_8_1 := UnderlyingGroup( cat_1 ); + deduped_6_1 := SubmagmaWithInverses( deduped_8_1, Concatenation( CAP_JIT_INCOMPLETE_LOGIC( GeneratorsOfMagmaWithInverses( CAP_JIT_INCOMPLETE_LOGIC( deduped_9_1[ObjectNumber( Y_1 )] ) ) ), List( [ 1 .. Length( automorphisms_1 ) ], function ( i_2 ) + return CAP_JIT_INCOMPLETE_LOGIC( UnderlyingGroupElement( CAP_JIT_INCOMPLETE_LOGIC( automorphisms_1[i_2] ) ) ); + end ) ) ); + hoisted_2_1 := Index( deduped_8_1, deduped_6_1 ); + hoisted_1_1 := CardinalitiesOfObjects( cat_1 ); + deduped_7_1 := SafeFirst( Filtered( [ 1 .. NumberOfObjects( cat_1 ) ], function ( i_2 ) + return hoisted_1_1[i_2] = hoisted_2_1; + end ), function ( c_2 ) + return IsConjugate( deduped_8_1, deduped_6_1, deduped_9_1[c_2] ); + end ); + return CreateCapCategoryMorphismWithAttributes( cat_1, CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_7_1 ), Range( tau_1 ), UnderlyingGroupElement, MultiplyGroupElements( InverseImmutable( RepresentativeAction( deduped_8_1, deduped_6_1, deduped_9_1[deduped_7_1] ) ), UnderlyingGroupElement( tau_1 ) ) ); +end +######## + + , 202 : IsPrecompiledDerivation := true ); + + ## + cat!.cached_precompiled_functions.UniversalMorphismFromCoequalizerOfIdentityAndAutomorphisms := + +######## +function ( cat_1, Y_1, automorphisms_1, T_1, tau_1 ) + local hoisted_1_1, hoisted_2_1, hoisted_3_1, deduped_7_1, deduped_8_1, deduped_9_1, deduped_10_1; + deduped_10_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_9_1 := UnderlyingGroup( cat_1 ); + hoisted_2_1 := List( automorphisms_1, UnderlyingGroupElement ); + deduped_7_1 := SubmagmaWithInverses( deduped_9_1, Concatenation( List( deduped_10_1, GeneratorsOfMagmaWithInverses )[ObjectNumber( Y_1 )], List( [ 1 .. Length( automorphisms_1 ) ], function ( i_2 ) + return hoisted_2_1[i_2]; + end ) ) ); + hoisted_3_1 := Index( deduped_9_1, deduped_7_1 ); + hoisted_1_1 := CardinalitiesOfObjects( cat_1 ); + deduped_8_1 := SafeFirst( Filtered( [ 1 .. NumberOfObjects( cat_1 ) ], function ( i_2 ) + return hoisted_1_1[i_2] = hoisted_3_1; + end ), function ( c_2 ) + return IsConjugate( deduped_9_1, deduped_7_1, deduped_10_1[c_2] ); + end ); + return CreateCapCategoryMorphismWithAttributes( cat_1, CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_8_1 ), Range( tau_1 ), UnderlyingGroupElement, MultiplyGroupElements( InverseImmutable( RepresentativeAction( deduped_9_1, deduped_7_1, deduped_10_1[deduped_8_1] ) ), UnderlyingGroupElement( tau_1 ) ) ); +end +######## + + ; + + ## + AddUniversalMorphismFromCoequalizerOfIdentityAndAutomorphismsWithGivenCoequalizer( cat, + +######## +function ( cat_1, Y_1, automorphisms_1, T_1, tau_1, P_1 ) + local hoisted_1_1, hoisted_2_1, deduped_6_1, deduped_7_1, deduped_8_1, deduped_9_1; + deduped_9_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_8_1 := UnderlyingGroup( cat_1 ); + deduped_6_1 := SubmagmaWithInverses( deduped_8_1, Concatenation( CAP_JIT_INCOMPLETE_LOGIC( GeneratorsOfMagmaWithInverses( CAP_JIT_INCOMPLETE_LOGIC( deduped_9_1[ObjectNumber( Y_1 )] ) ) ), List( [ 1 .. Length( automorphisms_1 ) ], function ( i_2 ) + return CAP_JIT_INCOMPLETE_LOGIC( UnderlyingGroupElement( CAP_JIT_INCOMPLETE_LOGIC( automorphisms_1[i_2] ) ) ); + end ) ) ); + hoisted_2_1 := Index( deduped_8_1, deduped_6_1 ); + hoisted_1_1 := CardinalitiesOfObjects( cat_1 ); + deduped_7_1 := SafeFirst( Filtered( [ 1 .. NumberOfObjects( cat_1 ) ], function ( i_2 ) + return hoisted_1_1[i_2] = hoisted_2_1; + end ), function ( c_2 ) + return IsConjugate( deduped_8_1, deduped_6_1, deduped_9_1[c_2] ); + end ); + return CreateCapCategoryMorphismWithAttributes( cat_1, CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_7_1 ), Range( tau_1 ), UnderlyingGroupElement, MultiplyGroupElements( InverseImmutable( RepresentativeAction( deduped_8_1, deduped_6_1, deduped_9_1[deduped_7_1] ) ), UnderlyingGroupElement( tau_1 ) ) ); +end +######## + + , 203 : IsPrecompiledDerivation := true ); + + ## + cat!.cached_precompiled_functions.UniversalMorphismFromCoequalizerOfIdentityAndAutomorphismsWithGivenCoequalizer := + +######## +function ( cat_1, Y_1, automorphisms_1, T_1, tau_1, P_1 ) + local hoisted_1_1, hoisted_2_1, hoisted_3_1, deduped_7_1, deduped_8_1, deduped_9_1, deduped_10_1; + deduped_10_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_9_1 := UnderlyingGroup( cat_1 ); + hoisted_2_1 := List( automorphisms_1, UnderlyingGroupElement ); + deduped_7_1 := SubmagmaWithInverses( deduped_9_1, Concatenation( List( deduped_10_1, GeneratorsOfMagmaWithInverses )[ObjectNumber( Y_1 )], List( [ 1 .. Length( automorphisms_1 ) ], function ( i_2 ) + return hoisted_2_1[i_2]; + end ) ) ); + hoisted_3_1 := Index( deduped_9_1, deduped_7_1 ); + hoisted_1_1 := CardinalitiesOfObjects( cat_1 ); + deduped_8_1 := SafeFirst( Filtered( [ 1 .. NumberOfObjects( cat_1 ) ], function ( i_2 ) + return hoisted_1_1[i_2] = hoisted_3_1; + end ), function ( c_2 ) + return IsConjugate( deduped_9_1, deduped_7_1, deduped_10_1[c_2] ); + end ); + return CreateCapCategoryMorphismWithAttributes( cat_1, CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_8_1 ), Range( tau_1 ), UnderlyingGroupElement, MultiplyGroupElements( InverseImmutable( RepresentativeAction( deduped_9_1, deduped_7_1, deduped_10_1[deduped_8_1] ) ), UnderlyingGroupElement( tau_1 ) ) ); +end +######## + + ; + + ## + AddUniversalMorphismFromCoequalizerWithGivenCoequalizer( cat, + +######## +function ( cat_1, Y_1, morphisms_1, T_1, tau_1, P_1 ) + local hoisted_1_1, hoisted_2_1, hoisted_3_1, hoisted_4_1, deduped_8_1, deduped_9_1, deduped_10_1, deduped_11_1, deduped_12_1, deduped_13_1; + deduped_13_1 := Length( morphisms_1 ); + deduped_12_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_11_1 := UnderlyingGroup( cat_1 ); + deduped_10_1 := [ 1 .. deduped_13_1 ]; + hoisted_3_1 := List( deduped_10_1, function ( i_2 ) + return CAP_JIT_INCOMPLETE_LOGIC( UnderlyingGroupElement( CAP_JIT_INCOMPLETE_LOGIC( morphisms_1[i_2] ) ) ); + end ); + hoisted_2_1 := List( deduped_10_1, function ( i_2 ) + return CAP_JIT_INCOMPLETE_LOGIC( InverseImmutable( UnderlyingGroupElement( CAP_JIT_INCOMPLETE_LOGIC( morphisms_1[i_2] ) ) ) ); + end ); + deduped_8_1 := SubmagmaWithInverses( deduped_11_1, Concatenation( CAP_JIT_INCOMPLETE_LOGIC( GeneratorsOfMagmaWithInverses( CAP_JIT_INCOMPLETE_LOGIC( deduped_12_1[ObjectNumber( Y_1 )] ) ) ), List( [ 1 .. deduped_13_1 - 1 ], function ( i_2 ) + return MultiplyGroupElements( hoisted_2_1[i_2], hoisted_3_1[i_2 + 1] ); + end ) ) ); + hoisted_4_1 := Index( deduped_11_1, deduped_8_1 ); + hoisted_1_1 := CardinalitiesOfObjects( cat_1 ); + deduped_9_1 := SafeFirst( Filtered( [ 1 .. NumberOfObjects( cat_1 ) ], function ( i_2 ) + return hoisted_1_1[i_2] = hoisted_4_1; + end ), function ( c_2 ) + return IsConjugate( deduped_11_1, deduped_8_1, deduped_12_1[c_2] ); + end ); + return CreateCapCategoryMorphismWithAttributes( cat_1, CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_9_1 ), Range( tau_1 ), UnderlyingGroupElement, MultiplyGroupElements( InverseImmutable( RepresentativeAction( deduped_11_1, deduped_8_1, deduped_12_1[deduped_9_1] ) ), UnderlyingGroupElement( tau_1 ) ) ); +end +######## + + , 203 : IsPrecompiledDerivation := true ); + + ## + cat!.cached_precompiled_functions.UniversalMorphismFromCoequalizerWithGivenCoequalizer := + +######## +function ( cat_1, Y_1, morphisms_1, T_1, tau_1, P_1 ) + local hoisted_1_1, hoisted_2_1, hoisted_3_1, hoisted_4_1, hoisted_5_1, hoisted_6_1, deduped_10_1, deduped_11_1, deduped_12_1, deduped_13_1, deduped_14_1, deduped_15_1; + deduped_15_1 := Length( morphisms_1 ); + deduped_14_1 := RepresentativesOfSubgroupsUpToConjugation( cat_1 ); + deduped_13_1 := UnderlyingGroup( cat_1 ); + deduped_12_1 := [ 1 .. deduped_15_1 ]; + hoisted_4_1 := List( morphisms_1, UnderlyingGroupElement ); + hoisted_5_1 := List( deduped_12_1, function ( i_2 ) + return hoisted_4_1[i_2]; + end ); + hoisted_2_1 := List( morphisms_1, function ( x_2 ) + return InverseImmutable( UnderlyingGroupElement( x_2 ) ); + end ); + hoisted_3_1 := List( deduped_12_1, function ( i_2 ) + return hoisted_2_1[i_2]; + end ); + deduped_10_1 := SubmagmaWithInverses( deduped_13_1, Concatenation( List( deduped_14_1, GeneratorsOfMagmaWithInverses )[ObjectNumber( Y_1 )], List( [ 1 .. deduped_15_1 - 1 ], function ( i_2 ) + return MultiplyGroupElements( hoisted_3_1[i_2], hoisted_5_1[i_2 + 1] ); + end ) ) ); + hoisted_6_1 := Index( deduped_13_1, deduped_10_1 ); + hoisted_1_1 := CardinalitiesOfObjects( cat_1 ); + deduped_11_1 := SafeFirst( Filtered( [ 1 .. NumberOfObjects( cat_1 ) ], function ( i_2 ) + return hoisted_1_1[i_2] = hoisted_6_1; + end ), function ( c_2 ) + return IsConjugate( deduped_13_1, deduped_10_1, deduped_14_1[c_2] ); + end ); + return CreateCapCategoryMorphismWithAttributes( cat_1, CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, deduped_11_1 ), Range( tau_1 ), UnderlyingGroupElement, MultiplyGroupElements( InverseImmutable( RepresentativeAction( deduped_13_1, deduped_10_1, deduped_14_1[deduped_11_1] ) ), UnderlyingGroupElement( tau_1 ) ) ); +end +######## + + ; + + ## + AddUniversalMorphismIntoTerminalObject( cat, + +######## +function ( cat_1, T_1 ) + return CreateCapCategoryMorphismWithAttributes( cat_1, T_1, CreateCapCategoryObjectWithAttributes( cat_1, ObjectNumber, NumberOfObjects( cat_1 ) ), UnderlyingGroupElement, OneImmutable( UnderlyingGroup( cat_1 ) ) ); +end +######## + + , 201 : IsPrecompiledDerivation := true ); + + ## + AddUniversalMorphismIntoTerminalObjectWithGivenTerminalObject( cat, + +######## +function ( cat_1, T_1, P_1 ) + return CreateCapCategoryMorphismWithAttributes( cat_1, T_1, P_1, UnderlyingGroupElement, OneImmutable( UnderlyingGroup( cat_1 ) ) ); end ########