% 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.4.1 2007/08/28 12:58:50 gap 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 all *(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