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############################################################################# ## ## UnderlyingMap.gi ## ## Copyright 2010, Mohamed Barakat, University of Kaiserslautern ## Markus Lange-Hegermann, RWTH Aachen ## ## Implementation stuff ## ############################################################################# ## InstallMethod( PositionOfTheDefaultPresentation, "for homalg graded modules", [ IsMapOfGradedModulesRep ], function( psi ) return PairOfPositionsOfTheDefaultPresentations( psi ); # return PositionOfTheDefaultPresentation( UnderlyingMorphism( psi ) ); end ); ## InstallMethod( PairOfPositionsOfTheDefaultPresentations, "for homalg graded modules", [ IsMapOfGradedModulesRep ], function( psi ) return PairOfPositionsOfTheDefaultPresentations( UnderlyingMorphism( psi ) ); end ); ## InstallMethod( MatrixOfMap, "for homalg graded module maps", [ IsMapOfGradedModulesRep ], function( phi ) return MatrixOverGradedRing( MatrixOfMap( UnderlyingMorphism( phi ) ), HomalgRing( phi ) ); end ); ## InstallMethod( MatrixOfMap, "for homalg graded module maps", [ IsMapOfGradedModulesRep, IsInt, IsInt ], function( phi, pos_s, pos_t ) return MatrixOverGradedRing( MatrixOfMap( UnderlyingMorphism( phi ), pos_s, pos_t ), HomalgRing( phi ) ); end ); ## InstallMethod( DecideZero, "for homalg graded module maps", [ IsMapOfGradedModulesRep ], function( phi ) DecideZero( UnderlyingMorphism( phi ) ); return phi; end ); ## InstallMethod( SyzygiesGenerators, "for homalg graded maps", [ IsMapOfGradedModulesRep ], function( phi ) local syz; syz := SyzygiesGenerators( UnderlyingMorphism( phi ) ); if NrRelations( syz ) = 0 then SetIsMonomorphism( phi, true ); fi; return syz; end ); ## InstallMethod( ReducedSyzygiesGenerators, "for homalg graded maps", [ IsMapOfGradedModulesRep ], function( phi ) local syz; syz := ReducedSyzygiesGenerators( UnderlyingMorphism( phi ) ); if NrRelations( syz ) = 0 then SetIsMonomorphism( phi, true ); fi; return syz; end ); ## InstallMethod( PostInverse, "for homalg graded maps", [ IsMapOfGradedModulesRep ], function( phi ) local inv, inv2; inv := PostInverse( UnderlyingMorphism( phi ) ); if IsHomalgMap( inv ) then inv2 := GradedMap( inv, Range( phi ), Source( phi ) ); if HasIsMorphism( phi ) and IsMorphism( phi ) and HasIsMorphism( inv ) and IsMorphism( inv ) then Assert( 4, IsMorphism( inv2 ) ); SetIsMorphism( inv2, true ); fi; elif IsBool(inv) then inv2 := inv; else Error( "unknown return value from PostInverse" ); fi; return inv2; end ); ## InstallMethod( OnAFreeSource, "for homalg graded maps", [ IsMapOfGradedModulesRep ], function( phi ) local psi; psi := GradedMap( OnAFreeSource( UnderlyingMorphism( phi ) ), "create", Range( phi ) ); if HasIsMorphism( phi ) and IsMorphism( phi ) then Assert( 4, IsMorphism( psi ) ); SetIsMorphism( psi, true ); fi; return psi; end ); ## InstallMethod( RemoveMorphismAid, "for homalg graded maps", [ IsMapOfGradedModulesRep ], function( phi ) local psi2, psi; psi2 := RemoveMorphismAid( UnderlyingMorphism( phi ) ); psi := GradedMap( psi2, Source( phi ), Range( phi ) ); if HasIsMorphism( phi ) and IsMorphism( phi ) and HasIsMorphism( psi2 ) and IsMorphism( psi2 ) then Assert( 4, IsMorphism( psi ) ); SetIsMorphism( psi, true ); fi; if HasIsEpimorphism( phi ) then SetIsEpimorphism( psi, IsEpimorphism( phi ) ); fi; return psi; end ); ## InstallMethod( AddToMorphismAid, "for homalg maps", [ IsMapOfGradedModulesRep, IsObject ], function( phi, morphism_aid_map ) local morphism_aid_map1, morphism_aid_map0; if not IsMapOfGradedModulesRep( morphism_aid_map ) then return phi; fi; if not IsIdenticalObj( Range( phi ), Range( morphism_aid_map ) ) then Error( "the targets of the two morphisms must coincide\n" ); fi; ## we don't need the source of the new morphism aid map morphism_aid_map1 := OnAFreeSource( morphism_aid_map ); if HasMorphismAid( phi ) then ## we don't need the source of the old morphism aid map morphism_aid_map0 := OnAFreeSource( MorphismAid( phi ) ); morphism_aid_map1 := CoproductMorphism( morphism_aid_map0, morphism_aid_map1 ); fi; return GeneralizedMorphism( phi, morphism_aid_map1 ); end ); ## InstallMethod( GeneralizedMorphism, "for homalg graded maps", [ IsMapOfGradedModulesRep, IsObject ], function( phi, morphism_aid_map ) local psi; if not IsMapOfGradedModulesRep( morphism_aid_map ) and not ( IsList( morphism_aid_map ) and Length( morphism_aid_map ) = 1 and IsHomalgMap( morphism_aid_map[1] ) ) then return phi; fi; if not IsList( morphism_aid_map ) and not IsIdenticalObj( Range( phi ), Range( morphism_aid_map ) ) then Error( "the targets of the two morphisms must coincide or the target of the morphism must be source of its aid\n" ); fi; if IsList( morphism_aid_map ) then psi := GeneralizedMorphism( UnderlyingMorphism( phi ), [ UnderlyingMorphism( morphism_aid_map[1] ) ] ); else psi := GeneralizedMorphism( UnderlyingMorphism( phi ), UnderlyingMorphism( morphism_aid_map ) ); fi; psi := GradedMap( psi, Source( phi ), Range( phi ) ); ## some properties of the morphism phi imply ## properties for the generalized morphism psi SetPropertiesOfGeneralizedMorphism( psi, phi ); return psi; end ); ## InstallMethod( PostInverse, "for homalg graded maps", [ IsMapOfGradedModulesRep and IsMonomorphism ], function( phi ) local result; if IsBound( phi!.PostInverse ) then return phi!.PostInverse; fi; result := PostInverse( UnderlyingMorphism( phi ) ); if result = fail or result = false then return result; fi; result := GradedMap( result, Range( phi ), Source( phi ) ); if HasIsMorphism( phi ) and IsMorphism( phi ) then Assert( 4, IsMorphism( result ) ); SetIsMorphism( result, true ); fi; phi!.PostInverse := result; return result; end ); ## InstallMethod( PreInverse, "for homalg graded maps", [ IsMapOfGradedModulesRep and IsEpimorphism ], function( phi ) local result; if IsBound( phi!.PreInverse ) then return phi!.PreInverse; fi; result := PreInverse( UnderlyingMorphism( phi ) ); if result = fail or result = false then return result; fi; result := GradedMap( result, Range( phi ), Source( phi ) ); if HasIsMorphism( phi ) and IsMorphism( phi ) then Assert( 4, IsMorphism( result ) ); SetIsMorphism( result, true ); fi; phi!.PreInverse := result; return result; end );