1 | initial version |

If i correctly understood the task, than the following is a possibility.

First of all, let us generate the given code in sage, and print some information on its basis. Adapted sage code:

```
S.<A> = PolynomialRing( GF(2) )
K.<a> = GF(2^2, modulus=A^2+A+1)
R.<x> = PolynomialRing( K )
V = x^3 + x^2 + a*x + a + 1;
L.<b> = K.extension( V )
delta = 28
# the bigger this delta (=28 here), the bigger g, so the smaller our code
g = lcm( [ (b^k).minpoly() for k in [1..28] ] )
# note that g divides x^63-1 since each minimal poly in the list above does it
C = codes.CyclicCode( generator_pol = g, length = 2^6-1 )
print "The code C is:\n%s\n" % C
print "The basis of C is...\n"
for v in C.basis():
print v
```

Results:

```
The code C is:
[63, 14] Cyclic Code over GF(4)
The basis of C is...
(1, 0, 0, a + 1, a + 1, a, a, a, 0, 1, a, 0, 1, 1, a + 1, 0, 1, 1, a + 1, a, ...
(0, 1, 0, 0, a + 1, a + 1, a, a, a, 0, 1, a, 0, 1, 1, a + 1, 0, 1, 1, a + 1, ...
(0, 0, 1, 0, 0, a + 1, a + 1, a, a, a, 0, 1, a, 0, 1, 1, a + 1, 0, 1, 1, ...
(0, 0, 0, 1, 0, 0, a + 1, a + 1, a, a, a, 0, 1, a, 0, 1, 1, a + 1, 0, 1, 1, ...
(0, 0, 0, 0, 1, 0, 0, a + 1, a + 1, a, a, a, 0, 1, a, 0, 1, 1, a + 1, 0, 1, ...
(0, 0, 0, 0, 0, 1, 0, 0, a + 1, a + 1, a, a, a, 0, 1, a, 0, 1, 1, a + 1, 0, ...
(0, 0, 0, 0, 0, 0, 1, 0, 0, a + 1, a + 1, a, a, a, 0, 1, a, 0, 1, 1, a + 1, ...
(0, 0, 0, 0, 0, 0, 0, 1, 0, 0, a + 1, a + 1, a, a, a, 0, 1, a, 0, 1, 1, ...
(0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, a + 1, a + 1, a, a, a, 0, 1, a, 0, 1, 1, a ...
(0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, a + 1, a + 1, a, a, a, 0, 1, a, 0, 1, 1, ...
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, a + 1, a + 1, a, a, a, 0, 1, a, 0, 1, ...
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, a + 1, a + 1, a, a, a, 0, 1, a, 0, ...
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, a + 1, a + 1, a, a, a, 0, 1, a, ...
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, a + 1, a + 1, a, a, a, 0, 1, ...
```

The results for the basis vectors were manually truncated.

Now, if i understand the construction of the new code from this one, we build a new basis, replacing the above entries as follows:

- $0$ by $(0,0)$
- $1$ by $(1,0)$
- $a$ by $(0,1)$
- $a+1$ by $(1,1)$.

For this, we construct the matrix $E$ from the above list of vectors, as rows, using the natural lift. Code:

```
def get_lift(c):
"""
for an element c in K, lift it to GF(2)^2
"""
lift = S(c).coefficients(sparse=False)
return lift + (2-len(lift))*[ GF(2)(0) ]
MS = MatrixSpace( GF(2), 14, 2*63 )
E = [] # and we append
for v in C.basis():
w = [] # and we append
for entry in v:
w += get_lift( entry )
E.append( w )
D = LinearCode( MS( E ) )
print D
```

I think, `D`

is the needed code.

Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.