# Properties of Codes

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

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

Return `true` if and only if the linear code $C$ is a cyclic code.

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

Return `true` if and only if the linear code $C$ is self-dual. (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$).

## `IsHermitianSelfDual(C): CodeLinFld -> BoolElt`

Return `true` if and only if the linear code $C$ equals the Hermitian dual of $C$.

## `IsHermitianSelfOrthogonal(C): CodeLinFld -> BoolElt`

Return `true` if and only if the linear code $C$ is contained in the Hermitian dual of $C$.

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

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

Returns `true` if and only if the linear code $C$ is maximum-distance separable; that is, has parameters $[n, k, n - k + 1]$.

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

Returns `true` if and only if the linear code $C$ is equidistant.

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

Returns `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$.

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

Returns `true` if and only if the binary linear code $C$ is nearly perfect.

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

Returns `true` if and only if $C$ is an even linear binary code, (i.e., all codewords have even weight). If `true`, then Magma will adjust the upper and lower minimum weight bounds of $C$ if possible.

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

Returns `true` if and only if $C$ is a doubly even linear binary code, (i.e., all codewords have weight divisible by $4$). If `true`, then Magma will adjust the upper and lower minimum weight bounds of $C$ if possible.

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

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

## `Example: Self Dual (ex-a18e45)`

We look at an extended quadratic residue code over $GF(2)$ which is self-dual, and then confirm it manually.

```magma
> C := ExtendCode( QRCode(GF(2),23) );
> C:Minimal;
[24, 12, 8] Linear Code over GF(2)
> IsSelfDual(C);
true
> D := Dual(C);
> D: Minimal;
[24, 12, 8] Linear Code over GF(2)
> C eq D;
true

```

## `Example: Self Orthogonal (ex-f19a8e)`

We look at the `CordaroWagnerCode` of length $6$, which is self-orthogonal, and then confirm it manually.

```magma
> C := CordaroWagnerCode(6);
> C;
[6, 2, 4] Linear Code over GF(2)
Generator matrix:
[1 1 0 0 1 1]
[0 0 1 1 1 1]
> IsSelfOrthogonal(C);
true
> D := Dual(C);
> D;
[6, 4, 2] Linear Code over GF(2)
Generator matrix:
[1 0 0 1 0 1]
[0 1 0 1 0 1]
[0 0 1 1 0 0]
[0 0 0 0 1 1]
> C subset D;
true

```
