Documentation

TauCeti.InformationTheory.Coding.Binary.Golay.Basic

The extended binary Golay code #

The extended binary Golay code is the row space of the systematic matrix [I₁₂ | B], where B is the bordered reverse-circulant matrix over ZMod 2. The first twelve coordinates recover the message. The generator is also a parity-check matrix.

This doubly-even self-dual binary code has parameters [24, 12, 8]. Its self-duality and divisibility of weights by four make it an input to Construction A, which associates an even unimodular lattice to such a code. The weight distribution and homogeneous weight enumerator describe the numbers of codewords of each weight, and every one of the twenty-four coordinates is met by a codeword of weight eight, an octad.

The matrix convention is that of Huffman and Pless, Fundamentals of Error-Correcting Codes, §1.9.1 and Chapter 9.

The bordered reverse-circulant block in the binary Golay generator. Its interior is indexed by sums modulo eleven in {0, 1, 3, 4, 5, 9}.

Instances For
    @[simp]
    theorem TauCeti.BinaryGolay.block_apply (i j : Fin 12) :
    block i j = if i = 0 then if j = 0 then 0 else 1 else if j = 0 then 1 else if (↑i + ↑j - 2) % 11 ∈ {0, 1, 3, 4, 5, 9} then 1 else 0

    The entries of the border and of the reverse-circulant interior.

    The systematic generator [I₁₂ | B], in the conventional coordinate order.

    Instances For
      noncomputable def TauCeti.BinaryGolay.code :

      The extended binary Golay code, with twenty-four ordered coordinates.

      Instances For

        The code is the row space of its displayed generator.

        The generator has the systematic block form [I₁₂ | B].

        @[simp]

        The information columns of the generator form the identity matrix.

        @[simp]

        The last twelve columns of the generator form block.

        @[simp]

        Encoding a message keeps it in the first twelve coordinates and appends its product with block.

        @[simp]
        theorem TauCeti.BinaryGolay.mem_code_iff {x : Fin 24 → ZMod 2} :
        x ∈ code ↔ ∃ (a : Fin 12 → ZMod 2), Fin.append a (Matrix.vecMul a block) = x

        Membership in the extended Golay code is systematic encoding of a message.

        @[simp]

        The generator has zero Euclidean Gram matrix.

        Encoding is injective because the generator is systematic.

        noncomputable def TauCeti.BinaryGolay.encodingEquiv :
        (Fin 12 → ZMod 2) ≃ₗ[ZMod 2] ↥code

        Systematic encoding gives a linear equivalence between messages and codewords.

        Instances For
          @[simp]

          The encoding equivalence sends a message to its systematic encoding.

          @[simp]

          Decoding reads the first twelve coordinates.

          @[simp]

          The extended binary Golay code has dimension twelve.

          @[simp]

          Its displayed generator has rank twelve.

          @[simp]

          The extended binary Golay code has 4096 words.

          The extended binary Golay code is Euclidean self-dual.

          @[simp]

          The Euclidean dual of the extended binary Golay code is the code itself.

          @[simp]

          The same matrix is a parity-check matrix for the extended Golay code.

          theorem TauCeti.BinaryGolay.hammingNorm_mem {x : Fin 24 → ZMod 2} (hx : x ∈ code) :
          hammingNorm x ∈ {0, 8, 12, 16, 24}

          The only weights of the extended binary Golay code are 0, 8, 12, 16, and 24.

          @[simp]

          The extended binary Golay code is doubly even.

          The extended binary Golay code is Type II: doubly even and Euclidean self-dual.

          @[simp]
          theorem TauCeti.BinaryGolay.weightDistribution_code (w : ℕ) :
          (↑code).weightDistribution w = if w = 0 ∨ w = 24 then 1 else if w = 8 ∨ w = 16 then 759 else if w = 12 then 2576 else 0

          The full weight distribution of the extended binary Golay code.

          @[simp]

          The homogeneous weight enumerator is X²⁴ + 759 X¹⁶Y⁸ + 2576 X¹²Y¹² + 759 X⁸Y¹⁶ + Y²⁴.

          Every coordinate of the extended binary Golay code is met by an octad, a codeword of weight eight.

          The extended binary Golay code has only even weights, so it lies in the single-parity-check code.

          @[simp]

          The extended binary Golay code has minimum distance eight.

          theorem TauCeti.BinaryGolay.eight_le_hammingNorm {x : Fin 24 → ZMod 2} (hx : x ∈ code) (hx0 : x ≠ 0) :

          Every nonzero codeword of the extended binary Golay code has weight at least eight.