# Predicates

## `IsZero(M): ModMPol -> ModMPol`

Given a module $M$, return whether $M$ is the zero module.

## `M subset N: ModMPol, ModMPol -> BoolElt`

Given compatible modules $M$ and $N$ (ie, embedded in the same ambient module), return whether $M$ is a submodule of $N$. This will generally involve module Gröbner basis and normal form computations to check that the generators of $M$ lie in $N$.

## `M eq N: ModMPol, ModMPol -> BoolElt`

Given compatible modules $M$ and $N$ (ie, embedded in the same ambient module), return whether $M$ equals $N$. The function checks that appropriate module Gröbner bases of $M$ and $N$ are equal.

## `IsFree(M): ModMPol -> BoolElt`

Given an $R$-module $M$, return whether $M$ is free. $M$ is free iff $M$ is isomorphic to the module $R^k$ for some $k$. Such a $k$ need not equal the degree of $M$ but will equal the rank of $M$ (as defined in the next section) if $M$ is free. The function checks whether a minimised presentation of $M$ has trivial relations or not.
