Find the irreducible factors of the polynomial
in .(You should include proofs that the factors you describe are irreducible).
Note that the multiplicative group
has order 6 and hence contains an element of order 3; in fact, has order 3 since .Now,
has order which is not divisible by 9. And has order . So has an element of order .Consider the polynomial
. Any root of this polynomial satisfies and ; this shows that the multiplicative order of is 9.In particular,
contains no roots of ; since has degree 3, it is irreducible over .If
is a root of , then and are also roots (note that ). Thus andNotice that
is a splitting field for over .Note that
is also an element of of order . Arguing as before, any root of is an element of multiplicative order .On the other hand, since
, is also an element of order 9.Moreover, the roots of its minimal polynomial
have the form , (since ), and (since .Thus
Now, notice that
. Thus the minimal polynomial of divides . It follows thatNow,
and since we see that . ThusLet
, put , and consider the subspace defined by Find the minimal distance of this code.For example, if
, and then(Corrected)
If
for , note that .In particular, for a non-zero vector we see that
.On the other hand, a standard basis vector
has weight 1, so if , then .Thus
For a linear code, the minimal distance is simply the minimal weight of a non-zero vector; thus the minimal distance of
is .By an
-system we mean a pair , where is a finite dimensional vector space over and is an ordered finite family of points in (in general, points of need not be distinct – you should view as a list of points which may contain repetitions) such that spans as a vector space. Evidently .The parameters
are defined by where the maximum defining is taken over all linear hyperplanes and where points are counted with their multiplicity – i.e. .Gjven a
-system , let denote the dual space to and consider the linear mapping defined byShow that
is injective. is a linear mapping, so we just need to show that .Suppose that
and . This means that for . Since is linear, it follows that vanishes at any linear combination of the vectors .Since
spans by assumption, it follows that . This proves that is injective.Write
for the image of , so that is an -code. Show that the minimal distance of the code is given by .Write
for the minimal weight of ; we must argue thatLet
be a non-zero vector. We haveWrite
and note thatThus
In
the hyperplanes are precisely the kernels of functionals . Thus shows that it follows that .Conversely, let
be an -code, and put . Let be the dual basis to the standard basis. The restriction of to the subspace determines an element of . Write for the resulting list of vectors in ..Prove that the minimum distance
of the code satisfiesWe have
; the mapping is just the given inclusion. Indeed, let . The mapping is given byNow the equality
follows from the result of part (b).
Let
be the linear code over generated by the matrixFind a check matrix
for .= GF(5) k = VectorSpace(k,6) V =V.subspace([ V([1,0,0,1,1,2]), C 0,1,0,1,2,1]), V([0,0,1,2,1,1])]) V([ # generator matrix, in standard form = MatrixSpace(k,3,6).matrix(C.basis()) G G=> 1 0 0 1 1 2] [0 1 0 1 2 1] [0 0 1 2 1 1] [ = MatrixSpace(k,3,3).matrix([b[3:6] for b in G]) A # construct the check matrix, as a block matrix = block_matrix([[-A.transpose(), H 3,3).one()]], MatrixSpace(k,=False) subdivide H=> 4 4 3 1 0 0] [4 3 4 0 1 0] [3 4 4 0 0 1] [ ## verification: * G.T H => 0 0 0] [0 0 0] [0 0 0] [
Find the minimum distance of
.The minimal distance of
is 4.We check the weight of a vector using the following function:
def weight(v): = [x for x in v if x != 0] r return len(r)
Now, we can just find the minimal weight of the non-zero vectors of
, as follows:min([ weight(v) for v in C if v != 0]) => 4
Alternatively, you can investigate the columns of the check matrix
.= VectorSpace(k,3) # column space W # return the ith column of the 3xm matrix M def col(M,i): return W([ b[i] for b in M ]) # check whether the columns of the 3xm matrix M # specified by the list ll of indices are lin indep def cols_lin_indep(M,ll): = [ col(M,i) for i in ll ] vecs # the method `linear_dependence` returns a list # of *linear relations* # so we return True if `W.linear_dependence(vecs)` is # the empty list return W.linear_dependence(vecs) == [] # check whether all collections of r columns of the # 3xm matrix M are linearly independent def check(M,r): # get the number of columns of M. = len(list(M.T)) l # get all lists of r-element subses of the numbers 0,...,l-1 = map(list,Subsets(range(l),r)) al # return True iff `cols_lin_indep(M,ll)` is true for every # r-element subset ll of range(l) return all([ cols_lin_indep(M,ll) for ll in al]) 3) check(H,=> True 4) check(H,=> False
This shows that every collection of 3 columns of
H
is linearly independent, while there is some collection of 4 columns ofH
that is linearly dependent; thus .Decode the received vectors
and using syndrome decoding.The minimal distance of the code
is , so we should expect to correct error.We first make the lookup table
= { tuple(H*v):v for v in V if weight(v) <= 1 } lookup lookup=> 0, 0, 0): (0, 0, 0, 0, 0, 0), {(4, 4, 3): (1, 0, 0, 0, 0, 0), (3, 3, 1): (2, 0, 0, 0, 0, 0), (2, 2, 4): (3, 0, 0, 0, 0, 0), (1, 1, 2): (4, 0, 0, 0, 0, 0), (4, 3, 4): (0, 1, 0, 0, 0, 0), (3, 1, 3): (0, 2, 0, 0, 0, 0), (2, 4, 2): (0, 3, 0, 0, 0, 0), (1, 2, 1): (0, 4, 0, 0, 0, 0), (3, 4, 4): (0, 0, 1, 0, 0, 0), (1, 3, 3): (0, 0, 2, 0, 0, 0), (4, 2, 2): (0, 0, 3, 0, 0, 0), (2, 1, 1): (0, 0, 4, 0, 0, 0), (1, 0, 0): (0, 0, 0, 1, 0, 0), (2, 0, 0): (0, 0, 0, 2, 0, 0), (3, 0, 0): (0, 0, 0, 3, 0, 0), (4, 0, 0): (0, 0, 0, 4, 0, 0), (0, 1, 0): (0, 0, 0, 0, 1, 0), (0, 2, 0): (0, 0, 0, 0, 2, 0), (0, 3, 0): (0, 0, 0, 0, 3, 0), (0, 4, 0): (0, 0, 0, 0, 4, 0), (0, 0, 1): (0, 0, 0, 0, 0, 1), (0, 0, 2): (0, 0, 0, 0, 0, 2), (0, 0, 3): (0, 0, 0, 0, 0, 3), (0, 0, 4): (0, 0, 0, 0, 0, 4)} (
Now we can decode using the lookup table
def decode(v): return v-lookup[tuple(H*v)] in C) for v in [ V([0,2,3,4,3,2]), [ (decode(v), decode(v) 0,1,2,0,4,0])]] V([=> 1, 2, 3, 4, 3, 2), True), ((0, 1, 2, 0, 4, 3), True)] [((