# SPDX-License-Identifier: GPL-2.0-or-later
# GradedModules: A homalg based package for the Abelian category of finitely presented graded modules over computable graded rings
#
# Implementations
#
## LIGrHOM = Logical Implications for Graded HOMomorphisms
function( psi )
local S, ker, emb, source, target;
S := HomalgRing( psi );
source := Source( psi );
ker := KernelSubobject( UnderlyingMorphismMutable( psi ) );
emb := EmbeddingInSuperObject( ker );
# we have to do this strange case distinction
# even for monomorphisms, the kernel object is not automatically the zero subobject
# this might happen if we compute the kernel before knowing that the morphisms is mono
if HasIsMonomorphism( psi ) and IsMonomorphism( psi ) and
IsIdenticalObj( UnderlyingObject( ker ), UnderlyingObject( UnderlyingModule( ZeroSubobject( source ) ) ) ) then
emb := GradedMap( emb, UnderlyingObject( ZeroSubobject( Source( psi ) ) ), Source( psi ), S );
else
emb := GradedMap( emb, "create", Source( psi ), S );
fi;
if HasIsMorphism( psi ) and IsMorphism( psi ) then
Assert( 4, IsMorphism( emb ) );
SetIsMorphism( emb, true );
fi;
ker := ImageSubobject( emb );
target := Range( psi );
if HasIsEpimorphism( psi ) and IsEpimorphism( psi ) then
SetCokernelEpi( ker, psi );
fi;
if HasRankOfObject( source ) and HasRankOfObject( target ) then
if RankOfObject( target ) = 0 then
SetRankOfObject( ker, RankOfObject( source ) );
fi;
fi;
if HasIsModuleOfGlobalSectionsTruncatedAtCertainDegree( Source( psi ) ) and
IsInt( IsModuleOfGlobalSectionsTruncatedAtCertainDegree( Source( psi ) ) ) and
HasIsModuleOfGlobalSectionsTruncatedAtCertainDegree( Range( psi ) ) and
IsInt( IsModuleOfGlobalSectionsTruncatedAtCertainDegree( Range( psi ) ) ) and
IsModuleOfGlobalSectionsTruncatedAtCertainDegree( Source( psi ) ) = IsModuleOfGlobalSectionsTruncatedAtCertainDegree( Range( psi ) ) then
SetIsModuleOfGlobalSectionsTruncatedAtCertainDegree( UnderlyingObject( ker ), IsModuleOfGlobalSectionsTruncatedAtCertainDegree( Source( psi ) ) );
fi;
for i in [ 1 .. Length( degs ) ] do
for j in [ 1 .. Length( degt ) ] do
if IsHomalgLeftObjectOrMorphismOfLeftObjects( phi ) then
if not ( degs[i] = deg[i][j] + degt[j] ) then
if not IsBound( nonzero ) then
nonzero := IndicatorMatrixOfNonZeroEntries( mat );
fi;
if nonzero[i][j] <> 0 then
return false;
fi;
fi;
else
if not ( degs[i] = deg[j][i] + degt[j] ) then
if not IsBound( nonzero ) then
nonzero := IndicatorMatrixOfNonZeroEntries( mat );
fi;
if nonzero[j][i] <> 0 then
return false;
fi;
fi;
fi;
od;
od;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.