# Elements of Modules

## Creation of Elements

### `M ! v: ModDed, SeqEnum -> ModDedElt`

### `M ! v: ModDed, ModDedElt -> ModDedElt`

### `M ! v: ModDed, ModElt -> ModDedElt`

Coerce $v$ into an element of $M$. $v$ can be a sequence of length dimension of $M$, a module element or vector or an element of another module over a Dedekind domain which is compatible with $M$.

### `Example: Coerce Quo (ex-2c7014)`

Let `Mod` and its submodules and quotient modules be as in the sub and quotient module example above.

```magma
> m := 4*Mod.1;
> m;
(4/1*M.1 0)
> Q1!m;
( 4/1*M.1 0 )
> Q2!m;
( 4/1*M.1 0 )
> m := Mod!m;
> Q3!m;
( 4/1*M.1 0 )
> Q4!m;
( 4/1*M.1 0 )
> S1!m;
>> S1!m;
     ^
Runtime error in `!': Illegal coercion
LHS: ModDed
RHS: ModDedElt
> S1!Mod!V!0;
(  )
> S2!Mod!Mod.2;
( M.1 )
> S3!Mod!(4*Mod.1);
( 4/1*M.1 0 )

```

## Arithmetic with Elements

Basic arithmetic can be performed with elements of a module over a Dedekind domain.

### `x + y: ModDedElt, ModDedElt -> ModDedElt`

The sum of the module elements.

### `x - y: ModDedElt, ModDedElt -> ModDedElt`

The difference of the module elements.

### `u * c: ModDedElt, RngElt -> ModDedElt`

### `c * u: RngElt, ModDedElt -> ModDedElt`

The product of the module element $u$ and the ring element $c$.

### `u / c: ModDedElt, RngElt -> ModDedElt`

The product of $u$ and $1/c$ if it lies in the parent module of $u$.

### `I * u: RngOrdIdl, ModDedElt -> ModDed`

### `I * u: RngFunOrdIdl, ModDedElt -> ModDed`

### `u * I: ModDedElt, RngOrdIdl -> ModDed`

### `u * I: ModDedElt, RngFunOrdIdl -> ModDed`

The module containing elements which are products of $u$ and an element lying in $I$.

## Other Functions on Elements

Elements of modules over a Dedekind domain can be tested for equality and represented as a sequence.

### `x eq y: ModDedElt, ModDedElt -> Bool`

Return `true` if $x$ and $y$ are the same element of a module.

### `IsZero(a): ModDedElt -> BoolElt`

Returns whether the module element $a$ is zero.

### `ElementToSequence(a): ModDedElt -> SeqEnum`

### `Eltseq(a): ModDedElt -> SeqEnum`

The module element $a$ expressed as a sequence.
