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: 418346############################################################################# ## ## UnderlyingModule.gi GradedModules package ## ## Copyright 2010-2011, Mohamed Barakat, University of Kaiserslautern ## Markus Lange-Hegermann, RWTH Aachen ## ## Implementation stuff ## ############################################################################# ## InstallMethod( TheMorphismToZero, "for homalg graded modules", [ IsGradedModuleRep ], function( M ) local zero; if IsHomalgLeftObjectOrMorphismOfLeftObjects( M ) then zero := GradedMap( TheMorphismToZero( UnderlyingModule( M ) ), M, 0 * HomalgRing( M ), HomalgRing( M ) ); else zero := GradedMap( TheMorphismToZero( UnderlyingModule( M ) ), M, HomalgRing( M ) * 0, HomalgRing( M ) ); fi; Assert( 4, IsMorphism( zero ) ); SetIsMorphism( zero, true ); return zero; end ); ## InstallMethod( PositionOfTheDefaultPresentation, "for homalg graded modules", [ IsGradedModuleRep ], function( M ) return PositionOfTheDefaultPresentation( UnderlyingModule( M ) ); end ); ## InstallMethod( SetPositionOfTheDefaultPresentation, "for homalg graded modules", [ IsGradedModuleRep, IsInt ], function( M, p ) SetPositionOfTheDefaultPresentation( UnderlyingModule( M ), p ); end ); ## InstallMethod( PositionOfTheDefaultSetOfGenerators, "for homalg graded modules", [ IsGradedSubmoduleRep ], function( M ) return PositionOfTheDefaultSetOfGenerators( UnderlyingModule( M ) ); end ); ## InstallMethod( SetPositionOfTheDefaultSetOfGenerators, "for homalg graded modules", [ IsGradedSubmoduleRep, IsInt ], function( M, p ) SetPositionOfTheDefaultSetOfGenerators( UnderlyingModule( M ), p ); end ); ## InstallMethod( HasNrGenerators, "for homalg graded modules", [ IsGradedModuleRep ], function( M ) return HasNrGenerators( UnderlyingModule( M ) ); end ); InstallMethod( NrGenerators, "for homalg graded modules", [ IsGradedModuleRep ], function( M ) return NrGenerators( UnderlyingModule( M ) ); end ); InstallMethod( HasNrGenerators, "for homalg graded modules", [ IsGradedModuleRep, IsPosInt ], function( M, a ) return HasNrGenerators( UnderlyingModule( M ), a ); end ); InstallMethod( NrGenerators, "for homalg graded modules", [ IsGradedModuleRep, IsPosInt ], function( M, a ) return NrGenerators( UnderlyingModule( M ), a ); end ); InstallMethod( CertainGenerators, "for homalg graded modules", [ IsGradedModuleRep, IsList ], function( M, a ) return CertainGenerators( UnderlyingModule( M ), a ); end ); InstallMethod( CertainGenerator, "for homalg graded modules", [ IsGradedModuleRep, IsPosInt ], function( M, a ) return CertainGenerator( UnderlyingModule( M ), a ); end ); InstallMethod( HasNrRelations, "for homalg graded modules", [ IsGradedModuleRep ], function( M ) return HasNrGenerators( UnderlyingModule( M ) ); end ); InstallMethod( NrRelations, "for homalg graded modules", [ IsGradedModuleRep ], function( M ) return NrRelations( UnderlyingModule( M ) ); end ); InstallMethod( HasNrRelations, "for homalg graded modules", [ IsGradedModuleRep, IsPosInt ], function( M, a ) return HasNrRelations( UnderlyingModule( M ), a ); end ); ## InstallMethod( NrRelations, "for homalg graded modules", [ IsGradedModuleRep, IsPosInt ], function( M, a ) return NrGenerators( UnderlyingModule( M ), a ); end ); ## InstallMethod( OnBasisOfPresentation, "for homalg graded modules", [ IsGradedModuleRep ], function( M ) OnBasisOfPresentation( UnderlyingModule( M ) ); return M; end ); ## InstallMethod( OnLessGenerators, "for homalg graded modules", [ IsGradedModuleRep ], function( M ) OnLessGenerators( UnderlyingModule( M ) ); return M; end ); ## InstallMethod( ByASmallerPresentation, "for homalg graded modules", [ IsGradedModuleRep ], function( M ) local N; N := UnderlyingModule( M ); ByASmallerPresentation( N ); ## the graded version of Nakayama's Lemma SetIsFree( N, NrRelations( N ) = 0 ); return M; end ); ## InstallMethod( SetsOfGenerators, "for homalg graded modules", [ IsGradedModuleOrGradedSubmoduleRep ], function( M ) return SetsOfGenerators( UnderlyingModule( M ) ); end ); ## InstallMethod( SetsOfRelations, "for homalg graded modules", [ IsGradedModuleOrGradedSubmoduleRep ], function( M ) return SetsOfRelations( UnderlyingModule( M ) ); end ); ## InstallMethod( ListOfPositionsOfKnownSetsOfRelations, "for homalg modules", [ IsGradedModuleRep ], function( M ) return ListOfPositionsOfKnownSetsOfRelations( UnderlyingModule( M ) ); end ); ## InstallMethod( GeneratorsOfModule, "for homalg graded modules", [ IsGradedModuleOrGradedSubmoduleRep ], function( M ) return GeneratorsOfModule( UnderlyingModule( M ) ); end ); ## InstallMethod( RelationsOfModule, "for homalg graded modules", [ IsGradedModuleRep ], function( M ) return RelationsOfModule( UnderlyingModule( M ) ); end ); ## InstallMethod( GeneratorsOfModule, "for homalg graded modules", [ IsGradedModuleOrGradedSubmoduleRep, IsPosInt ], function( M, pos ) return GeneratorsOfModule( UnderlyingModule( M ), pos ); end ); ## InstallMethod( RelationsOfModule, "for homalg graded modules", [ IsGradedModuleRep, IsPosInt ], function( M, pos ) return RelationsOfModule( UnderlyingModule( M ), pos ); end ); ## InstallMethod( MatrixOfGenerators, "for homalg graded modules", [ IsGradedModuleOrGradedSubmoduleRep ], function( M ) return MatrixOverGradedRing( MatrixOfGenerators( UnderlyingModule( M ) ), HomalgRing( M ) ); end ); InstallMethod( MatrixOfGenerators, "for homalg graded modules", [ IsGradedModuleOrGradedSubmoduleRep and HasUnderlyingSubobject ], function( M ) local N, S, mat; N := SuperObject( UnderlyingSubobject( M ) ); if not HasEmbeddingOfSubmoduleGeneratedByHomogeneousPart( N ) then TryNextMethod( ); fi; S := HomalgRing( EmbeddingOfSubmoduleGeneratedByHomogeneousPart( N ) ); mat := MatrixOfGenerators( UnderlyingModule( M ) ); return MatrixOverGradedRing( mat, S ); end ); ## InstallMethod( MatrixOfGenerators, "for homalg graded modules", [ IsGradedModuleOrGradedSubmoduleRep and HasEmbeddingOfSubmoduleGeneratedByHomogeneousPart ], function( M ) local S, mat; S := HomalgRing( EmbeddingOfSubmoduleGeneratedByHomogeneousPart( M ) ); mat := MatrixOfGenerators( UnderlyingModule( M ) ); return MatrixOverGradedRing( mat, S ); end ); ## InstallMethod( MatrixOfGenerators, "for homalg graded modules", [ IsGradedModuleOrGradedSubmoduleRep and HasEmbeddingOfTruncatedModuleInSuperModule ], function( M ) return MatrixOverGradedRing( MatrixOfGenerators( UnderlyingModule( M ) ), HomalgRing( Range( EmbeddingOfTruncatedModuleInSuperModule( M ) ) ) ); end ); ## InstallMethod( MatrixOfRelations, "for homalg graded modules", [ IsGradedModuleRep ], function( M ) return MatrixOverGradedRing( MatrixOfRelations( UnderlyingModule( M ) ), HomalgRing( M ) ); end ); ## InstallMethod( MatrixOfGenerators, "for homalg graded modules", [ IsGradedModuleOrGradedSubmoduleRep, IsPosInt ], function( M, pos ) return MatrixOverGradedRing( MatrixOfGenerators( UnderlyingModule( M ), pos ), HomalgRing( M ) ); end ); ## InstallMethod( MatrixOfRelations, "for homalg graded modules", [ IsGradedModuleRep, IsPosInt ], function( M, pos ) return MatrixOverGradedRing( MatrixOfRelations( UnderlyingModule( M ), pos ), HomalgRing( M ) ); end ); ## InstallMethod( TransitionMatrix, "for homalg graded modules", [ IsGradedModuleRep, IsInt, IsInt ], function( M, pos1, pos2 ) return MatrixOverGradedRing( TransitionMatrix( UnderlyingModule( M ), pos1, pos2 ), HomalgRing( M ) ); end ); ## InstallMethod( SyzygiesGenerators, "for homalg graded modules", [ IsGradedModuleOrGradedSubmoduleRep ], function( M ) return SyzygiesGenerators( UnderlyingModule( M ) ); end ); ## InstallMethod( SyzygiesGenerators, "for homalg graded modules", [ IsHomalgMatrix, IsGradedModuleOrGradedSubmoduleRep ], function( A, M ) return SyzygiesGenerators( A, UnderlyingModule( M ) ); end ); ## InstallMethod( SyzygiesGenerators, "for homalg graded modules", [ IsHomalgMatrixOverGradedRingRep, IsGradedModuleOrGradedSubmoduleRep ], function( A, M ) return SyzygiesGenerators( UnderlyingMatrixOverNonGradedRing( A ), M ); end ); ## InstallMethod( ReducedSyzygiesGenerators, "for homalg graded modules", [ IsGradedModuleOrGradedSubmoduleRep ], function( M ) return ReducedSyzygiesGenerators( UnderlyingModule( M ) ); end ); ## InstallMethod( ReducedSyzygiesGenerators, "for homalg graded modules", [ IsHomalgMatrix, IsGradedModuleOrGradedSubmoduleRep ], function( A, M ) return ReducedSyzygiesGenerators( A, UnderlyingModule( M ) ); end ); ## InstallMethod( ReducedSyzygiesGenerators, "for homalg graded modules", [ IsHomalgMatrixOverGradedRingRep, IsGradedModuleOrGradedSubmoduleRep ], function( A, M ) return ReducedSyzygiesGenerators( UnderlyingMatrixOverNonGradedRing( A ), M ); end ); ## InstallMethod( BasisOfModule, "for homalg graded modules", [ IsGradedModuleOrGradedSubmoduleRep ], function( M ) return BasisOfModule( UnderlyingModule( M ) ); end ); ## InstallMethod( DecideZero, "for homalg graded modules", [ IsGradedModuleOrGradedSubmoduleRep ], function( M ) return DecideZero( UnderlyingModule( M ) ); end ); ## InstallMethod( DecideZero, "for homalg graded modules", [ IsGradedModuleOrGradedSubmoduleRep ], function( M ) return DecideZero( UnderlyingModule( M ) ); end ); ## InstallMethod( DecideZero, "for homalg graded modules", [ IsHomalgMatrix, IsGradedModuleOrGradedSubmoduleRep ], function( A, M ) return MatrixOverGradedRing( DecideZero( A, UnderlyingModule( M ) ), HomalgRing( M ) ); end ); ## InstallMethod( DecideZero, "for homalg graded modules", [ IsHomalgMatrixOverGradedRingRep, IsGradedModuleOrGradedSubmoduleRep ], function( A, M ) return MatrixOverGradedRing( DecideZero( UnderlyingMatrixOverNonGradedRing( A ), UnderlyingModule( M ) ), HomalgRing( M ) ); end ); ## InstallMethod( IsZero, "for homalg graded modules and submodules", [ IsGradedModuleOrGradedSubmoduleRep ], function( M ) return IsZero( UnderlyingModule( M ) ); end ); ## InstallMethod( UnionOfRelations, "for homalg graded modules", [ IsHomalgMatrixOverGradedRingRep, IsGradedModuleRep ], function( A, M ) return UnionOfRelations( UnderlyingMatrixOverNonGradedRing( A ), UnderlyingModule( M ) ); end ); ## InstallMethod( UnionOfRelations, "for homalg graded modules", [ IsHomalgMatrix, IsGradedModuleRep ], function( A, M ) return UnionOfRelations( A, UnderlyingModule( M ) ); end ); ## InstallMethod( AnIsomorphism, "for homalg graded modules", [ IsGradedModuleRep ], function( M ) local psi; psi := GradedMap( AnIsomorphism( UnderlyingModule( M ) ), "create", M ); Assert( 4, IsIsomorphism( psi ) ); SetIsIsomorphism( psi, true ); UpdateObjectsByMorphism( psi ); return psi; end ); ## InstallMethod( TheIdentityMorphism, "for homalg graded modules", [ IsGradedModuleRep ], function( M ) local psi; psi := GradedMap( TheIdentityMorphism( UnderlyingModule( M ) ), M, M ); Assert( 4, IsIsomorphism( psi ) ); SetIsIsomorphism( psi, true ); return psi; end ); ## InstallMethod( LockObjectOnCertainPresentation, "for homalg graded modules", [ IsGradedModuleRep, IsInt ], function( M, p ) LockObjectOnCertainPresentation( UnderlyingModule( M ), p ); end ); ## InstallMethod( LockObjectOnCertainPresentation, "for homalg graded modules", [ IsGradedModuleRep ], function( M ) LockObjectOnCertainPresentation( UnderlyingModule( M ) ); end ); ## InstallMethod( IsSubset, "for homalg graded submodules", [ IsHomalgModule, IsGradedSubmoduleRep ], function( K, J ) ## GAP-standard: is J a subset of K return IsSubset( UnderlyingModule( K ), UnderlyingModule( J ) ); end ); ## InstallMethod( Intersect2, "for homalg graded submodules", [ IsGradedSubmoduleRep, IsGradedSubmoduleRep ], function( K, J ) local M, int, map; M := SuperObject( J ); if not IsIdenticalObj( M, SuperObject( K ) ) then Error( "the super objects must coincide\n" ); fi; int := Intersect2( UnderlyingModule( K ), UnderlyingModule( J ) ); map := GradedMap( int!.map_having_subobject_as_its_image, "create", M ); Assert( 4, IsMorphism( map ) ); SetIsMorphism( map, true ); return ImageSubobject( map ); end ); InstallOtherMethod( SubobjectQuotient, "for homalg submodules", [ IsGradedSubmoduleRep, IsGradedSubmoduleRep ], function( K, J ) local result; result := SubobjectQuotient( UnderlyingModule( K ), UnderlyingModule( J ) ); result := GradedMap( result!.map_having_subobject_as_its_image, "create", SuperObject( K ) ); Assert( 4, IsMorphism( result ) ); SetIsMorphism( result, true ); return ImageSubobject( result ); end );