[GAP Forum] bases of vector spaces

Thomas Breuer thomas.breuer at math.rwth-aachen.de
Thu Sep 2 09:06:04 BST 2004


Dear GAP Forum,

Laurent Bartholdi wrote

> hi,
> this is maybe not a bug, but seems very strange behaviour to me:
> 
> gap> GF(2)^100;
> ( GF(2)^100 )
> gap> Basis(last);
> CanonicalBasis( ( GF(2)^100 ) )
> gap> VectorSpace(GF(2),last);
> <vector space over GF(2), with 100 generators>
> gap> Basis(last);
> SemiEchelonBasis( <vector space over GF(2), with 100 generators>, ...=
>  )
> gap> VectorSpace(GF(2),last);
> <vector space over GF(2), with 100 generators>
> gap> Basis(last);
> Basis( <vector space over GF(2), with 100 generators>, ... )
> gap> VectorSpace(GF(2),last);
> user interrupt at
> i :=3D i + 1;
> =2E..
> and GAP runs till it exhausts memory. if instead of
> VectorSpace(GF(2),last) i used VectorSpace(GF(2),Elements(last)) ther=
> e is
> no problem.
> 
> best, laurent

Sure this is a bug.

And this is the problem behind the message.

    gap> v1:= GF(2)^100;;  b1:= Basis( v1 );
    CanonicalBasis( ( GF(2)^100 ) )
    gap> IsMatrix( b1 );
    true
    gap> v2:= VectorSpace( GF(2), b1 );;  b2:= Basis( v2 );
    SemiEchelonBasis( <vector space over GF(2), with 100 generators>, ... )
    gap> IsMatrix( b2 );
    false

The method that is used to create the basis `b2' did not store
that the basis is a matrix.
This information would be needed for the creation of the next
vector space.

This bug will be fixed with the next bugfix.
For the moment, reading the following piece of code
will help.

InstallMethod( SemiEchelonBasis,
    "for Gaussian row space",
    [ IsGaussianRowSpace ],
    function( V )
    local B, gens;

    B:= Objectify( NewType( FamilyObj( V ), 
                                IsFiniteBasisDefault
                            and IsSemiEchelonized
                            and IsSemiEchelonBasisOfGaussianRowSpaceRep ),
                   rec() );

    gens:= GeneratorsOfLeftModule( V ); 
    if IsEmpty( gens ) or ForAll( gens, IsZero ) then
      SetIsEmpty( B, true );
    else
      SetIsRectangularTable( B, true );
    fi;

    SetUnderlyingLeftModule( B, V );
    return B;
    end );

All the best,
Thomas





More information about the Forum mailing list