1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367
|
% This file was created automatically from module.msk.
% DO NOT EDIT!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%A module.msk GAP documentation Thomas Breuer
%%
%A @(#)$Id: module.msk,v 1.12 2002/04/15 10:02:30 sal Exp $
%%
%Y (C) 1998 School Math and Comp. Sci., University of St. Andrews, Scotland
%Y Copyright (C) 2002 The GAP Group
%%
\PreliminaryChapter{Modules}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Generating modules}
\>IsLeftOperatorAdditiveGroup( <D> ) C
A domain <D> lies in `IsLeftOperatorAdditiveGroup' if it is an additive
group that is closed under scalar multplication from the
left, and such that $\lambda*(x+y)=\lambda*x+\lambda*y$ for all
scalars $\lambda$ and elements $x,y\in D$.
\>IsLeftModule( <M> ) C
A domain <M> lies in `IsLeftModule' if it lies in
`IsLeftOperatorAdditiveGroup', {\it and} the set of scalars forms a ring,
{\it and} $(\lambda+\mu)*x=\lambda*x+\mu*x$ for scalars $\lambda,\mu$
and $x\in M$, {\it and} scalar multiplication satisfies $\lambda*(\mu*x)=
(\lambda*\mu)*x$ for scalars $\lambda,\mu$ and $x\in M$.
\beginexample
gap> V:= FullRowSpace( Rationals, 3 );
( Rationals^3 )
gap> IsLeftModule( V );
true
\endexample
\>GeneratorsOfLeftOperatorAdditiveGroup( <D> ) A
returns a list of elements of <D> that generates <D> as a left operator
additive group.
\>GeneratorsOfLeftModule( <M> ) A
returns a list of elements of <M> that generate <M> as a left module.
\beginexample
gap> V:= FullRowSpace( Rationals, 3 );;
gap> GeneratorsOfLeftModule( V );
[ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ]
\endexample
\>AsLeftModule( <R>, <D> ) O
if the domain <D> forms an additive group and is closed under left
multiplication by the elements of <R>, then `AsLeftModule( <R>, <D> )'
returns the domain <D> viewed as a left module.
\beginexample
gap> coll:= [ [0*Z(2),0*Z(2)], [Z(2),0*Z(2)], [0*Z(2),Z(2)], [Z(2),Z(2)] ];
[ [ 0*Z(2), 0*Z(2) ], [ Z(2)^0, 0*Z(2) ], [ 0*Z(2), Z(2)^0 ],
[ Z(2)^0, Z(2)^0 ] ]
gap> AsLeftModule( GF(2), coll );
<vector space of dimension 2 over GF(2)>
\endexample
\>IsRightOperatorAdditiveGroup( <D> ) C
A domain <D> lies in `IsRightOperatorAdditiveGroup' if it is an additive
group that is closed under scalar multplication from the
right, and such that $(x+y)*\lambda=x*\lambda+y*\lambda$ for all
scalars $\lambda$ and elements $x,y\in D$.
\>IsRightModule( <M> ) C
A domain <M> lies in `IsRightModule' if it lies in
`IsRightOperatorAdditiveGroup', {\it and} the set of scalars forms a ring,
{\it and} $x*(\lambda+\mu) = x*\lambda+x*\mu$ for scalars $\lambda,\mu$
and $x\in M$, {\it and} scalar multiplication satisfies $(x*\mu)*\lambda=
x*(\mu*\lambda)$ for scalars $\lambda,\mu$ and $x\in M$.
\>GeneratorsOfRightOperatorAdditiveGroup( <D> ) A
returns a list of elements of <D> that generates <D> as a right operator
additive group.
\>GeneratorsOfRightModule( <M> ) A
returns a list of elements of <M> that generate <M> as a left module.
\>LeftModuleByGenerators( <R>, <gens> ) O
\>LeftModuleByGenerators( <R>, <gens>, <zero> ) O
returns the left module over <R> generated by <gens>.
\beginexample
gap> coll:= [ [Z(2),0*Z(2)], [0*Z(2),Z(2)], [Z(2),Z(2)] ];;
gap> V:= LeftModuleByGenerators( GF(16), coll );
<vector space over GF(2^4), with 3 generators>
\endexample
\>LeftActingDomain( <D> ) A
Let <D> be an external left set, that is, <D> is closed under the action
of a domain $L$ by multiplication from the left.
Then $L$ can be accessed as value of `LeftActingDomain' for <D>.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Submodules}
\>Submodule( <M>, <gens> ) F
\>Submodule( <M>, <gens>, "basis" ) F
is the left module generated by the collection <gens>,
with parent module <M>.
The second form generates the submodule of <M> for that the list <gens>
is known to be a list of basis vectors;
in this case, it is *not* checked whether <gens> really are linearly
independent and whether all in <gens> lie in <M>.
\beginexample
gap> coll:= [ [Z(2),0*Z(2)], [0*Z(2),Z(2)], [Z(2),Z(2)] ];;
gap> V:= LeftModuleByGenerators( GF(16), coll );;
gap> W:= Submodule( V, [ coll[1], coll[2] ] );
<vector space over GF(2^4), with 2 generators>
gap> Parent( W ) = V;
true
\endexample
\>SubmoduleNC( <M>, <gens> ) F
\>SubmoduleNC( <M>, <gens>, "basis" ) F
`SubmoduleNC' does the same as `Submodule', except that it does not check
whether all in <gens> lie in <M>.
\>ClosureLeftModule( <M>, <m> ) O
is the left module generated by the left module generators of <M> and the
element <m>.
\beginexample
gap> V:= LeftModuleByGenerators( Rationals, [ [ 1, 0, 0 ], [ 0, 1, 0 ] ] );
<vector space over Rationals, with 2 generators>
gap> ClosureLeftModule( V, [ 1, 1, 1 ] );
<vector space over Rationals, with 3 generators>
\endexample
\>TrivialSubmodule( <M> ) A
returns the zero submodule of <M>.
\beginexample
gap> V:= LeftModuleByGenerators( Rationals, [ [ 1, 0, 0 ], [ 0, 1, 0 ] ] );;
gap> TrivialSubmodule( V );
<vector space over Rationals, with 0 generators>
\endexample
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Free Modules}
\>IsFreeLeftModule( <M> ) C
A left module is free as module if it is isomorphic to a direct sum of
copies of its left acting domain.
Free left modules can have bases.
The characteristic (see~"Characteristic") of a free left module
is defined as the characteristic of its left acting domain
(see~"LeftActingDomain").
\>FreeLeftModule( <R>, <gens> ) F
\>FreeLeftModule( <R>, <gens>, <zero> ) F
\>FreeLeftModule( <R>, <gens>, "basis" ) F
\>FreeLeftModule( <R>, <gens>, <zero>, "basis" ) F
`FreeLeftModule( <R>, <gens> )' is the free left module over the ring
<R>, generated by the vectors in the collection <gens>.
If there are three arguments, a ring <R> and a collection <gens>
and an element <zero>,
then `FreeLeftModule( <R>, <gens>, <zero> )' is the <R>-free left module
generated by <gens>, with zero element <zero>.
If the last argument is the string `"basis"' then the vectors in
<gens> are known to form a basis of the free module.
It should be noted that the generators <gens> must be vectors,
that is, they must support an addition and a scalar action of <R>
via left multiplication.
(See also Section~"Constructing Domains" for the general meaning of
``generators'' in {\GAP}.)
In particular, `FreeLeftModule' is *not* an equivalent of commands
such as `FreeGroup' (see~"FreeGroup") in the sense of a constructor of
a free group on abstract generators;
Such a construction seems to be unnecessary for vector spaces,
for that one can use for example row spaces (see~"FullRowSpace")
in the finite dimensional case
and polynomial rings (see~"PolynomialRing") in the infinite dimensional
case.
Moreover, the definition of a ``natural'' addition for elements of a
given magma (for example a permutation group) is possible via the
construction of magma rings (see Chapter "ref:Magma Rings").
\beginexample
gap> V:= FreeLeftModule( Rationals, [ [ 1, 0, 0 ], [ 0, 1, 0 ] ], "basis" );
<vector space of dimension 2 over Rationals>
\endexample
\>AsFreeLeftModule( <F>, <D> ) O
if the domain <D> is a free left module over <F>, then
`AsFreeLeftModule( <F>, <D> )' returns the domain <D> viewed as free
left module over <F>.
\>Dimension( <M> ) A
A free left module has dimension $n$ if it is isomorphic to a direct sum
of $n$ copies of its left acting domain.
(We do *not* mark `Dimension' as invariant under isomorphisms
since we want to call `UseIsomorphismRelation' also for free left modules
over different left acting domains.)
\beginexample
gap> V:= FreeLeftModule( Rationals, [ [ 1, 0 ], [ 0, 1 ], [ 1, 1 ] ] );;
gap> Dimension( V );
2
\endexample
\>IsFiniteDimensional( <M> ) P
is `true' if <M> is a free left module that is finite dimensional
over its left acting domain, and `false' otherwise.
\beginexample
gap> V:= FreeLeftModule( Rationals, [ [ 1, 0 ], [ 0, 1 ], [ 1, 1 ] ] );;
gap> IsFiniteDimensional( V );
true
\endexample
\>UseBasis( <V>, <gens> ) O
The vectors in the list <gens> are known to form a basis of the
free left module <V>.
`UseBasis' stores information in <V> that can be derived form this fact,
namely
\beginlist%unordered
\item{--}
<gens> are stored as left module generators if no such generators were
bound (this is useful especially if <V> is an algebra),
\item{--}
the dimension of <V> is stored.
\endlist
\beginexample
gap> V:= FreeLeftModule( Rationals, [ [ 1, 0 ], [ 0, 1 ], [ 1, 1 ] ] );;
gap> UseBasis( V, [ [ 1, 0 ], [ 1, 1 ] ] );
gap> V; # now V knows its dimension
<vector space of dimension 2 over Rationals>
\endexample
\>IsRowModule( <V> ) P
A *row module* is a free left module whose elements are row vectors.
\>IsMatrixModule( <V> ) P
A *matrix module* is a free left module whose elements are matrices.
\>IsFullRowModule( <M> ) P
A *full row module* is a module $R^n$,
for a ring $R$ and a nonnegative integer $n$.
More precisely, a full row module is a free left module over a ring $R$
such that the elements are row vectors with entries in $R$ and such that
the dimension is equal to the length of the row vectors.
Several functions delegate their tasks to full row modules,
for example `Iterator' and `Enumerator'.
\>FullRowModule( <R>, <n> ) F
is the row module `<R>^<n>',
for a ring <R> and a nonnegative integer <n>.
\beginexample
gap> V:= FullRowModule( Integers, 5 );
( Integers^5 )
\endexample
\>IsFullMatrixModule( <M> ) P
A *full matrix module* is a module $R^{[m,n]}$,
for a ring $R$ and two nonnegative integers $m$, $n$.
More precisely, a full matrix module is a free left module over a ring
$R$ such that the elements are matrices with entries in $R$
and such that the dimension is equal to the number of entries in each
matrix.
\>FullMatrixModule( <R>, <m>, <n> ) F
is the row module `<R>^[<m>,<n>]',
for a ring <R> and nonnegative integers <m> and <n>.
\beginexample
gap> FullMatrixModule( GaussianIntegers, 3, 6 );
( GaussianIntegers^[ 3, 6 ] )
\endexample
\>IsHandledByNiceBasis( <M> ) C
For a free left module <M> in this category, essentially all operations
are performed using a ``nicer'' free left module,
which is usually a row module.
|