Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
| Download
GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
Project: cocalc-sagemath-dev-slelievre
Views: 418346if not IsBound( VectorSpacesConstructorsLoaded ) then ReadPackage( "CAP", "examples/testfiles/VectorSpacesConstructors.gi" ); fi; if not IsCapCategory( vecspaces ) then vecspaces := CreateCapCategory( "VectorSpacesFinalizeTest" ); fi; SetIsAbelianCategory( vecspaces, true ); AddIsCongruentForMorphisms( vecspaces, function( a, b ) return a!.morphism = b!.morphism; end ); AddIsEqualForObjects( vecspaces, function( a, b ) return Dimension( a ) = Dimension( b ); end ); ## Methods needed for FiberProductEmbeddingInDirectSum: ## AddKernelEmbedding( vecspaces, function( morphism ) local kernel_emb, kernel_obj; kernel_emb := SyzygiesOfRows( morphism!.morphism ); kernel_obj := QVectorSpace( NrRows( kernel_emb ) ); return VectorSpaceMorphism( kernel_obj, kernel_emb, Source( morphism ) ); end ); ## AddPreCompose( vecspaces, function( mor_left, mor_right ) local composition; composition := mor_left!.morphism * mor_right!.morphism; return VectorSpaceMorphism( Source( mor_left ), composition, Range( mor_right ) ); end ); ## AddDirectSum( vecspaces, function( object_product_list ) local dim; dim := Sum( List( object_product_list, c -> Dimension( c ) ) ); return QVectorSpace( dim ); end ); ## ## the user may assume that Length( object_product_list ) > 1 AddProjectionInFactorOfDirectSumWithGivenDirectSum( vecspaces, function( object_product_list, projection_number, direct_product ) local components, dim_pre, dim_post, dim_factor, number_of_objects, projection_in_factor; components := object_product_list; number_of_objects := Length( components ); dim_pre := Sum( components{ [ 1 .. projection_number - 1 ] }, c -> Dimension( c ) ); dim_post := Sum( components{ [ projection_number + 1 .. number_of_objects ] }, c -> Dimension( c ) ); dim_factor := Dimension( object_product_list[ projection_number ] ); projection_in_factor := HomalgZeroMatrix( dim_pre, dim_factor, VECTORSPACES_FIELD ); projection_in_factor := UnionOfRows( projection_in_factor, HomalgIdentityMatrix( dim_factor, VECTORSPACES_FIELD ) ); projection_in_factor := UnionOfRows( projection_in_factor, HomalgZeroMatrix( dim_post, dim_factor, VECTORSPACES_FIELD ) ); return VectorSpaceMorphism( direct_product, projection_in_factor, object_product_list[ projection_number ] ); end ); ## AddUniversalMorphismIntoDirectSumWithGivenDirectSum( vecspaces, function( diagram, sink, direct_product ) local components, universal_morphism, morphism; components := sink; universal_morphism := sink[1]!.morphism; for morphism in components{ [ 2 .. Length( components ) ] } do universal_morphism := UnionOfColumns( universal_morphism, morphism!.morphism ); od; return VectorSpaceMorphism( Source( sink[1] ), universal_morphism, direct_product ); end ); ## AddAdditiveInverseForMorphisms( vecspaces, function( a ) return VectorSpaceMorphism( Source( a ), - a!.morphism, Range( a ) ); end ); ## AddAdditionForMorphisms( vecspaces, function( a, b ) return VectorSpaceMorphism( Source( a ), a!.morphism + b!.morphism, Range( a ) ); end ); ## Methods needed for FiberProductEmbeddingInDirectSum: ## AddKernelLift( vecspaces, function( mor, test_morphism ) local kernel_emb; kernel_emb := SyzygiesOfRows( mor!.morphism ); return VectorSpaceMorphism( Source( test_morphism ), RightDivide( test_morphism!.morphism, kernel_emb ), Source( kernel_emb ) ); end ); ## Methods needed for DirectSumProjectionInPushout ## AddCokernelObject( vecspaces, function( morphism ) local homalg_matrix; homalg_matrix := morphism!.morphism; return QVectorSpace( NrColumns( homalg_matrix ) - RowRankOfMatrix( homalg_matrix ) ); end ); ## AddCokernelProjectionWithGivenCokernelObject( vecspaces, function( morphism, cokernel ) local cokernel_proj; cokernel_proj := SyzygiesOfColumns( morphism!.morphism ); return VectorSpaceMorphism( Range( morphism ), cokernel_proj, cokernel ); end ); ## AddColiftAlongEpimorphism( vecspaces, function( epimorphism, test_morphism ) return VectorSpaceMorphism( Range( epimorphism ), LeftDivide( epimorphism!.morphism, test_morphism!.morphism ), Range( test_morphism ) ); end ); ## AddUniversalMorphismFromDirectSumWithGivenDirectSum( vecspaces, function( diagram, sink, coproduct ) local components, universal_morphism, morphism; components := sink; universal_morphism := sink[1]!.morphism; for morphism in components{ [ 2 .. Length( components ) ] } do universal_morphism := UnionOfRows( universal_morphism, morphism!.morphism ); od; return VectorSpaceMorphism( coproduct, universal_morphism, Range( sink[1] ) ); end ); ## AddInjectionOfCofactorOfDirectSumWithGivenDirectSum( vecspaces, function( object_product_list, injection_number, coproduct ) local components, dim_pre, dim_post, dim_cofactor, number_of_objects, injection_of_cofactor; components := object_product_list; number_of_objects := Length( components ); dim_pre := Sum( components{ [ 1 .. injection_number - 1 ] }, c -> Dimension( c ) ); dim_post := Sum( components{ [ injection_number + 1 .. number_of_objects ] }, c -> Dimension( c ) ); dim_cofactor := Dimension( object_product_list[ injection_number ] ); injection_of_cofactor := HomalgZeroMatrix( dim_cofactor, dim_pre ,VECTORSPACES_FIELD ); injection_of_cofactor := UnionOfColumns( injection_of_cofactor, HomalgIdentityMatrix( dim_cofactor, VECTORSPACES_FIELD ) ); injection_of_cofactor := UnionOfColumns( injection_of_cofactor, HomalgZeroMatrix( dim_cofactor, dim_post, VECTORSPACES_FIELD ) ); return VectorSpaceMorphism( object_product_list[ injection_number ], injection_of_cofactor, coproduct ); end ); ## AddUniversalMorphismFromDirectSumWithGivenDirectSum( vecspaces, function( diagram, sink, coproduct ) local components, universal_morphism, morphism; components := sink; universal_morphism := sink[1]!.morphism; for morphism in components{ [ 2 .. Length( components ) ] } do universal_morphism := UnionOfRows( universal_morphism, morphism!.morphism ); od; return VectorSpaceMorphism( coproduct, universal_morphism, Range( sink[1] ) ); end );