mirror of
https://github.com/darkrenaissance/darkfi.git
synced 2026-01-09 14:48:08 -05:00
research/codes: algebraic codes
This commit is contained in:
13
script/research/codes/gen.sage
Normal file
13
script/research/codes/gen.sage
Normal 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)
|
||||
|
||||
33
script/research/codes/reed-solomon.sage
Normal file
33
script/research/codes/reed-solomon.sage
Normal 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
|
||||
|
||||
11
script/research/codes/rssage.sage
Normal file
11
script/research/codes/rssage.sage
Normal 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)
|
||||
|
||||
39
script/research/codes/singleton.sage
Normal file
39
script/research/codes/singleton.sage
Normal 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
|
||||
|
||||
Reference in New Issue
Block a user