# 41.11 Operations for Row Modules

Here we mention only those facts about operations that have to be told in addition to those for row spaces (see Operations for Row Spaces).

Comparisons of Modules

`M1 = M2`
`M1 < M2`

Equality and ordering of (quotients of) row modules are defined as equality Operations for Row Spaces).

This means that equal modules may be inequivalent as modules, and even the acting rings may be different. For testing equivalence of modules, see IsEquivalent for Row Modules.

```    gap> s:= Submodule( nat, [ [ 1, 1, 1 ] * Z(2) ] );
Submodule( nat, [ [ Z(2)^0, Z(2)^0, Z(2)^0 ] ] )
gap> s2:= Submodule( nat, [ [ 1, 1, 0 ] * Z(2) ] );
Submodule( nat, [ [ Z(2)^0, Z(2)^0, 0*Z(2) ] ] )
gap> s = s2;
false
gap> s < s2;
true ```

Arithmetic Operations of Modules

`M1 + M2` :

returns the sum of the two modules M1 and M2, that is, the smallest module containing both M1 and M2. Note that the same ring must act on M1 and M2.

`M1 / M2` :

returns the factor module of the module M1 by its submodule M2. Note that the same ring must act on M1 and M2.
```    gap> s1:= Submodule( nat, [ [ 1, 1, 1 ] * Z(2) ] );
Submodule( nat, [ [ Z(2)^0, Z(2)^0, Z(2)^0 ] ] )
gap> q:= nat / s1;
nat / [ [ Z(2)^0, Z(2)^0, Z(2)^0 ] ]
gap> s2:= Submodule( nat, [ [ 1, 1, 0 ] * Z(2) ] );
Submodule( nat, [ [ Z(2)^0, Z(2)^0, 0*Z(2) ] ] )
gap> s3:= s1 + s2;
Submodule( nat,
[ [ Z(2)^0, Z(2)^0, Z(2)^0 ], [ 0*Z(2), 0*Z(2), Z(2)^0 ] ] )
gap> s3 = nat;
true ```

GAP 3.4.4
April 1997