# Additive Codes

- [Introduction](introduction.md)

- [Construction of Additive Codes](creation.md)

  - [Construction of General Additive Codes](creation.md#construction-of-general-additive-codes)

    - [`AdditiveCode<F, K, n | L>: FldFin, RngIntElt, List → Code`](creation.md#constructor-constructor-additivecode-fldfin-rngintelt-list-code)

    - [`AdditiveCode(G): ModMatRngElt → CodeAdd`](creation.md#function-additivecode-modmatrngelt)

    - [`AdditiveCode(K, G): FldFin, ModMatRngElt → CodeAdd`](creation.md#function-additivecode-fldfin-modmatrngelt)

    - [`Example: Add Lin Diff`](creation.md#example-ex-f9cba7)

    - [`Example: Code Add From Matrix`](creation.md#example-ex-9d93b8)

    - [`AdditiveCode(K, C): FldFin, Code → CodeAdd`](creation.md#function-additivecode-fldfin-code)

    - [`Example: Code Add From Code`](creation.md#example-ex-8b74a8)

    - [`Example: Code Add From Code Fail`](creation.md#example-ex-770cac)

  - [Some Trivial Additive Codes](creation.md#some-trivial-additive-codes)

    - [`AdditiveZeroCode(F, K, n): FldFin, FldFin, RngIntElt → CodeAdd`](creation.md#function-additivezerocode-fldfin-fldfin-rngintelt)

    - [`AdditiveRepetitionCode(F, K, n): FldFin, FldFin, RngIntElt → Code`](creation.md#function-additiverepetitioncode-fldfin-fldfin-rngintelt)

    - [`AdditiveZeroSumCode(F, K, n): FldFin, FldFin, RngIntElt → Code`](creation.md#function-additivezerosumcode-fldfin-fldfin-rngintelt)

    - [`AdditiveUniverseCode(F, K, n): FldFin, FldFin, RngIntElt → Code`](creation.md#function-additiveuniversecode-fldfin-fldfin-rngintelt)

    - [`RandomAdditiveCode(F, K, n, k): FldFin, FldFin, RngIntElt, RngIntElt → Code`](creation.md#function-randomadditivecode-fldfin-fldfin-rngintelt-rngintelt)

    - [`Example: Simple Code Chain`](creation.md#example-ex-24f23c)

- [Invariants of an Additive Code](access.md)

  - [The Ambient Space and Alphabet](access.md#the-ambient-space-and-alphabet)

    - [`Alphabet(C): Code → Rng`](access.md#function-alphabet-code)

    - [`Field(C): Code → Rng`](access.md#function-field-code)

    - [`CoefficientField(C): Code → Rng`](access.md#function-coefficientfield-code)

    - [`AmbientSpace(C): Code → ModTupRng`](access.md#function-ambientspace-code)

    - [`Generic(C): Code → Code`](access.md#function-generic-code)

    - [`Example: Alphabet Coeff Field`](access.md#example-ex-b0a75c)

  - [Basic Numerical Invariants](access.md#basic-numerical-invariants)

    - [`Length(C): Code → RngIntElt`](access.md#function-length-code)

    - [`Dimension(C): Code → FldRatElt`](access.md#function-dimension-code)

    - [`NumberOfGenerators(C): Code → RngIntElt`](access.md#function-numberofgenerators-code)

    - [`Ngens(C): Code → RngIntElt`](access.md#function-ngens-code)

    - [`# C: Code → RngIntElt`](access.md#operation-operation-code-rngintelt)

    - [`InformationRate(C): Code → FldPrElt`](access.md#function-informationrate-code)

  - [The Code Space](access.md#the-code-space)

    - [`GeneratorMatrix(C): Code → ModMatFldElt`](access.md#function-generatormatrix-code)

    - [`BasisMatrix(C): Code → ModMatRngElt`](access.md#function-basismatrix-code)

    - [`Basis(C): Code → [ ModTupRngElt ]`](access.md#function-basis-code)

    - [`Generators(C): Code → { ModTupFldElt }`](access.md#function-generators-code)

    - [`C . i: Code, RngIntElt → ModTupFldElt`](access.md#operation-operation-code-rngintelt-modtupfldelt)

  - [The Dual Space](access.md#the-dual-space)

    - [`Dual(C): CodeAdd → CodeAdd`](access.md#function-dual-codeadd)

    - [`ParityCheckMatrix(C): Code → ModMatFldElt`](access.md#function-paritycheckmatrix-code)

- [Operations on Codewords](element.md)

  - [Construction of a Codeword](element.md#construction-of-a-codeword)

    - [`C ! [a₁, ..., aₙ]: Code, [ RngElt ] → ModTupRngElt`](element.md#operation-op-code-rngelt)

    - [`elt< C | a₁, ..., aₙ>: Code, List → ModTupRngElt`](element.md#constructor-constructor-elt-code-list-modtuprngelt)

    - [`C ! u: Code, ModTupRngElt → ModTupRngElt`](element.md#operation-op-code-modtuprngelt)

    - [`C ! 0: Code, RngIntElt → ModTupRngElt`](element.md#operation-op-code-rngintelt)

    - [`Random(C): Code → ModTupRngElt`](element.md#function-random-code)

  - [Arithmetic Operations on Codewords](element.md#arithmetic-operations-on-codewords)

    - [`u + v: ModTupRngElt, ModTupRngElt → ModTupRngElt`](element.md#operation-op-plus-modtuprngelt-modtuprngelt)

    - [`- u: ModTupRngElt → ModTupRngElt`](element.md#operation-operation-modtuprngelt-modtuprngelt)

    - [`u - v: ModTupRngElt, ModTupRngElt → ModTupRngElt`](element.md#operation-op-minus-modtuprngelt-modtuprngelt)

    - [`a * u: RngElt, ModTupRngElt → ModTupRngElt`](element.md#operation-op-times-rngelt-modtuprngelt)

    - [`Normalize(u): ModTupRngElt → ModTupRngElt`](element.md#function-normalize-modtuprngelt)

  - [Distance and Weight](element.md#distance-and-weight)

    - [`Distance(u, v): ModTupRngElt, ModTupRngElt → RngIntElt`](element.md#function-distance-modtuprngelt-modtuprngelt)

    - [`Weight(u): ModTupRngElt → RngIntElt`](element.md#function-weight-modtuprngelt)

  - [Vector Space and Related Operations](element.md#vector-space-and-related-operations)

    - [`(u, v): ModTupRngElt, ModTupRngElt → RngElt`](element.md#literal-literal-u-v-modtuprngelt-modtuprngelt-rngelt)

    - [`InnerProduct(u, v): ModTupRngElt, ModTupRngElt → RngElt`](element.md#function-innerproduct-modtuprngelt-modtuprngelt)

    - [`TraceInnerProduct(K, u, v): FldFin, ModTupFldElt, ModTupFldElt → FldFinElt`](element.md#function-traceinnerproduct-fldfin-modtupfldelt-modtupfldelt)

    - [`Support(w): ModTupRngElt → { RngIntElt }`](element.md#function-support-modtuprngelt)

    - [`Coordinates(C, u): Code, ModTupRngElt → [ RngFinElt ]`](element.md#function-coordinates-code-modtuprngelt)

    - [`Parent(w): ModTupRngElt → ModTupRng`](element.md#function-parent-modtuprngelt)

    - [`Rotate(u, k): ModTupRngElt, RngIntElt → ModTupRngElt`](element.md#function-rotate-modtuprngelt-rngintelt)

    - [`Rotate(~u, k): ModTupRngElt, RngIntElt`](element.md#function-rotate-modtuprngelt-rngintelt-ref)

    - [`Trace(u, S): ModTupFldElt, FldFin → ModTupFldElt`](element.md#function-trace-modtupfldelt-fldfin)

    - [`Trace(u): ModTupFldElt → ModTupFldElt`](element.md#function-trace-modtupfldelt)

  - [Predicates for Codewords](element.md#predicates-for-codewords)

    - [`u eq v: ModTupRngElt, ModTupRngElt → BoolElt`](element.md#operation-op-eq-modtuprngelt-modtuprngelt)

    - [`u ne v: ModTupRngElt, ModTupRngElt → BoolElt`](element.md#operation-op-ne-modtuprngelt-modtuprngelt)

    - [`IsZero(u): ModTupRngElt → BoolElt`](element.md#function-iszero-modtuprngelt)

  - [Accessing Components of a Codeword](element.md#accessing-components-of-a-codeword)

    - [`u[i]: ModTupRngElt, RngIntElt → RngElt`](element.md#literal-literal-u-i-modtuprngelt-rngintelt-rngelt)

    - [`u[i] := x;`](element.md#literal-literal-u-i-x)

- [Subcodes](subcode.md)

  - [The Subcode Constructor](subcode.md#the-subcode-constructor)

    - [`sub<C | L>: CodeAdd, List → CodeAdd`](subcode.md#constructor-constructor-sub-codeadd-list-codeadd)

    - [`Subcode(C, k): CodeAdd, RngIntElt → CodeAdd`](subcode.md#function-subcode-codeadd-rngintelt)

    - [`Subcode(C, S): CodeAdd, { RngIntElt } → Code`](subcode.md#function-subcode-codeadd-rngintelt-2)

    - [`SubcodeBetweenCode(C1, C2, k): CodeAdd, CodeAdd, RngIntElt → CodeAdd`](subcode.md#function-subcodebetweencode-codeadd-codeadd-rngintelt)

    - [`SubcodeWordsOfWeight(C, w): CodeAdd, RngIntElt → CodeAdd`](subcode.md#function-subcodewordsofweight-codeadd-rngintelt)

    - [`SubcodeWordsOfWeight(C, S): CodeAdd, { RngIntElt } → CodeAdd`](subcode.md#function-subcodewordsofweight-codeadd-rngintelt-2)

    - [`Example: Subcode Between Code`](subcode.md#example-ex-18722c)

  - [Sum, Intersection and Dual](subcode.md#sum-intersection-and-dual)

    - [`C + D: CodeAdd, CodeAdd → CodeAdd`](subcode.md#operation-op-plus-codeadd-codeadd)

    - [`C meet D: Code, Code → Code`](subcode.md#operation-op-meet-code-code)

    - [`Dual(C): Code → Code`](subcode.md#function-dual-code)

  - [Membership and Equality](subcode.md#membership-and-equality)

    - [`u in C: ModTupRngElt, CodeAdd → BoolElt`](subcode.md#operation-op-in-modtuprngelt-codeadd)

    - [`u notin C: ModTupRngElt, CodeAdd → BoolElt`](subcode.md#operation-op-notin-modtuprngelt-codeadd)

    - [`C subset D: Code, Code → BoolElt`](subcode.md#operation-op-subset-code-code)

    - [`C notsubset D: Code, Code → BoolElt`](subcode.md#operation-operation-notsubset-code-code-boolelt)

    - [`C eq D: Code, Code → BoolElt`](subcode.md#operation-op-eq-code-code)

    - [`C ne D: Code, Code → BoolElt`](subcode.md#operation-op-ne-code-code)

- [Properties of Codes](Boolean.md)

  - [`IsSelfDual(C): Code → BoolElt`](Boolean.md#function-isselfdual-code)

  - [`IsSelfOrthogonal(C): Code → BoolElt`](Boolean.md#function-isselforthogonal-code)

  - [`IsPerfect(C): Code → BoolElt`](Boolean.md#function-isperfect-code)

  - [`IsProjective(C): Code → BoolElt`](Boolean.md#function-isprojective-code)

  - [`IsAdditiveProjective(C): CodeAdd → BoolElt`](Boolean.md#function-isadditiveprojective-codeadd)

- [The Weight Distribution](structural.md)

  - [The Minimum Weight](structural.md#the-minimum-weight)

    - [`MinimumWeight(C: parameters): CodeAdd → RngIntElt`](structural.md#function-minimumweight-codeadd)

    - [`MinimumDistance(C: parameters): CodeAdd → RngIntElt`](structural.md#function-minimumdistance-codeadd)

    - [`Example: Additive Minweight`](structural.md#example-ex-1dafbe)

  - [The Weight Distribution](structural.md#id1)

    - [`WeightDistribution(C): CodeAdd → [ <RngIntElt, RngIntElt> ]`](structural.md#function-weightdistribution-codeadd)

    - [`DualWeightDistribution(C): CodeAdd → [ <RngIntElt, RngIntElt> ]`](structural.md#function-dualweightdistribution-codeadd)

  - [The Weight Enumerator](structural.md#the-weight-enumerator)

    - [`WeightEnumerator(C): CodeAdd → RngMPolElt`](structural.md#function-weightenumerator-codeadd)

    - [`CompleteWeightEnumerator(C): CodeAdd → RngMPolElt`](structural.md#function-completeweightenumerator-codeadd)

    - [`CompleteWeightEnumerator(C, u): Code, ModTupFldElt → RngMPolElt`](structural.md#function-completeweightenumerator-code-modtupfldelt)

  - [The MacWilliams Transform](structural.md#the-macwilliams-transform)

    - [`MacWilliamsTransform(n, k, q, W): RngIntElt, RngIntElt, RngIntElt, [ <RngIntElt, RngIntElt> ] → [ <RngIntElt, RngIntElt> ]`](structural.md#function-macwilliamstransform-rngintelt-rngintelt-rngintelt-rngintelt-rngintelt)

  - [Words](structural.md#words)

    - [`Words(C, w: parameters): Code, RngIntElt → { ModTupFldElt }`](structural.md#function-words-code-rngintelt)

    - [`NumberOfWords(C, w): Code, RngIntElt → RngIntElt`](structural.md#function-numberofwords-code-rngintelt)

    - [`WordsOfBoundedWeight(C, l, u: parameters): Code, RngIntElt, RngIntElt → { ModTupFldElt }`](structural.md#function-wordsofboundedweight-code-rngintelt-rngintelt)

- [Families of Linear Codes](families.md)

  - [Cyclic Codes](families.md#cyclic-codes)

    - [`AdditiveCyclicCode(v): ModTupFldElt → CodeAdd`](families.md#function-additivecycliccode-modtupfldelt)

    - [`AdditiveCyclicCode(K, v): FldFin, ModTupFldElt → CodeAdd`](families.md#function-additivecycliccode-fldfin-modtupfldelt)

    - [`AdditiveCyclicCode(Q): [ModTupFldElt] → CodeAdd`](families.md#function-additivecycliccode-modtupfldelt-2)

    - [`AdditiveCyclicCode(K, Q): FldFin, [ModTupFldElt] → CodeAdd`](families.md#function-additivecycliccode-fldfin-modtupfldelt-2)

    - [`AdditiveCyclicCode(n, f): RngIntElt, RngUPolElt → CodeAdd`](families.md#function-additivecycliccode-rngintelt-rngupolelt)

    - [`AdditiveCyclicCode(K, n, f): FldFin, RngIntElt, RngUPolElt → CodeAdd`](families.md#function-additivecycliccode-fldfin-rngintelt-rngupolelt)

    - [`AdditiveCyclicCode(n, Q): RngIntElt, [RngUPolElt] → CodeAdd`](families.md#function-additivecycliccode-rngintelt-rngupolelt-2)

    - [`AdditiveCyclicCode(K, n, Q): FldFin, RngIntElt, [RngUPolElt] → CodeAdd`](families.md#function-additivecycliccode-fldfin-rngintelt-rngupolelt-2)

    - [`AdditiveCyclicCode(v4, v2): ModTupFldElt, ModTupFldElt → CodeAdd`](families.md#function-additivecycliccode-modtupfldelt-modtupfldelt)

    - [`AdditiveCyclicCode(n, f4, f2): RngIntElt, RngUPolElt, RngUPolElt → CodeAdd`](families.md#function-additivecycliccode-rngintelt-rngupolelt-rngupolelt)

  - [Quasicyclic Codes](families.md#quasicyclic-codes)

    - [`AdditiveQuasiCyclicCode(n, Q): RngIntElt, SeqEnum[RngUPolElt] → CodeAdd`](families.md#function-additivequasicycliccode-rngintelt-seqenum-rngupolelt)

    - [`AdditiveQuasiCyclicCode(K, n, Q): FldFin, RngIntElt, SeqEnum[RngUPolElt] → CodeAdd`](families.md#function-additivequasicycliccode-fldfin-rngintelt-seqenum-rngupolelt)

    - [`AdditiveQuasiCyclicCode(n, Q, h): RngIntElt, SeqEnum[RngUPolElt], RngIntElt → CodeAdd`](families.md#function-additivequasicycliccode-rngintelt-seqenum-rngupolelt-rngintelt)

    - [`AdditiveQuasiCyclicCode(K, n, Q, h): FldFin, RngIntElt, SeqEnum[RngUPolElt], RngIntElt → CodeAdd`](families.md#function-additivequasicycliccode-fldfin-rngintelt-seqenum-rngupolelt-rngintelt)

    - [`AdditiveQuasiCyclicCode(Q): SeqEnum[ModTupFldElt] → CodeAdd`](families.md#function-additivequasicycliccode-seqenum-modtupfldelt)

    - [`AdditiveQuasiCyclicCode(K, Q): FldFin, SeqEnum[ModTupFldElt] → CodeAdd`](families.md#function-additivequasicycliccode-fldfin-seqenum-modtupfldelt)

    - [`AdditiveQuasiCyclicCode(Q, h): SeqEnum[ModTupFldElt], RngIntElt → CodeAdd`](families.md#function-additivequasicycliccode-seqenum-modtupfldelt-rngintelt)

    - [`AdditiveQuasiCyclicCode(K, Q, h): FldFin, SeqEnum[ModTupFldElt], RngIntElt → CodeAdd`](families.md#function-additivequasicycliccode-fldfin-seqenum-modtupfldelt-rngintelt)

- [New Codes from Old](operation.md)

  - [Standard Constructions](operation.md#standard-constructions)

    - [`AugmentCode(C): CodeAdd → Code`](operation.md#function-augmentcode-codeadd)

    - [`CodeComplement(C, S): Code, Code → Code`](operation.md#function-codecomplement-code-code)

    - [`DirectSum(C, D): Code, Code → Code`](operation.md#function-directsum-code-code)

    - [`DirectSum(Q): [Code] → Code`](operation.md#function-directsum-code)

    - [`DirectProduct(C, D): Code, Code → Code`](operation.md#function-directproduct-code-code)

    - [`ExtendCode(C): CodeAdd → CodeAdd`](operation.md#function-extendcode-codeadd)

    - [`ExtendCode(C, n): Code, RngIntElt → Code`](operation.md#function-extendcode-code-rngintelt)

    - [`PadCode(C, n): CodeAdd, RngIntElt → CodeAdd`](operation.md#function-padcode-codeadd-rngintelt)

    - [`PlotkinSum(C1, C2): Code, Code → Code`](operation.md#function-plotkinsum-code-code)

    - [`PlotkinSum(C1, C2, C3: parameters): Code, Code, Code → Code`](operation.md#function-plotkinsum-code-code-code)

    - [`PunctureCode(C, i): CodeAdd, RngIntElt → Code`](operation.md#function-puncturecode-codeadd-rngintelt)

    - [`PunctureCode(C, S): CodeAdd, { RngIntElt } → Code`](operation.md#function-puncturecode-codeadd-rngintelt-2)

    - [`ShortenCode(C, i): Code, RngIntElt → Code`](operation.md#function-shortencode-code-rngintelt)

    - [`ShortenCode(C, S): Code, { RngIntElt } → Code`](operation.md#function-shortencode-code-rngintelt-2)

  - [Combining Codes](operation.md#combining-codes)

    - [`C1 cat C2: CodeAdd, CodeAdd → CodeAdd`](operation.md#operation-operation-cat-codeadd-codeadd-codeadd)

    - [`Juxtaposition(C1, C2): Code, Code → Code`](operation.md#function-juxtaposition-code-code)

- [Automorphism Group](additive-automorphisms.md)

  - [`AutomorphismGroup(C): CodeAdd → GrpPerm`](additive-automorphisms.md#function-automorphismgroup-codeadd)

  - [`PermutationGroup(C): CodeAdd → GrpPerm`](additive-automorphisms.md#function-permutationgroup-codeadd)
