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############################################################################# ## ## LIMAP.gi LIMAP subpackage Mohamed Barakat ## ## LIMAP = Logical Implications for homalg ring MAPs ## ## Copyright 2009, Mohamed Barakat, Universität des Saarlandes ## ## Implementation stuff for the LIMAP subpackage. ## ############################################################################# #################################### # # representations: # #################################### #################################### # # methods for properties: # #################################### ## InstallMethod( IsMonomorphism, "LIMAP: for homalg ring maps", [ IsHomalgRingMapRep ], function( phi ) return IsMorphism( phi ) and IsZero( Kernel( phi ) ); end ); #################################### # # methods for attributes: # #################################### ## InstallMethod( KernelSubobject, "for homalg ring maps", [ IsHomalgRingMap ], function( phi ) local G, S, T, indetsS, indetsT, rel; G := CoordinateRingOfGraph( phi ); S := Source( phi ); T := Range( phi ); indetsT := G!.indetsT; rel := RingRelations( G ); rel := MatrixOfRelations( rel ); rel := Eliminate( rel, indetsT ); rel := S * rel; if IsBound( phi!.left ) and phi!.left = false then S := S * 1; else S := 1 * S; ## the default fi; return Subobject( rel, S ); end ); ## InstallMethod( KernelSubobject, "for homalg ring maps", [ IsHomalgRingMap ], function( phi ) local T, mat, indetsT, lT, S, indetsS, lS, imgs, elim, zero, indets, iota; T := Range( phi ); if HasRingRelations( T ) then mat := MatrixOfRelations( T ); T := AmbientRing( T ); else mat := HomalgZeroMatrix( 0, 1, T ); fi; indetsT := Indeterminates( T ); lT := Length( indetsT ); S := Source( phi ); indetsS := Indeterminates( S ); lS := Length( indetsS ); imgs := ImagesOfRingMap( phi ); elim := Difference( indetsT, imgs ); if not Length( elim ) = lT - lS then TryNextMethod( ); fi; mat := Eliminate( mat, elim ); ## computing a basis might be expensive (delaying the output) ## so leave it to the user or the next procedure #mat := BasisOfRows( mat ); zero := Zero( S ); indets := ListWithIdenticalEntries( lT, zero ); imgs := PositionsProperty( indetsT, a -> a in imgs ); indets{imgs} := indetsS; iota := RingMap( indets, T, S ); mat := Pullback( iota, mat ); if IsBound( phi!.left ) and phi!.left = false then S := S * 1; else S := 1 * S; ## the default fi; return Subobject( mat, S ); end ); ## InstallMethod( KernelEmb, "for homalg ring maps", [ IsHomalgRingMap ], function( phi ) return EmbeddingInSuperObject( KernelSubobject( phi ) ); end ); ## InstallMethod( IdealContainedInKernelViaEliminateOverBaseRing, [ IsHomalgRingMap ], function( phi ) local T, mat, indetsT, lT, S, indetsS, lS, imgs, elim, zero, indets, iota; T := Range( phi ); mat := MatrixOfRelations( T ); T := AmbientRing( T ); indetsT := Indeterminates( T ); lT := Length( indetsT ); S := Source( phi ); indetsS := Indeterminates( S ); lS := Length( indetsS ); imgs := ImagesOfRingMap( phi ); elim := Difference( indetsT, imgs ); if not Length( elim ) = lT - lS then Error( imgs, " is not a sublist of ", indetsT, "\n" ); fi; mat := EliminateOverBaseRing( mat, elim ); ## computing a basis might be expensive (delaying the output) ## so leave it to the user or the next procedure #mat := BasisOfRows( mat ); zero := Zero( S ); indets := ListWithIdenticalEntries( lT, zero ); imgs := PositionsProperty( indetsT, a -> a in imgs ); indets{imgs} := indetsS; iota := RingMap( indets, T, S ); mat := Pullback( iota, mat ); if IsBound( phi!.left ) and phi!.left = false then S := S * 1; else S := 1 * S; ## the default fi; return Subobject( mat, S ); end ); #################################### # # methods for operations: # #################################### ## InstallMethod( ImagesOfRingMap, "for homalg ring maps", [ IsHomalgRingMap ], function( phi ) return phi!.images; end ); ## <#GAPDoc Label="Kernel:ringmap"> ## <ManSection> ## <Meth Arg="phi" Name="Kernel" Label="for ring maps"/> ## <Returns>a &homalg; module</Returns> ## <Description> ## The kernel ideal of the ring map <A>phi</A> as an abstract module. ## </Description> ## </ManSection> ## <#/GAPDoc> ## InstallMethod( Kernel, "for homalg ring maps", [ IsHomalgRingMap ], function( phi ) return UnderlyingObject( KernelSubobject( phi ) ); end );