D The subpackage ResidueClassRingForHomalg as a sample ring package
D.1 The Mandatory Basic Operations
D.1-1 BasisOfRowModule
> BasisOfRowModule ( M ) | ( function ) |
Returns: a homalg matrix over the ambient ring
BasisOfRowModule :=
function( M )
local Mrel;
Mrel := UnionOfRows( M );
Mrel := HomalgResidueClassMatrix(
BasisOfRowModule( Mrel ), HomalgRing( M ) );
return GetRidOfObsoleteRows( Mrel );
end,
|
D.1-2 BasisOfColumnModule
> BasisOfColumnModule ( M ) | ( function ) |
Returns: a homalg matrix over the ambient ring
BasisOfColumnModule :=
function( M )
local Mrel;
Mrel := UnionOfColumns( M );
Mrel := HomalgResidueClassMatrix(
BasisOfColumnModule( Mrel ), HomalgRing( M ) );
return GetRidOfObsoleteColumns( Mrel );
end,
|
D.1-3 DecideZeroRows
> DecideZeroRows ( A, B ) | ( function ) |
Returns: a homalg matrix over the ambient ring
DecideZeroRows :=
function( A, B )
local Brel;
Brel := UnionOfRows( B );
Brel := BasisOfRowModule( Brel );
return HomalgResidueClassMatrix(
DecideZeroRows( Eval( A ), Brel ), HomalgRing( A ) );
end,
|
D.1-4 DecideZeroColumns
> DecideZeroColumns ( A, B ) | ( function ) |
Returns: a homalg matrix over the ambient ring
DecideZeroColumns :=
function( A, B )
local Brel;
Brel := UnionOfColumns( B );
Brel := BasisOfColumnModule( Brel );
return HomalgResidueClassMatrix(
DecideZeroColumns( Eval( A ), Brel ), HomalgRing( A ) );
end,
|
D.1-5 SyzygiesGeneratorsOfRows
> SyzygiesGeneratorsOfRows ( M ) | ( function ) |
Returns: a homalg matrix over the ambient ring
SyzygiesGeneratorsOfRows :=
function( M )
local R, ring_rel, rel, S;
R := HomalgRing( M );
ring_rel := RingRelations( R );
rel := MatrixOfRelations( ring_rel );
if IsHomalgRingRelationsAsGeneratorsOfRightIdeal( ring_rel ) then
rel := Involution( rel );
fi;
rel := DiagMat( ListWithIdenticalEntries( NrColumns( M ), rel ) );
S := SyzygiesGeneratorsOfRows( Eval( M ), rel );
S := HomalgResidueClassMatrix( S, R );
S := GetRidOfObsoleteRows( S );
if IsZero( S ) then
SetIsLeftRegularMatrix( M, true );
fi;
return S;
end,
|
D.1-6 SyzygiesGeneratorsOfColumns
> SyzygiesGeneratorsOfColumns ( M ) | ( function ) |
Returns: a homalg matrix over the ambient ring
SyzygiesGeneratorsOfColumns :=
function( M )
local R, ring_rel, rel, S;
R := HomalgRing( M );
ring_rel := RingRelations( R );
rel := MatrixOfRelations( ring_rel );
if IsHomalgRingRelationsAsGeneratorsOfLeftIdeal( ring_rel ) then
rel := Involution( rel );
fi;
rel := DiagMat( ListWithIdenticalEntries( NrRows( M ), rel ) );
S := SyzygiesGeneratorsOfColumns( Eval( M ), rel );
S := HomalgResidueClassMatrix( S, R );
S := GetRidOfObsoleteColumns( S );
if IsZero( S ) then
SetIsRightRegularMatrix( M, true );
fi;
return S;
end,
|
D.1-7 BasisOfRowsCoeff
> BasisOfRowsCoeff ( M, T ) | ( function ) |
Returns: a homalg matrix over the ambient ring
BasisOfRowsCoeff :=
function( M, T )
local Mrel, TT, bas;
Mrel := UnionOfRows( M );
TT := HomalgVoidMatrix( HomalgRing( Mrel ) );
bas := BasisOfRowsCoeff( Mrel, TT );
SetEval( T, CertainColumns( TT, [ 1 .. NrRows( M ) ] ) );
ResetFilterObj( T, IsVoidMatrix );
## FIXME: GetRidOfObsoleteRows and correct T
return HomalgResidueClassMatrix( bas, HomalgRing( M ) );
end,
|
D.1-8 BasisOfColumnsCoeff
> BasisOfColumnsCoeff ( M, T ) | ( function ) |
Returns: a homalg matrix over the ambient ring
BasisOfColumnsCoeff :=
function( M, T )
local Mrel, TT, bas;
Mrel := UnionOfColumns( M );
TT := HomalgVoidMatrix( HomalgRing( Mrel ) );
bas := BasisOfColumnsCoeff( Mrel, TT );
SetEval( T, CertainRows( TT, [ 1 .. NrColumns( M ) ] ) );
ResetFilterObj( T, IsVoidMatrix );
## FIXME: GetRidOfObsoleteColumns and correct T
return HomalgResidueClassMatrix( bas, HomalgRing( M ) );
end,
|
D.1-9 DecideZeroRowsEffectively
> DecideZeroRowsEffectively ( A, B, T ) | ( function ) |
Returns: a homalg matrix over the ambient ring
DecideZeroRowsEffectively :=
function( A, B, T )
local Brel, TT, red;
Brel := UnionOfRows( B );
TT := HomalgVoidMatrix( HomalgRing( Brel ) );
red := DecideZeroRowsEffectively( Eval( A ), Brel, TT );
SetEval( T, CertainColumns( TT, [ 1 .. NrRows( B ) ] ) );
ResetFilterObj( T, IsVoidMatrix );
return HomalgResidueClassMatrix( red, HomalgRing( A ) );
end,
|
D.1-10 DecideZeroColumnsEffectively
> DecideZeroColumnsEffectively ( A, B, T ) | ( function ) |
Returns: a homalg matrix over the ambient ring
DecideZeroColumnsEffectively :=
function( A, B, T )
local Brel, TT, red;
Brel := UnionOfColumns( B );
TT := HomalgVoidMatrix( HomalgRing( Brel ) );
red := DecideZeroColumnsEffectively( Eval( A ), Brel, TT );
SetEval( T, CertainRows( TT, [ 1 .. NrColumns( B ) ] ) );
ResetFilterObj( T, IsVoidMatrix );
return HomalgResidueClassMatrix( red, HomalgRing( A ) );
end,
|
D.1-11 RelativeSyzygiesGeneratorsOfRows
> RelativeSyzygiesGeneratorsOfRows ( M, M2 ) | ( function ) |
Returns: a homalg matrix over the ambient ring
RelativeSyzygiesGeneratorsOfRows :=
function( M, M2 )
local M2rel, S;
M2rel := UnionOfRows( M2 );
S := SyzygiesGeneratorsOfRows( Eval( M ), M2rel );
S := HomalgResidueClassMatrix( S, HomalgRing( M ) );
S := GetRidOfObsoleteRows( S );
if IsZero( S ) then
SetIsLeftRegularMatrix( M, true );
fi;
return S;
end,
|
D.1-12 RelativeSyzygiesGeneratorsOfColumns
> RelativeSyzygiesGeneratorsOfColumns ( M, M2 ) | ( function ) |
Returns: a homalg matrix over the ambient ring
RelativeSyzygiesGeneratorsOfColumns :=
function( M, M2 )
local M2rel, S;
M2rel := UnionOfColumns( M2 );
S := SyzygiesGeneratorsOfColumns( Eval( M ), M2rel );
S := HomalgResidueClassMatrix( S, HomalgRing( M ) );
S := GetRidOfObsoleteColumns( S );
if IsZero( S ) then
SetIsRightRegularMatrix( M, true );
fi;
return S;
end,
|
D.2 The Mandatory Tool Operations
Here we list those matrix operations for which homalg provides no fallback method.
D.2-1 InitialMatrix
> InitialMatrix ( ) | ( function ) |
Returns: a homalg matrix over the ambient ring
(--> InitialMatrix
(B.1-1))
InitialMatrix := C -> HomalgInitialMatrix(
NrRows( C ), NrColumns( C ), AmbientRing( HomalgRing( C ) ) ),
|
D.2-2 InitialIdentityMatrix
> InitialIdentityMatrix ( ) | ( function ) |
Returns: a homalg matrix over the ambient ring
(--> InitialIdentityMatrix
(B.1-2))
InitialIdentityMatrix := C -> HomalgInitialIdentityMatrix(
NrRows( C ), AmbientRing( HomalgRing( C ) ) ),
|
D.2-3 ZeroMatrix
> ZeroMatrix ( ) | ( function ) |
Returns: a homalg matrix over the ambient ring
(--> ZeroMatrix
(B.1-3))
ZeroMatrix := C -> HomalgZeroMatrix(
NrRows( C ), NrColumns( C ), AmbientRing( HomalgRing( C ) ) ),
|
D.2-4 IdentityMatrix
> IdentityMatrix ( ) | ( function ) |
Returns: a homalg matrix over the ambient ring
(--> IdentityMatrix
(B.1-4))
IdentityMatrix := C -> HomalgIdentityMatrix(
NrRows( C ), AmbientRing( HomalgRing( C ) ) ),
|
D.2-5 Involution
> Involution ( ) | ( function ) |
Returns: a homalg matrix over the ambient ring
(--> Involution
(B.1-5))
Involution :=
function( M )
local N, R;
N := Involution( Eval( M ) );
R := HomalgRing( N );
if not ( HasIsCommutative( R ) and IsCommutative( R ) and
HasIsReducedModuloRingRelations( M ) and
IsReducedModuloRingRelations( M ) ) then
## reduce the matrix N w.r.t. the ring relations
N := DecideZero( N, HomalgRing( M ) );
fi;
return N;
end,
|
D.2-6 CertainRows
> CertainRows ( ) | ( function ) |
Returns: a homalg matrix over the ambient ring
(--> CertainRows
(B.1-6))
CertainRows :=
function( M, plist )
local N;
N := CertainRows( Eval( M ), plist );
if not ( HasIsReducedModuloRingRelations( M ) and
IsReducedModuloRingRelations( M ) ) then
## reduce the matrix N w.r.t. the ring relations
N := DecideZero( N, HomalgRing( M ) );
fi;
return N;
end,
|
D.2-7 CertainColumns
> CertainColumns ( ) | ( function ) |
Returns: a homalg matrix over the ambient ring
(--> CertainColumns
(B.1-7))
CertainColumns :=
function( M, plist )
local N;
N := CertainColumns( Eval( M ), plist );
if not ( HasIsReducedModuloRingRelations( M ) and
IsReducedModuloRingRelations( M ) ) then
## reduce the matrix N w.r.t. the ring relations
N := DecideZero( N, HomalgRing( M ) );
fi;
return N;
end,
|
D.2-8 UnionOfRows
> UnionOfRows ( ) | ( function ) |
Returns: a homalg matrix over the ambient ring
(--> UnionOfRows
(B.1-8))
UnionOfRows :=
function( A, B )
local N;
N := UnionOfRows( Eval( A ), Eval( B ) );
if not ForAll( [ A, B ], HasIsReducedModuloRingRelations and
IsReducedModuloRingRelations ) then
## reduce the matrix N w.r.t. the ring relations
N := DecideZero( N, HomalgRing( A ) );
fi;
return N;
end,
|
D.2-9 UnionOfColumns
> UnionOfColumns ( ) | ( function ) |
Returns: a homalg matrix over the ambient ring
(--> UnionOfColumns
(B.1-9))
UnionOfColumns :=
function( A, B )
local N;
N := UnionOfColumns( Eval( A ), Eval( B ) );
if not ForAll( [ A, B ], HasIsReducedModuloRingRelations and
IsReducedModuloRingRelations ) then
## reduce the matrix N w.r.t. the ring relations
N := DecideZero( N, HomalgRing( A ) );
fi;
return N;
end,
|
D.2-10 DiagMat
Returns: a homalg matrix over the ambient ring
(--> DiagMat
(B.1-10))
DiagMat :=
function( e )
local N;
N := DiagMat( List( e, Eval ) );
if not ForAll( e, HasIsReducedModuloRingRelations and
IsReducedModuloRingRelations ) then
## reduce the matrix N w.r.t. the ring relations
N := DecideZero( N, HomalgRing( e[1] ) );
fi;
return N;
end,
|
D.2-11 KroneckerMat
> KroneckerMat ( ) | ( function ) |
Returns: a homalg matrix over the ambient ring
(--> KroneckerMat
(B.1-11))
KroneckerMat :=
function( A, B )
local N;
N := KroneckerMat( Eval( A ), Eval( B ) );
if not ForAll( [ A, B ], HasIsReducedModuloRingRelations and
IsReducedModuloRingRelations ) then
## reduce the matrix N w.r.t. the ring relations
N := DecideZero( N, HomalgRing( A ) );
fi;
return N;
end,
|
D.2-12 MulMat
Returns: a homalg matrix over the ambient ring
(--> MulMat
(B.1-12))
MulMat :=
function( a, A )
return DecideZero( EvalRingElement( a ) * Eval( A ), HomalgRing( A ) );
end,
|
D.2-13 AddMat
Returns: a homalg matrix over the ambient ring
(--> AddMat
(B.1-13))
AddMat :=
function( A, B )
return DecideZero( Eval( A ) + Eval( B ), HomalgRing( A ) );
end,
|
D.2-14 SubMat
Returns: a homalg matrix over the ambient ring
(--> SubMat
(B.1-14))
SubMat :=
function( A, B )
return DecideZero( Eval( A ) - Eval( B ), HomalgRing( A ) );
end,
|
D.2-15 Compose
Returns: a homalg matrix over the ambient ring
(--> Compose
(B.1-15))
Compose :=
function( A, B )
return DecideZero( Eval( A ) * Eval( B ), HomalgRing( A ) );
end,
|
D.2-16 IsZeroMatrix
> IsZeroMatrix ( M ) | ( function ) |
Returns: true
or false
(--> IsZeroMatrix
(B.1-16))
IsZeroMatrix := M -> IsZero( DecideZero( Eval( M ), HomalgRing( M ) ) ),
|
D.2-17 NrRows
> NrRows ( C ) | ( function ) |
Returns: a nonnegative integer
(--> NrRows
(B.1-17))
NrRows := C -> NrRows( Eval( C ) ),
|
D.2-18 NrColumns
> NrColumns ( C ) | ( function ) |
Returns: a nonnegative integer
(--> NrColumns
(B.1-18))
NrColumns := C -> NrColumns( Eval( C ) ),
|
D.2-19 Determinant
> Determinant ( C ) | ( function ) |
Returns: an element of ambient homalg ring
(--> Determinant
(B.1-19))
Determinant := C -> DecideZero( Determinant( Eval( C ) ), HomalgRing( C ) ),
|
D.3 Some of the Recommended Tool Operations
Here we list those matrix operations for which homalg does provide a fallback method. But specifying the below homalgTable
functions increases the performance by replacing the fallback method.
D.3-1 AreEqualMatrices
> AreEqualMatrices ( A, B ) | ( function ) |
Returns: true
or false
(--> AreEqualMatrices
(B.2-1))
AreEqualMatrices :=
function( A, B )
return IsZero( DecideZero( Eval( A ) - Eval( B ), HomalgRing( A ) ) );
end,
|
D.3-2 IsOne
Returns: true
or false
(--> IsIdentityMatrix
(B.2-2))
IsIdentityMatrix := M ->
IsOne( DecideZero( Eval( M ), HomalgRing( M ) ) ),
|
D.3-3 IsDiagonalMatrix
> IsDiagonalMatrix ( M ) | ( function ) |
Returns: true
or false
(--> IsDiagonalMatrix
(B.2-3))
IsDiagonalMatrix := M ->
IsDiagonalMatrix( DecideZero( Eval( M ), HomalgRing( M ) ) ),
|
D.3-4 ZeroRows
> ZeroRows ( C ) | ( function ) |
Returns: a homalg matrix over the ambient ring
(--> ZeroRows
(B.2-4))
ZeroRows := C -> ZeroRows( DecideZero( Eval( C ), HomalgRing( C ) ) ),
|
D.3-5 ZeroColumns
> ZeroColumns ( C ) | ( function ) |
Returns: a homalg matrix over the ambient ring
(--> ZeroColumns
(B.2-5))
ZeroColumns := C -> ZeroColumns( DecideZero( Eval( C ), HomalgRing( C ) ) ),
|