This chapter introduces the data structures and functions for algebras in GAP3. The word algebra in this manual means always associative algebra.
At the moment GAP3 supports only finitely presented algebras and matrix algebras. For details about implementation and special functions for the different types of algebras, see More about Algebras and the chapters Finitely Presented Algebras and Matrix Algebras.
The treatment of algebras is very similar to that of groups. For example, algebras in GAP3 are always finitely generated, since for many questions the generators play an important role. If you are not familiar with the concepts that are used to handle groups in GAP3 it might be useful to read the introduction and the overview sections in chapter Groups.
Algebras are created using Algebra
(see Algebra) or UnitalAlgebra
(see UnitalAlgebra), subalgebras of a given algebra using Subalgebra
(see Subalgebra) or UnitalSubalgebra
(see UnitalSubalgebra).
See Parent Algebras and Subalgebras, and the corresponding section
More about Groups and Subgroups in the chapter about groups for details
about the distinction between parent algebras and subalgebras.
The first sections of the chapter describe the data structures (see More about Algebras) and the concepts of unital algebras (see Algebras and Unital Algebras) and parent algebras (see Parent Algebras and Subalgebras).
The next sections describe the functions for the construction of algebras, and the tests for algebras (see Algebra, UnitalAlgebra, IsAlgebra, IsUnitalAlgebra, Subalgebra, UnitalSubalgebra, IsSubalgebra, AsAlgebra, AsUnitalAlgebra, AsSubalgebra, AsUnitalSubalgebra).
The next sections describe the different types of functions for algebras (see Operations for Algebras, Zero and One for Algebras, Set Theoretic Functions for Algebras, Property Tests for Algebras, Vector Space Functions for Algebras, Algebra Functions for Algebras, TrivialSubalgebra).
The next sections describe the operation of algebras (see Operation for Algebras, OperationHomomorphism for Algebras).
The next sections describe algebra homomorphisms (see Algebra Homomorphisms, Mapping Functions for Algebra Homomorphisms).
The next sections describe algebra elements (see Algebra Elements, IsAlgebraElement).
The last section describes the implementation of the data structures (see Algebra Records).
At the moment there is no implementation for ideals, cosets, and factors of algebras in GAP3, and the only available algebra homomorphisms are operation homomorphisms.
Also there is no implementation of bases for general algebras, this will be available as soon as it is for general vector spaces.
Let F be a field. A ring A is called an F-algebra if A is an F-vector space. All algebras in GAP3 are associative, that is, the multiplication is associative.
An algebra always contains a zero element that can be obtained by subtracting an arbitrary element from itself. A discussion of identity elements of algebras (and of the consequences for the implementation in GAP3) can be found in Algebras and Unital Algebras.
Elements of the field F are not regarded as elements of A. The
practical reason (besides the obvious mathematical one) for this is that
even if the identity matrix is contained in the matrix algebra A it is
not possible to write 1 + a
for adding the identity matrix to the
algebra element a
, since independent of the algebra A the meaning in
GAP3 is already defined as to add 1
to all positions of the matrix
a
. Thus one has to write One( A ) + a
or a^0 + a
instead.
The natural operation domains for algebras are modules (see Operation for Algebras, and chapter Modules).
39.2 Algebras and Unital Algebras
Not all algebras contain a (left and right) multiplicative neutral identity element, but if an algebra contains such an identity element it is unique.
If an algebra A contains a multiplicative neutral element then in general it cannot be derived from an arbitrary element a of A by forming a / a or a0, since these operations may be not defined for the algebra A.
More precisely, it may be possible to invert a or raise it to the zero-th power, but A is not necessarily closed under these operations. For example, if a is a square matrix in GAP3 then we can form a0 which is the identity matrix of the same size and over the same field as a.
On the other hand, an algebra may have a multiplicative neutral element that is not equal to the zero-th power of elements (see Zero and One for Algebras).
In many cases, however, the zero-th power of algebra elements is well-defined, with the result again in the algebra. This holds for example for all finitely presented algebras (see chapter Finitely Presented Algebras) and all those matrix algebras whose generators are the generators of a finite group.
For practical purposes it is useful to distinguish general algebras and unital algebras.
A unital algebra in GAP3 is an algebra U that is known to contain
zero-th powers of elements, and all functions may assume this. A not unital
algebra A may contain zero-th powers of elements or not, and no
function for A should assume existence or nonexistence of these
elements in A. So it may be possible to view A as a unital algebra
using AsUnitalAlgebra( A )
(see AsUnitalAlgebra), and of course it
is always possible to view a unital algebra as algebra using
AsAlgebra( U )
(see AsAlgebra).
A can have unital subalgebras, and of course U can have subalgebras that are not unital.
The images of unital algebras under operation homomorphisms are either unital or trivial, since the identity of the source acts trivially, so its image under the homomorphism is the identity of the image.
The following example shows the main differences between algebras and unital algebras.
gap> a:= [ [ 1, 0 ], [ 0, 0 ] ];; gap> alg1:= Algebra( Rationals, [ a ] ); Algebra( Rationals, [ [ [ 1, 0 ], [ 0, 0 ] ] ] ) gap> id:= a^0; [ [ 1, 0 ], [ 0, 1 ] ] gap> id in alg1; false gap> alg2:= UnitalAlgebra( Rationals, [ a ] ); UnitalAlgebra( Rationals, [ [ [ 1, 0 ], [ 0, 0 ] ] ] ) gap> id in alg2; true gap> alg3:= AsAlgebra( alg2 ); Algebra( Rationals, [ [ [ 1, 0 ], [ 0, 0 ] ], [ [ 1, 0 ], [ 0, 1 ] ] ] ) gap> alg3 = alg2; true gap> AsUnitalAlgebra( alg1 ); Error, <D> is not unital
We see that if we want the identity matrix to be contained in an algebra that is not known to be unital, it might be necessary to add it to the generators. If we would not have the possibility to define unital algebras, this would lead to the strange situations that a two-generator algebra means an algebra generated by one nonidentity generator and the identity matrix, or that an algebra is free on the set X but is generated as algebra by the set X plus the identity.
39.3 Parent Algebras and Subalgebras
GAP3 distinguishs between parent algebras and subalgebras of parent algebras. The concept is the same as that for groups (see More about Groups and Subgroups), so here it is only sketched.
Each subalgebra belongs to a unique parent algebra, the so-called parent of the subalgebra. A parent algebra is its own parent.
Parent algebras are constructed by Algebra
and UnitalAlgebra
,
subalgebras are constructed by Subalgebra
and UnitalSubalgebra
.
The parent of the first argument of Subalgebra
will be the parent of the
constructed subalgebra.
Those algebra functions that take more than one algebra as argument
require that the arguments have a common parent. Take for instance
Centralizer
. It takes two arguments, an algebra A and an algebra
B, where either A is a parent algebra, and B is a subalgebra of
this parent algebra, or A and B are subalgebras of a common parent
algebra P, and returns the centralizer of B in A. This is
represented as a subalgebra of the common parent of A and B.
Note that a subalgebra of a parent algebra need not be a proper
subalgebra.
An exception to this rule is again the set theoretic function
Intersection
(see Intersection), which allows to intersect algebras
with different parents.
Whenever you have two subalgebras which have different parent algebras
but have a common superalgebra A you can use AsSubalgebra
or
AsUnitalSubalgebra
(see AsSubalgebra, AsUnitalSubalgebra) in order
to construct new subalgebras which have a common parent algebra A.
Note that subalgebras of unital algebras need not be unital (see Algebras and Unital Algebras).
The following sections describe the functions related to this concept (see Algebra, UnitalAlgebra, IsAlgebra, IsUnitalAlgebra, AsAlgebra, AsUnitalAlgebra, Subalgebra, UnitalSubalgebra, AsSubalgebra, AsUnitalSubalgebra, and also IsParent, Parent).
Algebra( U )
returns a parent algebra A which is isomorphic to the parent algebra or subalgebra U.
Algebra( F, gens )
Algebra( F, gens, zero )
returns a parent algebra over the field F and generated by the algebra elements in the list gens. The zero element of this algebra may be entered as zero; this is necessary whenever gens is empty.
gap> a:= [ [ 1 ] ];; gap> alg:= Algebra( Rationals, [ a ] ); Algebra( Rationals, [ [ [ 1 ] ] ] ) gap> alg.name:= "alg";; gap> sub:= Subalgebra( alg, [] ); Subalgebra( alg, [ ] ) gap> Algebra( sub ); Algebra( Rationals, [ [ [ 0 ] ] ] ) gap> Algebra( Rationals, [], 0*a ); Algebra( Rationals, [ [ [ 0 ] ] ] )
The algebras returned by Algebra
are not unital. For constructing
unital algebras, use UnitalAlgebra UnitalAlgebra
.
UnitalAlgebra( U )
returns a unital parent algebra A which is isomorphic to the parent algebra or subalgebra U. If U is not unital it is checked whether the zero-th power of elements is contained in U, and if not an error is signalled.
UnitalAlgebra( F, gens )
UnitalAlgebra( F, gens, zero )
returns a unital parent algebra over the field F and generated by the algebra elements in the list gens. The zero element of this algebra may be entered as zero; this is necessary whenever gens is empty.
gap> alg1:= UnitalAlgebra( Rationals, [ NullMat( 2, 2 ) ] ); UnitalAlgebra( Rationals, [ [ [ 0, 0 ], [ 0, 0 ] ] ] ) gap> alg2:= UnitalAlgebra( Rationals, [], NullMat( 2, 2 ) ); UnitalAlgebra( Rationals, [ [ [ 0, 0 ], [ 0, 0 ] ] ] ) gap> alg3:= Algebra( alg1 ); Algebra( Rationals, [ [ [ 0, 0 ], [ 0, 0 ] ], [ [ 1, 0 ], [ 0, 1 ] ] ] ) gap> alg1 = alg3; true gap> AsUnitalAlgebra( alg3 ); UnitalAlgebra( Rationals, [ [ [ 0, 0 ], [ 0, 0 ] ], [ [ 1, 0 ], [ 0, 1 ] ] ] )
The algebras returned by UnitalAlgebra
are unital. For constructing
algebras that are not unital, use Algebra Algebra
.
IsAlgebra( obj )
returns true
if obj, which can be an object of arbitrary type, is
a parent algebra or a subalgebra and false
otherwise.
The function will signal an error if obj is an unbound variable.
gap> IsAlgebra( FreeAlgebra( GF(2), 0 ) ); true gap> IsAlgebra( 1/2 ); false
IsUnitalAlgebra( obj )
returns true
if obj, which can be an object of arbitrary type, is
a unital parent algebra or a unital subalgebra and false
otherwise.
The function will signal an error if obj is an unbound variable.
gap> IsUnitalAlgebra( FreeAlgebra( GF(2), 0 ) ); true gap> IsUnitalAlgebra( Algebra( Rationals, [ [ [ 1 ] ] ] ) ); false
Note that the function does not check whether obj is an algebra that
contains the zero-th power of elements, but just checks whether obj is
an algebra with flag isUnitalAlgebra
.
Subalgebra( A, gens )
returns the subalgebra of the algebra A generated by the elements in the list gens.
gap> a:= [ [ 1, 0 ], [ 0, 0 ] ];; gap> b:= [ [ 0, 0 ], [ 0, 1 ] ] ;; gap> alg:= Algebra( Rationals, [ a, b ] );; gap> alg.name:= "alg";; gap> s:= Subalgebra( alg, [ a ] ); Subalgebra( alg, [ [ [ 1, 0 ], [ 0, 0 ] ] ] ) gap> s = alg; false gap> s:= UnitalSubalgebra( alg, [ a ] ); UnitalSubalgebra( alg, [ [ [ 1, 0 ], [ 0, 0 ] ] ] ) gap> s = alg; true
Note that Subalgebra
, UnitalSubalgebra
, AsSubalgebra
and
AsUnitalSubalgebra
are the only functions in which the name
Subalgebra
does not refer to the mathematical terms subalgebra and
superalgebra but to the implementation of algebras as subalgebras and
parent algebras.
UnitalSubalgebra( A, gens )
returns the unital subalgebra of the algebra A generated by the elements in the list gens. If A is not (known to be) unital then first it is checked that A really contains the zero-th power of elements.
gap> a:= [ [ 1, 0 ], [ 0, 0 ] ];; gap> b:= [ [ 0, 0 ], [ 0, 1 ] ] ;; gap> alg:= Algebra( Rationals, [ a, b ] );; gap> alg.name:= "alg";; gap> s:= Subalgebra( alg, [ a ] ); Subalgebra( alg, [ [ [ 1, 0 ], [ 0, 0 ] ] ] ) gap> s = alg; false gap> s:= UnitalSubalgebra( alg, [ a ] ); UnitalSubalgebra( alg, [ [ [ 1, 0 ], [ 0, 0 ] ] ] ) gap> s = alg; true
Note that Subalgebra
, UnitalSubalgebra
, AsSubalgebra
and
AsUnitalSubalgebra
are the only functions in which the name
Subalgebra
does not refer to the mathematical terms subalgebra and
superalgebra but to the implementation of algebras as subalgebras and
parent algebras.
IsSubalgebra( A, U )
returns true
if U is a subalgebra of A and false
otherwise.
Note that A and U must have a common parent algebra. This function
returns true
if and only if the set of elements of U is a subset of
the set of elements of A.
gap> a:= [ [ 1, 0 ], [ 0, 0 ] ];; gap> b:= [ [ 0, 0 ], [ 0, 1 ] ] ;; gap> alg:= Algebra( Rationals, [ a, b ] );; gap> alg.name:= "alg";; gap> IsSubalgebra( alg, alg ); true gap> s:= UnitalSubalgebra( alg, [ a ] ); UnitalSubalgebra( alg, [ [ [ 1, 0 ], [ 0, 0 ] ] ] ) gap> IsSubalgebra( alg, s ); true
AsAlgebra( D )
AsAlgebra( F, D )
Let D be a domain. AsAlgebra
returns an algebra A over the field F
such that the set of elements of D is the same as the set of elements of
A if this is possible.
If D is an algebra the argument F may be omitted, the coefficients
field of D is taken as coefficients field of F in this case.
If D is a list of algebra elements these elements must form a algebra. Otherwise an error is signalled.
gap> a:= [ [ 1, 0 ], [ 0, 0 ] ] * Z(2);; gap> AsAlgebra( GF(2), [ a, 0*a ] ); Algebra( GF(2), [ [ [ Z(2)^0, 0*Z(2) ], [ 0*Z(2), 0*Z(2) ] ] ] )
Note that this function returns a parent algebra or a subalgebra of a
parent algebra depending on D. In order to convert a subalgebra
into a parent algebra you must use Algebra
or UnitalAlgebra
(see
Algebra, UnitalAlgebra).
AsUnitalAlgebra( D )
AsUnitalAlgebra( F, D )
Let D be a domain. AsUnitalAlgebra
returns a unital algebra A over
the field F such that the set of elements of D is the same as the set
of elements of A if this is possible.
If D is an algebra the argument F may be omitted, the coefficients
field of D is taken as coefficients field of F in this case.
If D is a list of algebra elements these elements must form a unital algebra. Otherwise an error is signalled.
gap> a:= [ [ 1, 0 ], [ 0, 0 ] ] * Z(2);; gap> AsUnitalAlgebra( GF(2), [ a, a^0, 0*a, a^0-a ] ); UnitalAlgebra( GF(2), [ [ [ 0*Z(2), 0*Z(2) ], [ 0*Z(2), Z(2)^0 ] ], [ [ Z(2)^0, 0*Z(2) ], [ 0*Z(2), 0*Z(2) ] ] ] )
Note that this function returns a parent algebra or a subalgebra of a
parent algebra depending on D. In order to convert a subalgebra
into a parent algebra you must use Algebra
or UnitalAlgebra
(see
Algebra, UnitalAlgebra).
AsSubalgebra( A, U )
Let A be a parent algebra and U be a parent algebra or a subalgebra
with a possibly different parent algebra, such that the generators of U
are elements of A. AsSubalgebra
returns a new subalgebra S such
that S has parent algebra A and is generated by the generators of U.
gap> a:= [ [ 1, 0 ], [ 0, 0 ] ];; gap> b:= [ [ 0, 0 ], [ 0, 1 ] ] ;; gap> alg:= Algebra( Rationals, [ a, b ] );; gap> alg.name:= "alg";; gap> s:= Algebra( Rationals, [ a ] ); Algebra( Rationals, [ [ [ 1, 0 ], [ 0, 0 ] ] ] ) gap> AsSubalgebra( alg, s ); Subalgebra( alg, [ [ [ 1, 0 ], [ 0, 0 ] ] ] )
Note that Subalgebra
, UnitalSubalgebra
, AsSubalgebra
and
AsUnitalSubalgebra
are the only functions in which the name
Subalgebra
does not refer to the mathematical terms subalgebra and
superalgebra but to the implementation of algebras as subalgebras and
parent algebras.
AsUnitalSubalgebra( A, U )
Let A be a parent algebra and U be a parent algebra or a subalgebra
with a possibly different parent algebra, such that the generators of U
are elements of A. AsSubalgebra
returns a new unital subalgebra S
such that S has parent algebra A and is generated by the generators
of U. If U or A do not contain the zero-th power of elements an
error is signalled.
gap> a:= [ [ 1, 0 ], [ 0, 0 ] ];; gap> b:= [ [ 0, 0 ], [ 0, 1 ] ];; gap> alg:= Algebra( Rationals, [ a, b ] );; gap> alg.name:= "alg";; gap> s:= UnitalAlgebra( Rationals, [ a ] ); UnitalAlgebra( Rationals, [ [ [ 1, 0 ], [ 0, 0 ] ] ] ) gap> AsSubalgebra( alg, s ); Subalgebra( alg, [ [ [ 1, 0 ], [ 0, 0 ] ], [ [ 1, 0 ], [ 0, 1 ] ] ] ) gap> AsUnitalSubalgebra( alg, s ); UnitalSubalgebra( alg, [ [ [ 1, 0 ], [ 0, 0 ] ] ] )
Note that Subalgebra
, UnitalSubalgebra
, AsSubalgebra
and
AsUnitalSubalgebra
are the only functions in which the name
Subalgebra
does not refer to the mathematical terms subalgebra and
superalgebra but to the implementation of algebras as subalgebras and
parent algebras.
A ^ n
The operator ^
evaluates to the n-fold direct product of A,
viewed as a free A-module.
gap> a:= FreeAlgebra( GF(2), 2 ); UnitalAlgebra( GF(2), [ a.1, a.2 ] ) gap> a^2; Module( UnitalAlgebra( GF(2), [ a.1, a.2 ] ), [ [ a.one, a.zero ], [ a.zero, a.one ] ] )
a in A
The operator in
evaluates to true
if a is an element of A and
false
otherwise. a must be an element of the parent algebra of A.
gap> a.1^3 + a.2 in a; true gap> 1 in a; false
39.16 Zero and One for Algebras
Zero( A )
:
One( A )
:false
otherwise.
If A is a unital algebra then this element is obtained on raising
an arbitrary element to the zero-th power (see Algebras and Unital
Algebras).
gap> a:= Algebra( Rationals, [ [ [ 1, 0 ], [ 0, 0 ] ] ] ); Algebra( Rationals, [ [ [ 1, 0 ], [ 0, 0 ] ] ] ) gap> Zero( a ); [ [ 0, 0 ], [ 0, 0 ] ] gap> One( a ); [ [ 1, 0 ], [ 0, 0 ] ] gap> a:= UnitalAlgebra( Rationals, [ [ [ 1, 0 ], [ 0, 0 ] ] ] ); UnitalAlgebra( Rationals, [ [ [ 1, 0 ], [ 0, 0 ] ] ] ) gap> Zero( a ); [ [ 0, 0 ], [ 0, 0 ] ] gap> One( a ); [ [ 1, 0 ], [ 0, 1 ] ]
39.17 Set Theoretic Functions for Algebras
As already mentioned in the introduction of the chapter, algebras are
domains. Thus all set theoretic functions, for example Intersection
and Size
can be applied to algebras.
All set theoretic functions not mentioned here are not treated specially
for algebras.
Elements( A )
:
Intersection( A, H )
:
IsSubset( A, H )
:IsSubset
tests whether the
generators of H are elements of A.
Otherwise DomainOps.IsSubset
is used.
Random( A )
:See also Functions for Matrix Algebras, Functions for Finitely Presented Algebras for the set theoretic functions for the different types of algebras.
39.18 Property Tests for Algebras
The following property tests (cf. Properties and Property Tests) are available for algebras.
IsAbelian( A )
:true
if the algebra A is abelian and false
otherwise.
An algebra A is abelian if and only if for every a, b∈ A
the equation a* b = b* a holds.
IsCentral( A, U )
:true
if the algebra A centralizes the algebra U and
false
otherwise.
An algebra A centralizes an algebra U if and only if for all
a∈ A and for all u∈ U the equation a* u = u* a holds.
Note that U need not to be a subalgebra of A but they must have
a common parent algebra.
IsFinite( A )
:true
if the algebra A is finite, and false
otherwise.
IsTrivial( A )
:true
if the algebra A consists only of the zero element,
and false
otherwise. If A is a unital algebra it is of course
never trivial.
All tests expect a parent algebra or subalgebra and return true
if the
algebra has the property and false
otherwise. Some functions may not
terminate if the given algebra has an infinite set of elements.
A warning may be printed in such cases.
gap> IsAbelian( FreeAlgebra( GF(2), 2 ) ); false gap> a:= UnitalAlgebra( Rationals, [ [ [ 1, 0 ], [ 0, 0 ] ] ] ); UnitalAlgebra( Rationals, [ [ [ 1, 0 ], [ 0, 0 ] ] ] ) gap> a.name:= "a";; gap> s1:= Subalgebra( a, [ One(a) ] ); Subalgebra( a, [ [ [ 1, 0 ], [ 0, 1 ] ] ] ) gap> IsCentral( a, s1 ); IsFinite( s1 ); true false gap> s2:= Subalgebra( a, [] ); Subalgebra( a, [ ] ) gap> IsFinite( s2 ); IsTrivial( s2 ); true true
39.19 Vector Space Functions for Algebras
A finite dimensional F-algebra A is always a finite dimensional
F-vector space.
Thus in GAP3, an algebra is a vector space (see IsVectorSpace),
and vector space functions such as Base
and Dimension
are applicable
to algebras.
gap> a:= UnitalAlgebra( Rationals, [ [ [ 1, 0 ], [ 0, 0 ] ] ] ); UnitalAlgebra( Rationals, [ [ [ 1, 0 ], [ 0, 0 ] ] ] ) gap> Dimension( a ); 2 gap> Base( a ); [ [ [ 1, 0 ], [ 0, 1 ] ], [ [ 0, 0 ], [ 0, 1 ] ] ]
The vector space structure is used also by the set theoretic functions.
39.20 Algebra Functions for Algebras
The functions desribed in this section compute certain subalgebras
of a given algebra, e.g., Centre
computes the centre of an algebra.
They return algebra records as described in Algebra Records for the computed subalgebras. Some functions may not terminate if the given algebra has an infinite set of elements, while other functions may signal an error in such cases.
Here the term ``subalgebra'' is used in a mathematical sense. But in GAP3, every algebra is either a parent algebra or a subalgebra of a unique parent algebra. If you compute the centre C of an algebra U with parent algebra A then C is a subalgebra of U but its parent algebra is A (see Parent Algebras and Subalgebras).
Centralizer( A, x )
Centralizer( A, U )
:The centralizer of an element x in A is defined as the set C of elements c of A such that c and x commute.
The centralizer of an algebra U in A is defined as the set C of elements c of A such that c commutes with every element of U.
gap> a:= MatAlgebra( GF(2), 2 );; gap> a.name:= "a";; gap> m:= [ [ 1, 1 ], [ 0, 1 ] ] * Z(2);; gap> Centralizer( a, m ); UnitalSubalgebra( a, [ [ [ Z(2)^0, 0*Z(2) ], [ 0*Z(2), Z(2)^0 ] ], [ [ 0*Z(2), Z(2)^0 ], [ 0*Z(2), 0*Z(2) ] ] ] )
Centre( A )
:
gap> c:= Centre( a ); UnitalSubalgebra( a, [ [ [ Z(2)^0, 0*Z(2) ], [ 0*Z(2), Z(2)^0 ] ] ] )
Closure( U, a )
Closure( U, S )
Let U be an algebra with parent algebra A and let a be an element
of A. Then Closure
returns the closure C of U and a as
subalgebra of A. The closure C of U and a is the subalgebra
generated by U and a.
Let U and S be two algebras with a common parent algebra A. Then
Closure
returns the subalgebra of A generated by U and S.
gap> Closure( c, m ); UnitalSubalgebra( a, [ [ [ Z(2)^0, 0*Z(2) ], [ 0*Z(2), Z(2)^0 ] ], [ [ Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0 ] ] ] )
TrivialSubalgebra( U )
Let U be an algebra with parent algebra A. Then TrivialSubalgebra
returns the trivial subalgebra T of U, as subalgebra of A.
gap> a:= MatAlgebra( GF(2), 2 );; gap> a.name:= "a";; gap> TrivialSubalgebra( a ); Subalgebra( a, [ ] )
Operation( A, M )
Let A be an F-algebra for a field F, and M an A-module of
F-dimension n. With respect to a chosen F-basis of M, the action
of an element of A on M can be described by an n × n matrix
over F. This induces an algebra homomorphism from A onto a matrix
algebra AM, with action on its natural module equivalent to the action
of A on M.
The matrix algebra AM can be computed as Operation( A, M )
.
Operation( A, B )
returns the operation of the algebra A on an A-module M with respect to the vector space basis B of M.
Note that contrary to the situation for groups, the operation domains of algebras are not lists of elements but domains.
For constructing the algebra homomorphism from A onto AM, and the module homomorphism from M onto the equivalent AM-module, see OperationHomomorphism for Algebras and Module Homomorphisms, respectively.
gap> a:= UnitalAlgebra( Rationals, [ [ [ 1, 0 ], [ 0, 0 ] ] ] );; gap> m:= Module( a, [ [ 1, 0 ] ] );; gap> op:= Operation( a, m ); UnitalAlgebra( Rationals, [ [ [ 1 ] ] ] ) gap> mat1:= PermutationMat( (1,2,3), 3, GF(2) );; gap> mat2:= PermutationMat( (1,2), 3, GF(2) );; gap> u:= Algebra( GF(2), [ mat1, mat2 ] );; u.name:= "u";; gap> nat:= NaturalModule( u );; nat.name:= "nat";; gap> q:= nat / FixedSubmodule( nat );; gap> op1:= Operation( u, q ); UnitalAlgebra( GF(2), [ [ [ 0*Z(2), Z(2)^0 ], [ Z(2)^0, Z(2)^0 ] ], [ [ Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0 ] ] ] ) gap> b:= Basis( q, [ [ 0, 1, 1 ], [ 0, 0, 1 ] ] * Z(2) );; gap> op2:= Operation( u, b ); UnitalAlgebra( GF(2), [ [ [ Z(2)^0, Z(2)^0 ], [ Z(2)^0, 0*Z(2) ] ], [ [ Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0 ] ] ] ) gap> IsEquivalent( NaturalModule( op1 ), NaturalModule( op2 ) ); true
If the dimension of M is zero then the elements of AM cannot be
represented as GAP3 matrices. The result is a null algebra, see
NullAlgebra, NullAlgebra
.
39.23 OperationHomomorphism for Algebras
OperationHomomorphism( A, B )
returns the algebra homomorphism (see Algebra Homomorphisms) with
source A and range B, provided that B is a matrix algebra that was
constructed as operation of A on a suitable module M using
Operation( A, M )
, see Operation for Algebras.
gap> ophom:= OperationHomomorphism( a, op ); OperationHomomorphism( UnitalAlgebra( Rationals, [ [ [ 1, 0 ], [ 0, 0 ] ] ] ), UnitalAlgebra( Rationals, [ [ [ 1 ] ] ] ) ) gap> Image( ophom, a.1 ); [ [ 1 ] ] gap> Image( ophom, Zero( a ) ); [ [ 0 ] ] gap> PreImagesRepresentative( ophom, [ [ 2 ] ] ); [ [ 2, 0 ], [ 0, 2 ] ]
An algebra homomorphism φ is a mapping that maps each element of an algebra A, called the source of φ, to an element of an algebra B, called the range of φ, such that for each pair x, y ∈ A we have (xy)φ = xφ yφ and (x + y)φ = xφ + yφ.
An algebra homomorphism of unital algebras is unital if the zero-th power of elements in the source is mapped to the zero-th power of elements in the range.
At the moment, only operation homomorphisms are supported in GAP3 (see OperationHomomorphism for Algebras).
39.25 Mapping Functions for Algebra Homomorphisms
This section describes how the mapping functions defined in chapter Mappings are implemented for algebra homomorphisms. Those functions not mentioned here are implemented by the default functions described in the respective sections.
Image( hom )
Image( hom, H )
Images( hom, H )
The image of a subalgebra under a algebra homomorphism is computed by computing the images of a set of generators of the subalgebra, and the result is the subalgebra generated by those images.
PreImagesRepresentative( hom, elm )
gap> a:= UnitalAlgebra( Rationals, [ [ [ 1, 0 ], [ 0, 0 ] ] ] );; gap> a.name:= "a";; gap> m:= Module( a, [ [ 1, 0 ] ] );; gap> op:= Operation( a, m ); UnitalAlgebra( Rationals, [ [ [ 1 ] ] ] ) gap> ophom:= OperationHomomorphism( a, op ); OperationHomomorphism( a, UnitalAlgebra( Rationals, [ [ [ 1 ] ] ] ) ) gap> Image( ophom, a.1 ); [ [ 1 ] ] gap> Image( ophom, Zero( a ) ); [ [ 0 ] ] gap> PreImagesRepresentative( ophom, [ [ 2 ] ] ); [ [ 2, 0 ], [ 0, 2 ] ]
This section describes the operations and functions available for algebra elements.
Note that algebra elements may exist independently of an algebra, e.g., you can write down two matrices and compute their sum and product without ever defining an algebra that contains them.
Comparisons of Algebra Elements
g = h
:true
if the algebra elements g
and h are equal and to false
otherwise.
g <> h
:true
if the algebra elements g and h are not equal
and to false
otherwise.
g < h
g <= h
g >= h
g > h
The operators <
, <=
, >=
and >
evaluate to true
if the algebra
element g is strictly less than, less than or equal to, greater than or
equal to and strictly greater than the algebra element h. There is no
general ordering on all algebra elements, so g and h should lie in
the same parent algebra. Note that for elements of finitely presented
algebra, comparison means comparison with respect to the underlying free
algebra (see Elements of Finitely Presented Algebras).
Arithmetic Operations for Algebra Elements
a * b
a + b
a - b
The operators *
, +
and -
evaluate to the product, sum and difference
of the two algebra elements a and b. The operands must of course
lie in a common parent algebra, otherwise an error is signalled.
a / c
returns the quotient of the algebra element a by the nonzero element c of the base field of the algebra.
a ^ i
returns the i-th power of an algebra element a and a positive integer i. If i is zero or negative, perhaps the result is not defined, or not contained in the algebra generated by a.
list + a
a + list
list * a
a * list
In this form the operators +
and *
return a new list where each entry
is the sum resp. product of a and the corresponding entry of list.
Of course addition resp. multiplication must be defined between a and
each entry of list.
IsAlgebraElement( obj )
returns true
if obj, which may be an object of
arbitrary type, is an algebra element, and false
otherwise. The function
will signal an error if obj is an unbound variable.
gap> IsAlgebraElement( (1,2) ); false gap> IsAlgebraElement( NullMat( 2, 2 ) ); true gap> IsAlgebraElement( FreeAlgebra( Rationals, 1 ).1 ); true
Algebras and their subalgebras are represented by records. Once an algebra record is created you may add record components to it but you must not alter information already present.
Algebra records must always contain the components isDomain
and
isAlgebra
. Subalgebras contain an additional component parent
.
The components generators
, zero
and one
are not necessarily
contained.
The contents of important record components of an algebra A is described below.
The category components are
isDomain
:true
.
isAlgebra
:true
.
isUnitalAlgebra
:true
) if A is a unital algebra.
The identification components are
field
:
generators
:generators
.
If generators
is not bound it can be computed using Generators
.
parent
:
zero
:Zero
.
The component operations
contains the operations record of A.
This will usually be one of AlgebraOps
, UnitalAlgebraOps
, or a
record for more specific algebras.
FFList( F )
returns for a finite field F a list l of all elements of F in an ordering that is compatible with the ordering of field elements in the MeatAxe share library (see chapter The MeatAxe).
The element of F corresponding to the number n is
l[ n+1 ]
,
and the canonical number of the field element z is
Position( l, z ) -1
.
gap> FFList( GF( 8 ) ); [ 0*Z(2), Z(2)^0, Z(2^3), Z(2^3)^3, Z(2^3)^2, Z(2^3)^6, Z(2^3)^4, Z(2^3)^5 ]
(This program was originally written by Meinolf Geck.)
gap3-jm