Ver Fonte

research/codes: algebraic codes

darkfi há 1 ano atrás
pai
commit
19386e4488

+ 13 - 0
script/research/codes/gen.sage

@@ -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 - 0
script/research/codes/reed-solomon.sage

@@ -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 - 0
script/research/codes/rssage.sage

@@ -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 - 0
script/research/codes/singleton.sage

@@ -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
+