# Properties of Codes

For the following operators, $C$ and $D$ are codes defined as a subset (or subspace) of the vector space $V$.

## `IsSelfDual(C): Code -> BoolElt`

Return `true` if and only if the linear code $C$ is self-dual (or self-orthogonal) (i.e. $C$ equals the dual of $C$).

## `IsSelfOrthogonal(C): Code -> BoolElt`

Return `true` if and only if the linear code $C$ is self-orthogonal (i.e. $C$ is contained in the dual of $C$).

## `IsPerfect(C): Code -> BoolElt`

Return `true` if and only if the linear code $C$ is perfect; that is, if and only if the cardinality of $C$ is equal to the size of the sphere packing bound of $C$.

## `IsProjective(C): Code -> BoolElt`

Returns `true` if and only if the (non-quantum) code $C$ is projective over its alphabet.

## `IsAdditiveProjective(C): CodeAdd -> BoolElt`

Returns `true` if and only if the additive code $C$ is projective over its coefficient field. It is possible that some of the columns may not be independent with respect to the alphabet of the code.
