Goto Chapter: Top 1 2 3 4 5 6 A B C D E F Bib Ind
 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 

D The subpackage ResidueClassRingForHomalg as a sample ring package
 D.1 The Mandatory Basic Operations
 D.2 The Mandatory Tool Operations
 D.3 Some of the Recommended Tool Operations

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 := StackedRelations( 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 := AugmentedRelations( 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 := StackedRelations( 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 := AugmentedRelations( 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( NumberColumns( M ), rel ) );
    
    S := SyzygiesGeneratorsOfRows( Eval( M ), rel );
    
    S := HomalgResidueClassMatrix( S, R );
    
    S := GetRidOfObsoleteRows( S );
    
    if IsZero( S ) then
        
        SetIsLeftRegular( 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( NumberRows( M ), rel ) );
    
    S := SyzygiesGeneratorsOfColumns( Eval( M ), rel );
    
    S := HomalgResidueClassMatrix( S, R );
    
    S := GetRidOfObsoleteColumns( S );
    
    if IsZero( S ) then
        
        SetIsRightRegular( 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, nz;
    
    Mrel := StackedRelations( M );
    
    TT := HomalgVoidMatrix( HomalgRing( Mrel ) );
    
    bas := BasisOfRowsCoeff( Mrel, TT );
    
    bas := HomalgResidueClassMatrix( bas, HomalgRing( M ) );
    
    nz := NonZeroRows( bas );
    
    SetEval( T, CertainRows( CertainColumns( TT, [ 1 .. NumberRows( M ) ] ), nz ) );
    
    ResetFilterObj( T, IsVoidMatrix );
    
    ## the generic BasisOfRowsCoeff will assume that
    ## ( NumberRows( B ) = 0 ) = IsZero( B )
    return CertainRows( bas, nz );
    
  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, nz;
    
    Mrel := AugmentedRelations( M );
    
    TT := HomalgVoidMatrix( HomalgRing( Mrel ) );
    
    bas := BasisOfColumnsCoeff( Mrel, TT );
    
    bas := HomalgResidueClassMatrix( bas, HomalgRing( M ) );
    
    nz := NonZeroColumns( bas );
    
    SetEval( T, CertainColumns( CertainRows( TT, [ 1 .. NumberColumns( M ) ] ), nz ) );
    
    ResetFilterObj( T, IsVoidMatrix );
    
    ## the generic BasisOfColumnsCoeff will assume that
    ## ( NumberColumns( B ) = 0 ) = IsZero( B )
    return CertainColumns( bas, nz );
    
  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 := StackedRelations( B );
    
    TT := HomalgVoidMatrix( HomalgRing( Brel ) );
    
    red := DecideZeroRowsEffectively( Eval( A ), Brel, TT );
    
    SetEval( T, CertainColumns( TT, [ 1 .. NumberRows( 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 := AugmentedRelations( B );
    
    TT := HomalgVoidMatrix( HomalgRing( Brel ) );
    
    red := DecideZeroColumnsEffectively( Eval( A ), Brel, TT );
    
    SetEval( T, CertainRows( TT, [ 1 .. NumberColumns( 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 := StackedRelations( M2 );
    
    S := SyzygiesGeneratorsOfRows( Eval( M ), M2rel );
    
    S := HomalgResidueClassMatrix( S, HomalgRing( M ) );
    
    S := GetRidOfObsoleteRows( S );
    
    if IsZero( S ) then
        
        SetIsLeftRegular( 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 := AugmentedRelations( M2 );
    
    S := SyzygiesGeneratorsOfColumns( Eval( M ), M2rel );
    
    S := HomalgResidueClassMatrix( S, HomalgRing( M ) );
    
    S := GetRidOfObsoleteColumns( S );
    
    if IsZero( S ) then
        
        SetIsRightRegular( 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(
                      NumberRows( C ), NumberColumns( 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(
        NumberRows( 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(
                      NumberRows( C ), NumberColumns( 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(
        NumberRows( 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 TransposedMatrix
‣ TransposedMatrix( )( function )

Returns: a homalg matrix over the ambient ring

(--> TransposedMatrix (B.1-6))

TransposedMatrix :=
  function( M )
    local N, R;
    
    N := TransposedMatrix( 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-7 CertainRows
‣ CertainRows( )( function )

Returns: a homalg matrix over the ambient ring

(--> CertainRows (B.1-7))

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-8 CertainColumns
‣ CertainColumns( )( function )

Returns: a homalg matrix over the ambient ring

(--> CertainColumns (B.1-8))

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-9 UnionOfRows
‣ UnionOfRows( )( function )

Returns: a homalg matrix over the ambient ring

(--> UnionOfRows (B.1-9))

UnionOfRows :=
  function( L )
    local N;
    
    N := UnionOfRows( List( L, Eval ) );
    
    if not ForAll( L, HasIsReducedModuloRingRelations and
               IsReducedModuloRingRelations ) then
        
        ## reduce the matrix N w.r.t. the ring relations
        N := DecideZero( N, HomalgRing( L[1] ) );
    fi;
    
    return N;
    
  end,

D.2-10 UnionOfColumns
‣ UnionOfColumns( )( function )

Returns: a homalg matrix over the ambient ring

(--> UnionOfColumns (B.1-11))

UnionOfColumns :=
  function( L )
    local N;
    
    N := UnionOfColumns( List( L, Eval ) );
    
    if not ForAll( L, HasIsReducedModuloRingRelations and
               IsReducedModuloRingRelations ) then
        
        ## reduce the matrix N w.r.t. the ring relations
        N := DecideZero( N, HomalgRing( L[1] ) );
    fi;
    
    return N;
    
  end,

D.2-11 DiagMat
‣ DiagMat( )( function )

Returns: a homalg matrix over the ambient ring

(--> DiagMat (B.1-13))

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-12 KroneckerMat
‣ KroneckerMat( )( function )

Returns: a homalg matrix over the ambient ring

(--> KroneckerMat (B.1-14))

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-13 DualKroneckerMat
‣ DualKroneckerMat( )( function )

Returns: a homalg matrix over the ambient ring

(--> DualKroneckerMat (B.1-15))

DualKroneckerMat :=
  function( A, B )
    local N;
    
    N := DualKroneckerMat( 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-14 MulMat
‣ MulMat( )( function )

Returns: a homalg matrix over the ambient ring

(--> MulMat (B.1-16))

MulMat :=
  function( a, A )
    
    return DecideZero( EvalRingElement( a ) * Eval( A ), HomalgRing( A ) );
    
  end,
MulMatRight :=
  function( A, a )
    
    return DecideZero( Eval( A ) * EvalRingElement( a ), HomalgRing( A ) );
    
  end,

D.2-15 AddMat
‣ AddMat( )( function )

Returns: a homalg matrix over the ambient ring

(--> AddMat (B.1-17))

AddMat :=
  function( A, B )
    
    return DecideZero( Eval( A ) + Eval( B ), HomalgRing( A ) );
    
  end,

D.2-16 SubMat
‣ SubMat( )( function )

Returns: a homalg matrix over the ambient ring

(--> SubMat (B.1-18))

SubMat :=
  function( A, B )
    
    return DecideZero( Eval( A ) - Eval( B ), HomalgRing( A ) );
    
  end,

D.2-17 Compose
‣ Compose( )( function )

Returns: a homalg matrix over the ambient ring

(--> Compose (B.1-19))

Compose :=
  function( A, B )
    
    return DecideZero( Eval( A ) * Eval( B ), HomalgRing( A ) );
    
  end,

D.2-18 IsZeroMatrix
‣ IsZeroMatrix( M )( function )

Returns: true or false

(--> IsZeroMatrix (B.1-20))

IsZeroMatrix := M -> IsZero( DecideZero( Eval( M ), HomalgRing( M ) ) ),

D.2-19 NumberRows
‣ NumberRows( C )( function )

Returns: a nonnegative integer

(--> NumberRows (B.1-21))

NumberRows := C -> NumberRows( Eval( C ) ),

D.2-20 NumberColumns
‣ NumberColumns( C )( function )

Returns: a nonnegative integer

(--> NumberColumns (B.1-22))

NumberColumns := C -> NumberColumns( Eval( C ) ),

D.2-21 Determinant
‣ Determinant( C )( function )

Returns: an element of ambient homalg ring

(--> Determinant (B.1-23))

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
‣ IsOne( M )( function )

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 ) ) ),
 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 
Goto Chapter: Top 1 2 3 4 5 6 A B C D E F Bib Ind

generated by GAPDoc2HTML