research/codes: algebraic codes

This commit is contained in:
darkfi
2025-04-11 21:10:45 +02:00
parent 15d3e2ea95
commit 19386e4488
4 changed files with 96 additions and 0 deletions

View File

@@ -0,0 +1,13 @@
K = GF(3)
V = VectorSpace(K, 4)
C = V.subspace([
[1, 1, 1, 0],
[0, 1, 2, 1]
])
print(list(C))
c = C.random_element()
assert set(tuple(v - c) for v in C) == set(tuple(v) for v in C)

View File

@@ -0,0 +1,33 @@
q = 7
n = 6
k = 4
d = n - k + 1
K = GF(q)
F.<z> = K[]
f = 4 + 3*z + 1*z^2 + 5*z^3
# Let βᵢ = K(i - 1)
f_β1 = f(z=0)
f_β2 = f(z=1)
f_β3 = f(z=2)
f_β4 = f(z=3)
f_β5 = f(z=4)
f_β6 = f(z=5)
f_β7 = f(z=6)
f = vector([f_β1, f_β2, f_β3, f_β4, f_β5, f_β6, f_β7])
g0 = vector(a^0 for a in K)
g1 = vector(a^1 for a in K)
g2 = vector(a^2 for a in K)
g3 = vector(a^3 for a in K)
g4 = vector(a^4 for a in K)
g5 = vector(a^5 for a in K)
g6 = vector(a^6 for a in K)
f1 = 4*g0 + 3*g1 + 1*g2 + 5*g3
assert f == f1

View File

@@ -0,0 +1,11 @@
F = GF(11)
K.<x> = F[]
n, k = 10 , 5
C = codes.GeneralizedReedSolomonCode(F.list()[:n], k)
E = C.encoder("EvaluationPolynomial")
f = x^2 + 3*x + 10
c = E.encode(f)
print(c)

View File

@@ -0,0 +1,39 @@
K = GF(5)
n = 5
d = 3
# Ambient vector space
V = VectorSpace(K, n)
assert V([1, 1, 0, 0, 0]).hamming_weight() == 2
def is_codespace(W, d):
return all(v.hamming_weight() >= d for v in W if v != 0)
done = False
for j in range(2, n+1):
print(f"trying k={j}")
for W in V.subspaces(j):
if is_codespace(W, d):
C = W
done = True
break
if done:
break
k = C.dimension()
E = V.subspace([
[1, 0, 0, 0, 0],
[0, 1, 0, 0, 0],
])
#assert C.dimension() == k
assert E.dimension() == d - 1
assert C.intersection(E).dimension() == 0
assert C.dimension() + E.dimension() == (C + E).dimension()
# But C + E are both subspaces of V which is dim N
assert (C + E).dimension() <= n