Algebraiczne aspekty kodowania i kryptografii
Transkrypt
Algebraiczne aspekty kodowania i kryptografii
Algebraiczne aspekty kodowania i kryptografii Kodowanie1: sformułowanie problemu 1 Przypuśćmy, że chcemy przesłać (przekazać) pewną informację. Wtedy informację i, którą checemy przesłać (informację przesyłaną) przekazujemy do kanału transmisyjnego. Po przesłaniu informacji i, po drugiej stronie kanału otrzymujemy jakąś informację (odebraną) T (i). Chcielibyśmy, aby zachodziła równość T (i) = i. Bardziej prawdopodobne jest jednak, że T (i) 6= i. Przykładem takiej sytuacji może być przesyłanie zdjęć z kosmosu. Chcemy, aby nawet po odebraniu informacji T (i) 6= i w jakiś sposób odtworzyć wysłaną informację i. Nietrudno zauważyć, że wtedy nie możemy przekazywać każdej możliwej informacji. Jeżeli po przesłaniu i możemy otrzymać T (i) 6= i i jeżeli możemy wysyłać informację T (i), to po odebraniu T (i) nie odtworzymy informacji przesyłanej. Tak jest, gdyż tę samą informację otrzymujemy w dwóch sytuacjach: gdy podczas przesłania i wystąpił błąd, oraz gdy bezbłędnie została przesłana informacja T (i). Komplikujemy więc schemat przesyłania: Informację przesyłaną najpierw odpowiednio preparujemy, będziemy mówić, że ją kodujemy, przesyłamy informację zakodowaną i mamy nadzieję, że nawet po otrzymaniu informacji zniekształconej uda nam się odczytać informację wysłaną (poprawić informację otrzymaną) i w końcu zdekodować. Informacją dla nas będą ciągi znaków (słowa nad pewnym alfabetem). Najczęściej będziemy posługiwać się alfabetem złożonym z 0 i 1. Symbolem | x | będziemy oznaczać długość słowa x. Będziemy zakładać, że ani znaki nie giną podczas przesyłania, ani nie pojawiają się znaki dodatkowe (a więc | i | = | T (i) |), a także, że przesyłamy informacje o ustalonej długości (długie informacje możemy dzielić na fragmenty o ustalonej długości). 1.1 Podstawowe definicje Niech n będzie ustaloną liczbą naturalną. Kodem długości n będziemy nazywać dowolny zbiór słów długości n. Elementy kodu będziemy nazywać słowami kodowymi. Najczęściej będziemy rozważąć kody złożone ze słów zerojedynkowych. Intuicje: Będziemy przesyłać wyłącznie słowa kodowe. Sposób kodowania informacji za pomocą słów kodowych nie ma żadnego znaczenia, choć czasem będzie można coś o nim powiedzieć. To, co będziemy mogli zrobić z odebraną informacją zależy wyłącznie od tego, co zostało fizycznie wysłane, a nie zależy od związanych z tym naszych intencji. Odległością Hamminga dwóch słów (tej samej długości) x = x0 x1 . . . xn−1 i y = y0 y1 . . . yn−1 nazywamy liczbę d(x, y) = | {i < n : xi 6= yi } |. 1 Według książki: Jiřı́ Adámek, Foundation of Coding 1 Lemat 1.1 Odległość Hamminga jest odległością, tzn. ma następujące własności (wymagane od pojęcia odległości na analizie matematycznej, geometrii, topologii itp.) 1) d(x, y) = 0 wtedy i tylko wtedy, gdy x = y, 2) d(x, y) = d(y, x) oraz 3) d(x, y) ¬ d(x, z) + d(z, Y ) dla wszystkich możliwych x, y i z. 2 Kulą o środku x ∈ {0, 1}n (otoczeniem słowa x) o promieniu r nazywamy Sr (x) = {y ∈ {0, 1}n : d(x, y) ¬ r}. Kolejne założenie: rozważamy takie sposoby przesyłania danych, które powodują wystąpienie najwyżej r błędów, a więc które spełniają warunek T (i) ∈ Sr (i) dla wszystkich przesyłanych informacji (słów kodowych) i (r to odpowiednio dobrana, ustalona liczba). Wtedy Sr (x) interpretujemy jako zbiór wszytkich informacji, które można otrzymać po wysłaniu informacji x. Kod K wykrywa r błędów, jeżeli dla każdych dwóch (róznych) słów kodowych x, y ∈ K, słowo y nie należy do Sr (x). Uzasadnienie definicji: najprostszy algorytm sprawdzający, czy podczas przesyłania słowa kodowego x wystąpił błąd polega na sprawdzaniu, czy otrzymaliśmy T (x), które jest słowem kodowym. Warunek z definicji kodu wykrywającego r błędów gwarantuje poprawność tego algorytmu przy założeniu, że podczas przesyłania informacji występuje najwyżej r błędów. Kod K koryguje r błędów, jeżeli dla każdych dwóch (róznych) słów kodowych x, y ∈ K, zbiory Sr (x) oraz Sr (y) są rozłączne. Uzasadnienie definicji: najprostszy algorytm korygujący błędy powstające podczas przesyłania polega na znalezieniu dla otrzymanego słowa y słowa kodowego x takiego, że y ∈ Sr (x). Także w tym przypadku warunek z definicji kodu korygującego r błędów gwarantuje poprawność tego algorytmu przy założeniu, że podczas przesyłania informacji występuje najwyżej r błędów. Dla kodu K minimalna odległość słów kodowych to liczba d(K) = min{d(x, y) : x, y ∈ K ∧ x 6= y}. Twierdzenie 1.2 Kod K wykrywa r błędów wtedy i tylko wtedy, gdy d(K) > r. Kod K koryguje r błędów wtedy i tylko wtedy, gdy d(K) > 2 · r. 2 1.2 Najprostsze przykłady Najprostszymi przykładami kodów są 1) kody powtórzeniowe, czyli zbiory {0n , 1n }. Minimalna odległość słów kodowych dla tych kodów jest równa długości kodu. Kod powtórzeniowy długości n wykrywa więc n − 1 błędów i koryguje (n − 1) div 2 błędów. 2) kody słów z parzystą liczbą zer (kody z bitem parzystości), czyli zbiory {~x ∈ {0, 1}n : d(~x, ~0) jest liczbą parzystą}. Można przedstawić je inaczej jako {x0 x1 x2 . . . xn−1 ∈ {0, 1}n : xn−1 = X i<n−1 xi mod 2}. Przy takim spojrzeniu ostatni bit słowa może być rozumiany jako informacja, czy przed nim występuje nieparzysta liczba jedynek (jedynka oznacza, że tak). Minimalna odległość słow kodowych w tym przypadku wynosi 2, kody te wykrywają jeden błąd. 3) kody słów z parzystą (ewentualnie: nieparzystą) liczbą jedynek. Jeżeli parzystość długości kodu jest taka, jak liczb jedynek, to są to kody z bitem parzystości. Kody nieparzystej długości złożone ze słów z parzystą liczbą jedynek są przykładami kodów nieliniowych (patrz dalej), ale mało ciekawymi. Operacja wzajemnej zamiany zer i jedynek przekształca je w kody z bitem parzystości i nie wpływa na istotne własności. 2 Nieco algebry liniowej 2.1 Ciała Ciałem nazywamy algebrę F z dodawaniem i mnożeniem, w której dodawanie jest łączne i przemienne, ma element neutralny 0 i każdy element ma przeciwny (więc ciało z samym dodawaniem jest grupą przemienną), podobnie mnożenie jest łączne i przemienne, ma element neutralny 1, każdy niezerowy element ma element odwrotny (więc F \ {0} z mnożeniem też jest grupą przemienną i w szczególności 0 6= 1), dodatkowo mnożenie jest rozdzielne względem dodawania. Przykładami ciał są algebry liczb rzeczywistych, wymiernych i zespolonych, a także dla dowolnej liczby pierwszej p algebry Zp złożone z liczb naturalnych < p z dodawaniem i mnożeniem modulo p. W szczególności, ciałem jest Z2 = {0, 1} z dodawaniem spełniającym 1 + 1 = 0 (inne, podobne równości w Z2 są takie, jak w każdym innym ciele). 2.2 Przestrzenie i podprzestrzenie liniowe Przestrzenią liniową nad ciałem F nazywamy algebrę z dodawaniem i mnożeniem przez elementy ciała F . Przestrzeń liniowa rozważana tylko z dodawaniem jest grupą przemienną (dodawanie jest łączne i przemienne, posiada element neutralny (zero) i każdy element ma element przeciwny). Elementy przestrzeni liniowej są lub są nazywane wektorami. Mnożenie w tym kontekscie to mnożenie wektora przez skalar z ciała F . Mnożenie ma własności przypominające prawa łączności i rozdzielności: (ab) · ~x = a · (b · ~x), a · (~x + ~y ) = a · ~x + a · ~y oraz (a + b) · ~x = a · ~x + b · ~x a także spełnia równość 1 · ~x = ~x, gdzie a, b ∈ F , a · oznacza mnożenie przez skalar (tę kropkę będziemy zwykle opuszczać). Ważnymi przykładami przestrzeni liniowych nad ciałem F są przestrzenie F n z działaniami zdefiniowanymi wzorami (x1 , . . . , xn ) + (y1 , . . . , yn ) = (x1 + y1 , . . . , xn + yn ) oraz a · (x1 , . . . , xn ) = (ax1 , . . . , axn ). Podprzestrzenią przestrzeni liniowej nazywamy jej niepusty podzbiór zamknięty ze względu na dodawanie i mnożenie przez wszystkie skalary. Podprzestrzenie liniowe same też są przestrzeniami, a więc działania ograniczone do podprzestrzeni mają wszystkie własności wymagane od działań w przestrzeniach liniowych. 2.3 2.3.1 Zbiory generatorów i bazy Podprzestrzeń generowana przez zbiór Niech V będzie przestrzenią liniową nad ciałem F , a X – podzbiorem V . Przypuśćmy, że ~x1 , . . . , ~xn ∈ V i a1 , . . . , an ∈ F . Kombinacją liniową tych wektorów z podanymi współcznnikami nazywamy wyrażenie n X ai~xi . i=1 Zbiór { n X ai~xi ∈ V : ~x1 , . . . , ~xm ∈ X ∧ a1 , . . . , an ∈ F } i=1 jest podprzestrzenią liniową przestrzeni V i nazywamy go podprzestrzenią generowaną przez X. Jeżeli X = {~x1 , . . . , ~xm }, to podprzestrzenią generowaną przez X jest { m X ai~xi ∈ V : a1 , . . . , am ∈ F }. i=1 Przestrzeń jest generowana przez X, jeżeli jest swoją podprzestrzenią generowaną przez X. W tym kontekscie zbiór X nazywamy zbiorem generatorów przestrzeni. Będziemy rozważać niemal wyłącznie przestrzenie liniowe mające skończone zbiory generatorów (skończenie generowalne). Uogólnienie niektórych definicji na przypadek dowolnych przestrzeni wymaga pewnej uwagi. 2.4 Zbiory liniowo niezależne Zbiór X złożony z wektorów ~x1 , . . . , ~xm jest liniowo niezależny, jeżeli wektor zerowy można przedstawić w postaci kombinacji tych wektorów w dokładnie jeden sposób, używając zer jako współczynników, a więc jeżeli warunek m X ai~xi = ~0 i=1 implikuje, że a1 = . . . = am = 0. Nietrudno zauważyć, że jeżeli ~x1 , . . . , ~xm są elementami zbioru liniowo niezależnego, to każdy wektor daje się przedstawić w postaci kombinacji liniowej tych wektorów w najwyżej jeden sposób, a więc warunek m X i=1 ai~xi = m X bi~xi i=1 implikuje, że a1 = b 1 , . . . a m = b m . 2.4.1 Bazy Bazą przestrzeni liniowej nazywamy dowolny liniowo niezależny zbiór generatorów. Przykładem bazy w przestrzeni F n jest zbiór złożony z wektorów ~e1 = (1, 0, . . . , 0), ~e2 = (0, 1, . . . , 0), . . . ~en = (0, 0, . . . , 1). Jest to tzw. baza standardowa. Dla tej bazy słuszny jest wzór (x1 , x2 , . . . , xn ) = n X xi~ei . i=1 Lemat 2.1 Każdy zbiór generatorów zawiera pewną bazę. Każdy zbiór liniowo niezależny jest zawarty w pewnej bazie. 2 Lemat 2.2 następujące warunki są równoważne: 1) B jest bazą, 2) B jest minimalnym zbiorem genaratorów, 3) B jest maksymalnym zbiorem liniowo niezależnym. 2 Lemat 2.3 Jeżeli X jest zbiorem generatorów zawartym w zbiorze liniowo niezależnym Y , to X = Y . 2 Lemat 2.4 Każde dwie bazy skończenie generowalnej przestrzeni liniowej mają tyle samo elementów. 2 Wymiarem skończenie generowalnej przestrzeni liniowej nazywamy liczbę elementów (dowolnej lub pewnej) bazy tej przestrzeni. Ważną własnością bazy ~x1 , . . . , ~xm jest fakt, że każda definicja następującej postaci: m X f( ai~xi ) = coś wyznaczonego jednoznacznie przez a1 , . . . , am i=1 jest poprawna i dobrze definiuje funkcję określoną na całej przestrzeni liniowej. 2.5 Funkcje liniowe Przyjmijmy, że V i W są przestrzeniami liniowymi nad tym samym ciałem F . Funkcję f : V → W nazywamy liniową, jeżeli f (a~x + b~y ) = af (~x) + bf (~y ) dla wszystkich skalarów a, b ∈ F i dla dowolnych wektorów ~x, ~y ∈ V . Funkcje liniowe to homomorfizmy przestrzeni liniowych i przekształcają ~0 na ~0. W szczególności, różnowartościową i liniową funkcję typu „na” nazywamy izomorfizmem przestrzeni liniowych. Funkcję liniową przyjmującą wartości w ciele F (albo w przestrzeni F 1 ) nazywamy funkcjonałem liniowym. 2.5.1 Definiowanie funkcji liniowych Lemat 2.5 Funkcje liniowe równe na zbiorze generatorów pewnej przestrzeni liniowej przyjmują te same wartości dla wszystkich wektorów z tej przestrzeni. 2 Lemat 2.6 Przypuśćmy,że wektory ~v1 , . . . , ~vm tworzą bazę przestrzeni V , a wektory w ~ 1, . . . , w ~ m są dowolnymi elementami przestrzeni W . Wtedy wzór f( m X ai~vi ) = i=1 m X ai w ~i i=1 definiuje funkcję liniową f : V → W taką, że f (~vi ) = w ~ i dla i = 1, . . . , m. Ponadto, taka funkcja f jest jednoznacznie określona. 2 Wniosek 2.7 Każde dwie przestrzenie liniowe tego samego wymiaru m są izomorficzne. W szczególności, jeżeli w ~ 1, . . . , w ~ m jest bazą przestrzeni W , to funkcja m f : F → W zdefiniowana wzorem f (a1 , a2 , . . . , am ) = m X ai w ~i i=1 jest izomorfizmem. 2 Wniosek 2.8 Przestrzeń liniowa wymiaru m nad skończonym ciałem F ma |F |m elementów. 2 2.5.2 Struktura funkcji liniowych Lemat 2.9 Przyjmijmy, że V jest przestrzenią liniową nad ciałem F o bazie ~v1 , ~v2 , . . . , ~vm . Każdy wzór postaci m X f( i=1 m X xi~vi ) = ( i=1 c1,i xi , m X c2,i xi , . . . , i=1 m X cn,i xi ) i=1 dla dowolnych skalarów ci,j ∈ F definiuje funkcję liniową f : V → F n . Co więcej, każda taka funkcja liniowa może zostać zdefiniowana w ten sposób. 2 Funkcję f : V → V zdefiniowaną wzorem f (~x) = ~a+~x nazywamy przesunięciem o wektor ~a. Symbolem ~a + K oznaczamy przesunięcie zbioru K o wektor ~a, czyli zbiór {~a + ~x : ~x ∈ K}. Jądrem ker(f ) przekształcenia liniowego f : V → W nazywamy zbiór {~x ∈ V : f (~x) = ~0}. Jądro dowolnego przekształcenia liniowego jest podprzestrzenią liniową jego dziedziny. Lemat 2.10 Przypuśćmy, że K jest jądrem przekształcenia liniowego f : V → W i ~a ∈ V . Wtedy {~x ∈ V : f (~x) = f (~a)} = ~a + K. 2 Lemat 2.11 Jeżeli funkcja liniowa f przekształca przestrzeń V na przestrzeń W i ma jądro K, to wymiar przestrzeni V jest sumą wymiaru obrazu f (V ) = W i wymiaru jądra K. Dowód. Weźmy bazę w ~ 1, w ~ 2, . . . , w ~ n przestrzeni W i bazę ~v1 , ~v2 , . . . , ~vk jądra K. Niech ~vk+1 , ~vk+2 , . . . , ~vk+m będą wektorami takimi, że f (~vk+i ) = w ~ i . Dowodzi się, że ~v1 , ~v2 , . . . , ~vk , ~vk+1 , . . . , ~vk+n jest bazą przestzreni V . 2 2.5.3 Zastosowanie do układów równań liniowych Rozważamy układ równań liniowych m X c1,i xi = b1 , i=1 m X c2,i xi = b2 , . . . , i=1 m X cn,i xi = bn . i=1 Odpowiadający mu układ jednorodny ma postać m X i=1 c1,i xi = 0, m X c2,i xi = 0, . . . , i=1 m X cn,i xi = 0. i=1 Możemy wziąć funkcję liniową f : F m → F n zdefiniowaną wzorem m X f (x1 , x2 , . . . , xm ) = ( i=1 c1,i xi , m X c2,i xi , . . . , i=1 m X cn,i xi ). i=1 Wtedy jądro przekształcenia f jest zbiorem K rozwiązań układu równań jednorodnych odpowiadających danemu. Dany układ może nie mieć rozwiązań. Jeżeli ma rozwiązanie (a1 , a2 , . . . , am ), to f (a1 , a2 , . . . , am ) = (b1 , b2 , . . . , bn ) i zbiorem jego rozwiązań jest (a1 , a2 , . . . , am )+K (oczywiście, K jest tu jądrem f ). Tak więc, aby rozwiązać układ równań liniowych, należy zbadać, czy ma rozwiązanie, jeżeli ma, to znaleźć jedno z nich, a następnie rozwiązać odpowiadający mu układ równań jednorodnych. 2.5.4 Iloczyn skalarny i dopełnienie ortogonalne Iloczynem skalarnym nazywamy funkcję · : F m × F m → F zdefiniowaną wzorem (x1 , x2 , . . . , xm ) · (y1 , y2 , . . . , ym ) = m X xi y i . i=1 Po ustaleniu któregokolwiek wektora-argumentu otrzymujemy z niej funkcjonał liniowy. Jest to więc funkcjonał dwuliniowy i to symetryczny: ~x · ~y = ~y · ~x. W przestrzeni R3 zachodzi znany wzór ~x · ~y = | ~x || ~y | sin ϕ, gdzie ϕ jest kątem między wektorami ~x i ~y . Wobec tego, wektory takie, że ~x · ~y = 0 nazywamy ortogonalnymi (prostopadłymi). Iloczyn skalarny pozwala na zdefiniowanie np. płaszczyzny prostopadłej do prostej. Należy pamiętać, że niezerowy wektor w R3 nie może być prostopadły do siebie, ale innych przypadkach – może być. Dopełnieniem ortogonalnym zbioru X nazywamy zbiór X ⊥ = {~y ∈ V : ∀ ~x ∈ X ~x · ~y = 0}. Lemat 2.12 Dopełnienie ortogonalne jest zawsze podprzestrzenią liniową. Jeżeli zbiór X generuje podprzestrzeń W , to X ⊥ = W ⊥ . 2 Lemat 2.13 Jeżeli W jest podprzestrzenią F m , to wymiar dopełnienia ortogonalnego W ⊥ jest różnicą liczby m i wymiaru W . Dowód. Przestrzeń L(W, F ) wszystkich funkcjonałów liniowych określonych na W jest tego samego wymiaru, co W . Weźmy bazę w ~ 1, w ~ 2, . . . , w ~ n przestrzeni W . Przyjmijmy, że fi jest funkcjonałem liniowym na W spełniającym równości fi (w ~ i ) = 1 oraz fi (w ~ j ) = 0 dla wszystkich j 6= i. Można dowieść, że funkcjonały f1 , f2 , . . . , fn są bazą przestrzeni L(W, F ). W szczególności, zachodzi wzór f= n X f (w ~ i )fi . i=1 Weźmy teraz funkcję ϕ : F m → L(W, F ) zdefiniowaną wzorem ϕ(~a)(~x) = ~a · ~x dla wszystkich ~x ∈ W. Jest to funkcja liniowa, a jej jądrem ker(ϕ) jest dopełnienie ortogonalne W ⊥ przestrzeni W . Zauważmy, że ϕ jest typu „na”. Każdy funkcjonał liniowy f określony na W można rozszerzyć do funkcjonału liniowego g określonego na F m . Funkcjonał g jest spełnia równość g(~x) = ~a · ~x dla pewnego ~a ∈ F m i dla wszystkich ~x ∈ F m . Tym bardziej f (~x) = ~a · ~x dla wszystkich ~x ∈ F m . Tak więc ϕ(~a) = f . Wiemy, że wymiar jądra przekształcenia jest różnicą wymiaru dziedziny i wymiaru obrazu. Stąd teza. 2 Wniosek 2.14 Dla dowolnej podprzestrzeni W ⊆ F m mamy zawieranie W ⊆ (W ⊥ )⊥ , a ponieważ obie te podprzestrzenie są tego samego wymiaru, więc W = (W ⊥ )⊥ . 2 2.5.5 Definiowanie podprzestrzeni Lemat 2.15 Niech W będzie podzbiorem przestrzeni F m . Następujące warunki są równoważne: 1) W jest podprzestrzenią, 2) W jest zbiorem wartości pewnej funkcji liniowej, 3) W jest zbiorem wartości pewnej funkcji liniowej f : F n → F m zdefiniowanej wzorem postaci f (x1 , x2 , . . . , xn ) = (x1 , x2 , . . . , xn , n X i=1 a1,i xi , . . . , n X am−n,i xi ) i=1 (z dokładnością do kolejności współrzędnych wartości funkcji), 4) W jest dopełnieniem ortogonalnym pewnej podprzestrzeni, 5) W jest zbiorem rozwiązań jednorodnego układu równań liniowych. 2 3 Kody liniowe Przypuśćmy, że rozważamy kody długości m nad alfabetem {0, 1}. Taki kod K jest liniowy, jeżeli jest podprzestrzenią liniową przestrzeni Z2m . Pojęcie kodu liniowego bez trudu uogólniamy na przypadek dowolnych ciał skończonych. Kod nad ciałem F jest liniowy, jeżeli jest podprzestrzenią liniową przestrzeni F n . Lemat 3.1 Jeżeli K jest kodem liniowym, to minimalna odległość słów kodowych d(K) jest równa min{d(~0, ~x) : ~x ∈ K ∧ ~x 6= ~0}, a więc jest równa minimalnej wadze niezerowego słowa kodowego (odległość słowa ~x ∈ Z2m od ~0, czyli d(~0, ~x), to liczba jedynek w słowie ~x, nazywana też wagą słowa ~x). 2 3.1 Macierze generujące i funkcje kodujące Niech w ~ 1, w ~ 2, . . . , w ~ n będzie bazą liniowego kodu K ⊆ F n . Macierzą generującą kodu K nazywamy macierz, której i-tym wierszem są kolejne litery (wyrazy, wspłórzędne) wektora w ~ i . Macierz generująca G w pewnym sensie definiuje kod K. Mamy bowiem K = {[x1 , x2 , . . . , xn ]G : x1 , x2 , . . . , xn ∈ F } ([x1 , x2 , . . . , xn ]G to iloczyn (w sensie mnożenia macierzy) jednowierszowej macierzy [x1 , x2 , . . . , xn ] i macierzy generującej G, wynikiem mnożenia jest jednowieszowa macierz, którą utożsamiamy np. z wektorem o odpowiednich współrzędnych). Funkcje kodujące nie odgrywają istotnej roli w teorii kodowania. Dla kodów liniowych można jednak podać kilka naturalnych sposobów definiowania funkcji kodującej. Taką jest funkcja f : F n → F m zdefiniowana wzorem f (x1 , x2 , . . . , xn ) = [x1 , x2 , . . . , xn ]G, gdzie G jest macierzą generującą. W algebrze liniowej taką funkcję definiuje się raczej wzorem f (x1 , x2 , . . . , xn ) = GT [x1 , x2 , . . . , xn ]T (T oznacza operację transponowania), ze względu na inny sposób zamiany wektorów na macierze (wektory zwykle odpowiadają macierzom jednokolumnowym)). Macierzom generującym kody liniowe można – w zasadzie – nadać postać 1 0 . . . 0 a1,n+1 a1,n+2 . . . a1,m 0 1 . . . 0 a2,n+1 a2,n+2 . . . a2,m ... ... 0 0 . . . 1 an,n+1 an,n+2 . . . an,m . Takim macierzom odpowiadają funkcje kodujące definiowane wzorami f (x1 , x2 , . . . , xn ) = (x1 , x2 , . . . , xn , n X i=1 ai,n+1 xi , n X ai,n+2 xi , . . . , n X ai,m xi ). i=1 i=1 Wzór ten świadczy o tym, że dla kodów liniowych kodowanie może polegać na dopisywaniu do kodowanej informacji tzw. sum kontrolnych. Przykład 3.2 Macierzami generującymi kod z bitem parzystości są albo albo 1 1 0 0 ... 0 0 0 0 1 1 0 ... 0 0 0 0 0 1 1 ... 0 0 0 , ... 0 0 0 0 ... 1 1 0 0 0 0 0 ... 0 1 1 1 0 0 0 ... 0 0 1 0 1 0 0 ... 0 0 1 0 0 1 0 ... 0 0 1 . .. . 0 0 0 0 ... 1 0 1 0 0 0 0 ... 0 1 1 Pierwsza z tych macierzy wyznacza funkcję kodującą f (x1 , x2 , . . . , xm−1 ) = (x1 , x1 + x2 , x2 + x3 , . . . , xm−1 + xm , xm ), druga – f (x1 , x2 , . . . , xm−1 ) = (x1 , x2 , . . . , xm−1 , m−1 X xi ). i=1 Przykład 3.3 Innym przykładem jest pewna wersja kodu powtórzeniowego z macierzą generującą 1 1 0 0 0 0 0 0 1 1 0 0 . 0 0 0 0 1 1 Ten sam – z dokładnością do kolejności jącą 1 0 0 0 1 0 0 0 1 współrzędnych – kod ma macierz generu 1 0 0 0 1 0 . 0 0 1 Funkcjami kodującymi dla tych kodów mogą być f (x1 , x2 , x3 ) = (x1 , x1 , x2 , x2 , x3 , x3 ) lub f (x1 , x2 , x3 ) = (x1 , x2 , x3 , x1 , x2 , x3 ). 3.2 Macierze kontrolne Każda podprzestrzeń liniowa, a więc i każdy kod liniowy jest zbiorem rozwiązań pewnego jednorodnego układu niezależnych równań liniowych. Dla kodów liniowych macierz główną takiego układu (macierz współczynników) nazywamy macierzą kontrolną. Jeżeli G jest macierzą generującą kod liniowy długości m i wymiaru n, to macierz kontrolną H tego kodu ma m − n wierszy długości m. Ponadto iloczyn HGT jest macierzą zerową. Przykład 3.4 Kod z bitem parzystości z przykładu 3.2 jest zbiorem rozwiązań równania x1 + x2 + . . . + xm−1 + xm = 0. Macierz kontrolna dla tego kodu składa się z jednego wiersza długości m wypełnionego jedynkami. Kod z przykładu 3.3 jest zbiorem rozwiązań układu x1 + x2 = 0, x3 + x4 = 0 oraz x5 + x6 = 0. Macierz kontrolna dla tego kodu jest równa macierzy generującej. 3.3 Algorytm korygowania błędów dla kodów liniowych Niech K będzie kodem liniowym. Macierzą standardową dla kodu K (długości m) nazywamy macierz tworzoną zgodnie z następującym algorytmem: 1) Tworzymy macierz słów M o wierszach długości | K |: 2) pierwszy wiersz tej macierzy wypełniamy słowami kodowymi, w dowolnej kolejności, poza tym, że M [1, 1] = 00 . . . 0; 3) i := 1; 4) Dopóki w macierzy M nie znajdą się wszystkie słowa 5) i := i + 1; 6) znajdź słowo L, nie umieszczone jeszcze w M , o możliwie małej wadze (którekolwiek), słowo to będziemy nazywać liderem i-tego wiersza; 7) dla j od 1 do | K | wykonaj podstawienie M [i, j] := L + M [1, j]. Lemat 3.5 Macierz standardowa M dla kodu liniowego K ma następujące własności: 1) W pierwszej kolumnie macierzy znajdują się liderzy poszczególnych wierszy. 2) Jeżeli w pewnym wierszu M występuje słowo X i A ∈ K, to w tym wierszy jest także A + X. 3) Jeżeli L jest liderem i-tego wiersza M i waga X jest mniejsza niż L, to X występuje w pewnym wierszu M o numerze mniejszym niż i. 2 Lemat 3.6 Macierz standardowa kodu liniowego długości m nad ciałem F ma | F |m wierszy. Każde słowo długości m występuje w macierzy standardowej i to na |K| dokładnie jednym miejscu. 2 Rozważmy następujący algorytm dla kodu K długości m: 1) Niech M będzie macierzą standardową dla kodu K, a X – danym słowem długości m; 2) Znajdź i oraz j takie, że M [i, j] = X; 3) Wynikiem obliczeń jest M [1, j]. Lemat 3.7 Przypuśćmy, że K jest kodem liniowym długości m, korygującym r błędów. Wtedy wyżej podany algorytm koryguje r błędów, a więc jeżli po wysłaniu słowa A ∈ K otrzymaliśmy slowo A + E dla pewnego E o wadze nie przekraczającej r, to podany algorytm uruchomiony ze słowem A + E zakończy obliczenia i wynikiem będzie słowo A. Dowód. Załóżmy, że A + E = M [i, j] = M [i, 1] + M [1, j] i E ma wagę nie przekraczającą r. Gdyby waga E była mniejsza od wagi M [i, 1], to E znalazłoby się w macierzy M w wierszu o numerze < i. W tym samym wierszu znalazłoby się też słowo A+E, a to nie jest możliwe. Wobec tego, waga M [i, 1] nie przekracza r. Wynika stąd, że A + E ∈ Sr (A) ∩ Sr (M [1, j]). Ponieważ kod K koryguje r błędów i słowa A, M [1, j] ∈ K, więc M [1, j] = A. 2 4 4.1 Kody Hamminga Macierze kontrolne kodów Hamminga Minimalna odległość słów kodów Hamminga będzie równa 3. Zauważmy, że mamy Lemat 4.1 Niech H będzie macierzą kontrolną kodu liniowego K. Minimalna odległość słów kodowych K jest równa 1 wtedy i tylko wtedy, gdy macierz H ma zerową kolumnę. Dowód. Jeżeli i-ta kolumna macierzy H jest zerowa, to ~ei jest rozwiązaniem układu równań liniowych opisanych macierzą H, a więc należy do K i w konsekwencji d(K) = 1. Także odwrotnie, jeżeli d(K) = 1, to ~ei ∈ K (dla pewnego i) i jest rozwiązaniem układu równań z macierzą główną H. Wtedy i-ta kolumna H jest zerowa. 2 Lemat 4.2 Niech H będzie macierzą kontrolną kodu liniowego K, bez kolumny zerowej. Minimalna odległość słów kodowych K jest równa 2 wtedy i tylko wtedy, gdy każde dwie kolumny macierzy H są różne. Dowód. Jeżeli i-ta kolumna macierzy H jest taka sama, jak j-ta, to ~ei + ~ej jest słowem kodowym należącym do K. Stąd d(K) ¬ 2, a przeciwna nierówność wynika z poprzedniego lematu. I odwrotnie, jeżeli d(K) = 2 i wektor postaci ~ei + ~ej jest rozwiązaniem układu o macierzy H, to i-ta kolumna macierzy H jest równa j-tej. 2 Tak więc macierze kontrolne kodów Hamminga nie mogą zawierać ani kolumny zerowej, ani dwóch identycznych kolumn. 4.2 Kody Hamminga Weźmy liczbę naturalną m 2 i utwórzmy macierz o wierszach długości m numerowanych od 1 do 2m − 1. W i-tym wierszu tej macierzy umieszczamy przedstawienie dwójkowe liczby i, a następnie tę macierz obracamy o 90o w lewo. Otrzymaną macierz oznaczamy Hm . Przyjmujemy, że Hm macierz kontrolną kodu Hamminga długości 2m − 1. Na przykład, mamy 1 0 1 0 1 0 1 H3 = 0 1 1 0 0 1 1 . 0 0 0 1 1 1 1 Układ równań definiujący kod Hamminga składa się więc z m liniowo niezależnych równań. Łatwo to zauważyć obserwując kolumny o numerach będących potęgami dwójki, zawierające po jednej jedynce. Przyjmijmy, że Xi jest zbiorem tych liczb < 2m , które w przedstawieniu dwójkowym mają składnik 2i . Nietrudno zauważyć, że i-ty wiersz macierzy Hm ma jedynki dokładnie w tych kolumnach, których numery należą do Xi . Kod Hamminga wyznaczony przez macierz Hm jest kodem o długości 2m − 1 i wymiarze 2m − m − 1. Minimalna odległość słów kodowych jest równa 3, słowa 1110 . . . 0 (o odpowiedniej długości) należą do kodów Hamminga. Macierze Hm są zredukowane, można z nich od razu odczytać rozwiązania układów równań definiujących kody Hamminga. Przyjmując, że zmienne x2i są zależne od pozostałych, wyrażamy je następującymi wzorami: x1 = x3 + x5 + x7 + x9 + . . . + x2m −1 x2 = x3 + x6 + x7 + x10 + . . . + x2m −1 x4 = x5 + x6 + x7 + x12 + . . . + x2m −1 .. . x2i = .. . X xj j∈Xi ∧j>2i Macierze generujące kody Hamminga tworzymy biorąc słowa, które mają jedynkę na i-tym miejscu, nie będącym potęgą dwójki, oraz na miejscach odpowiadającym potęgom dwójki z przedstawienia i. W szczególności, macierz generująca kod Hamminga dla m = 3 jest postaci 1 1 0 1 1 0 1 1 1 0 0 0 0 1 1 1 0 1 0 0 0 0 1 0 0 0 0 1 , a kolejne jej wiersze są wyznaczone przez jedynki na 3, 5, 6 i 7 pozycji. 4.3 Algorytm korygujący błąd Dla kodu Hamminga długości 2m − 1 rozważmy następujący algorytm: 1) Dane jest słowo-wektor ~x długości 2m − 1. 2) Obliczamy ~s = Hm~xT ∈ Z2m (wektor ~s jest nazywany syndromem); 3) jeżeli ~s = ~0, to kończymy obliczenia i przekazujemy jako wynik dane słowo ~x; 4) W przeciwnym razie wektor ~s (ewentualnie ~sT ) jest jedną z kolumn macierzy Hm i znajdujemy numer tej kolumny i; 5) kończymy obliczenia i przekazujemy jako wynik słowo ~x +~ei (zmieniamy dane słowo na i-tej pozycji). Można łatwo dowieść, że jeżeli korzystamy z kodu Hamminga, to powyższy algorytm koryguje jeden błąd. 4.4 Doskonałość kodów Hamminga Kod korygujący r błędów jest doskonały, jeżeli każde słowo jest albo słowem kodowym, albo powstaje z pewnego słowa kodowego w wyniku popełnienia ¬ r błędów. Bardziej formalnie, kod długości m, korygujący r błędów jest doskonały, jeżeli Z2m = [ Sr (~x). ~ x∈K W przypadku kodów K Hamminga zachodzi równość m −1 Z22 = [ S1 (~x). ~ x∈K Łatwo się o tym przekonać, porównując liczności zbiorów po obu stronach równości. Tak więc kody Hamminga są doskonałe. 5 5.1 Kody Reeda - Mullera Przestrzeń słów kodowych Ustalmy teraz liczbę m, będziemy definiować kody R(r, m) długości 2m . m Będą to więc kody zawarte w {0, 1}2 , czyli w zbiorze słów nad alfabetem {0, 1}. Zbiór ten będziemy interpretować na kilka sposobów, a dwa podstawowe są następujące: 1) może to być zbiór funkcji m zmiennych x0 , x1 , . . . , xm−1 o argumentach 0 i 1 oraz wartościach z ciała Z2 (ewentualnie o wartościach boolowskich), a więc na przykład funkcji f takich, że f : Z2m → Z2 . Takie funkcje możemy dodawać i mnożyć tak, jak się to zwykle robi, dodając lub mnożąc poszczególne wartości (w przypadku funkcji boolowskich: wykonując alternatywę wykluczającą lub koniunkcję), 2) lub może to być zbiór P(Z2m ) podzbiorów przestrzeni liniowej Z2m z dodawaniem, czyli z różnicą symetryczną, oraz mnożeniem, czyli przekrojem. Elementy Z2m możemy uważać za wektory, punkty m wymiarowej przestrzeni geometrycznej nad dziwnym ciałem lub za liczby naturalne < 2m . Będziemy w następujący sposób opisywać potrzebne przestrzenie: Przestrzeń Z2m składa się z punktów pi indeksowanych liczbami naturalnymi i < 2m . Taki punkt możemy utożsamiać z liczbą i. Jeżeli liczba i ma przedstawienie dwójkowe xm−1 xm−2 . . . x0 , to będziemy mówić, że pi jest punktem o współrzędnych (x0 , x1 , . . . , xm−1 ) i będziemy go utożsamiać także z wektorem (x0 , x1 , . . . , xm−1 ). W poniższej tabelce utworzonej dla m = 3 w kolumnie oznaczonej pi od góry do dołu są podane kolejne współrzędne punktu pi . p0 p 1 p2 p3 p4 p5 p6 p7 x0 0 1 0 1 0 1 0 1 x1 0 0 1 1 0 0 1 1 0 0 0 0 1 1 1 1 x2 f (x0 , x1 , x2 ) f0 f1 f2 f3 f4 f5 f6 f7 Wyżej mamy tabelkę (bliżej nieokreślonej) funkcji f : Z23 → Z2 . Dla każdego możliwego układu argumentów x0 , x1 , x2 pod tym układem są w niej podane wartości funkcji f (x0 , x1 , x2 ) i zostały wprowadzone pewne zasady notacyjne. Możemy więc napisać f (x0 , x1 , x2 ) = f (px2 x1 x0 ) oraz f (pi ) = fi . Funkcję f przedstawioną w tej tabelce utożsamiamy z zerojedynkowym słowem f0 f1 f2 f3 f4 f5 f6 f7 . Jest ona funkcją charakterystyczną zbiorów {i < 23 : fi = 1}, {pi : i < 23 ∧ fi = 1} lub {(x0 , x1 , x2 ) : f (x0 , x1 , x2 ) = 1} i może być z tymi zbiorami utożsamiana. Co więcej, to utożsamienie zachowuje m działania w rozważanych algebrach funkcji (lub słów) Z22 i podzbiorów z P(Z2m ). Zmienna xi (rozumiana jako funkcja f (x0 , x1 , x2 ) = xi ) jest utożsamiana ze słowem podanym w odpowiednim wierszu tabelki, oznaczonym napisem xi . Zmienna xi , jako funkcja, jest też funkcją charakterystyczną pewnego zbioru, który oznaczamy symbolem Xi . W szczególności, mamy X0 = {1, 3, 5, 7} lub X0 = {(1, 0, 0), (1, 1, 0), (1, 0, 1), (1, 1, 1)}. Ogólniej, Xi jest zbiorem tych liczb < 2m , które przedstawione w postaci sumy potęg 2 (bez powtórzeń) mają składnik równy 2i . Tak więc X0 jest zbiorem nieparzystych liczb < 2m , a Xm−1 jest zbiorem liczb i spełniających nierówność 2m−1 ¬ i < 2m . 5.2 Funkcje jako wielomiany Funkcję f (x0 , x1 , . . . , xm−1 ) = xi będziemy (jak zwykle) oznaczać symbolem xi . Funkcja f = f0 f1 . . . f2m −1 , mająca m zmiennych, wyznacza dwie funkcje f (0) = f0 f1 . . . f2m−1 −1 oraz f (1) = f2m−1 f2m−1 +1 . . . f2m −1 , mające po m − 1 zmiennych. Funkcje te można inaczej zdefiniować wzorami f (0) (x0 , . . . , xm−2 ) = f (x0 , . . . , xm−2 , 0) i f (1) (x0 , . . . , xm−2 ) = f (x0 , . . . , xm−2 , 1). Zauważmy, że f (x0 , . . . , xm−2 , xm−1 ) = = f (x0 , . . . , xm−2 , 0) + (f (x0 , . . . , xm−2 , 0) + f (x0 , . . . , xm−2 , 1))xm−1 = = f (0) (x0 , . . . , xm−2 ) + (f (0) (x0 , . . . , xm−2 ) + f (1) (x0 , . . . , xm−2 ))xm−1 . Korzystając z indukcji ze względu na liczbę zmiennych i podanego wzoru dowodzi się Lemat 5.1 Każda funkcja f : Z2m → Z2 jest wielomianem stopnia ¬ m. 2 Analogiczny lemat w wersji zbiorowej wynika z wzoru {t} = \ \ Xj ∩ tj =1 Xjc , tj =0 gdzie tm−1 tm−2 . . . t0 jest przedstawieniem dwójkowym liczby t. Jeżeli przekrój będziemy uważać za mnożenie, to przyjmuje on postać {t} = Y Xj · Y (1 + Xj ) tj =0 tj =1 (1 to funkcja stale równa 1 lub zbiór wszystkich możliwych elementów, 1 + X to różnica symetryczna przestrzeni i jej podzbioru, czy dopełnienie zbioru X). Mamy też A= [ {t} = t∈A X {t} = t∈A X Y Xj · (1 + Xj ) , tj =0 tj =1 t∈A Y gdyż w przypadku zbiorów rozłącznych sumę mnogościową można zastąpić różnicą symetryczną (będącą w tym przypadku dodawaniem). Prawa strona powyższego wzoru jest oczywiście wielomianem stopnia ¬ m ze zmiennymi X0 , . . . , Xm−1 . Funkcja charakterystyczna zbioru A jest definiowana wzorem f (x0 , x1 , . . . , xm−1 ) = X t∈A 5.3 Y tj =1 xj · Y (1 + xj ) . tj =0 Jednomiany Jednomiany to iloczyny niezerowego współczynnika i zmiennych. Jeżeli rozważamy jednomiany nad ciałem Z2 , to są to iloczyny zmiennych bez powtórzeń, gdyż jedynym niezerowym współczynnikiem jest 1, a mnożenie spełnia równowność x2 = x. m W pierścieniu Z22 funkcji m zmiennych mamy więc następujące jednomiany: 1, x0 , . . . , xm−1 , x0 x1 , . . . , xm−2 xm−1 , x0 x1 x2 , . . . , x0 x1 . . . xm−1 . Nietrudno policzyć, że jest ich 2m . Z lematu 5.1 wynika, że generują przestrzeń m Z22 , a ponieważ jest to przestrzeń wymiaru 2m , więc mamy Lemat 5.2 Wyżej wymienione jednomiany są bazą przestrzeni Z22 . 2 m 5.4 Definicja kodów Reeda - Mullera Kodami Reeda - Mullera nazywamy zbiory R(r, m) = {w : Z2m → Z2 : w jest wielomianem stopnia ¬ m}. Są to oczywiście kody liniowe wymiaru r X i=0 m i ! . Zostały zdefiniowane przez wskazanie generatorów, więc bez trudu tworzymy ich macierze generujące. Zauważmy, że R(0, m) jest kodem powtórzeniowym, mamy też Lemat 5.3 Zbiór R(m − 1, m) jest kodem z bitem parzystości. Dowód. Najpierw zauważmy, że jednomian xi1 xi2 . . . xis rozumiany jako zbiór, czyli zbiór {(x0 , x1 , . . . , xm−1 ) ∈ Z2m : xi1 xi2 . . . xis = 1} = = {(x0 , x1 , . . . , xm−1 ) ∈ Z2m : xi1 = xi2 = . . . = xis = 1}, ma 2m−s elementów. Wobec tego, jednomiany stopnia < m są zbiorami o parzystej liczbie elementów. Z faktu, że różnica symetryczna zbiorów o parzystej liczbie elementów też ma parzystą liczbę elementów otrzymujemy, że R(m − 1, m) ⊆ {(x0 , x1 , . . . , xm−1 ) ∈ Z2m : X xi = 0}. i<m Te zbiory są równe, gdyż są przestrzeniami liniowymi tego samego wymiaru. 2 5.5 Macierze kontrolne kodów Reeda – Mullera Lemat 5.4 Wielomiany f i g są ortogonalne (a więc ich iloczyn skalarny f ·g = 0) wtedy i tylko wtedy, gdy ich iloczyn f g ∈ R(m − 1, m) (a więc wielomian f g ma stopień < m). 2 Twierdzenie 5.5 Dopełnieniem ortogonalnym R(r, m) jest kod R(m − r − 1, m). Dowód. Łatwo dowodzi się zawieranie R(m − r − 1, m) ⊆ R(r, m)⊥ oraz sprawdza się, że obie podprzestrzenie w tym zawieraniu są tego samego wymiaru. 2 Na podstawie powyższego twierdzenia bardzo łatwo tworzymy macierze kontrolne kodów Reeda – Mullera: wiersze macierzy kontrolnej kodu R(r, m) to słowa odpowiadające jednomianom stopnia ¬ m−r−1. Dzięki niemu mamy też algorytm pozwalający na testowanie, czy dane słowo jest słowem kodowym: algorytm ten wylicza iloczyny skalarne danego słowa s z wielomianami stopnia ¬ m−r−1. Jeżeli wszystkie takie iloczyny są równe 0, to stwierdza, że s ∈ R(r, m). W przeciwnym razie, że s 6∈ R(r, m). 5.6 Geometria w przestrzeni Z2m Będziemy rozważać podzbiory przestrzeni liniowej nad ciałem F (choć najczęściej F = Z2 ). Prostą przechodzącą przez punkt p~, o kierunku wektora ~q nazywamy zbiór {~p + a~q : a ∈ F } = p~ + {a~q : a ∈ F }. Płaszczyzną przechodzącą przez punkt p, o „kierunku” (niezależnych) wektorów ~q1 i ~q2 nazywamy zbiór {~p + a1 ~q1 + a2 ~q2 : a1 , a2 ∈ F } = p~ + {a1 ~q1 + a2 ~q2 : a1 , a2 ∈ F }. Hiperpłaszczyzną przechodzącą przez punkt p~, o kierunku wyznaczonym przez K (lub równoległą do K) nazywamy zbiór p~ + K, gdzie K jest podprzestrzenią liniową wymiaru o 1 mniejszego niż wymiar przestrzeni. Płaszczyzną wymiaru k przechodzącą przez punkt p~ nazywamy zbiór p~ + K, gdzie K jest podprzestrzenią liniową wymiaru k. Zamiast o płaszczyznach wymiaru k mówi się też o hiperpłaszczyznach wymiaru k. Będziemy raczej używać krótszej nazwy. Płaszczyzny p~1 + K1 i p~2 + K2 są równoległe, gdy K1 ⊆ K2 lub K2 ⊆ K1 . Lemat 5.6 Płaszczyzna wymiaru k ma | F |k elementów. 2 Lemat 5.7 Jeżeli p~2 ∈ p~1 + K, to p~1 + K = p~2 + K (płaszczyzna przechodzi przez każdy punkt, który do niej należy). 2 Lemat 2.10 stwierdza, że każde przekształcenie liniowe wyznacza rozbicie przestrzeni argumentów na pewną liczbę równoległych płaszczyzn wymiaru takiego, jak wymiar jądra przekształcenia. Jądro jest jedną z tych płaszczyzn, a jest ich tyle, ile wartości przyjmuje to przekształcenie. W szczególności, możemy rozważać przekształcenie f : Z2m → Z2k zdefiniowane wzorem X X X f (x0 , x1 , . . . , xm−1 ) = ( a1,i xi , a2,i xi , . . . , ak,i xi ). i<m i<m i<m Płaszczyzny wyznaczone przez to przekształcenie są zbiorami rozwiązań układów równań liniowych X i<m a1,i xi = c1 , X i<m a2,i xi = c2 , . . . , X ak,i xi = ck i<m dla odpowiednio dobranych wyrazów wolnych c1 , c2 , . . . , ck . Lemat 5.8 Każda płaszczyzna wymiaru k zawarta w m wymiarowej przestrzeni jest zbiorem rozwiązań pewnego układu m − k równań liniowych. 2 Lemat 5.9 Przypuśćmy, że k wymiarowa płaszczyzna p~ + K1 jest zawarta w k + 1 wymiarowej płaszczyźnie p~ + K2 ⊆ Z2m (zawiera ona p~, a więc jest takiej postaci). Niech ~q ∈ K2 \ K1 . Wtedy p~ + K2 = (~p + K1 ) ∪ ((~p + ~q) + K1 ), a więc każda taka płaszczyzna p~ + K2 jest sumą mnogościową dwóch rozłącznych płaszczyzn wymiaru k, równoległych do K1 . Dowód. Nietrudno zauważyć, że K1 ⊆ K1 ∪ (~q + K1 ) ⊆ K2 , jak również, że środkowy ze zbiorów jest podprzestrzenią liniową nad Z2 . Ponieważ jest różny od K1 , więc K1 ∪ (~q + K1 ) = K2 . Tezę otrzymujemy dodając do tej równości stronami p~. 2 Lemat 5.10 Przypuśćmy, że p~ + K jest płaszczyzną wymiaru k zawartą w Z2m i k < m. Wtedy 1) Z2m jest sumą (mnogościową) 2m−k rozłącznych płaszczyzn postaci ~q + K (a więc wymiaru k i równoległych do K); 2) jeżeli p~ + K 6= ~q + K, to (~p + K) ∪ (~q + K) = p~ + (K ∪ ((~q − p~) + K)) jest płaszczyzną wymiaru k +1, zawierającą p~ +K, jedyną, do której należy ~q; 3) dowolna płaszczyzna p~ + K wymiaru k jest zawarta w dokładnie 2m−k − 1 płaszczyznach wymiaru k + 1. 2 Lemat 5.11 Jednomian stopnia k, rozumiany jako zbiór, jest zbiorem rozwiązań układu k niezależnych równań, a więc jest płaszczyzną wymiaru m − k. Dowód. W Z2 warunek x1 x2 = 1 jest równoważny warunkom x1 = 1 i x2 = 1. 2 Lemat 5.12 Każda płaszczyzna wymiaru m − k jest zbiorem rozwiązań pewnego układu k równań liniowych X i<m a1,i xi = c1 , X a2,i xi = c2 , . . . , i<m X ak,i xi = ck . i<m Funkcja charakterystyczna tego zbioru wyraża się wzorem f (x0 , x1 , . . . , xm−1 ) = k Y ! 1 + cj + j=1 X aj,i xi , i<m a więc jest szczególnej postaci wielomianem stopnia k (wielomianem, który jest iloczynem czynników liniowych). 2 5.7 Zbiory generujące kod R(r, m) Wiemy na podstawie definicji, że kod R(r, m) jest generowany przez jednomiany stopnia ¬ r. Jednomiany stopnia ¬ r wyznaczają szczególne (równoległe do osi układu współrzędnych) płaszczyzny wymiarów m − r. Jeżeli elementy kodu R(r, m) będziemy uważać za zbiory, to będziemy też mogli powiedzieć, że kod R(r, m) jest generowany przez płaszczyzny wymiarów m − r. Lemat 5.13 Dla każdego k spełniającego m − r ¬ k ¬ m, zbiór płaszczyzn o wymiarach między m − r i k generuje kod R(r, m). Dowód. Dowód ze względu na t przez „odwróconą” indukcję. Jeżeli P jest płaszczyzną wmiaru k + 1, to na mocy lematu 5.9, P jest sumą mnogościową dwóch rozłącznych płaszczyzn P1 i P2 wymiaru k. Ponieważ są to płaszczyzny rozłączne, więc P = P1 + P2 . Wobec tego P i inne płaszczyzny wymiaru t + 1 można usunąć ze zbioru generatorów zawierających P1 i P2 i pozostałe płaszczyzny wymiaru t. 2 Wniosek 5.14 Zbiór płaszczyzn wymiaru m − r generuje kod R(r, m). Albo w innym języku, kod R(r, m) jest generowany przez zbiory wszystkich wielomianów stopnia r, a także zbiory iloczynów r wielomianów liniowych (czyli stopnia 1). 2 Wniosek 5.15 Zbiór X należy do kodu R(r, m) wtedy i tylko wtedy, gdy dla każdej płaszczyzny P wymiaru r + 1 przekroje X ∩ P mają parzystą liczbę elementów. Dowód. Wynika to z twierdzenia 5.5 i wniosku 5.14 dla kodu R(m − r − 1, m). 2 5.8 Algorytm korygujący błędy dla kodów R(r, m) Dla r < m i kodu R(r, m) definiujemy indukcyjnie pojęcie parzystości płaszczyzn. Niech X będzie danym zbiorem. Płaszczyzna P wymiaru r + 1 jest parzysta dla X, jeżeli przekrój P ∩ X ma parzystą liczbę elementów. Płaszczyzna P wymiaru k ¬ r jest parzysta dla X, jeżeli większość zawierających ją płaszczyzn wymiaru k + 1 (więcej niż połowa takich płaszczyzn) jest parzysta. Lemat 5.16 Jeżeli X jest zbiorem, który ma < 2m−r−1 elementów, a P jest płaszczyzną wymiaru ¬ r + 1, to P jest parzysta dla X wtedy i tylko wtedy, gdy przekrój P ∩ X ma parzystą liczbę elementów. Dowód. Znowu dowodzimy przez „odwrotną” indukcję ze względu na wymiar k płaszczyzny P . Lemat jest oczywisty dla płaszczyzn wymiaru k = r + 1 na mocy definicji parzystości. Niech P będzie płaszczyzną wymiaru k ¬ r. Rozważmy zbiór płaszczyzn wymiaru k + 1, zawierających P , czyli – na mocy lematu 5.10 – zbiór Pk+1 = {P ∪ Q : Q 6= P ∧ Q jest równoległe do P, wymiaru k}. Zbiór ten ma 2m−k − 1 elementów. Weźmy teraz zbiór {P ∪ Q ∈ Pk+1 : Q ∩ X 6= ∅}. Z lematu 5.10 i założenia wynika, że zbiór ten ma mniej niż 2m−r−1 elementów. Stąd zbiór P = {P ∪ Q ∈ Pk+1 : Q ∩ X = ∅} ma więcej niż 2m−k − 1 − 2m−r−1 elementów, czyli ma przynajmniej 1 2m−k − 2m−r−1 = 2 · 2m−k−1 − 2m−r−1 2m−k−1 2m−r−1 > | Pk+1 | 2 elementów. Tak więc większość płaszczyzn wymiaru k + 1, zawierających P należy do P. Załóżmy, że płaszczyzna P jest parzysta dla X. Na mocy definicji parzystości, większość elementów Pk+1 jest parzysta dla X. Dwa zbiory mające (każdy z osobna) większość elementów nie mogą być rozłączne. Jest więc Q takie, że płaszczyzna P ∪ Q ∈ P jest parzysta dla X. Na mocy założenia indukcyjnego, płaszczyzny wymiaru k + 1, parzyste dla X mają parzystą liczbą elementów zbioru X. Wobec tego, zbiór P ∩ X = (P ∪ Q) ∩ X ma parzystą liczbę elementów. Z drugiej strony, jeżeli P ∩X ma parzystą liczbę elementów, to także dla każdego P ∪ Q ∈ P przekroje (P ∪ Q) ∩ X mają parzystą liczbę elementów. Płaszczyzny z P stanowią większość, więc większość płaszczyzn wymiaru k + 1, zawierających P zawiera parzystą liczbę elementów X. I – na mocy definicji – płaszczyzna P jest parzysta dla X. 2 Udowodniony lemat pozwoli nam przeanalizować następujący algorytm: 1) Dany jest zbiór X ∈ P(Z2m ). 2) Dla każdej płaszczyzny wymiaru r + 1 ustalamy, czy jest ona parzysta dla X. 3) Dla wszystkich k od r do 0 ustamy (zgodnie z przytoczoną definicją), które płaszczyzny wymiaru k są parzyste dla X. 4) Wynikiem obliczeń jest zbiór ϕ(X) tych punktów p, które nie są parzyste dla X (dla których zerowymiarowe płaszczyzny {p} nie są parzyste). Lemat 5.17 Jeżeli dany zbiór X ma mniej niż 2m−r−1 elementów, to ϕ(X) = X. Dowód. Zauważmy, że ϕ(X) = {p ∈ Z2m : {p} nie jest parzysta} = {p ∈ Z2m : 2 6 | | {p} ∩ X |} = = {p ∈ Z2m : | {p} ∩ X | = 1} = {p ∈ Z2m : p ∈ X} = X. Druga z równości wynika z lematu 5.16. 2 Lemat 5.18 Jeżeli A ∈ R(r, m), to ϕ(A+X) = ϕ(X) dla dowolnego X ∈ P(Z2m ). Dowód. Tak jest ponieważ dla danych X oraz A+X obliczenia opisane w punkcie 2) algorytmu dają taki sam rezultat i determinują dalszą realizację algorytmu. Niech P będzie płaszczyzną wymiaru r + 1. Aby przekonać słuszności stwierdzenia z poprzedniego akapitu zauważmy, że P jest parzysta wtedy i tylko wtedy, gdy zbiór P ∩ X ma parzystą liczbę elementów, a to z kolei jest równoważne temu, że iloczyn skalarny P · X jest równy 0. Widać też na mocy twierdzenia 5.5 i wniosku 5.15, że dla A ∈ R(r, m) iloczyny skalarne P · X oraz P · (A + X) są identyczne. To gwarantuje tezę. 2 Twierdzenie 5.19 Jeżeli r < m, to minimalna odłegłość słów kodu R(r, m) wynosi 2m−r . Dowód. Załóżmy najpierw, że istnieją dwa słowa (zbiory) A i B w kodzie R(r, m), których odległość Hamminga nie przekracza 2m−r −2. Tak więc |A+B | ¬ 2m−r −2. Zbiór, który ma najwyżej 2m−r − 2 elementów można przedstawić w postaci sumy dwóch rozłącznych zbiorów X i Y , które mają najwyżej 2m−r−1 − 1 elementów. Przyjmijmy, że X i Y są takimi zbiorami i A + B = X ∪ Y = X + Y . Równość A + B = X + Y implikuje, że A + X = B + Y . Z udowodnionych wyżej lematów wynika, że X = ϕ(X) = ϕ(A + X) = ϕ(B + Y ) = ϕ(Y ) = Y. Zbiory, które jednocześnie są rozłączne i równe, są puste. Wobec tego, także zbiory A i B są równe. Odległość różnych słów kodu R(r, m) jest więc przynajmniej równa 2m−r − 1. Jest to kod liniowy, a w przypadku r < m każde słowo tego kodu ma parzystą liczbę jedynek. Minimalna odległość słów kodowych jest więc parzysta, a więc równa przynajmniej 2m−r . Z drugiej strony wielomian x0 x1 . . . xr−1 odpowiada słowu, które ma dokładnie 2m−r jedynek i jest odległe od zera o 2m−r . Stąd teza. 2 Twierdzenie 5.20 Algorytm 1) Dla danego słowa X oblicz ϕ(X) 2) a następnie przekaż X + ϕ(X). w przypadku kodu R(r, m) koryguje 2m−r−1 − 1 błędów. Dowód. Przypuśćmy, że po wysłaniu słowa A ∈ R(r, m) otrzymaliśmy słowo A + E dla pewnego słowa E, które ma najwyżej 2m−r−1 − 1 jedynek. Wtedy, po uruchomieniu podanego algorytmu z daną A + E zostanie wyliczone ϕ(A + E) = ϕ(E) = E i za wynik obliczeń zostanie uznany zbiór (A + E) + ϕ(A + E) = (A + E) + E = A. Tak więc zostały skorygowane błędy E. 2