In coding theory, the dual code of a linear code
is the linear code defined by
where
is a scalar product. In linear algebra terms, the dual code is the annihilator of C with respect to the bilinear form ⟨ ⋅ ⟩ {\displaystyle \langle \cdot \rangle } . The dimension of C and its dual always add up to the length n:
A generator matrix for the dual code is the parity-check matrix for the original code and vice versa. The dual of the dual code is always the original code.
A self-dual code is one which is its own dual. This implies that n is even and dim C = n/2. If a self-dual code is such that each codeword's weight is a multiple of some constant c > 1 {\displaystyle c>1} , then it is of one of the following four types:[1]
Codes of types I, II, III, or IV exist only if the length n is a multiple of 2, 8, 4, or 2 respectively.
If a self-dual code has a generator matrix of the form G = [ I k | A ] {\displaystyle G=[I_{k}|A]} , then the dual code C ⊥ {\displaystyle C^{\perp }} has generator matrix [ − A ¯ T | I k ] {\displaystyle [-{\bar {A}}^{T}|I_{k}]} , where I k {\displaystyle I_{k}} is the ( n / 2 ) × ( n / 2 ) {\displaystyle (n/2)\times (n/2)} identity matrix and a ¯ = a q ∈ F q {\displaystyle {\bar {a}}=a^{q}\in \mathbb {F} _{q}} .