% This file was created automatically from addmagma.msk.
% DO NOT EDIT!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%A  addmagma.msk               GAP documentation                Thomas Breuer
%%
%A  @(#)$Id: addmagma.msk,v 1.4 2002/04/15 10:02:26 sal Exp $
%%
%Y  (C) 1998 School Math and Comp. Sci., University of St.  Andrews, Scotland
%Y  Copyright (C) 2002 The GAP Group
%%
\PreliminaryChapter{Additive Magmas}

This chapter deals with domains that are closed under addition `+',
which are called *near-additive magmas* in {\GAP}.
Together with the domains closed under multiplication `\*', (see~"Magmas"),
they are the basic algebraic structures.
In many cases, the addition is commutative (see~"IsAdditivelyCommutative"),
the domain is called an *additive magma* then;
every module (see~"Modules"), vector space (see~"Vector Spaces"),
ring (see~"Rings"), or field (see~"Fields and Division Rings")
is an additive magma.
In the cases of al *(near-)additive magma-with-zero* or
*(near-)additive magma-with-inverses*,
additional additive structure is present
(see~"(Near-)Additive Magma Categories").


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{(Near-)Additive Magma Categories}

\>IsNearAdditiveMagma( <obj> ) C

A *near-additive magma* in {\GAP} is a domain $A$ with an associative
but not necessarily commutative addition `+'$: A \times A \rightarrow A$.


\>IsNearAdditiveMagmaWithZero( <obj> ) C

A *near-additive magma-with-zero* in {\GAP} is a near-additive magma $A$
with an operation `0\*' (or `Zero') that yields the zero of $A$.

So a near-additive magma-with-zero <A> does always contain a unique
additively neutral element $z$, i.e., $z + a = a = a + z$ holds for all
$a \in A$ (see~"AdditiveNeutralElement").
This element $z$ can be computed with the operation `Zero' (see~"Zero")
as `Zero( <A> )', and $z$ is also equal to `Zero( <elm> )' and to
`0\*<elm>' for each element <elm> in <A>.

*Note* that
a near-additive magma containing a zero may *not* lie in the category
`IsNearAdditiveMagmaWithZero' (see~"Domain Categories").


\>IsNearAdditiveGroup( <obj> ) C
\>IsNearAdditiveMagmaWithInverses( <obj> ) C

A *near-additive group* in {\GAP} is a near-additive magma-with-zero $A$
with an operation `-1\*'$: A \rightarrow A$ that maps each element <a> of
$A$ to its additive inverse `-1\*<a>' (or `AdditiveInverse( <a> )',
see~"AdditiveInverse").

The addition `+' of $A$ is assumed to be associative,
so a near-additive group is not more than a
*near-additive magma-with-inverses*.
`IsNearAdditiveMagmaWithInverses' is just a synonym for
`IsNearAdditiveGroup',
and can be used alternatively in all function names involving
`NearAdditiveGroup'.

Note that not every trivial near-additive magma is a near-additive
magma-with-zero,
but every trivial near-additive magma-with-zero is a near-additive group.



\>IsAdditiveMagma( <obj> ) C

An *additive magma* in {\GAP} is a domain $A$ with an associative and
commutative addition `+'$: A \times A \rightarrow A$,
see~"IsNearAdditiveMagma" and "IsAdditivelyCommutative".


\>IsAdditiveMagmaWithZero( <obj> ) C

An *additive magma-with-zero* in {\GAP} is an additive magma $A$ with
an operation `0\*' (or `Zero') that yields the zero of $A$.

So an additive magma-with-zero <A> does always contain a unique
additively neutral element $z$, i.e., $z + a = a = a + z$ holds for all
$a \in A$ (see~"AdditiveNeutralElement").
This element $z$ can be computed with the operation `Zero' (see~"Zero")
as `Zero( <A> )', and $z$ is also equal to `Zero( <elm> )' and to
`0\*<elm>' for each element <elm> in <A>.

*Note* that
an additive magma containing a zero may *not* lie in the category
`IsAdditiveMagmaWithZero' (see~"Domain Categories").


\>IsAdditiveGroup( <obj> ) C
\>IsAdditiveMagmaWithInverses( <obj> ) C

An *additive group* in {\GAP} is an additive magma-with-zero $A$ with an
operation `-1\*'$: A \rightarrow A$ that maps each element <a> of $A$ to
its additive inverse `-1\*<a>' (or `AdditiveInverse( <a> )',
see~"AdditiveInverse").

The addition `+' of $A$ is assumed to be commutative and associative,
so an additive group is not more than an *additive magma-with-inverses*.
`IsAdditiveMagmaWithInverses' is just a synonym for `IsAdditiveGroup',
and can be used alternatively in all function names involving
`AdditiveGroup'.

Note that not every trivial additive magma is an additive
magma-with-zero,
but every trivial additive magma-with-zero is an additive group.




%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{(Near-)Additive Magma Generation}

\>NearAdditiveMagma( <gens> ) F
\>NearAdditiveMagma( <Fam>, <gens> ) F

returns the (near-)additive magma $A$ that is generated by the elements
in the list <gens>, that is,
the closure of <gens> under addition `+'.
The family <Fam> of $A$ can be entered as first argument;
this is obligatory if <gens> is empty (and hence also $A$ is empty).


\>NearAdditiveMagmaWithZero( <gens> ) F
\>NearAdditiveMagmaWithZero( <Fam>, <gens> ) F

returns the (near-)additive magma-with-zero $A$ that is generated by
the elements in the list <gens>, that is,
the closure of <gens> under addition `+' and `Zero'.
The family <Fam> of $A$ can be entered as first argument;
this is obligatory if <gens> is empty (and hence $A$ is trivial).


\>NearAdditiveGroup( <gens> ) F
\>NearAdditiveGroup( <Fam>, <gens> ) F

returns the (near-)additive group $A$ that is generated by the elements
in the list <gens>, that is,
the closure of <gens> under addition `+', `Zero', and `AdditiveInverse'.
The family <Fam> of $A$ can be entered as first argument;
this is obligatory if <gens> is empty (and hence $A$ is trivial).



The underlying operations for which methods can be installed are the
following.

\>NearAdditiveMagmaByGenerators( <gens> ) O
\>NearAdditiveMagmaByGenerators( <Fam>, <gens> ) O


\>NearAdditiveMagmaWithZeroByGenerators( <gens> ) O
\>NearAdditiveMagmaWithZeroByGenerators( <Fam>, <gens> ) O


\>NearAdditiveGroupByGenerators( <gens> ) O
\>NearAdditiveGroupByGenerators( <Fam>, <gens> ) O



Substructures of an additive magma can be formed as follows.

\>SubnearAdditiveMagma( <D>, <gens> ) F
\>SubnearAdditiveMagmaNC( <D>, <gens> ) F

`SubadditiveMagma' returns the near-additive magma generated by
the elements in the list <gens>, with parent the domain <D>.
`SubadditiveMagmaNC' does the same, except that it is not checked
whether the elements of <gens> lie in <D>.


\>SubnearAdditiveMagmaWithZero( <D>, <gens> ) F
\>SubnearAdditiveMagmaWithZeroNC( <D>, <gens> ) F

`SubadditiveMagmaWithZero' returns the near-additive magma-with-zero
generated by the elements in the list <gens>, with parent the domain <D>.
`SubadditiveMagmaWithZeroNC' does the same, except that it is not checked
whether the elements of <gens> lie in <D>.


\>SubnearAdditiveGroup( <D>, <gens> ) F
\>SubnearAdditiveGroupNC( <D>, <gens> ) F

`SubadditiveGroup' returns the near-additive group generated by
the elements in the list <gens>, with parent the domain <D>.
`SubadditiveGroupNC' does the same, except that it is not checked
whether the elements of <gens> lie in <D>.



%The following functions can be used to regard a collection as an additive
%magma.
%
%Declaration{AsAdditiveMagma}
%Declaration{AsSubadditiveMagma}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Attributes and Properties for (Near-)Additive Magmas}

\>IsAdditivelyCommutative( <A> ) P

A near-additive magma <A> in {\GAP} is *additively commutative* if
for all elements $a, b \in <A>$ the equality $a + b = b + a$ holds.

Note that the commutativity of the *multiplication* `\*' in a
multiplicative structure can be tested with `IsCommutative',
(see~"IsCommutative").



\>GeneratorsOfNearAdditiveMagma( <A> ) A
\>GeneratorsOfAdditiveMagma( <A> ) A

is a list <gens> of elements of the near-additive magma <A>
that generates <A> as a near-additive magma,
that is, the closure of <gens> under addition is <A>.


\>GeneratorsOfNearAdditiveMagmaWithZero( <A> ) A
\>GeneratorsOfAdditiveMagmaWithZero( <A> ) A

is a list <gens> of elements of the near-additive magma-with-zero <A>
that generates <A> as a near-additive magma-with-zero,
that is,
the closure of <gens> under addition and `Zero' (see~"Zero") is <A>.


\>GeneratorsOfNearAdditiveGroup( <A> ) A
\>GeneratorsOfAdditiveGroup( <A> ) A

is a list <gens> of elements of the near-additive group <A>
that generates <A> as a near-additive group,
that is, the closure of <gens> under addition, taking the zero element,
and taking additive inverses (see~"AdditiveInverse") is <A>.



\>AdditiveNeutralElement( <A> ) A

returns the element $z$ in the near-additive magma <A> with the property
that $z + a = a = a + z$ holds for all $a \in <A>$,
if such an element exists.
Otherwise `fail' is returned.

A near-additive magma that is not a near-additive magma-with-zero
can have an additive neutral element $z$;
in this case, $z$ *cannot* be obtained as `Zero( <A> )' or as `0\*<elm>'
for an element <elm> in <A>, see~"Zero".


\>TrivialSubnearAdditiveMagmaWithZero( <A> ) A

is the additive magma-with-zero that has the zero of
the near-additive magma-with-zero <A> as only element.




%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Operations for (Near-)Additive Magmas}

\>ClosureNearAdditiveGroup( <A>, <a> ) O
\>ClosureNearAdditiveGroup( <A>, <B> ) O

returns the closure of the near-additive magma <A> with the element <a>
or the near-additive magma <B>, w.r.t.~addition, taking the zero element,
and taking additive inverses.




%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%E

