%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%A  rowspace.tex                GAP documentation              J\"urgen Mnich
%%
%A  @(#)$Id: rowspace.tex,v 3.5 1993/02/19 10:48:42 gap Exp $
%%
%Y  Copyright 1990-1992,  Lehrstuhl D fuer Mathematik,  RWTH Aachen,  Germany
%%
%%  This file contains descriptions of the row space datatype, the operations
%%  and functions for this type.
%%
%H  $Log: rowspace.tex,v $
%H  Revision 3.5  1993/02/19  10:48:42  gap
%H  adjustments in line length and spelling
%H
%H  Revision 3.4  1992/04/03  13:15:38  fceller
%H  chnaged 'Shifted...' into 'Sifted...'
%H
%H  Revision 3.3  1992/04/02  21:06:23  martin
%H  changed *domain functions* to *set theoretic functions*
%H
%H  Revision 3.2  1992/04/02  18:43:35  martin
%H  added a note about future changes
%H
%H  Revision 3.1  1992/04/01  13:41:22  jmnich
%H  fixed some references
%H
%H  Revision 3.0  1992/03/03  09:55:50  sam
%H  Initial revision under RCS
%H
%%
\Chapter{Row Spaces}

*The material described in this chapter is subject to change.*

Row spaces are a subcategory of vector spaces (see "Vector Spaces").

The  following  sections  describe  how  row  spaces   are  created  (see
"RowSpace" ) and how factorspaces of row spaces are constructed (see "Row
Space Operations").

The following sections describe the additional functions for factorspaces
of row spaces.

The  functions  described in this  chapter  are implemented  in  the file
'LIBNAME/\"rowspace.g\"'.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{RowSpace}

'RowSpace( <generators>, <field> )'

'RowSpace' returns  the  row  space  that  is  generated  by  the vectors
<generators> over  the field <field>. It is highly recommended  that  the
elements in <generators> in fact are {\GAP} vectors.


'RowSpace( <generators>, <field>, <zero> )'

Whenever the list <generators> is empty,  this call of 'RowSpace'  has to
be used. In that case the necessary components in the record representing
the row space are set up using the third argument <zero> as well.


'RowSpace( <dimension>, <field> )'

The standard row space of dimension <dimension> over the field <field> is
constructed  and  returned  when  using  this  version  of  the  call  to
'RowSpace'.  The elements of  the returned row space are all the lists of
length <dimension> with entries in <field>.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{IsRowSpace}

'IsRowSpace( <obj> )'

'IsRowSpace' returns 'true' if <obj>, which can be an object of arbitrary
type, is a row space and 'false' otherwise.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Row Space Records}

In addition to  the record components described in "Vector Space Records"
the following components may be present in the record of a row space <V>.

'isRowSpace': \\
        is always 'true'.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Set Functions for Row Spaces}%
\index{in!for row spaces}%
\index{Intersection!for row spaces}

\vspace{5mm}
'<v> in <V>'

Membership is tested using 'SiftedVector' (see
"SiftedVector").


\vspace{5mm}
'Intersection( <V>, <W> )'

The   intersection   of   two   row   spaces   is   computed  using   the
Zassenhaus-algorithm, thus avoiding the generation of the set of elements
of <V> and <W>.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{VectorSpace Functions for Row Spaces}

Row  spaces  are  a  special  type  of  vector spaces  for  which  better
algorithms  may  be  known.  The  following  functions  differ  in  their
implementation from their equivalent for general vector spaces.

'Base( <V> )'

The base of a row space is determined with the Gauss algorithm (see "Base
for Row Spaces").


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Base for Row Spaces}

'RowSpaceOps.Base( <V> )'

If <V>  is  a  row  space,  a  base might  be  computed  using  the  full
Gauss-algorithm  on  the  matrix  that  is built  row  by  row  from  the
generators of <V>. The non-zero rows of the resulting  matrix form a base
for <V>, which even is a canonical one.

'RowSpaceOps.Base'  computes and returns such  a  base using the function
'BaseMat' (see "BaseMat").


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{SiftedVector}

'SiftedVector( <V>, <v> )'

'SiftedVector' shifts  the given vector <v> through the base of <V> which
is obtained using the function 'Base'.

For  the default  function 'RowSpaceOps.SiftedVector',  shifting a vector
through  a  base  assumes  that  the  matrix of  that base  is  in  upper
triangular form so that the entries at the heads of the base elements may
successively be  extinguished  by subtracting an appropriate  multiple of
the base vector.

'RowSpaceOps.SiftedVector' returns the result of this process.

This function is used to decide whether a given vector <v> lies in  a row
space <V>, as <v> lies in <V>, iff the residuum is equal to <V>.zero. The
residuum is the result of the shifting process.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Row Space Operations}

The following operator can be used for row spaces.

'<V> mod <W>'

'mod' returns a record representing a factorspace, which can be used as an
argument to some of the functions that are applicable for row spaces
(see "Coefficients").


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Emacs setup
%E Local Variables:
%E mode:           outline
%E outline-regexp: "\\\\Chapter\\|\\\\Section\\|\\%Emacs"
%E fill-column:    73
%E eval:           (hide-body)
%E End:
%%
