Teoria dei Codici

Transcript

Teoria dei Codici
Teoria dei Codici
Fabio Stumbo
Università di Ferrara
8 gennaio 2016
Indice
Indice
i
1 Nozioni base sui codici
1.1 Definizioni fondamentali e notazioni . . . .
Funzioni di codifica, decodifica e verifica . .
1.2 Prime proprietà . . . . . . . . . . . . . . . .
Metrica del codice . . . . . . . . . . . . . .
Relazioni tra i parametri . . . . . . . . . . .
Prime applicazioni . . . . . . . . . . . . . .
1.3 Costruzione di codici nuovi da codici vecchi
Perforazione . . . . . . . . . . . . . . . . . .
Accorciamento . . . . . . . . . . . . . . . .
Somma diretta . . . . . . . . . . . . . . . .
Accorciamento (caso lineare) . . . . . . . .
Estensione . . . . . . . . . . . . . . . . . .
Codice duale . . . . . . . . . . . . . . . . .
La costruzione (C1 , C2 ) . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
1
3
5
5
6
8
11
11
11
11
12
12
12
12
2 Codici lineari
2.1 Prime proprietà . . . . . . . . . . . . . . .
2.2 Codici lineari equivalenti . . . . . . . . . .
2.3 Matrice generatrice e matrice di controllo
2.4 Codici di Hamming . . . . . . . . . . . . .
2.5 Enumeratore di peso . . . . . . . . . . . .
Identità di MacWilliams . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
13
13
15
16
20
23
24
3 Codici ciclici
3.1 Spazi vettoriali e polinomi . . . . . . . . . . .
3.2 Polinomio generatore . . . . . . . . . . . . .
3.3 Polinomio di controllo . . . . . . . . . . . . .
3.4 Codifica, decodifica e verifica nei codici ciclici
3.5 Zeri di un codice ciclico . . . . . . . . . . . .
Zeri e matrice di controllo di parità . . . . . .
Zeri e distanza minima . . . . . . . . . . . . .
3.6 Idempotenti . . . . . . . . . . . . . . . . . . .
3.7 Famiglie di codici ciclici . . . . . . . . . . . .
Codici BCH . . . . . . . . . . . . . . . . . . .
Codici di Hamming . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
28
28
32
35
37
39
40
43
45
52
52
53
i
.
.
.
.
.
.
INDICE
3.8
ii
Codici di Reed-Solomon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Progettazione di codici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4 Correzione degli errori nei codici lineari
4.1 Decodifica nei codici lineari . . . . . . .
Correzione con tabella di Slepian . . . .
Correzione a sindrome . . . . . . . . . .
Correzione a sindrome – 2 . . . . . . . .
Decodifica nei codici di Hamming . . . .
4.2 Decodifica nei codici ciclici: algoritmo di
4.3 Decodifica dei codici BCH . . . . . . . .
Algoritmo PGZ e metodo di Forney . .
Algoritmo di Sugiyama . . . . . . . . . .
Algoritmo di Berlekamp-Massey . . . .
4.4 Un esempio svolto . . . . . . . . . . . .
PGZ . . . . . . . . . . . . . . . . . . . .
Sugiyama . . . . . . . . . . . . . . . . .
Berlekamp-Massey . . . . . . . . . . . .
4.5 Altri esempi . . . . . . . . . . . . . . . .
BCH [7,4] . . . . . . . . . . . . . . . . .
BCH [15,7] . . . . . . . . . . . . . . . .
BCH [15,5] . . . . . . . . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
Meggitt
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
54
54
56
56
57
58
59
60
60
64
65
74
78
95
96
98
99
100
100
101
103
A L’algoritmo euclideo
107
A.1 AEE in generale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
A.2 AEE per A = Z . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
A.3 AEE per A = K[X] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
B Rappresentazione degli elementi dei campi finiti
122
B.1 Il campo F16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
C Campi finiti e radici dell’unità
127
C.1 Coniugati ed elementi primitivi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
C.2 Polinomi ciclotomici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Bibliografia
136
Capitolo 1
Nozioni base sui codici
1.1
Definizioni fondamentali e notazioni
Un alfabeto q-ario è un insieme Q = {a1 , . . . , aq } con q elementi, detti simboli. Generalmente, ma non sempre, sceglieremo Q = Fq .
Un codice è un sottoinsieme C ⊆ Qn . Per brevità, se non c’è possibilità di equivoco indicheremo l’elemento v = (v1 , . . . , vn ) ∈ Qn con v1 . . . vn . L’intero n si dice lunghezza del codice
e gli elementi del codice si dicono parole. Se Q = F2 il codice è detto binario. Se Q = Fq è un
campo finito e C è un sottospazio vettoriale di Fnq il codice è detto lineare; con k indicheremo
la sua dimensione.
Il tasso di informazione è il numero
τ (C) =
1
logq M,
n
dove M = |C|; la ridondanza è n − logq M .
Se v = v1 . . . vn e y = y1 . . . yn sono elementi di Qn , la distanza di Hamming (vedremo che
questa è effettivamente una metrica, cfr. 1.6) tra v ed y è definita come
d (v, y) = |{i : vi 6= yi e 1 ≤ i ≤ n}| .
La palla di centro v e raggio r è l’insieme
S (v, r) = {y ∈ Qn : d (v, y) ≤ r}
e la minima distanza del codice C è l’intero
d (C) = min {d (v, y) : v, y ∈ C e v 6= y} .
La lunghezza, la cardinalità e la minima distanza di un codice sono tre parametri fondamentali
di un codice C: per evidenziarli, chiameremo un codice di lunghezza n, cardinalità M e minima
distanza d un (n, M, d)-codice. Se il codice è lineare, cioè C è un sottospazio vettoriale di
dimensione k di Fnq , allora la sua cardinalità è data da M = q k ; in questo caso, diremo che C è
un [n, k, d]-codice su Fq (o anche, più brevemente, un [n, k]-codice, se la distanza minima non è
rilevante nella discussione).
Si dice che un codice
1
CAPITOLO 1. NOZIONI BASE SUI CODICI
2
scopre s errori se modificando una parola del codice in al più s componenti si ottiene una
parola non nel codice; in formula:
∀v ∈ C S (v, s) ∩ C = {v} ;
(1.1)
corregge t errori se per ogni parola w di lunghezza n esiste un’unica parola di C con
distanza al più t da v; in formula:
∀w ∈ Qn ∃!v : v ∈ C ∩ S (w, t)
(1.2)
d−1
bX
2 c n
i
(q − 1) = q n ;
M·
i
i=0
(1.3)
Un (n, M, d)-codice C si dice:
perfetto (cfr. 1.10) se
massimale se non esiste un (n, M 0 , d)-codice C 0 tale che M 0 > M e C 0 ) C;
ottimale (cfr. 1.9) se, posto
Aq (n, d) = max {M 0 tale che esiste un (n, M 0 , d)-codice Q-ario} ,
si ha Aq (n, d) = q n−d+1 e M = Aq (n, d).
Nel caso dei codici lineari, un [n, k, d]-codice è MDS se k + d = n + 1.
I codici ottimali sono anche detti Maximum Distance Separable (MDS).
Osservazione 1.1. Indichiamo con C (n, d) l’insieme di tutti gli (n, ∗, d)-codici su Q; si ha che
C è un codice massimale se, e solo se, è massimale in C (n, d) relativamente all’ordinamento
⊆ se, e solo se, non esiste una parola u ∈ Qn \ C tale che d (v, u) ≥ d per ogni parola del
codice v;
C è un codice ottimale se, e solo se, ha cardinalità uguale al massimo possibile teorico.
Chiaramente, un codice ottimale è massimale. Il viceversa non è vero: sia Q = F2 , n = 3 e d = 2;
il codice
C1 = {000, 110, 101, 011}
è ottimale. Per contro, il codice C2 = {000, 111} è massimale perché non esiste alcuna parola di distanza almeno 2 dalle parole di C2 aggiungendo la quale esso possa essere esteso ma,
evidentemente, non è ottimale.
Due codici della stessa lunghezza (e sullo stesso alfabeto) C, D si dicono equivalenti se si
ottengono l’uno dall’altro tramite un numero finito di operazioni di uno dei seguenti tipi:
(A) Permutazione delle posizioni nelle parole.
Scelta una permutazione σ ∈ Sn degli indici, si considera
∼
Qn → Qn
v = v1 . . . vn 7→ vσ = vσ(1) . . . vσ(n)
CAPITOLO 1. NOZIONI BASE SUI CODICI
3
(B) Permutazione dei simboli in una posizione fissata.
Scelta una permutazione τ ∈ S (Q) delle lettere dell’alfabeto, si considera
∼
Qn → Qn
v = v1 . . . vn 7→ vτ,i = v1 . . . vi−1 τ (vi ) vi+1 . . . vn
Osservazione 1.2. Nel caso dei codici lineari, nella definizione di equivalenza è necessario restringere le operazioni di tipo (B): si considerano ammissibili solo le permutazioni originate dalla
moltiplicazione di uno scalare. Ciò è necessario affinché operazioni di tipo (A) e (B) corrispondano ad operazioni elementari sulle colonne di opportune matrici (cfr. teorema 2.14).
Più precisamente, le operazioni di tipo (A) corrispondono al cambio di base ottenuto dalla permutazione dei vettori della base mentre le operazioni di tipo (B) corrispondono al cambio di base
effettuato moltiplicando per uno scalare un elemento della base.
Funzioni di codifica, decodifica e verifica
Lo scopo di un codice è quello di trasmettere un’informazione in modo tale che alla ricezione
sia possibile, entro certi limiti, accertare se siano avvenuti errori nel corso della trasmissione e,
eventualmente, correggere tali errori. Questo obiettivo viene raggiunto aumentando la “dimensione” dell’informazione tramite l’aggiunta di caratteri di controllo (detti anche ridondanza)
legati all’informazione vera e propria da regole (generalmente di tipo matematico) che permettono
di verificare l’integrità del messaggio.
In altre parole, se lo spazio dell’informazione che si sta considerando è Qr allora affinché
un codice C ⊂ Qn (con r ≤ n) sia utilizzabile è necessario fornire due funzioni biiettive dette
codifica e decodifica
γ : Qr → C
δ : C → Qr
tali che δ ◦ γ = idQr . La funzione di codifica si dice sistematica se esiste un insieme di indici
i1 , . . . , ir tali che
γ (v1 · · · vr )ij = vj per ogni j = 1, . . . , r.
Ciò sostanzialmente vuol dire che all’interno di una parola del codice ci sono alcune coordinate
che contengono, tale e quale, tutta l’informazione. In tal caso è ovvio che la funzione di decodifica
è semplicemente la proiezione sulle coordinate i1 , . . . , ir .
Sono inoltre necessarie due funzioni
ed : Qn → {0, 1}
ec : Qn → C
La prima (error detection) dice se si sono verificati errori nella trasmissione e, per far ciò, si
usano le proprietà matematiche che caratterizzano la ridondanza; come funzione matematica, ed
si riduce alla funzione caratteristica dell’insieme C. La seconda (error correction) corregge gli
errori eventualmente presenti; anche per ciò si usano le proprietà matematiche della ridondanza.
Se v ∈ Qn è una parola ricevuta, il fatto che ed (v) = 0 ci assicura che nella trasmissione
sono avvenuti degli errori. Per contro, il fatto che ed (v) = 1 non assicura che non siano avvenuti
degli errori: potrebbero anche esserci stati alcuni errori che modificano la parola di partenza in
un’altra parola del codice ma diversa da quella di partenza. Di pari passo, nel caso si applichi
la funzione di correzione degli errori ec non si ha la sicurezza di recuperare la parola originaria,
perché si potrebbe finire su una parola del codice diversa da quella di partenza.
CAPITOLO 1. NOZIONI BASE SUI CODICI
4
Detto ciò, è necessario avere comunque un principio che ci guidi nel decidere che fare della
parola ricevuta v: lasciarla inalterata o fornire una correzione. La scelta più spontanea è:
se v ∈ C, lasciarla inalterata, cioè assumere che non si siano verificati errori nella trasmissione;
se v ∈
/ C, correggere v con una parola del codice u tale che
d (u, v) = min {d (y, v) | y ∈ C} .
(1.4)
Questo principio che guida la scelta dell’elemento del codice con cui correggere la parola ricevuta
è chiamato principio di massima verosimiglianza. Naturalmente, nel caso in cui ci sia più di
una parola del codice che realizza il minimo di cui sopra, si pone il problema di quale parola del
codice scegliere tra quelle che realizzano tale minimo ma risulta difficile enunciare un principio
generale per questo caso: in genere, quando si verifica questa condizione l’algoritmo di correzione
restituisce un codice di errore.
In base a queste considerazioni, si capisce perché sia necessario, nei casi concreti, assumere
che nel corso della trasmissione siano avvenuti al più un certo numero di errori e perché, nel corso
della progettazione di un codice per un uso specifico, sia necessario avere una stima realistica della
quantità di errori che possono verificarsi sul canale di trasmissione che si prevede di utilizzare.
Il teorema 1.16 dice quanti errori ci si può aspettare di individuare e correggere in funzione dei
parametri del codice.
Osservazione 1.3. Spesso viene usato il termine “decodifica” per riferirsi al complesso delle operazioni necessarie all’individuazione e alla correzione degli errori. Inoltre, la funzione ec può
essere considerata più in generale come una funzione di verifica, cioè una funzione che data una
parola ci dice se essa appartiene al codice o meno.
Esempio 1.4. Codice di ripetizione1
Descrizione: Individua e corregge un errore.
Alfabeto: F2 = {0, 1}.
Lunghezza: 3.
Tasso di informazione: 1/3.
Parole del codice: C = {000, 111}.
Distanza minima: 3.
Funzione di codifica:
F2 → F32
i 7→ iii
Controllo: sia R = (ijk) la parola ricevuta. Verificare se i = j = k.
Correzione: Se i = j = k allora non ci sono stati errori, altrimenti si è avuto un errore: in
tal caso, cambiare il bit diverso dagli altri due.
1 È immediato estendere il codice di ripetizione ad un codice di ripetizione di una lunghezza qualsiasi su un
alfabeto qualsiasi.
CAPITOLO 1. NOZIONI BASE SUI CODICI
5
Decodifica:
F32 → F2
iii 7→ i
N.B.: in realtà, se i = j = k possono anche essersi verificati 3 errori, così come nel caso
contrario possono essersi verificati 2 errori: non c’è però modo di evincere ciò dalla parola
ricevuta. È questo il motivo per cui è necessario fare l’ipotesi di lavoro che si sia verificato
al più un errore.
Osservazione 1.5. La correzione degli errori sostanzialmente richiede di partizionare lo spazio M
in sottoinsiemi in modo tale che ogni sottoinsieme contenga un’unica parola del codice:
M=
.
[
Mv ;
v∈C
alla ricezione di una parola w si va a vedere in quale insieme Mv della partizione appartiene w e
si assume che la parola inviata sia v. Si tratta quindi di determinare una opportuna partizione:
ciò può essere fatto in molti modi, come per esempio in 4.1 o 4.1. Un altro modo è quello di usare
le palle centrate nelle parole del codice e di raggio t, a patto che t sia tale che due palle distinte
non abbiano intersezione. Queste palle ricoprono M esattamente quando il codice è perfetto; se
il codice non è perfetto, resta una parte dello spazio M non ricoperta: se la parola ricevuta è in
questa “zona grigia”, allora la funzione di correzione degli errori deve rilevare ciò restituendo un
codice di errore.
1.2
Prime proprietà
Metrica del codice
Per prima cosa, verifichiamo che la distanza di Hamming è realmente una distanza in Qn .
Proposizione 1.6. Per ogni v, y, z ∈ Qn valgono le proprietà
1. d (v, y) ≥ 0 e d (v, y) = 0 ⇔ v = y;
2. d (v, y) = d (y, v);
3. d (v, y) ≤ d (v, z) + d (z, y)
(disuguaglianza triangolare).
Dimostrazione. Le prime due proprietà sono ovvie. Per la disuguaglianza triangolare basta
osservare che
{i : vi 6= yi } ⊆ {i : vi 6= zi } ∪ {i : zi 6= yi }
e pertanto
d (v, y) = |{i : vi 6= yi }|
≤ |{i : vi 6= zi } ∪ {i : zi 6= yi }|
= |{i : vi 6= zi }| + |{i : zi 6= yi }| − |{i : vi 6= zi } ∩ {i : zi 6= yi }|
≤ |{i : vi 6= zi }| + |{i : zi 6= yi }|
= d (v, z) + d (z, y)
CAPITOLO 1. NOZIONI BASE SUI CODICI
6
Calcoliamo adesso il “volume” della palla di raggio r:
Proposizione 1.7. Sia v ∈ Qn e r un intero positivo. Si ha:
(
qn
n
|S (v, r)| = Vq (r) = Pr
i
n
i=0 i (q − 1)
se r ≥ n
se r ≤ n
Dimostrazione. Se r ≥ n allora S (v, r) = Qn e la tesi segue.
Sia ora r ≤ n. Osserviamo che la “palla” è l’unione disgiunta delle “sfere”:
S (v, r) =
r
[
{y ∈ Qn : d (v, y) = i}
i=0
e pertanto
|S (v, r)| =
r
X
|{y ∈ Qn : d (v, y) = i}| ;
i=0
0
n
0
d’altra parte, {v ∈ Q : d (v, v ) = i} è l’insieme delle
parole che differiscono da v in esattamente
i posizioni: tali posizioni possono essere scelte in ni e in ogni posizione il corrispondente elemento
di v 0 può essere scelto in q − 1 modi distinti, pertanto
n
i
0
n
0
(q − 1)
|{v ∈ Q : d (v, v ) = i}| =
i
da cui la tesi.
Si osservi che per r ≥ n si ha
dipende da v.
Pr
i=0
n
i
i
(q − 1) = q n ; in particolare, il volume della palla non
Proposizione 1.8. Un (n, M, d)-codice è perfetto se, e solo se, le palle di raggio d−1
centrate
2
nelle parole del codice formano un ricoprimento disgiunto di Qn .
Dimostrazione. Innanzi tutto osserviamo che se v, v 0 ∈ C allora S v, d−1
∩S v 0 , d−1
= ∅:
2
2
d−1 infatti se fosse y ∈ S v, 2
∩ S v 0 , d−1
allora
2
d−1
d−1
d ≤ d (v, v 0 ) ≤ d (v, y) + d (y, v 0 ) ≤
+
≤ d − 1.
2
2
A questo punto, l’equivalenza segue dal fatto che l’unione di tutte le palle considerate ha
Pb d−1 c n
i
cardinalità M · i=02
i (q − 1) e dalla definizione di codice perfetto.
Relazioni tra i parametri
Esistono molte relazioni tra i parametri n, M e d di un codice: vediamo alcune disuguaglianze
fondamentali. Sia C un (n, M, d)-codice q-ario. Per definizione, M ≤ Aq (n, d).
Teorema 1.9 (Disuguaglianza di Singleton).
Aq (n, d) ≤ q n−d+1 .
Nel caso lineare, questa disuguaglianza si riduce a k ≤ n − d + 1.
CAPITOLO 1. NOZIONI BASE SUI CODICI
7
Dimostrazione. Consideriamo l’applicazione
C → Qn−d+1
v1 v2 . . . vn 7→ v1 v2 . . . vn−d+1
Dato che la distanza minima tra due parole del codice è d, quest’applicazione è iniettiva, da cui
la tesi.
Teorema 1.10 (Disuguaglianza di Hamming). Posto e = d−1
si ha
2
Aq (n, d) ≤
qn
.
(e)
Vqn
Dimostrazione. Basta osservare che se v e v 0 sono due distinte parole del codice allora
S (v, e) ∩ S (v 0 , e) = ∅,
pertanto l’unione
[
S (v, e)
v∈C
è disgiunta e quindi
X
[
|S (v, e)|
S (v, e) =
v∈C
v∈C
X
=
Vqn (e) = M · Vqn (e) ≤ q n
v∈C
da cui si ricava la tesi.
Teorema 1.11 (Disuguaglianza di Gilbert-Varshamov).
Vqn
qn
≤ Aq (n, d) .
(d − 1)
Dimostrazione. Sia C un (n, M, d)-codice ottimale, cioè M = |C| = Aq (n, d): per definizione,
ogni parola in Qn ha distanza minore di d da almeno una parola di C, altrimenti aggiungendo
tale parola si otterrebbe un codice più grande con la stessa lunghezza e la stessa distanza minima,
contro la definizione di ottimalità.
Questo vuol dire che
[
Qn =
S (v, d − 1)
v∈C
da cui
qn ≤
X
|S (v, d − 1)|
v∈C
≤
X
Vqn (d − 1)
v∈C
≤ Vqn (d − 1) Aq (n, d)
e quindi la tesi.
CAPITOLO 1. NOZIONI BASE SUI CODICI
8
Teorema 1.12 (Disuguaglianza di Plotkin).
1. Se d è pari e 2d > n allora
d
A2 (n, d) ≤ 2
;
2d − n
2. se d è dispari e 2d + 1 > n allora
A2 (n, d) ≤ 2
d+1
;
2d + 1 − n
3. se d e pari allora
A2 (2d, d) ≤ 4d;
4. se dè dispari allora
A2 (2d + 1, d) ≤ 4d + 4.
(Senza dimostrazione)
Prime applicazioni
Già queste poche nozioni sono sufficienti per ottenere alcune informazioni sull’esistenza di un
codice e sulle sue proprietà di scoperta e correzione di errori.
I seguenti due lemmi hanno dimostrazione ovvia a partire dalla definizione.
Proposizione 1.13.
1. Siano C, C 0 = α (C) due codici equivalenti e siano v, y ∈ C; allora
d (v, y) = d = (α (v) , α (y)) .
In particolare, le distanze minime coincidono.
2. Se C è un codice e v ∈ Qn , allora esiste un codice C 0 equivalente a C tale che v ∈ C 0 .
Dimostrazione. Banale.
Proposizione 1.14. Un (n, M, d)-codice C che corregge t errori scopre almeno t errori.
Dimostrazione. Sia v ∈ C. Dal fatto che C corregge t errori segue che ∃!w : w ∈ C ∩ S (v, t) ; ma
chiaramente v ∈ S (v, t) , pertanto C ∩ S (v, t) = {v} .
Proposizione 1.15. Un (n, M, d)-codice C corregge t errori se, e solo se,
∀v, y ∈ C (v 6= y ⇒ S (v, t) ∩ S (y, t) = ∅) .
Dimostrazione. Siano v, y ∈ C due distinte parole del codice; allora
S (v, t) ∩ S (y, t) 6= ∅ ⇐⇒ ∃w ∈ Qn tale che v, y ∈ S (w, t) .
Teorema 1.16. Sia C un (n, M, d)-codice.
1. C scopre s errori se, e solo se, d ≥ s + 1.
(1.5)
CAPITOLO 1. NOZIONI BASE SUI CODICI
9
2. C corregge t errori se, e solo se, d ≥ 2t + 1.
In altre parole, un (n, M, d)-codice scopre fino a d − 1 errori e corregge fino a
d−1 2
errori.
Dimostrazione. 1. Dire che C scopre s errori è la stessa cosa che dire che se si considera una
parola v ∈ C allora non è possibile modificare v in al più s posizioni ed ottenere ancora una
parola di C, vale a dire che per ogni v ∈ C si ha che S (v, s) ∩ C = {v}, che è la stessa cosa che
dire che la distanza minima del codice è maggiore o uguale a s + 1.
2. Supponiamo prima che d ≥ 2t + 1. Sia w una parola qualsiasi in cui ci sono al più t errori.
Dire che C è in grado di correggere tali errori vuol dire che nella palla di centro w e raggio t
esiste un’unica parola del codice: |S (w, t) ∩ C| = 1. Supponiamo per assurdo che esistano due
parole distinte v, y ∈ C tali che v, y ∈ S (w, t) ∩ C. Applicando la disuguaglianza triangolare si
ha
d (v, y) ≤ d (v, w) + d (w, y) ≤ t + t = 2t,
contro l’ipotesi.
Viceversa, supponiamo che d ≤ 2t e siano v, y due differenti parole del codice che distano
tra loro d. Grazie alla proposizione 1.13, senza perdere di generalità, possiamo supporre che
le coordinate in cui le due parole differiscono sono le prime 2t, pertanto se v = v1 . . . vn e
y = y1 . . . yn allora vi = yi per i > 2t. Definiamo w = w1 . . . wn tramite
(
vi se i ≤ t
wi =
yi se i > t
Con questa definizione, si ha v, y ∈ B (w, t), pertanto C non è in grado di correggere t errori.
Osservazione 1.17. Supponiamo che C sia un codice che riesce a correggere fino a t errori; sia v
la parola del codice inviata e w la parola ricevuta. Se d (v, w) ≤ t, la funzione di correzione degli
errori è in grado di ricostruire correttamente v a partire da w, usando il fatto che v è l’unica
parola di C nella palla di centro w e raggio t.
Nel caso in cui durante una trasmissione avvengano più di t errori, si possono verificare due
casi:
1. nella palla di centro w e raggio t non c’è nessuna parola del codice: S (w, t) ∩ C = ∅ (ciò è
possibile solo se C non è perfetto). In questo caso, la funzione di correzione deve restituire
un codice di errore;
2. nella palla di centro w e raggio t c’è una parola del codice: S (w, t) ∩ C = {u}. In realtà, u
non è la parola del codice v che è stata inviata, ma questo la funzione di correzione non può
saperlo e quindi corregge w restituendo u dato che d (w, u) ≤ t partendo dal presupposto
errato che siano avvenuti al più t errori. Si capisce che non può esservi rimedio a questo
equivoco.
Come già osservato, è questo il motivo per cui siamo costretti a fare l’ipotesi di lavoro che nella
trasmissione si siano verificati al più t errori.
Esempio 1.18. Se nel codice di ripetizione 1.4 viene spedita la parola v = 000 ma si verificano
due errori e si riceve la parola w = 101, allora w viene corretta, erroneamente, in u = 111.
Proposizione 1.19. La minima distanza di un codice perfetto è dispari.
CAPITOLO 1. NOZIONI BASE SUI CODICI
10
Dimostrazione.
Supponiamo che C sia un (n, M, d)-codice perfetto con d = 2e + 2. Si ha che
d−1 =
e.
2
Fissiamo una parola del codice v e modifichiamola nelle prime e + 1 posizioni in modo da
avere una parola w tale che d (v, w) = e + 1; per costruzione, w ∈
/ S (v, e).
Sia ora y un’altra parola del codice. Si ha d (v, y) ≥ 2e + 2 e quindi, per la disuguaglianza
triangolare,
2e + 2 ≤ d (v, y) ≤ d (v, w) + d (w, y) = e + 1 + d (w, y)
e, pertanto, d (w, y) ≥ e + 1, cioè w ∈
/ S (y, e).
In definitiva,
[
w∈
/
S (v, e) ,
v∈C
contro la proposizione 1.8.
Teorema 1.20. Sia d un numero intero positivo pari.
Esiste un (n, M, d)-codice binario se, e solo se, esiste un (n − 1, M, d − 1)-codice binario.
In particolare,
A2 (n, d) = A2 (n − 1, d − 1) .
Dimostrazione. (⇒) Sia C un (n, M, d)-codice binario e siano c, c0 ∈ C tali che d (c, c0 ) = d.
Scegliamo una posizione i in cui essi differiscono. Posto Q = {0, 1}, consideriamo l’applicazione
∼
f : Qn → Qn−1
v1 . . . vn 7→ v1 . . . vi−1 vi+1 . . . vn
È chiaro che
(
d (f (v) , f (y)) =
d (v, y)
d (v, y) − 1
se vi = yi
se vi =
6 yi
ed inoltre la funzione f è iniettiva su C, dato che d ≥ 2; pertanto il codice f (C) così ottenuto è
un (n − 1, M, d − 1)-codice.
(⇐) Sia C un (n − 1, M, d − 1)-codice binario. Definiamo
∼
f : Qn−1 → Qn
v1 . . . vn−1 7→ v1 . . . vn−1 δv
dove
δv =
n−1
X
vi
i=0
Chiaramente f (C) ha lunghezza n e, essendo f iniettiva, ha dimensione M. Resta da vedere la
distanza minima.
Se v, y ∈ Qn , si ha
d (f (v) , f (y)) = d (v, y) + δv,y
dove
δv,y = δv + δy
pertanto d (f (C)) ≥ d (C) = d − 1. Osserviamo che è facile verificare che
δv,y = # {i tale che vi 6= yi } .
CAPITOLO 1. NOZIONI BASE SUI CODICI
11
Se prendiamo ora c, c0 ∈ C tali che d (c, c0 ) = d (C) = d − 1, abbiamo che d (f (c) , f (c0 )) =
d (c, c0 ) + δc,c0 ≤ d − 1 + 1 = d.
In definitiva, sappiamo che d (f (C)) ∈ {d − 1, d} .
D’altra parte,
(
0 se v e y differiscono in un numero pari di posizioni
δv,y =
1 se v e y differiscono in un numero dispari di posizioni
pertanto d (f (v) , f (y)) deve essere un numero pari e quindi d (f (C)) = d.
1.3
Costruzione di codici nuovi da codici vecchi
Ci sono alcune tecniche standard che permettono di costruire nuovi codici a partire da codici
dati: vediamone alcune.
Perforazione
Sia C un (n, M, d)-codice su Q e sia T ={i1 , . . . , it } un insieme di indici; la perforazione C T
di C è il sottoinsieme di Qn−t che si ottiene prendendo le parole di C e cancellando in ognuna le
coordinate i1 , . . . , it .
Osservazione 1.21. Supponiamo T = {i}; se la distanza minima d è maggiore di 1, allora
T
C = |C|
e
d C
T
(
d
=
d−1
se C ha una parola di peso minimo con la i -esima coordinata non nulla;
altrimenti.
Accorciamento
Sia T ={i1 , . . . , it } un insieme di indici e Qt = (q1 , . . . , qt ) una t-upla di simboli di Q;
consideriamo il sottocodice
C (T, Qt ) = v = v1 . . . vn ∈ C : vij = qj ∀j = 1, . . . , t .
L’accorciamento CT,Qt di C su T è la perforazione su T del sottocodice C (T, Qt ), cioè CT =
T
C (T, Qt ) .
Somma diretta
Siano C1 e C2 , rispettivamente, un (n1 , M1 , d1 )-codice ed un (n2 , M2 , d2 )-codice su Q.
Se v 0 = v10 . . . vn0 1 ∈ C1 e v 00 = v100 . . . vn002 ∈ C2 , la concatenazione di v 0 e v 00 è data dalla parola
0 00
(v , v ) = v10 . . . vn0 1 v100 . . . vn002 ∈ Qn1 +n2 .
La somma diretta di C1 e C2 è il codice
C1 ⊕ C2 = (v 0 , v 00 ) ∈ Qn1 +n2 : v 0 ∈ C1 , v 00 ∈ C2 .
Nel caso in cui Q ha qualche tipo di struttura algebrica le costruzioni possono essere descritte anche tramite tale struttura e se ne possono definire altre. Un caso di questo tipo molto
importante è quello dei codici lineari.
Sia dunque Q = Fq e C un [n, k, d]-codice su Fq .
CAPITOLO 1. NOZIONI BASE SUI CODICI
12
Accorciamento (caso lineare)
Sia T ={i1 , . . . , it } un insieme di indici e consideriamo il sottocodice
C (T ) = v = v1 . . . vn ∈ C : vij = 0 ∀j = 1, . . . , t .
T
L’accorciamento CT di C su T è la perforazione su T del sottocodice C (T ), cioè CT = C (T ) .
Estensione
Il codice esteso Ĉ è il codice definito da
Ĉ = v1 . . . vn+1 ∈ Fn+1
: v1 . . . vn ∈ C ∧ v1 + · · · + vn + vn+1 = 0 .
q
Codice duale
Indichiamo con v · y il prodotto scalare standard di due vettori di Fnq : v · y = v1 y1 + · · · + vn yn .
Il codice duale C ⊥ è definito come
C ⊥ = y ∈ Fnq : v · y = 0 ∀v ∈ C .
La costruzione (C1 , C2 )
Siano C1 e C2 , rispettivamente, un [n, k1 , d1 ]-codice ed un [n, k2 , d2 ]-codice su Fq . Il codice
(C1 |C2 ) è definito come
(C1 |C2 ) = (u, u + v) ∈ F2n
q : u ∈ C1 ∧ v ∈ C2 .
Capitolo 2
Codici lineari
Nel seguito C sarà sempre un [n, k, d]-codice lineare su un campo finito Fq , cioè un Fq sottospazio vettoriale di dimensione k dello spazio vettoriale Fnq . Per brevità, useremo sempre la
notazione K = Fq , V = Fnq = K n .
2.1
Prime proprietà
Nel caso dei codici lineari, la distanza è strettamente legata al concetto di peso.
Definizione 2.1. Se v = v1 . . . vn ∈ V il peso w (v) di v è il numero delle sue coordinate non
nulle:
w (v) = |{i : vi 6= 0}| .
Il peso minimo di C è il minimo dei pesi delle parole non nulle di C:
w (C) = min {w (v) : v ∈ C ∧ v 6= 0} .
Proposizione 2.2. Siano v, y, z ∈ V, α ∈ K ∗ ; allora
1. d (v + z, y + z) = d (v, y);
2. d(αv, αy) = d (v, y);
3. d (v, y) = d (v − y, 0) = w (v − y);
4. d (C) = w (C).
Dimostrazione. Esercizio.
Essendo un sottospazio vettoriale, C è completamente determinato da una sua base: ciò ci
permette di di contare quanti [n, k]-codici distinti esistono.
Proposizione 2.3. Il numero di basi ordinate di C è
q k − 1 q k − q · · · q k − q k−1 .
Dimostrazione. Per costruire una base ordinata v 1 , . . . , vk di C possiamo scegliere a piacere
2
1
v 1 in C \ {0}, poi possiamo
1 2 scegliere a piacere v in C \ v , successivamente possiamo scegliere
3
a piacere v in C \ v , v e così via.
13
CAPITOLO 2. CODICI LINEARI
14
La prima scelta può essere operata in q k − 1 modi, la seconda in q k − q modi, la terza in
q − q 2 modi e così via. Da ciò, segue la formula.
k
Proposizione 2.4. Il numero degli [n, k]-codici distinti
(q n − 1) q n−1 − 1 · · · q n−k+1 − 1
.
(q k − 1) (q k−1 − 1) · · · (q − 1)
Dimostrazione. Dobbiamo contare quanti sono i sottospazi di V di dimensione k.
Contando come prima, il numero di k-uple (ordinate) di vettori linearmente indipendenti di
V è dato da
(q n − 1) (q n − q) · · · q n − q k−1 .
Ogni tale k-upla individua un sottospazio
di dimensione k e ogni tale sottospazio ha lo stesso
numero di basi, vale a dire q k − 1 q k − q · · · q k − q k−1 , per la proposizione precedente.
Il numero di sottospazi distinti è quindi il quoziente di questi due numeri, cioè la tesi.
Proposizione 2.5. Siano C, C 0 , C1 , C2 codici lineari con parametri, rispettivamente, [n, k, d],
[n, k 0 , d0 ], [n1 , k1 , d1 ], [n2 , k2 , d2 ] e T un insieme di indici; allora i codici C T , CT , Ĉ, C ⊥ , C1 ⊕C2
e (C|C 0 ) sono tutti lineari. Inoltre
dim C ⊥ = n − k;
⊥
C ⊥ = C;
C⊥
C⊥
T
T
= CT
⊥
;
⊥
= (CT ) ;
h
i
i parametri di Ĉ sono n + 1, k, dˆ con dˆ ∈ {d, d + 1};
se T = {i}, allora i parametri di C T sono
. se d > 1
• [n − 1, k, d − 1] se C ha una parola di peso minimo con la i-esima coordinata non
nulla;
• [n − 1, k, d] altrimenti
. se d = 1
• [n − 1, k − 1, d0 ] con d0 ≥ 1 se C ha una parola di peso 1 con la i-esima coordinata
non nulla;
• [n − 1, k, 1] altrimenti;
se T = {i} la distanza minima di CT è maggiore o uguale a quella di C;
i parametri di C1 ⊕ C2 sono [n1 + n2 , k1 + k2 , min {d1 , d2 }];
i parametri di (C|C 0 ) sono [2n, k + k 0 , min {2d, d0 }].
CAPITOLO 2. CODICI LINEARI
15
Dimostrazione. La maggior parte delle affermazioni sono banali o ben note in algebra lineare:
vediamo quindi solo le affermazioni meno ovvie.
⊥
⊥
C ⊥ T = C T : vediamo per prima l’inclusione C ⊥ T ⊆ C T . Sia v ∈ V e indichiamo
con v ∗ il vettore ottenuto cancellando le coordinate in T. v ∗ ∈ C ⊥ T è equivalente a dire che
v · y = 0 per ogni y ∈ C e che in tutti gli indici in T il valore della corrispondente coordinata di
⊥
v è 0. Da ciò segue anche v ∗ · y ∗ = 0 e quindi v ∗ ∈ C T .
⊥
Viceversa, sia ṽ ∈ C T . Questo vuol dire che ṽ · y ∗ = 0 per ogni y ∗ ∈ C T . Costruiamo
adesso v ∈ V mettendo 0 nelle coordinate indicate in T e i valori delle rispettive coordinate di ṽ
nelle altre, in modo che v ∗ = ṽ. In questo modo se y ∈ C si ha v · y = v ∗ · y ∗ = ṽ · y ∗ =0, quindi
v ∈ C ⊥ ; inoltre le coordinate in T di v sono 0 per costruzione, pertanto v ∗ = ṽ ∈ C ⊥ T .
La successiva è simile.
(C|C 0 ) è un [2n, k + k 0 , min {2d, d0 }]-codice: che la lunghezza delle parole sia 2n segue dalla
definizione. Sia v1 , . . . , vk una base di C e sia v10 , . . . , vk0 0 una base di C 0 . È facile verificare che
(v1 , v1 ) , . . . , (vk , vk ) , (0, v10 ) , . . . , (0, vk0 0 )
è una base di (C|C 0 ).
Siano ora v ∈ C e v 0 ∈ C 0 , in modo che (v, v + v 0 ) ∈ (C|C 0 ).
Se v 0 = 0 allora w ((v, v)) = 2w (v) ≥ 2d; notiamo che vale l’uguaglianza se v (non nullo) è di
peso minimo in C.
Per contro, se v = 0 allora w (0, v 0 ) ≥ d0 e, nuovamente, vale l’uguaglianza per qualche v 0 .
Da ciò, la tesi.
2.2
Codici lineari equivalenti
Nella definizione di equivalenza tra codici data in 1.1, il fatto di ammettere tutte le permutazioni dei simboli in una coordinata fissata non ci permette di mantenere la linearità di un
codice.
Esempio 2.6. Sia
C = {00, 11, 22} ⊆ F23
e applichiamo la permutazione σ = (0, 1, 2) alla seconda coordinata: il codice {01, 12, 20} che si
ottiene in questo modo non è lineare.
Se ci interessa mantenere la proprietà di linearità nell’equivalenza è quindi necessario restringere la definizione.
Definizione 2.7. Due codici lineari di lunghezza n si dicono equivalenti se si ottengono l’uno
dall’altro mediante operazioni del seguente tipo:
1. applicazione di una permutazione di {1, . . . , n} alle coordinate di tutte le parole del codice;
2. moltiplicazione per uno scalare di una coordinata fissata in tutte le parole del codice.
Questa definizione ci induce a considerare tutte le trasformazioni di V definite nello stesso
modo.
Definizione 2.8. Un’applicazione f : V → V si dice trasformazione monomiale se esistono
n costanti non nulle d1 , . . . , dn ∈ F∗q e una permutazione σ ∈ Sn tali che
f (v1 , . . . , vn ) = d1 vσ(1) , . . . , dn vσ(n) .
CAPITOLO 2. CODICI LINEARI
16
È facile vedere che una trasformazione monomiale è un’applicazione lineare e la matrice che
la rappresenta è del tipo SD, dove S è una matrice di permutazione e D è una matrice diagonale
invertibile.
Ricordiamo che un’isometria è un automorfismo lineare di V che conserva la distanza:
d (f (y) , f (z)) = d (y, z) ∀y, z ∈ V.
Equivalentemente, w (f (v)) = w (v) per ogni v ∈ V .
Proposizione 2.9. Una trasformazione lineare f : V → V è un’isometria se, e solo se, è una
trasformazione monomiale.
Dimostrazione. Chiaramente una trasformazione monomiale è un’isometria. Sia f un’isometria
e sia {e1 , . . . , en } la base canonica di V = Fnq . Dato che w (f (ei )) = w (ei ) = 1, si deve avere
f (ei ) = di eσ(i) per qualche di ∈ Fq e σ (i) ∈ {1, . . . , n}. Dato che f è invertibile, ne segue che di
è non nullo per ogni i e inoltre i 7→ σ (i) è una permutazione.
Siano C1 , C2 ⊂ V due codici lineari e f : V → V un’isometria. Per quanto visto, se f (C1 ) =
C2 allora i due codici sono equivalenti.
È vero anche il viceversa.
Teorema 2.10 (di estensione). Siano C1 , C2 ⊂ V due codici lineari e f : C1 → V un’applicazione
lineare tale che f (C1 ) = C2 . Se w (f (v)) = w (v) per ogni v ∈ C1 , allora f può essere estesa ad
una isometria di V .
Dimostrazione. f è iniettiva, pertanto C1 e C2 hanno la stessa dimensione.
Siano y ∈ V \ C1 e z ∈ V \ C2 . Definiamo
f1 : C1 ⊕ Fq y → C2 ⊕ Fq z
v + ky 7→ f (v) + kz
È evidente che f1 è un’applicazione lineare in V che conserva il peso e tale che f1 |C1 = f .
Continuando ad estendere iterativamente in questo modo, dopo n − dim C1 passi si ha la tesi.
2.3
Matrice generatrice e matrice di controllo
Un codice C è un sottospazio vettoriale (di dimensione k) di V pertanto può essere descritto
in due modi fondamentali:
in modo esplicito, come combinazione lineare di una base;
in modo implicito, come l’insieme delle soluzioni di un sistema di equazioni lineari.
Per esprimere il codice esplicitamente abbiamo bisogno di una base v 1 , . . . , v k di C ed ogni altro
vettore di C si esprimerà in modo unico come combinazione lineare di questi vettori:
∀v ∈ C∃!λ1 , . . . , λk ∈ Fnq | v = λ1 v 1 + · · · + λk v k .
(2.1)
Naturalmente, le coordinate (λ1 , . . . , λk ) di v sono riferite alla base v 1 , . . . , v k di C.
Se in V è data una base B e vogliamo esprimere i vettori di C relativamente
alla base di V
allora dobbiamo esprimere ogni v i in funzione della base B: v i = v1i , . . . , vni . La formula (2.1)
ci permette di scrivere v in funzione della base B: se indichiamo con G la matrice k × n in cui al
CAPITOLO 2. CODICI LINEARI
17
posto (i, j) troviamo vji allora le coordinate di v nella base B sono date dal vettore (λ1 , . . . , λk )G.
Osserviamo che la funzione
Kk → Kn = V
(λ1 , . . . , λk ) 7→ (λ1 , . . . , λk )G
è una funzione di codifica per C.
Definizione 2.11. La matrice G è detta matrice generatrice del codice C. Pertanto, la
matrice generatrice di un [n, k]-codice è una matrice k×n le cui righe sono una base del sottospazio
vettoriale C.
Una matrice generatrice G per un [n, k]-codice C si dice in forma standard se è della forma
G = [Ik |A], dove Ik è la matrice identità di dimensione k e A è una matrice k × (n − k).
Osservazione 2.12. Una matrice generatrice in forma standard è particolarmente comoda, dato
che fornisce una codifica sistematica: se (λ1 , . . . , λk ) è l’informazione da codificare, allora nella
codifica si ha
(λ1 , . . . , λk ) 7→ (λ1 , . . . , λk )G = (λ1 , . . . , λk , vk+1 , . . . , vn )
per qualche vk+1 , . . . , vn e quindi l’informazione è presente in modo esplicito nella parola codificata. Ciò ovviamente rende anche immediata l’operazione di decodifica. Se invece la matrice
generatrice non è in forma standard, per effettuare la decodifica si deve risolvere il sistema lineare
n × k dato da
 
v1
 
x1
 .. 
  .

G  ...  = 
 . .
 .. 
xk
vn
Esempio 2.13. Sia C il [4, 2, 2]-codice binario generato da 1011 e 0101, cioè
C = {0000, 1011, 0101, 1110} .
Una matrice generatrice di C è
G=
1
0
0
1
1
0
1
.
1
Descrivere C in modo implicito significa invece vedere C come l’insieme delle soluzioni di un
sistema lineare omogeneo; dall’algebra lineare sappiamo che se H è la matrice che individua il
sistema lineare di equazioni la dimensione di {v ∈ V | Hv tr = 0} è n − rk H, pertanto H deve
essere una matrice di rango n − k.
Per quanto visto nella sezione 2.2, cercare un’equivalenza tra due codici è la stessa cosa che
cercare un’isometria dello spazio vettoriale V in se stesso che mandi un codice nell’altro, pertanto
la descrizione di un codice tramite le matrici permette di ricondurre il problema dell’equivalenza
di due codici a ben note tecniche di algebra lineare. Richiamiamo le operazioni fondamentali di
riga e colonna sulle matrici:
R1 permutazione di due righe;
R2 moltiplicazione di una riga per uno scalare non nullo;
R3 somma di una riga con un multiplo scalare di un’altra;
CAPITOLO 2. CODICI LINEARI
18
C1 permutazione di due colonne;
C2 moltiplicazione di una colonna per uno scalare non nullo;
C3 somma di una colonna con un multiplo scalare di un’altra.
Dai teoremi dell’algebra lineare riguardanti la rappresentazione delle applicazioni lineari tramite
matrici abbiamo che
Teorema 2.14. Due matrici sono le matrici generatrici (oppure le matrici di controllo di parità)
per lo stesso codice se, e solo se, si ottengono l’una dall’altra con un numero finito di operazioni
di tipo R1, R2 ed R3.
Due matrici sono le matrici generatrici (oppure le matrici di controllo di parità) per due
codici equivalenti se, e solo se, si ottengono l’una dall’altra con un numero finito di operazioni
di tipo R1, R2, R3, C1 C2.
Dimostrazione. Un codice C è un sottospazio di K n di dimensione k, cioè è l’immagine di
un’applicazione lineare iniettiva γ : K k ,→ K n (i.e., la funzione di codifica). Fissiamo in K n , una
volta per tutte, la base canonica e indichiamo le coordinate dei vettori rispetto a tale base con dei
vettori riga; con tale notazione la matrice generatrice G è la matrice che rappresenta l’applicazione
lineare γ rispetto alla base canonica di K k , cioè se u ∈ K k ha coordinate (u1 , . . . , uk ) allora
γ (u) = v dove v è il vettore di coordinate (u1 , . . . , uk ) G.
In questo contesto, la composizione di operazioni di riga sulla matrice generatrice di C può
essere considerata come un cambiamento di base in K k pertanto, fissata la base canonica in
K n , effettuando operazioni di riga sulla matrice generatrice non si cambiano le coordinate di un
vettore di K n rispetto alla base fissata e quindi facendo solo operazioni di righe si trova una
nuova matrice generatrice per il codice considerato.
Continuando a mantenere fissata la base canonica di K n , la composizione di operazioni di
colonna su G (o, equivalentemente, la moltiplicazione a destra per una matrice n × n invertibile)
può essere interpretata come un’applicazione lineare f : K n → K n (scegliendo la base canonica
anche nel codominio) e, per la proposizione 2.9, tale applicazione è un’isometria se, e solo se, si
usano solo operazioni di tipo C1 e C2. L’immagine del codice sarà in questo caso equivalente al
codice di partenza ma in generale diverso.
Osservazione 2.15. Come detto, l’operazione di tipo C3 non è ammissibile perché, se usata,
dà luogo ad un’applicazione lineare che non è un’isometria, pertanto trasforma il codice in un
codice non equivalente: per esempio, i due codici binari C = {00, 10} e C 0 = {00, 11} hanno come
matrici generatrici G = [1 0] e G0 = [1 1] che si ottengono l’una dall’altra con un’operazione C3,
però non sono equivalenti perché hanno peso minimo diverso.
Grazie a questo teorema, partendo da una matrice generatrice se ne può ottenere un’altra
che abbia una forma standard.
Proposizione 2.16. Sia G matrice generatrice per un [n, k]-codice C. Sono equivalenti:
1. G fornisce una codifica sistematica;
2. G si può ridurre in forma standard usando solo operazioni di tipo C1;
3. esiste un insieme di indici i1 , . . . , ik tali che le colonne Gij di G formano la matrice identità
Ik .
Dimostrazione. Segue dalle definizioni.
CAPITOLO 2. CODICI LINEARI
19
Corollario 2.17. Ogni codice lineare ammette una codifica sistematica.
Ogni codice lineare è equivalente ad un codice lineare avente matrice generatrice in forma
standard.
Dimostrazione. Si tratta semplicemente della classica eliminazione gaussiana. Notiamo che per
ottenere ciò che ci interessa sono sufficienti le operazioni R1, R2, R3 e C1. Se si usano solo le
operazioni R1, R2 ed R3 si ottiene una codifica sistematica del codice di partenza ma con matrice
in forma non necessariamente standard. Se si ammette anche l’operazione C1 allora la matrice
può essere ridotta in forma standard ma il codice si trasforma in un codice equivalente.
Come osservato, un sottospazio di uno spazio vettoriale può anche essere descritto in forma
implicita, come spazio delle soluzioni di un sistema lineare omogeneo. Questo punto di vista in
teoria di codici conduce al concetto di controllo di parità.
Definizione 2.18. Una matrice H di dimensione (n − k) × n e rango n − k è detta matrice di
controllo della parità di C se è tale che C = {v ∈ V : Hv tr = 0} .
Teorema 2.19. Sia C un codice lineare e G una sua matrice generatrice, H una matrice (n −
k) × n; allora
1. v ∈ C ⊥ ⇔ Gv tr = 0 ⇔ vGtr = 0;
2. H è una matrice di controllo della parità di C se, e solo se, H è una matrice generatrice
di C ⊥ ;
3. H è una matrice di controllo della parità di C se, e solo se, H ha rango n − k e GH tr = 0.
Dimostrazione. Banale.
Esempio 2.20. Sia C il [4, 2, 2]-codice binario generato da 1011 e 0101.
C ⊥ ha dimensione 2; dato che 1101, 0111 ∈ C ⊥ allora
C ⊥ = h1101, 0111i = {0000, 1101, 0111, 1010} .
Una matrice generatrice di C ⊥ (e quindi una matrice di controllo della parità di C) è
1 1 0 1
H=
.
0 1 1 1
Se un codice ha la matrice generatrice in forma standard diventa particolarmente semplice
calcolare una matrice di controllo della parità:
Teorema 2.21. Se la matrice generatrice di C è G = [Ik |A] allora la matrice H = [−Atr |In−k ]
è una matrice di controllo della parità di C.
Dimostrazione. È evidente che il rango di H è n − k ed è semplice verificare che GH tr = 0.
Esempio 2.22. Sia C il [4, 2,
2]-codice binario generato da 1011 e 0101. Dato che la matrice
1 0 1 1
generatrice G =
è in forma standard, senza calcolare C ⊥ e una sua base possiamo
0 1 0 1
subito concludere che una matrice di controllo di parità di C è
1 0 1 0
H=
.
1 1 0 1
CAPITOLO 2. CODICI LINEARI
20
Dalla matrice di controllo di parità è possibile ricavare informazioni sulla distanza minima:
Teorema 2.23. Sia C un [n, k]-codice con matrice di controllo della parità H. Allora C ha
distanza minima almeno d se, e solo se, ogni insieme di d − 1 colonne di H è linearmente
indipendente.
Dimostrazione. (⇒) Siano H 1 , . . . , H n le colonne di H e supponiamo che d − 1 di esse siano
dipendenti. Possiamo supporre che si tratti delle prime d − 1 colonne. Siano λ1 , . . . , λd−1 ∈ Fq
non tutti nulli tali che
λ1 H 1 + · · · + λd−1 H d−1 = 0.
(2.2)
Definiamo v = v1 . . . vn ∈ V tramite
(
λi
vi =
0
se i ≤ d − 1
altrimenti
L’equazione (2.2) può essere riscritta come Hv t = 0 che, essendo H una matrice di controllo,
implica v ∈ C, pertanto d (c) ≤ d − 1.
(⇐) Se d (C) < d allora esiste una parola v ∈ C di peso minore di d. Dato che Hv tr = 0, ciò
implica che le colonne di H relative agli indici di v con coordinata non nulla sono linearmente
dipendenti.
Corollario 2.24. Un codice lineare con matrice di controllo H ha distanza minima d se, e solo
se,
1. ogni insieme di d − 1 colonne di H è linearmente indipendente;
2. esiste un insieme di d colonne di H linearmente dipendenti.
In particolare,
d (C) ≥ 2 se, e solo se, non ci sono colonne nulle.
d (C) ≥ 3 se, e solo se, non ci sono due colonne l’una multipla dell’altra.
2.4
Codici di Hamming
I codici di Hamming sono una famiglia di codici lineari che generalizza un codice di parametri
[7, 4] ideato da R. Hamming ai Laboratori Bell nel 1950.
Vediamo innanzi tutto la descrizione del codice originario, poi generalizzata.
Esempio 2.25. Codice di Hamming [7, 4]
Descrizione: Individua e corregge un errore.
Alfabeto: F2 = {0, 1}.
Lunghezza: 7.
Dimensione: 4.
CAPITOLO 2. CODICI LINEARI
21
Funzione di codifica:
F42 → F72
u 7→ uG
dove G è la matrice

1 1
 1 0

G=
0 1
1 1
il che è equivalente a dire che il vettore
1
0
0
0
u= a
0
1
1
1
b
0
1
0
0
0
0
1
0

0
0 
,
0 
1
d
c
viene codificato con il vettore
v= x
dove
y
a
z
b
c
d


x = a + b + d
y =a+c+d


z =b+c+d
Tasso di informazione: 4/7.
Parole del codice:




1110000
C=
1101001



1001100
1100110
1000011
1011010
0000000
0101010 0100101
1010101 0111100
1111111
0011001
0110011




0010110
0001111 


Distanza minima: 3.
Controllo: Sia e l’errore avvenuto nella trasmissione e r = v + e la parola ricevuta. Per
costruzione v ∈ C se, e solo se, Hv tr = 0, dove H è la matrice di controllo di parità


1 0 1 0 1 0 1
H = 0 1 1 0 0 1 1 .
0 0 0 1 1 1 1
Il controllo avviene quindi calcolando Hrtr = H(v tr + etr ) = Hv tr + Hetr = Hetr .
Correzione: Poiché si assume che d (r, v) ≤ 1, cioè che d (e, 0) ≤ 1, si ha:
. Hrtr = 0 ⇔ r = 0 (non ci sono stati errori);
. Hrtr = H i ⇔ e = ei , dove ei è l’i-esimo vettore della base canonica di F72 (e quindi
c’è stato un errore nella posizione i).
Decodifica: Avviene semplicemente per estrazione dei bit di informazione:


0 0 0 0
0 0 0 0


1 0 0 0



u = v
0 0 0 0 .
0 1 0 0


0 0 1 0
0 0 0 1
CAPITOLO 2. CODICI LINEARI
22
Osserviamo che la matrice generatrice non è in forma standard però è sufficiente una permutazione delle colonne per portarla in forma standard. Il vantaggio di avere la matrice in questa
forma è dato dal fatto che la colonna H i della matrice di controllo H non è altro che l’espressione
binaria di i. Grazie a ciò, non è necessario costruire una tabella delle sindromi per gli elementi
direttori: se si è verificato un (solo) errore nella posizione i, possiamo ottenere l’indice i semplicemente calcolando il numero intero la cui espressione binaria è data dalle cifre del vettore
Hrt .
Proposizione 2.26. Il codice di Hamming [7, 4] è un codice perfetto.
Dimostrazione. Nel caso del codice di Hamming i parametri del codice sono n = 7, M = 24 ,
d = 3 e q = 2, per cui la formula che definisce un codice perfetto, cioè
d−1
bX
2 c n
i
(q − 1) = q n
M·
i
i=0
diventa
d−1
bX
1 2 c X
n
7
i
i
4
M·
(q − 1) = 2
(2 − 1) = 24 (1 + 7) = 27 = q n .
i
i
i=0
i=0
Il fatto che il codice sia perfetto dice che le sfere di raggio d−1
(cioè 1, in questo caso)
2
centrate nelle parole del codice ricoprono, senza intersezioni, tutte le parole possibili. È una
proprietà di cui pochi codici possono fregiarsi: a parte i codici banali (codici con una parola
o codici di ripetizione), nel 1973 è stato dimostrato che ogni codice perfetto non banale su un
alfabeto di cardinalità potenza di un primo ha i parametri di un codice di Hamming oppure di
un codice di Golay.
r
Per definire il codice di Hamming in generale, dato un vettore
Pr−1 v = vi 1 . . . vr ∈ K consideriamo
v come la rappresentazione q- aria del numero naturale i=0 vi+1 q . La cifra vr è detta cifra
più significativa di tale numero.
Definizione 2.27. Dati q ed r la matrice di Hamming Hq (r) è la matrice con r righe ed in
cui le colonne sono i vettori v tr che rappresentano, da sinistra a destra, i numeri interi 1, 2, . . . in
base q, limitatamente però a quei numeri che hanno 1 come cifra più significativa.
Il codice di Hamming è quel codice Hq (r) che ha Hq (r) come matrice di controllo di
parità.
Un codice di Hamming q-ario con parametro r è un codice lineare su Fq equivalente a
Hq (r).
Teorema 2.28.
1. La matrice Hq (r) ha r righe e
q r −1
q−1
colonne.
2. Le righe di Hq (r) sono linearmente indipendenti.
3. Due qualunque colonne di Hq (r) sono linearmente indipendenti ed esistono 3 colonne
linearmente dipendenti.
4. Hq (r) è un codice perfetto con parametri
n=
qr − 1
, k = n − r, d = 3.
q−1
CAPITOLO 2. CODICI LINEARI
23
5. Ogni codice lineare su K con gli stessi parametri di Hq (r) è (equivalente a) un codice di
Hamming.
Dimostrazione. 1. Dobbiamo solo calcolare il numero di colonne. Per ciò, osserviamo che, posto
Vi = {v = v1 . . . vr : (vi = 1) ∧ (vj = 0 ∀j > i)}
per i = 1, . . . , r, si ha che |Vi | = q i−1 . Dato che al variare di tutti gli indici i = 1, . . . , r i (trasposti
dei) vettori di Vi formano tutte le colonne di Hq (r), si ha che il numero di tali colonne è
r
X
q i−1 =
i=1
r−1
X
i=0
qi =
qr − 1
.
q−1
2. È sufficiente osservare che nell’insieme Vi appena definito è presente il vettore 0 . . . 010 . . . 0
in cui 1 compare in i-esima posizione, pertanto la matrice identità r × r è una sottomatrice di
Hq (r) e quindi le righe sono linearmente indipendenti.
3. Dire che due vettori sono indipendenti è la stessa cosa che dire che non sono l’uno multiplo
dell’altro.
Siano v ∈ Vi e v 0 ∈ Vi0 . Se i 6= i0 , chiaramente non possono essere l’uno multiplo dell’altro.
Se invece i = i0 , l’unico coefficiente possibile è 1, che implica v = v 0 .
Quanto alla seconda affermazione, è sufficiente considerare i tre vettori
u = 100 . . . 0, v = 010 . . . 0, w = 110 . . . 0.
r
−1
. La dimensione del codice è n − r,
4. Per il punto 1, la lunghezza delle parole è n = qq−1
per il punto 2 e il teorema 2.19. La distanza minima è 3, grazie al punto 3 ed applicando il
teorema 2.23 ed il suo corollario. La formula (1.3) diventa pertanto
d−1
bX
1 2 c X
n
n
i
i
(q − 1) = q k
(q − 1)
M·
i
i
i=0
i=0
= q k (1 + n (q − 1))
= q k (1 + q r − 1) = q k+r = q n
h
i
r
−1
5. Se C è un n = qq−1
, k = n − r, d = 3 -codice la sua matrice di controllo di parità H ha
le stesse dimensioni di Hq (r). Inoltre in H non ci sono due colonne proporzionali perché d = 3
(cfr. il teorema 2.23 ed il suo corollario) e quindi neanche due colonne uguali. Moltiplicando per
un opportuno scalare possiamo supporre che la coordinata più significativa sia 1: in questo modo
ogni colonna di H è una colonna di Hq (r). Dato che hanno le stesse dimensioni, a meno di una
permutazione delle colonne si ha H = Hq (r) .
Osservazione 2.29. Nel caso binario (cioè q = 2) spesso un codice di Hamming viene indicato
non tramite i parametri q ed r ma tramite i parametri [n, k] (la distanza viene omessa essendo
sempre 3). In tal caso, la relazione che lega i parametri diventa n = 2r − 1 e k = n − r, per cui
se vengono dati [n, k] allora si ha r = n − k = log2 (n + 1).
2.5
Enumeratore di peso
L’enumeratore di un codice è un polinomio associato ad un codice che racchiude nei suoi
coefficienti molte informazioni sul codice stesso.
CAPITOLO 2. CODICI LINEARI
24
Definizione 2.30. Sia C un [n, k, d]-codice e i un numero naturale, 0 ≤ i ≤ n; definiamo la
distribuzione del peso di C come gli interi
Ai (C) = # {v ∈ C|w (v) = i} ,
cioè il numero di parole del codice di peso i. Se il codice è sottinteso, useremo semplicemente
Ai . L’enumeratore di peso del codice C è il polinomio
WC (X) =
n
X
Ai (C) X i
i=0
o anche il polinomio omogeneo associato
WC (X, Y ) =
n
X
Ai (C) X i Y n−i .
i=0
Una prima proprietà dell’enumeratore di peso è il
Teorema 2.31. Siano C1 , C2 due codici lineari. Allora
WC1 ⊕C2 (X, Y ) = WC1 (X, Y ) WC2 (X, Y ) .
Dimostrazione. Si ha che Ai (C1 ⊕ C2 ) =
lunghezza di Ci , abbiamo
WC1 ⊕C2 (X, Y ) =
Pi
j=0
nX
1 +n2
Aj (C1 ) Ai−j (C2 ) e quindi, chiamando con ni la
Ai (C1 ⊕ C2 ) X i Y n1 +n2 −i
i=0
Osserviamo ora che se j > n1 allora Aj (C1 ) = 0 e nello stesso modo se i − j > n2 allora
Ai−j (C2 ) = 0, pertanto possiamo scrivere
WC1 ⊕C2 (X, Y ) =
=
nX
1 +n2
i
X
i=0
j=0
n1
X
Aj (C1 ) Ai−j (C2 ) X j X i−j Y n1 −j Y n2 −(i−j)
!
r
Ar (C1 ) X Y
n1 −r
r=0
n2
X
!
s
As (C2 ) X Y
n2 −s
s=0
= WC1 (X, Y ) WC2 (X, Y ) .
Identità di MacWilliams
La distribuzione del peso di C è strettamente collegata alla distribuzione del peso di C ⊥ ,
tramite le identità (2.3).
Prima di vedere il teorema, ricordiamo che se I ⊆ {1, . . . , n} allora la perforazione in I,
indicata con C I , è il codice ottenuto cancellando tutte le coordinate in I, mentre l’accorciamento
CI è la perforazione in I del sottocodice C (I) di C formato da tutte le parole che valgono
0 in tutte le coordinate appartenenti ad I. Ricordiamo anche che per i codici lineari si ha
⊥
I
⊥
CI
= C ⊥ I e (CI ) = C ⊥ .
Indichiamo con I il complementare di I: I = {1, . . . , n} \ I.
CAPITOLO 2. CODICI LINEARI
25
Teorema 2.32 (Identità di MacWilliams). Sia C un [n, k, d]-codice, A0 , . . . , An la sua distribu⊥
⊥
zione del peso e A⊥
0 , . . . , An la distribuzione del peso di C . Allora
n−ν
X
ν X
n−j
n−j
Aj = q k−ν
A⊥
j
ν
n
−
ν
j=0
j=0
(2.3)
per 0 ≤ ν ≤ n.
Dimostrazione. Indichiamo con M la matrice q k × n avente come righe le parole del codice C e
con Mi , M i e Mi,j indichiamo, rispettivamente, la i-esima riga, la i-esima colonna e l’elemento
i, j di M .
Il peso di ogni parola è univocamente determinato, pertanto
n
X
Aj = |C| = q k = q k A⊥
0
(2.4)
j=0
che è la (2.3) per ν = 0.
Per dimostrare le altre equazioni conteremo gli zeri in M in due modi diversi.
Sia 0 < ν ≤ n e indichiamo con Nν il numero di ν-uple di zeri (non necessariamente
consecutivi) nelle righe di M . Più precisamente,
k
Nν =
q
X
n
o
# {j1 , . . . , jν } ⊂ {1, . . . , n} Mi,jh = 0 per ogni h = 1, . . . , ν .
i=1
Dapprima calcoliamo Nν contandoquante ν-uple di zeri ci sono in una riga fissata. Dato che
ogni riga di M di peso j contiene n−j
ν-uple di zeri e considerando che ci sono Aj righe di peso
ν
j, abbiamo
n n−ν
X
X n − j n−j
Nν =
Aj =
Aj ,
(2.5)
ν
ν
j=0
j=0
perché j > n − ν ⇒ ν > n − j ⇒ n−j
= 0.
ν
Calcoliamo ora Nν ragionando sulle colonne: fissata una ν-upla di indici I, contiamo quante
righe hanno una ν-upla di zeri negli indici individuati da I. Sia quindi
I = {j1 , . . . , jν } ⊂ {1, . . . , n}
una ν-upla di indici.
Indichiamo con M I la matrice q k × |I| ottenuta da M cancellando le colonne relative agli
indici contenuti in I. Le righe della matrice M I sono le parole del codice C I , però ogni parola
di tale codice può comparire più di una volta.
Sia kI = dim C I . Se v ∈ C e v I ∈ C I indica la parola ottenuta da v, è immediato verificare che
f : v 7→ v I è un’applicazione lineare suriettiva da C in C I , pertanto il suo nucleo ha dimensione
dim C − dim C I = k − kI , cioè ha cardinalità q k−kI , per cui ogni fibra di tale applicazione ha
cardinalità q k−kI .
D’altra parte ogni riga di M I è l’immagine secondo tale applicazione di una parola di C e
quindi ogni parola di C I compare in M I esattamente q k−kI volte. In particolare, se v ∈ C è una
parola del codice che ha zeri nelle coordinate individuate dagli indici in I, si ha che f (v) = v I
è la parola nulla di lunghezza I. In definitiva, tutte le righe di M che hanno una ν-upla di zeri
CAPITOLO 2. CODICI LINEARI
26
negli indici individuati da I sono tutte le righe che corrispondono, in M I , alla riga nulla; in altri
termini,
X
(2.6)
Nν =
q k−kI .
I⊂{1,...,n}
|I|=ν
⊥
Dato che C I
è un [ν, ν − kI ]-codice, applicando la (2.4) a tale codice si ha
q
ν−kI
ν
X
=
Aj
C
I
⊥ j=0
e quindi la (2.6) diventa
X
Nν =
q k−kI
I⊂{1,...,n}
|I|=ν
= q k−ν
X
q ν−kI
I⊂{1,...,n}
|I|=ν
=q
k−ν
X
ν
X
Aj
C
I
⊥ C
I
⊥ I⊂{1,...,n} j=0
|I|=ν
=q
k−ν
ν
X
X
Aj
(2.7)
j=0 I⊂{1,...,n}
|I|=ν
Sia 0 ≤ j ≤ ν e poniamo
U = (u, I) x ∈ C ⊥ , I ⊂ {1, . . . , n} , |I| = ν, w (u) = j, supp (u) ⊆ I
dove supp (u) indica il supporto di u.
⊥
⊥
Fissiamo I di cardinalità ν: ci sono Aj
vettori v ∈ C I
vettori di peso j; dato
CI
⊥
= C ⊥ I , ne segue che ogni tale v è l’immagine tramite f di un unico u ∈ C ⊥ di
che C I
⊥
P
peso j e supporto contenuto in I. Questo implica che |U | = I⊂{1,...,n} Aj
CI
.
|I|=ν
⊥
Ora fissiamo j: vi sono A⊥
di peso j e per ognuna di queste parole ci sono
j parole u ∈ C
n−j
n−j
ν−j = n−ν sottoinsiemi I ⊆ {1, . . ., n} di cardinalità ν che contengono il supporto di u, cioè
n−j
tali che (u, I) ∈ U , per cui |U | = n−ν
A⊥
j . Usando ciò nella (2.7), otteniamo
Nν = q
k−ν
ν
X
X
Aj
j=0 I⊂{1,...,n}
|I|=ν
=q
che, insieme alla (2.5), dà la tesi.
k−ν
ν X
n−j
A⊥
j
n
−
ν
j=0
C
I
⊥ CAPITOLO 2. CODICI LINEARI
27
Le identità di MacWilliams hanno molte formulazioni equivalenti. Per vederne alcune, diamo
prima una definizione.
Definizione 2.33. I polinomi di Krawtchouck sono definiti come
Kjn,q (X) =
j
X
l
(−1) (q − 1)
j−l
l=0
per 0 ≤ j ≤ n e con
X
l
=
X
n−X
l
j−l
(2.8)
X(X−1)(X−2)···(X−l+1)
.
l!
n−X
Partendo dalle serie di Taylor di (1 + (q − 1) Z)
∞
X
e di (1 − Z)
n−X
Kkn,q (X) Z k = (1 + (q − 1) Z)
X
e moltiplicandole si ottiene
X
(1 − Z)
(2.9)
k=0
Si può dimostrare che per i polinomi di Krawtchouck valgono le seguenti relazioni di ortogonalità:
n X
n
n
i
k
(q − 1) Krn,q (i) Ksn,q (i) = δr,s
(2.10)
(q − 1) q n
i
r
i=0
n
X
Krn,q (i) Kin,q (s) = δr,s q n
(2.11)
i=0
Teorema 2.34. Per un codice C si ha
1
WC (Y − X, Y + (q − 1) X)
|C|
1
1−X
n
WC ⊥ (X) =
(1 + (q − 1) X) WC
|C|
1 + (q − 1) X
WC ⊥ (X, Y ) =
(2.12)
(2.13)
n
A⊥
j =
1 X
Ai Kjn,q (i)
|C| i=0
per j = 0, . . . , n
(2.14)
Dimostrazione. (Cenno) Evidentemente le prime due formule sono equivalenti, essendo la prima
la versione omogenea della seconda.
Per vedere che la (2.12) è equivalente alle (2.14) basta espandere il membro di destra della (2.12): i coefficienti sono dati dalla (2.14).
Per vedere che la (2.12) è equivalente alle (2.3), si sostituisce X + Z al posto di Y , si espande
e si ricavano le (2.3) come coefficienti.
Osservazione 2.35. La (2.14) è la soluzione esplicita della (2.3). Il fatto che quest’ultima sia
risolubile segue subito dall’osservazione che la matrice (n + 1) × (n + 1) dei coefficienti degli A⊥
j
individuata dalle (2.3) è triangolare con coefficienti non nulli sulla diagonale.
Capitolo 3
Codici ciclici
Uno spazio vettoriale può essere dotato di altre strutture algebriche: se si definiscono nuove
strutture i sottospazi vettoriali che vengono definiti tramite esse acquistano proprietà che in alcuni
casi permettono di ottenere informazioni importanti nell’ambito della teoria dei codici. Il caso
dei codici ciclici è un esempio particolarmente significativo di questa tecnica. Anche in questo
capitolo useremo la notazione K = Fq , V = Fnq = K n ; inoltre K [X] sarà l’anello dei polinomi a
coefficienti in K mentre con Rn indicheremo l’anello quoziente Rn = K [X] / (X n − 1) = K [x],
dove si pone x = X + (X n − 1). Osserviamo che in Rn x è un elemento invertibile e il suo inverso
è xn−1 . Come vedremo, in genere supporremo che MCD (n, char K) = 1.
3.1
Spazi vettoriali e polinomi
Uno spazio vettoriale di dimensione n può essere visto come l’insieme dei polinomi a coefficienti in K di grado minore di n; più precisamente,
ι:
Kn
→
K [X]
v = (v1 , . . . , vn ) →
7
v1 + v2 X + · · · + vn X n−1
è un morfismo iniettivo di spazi vettoriali.
È evidente come, in questo contesto, sia più pratico indicare gli indici dei vettori a partire da
0: nel seguito seguiremo quindi questa convenzione. Inoltre, per brevità continueremo a scrivere
v = v0 . . . vn−1 invece di v = (v0 , . . . , vn−1 ), quando questo non genera confusione. L’immagine
di ι verrà brevemente indicata con ι (v) = v (X).
Si ha che ι (V ) è un sottospazio vettoriale di K [X] ma non è un sottoanello, non essendo
chiuso per la moltiplicazione. Vediamo come si può definire in V una struttura di anello.
Sia In l’ideale (X n − 1) e consideriamo la proiezione al quoziente
π : K [X] → Rn = K [X] /In .
Indichiamo con η la composizione η = π ◦ ι.
È facile verificare che η è un isomorfismo di K-spazi vettoriali, pertanto tramite η è possibile
definire una struttura di K-algebra su V ponendo
vw = η −1 (η (v) η (w)) .
Osservazione 3.1. Gli elementi di Rn sono classi laterali di polinomi:
Rn = {f (X) + In : f (X) ∈ K [X]} .
28
CAPITOLO 3. CODICI CICLICI
29
Una notazione standard è f (X) per indicare la classe laterale f (X) + In . Avendo posto x =
X + In = X, si ha anche f (X) = f (x), pertanto possiamo usare una qualsiasi delle tre notazioni
equivalenti
Rn = {f (X) + In : f (X) ∈ K [X]}
= f (X) : f (X) ∈ K [X]
= {f (x) : f (X) ∈ K [X]}
Ogni classe laterale può essere rappresentata da un polinomio di grado minore di n; se f (X) ∈
K [X] è un polinomio, per trovare il rappresentante canonico della classe laterale f (X) + In =
f (x) si può procedere in due modi equivalenti: si può effettuare la divisione euclidea f (X) =
q (X) (X n − 1) + r (X) con deg r < n, in modo che f (x) = r (x), oppure si può sostituire
(ricorsivamente) 1 al posto di ogni copia xn in f (x), dato che in Rn si ha xn = 1.
Se W è un sottoinsieme di V indicheremo con W (x) l’immagine di W tramite η.
Visto che in V abbiamo una struttura indotta di anello, viene naturale chiedersi chi siano gli
ideali di V secondo tale struttura. A tal scopo, definiamo un’applicazione biiettiva di V in se
stesso.
Definizione 3.2. Indichiamo con σ l’applicazione di shift ciclico (a destra):
σ:
Kn
→
Kn
(v0 , v1 , . . . , vn−2 , vn−1 ) 7→ (vn−1 , v0 , v1 , . . . , vn−2 )
Ci sarà utile anche il concetto di polinomio reciproco.
Definizione 3.3. Se f (X) ∈ K [X] è un polinomio di grado m, il polinomio reciproco f è il
polinomio f ∗ (X) = X m f X −1 .
Osservazione 3.4. L’espressione X m f X −1 in principio ha senso solo in K (X), il campo
quoziente di K [X]; in realtà è facile verificare che f ∗ (X) ∈ K [X]. Inoltre, se f (X) =
f0 + f1 X + · · · fm X m allora f ∗ (X) = fm + fm−1 X + · · · + f0 X m .
Lemma 3.5. Il seguente diagramma è commutativo
V
σ
η
Rn
/V
η
λx
/ Rn
dove λx è la moltiplicazione per x, cioè η (σ (v)) = xη (v).
Dimostrazione.
η (σ (v)) = η (σ (v0 , v1 , . . . , vn−2 , vn−1 ))
= η (vn−1 , v0 , . . . , vn−3 , vn−2 )
= vn−1 + v0 x + · · · + vn−2 xn−1
= vn−1 xn + v0 x + · · · + vn−2 xn−1
= v0 x + · · · + vn−2 xn−1 + vn−1 xn
= x v0 + · · · + vn−2 xn−2 + vn−1 xn−1
= xη (v) .
CAPITOLO 3. CODICI CICLICI
30
Lemma 3.6. Sia W un sottoinsieme di V ; allora σ (W ) = W se, e solo se, xW (x) = W (x).
Dimostrazione. σ è un’applicazione biiettiva da V in V pertanto, trattandosi di insiemi finiti,
σ (W ) ⊂ W ⇒ σ (W ) = W .
Dato che x è invertibile in Rn essendo xn = 1, la stessa cosa vale per λx .
Il fatto che η sia una biiezione e che η (W ) = W (x) unito al lemma precedente implicano che
σ (w) ∈ W ⇔ xw (x) ∈ W (x).
Teorema 3.7. Sia C un sottoinsieme di V . C è un sottospazio vettoriale se, e solo se, C (x) è
un sottogruppo additivo di Rn che assorbe la moltiplicazione per gli scalari.
In tal caso, σ (C) = C se, e solo se, C (x) assorbe la moltiplicazione in Rn .
Dimostrazione. La prima proprietà segue dal fatto che η è un isomorfismo di spazi vettoriali.
Supponiamo quindi che C sia un codice lineare: si deve dimostrare che σ (C) = C se, e solo
se, C (x) assorbe la moltiplicazione. Per il lemma precedente, dobbiamo dimostrare che C (x)
assorbe la moltiplicazione se, e solo se, C (x) assorbe la moltiplicazione per x.
Un’implicazione è ovvia.
Supponiamo che C (x) assorba la moltiplicazione per x e siano
f (x) = f0 + f1 x + · · · + fn−1 xn−1 ∈ Rn ,
v (x) = v0 + · · · + vn−1 xn−1 ∈ C (x) .
Allora
f v = f0 + f1 x + · · · + fn−1 xn−1 v
= f0 v + f1 xv + · · · + fn−1 xn−1 v
ed è chiaro che xv ∈ C (x) ⇒ xi v ∈ C (x) ∀i ⇒ f v ∈ C (x).
In definitiva, se in V consideriamo la struttura di anello indotta dall’isomorfismo di spazi
vettoriali η, allora gli ideali sono esattamente quei codici (cioè sottospazi vettoriali) che sono
invarianti rispetto ad uno shift a destra (e, per inciso, anche a sinistra). Ciò ci induce dare la
seguente
Definizione 3.8. Un codice C ⊂ V si dice ciclico se σ (C) = C.
Osservazione 3.9. Dato che σ è un’applicazione iniettiva e C è finito, per verificare che σ (C) = C
è sufficiente verificare che σ (C) ⊂ C.
L’operazione di shift è strettamente legata al prodotto in Rn :
Proposizione 3.10. Siano a (x) , b (x) ∈ Rn e a, b i corrispondenti elementi di V . Indichiamo
con b̃ (x) l’elemento
b̃ (x) = b x−1 = b xn−1 = b0 + bn−1 x + bn−2 x2 + · · · + b1 xn−1
e con b̃ il corrispondente elemento di V . Allora, in Rn ,
a (x) b (x) =
n−1
X
a · σ i b̃
xi .
(3.1)
i=0
In particolare, a (x) b (x) = 0 in Rn se, e solo se, a0 a1 . . . an−1 è ortogonale a bn−1 bn−2 . . . b1 b0 e
ad ogni suo shift ciclico.
CAPITOLO 3. CODICI CICLICI
31
Dimostrazione. Per definizione di prodotto nei polinomi si ha
!
X
X
a (x) b (x) =
aj bk xi
i∈Z
j,k∈Z
j+k=i
considerando i polinomi come serie di potenze con coefficienti nulli per i < 0 e i > n − 1.
Dato che xn = 1, la formula precedente diventa
!
n−1
X
X
a (x) b (x) =
a j bk x i
i=0
j,k
(n)
j+k ≡ i
=
n−1
X


i=0
e si vede facilmente che
i
X
j=0
i
X
aj bi−j +
aj bi−j +
j=0
n−1
X
n−1
X

aj bn+i−j  xi
j=i+1
aj bn+i−j = a · σ i b̃ .
j=i+1
Proposizione 3.11. Se C è un codice ciclico allora anche C ⊥ lo è.
Dimostrazione. Siano v = v0 . . . vn−1 e w = w0 . . . wn−1 due elementi di V . Si ha che
v · w = v0 w0 + v1 w1 + · · · + vn−2 wn−2 + vn−1 wn−1
= vn−1 wn−1 + v0 w0 + v1 w1 + · · · + vn−2 wn−2
= σ (v) · σ (w)
Sia ora u ∈ C ⊥ e fissiamo v ∈ C; dal fatto che σ è biiettiva da C in C segue che esiste v 0 ∈ C tale
che σ (v 0 ) = v, pertanto σ (u) · v = σ (u) · σ (v 0 ) = u · v 0 = 0. Poiché v ∈ C è generico concludiamo
σ (u) ∈ C ⊥ .
Osservazione 3.12. Se C è un codice ciclico e C 0 è equivalente a C non è detto che C 0 sia ciclico.
Per esempio, sia C il [4, 2]-codice binario
C = {0000, 1010, 0101, 1111}
e C 0 il codice ottenuto permutando le ultime due coordinate, cioè
C 0 = {0000, 1001, 0110, 1111} ;
evidentemente C 0 non è ciclico.
Evidenziamo il significato di questa osservazione: nei codici, la proprietà di essere ciclico non
è invariante per equivalenza.
CAPITOLO 3. CODICI CICLICI
3.2
32
Polinomio generatore
Dal teorema 3.7 segue che possiamo aspettarci di capire la struttura dei codici ciclici tramite
lo studio dell’anello di polinomi Rn . Quest’ultimo, a sua volta, è semplicemente il quoziente
dell’anello K [X] rispetto all’ideale In , pertanto i tre teoremi di isomorfismo, uniti alla corrispondenza dei reticoli degli ideali che ne è conseguenza, ci permettono studiare la struttura degli
ideali di k [x] e dei loro generatori.
Teorema 3.13. Sia J un ideale non nullo di Rn . Si ponga
r = min deg f (X) : f (x) ∈ J e f (X) 6= 0 .
Allora
1. 0 ≤ r < n;
2. se g (x) ∈ J e g (X) è un polinomio grado r allora (g (x)) = J (in particolare, J è
principale);
3. se (g (x)) = J, deg g (X) = r, f (x) ∈ J e deg f (X) < n allora esiste q (x) ∈ Rn tale che
f (x) = q (x) g (x) e deg q (X) < n − r;
4. se (g (x)) = J e deg g (X) = r allora g (X) è un divisore proprio di X n − 1;
5. vi è un unico polinomio g (X) monico e di grado r tale che (g (x)) = J.
6. Posto X n − 1 = g (X) h (X) con g (X) monico e di grado r tale che (g (x)) = J, sia
l (x) = v (x) g (x) ∈ (g (x)); allora
(g (x)) = (l (x)) ⇔ ∃u (X) : h (X) |1 − u (X) v (X) .
In tal caso, g (x) = u (x) l (x).
7. Con la stessa notazione del punto 6,
(g (x)) = (l (x)) ⇔ MCD (l (X) , X n − 1) = g (X) .
Dimostrazione. Come detto, la dimostrazione segue semplicemente dai teoremi di isomorfismo e
dalla struttura degli anelli euclidei. Nonostante ciò, ne riportiamo brevemente le idee principali.
1. Dato che J è non nullo, esiste f (X) ∈ K [X] tal che f (x) = f (X) + In ∈ J è non
nullo in Rn (cioè, f (X) ∈
/ In e, in particolare, f (X) è non nullo); allora se f (X) =
q (X) (X n − 1) + b (X) è la divisione euclidea di f (X) rispetto a X n − 1 si ha f (x) = b (x)
in Rn e, in particolare, b (x) 6= 0. Da ciò, b (X) è non nullo, quindi deg b (X) ≥ 0, e inoltre
deg b (X) < n per costruzione di b (X).1
2. Sia g (x) ∈ J con g (X) di grado r (in particolare, g (X) è non nullo per il punto 1) e sia
f (x) ∈ J. Dalla minimalità di r segue deg f (X) ≥ r. Eseguiamo la divisione euclidea
di f (X) rispetto a g (X) e siano q (X) e b (X) tali che f (X) = q (X) g (X) + b (X) con
deg b (X) < r. Passando al quoziente, b (x) = (f (x) − q (x) g (x)) ∈ J, cosa che contraddice
la minimalità di r se b (X) è non nullo, pertanto b (X) = 0 e quindi f (x) = q (x) g (x) .
1 Usiamo
la convenzione deg 0 = −∞.
CAPITOLO 3. CODICI CICLICI
33
3. Segue dal punto precedente osservando che, con la medesima notazione, deg f (X) =
deg q (X) + deg g (X), pertanto deg q (X) = deg f (X) − deg g (X) < n − r.
4. Ancora una volta, eseguiamo la divisione euclidea: sia X n − 1 = q (X) g (X) + b (X) con
deg b (X) < r. Passando al quoziente,
xn − 1 = 0 = q (x) g (x) + b (x)
e pertanto b (x) ∈ J, cosa che contraddice la minimalità di r se b (X) è non nullo.
5. Supponiamo che g (X) , g 0 (X) siano due polinomi monici, di grado r e tali che (g (x)) =
(g 0 (x)) = J; allora h (X) = g (X) − g 0 (X) ha grado minore di r e h (x) ∈ J. Per non
contraddire la minimalità di r, si deve avere h (X) = 0, cioè g (X) = g 0 (X).
6. In queste ipotesi, dato che (g (x)) ⊇ (l (x)) allora
(g (x)) = (l (x)) ⇔ (g (x)) ⊆ (l (x))
⇔ ∃u (X) ∈ K [X] : g (x) = u (x) l (x)
⇔ ∃u (X) ∈ K [X] : g (x) = u (x) v (x) g (x)
⇔ ∃u (X) ∈ K [X] : X n − 1|g (X) − u (X) v (X) g (X)
⇔ ∃u (X) : g (X) h (X) |g (X) (1 − u (X) v (X))
⇔ ∃u (X) : h (X) |1 − u (X) v (X)
Se 1 − u (X) v (X) = r (X) h (X) allora
u (x) l (x) = u (x) v (x) r (x) = (1 − l (x) h (x)) g (x) = g (x) − r (x) h (x) g (x) = g (x) .
7. Questo segue dal fatto che
(l (x)) = (l (X) + (X n − 1)) / (X n − 1)
= ((l (X)) + (X n − 1)) / (X n − 1)
= (MCD (l (X) , X n − 1)) / (X n − 1)
Osservazione 3.14. Il teorema precedente in realtà vale più in generale per R = K [x] =
K [X] / (a (X)) con dimostrazione sostanzialmente immutata.
Il teorema ci permette di dare la seguente definizione:
Definizione 3.15. Sia C un [n, k]-codice ciclico su K; si dice polinomio generatore di C
l’unico polinomio monico di grado minimo g (X) tale che
(g (x)) = C (x) .
Osservazione 3.16. Se g (X) = g0 + g1 X + · · · + gr X r è il polinomio generatore di un codice
ciclico C allora gr = 1 e g0 6= 0: quest’ultima segue dal fatto che g (X) |X n − 1.
Dal teorema segue che i polinomi generatori vanno ricercati tra i divisori propri e monici di
X n − 1. Viceversa, è ovvio che un tale divisore genera un ideale proprio e non nullo, che corrisponde ad un codice ciclico. Inoltre, polinomi diversi generano polinomi diversi; riassumendo,
possiamo concludere che
CAPITOLO 3. CODICI CICLICI
34
Teorema 3.17. I codici ciclici in Fnq sono in biiezione con i divisori monici del polinomio X n −1.
0
ps
Osservazione 3.18. Se q = pb e n = ps n0 con p - n0 , allora X n − 1 = X n − 1
in Fq pertanto,
almeno in prima battuta, possiamo limitarci a studiare il caso in cui n e q sono coprimi: da ora
in poi, supporremo sempre MCD (n, q) = 1. Inoltre generalmente supporremo 0 < k < n,
visto che i casi estremi sono banali.
Con queste ipotesi,
Corollario 3.19. Se t è il numero di fattori monici irriducibili di X n −1 in K [X] allora esistono
2t codici ciclici di lunghezza n su K.
Dimostrazione. Se MCD (n, q) = 1 il polinomio X n − 1 non ha fattori multipli, grazie al criterio
della derivata, e quindi ogni fattore (monico) irriducibile ha molteplicità 1:
X n − 1 = p1 (X) · . . . · pt (X)
con pi - pj per i 6= j. Applicando il teorema precedente si ha la tesi.
Un codice ciclico è un caso particolare di un codice lineare, pertanto può essere definito
tramite una matrice generatrice; d’altra parte, in quanto codice ciclico può essere definito tramite
un polinomio: vediamo la relazione esistente tra questi due concetti.
Teorema 3.20. Sia C un codice ciclico di lunghezza n, g (X) = g0 + g1 X + · · · + gr X r il suo
polinomio generatore e k = n − r. Allora
η −1 g (x) , xg (x) , . . . , xk−1 g (x)
è una base di C; in particolare, dim C

g0
0


G = Gg =  ...

0
0
= k e la matrice k × n
g1
g0
···
···
0
···
g1
..
.
gr
···
..
.
0
gr
..
.
0
0
..
.
···
···
..
.
0
···
g0
0
g1
g0
···
g1
gr
···

0
0


0

0
gr
è una matrice generatrice per C.
Dimostrazione. Indichiamo con Gi le righe della matrice G. Dalla definizione segue che Gi =
η −1 xi−1 g (x) per i = 1, . . . , k. Si osservi che per definizione di polinomio generatore si ha
gr = 1, pertanto i vettori Gi sono linearmente indipendenti, dato che G contiene un minore
triangolare inferiore di dimensione k × k con tutti 1 sulla diagonale e pertanto di rango k.
Resta da vedere che i vettori Gi generano C. Sia v ∈ C, v = v0 v1 . . . vn−1 . Per definizione,
v (x) = v0 + v1 x + · · · + vn−1 xn−1 ∈ C (x) = (g (x))
pertanto per il teorema 3.13 esiste un polinomio a (x) = a0 + a1 x + · · · ak−1 xk−1 ∈ K [X] di
grado minore di k tale che a (X) g (X) = v (X). Da ciò,
v (x) = a (x) g (x)
!
k−1
X
i
=
ai x g (x)
i=0
CAPITOLO 3. CODICI CICLICI
35
=
k−1
X
ai xi g (x)
i=0
=
k−1
X
ai η (Gi )
i=0
=η
k−1
X
!
ai Gi
i=0
e dunque v =
Pk−1
i=0
ai Gi .
Corollario 3.21. Se C è un codice ciclico di lunghezza n è dimensione k allora in K [X] vi è
un unico polinomio g (X) che sia monico, di grado r = n − k e tale che g (x) ∈ C (x) e tale
polinomio è il polinomio generatore di C.
Osservazione 3.22. Il polinomio generatore di un codice ciclico è unico; per contro, di matrici
generatrici ne esistono parecchie: una per ogni base (ordinata).
Osservazione 3.23. Dato che


n−1
X X

aj gl  xi
v (x) = a (x) g (x) =
i=0
j+l=i
si ha che il coefficiente del monomio di grado i di v (x) = a (x) g (x) è semplicemente il prodotto
del vettore a con la colonna i+1-esima della matrice Gg .
3.3
Polinomio di controllo
Un codice lineare C può essere anche descritto tramite una matrice di controllo di parità che,
come visto, è una matrice generatrice del codice lineare duale C ⊥ . Nel caso dei codici ciclici una
matrice può essere calcolata a partire dal polinomio generatore. Vediamo come.
Sia C un codice ciclico; sappiamo che anche C ⊥ è ciclico. Se g (X) è il polinomio generatore
di C, allora g (X) |X n − 1 e pertanto X n − 1 = g (X) h (X) per un polinomio monico, di grado
n − r = k e coprimo con g (X).
Teorema 3.24. Sia C un [n, k]-codice ciclico, g (X) = g0 +· · ·+gr X r il suo polinomio generatore
di grado r = n − k e h (X) = h0 + · · · + hk X k tale che X n − 1 = g (X) h (X); allora
1. v ∈ C ⇔ X n − 1|v (X) h (X) ⇔ v (x) h (x) = 0 in Rn ;
2. se indichiamo con g ⊥ (X) il polinomio generatore di C ⊥ allora
k
−1
g ⊥ (X) = h−1
,
0 X h X
cioè, g ⊥ (X) è il polinomio reciproco di h (X) reso monico;
3. una matrice generatrice di C ⊥
dalla matrice (n − k) × n

hk
0


H = Hh =  ...

0
0
(e quindi una matrice di controllo di parità di C) è data
hk−1
hk
···
···
0
···
hk−1
..
.
h0
···
..
.
0
h0
..
.
0
0
..
.
···
···
..
.
0
···
hk
0
hk−1
hk
···
hk−1
h0
···

0
0


.
0

0
h0
CAPITOLO 3. CODICI CICLICI
36
Dimostrazione.
1. Ricordiamo che:
(a) grazie al teorema 3.13, si ha
v (x) ∈ C (x) ⇒ ∃f (X) ∈ K [X] : deg f (X) < n − r e v (x) = f (x) g (x) ;
il viceversa è ovvio;
(b) dato che K [X] è un dominio di integrità, se a (X), b (X) e c (X) sono tre polinomi in
K [X] con c (X) non nullo, allora a (X) c (X) = b (X) c (X) in K [X] implica a (X) =
b (X) in K [X]; nuovamente, il viceversa è ovvio.
Usando queste osservazioni, si ha
v ∈ C ⇔ v (x) ∈ C (x)
⇔ ∃f (X) ∈ K [X] : deg f (X) < n − r e v (x) = f (x) g (x)
⇔ ∃f (X) ∈ K [X] : deg f (X) < n − r e (X n − 1) | (v (X) − f (X) g (X))
⇔ ∃f (X) ∈ K [X] : deg f (X) < n − r e v (X) = f (X) g (X)
⇔ ∃f (X) ∈ K [X] : deg f (X) < n − r e v (X) h (X) = f (X) g (X) h (X)
⇔ (X n − 1) | v (X) h (X)
⇔ v (x) h (x) = 0 in Rn
2. Innanzi tutto, è chiaro che h0 6= 0, dato che g (X) h (X) = X n − 1 implica h0 g0 = −1.
k
−1
Indichiamo con l (X) il polinomio h−1
e con l la sua immagine η −1 (l) in V . Per
0 X h X
costruzione l (X) è monico e deg l (X) = k = n − r. D’altra parte, dim C ⊥ = n − dim C =
n − k = r e pertanto deg l (X) = n − dim C ⊥ . Per poter applicare il corollario 3.21 ci resta
solo da vedere che l (x) ∈ C ⊥ (x), cioè l ∈ C ⊥ .
Per definizione si ha che
−1 ∗
l = (l0 , . . . , ln−1 ) = h−1
0 (hk , . . . , h0 , 0, . . . , 0) = h0 h ,
(3.2)
dove h∗ = η −1 (h∗ (x)), pertanto è sufficiente vedere che h∗ ∈ C ⊥ .
Sia v = (v0 , . . . , vn−1 ) ∈ C; allora per il teorema 3.13 esiste f (X) : deg f (X) < n − r = k
e v (x) = f (x) g (x). Sia
f (X) = f0 + f1 X + . . . + fk−1 X k−1 .
Abbiamo che v (X) h (X) = f (X) g (X) h (X) = f (X) (X n − 1). D’altra parte, dal fatto
che deg f (X) < k e k < n segue che f (X) (X n − 1) = f (X) X n − f (X) ha 0 come
coefficiente del monomio X k . Ma tale coefficiente è
k
X
vi hk−1 = v · h∗
i=0
e quindi v · h∗ = 0. Dato che v era generico in C, ne segue che h∗ ∈ C ⊥ e quindi g ⊥ = l.
CAPITOLO 3. CODICI CICLICI
37
3. Applicando il teorema 3.20 si ricava una matrice generatrice Gg⊥ di C ⊥ a partire da g ⊥ (X);
ma grazie a (3.2) si ottiene che la relazione tra Gg⊥ e Hh è data da
Hh = h−1
0 Gg ⊥
e pertanto anche Hh è una matrice generatrice di C ⊥ .
Osservazione 3.25.
1. Come corollario otteniamo che g ⊥ (X) divide X n − 1. Ciò si poteva
anche ottenere direttamente con un calcolo apparentemente in K (X) ma in realtà in K [X]:
n
X n − 1 = g0−1 h−1
0 (1 − X )
n
= g0−1 h−1
X −n − 1
0 X
n
−1
h X −1
= g0−1 h−1
0 X g X
k
r
−1
= g0−1 h−1
X h X −1
0 X g X
= g0−1 g ∗ (X) g ⊥ (X)
2. Nella dimostrazione del punto 2. non solo il coefficiente del monomio X k è 0, ma sono 0
tutti i coefficienti dei monomi X k , . . . , X n−1 : scrivendo chi sono questi coefficienti si scopre
che non sono altro che il vettore colonna


c0



hk hk−1
···
h0
0
0
· · · 0  c1 

c2 
0
hk
hk−1 · · ·
h0
0
··· 0 




  .. 
 ..
.
.
.
.
.
.
.
.
.
.
. 
.
. 0
.
.
.
.
···
.




0
···
0
hk hk−1
···
h0 0   ... 


0
0
···
0
hk
hk−1 · · · h0  cn−2 
cn−1
Anche a partire da questa osservazione si poteva condurre tutta la dimostrazione del
teorema.
3.4
Codifica, decodifica e verifica nei codici ciclici
Per un codice lineare una codifica data da una matrice generatrice in forma standard è molto
comoda: una tale codifica è sistematica e semplifica pertanto tutte le operazioni di codifica,
decodifica e verifica.
Se un [n, k]-codice ciclico C viene presentato mediante il polinomio generatore g (X) di grado
r, la definizione stessa di codice ciclico ci permette di definire un’applicazione di codifica: dato
che
v ∈ C ⇒ ∃a (X) ∈ K [X] : deg a (X) < k = n − r e v (x) = a (x) g (x)
ne segue che
Kk
→
Rn
a = (a0 , . . . , ak−1 ) 7→ a (x) g (x)
CAPITOLO 3. CODICI CICLICI
38
è una codifica. Dal punto di vista dell’algebra lineare, questo è equivalente a considerare la
matrice generatrice Gg associata al polinomio generatore g (X) e considerare la codifica
Kk
→ Kn
a = (a0 , . . . , ak−1 ) 7→ aGg
Come abbiamo visto, con questa notazione si ha che il coefficiente del monomio di grado i di
a (x) g (x) è dato dal prodotto del vettore riga a per la colonna i-esima di Gg .
Questa codifica ha lo svantaggio di non essere sistematica e quindi per la decodifica è necessario risolvere un sistema di equazioni lineari n × k. È comunque facile costruire una codifica
sistematica a partire dalla matrice generatrice fornita dal polinomio generatore: per il corollario 2.17 per trovare una codifica sistematica per C bisogna effettuare l’eliminazione gaussiana
su una matrice generatrice. Dato che per il polinomio generatore g (X) vale g0 6= 0, partendo
dalla matrice generatrice Gg possiamo effettuare l’eliminazione sulle prime k colonne di Gg e,
in questo modo, ottenere una codifica sistematica standard. Se dopo l’eliminazione gaussiana la
matrice generatrice ha la forma [Ik |B] dove B = [bi,j ] è una matrice (n − r) × r, la codifica
Kk
→
Kn
a = (a0 , . . . , ak−1 ) 7→ v = a [Ik |B]
dice che
(
ai
vi = Pk−1
j=0 aj bj+1,i
se i ≤ k − 1
se i ≥ k
(3.3)
D’altra parte, se H = Hh è la matrice di controllo di parità e h (X) = h0 + . . . + hk X k è il
polinomio di controllo di C, si ha
v ∈ C ⇔ vH tr = 0 ⇔ Hv tr = 0.
(3.4)
Da ciò,


hk
0


Hv tr =  ...

0
0
hk−1
hk
···
···
0
···
hk−1
..
.
h0
···
..
.
0
h0
..
.
0
0
..
.
···
···
..
.
0
···
hk
0
hk−1
hk
···
hk−1
h0
···
v0
v1
v2
..
.
..
.

0 

0



0


0 

h0  vn−2
vn−1












e quindi il sistema di n equazioni Hv tr = 0 ha rango k (ricordiamo che hk = 1 e h0 6= 0) e le sue
soluzioni sono
k−1
X
hk−j vi−k+j per i = k, . . . , n − 1.
(3.5)
vi = −h−1
0
j=0
I valori di v0 , . . . , vk−1 sono liberi: si tratta delle variabili indipendenti del sistema, cioè le
coordinate di informazione a0 , . . . , ak−1 della (3.3); la (3.5) permette di trovare in modo ricorsivo
i coefficienti bi,j della matrice B che fornisce la restante parte della codifica sistematica (3.3).
Nel caso dei codici ciclici le proprietà algebriche permettono di costruire anche un’altra codifica sistematica particolarmente significativa: la forma di Gg , unita al fatto che gr = 1, ci dice
che possiamo effettuare l’eliminazione gaussiana sulle ultime k colonne di Gg . La codifica così
ottenuta è sistematica ma non standard nel senso stretto definito in 2.11, perché ritroviamo la
CAPITOLO 3. CODICI CICLICI
39
matrice identità non come il blocco iniziale di Gg bensì come il blocco finale. Questa codifica
sistematica ha un’interpretazione algebrica che permette di implementarla in modo diretto senza
passare per l’eliminazione gaussiana: dato un polinomio a (X) = a0 + · · · + ak−1 X k−1 si consideri
il polinomio vI (X) = X n−k a (X). Tale polinomio ha grado al più uguale a n − 1 e inoltre non
contiene monomi di grado minore di n − k = r. Effettuiamo ora la divisione euclidea
vI (X) = q (X) g (X) + vR (X) con deg vR (X) < r
e definiamo
v (X) = vI (X) − vR (X) .
Per costruzione v (X) è un polinomio di grado minore di n, multiplo di g (X) e che ha come
coefficienti dei monomi di grado r, . . . , n − 1 proprio a0 , . . . , ak−1 , pertanto se definiamo
Kk
→
Kn
−1
a = (a0 , . . . , ak−1 ) 7→ η (v (x))
utilizzando l’unicità di quoziente e resto della divisione euclidea concludiamo che questa codifica
coincide con la codifica sistematica data dall’eliminazione gaussiana effettuata sulle ultime k
colonne di Gg .
Infine per quel che riguarda la verifica, cioè controllare se un dato v ∈ K n sta in C, essa si
effettua a partire dalle proprietà algebriche della definizione di codice ciclico: per costruzione
v ∈ C ⇔ g (X) | v (X)
e pertanto dato v è sufficiente vedere se il resto della divisione di v (X) per g (X) è 0 oppure
no per sapere se v è nel codice. In alternativa, si può usare la matrice di controllo di parità e
la (3.4).
3.5
Zeri di un codice ciclico
Se C è un [n, k]-codice ciclico allora C è determinato dal suo polinomio generatore g (X) ∈
K [X] = Fq [X] che è un polinomio monico, di grado r = n − k e che divide xn − 1.
D’altra parte nelle nostre ipotesi (cioè, MCD (n, p = char K) = 1) per il criterio della derivata
si ha che le radici di X n − 1 sono tutte distinte (in Fp = K). In realtà, come si vede nella
sezione C.2 le radici di X n − 1 sono tutte in Fqb , dove b = ordn (q) è l’ordine moltiplicativo di q
in Zn . Fissiamo un elemento primitivo β di Fqb e indichiamo con α una radice primitiva n-esima
q b −1
dell’unità: per esempio, α = β n .
Indichiamo con S = {s1 , . . . , sw } un insieme di rappresentanti per le classi q-ciclotomiche
modulo n e con Cs1 , . . . , Csw le rispettive classi q-ciclotomiche modulo n. Poiché g (X) |X n − 1
ne segue che esistono t polinomi g1 (X) , . . . , gt (X) irriducibili in K [X] tali che
g (X) = g1 (X) · . . . · gt (X) .
Ogni polinomio gj (X) è il polinomio minimo mαsj (X) di αsj per un opportuno sj ∈ S, pertanto
esiste un sottoinsieme S 0 ⊂ S tale che
Y
Y Y
g (X) =
mαs (X) =
(X − αu ) .
s∈S 0
s∈S 0 u∈Cs
CAPITOLO 3. CODICI CICLICI
40
Definizione 3.26. Con la notazione precedente, l’insieme
[
Cs
Tα =
s∈S 0
è detto insieme di definizione di C e l’insieme
Z = {αu : u ∈ Tα }
è detto insieme degli zeri di C.
Osservazione 3.27. Dalla definizione segue che
v (x) ∈ C (x) ⇔ ∀u ∈ Tα , v (αu ) = 0 ⇔ ∀ζ ∈ Z, v (ζ) = 0.
(3.6)
Inoltre, deg g (X) = r = |Tα | = |Z|.
Zeri e matrice di controllo di parità
L’insieme Z è esattamente l’insieme degli zeri del polinomio generatore del codice C, pertanto
esso determina univocamente g (X) e viceversa. Grazie a ciò, è possibile costruire una matrice
di controllo della parità per C a partire da Z.
Lemma 3.28. Sia g (X) un generatore per un n-codice ciclico C, α una radice primitiva nesima di 1, v ∈ Fnq e siano u, u0 ∈ Cs due numeri in una stessa classe ciclotomica. Indicando
0
con m (X) il polinomio minimo di αu (ed αu ) allora
0
v (αu ) = 0 ⇔ v αu = 0 ⇔ m (X) |v (X) .
(3.7)
Dimostrazione. Evidentemente basta dimostrare che v (αu ) = 0 ⇔ m (X) |v (X). Una delle due
implicazioni è ovvia.
Supponiamo v (αu ) = 0. Allora (X − αu ) |v (X) in Fq [X] e quindi MCD (X − αu , v (X)) 6= 1
in Fq [X]; ma il MCD (X − αu , v (X)) è sempre lo stesso in qualsiasi estensione che contenga Fq ,
pertanto MCD (x − αu , v (X)) 6= 1 in Fq [X]. Dato che in Fq [X] il polinomio m (X) è irriducibile
e (X − αu ) |m (X) in Fq [X], ne segue m (X) |v (X).
Teorema 3.29. Se g (X) è il polinomio generatore di un [n, k]-codice C, α è una radice primitiva
n-esima di 1 e i1 , . . . , iw sono interi tali che
g (X) = mαi1 (X) · . . . · mαiw (X) .
Sia L la matrice

1
1

L = .
 ..
α i1
α i2
..
.
α2i1
α2i2
..
.
···
···
..
.

α(n−1)i1
α(n−1)i2 


..

.
1
α iw
α2iw
···
α(n−1)iw
Se v = v0 . . . vn−1 ∈ Fnq allora v ∈ C ⇔ Lv tr = 0.
CAPITOLO 3. CODICI CICLICI
41
Dimostrazione. Per ipotesi, Ci1 , . . . , Ciw sono le distinte classi ciclotomiche tali che
g (X) =
w
Y
m
αij
w
Y
Y
(X) =
j=1
(X − αu )
j=1 u∈Cij
pertanto
w
[
u
Z=
α : u ∈ C ij .
j=1
Sia v = v0 . . . vn−1 e sia v (X) il polinomio associato. Per il lemma 3.28 basta controllare solo
una radice di ogni fattore irriducibile, pertanto la (3.6) diventa
v (x) ∈ C (x) ⇔ v αij = 0 ∀j = 1, . . . , w
⇔
n−1
X
vl αlij = 0 ∀j = 1, . . . , w
(3.8)
l=0
tr
⇔ Lv = 0
Osservazione 3.30. La matrice L è una simile ad una matrice di Vandermonde, a parte il fatto
che non è quadrata, e l’equazione (3.8) dice che una tale matrice è una matrice che valuta un
polinomio (nel nostro caso, il polinomio v (X)) in un insieme di punti (in questo caso, gli αij ).
Corollario 3.31. Con la notazione precedente, k = dim C ≥ n − bw dove b = [Fq [α] : Fq ] =
ordn (q).
Osservazione 3.32. La matrice L del teorema non è una matrice di controllo della parità di C.
Infatti, essa non è una matrice a coefficienti in K = Fq , bensì è una matrice a coefficienti in Fqb ,
dove b = ordn (q).
Ciononostante, da essa si può ottenere una matrice
di controllo
della parità di C. A tal fine, si
scelga una base B di Fqb su K (per esempio, B = 1, β, . . . , β b−1 ); ogni elemento di Fqb si scrive
in modo unico come un vettore colonna (cioè, una matrice b × 1) a coefficienti in Fq . Sostituendo
ogni elemento di L con la sua scrittura ottenuta in questo modo, si ottiene una matrice H̃ di
tr
dimensione bw
inK . Mostriamo che LvP
= 0 se, e solo se, H̃v tr = 0.
× in a2icoefficienti
b−1
(n−1)i
j
Sia Li = 1, α , α , . . . , α
una riga di L e α = t=0 at,j β t ; allora
Li v tr =
n−1
X
vj αji
j=0
=
n−1
X
vj
=

n−1
X

t=0
at,ji β t
t=0
j=0
b−1
X
b−1
X

vj at,ji  β t
j=0
da cui segue quanto affermato.
Naturalmente non è detto che le righe di H siano linearmente indipendenti: nel caso, è
sufficiente eliminare le righe linearmente dipendenti per ottenere una matrice di controllo di
rango massimo.
CAPITOLO 3. CODICI CICLICI
42
Esempio 3.33. Consideriamo il [7, 3]-codice binario C che ha come polinomio generatore
g (X) = 1 + X 2 + X 3 + X 4 .
Il polinomio di controllo è h (X) = 1 + X 2 + X 3

1 1 0
0 1 1
H=
0 0 1
0 0 0
pertanto una matrice di controllo è data da

1 0 0 0
0 1 0 0
.
1 0 1 0
1 1 0 1
Sia α una radice primitiva settima di 1; il suo polinomio minimo è X 3 + X + 1. Osserviamo che,
in questo caso, α è anche un elemento primitivo (cfr. C.12). Poiché il polinomio generatore è
g (X) = (X + 1) X 3 + X + 1 = mα0 (X) mα1 (X), la matrice L del teorema 3.29 è data da
1 1 1
1
1
1
1
L=
.
1 α α2 α3 α4 α5 α6
Una base di F8 su F2 è data da B = 1, α, α2 . Per procedere secondo quanto osservato,
dobbiamo sostituire ogni potenza di α con il vettore colonna 3 × 1 che esprime tale potenza come
combinazione lineare a coefficienti in F2 degli elementi di B:
             
1
1
1
1
1
1
1
0 0 0 0 0 0 0


 0
0
0
0
0
0
0 



L=
             
 1
0
0
1
0
1
1 


0 1 0 1 1 1 0
0
1
0
1
1
1
0
ottenendo quindi la matrice

1
0

0
H̃ = 
1

0
0
1
0
0
0
1
0
In questo caso, ci sono due righe che sono
abbiamo

1 1
1 0
0
H =
0 1
0 0
1
0
0
0
0
1
1
0
0
1
1
0
1
0
0
0
1
1
1
0
0
1
1
1

1
0

0
.
1

0
1
banalmente dipendenti dalle altre: cancellandole

1 1 1 1 1
0 1 0 1 1
.
0 1 1 1 0
1 0 1 1 1
Adesso le righe di H 0 sono linearmente indipendenti e non è necessario cancellare altre righe:
H 0 è una matrice di controllo di parità per C. È facile verificare che la matrice H 0 può essere
trasformata nella matrice H con sole operazioni di riga2
2 Sommare
la riga 4 alla 1; la 1 alla 2; la 4 alla 2; la 2 alla 3; la 3 alla 4.
CAPITOLO 3. CODICI CICLICI
43
Zeri e distanza minima
Abbiamo detto che Z determina univocamente g (X) e viceversa, essendo l’insieme degli zeri
del polinomio.
Per contro, Tα è solo un insieme di numeri naturali: esso determina univocamente g (X) (e
viceversa) solo una volta che è fissata la radice primitiva α; in altre parole, lo stesso insieme
di numeri può identificare polinomi diversi con diverse radici, oppure uno stesso polinomio può
essere identificato da diversi insiemi di numeri con diverse radici.
Esempio 3.34. Nel codice dell’esempio 3.33 abbiamo n = 7, q = p = 2 e g (X) = 1 + X 2 +
X 3 + X 4 ; dato che b = ord7 (2) = 3, le radici di x7 + 1 sono tutte in F8 . In tale campo ogni
elemento che non è in F2 è una radice primitiva; siano α e γ radici, rispettivamente, dei polinomi
X 3 + X + 1 e X 3 + X 2 + 1. Essendo hαi = hγi, ognuna delle due radici è potenza dell’altra;
per esempio α = γ 3 e γ = α5 . Avendo scelto l’elemento primitivo ed il polinomio generatore,
l’insieme di definizione relativamente ad α è dato da
Tα = C0 ∪ C1 = {0, 1, 2, 4}α
mentre relativamente a γ abbiamo
Tγ = C0 ∪ C3 = {0, 3, 5, 6}γ .
L’insieme delle radici è invece indipendente dall’elemento primitivo scelto: cambia solo il
modo in cui vengono rappresentati gli elementi del campo finito. Nel caso dell’esempio si ha
Z = 1, α, α2 , α4 = 1, γ 5 , γ 3 , γ 6
e Z identifica il polinomio generatore g (X)
Viceversa, lo stesso insieme {0, 1, 2, 4} combinato con l’elemento primitivo γ fornisce l’insieme
di definizione {0, 1, 2, 4}γ che identifica il polinomio
g̃ (X) = X 3 + X 2 + 1 (X + 1) = 1 + X + X 2 + X 4
il quale genera un codice C̃ diverso da C. Si osservi che per C̃ l’insieme degli zeri risulta essere
Z̃ = 1, γ, γ 2 , γ 4 6= Z
che identifica il polinomio generatore g̃ (X) di C̃:
g̃ (X) = (X + 1) (X + γ) X + γ 2
= (X + 1) X 3 + X 2 + 1
X + γ4
= 1 + X + X2 + X4
Alla luce di questo esempio, vediamo qual è la relazione tra due insiemi di definizione relativi
a due distinti elementi primitivi.
Proposizione 3.35. Sia C un [n, k]-codice con polinomio generatore g (X) di grado r = n − k
e siano α, γ due radici primitive n-esime di 1. Sia inoltre m un intero coprimo con n tale che
γ = αm . Allora
Tα = mTγ = {mv (mod n) : v ∈ Tγ } .
CAPITOLO 3. CODICI CICLICI
44
Dimostrazione. Indichiamo con mγ (X) e mα (X) i polinomi minimi di α e γ rispettivamente.
Se gj (X) un fattore irriducibile di g (X), esistono due interi s, t tali che
Y
Y
(X − γ v ) .
(X − αu ) =
gj (X) =
v∈Ct
u∈Cs
Se δ è una radice di gj (X) allora esiste un intero z tale che δ = γ z = αmz e quindi z ∈ Ct e
mz ∈ Cs da cui
mCt ∩ Cs 6= ∅.
Grazie a (C.6) abbiamo Cs = Cmt . Ripetendo il ragionamento per ogni fattore di g (X) si ha la
tesi.
Quanto visto ci dice che dato un codice ciclico C con polinomio generatore g (X) (e insieme
degli zeri Z), cambiando la radice primitiva si può cambiare l’insieme di definizione. Riuscire a
scegliere un opportuno insieme di definizione per il codice dato può essere importante, perché
possiamo ottenere importanti informazioni.
Definizione 3.36. Si dice che l’insieme di definizione Tα contiene s interi consecutivi se esiste
un intero c tale che
c + i (mod n) ∈ Tβ ∀i = 0, 1, . . . , s − 1.
Teorema 3.37 (Disuguaglianza BCH). Sia C un [n, k]-codice ciclico con polinomio generatore
g (X) e insieme di generatori Tα relativamente ad una data radice primitiva α. Se C ha distanza
minima d e Tα contiene δ − 1 interi consecutivi, allora
d ≥ δ.
Dimostrazione. Siano
t, t + 1, . . . , t + δ − 2 ∈ Tα
gli interi consecutivi
Pw presenti in Tα e sia v = v0 . . . vn−1 ∈ C una parola di peso w > 0. Possiamo
scrivere v (X) = j=1 vij X ij , dove vij sono le coordinate non nulle di v. Nel sistema di equazioni
di controllo
Lv tr = 0
consideriamo solo il sottosistema delle equazioni v αi per i = t, t + 1, . . . , t + δ − 2. Esso è

i
i

vi1 (αt ) 1
+ ··· +
viw (αt ) w
= 0



t+1 iw
 vi αt+1 i1
+
·
·
·
+
v
α
=
0
iw
1
.
.
.
.
.
.
..
..
..
..
..
.. ...




i1
iw

vi1 αt+δ−2
+ · · · + viw αt+δ−2
= 0
In forma matriciale, M ṽ tr = 0, dove ṽ = vi1 . . . viw e

i
i
(αt ) 1
(αt ) 2
i2
i

1
αt+1
 αt+1
M =
..
..


.
.
t+δ−2 i1
t+δ−2 i2
α
α
···
···
..
.
···

i
(αt ) w
iw 
αt+1

.
..


.
i
w
t+δ−2
α
CAPITOLO 3. CODICI CICLICI
45
Supponiamo w < δ e consideriamo la sottomatrice M 0 formata dalle prime w righe di M :


1
1
···
1
 α i1
αi2
···
αiw 


M 0 = αt(i1 +i2 +···+iw ) 

..
..
..
..


.
.
.
.
α(w−2)i1 α(w−2)i2 · · · α(w−2)iw
e pertanto det M 0 6= 0, dato che è un multiplo non nullo di una matrice di Vandermonde. Ciò è
una contraddizione e quindi w ≥ δ, da cui d ≥ δ.
3.6
Idempotenti
In K [X] due polinomi generano lo stesso ideale se, e solo se, si ottengono l’uno dall’altro per
la moltiplicazione di una costante non nulla e fra questi generatori uno solo è monico.
In K [x] le cose sono più complesse perché non è un dominio di integrità; ciononostante, il
teorema 3.13 ci assicura che K [x]è ancora ad ideali principali e ci dice quali sono i possibili
generatori dell’ideale (g (x)). Sebbene il polinomio generatore è quello di “grado” più piccolo
fra quelli che genera il proprio ideale ed ha molte utili proprietà, tra gli altri generatori ce ne
possono essere alcuni che godono proprietà interessanti e utili.
Definizione 3.38. Se R è un anello, un elemento e ∈ R si dice idempotente se e2 = e. Se I
è un ideale di R ed e è un elemento idempotente tale che I = (e), allora e è detto generatore
idempotente di I.
Un insieme di idempotenti e1 , . . . , es di R si dice un insieme di idempotenti primitivi se
e1 + · · · + es = 1R e ei ej = 0 per i 6= j.
Il teorema di Wedderburn assicura che ogni ideale di un anello semisemplice abbia un generatore idempotente. Nel caso di nostro interesse, R = Rn , ciò può anche essere ottenuto per
via elementare ed in modo costruttivo; tratteremo esplicitamente il caso Rn = K [X] / (X n − 1),
anche se è facile generalizzare i risultati al caso R = K [X] / (f (X)).
Teorema 3.39. Sia C (x) = (g (x)) un ideale proprio e non nullo di Rn , dove g (X) è il polinomio
generatore e X n − 1 = g (X) h (X). Sia inoltre
1 = a (X) g (X) + b (X) h (X)
l’identità di Bézout. Valgono le seguenti proprietà:
1. se e (x) ∈ C (x) allora e (x) è un generatore idempotente se, e solo se, e (x) è una unità di
C (x);
2. esiste un unico idempotente e (x) tale che C (x) = (e (x)). Inoltre, e (x) = a (x) g (x);
3. se e (x) è un idempotente (non nullo) tale che (e (x)) = C (x), allora
g (X) = MCD (e (X) , X n − 1) .
Osserviamo che anche i due ideali banali (0) , R hanno comunque un (unico) generatore idempotente che coincide con il polinomio generatore (rispettivamente, 0 e 1). Ricordiamo anche che
R è commutativo.
CAPITOLO 3. CODICI CICLICI
46
Dimostrazione.
1. C (x) è un ideale di R e pertanto è anche un suo sottoanello (in generale,
senza unità).
Supponiamo che e (x) sia una unità di C (x), cioè c (x) e (x) = c (x) ∀c (x) ∈ C (x). Questo
implica C (x) ⊆ (e (x)). D’altra parte, C (x) ⊇ (e (x)), dato che C (x) è un ideale e
e (x) ∈ C (x).
Viceversa, sia (e (x)) = C (x) con e (x) idempotente. Essendo e (x) un generatore, segue
che dato c (x) ∈ C (x) esiste f (x) ∈ Rn tale che c (x) = f (x) e (x). Usando il fatto che
e (x) è idempotente, otteniamo
c (x) = f (x) e (x) = f (x) e (x) = f (x) e (x) e (x) = c (x) e (x)
e quindi e (x) è un’unità di C (x).
2. Per prima cosa, verifichiamo l’unicità. Se e1 (x) , e2 (x) sono due generatori idempotenti,
allora sono entrambi delle unità per il punto 1 e quindi e1 (x) = e1 (x) e2 (x) = e2 (x).
Per quel che riguarda l’esistenza, l’identità di Bézout in K [X] diventa, in Rn = K [x],
1 = a (x) g (x) + b (x) h (x) .
Inoltre, g (x) h (x) = 0. Moltiplichiamo l’identità di Bézout per a (x) g (x)
2
a (x) g (x) = (a (x) g (x)) + a (x) g (x) b (x) h (x) = (a (x) g (x))
2
pertanto, posto e (x) = a (x) g (x), abbiamo che e (x) è un idempotente di C (x). Sia
ora c (x) = f (x) g (x) un generico elemento di C (x); nuovamente dall’identità di Bézout
abbiamo
c (x) = f (x) g (x)
= f (x) g (x) a (x) g (x) + f (x) g (x) b (x) h (x)
= f (x) g (x) a (x) g (x)
= f (x) g (x) e (x)
= c (x) e (x)
e pertanto (e (x)) è un’identità per C (x), quindi è un generatore idempotente.
3. Questo è un caso particolare del teorema 3.13.
Nel caso dei codici binari, il generatore idempotente può essere caratterizzato in altri modi.
Esercizio 3.40. e (x) è idempotente in Rn se, e solo se, l’insieme S delle potenze di x con
coefficiente non nullo è una unione di laterali ciclotomici di n.
La matrice costruita con gli shift ciclici del polinomio generatore è una matrice generatrice.
Questa proprietà è valida anche per il generatore idempotente.
Proposizione 3.41. Dato un codice C di dimensione k con polinomio generatore g (X) e
generatore idempotente e (x) = e0 + · · · + en−1 xn−1 , la matrice


e0
e1 · · · en−2 en−1
en−1 e0 · · · en−3 en−2 


M = .
..
..
.. 
 ..
. ···
.
. 
e1
e2
···
en−1
e0
avente come prima riga i coefficienti di e (x) e come k − 1 righe successive gli shift ciclici della
prima riga è una matrice generatrice per C.
CAPITOLO 3. CODICI CICLICI
47
Dimostrazione. Supponiamo che M non sia una matrice generatrice per C. Allora esiste un
vettore a di dimensione 1 × k tale che aM = 0. Consideriamo l’elemento a (x) di K [x] avente
grado al più k − 1 e associato ad a. È facile verificare che a (x) e (x) = (aM ) (x) in Rn = K [x],
per cui a (x) e (x) = 0 in Rn . Ma
0 = 0g (x) = a (x) e (x) g (x) = a (x) g (x) = (aG) (x)
e quindi aG = 0, che contraddice il fatto che G sia una matrice generatrice per C.
Esempio 3.42. Consideriamo i codici binari di lunghezza 7. Dato che
X 7 + 1 = (X + 1) X 3 + X + 1 X 3 + X 2 + 1 = γ1 (X) γ2 (X) γ3 (X)
ha tre fattori irriducibili distinti, ci sono 23 = 8 codici, con polinomi generatori dati da
γ1δ1 (X) γ2δ2 (X) γ3δ3 (X) δi ∈ {0, 1} .
Indicando con gi (X) il polinomio generatore e con ei (x) il generatore idempotente, abbiamo
i
dim
gi (X)
0
0
1 + X7
1
1
2
3
ei (x)
0
4
5
1+X +X +X +X +X +X
2
3
6
2
1 + x + x + x + x4 + x5 + x6
4
3
1 + x3 + x5 + x6
2
3
1+X +X +X
3
3
1 + X + X2 + X4
1 + x + x2 + x4
4
4
1 + X + X3
x + x2 + x4
5
4
1 + X2 + X3
x3 + x5 + x6
2
6
6
1+X
x + x + x3 + x4 + x5 + x6
7
7
1
1
ed anche
i
gi (X)
ei (x)
insieme di definizione
0
γ1 (X) γ2 (X) γ3 (X)
0
{0, 1, 2, 3, 4, 5, 6}
1
γ2 (X) γ3 (X)
g1 (x)
{1, 2, 3, 4, 5, 6}
2
γ1 (X) γ2 (X)
3
x g2 (x)
{0, 1, 2, 4}
3
γ1 (X) γ3 (X)
g3 (x)
{0, 3, 5, 6}
4
γ2 (X)
xg4 (x) = e1 (x) + e2 (x)
{1, 2, 4}
3
{3, 5, 6}
γ1 (X)
x g5 (x) = e1 (x) + e3 (x)
x + x3 + x5 g6 (x) = e2 (x) + e3 (x)
1
1 = e1 (x) + e2 (x) + e3 (x)
{}
5
γ3 (X)
6
7
{0}
In particolare, 1 = e1 (x) + e2 (x) + e3 (x) e osserviamo anche che ei (x) ej (x) = 0 se i, j ∈
{1, 2, 3} e i 6= j, pertanto {e1 (x) , e2 (x) , e3 (x)} forma un insieme di idempotenti primitivi.
Dato che i codici ciclici sono in biiezione con gli ideali di Rn , ne segue che la somma e
l’intersezione di due codici ciclici sono ancora ciclici e corrispondono, rispettivamente, alla somma
ed all’intersezione dei corrispondenti ideali.
CAPITOLO 3. CODICI CICLICI
48
Teorema 3.43. Per i = 1, 2 siano Ci due codici ciclici aventi polinomi generatori gi (X) e
generatori idempotenti ei (x). Allora:
1. ha il polinomio generatore di C1 ∩ C2 è mcm (g1 (X) , g2 (X)) e il generatore idempotente
è e1 (x) e2 (x);
2. il polinomio generatore di C1 + C2 è MCD (g1 (X) , g2 (X)) e il generatore idempotente è
e1 (x) + e2 (x) − e1 (x) e2 (x).
Dimostrazione. L’affermazione sui polinomi generatori segue dal corrispondente risultato sugli
ideali di K [X] usando le proprietà del polinomio generatore del teorema 3.13.
2
2
2
1. Chiaramente e1 (x) e2 (x) ∈ C1 ∩C2 . Inoltre (e1 (x) e2 (x)) = e1 (x) e2 (x) = e1 (x) e2 (x),
pertanto è un idempotente. Resta da vedere che è un’unità in C1 ∩ C2 . Sappiamo che ei (x)
è un’unità in Ci . Sia c (x) ∈ C1 (x) ∩ C2 (x). Allora e1 (x) e2 (x) c (x) = e1 (x) c (x) = c (x)
e quindi e1 (x) e2 (x) è il generatore idempotente di C1 ∩ C2 .
2. Anche in questo caso è ovvio che e1 (x) + e2 (x) − e1 (x) e2 (x) ∈ C1 + C2 . Calcolando il
quadrato,
2
2
2
2
(e1 (x) + e2 (x) − e1 (x) e2 (x)) = e1 (x) + e2 (x) + (e1 (x) e2 (x)) +
2
2
+ 2e1 (x) e2 (x) − 2e1 (x) e2 (x) − 2e1 (x) e2 (x)
= e1 (x) + e2 (x) + e1 (x) e2 (x) +
+ 2e1 (x) e2 (x) − 2e1 (x) e2 (x) − 2e1 (x) e2 (x)
= e1 (x) + e2 (x) − e1 (x) e2 (x)
Nuovamente resta da vedere che l’elemento agisce come una unità. Sia c (x) = c1 (x) +
c2 (x) ∈ C1 (x) + C2 (x). Allora
(c1 (x) + c2 (x)) (e1 (x) + e2 (x) − e1 (x) e2 (x)) =
= c1 (x) (e1 (x) + e2 (x) − e1 (x) e2 (x)) +
+ c2 (x) (e1 (x) + e2 (x) − e1 (x) e2 (x))
= c1 (x) e1 (x) + c1 (x) e2 (x) − c1 (x) e1 (x) e2 (x) +
+ c2 (x) e1 (x) + c2 (x) e2 (x) − c2 (x) e1 (x) e2 (x)
= c1 (x) + c1 (x) e2 (x) − c1 (x) e2 (x) +
+ c2 (x) e1 (x) + c2 (x) − c2 (x) e1 (x)
= c1 (x) + c2 (x)
che implica la tesi.
Se il reticolo dei codici ciclici coincide con il reticolo degli ideali di Rn , i codici minimali e
quelli massimali corrispondono rispettivamente agli ideali minimali ed a quelli massimali.
Definizione 3.44. Supponiamo che, in K [X], si abbia la fattorizzazione
X n − 1 = f0 (X) f1 (X) . . . fr (X)
CAPITOLO 3. CODICI CICLICI
49
dove possiamo supporre f0 (X) = X − 1 e i fattori sono tutti distinti, grazie al fatto che
MCD (n, char K) = 1. Poniamo
Xn − 1
,
fˆi (X) =
fi (X)
cioè fˆi (X) è il prodottodi tutti
i polinomi tranne l’i-esimo e indichiamo con êi (x) il generatore
ˆ
idempotente dell’ideale fi (x) .
Teorema 3.45. Sia C un codice ciclico proprio e non nullo.
1. Il codice C è minimale se, e solo se, il suo polinomio generatore è uno degli fˆi (X). Inoltre,
se C è minimale, C (x) è un’estensione finita di K, isomorfa a K [X] / (fi (X)).
2. Il codice C è massimale se, e solo se, il suo polinomio generatore è uno degli fi (X).
Dimostrazione. Sia g (X) il polinomio generatore di C.
1. Il codice C è minimale se, e solo se, non ci sono ideali propri I tali che (X n − 1) ⊂ I ⊂
n
−1
è irriducibile, che è equivalente al fatto che g (X)
(g (X)) e questo è vero se, e solo se, Xg(X)
è uno degli fˆi (X).
Supponiamo ora che C sia minimale con polinomio generatore g (x) e generatore idempotente e (x). Il generatore idempotente è l’unità dell’anello commutativo unitario C (x).
Sia c (x) ∈ C (X) non nullo. Dato che (c (x)) è un ideale non nullo contenuto in C (x),
ne segue per minimalità che (c (x)) = C (x) = (e (x)), pertanto esiste γ (x) ∈ Rn tale che
c (x) γ (x) = e (x). Allora γ (x) e (x) ∈ (e (x)) = C (x) e
c (x) γ (x) e (x) = e (x) e (x) = e (x)
che vuol dire che γ (x) e (x) ∈ C (x) è l’inverso moltiplicativo di c (x), pertanto ogni elemento non nullo di C (x) è invertibile, cioè C (x) è un campo. Dato che C (x) è un sottospazio
vettoriale di Rn che ha dimensione finita su K, lo stesso vale per C (x).
Più precisamente, l’applicazione
K [X] →
f (X) 7→
C (x) = (e (x))
f (x) e (x)
è un morfismo di anelli suriettivo (perché e (x) è idempotente!) il cui nucleo è (g (X)) e
g (X) è irriducibile per la minimalità di C,come abbiamo appena visto, da cui la tesi.
2. C è massimale se, e solo se, C (x) = (g (x)) è massimale se, e solo se, K [x] / (g (x)) è un
campo. Ma
n
K [x] / (g (x)) = K [X] / (X − 1)(g (X)) / (X n − 1) ∼
= K [X] / (g (X))
e quest’ultimo è un campo se, e solo se, g (X) è irriducibile cioè se, e solo se, g (X) è uno
degli fi (X) (dovendo essere un fattore di X n − 1).
Osserviamo che fˆ0 (X) = 1+X +· · ·+X n−1 è il polinomio generatore del codice di dimensione
1 generato dal vettore 111 . . . 11, cioè il codice di ripetizione di lunghezza n.
I teoremi precedenti sono gli ingredienti per trovare un insieme di generatori idempotenti
primitivi.
CAPITOLO 3. CODICI CICLICI
50
Teorema 3.46. In Rn valgono le seguenti proprietà.
1. Gli êi (x) formano un insieme completo di idempotenti primitivi per i = 0, . . . , r.
2. Rn è la somma diretta dei sottospazi fˆi (x) per i = 0, . . . , r.
3. Gli unici idempotenti di fˆi (x) sono 0 e êi (x).
4. Se C (x) è un ideale di Rn (i.e., un codice ciclico) ed e (x) è il generatore idempotente
allora esiste un sottoinsieme T ⊂ {0, . . . , r} tale che
X
X
fˆi (x) .
e (x) =
êi (x)
e C (x) =
i∈T
i∈T
Dimostrazione. 1. Dobbiamo
dimostrare innanzi tutto che êi (x) êj (x) = 0 se i 6= j. Poiché
ˆ
(êi (x)) = fi (x) , esistono u (x) , v (x) tali che êi (x) = u (x) fˆi (x) e êj (x) = u (x) fˆj (x),
pertanto
êi (x) êj (x) = u (x) fˆi (x) u (x) fˆj (x) .
Dato che per costruzione
X n − 1 | fˆi (X) fˆj (X)
poiché X n −1 non ha fattori multipli, abbiamo
0 = fˆi (x) fˆj(x) che implica êi (x) êj (x) = 0.
ˆ
La costruzione implica anche che MCD f0 (X) , . . . , fˆr (X) = 1 e, per l’algoritmo euclideo,
esistono a0 (X) , . . . , ar (X) tali che
1=
r
X
ai (X) fˆi (X) .
(3.9)
i=0
L’equazione precedente dice che
Rn = fˆ0 (x) + fˆ1 (x) + · · · + fˆr (x) .
Applicando induttivamente il teorema 3.43 e usando êi (x) êj (x) = 0, abbiamo che il
generatore idempotente di
fˆ0 (x) + fˆ1 (x) + · · · + fˆi (x)
è ê0 (x) + ê1 (x) + · · · + êi (x), pertanto il generatore idempotente di Rn , che è 1, è anche
uguale a ê0 (x) + ê1 (x) + · · · + êr (x).
2. La (3.9) ci dice che Rn è somma degli ideali in oggetto: resta solo da vedere che la somma
è diretta. Poniamo
r X
Ii =
fˆj (x) .
j=0
j6=i
Applicando induttivamente il teorema 3.43 e considerando la fattorizzazione
di X n − 1, si
ottiene che Ii = (fi (x)). Nuovamente per gli stessi motivi, Ii ∩ fˆi (x) ha come polinomio
generatore fi (X) fˆi (X) = X n − 1 e quindi Ii ∩ fˆi (x) = 0.
CAPITOLO 3. CODICI CICLICI
51
3. Dal teorema 3.45, fˆi (x) è un campo. Un idempotente è radice del polinomio X 2 − X
e in ogni campo tale polinomio ha esattamente due radici: lo 0 e l’identità moltiplicativa
del
La tesi segue dal teorema 3.39 che dice che êi (x) è l’identità moltiplicativa di
campo.
ˆ
fi (x) .
2
4. Fissato i, consideriamo e (x) êi (x). Si ha che e (x) êi (x) ∈ (êi (x)) ed inoltre (e(x) êi (x))
=
2
2
ˆ
e (x) êi (x) = e (x) êi (x), cioè e (x) êi (x) è un idempotente di (êi (x)) = fi (x) . Ab
biamo appena visto che in fˆi (x) ci sono solo due idempotenti e quindi e (x) êi (x) = 0
oppure e (x) êi (x) = êi (x). Poniamo
T = {i | e (x) êi (x) = êi (x)} .
Allora
e (x) = e (x) 1 = e (x)
r
X
êi (x) =
i=0
r
X
e (x) êi (x) =
i=0
X
êi (x) .
i∈T
Infine, usando l’induzione ed il teorema 3.43,
!
X
X
X
C (x) = (e (x)) =
êi (x) =
(êi (x)) =
fˆi (x) .
i∈T
i∈T
i∈T
Infine, sapendo come è legato il polinomio generatore del codice ortogonale al polinomio generatore del codice originale, vediamo la relazione esistente tra i rispettivi generatori idempotenti.
Teorema 3.47. Sia C un codice ciclico con polinomio generatore g (X) e generatore idempotente
e (x). Sia inoltre X n − 1 = g (X) h (X). Allora il codice con polinomio generatore h(X) ha come
generatore idempotente 1 − e (x) e C ⊥ ha come generatore idempotente 1 − e x−1 .
Dimostrazione. Sia
1 = a (X) g (X) + b (X) h (X)
l’identità di Bézout. Dal teorema 3.39 segue che b (x) h (x) = 1 − a (x) g (x) = 1 − e (x) è il
generatore idempotente del codice D avente h (X) come polinomio generatore. Ciò vuol dire che
1 − e (x) è una unità per D (x), cioè D (x) = (1 − e (x)) e
2
f (x) (1 − e (x)) = f (x) (1 − e (x)) ∀f (X) ∈ K [X] .
(3.10)
Consideriamo ora il codice ortogonale. Se c (x) ∈ C (x) = (e (x)), abbiamo
c (x) (1 − e (x)) = c (x) − c (x) e (x) = c (x) − c (x) = 0
e quindi dalla proposizione 3.10 segue che 1 − e x−1 ∈ C ⊥ (x). Consideriamo l’equazione (3.10)
a livello polinomiale: in K [X] diventa
f (X) (1 − e (X)) ≡ f (X) (1 − e (X))
2
(mod X n − 1) ∀f (X) ∈ K [X] .
Applicando il morfismo di valutazione in X n−1 otteniamo
f X n−1
1 − e X n−1
≡ f X n−1
1 − e X n−1
2
(mod X n(n−1) − 1) ∀f (X) ∈ K [X] .
CAPITOLO 3. CODICI CICLICI
52
Poiché X n − 1|X n(x−1) − 1, al quoziente abbiamo xn(x−1) − 1 = 0 e quindi
f xn−1
1 − e xn−1
= f xn−1
1 − e xn−1
2
∀f (X) ∈ K [X]
cioè
2
∀f (X) ∈ K [X]
1 − e x−1
Ma al variare di f (X) in K [X] si ha che f x−1 varia in tutto K [x], per cui l’equazione
precedente è equivalente a
f x−1
1 − e x−1
= f x−1
2
∀f (X) ∈ K [X]
f (x) 1 − e x−1 = f (x) 1 − e x−1
la quale vuol dire che 1 − e x−1 è una unità di C ⊥ (x) e quindi, per il teorema 3.39, è il
generatore idempotente.
3.7
Famiglie di codici ciclici
Come si è visto in precedenza (cfr. corollario 3.31 e teorema 3.37) la maggiore struttura algebrica dei codici ciclici permette di ottenere informazioni aggiuntive sulla struttura e i parametri
del codice. Se si vogliono raffinare ulteriormente le informazioni bisogna quindi imporre maggiori
condizioni nelle direzioni indicate dai risultati visti in modo da restringere lo studio a particolari
famiglie di codici ciclici.
Codici BCH
I codici BCH prendono il nome dalle iniziali dei loro sviluppatori: A. Hocquenghem nel 1959
e, indipendentemente, R. Bose e D. K. Ray-Chaudhuri nel 1960.
Una delle caratteristiche fondamentali dei codici BCH è che nella loro progettazione si ha un
controllo molto preciso sulla distanza minima e, quindi, sulla capacità di correzione degli errori.
Per questi motivi i codici BCH sono largamente utilizzati nelle applicazioni. Per esempio, sono
usati nelle trasmissioni satellitari, nella riproduzione dei CD, dei DVD, per la lettura e scrittura
degli hard disk, ecc.
Fissiamo degli interi n, δ con 2 ≤ δ e un campo base K = Fq . Poniamo b = ordn (q).
Definizione 3.48. Un codice BCH di lunghezza n su K e distanza designata δ è un codice ciclico che ha come insieme di definizione l’unione delle classi ciclotomiche di δ − 1 interi
consecutivi:
T = Ct ∪ Ct+1 ∪ · · · ∪ Ct+δ−2 .
Se t = 1 si dice che C è un codice BCH in senso stretto.
Se n = q b − 1 si dice che C è un codice BCH primitivo.
Osservazione 3.49. In un codice BCH non viene specificato il polinomio generatore: esso non è
quindi specificato completamente fino a quando non si fissa una radice primitiva.
Osservazione 3.50. Dato che in T ci sono δ − 1 interi consecutivi si ha che la distanza minima è
almeno δ; in realtà, potrebbe essere ancora maggiore, perché nell’unione delle classi ciclotomiche
ci potrebbero essere altri interi che contribuiscono ad allungare l’intervallo di interi consecutivi.
CAPITOLO 3. CODICI CICLICI
53
Codici di Hamming
Molti, ma non tutti, codici di Hamming sono codici ciclici; più precisamente, sono codici
BCH in senso stretto:
Teorema 3.51. Se MCD (r, q − 1) = 1 e n = (q r − 1) / (q − 1) allora un codice BCH in senso
stretto con insieme di definizione T = C1 è un codice di Hamming q-ario con parametro r.
Dimostrazione. Sia α una radice primitiva n-esima di 1, mα (X) il suo polinomio minimo su Fq .
Sappiamo che deg mα (X) = [Fq (α) : Fq ] = ordn (q).
Dire che T = C1 è la stessa cosa che dire che il polinomio generatore g (X) del codice è
mα (X), pertanto la dimensione del codice è k = n − deg mα (X).
Dato che
qr − 1
q−1
= q r−1 + · · · + q + 1
= q r−1 − 1 + · · · + (q − 1) + r
n=
≡r
(mod q − 1)
si ha MCD (n, q − 1) = 1.
Sia ordn (q) = s: esiste quindi un intero positivo l tale che q s − 1 = nl.
q r − 1 = n (q − 1) ≡ 0 (mod n) implica s|r, da cui q s − 1|q r − 1, cioè nl|n (q − 1) e quindi
l|q − 1.
D’altra parte, q − 1|q s − 1 = nl e, dato che MCD (n, q − 1) = 1, si ha q − 1|l, per cui l = q − 1
s
e q − 1 = nl = n (q − 1) = q r − 1, cioè s = r.
In definiva, ordn (q) = r e quindi deg g (X) = deg mα (X) = ordn (q) = r e k = n − r.
Dato che
r = ordn (q) = deg mα (X) = [Fq [α] : Fq ]
ogni potenza di α può essere rappresentata come un vettore in Frq : indichiamo con H la matrice
che ha nelle colonne i coefficienti di 1, α, α2 , . . . , αn−1 rappresentati in tal modo. La matrice H
è una matrice r × n a coefficienti in Fq .
Da MCD (n, q − 1) = 1 segue che αq−1 è una radice primitiva n-esima di 1 per cui αi(q−1) 6= 1
per i = 1, 2, . . . , n − 1. Ciò implica αi ∈
/ Fq per i = 1, 2, . . . , n − 1. Da questo segue che le colonne
di H sono a due a due linearmente indipendenti. Osserviamo ora che moltiplicare per uno scalare
una colonna di H vuol dire moltiplicare per l’inverso di tale scalare la corrispondente coordinata
di tutte le parole del codice, pertanto a meno di passare ad un codice equivalente possiamo
supporre che la coordinata più significativa di ogni colonna di H sia 1: con questa ipotesi, dire
che due colonne sono linearmente indipendenti è la stessa cosa che dire che sono diverse pertanto
H è, a meno di una permutazione, proprio la matrice di Hamming Hq (r), cfr. teorema 2.28.
Se MCD (r, q − 1) 6= 1 il teorema non val più: si può dimostrare che il codice di Hamming
H4 (3) (definito in 2.27) non è ciclico ed è il più piccolo codice di Hamming non ciclico.
Osservazione 3.52. La disuguaglianza BCH dice che con le ipotesi del teorema la distanza minima
è almeno 2: in realtà è maggiore (ed è esattamente 3).
Esempio 3.53. Il codice dell’esempio 3.33 è il codice di Hamming definito nella sezione 2.4
CAPITOLO 3. CODICI CICLICI
54
Codici di Reed-Solomon
I codici di Reed-Solomon sono una particolare sottofamiglia dei codici BCH introdotti da
Reed e Solomon nel 1960. Grazie alla loro capacità di correggere errori che si presentano in
blocchi, piuttosto che in modo casuale, sono particolarmente utilizzati nelle telecomunicazioni.
Per esempio, nel 1977 sono stati utilizzati nel programma spaziale Voyager.
Definizione 3.54. Un codice di Reed-Solomon è un codice BCH di lunghezza n = q − 1.
Proposizione 3.55. Se C è un codice di Reed-Solomon, valgono i seguenti fatti.
1. ordn (q) = 1.
2. Ogni classe q-ciclotomica modulo n ha un solo elemento.
3. Fq è il campo di spezzamento di X n − 1.
4. Ogni elemento non nullo di Fq è una radice n-esima di 1.
5. Ogni radice primitiva n-esima di 1 è un elemento primitivo di Fq .
6. Se T è l’insieme di definizione di C allora T = {t, t + 1, . . . , t + δ − 2}.
7. La distanza minima di C è proprio δ.
8. C è un codice MDS.
Dimostrazione. Sono tutte ovvie. Per le ultime due, dalla disuguaglianza di Singleton e da quella
BCH si ha
k ≤ n − d + 1 ≤ n − δ + 1 = n − |T | = k.
3.8
Progettazione di codici
Quanto visto in questo capitolo permette la progettazione di codici BCH capaci di correggere
(almeno) un numero t di errori deciso a priori: riassumiamo i passi necessari.
Fissare t (il numero di errori che si vuole correggere), Fq (il campo base dei coefficienti) e n
(la lunghezza del codice). In seguito3 :
1. Determinare b = ordn q.
Fqb è la più piccola estensione di Fq che contiene le radici n-esime di 1.
Se n = q b − 1 si ha un codice primitivo.
Se n = q − 1 si ha un codice di Reed-Solomon.
2. Determinare un elemento primitivo β ∈ Fqb ed il corrispondente polinomio minimo mβ (X).
3. Determinare una radice primitiva n-esima α di 1 in Fqb ed il suo polinomio minimo mα (X).
Si può scegliere α = β
q b −1
n
.
4. Per j = 0, . . . , n − 1 determinare Cj , le classi q-ciclotomiche modulo n.
3 In
corsivo i commenti.
CAPITOLO 3. CODICI CICLICI
55
5. Fissato τ ∈ [1, . . . , n] determinare


v


[
u = min v | [τ, . . . , τ + 2t − 1] ⊆
Cj


j=τ
e porre T = Cτ ∪ Cτ +1 ∪ · · · ∪ Cu .
T è il più piccolo insieme di definizione che contiene 2t interi consecutivi a partire da τ .
Ciò assicura che la distanza minima sia almeno 2t + 1.
Se τ = 1, come si sceglie spesso, il codice è BCH in senso stretto.
Nonostante la scelta, può accadere che T contenga più di 2t interi consecutivi e quindi la
capacità di correzione risulta in realtà maggiore.
6. Calcolare
dove mαj (X) =
Q
l∈Cj
g (X) = mcm (mατ (X) , . . . , mαu (X))
X − αl è il polinomio minimo di αj .
Il polinomio g (X) è il polinomio generatore di un [n, n − deg g (X) , δ]-codice su Fq di distanza
minima δ ≥ 2t + 1. In questa costruzione sono coinvolti due campi: il campo base Fq e la sua
estensione Fqb . Una volta calcolato g (X), che è in Fq [X], per codificare si usa solo il campo più
piccolo. Per decodificare, invece, è necessario svolgere i calcoli nel campo più grande. Poiché
Fqb = Fq [β] è la più piccola estensione di Fq che contiene una radice n-esima dell’unità, si ha
Fqb = Fq [α], per cui anche se α non è primitivo è comunque sufficiente la conoscenza di α e del
suo polinomio minimo mα (X) per poter effettuare tutti i calcoli necessari.
Capitolo 4
Correzione degli errori nei codici
lineari
Affinché un codice sia utile nella pratica è necessario che esistano degli efficienti algoritmi di
correzione degli errori (più brevemente, di decodifica).
All’aumentare delle proprietà algebriche che definiscono le parole del codice corrisponde una
più precisa descrizione della struttura del codice stesso e, come vedremo, aumentano le possibilità
di controllo sulla correzione, fino a riuscire ad ottenere algoritmi di correzione molto efficienti.
In questo capitolo vediamo come ottenere ciò partendo prima dai codici lineari nella loro
generalità, per poi specializzarci alle varie classi di sottocodici. In particolare, vedremo che
nell’importante sottoclasse dei codici BCH si possono costruire algoritmi di correzione molto
efficienti e largamente utilizzati nella pratica quotidiana.
4.1
Decodifica nei codici lineari
Se consideriamo un codice generico C il modo più naturale per decodificare una parola v
ricevuta dopo una trasmissione (cioè recuperare la parola del codice v che è stata inviata) è
quello della massima verosimiglianza (cfr. (1.4)): partendo da v 0 si costruiscono le sfere centrate
in v 0 e di raggio crescente fino a quando non si ottiene una sfera che contiene almeno una parola
del codice C: a questo punto, se nella sfera vi è una sola parola del codice la si sceglie come
(presunta) parola inviata v; se invece, sfortunatamente, nel primo caso in cui S (v 0 , r) ∩ C 6= ∅
si ha che nella sfera ci sono due parole del codice, allora è necessario scegliere una delle due in
base a qualche criterio. Questo algoritmo, naturalmente, non è molto pratico ma non ci si può
aspettare molto di meglio se non è data alcuna informazione sul codice e sull’alfabeto.
Nel caso dei codici lineari il principio massima verosimiglianza (1.4) può essere applicato in
modo naturale perché la struttura matematica di sottogruppo del codice C rispetto allo spazio
totale V induce un partizionamento canonico di V : il partizionamento ottenuto tramite i laterali
di C.
L’idea è di scegliere in ogni classe laterale di C un elemento privilegiato, l’elemento direttore (o coset leader), che si supporrà essere l’errore che si è prodotto nel corso della trasmissione:
ricevuta la parola v 0 , se e (v 0 ) è l’elemento direttore della classe laterale v 0 + C allora la decodifica
di v 0 è data dalla parola v = v 0 − e (v 0 ).
Nell’applicare questo procedimento è quindi di fondamentale importanza il criterio utilizzato
per la scelta dell’elemento direttore; il principio della massima verosimiglianza induce a definire
56
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
57
come elemento direttore di una classe laterale un elemento di tale classe avente peso minimo.
Questo sembra un buon criterio, purtroppo la scelta può non risultare univoca: per esempio, se
C è il [4, 2, 2]-codice binario generato da 1011 e 0101 allora nella classe laterale 1111 + C ci sono
due elementi di peso 1, vale a dire 0100 e 0001. In qualche caso, però, la scelta è effettivamente
univoca:
allora v
Proposizione 4.1. Se C è un [n, k, d]-codice su K e v è una parola con w (v) ≤ d−1
2
è un vettore di peso minimo della sua classe laterale ed è unico.
Dimostrazione. Sia v 0 = v + c con c ∈ C \ {0} e supponiamo che v 0 abbia peso minimo nella
classe laterale v + C, di modo che w (v 0 ) ≤ w (v). Da c ∈ C \ {0} segue che w (c) ≥ d. Per la
disuguaglianza triangolare,
d ≤ w (c) = w (v 0 − v) = d (v 0 , v) ≤ d (v 0 , 0) + d (0, v)
d−1
0
≤d−1
= w (v ) + w (v) ≤ 2w (v) ≤ 2
2
che è una contraddizione.
L’esempio riportato prima della proposizione non soddisfa le ipotesi, in quanto
ma ogni elemento di 1111 + C ha peso positivo.
Fatta la scelta, vediamo come recuperare la parola decodificata.
d−1 2
= 0
Correzione con tabella di Slepian
Definizione 4.2. Una tabella di Slepian, o tabella standard, di un [n, k]-codice C è una tabella
(o matrice) Σ = (σi,j ) di dimensioni q n−k × q k costruita nel modo seguente:
ogni riga è formata dagli elementi di una classe laterale di C (e nella prima riga ci sono gli
elementi di C);
il primo elemento σi,1 di ogni riga è l’elemento direttore (in particolare, σ1,1 = 0 . . . 0) e gli
altri elementi della riga (cioè, della classe laterale σi,1 + C) sono dati da σi,j = σi,1 + σ1,j .
A questo punto, diventa automatico usare la tabella per decodificare la parola ricevuta v 0 :
basta determinare gli indici i, j tali che v 0 = σi,j e si ha che la decodifica di v 0 è σ1,j .
Esempio 4.3. Una tabella di Slepian per il [4, 2, 2]-codice C binario generato da 1011 e 0101 è
data da
0000 1011 0101 1110
1000 0011 1101 0110
(4.1)
0100 1111 0001 1010
0010 1001 0111 1100
Se la parola ricevuta è 1010 allora il relativo elemento direttore è 0100 e pertanto la parola
decodificata è 1110.
Come già osservato, in questo esempio la scelta dell’elemento direttore non è univoca: infatti
nella classe laterale data dalla terza riga ci sono due elementi di peso 1 e scegliere 0001 come
elemento direttore sarebbe stata una scelta altrettanto legittima; in questo caso la tabella sarebbe
stata
0000 1011 0101 1110
1000 0011 1101 0110
(4.2)
0001 1010 0100 1111
0010 1001 0111 1100
e la parola ricevuta 1010 sarebbe stata decodificata con la parola 1011.
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
58
Correzione a sindrome
Un altro modo per correggere gli errori sfrutta il fatto che la funzione
S : Kn → Kk
v 7→ S (v) = vH tr
ha due proprietà:
1. è lineare;
2. v ∈ C ⇔ S (v) = 0.
Da ciò, segue che
Lemma 4.4.
u + C = v + C ⇔ Hutr = Hv tr .
Dimostrazione.
tr
u + C = v + C ⇔ u − v ∈ C ⇔ H (u − v) = 0 ⇔ Hutr = Hv tr .
In altre parole, il vettore S (v) è un invariante della classe laterale.
Definizione 4.5. Si dice sindrome di un vettore (di lunghezza n) il vettore S (v) = vH tr (di
lunghezza k).
Se v è il vettore ricevuto allora il calcolo della sua sindrome S (v) è immediato (se conosciamo
la matrice di controllo di parità); se abbiamo precedentemente provveduto a calcolare le sindromi
di tutti gli elementi direttori, ciò ci permette di trovare l’elemento direttore di v e, quindi, di
decodificarlo.
Esempio 4.6. Sia C il [4, 2, 2]-codice binario generato da 1011 e 0101. Una matrice di controllo
di parità di C è
1 0 1 0
H=
.
1 1 0 1
La tabella delle sindromi relative ai coefficienti direttori della tabella di Slepian (4.1) è data da
elemento direttore
sindrome
0000
00
1000
11
0100
01
0010
10
Se la parola ricevuta è v 0 = 1010, la sua sindrome è S (v 0 ) = 01, che ci rimanda all’elemento
direttore e (v 0 ) = 0100 e pertanto la decodifica è v = v 0 − e (v 0 ) = 1010 − 0100 = 1110.
Per contro, la tabella delle sindromi relative ai coefficienti direttori della matrice di Slepian (4.2) è data da
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
elemento direttore
sindrome
0000
00
1000
11
0001
01
0010
10
59
Notiamo che le sindromi non cambiano: cambiano solo gli elementi direttori. Se la parola
ricevuta è v 0 = 1010, la sua sindrome continua ad essere S (v 0 ) = 01 che però, questa volta, ci
rimanda all’elemento direttore e (v 0 ) = 0001 e pertanto la decodifica diventa v = v 0 − e (v 0 ) =
1010 − 0001 = 1011.
Naturalmente il risultato nell’applicare la decodifica con la tabella di Slepian o con la tabella
delle sindromi è identica, ciò che cambia è il tipo di ricerca che bisogna fare: con la tabella di
Slepian si deve cercare un vettore di lunghezza n in una tabella con q n elementi mentre con la
tabella delle sindromi si deve cercare un vettore di lunghezza n − k in una lista di q n−k vettori.
Correzione a sindrome – 2
Nei i due schemi precedenti lo spazio totale viene partizionato in sottoinsiemi disgiunti: i
laterali del codice C. In ogni laterale si sceglie un rappresentante e se la parola ricevuta v
appartiene al laterale e + C si assume che l’errore verificato sia e e si decodifica v con la parola
del codice v − e. Il principio di massima verosimiglianza induce a scegliere in ogni laterale un
rappresentante di peso minimo ma, come abbiamo visto, non sempre ciò è possibile in modo
univoco.
Un modo per tenere conto di ciò è restringere il tentativo di correggere la parola ricevuta
solo a quei casi in cui sia possibile applicare il principio di massima verosimiglianza in modo non
ambiguo, al costo di rinunciare eventualmente a correggere alcune parole: per i codici lineari ciò
può essere effettuato sfruttando la struttura di gruppo dello spazio unita al teorema 1.16: se t è
il numero massimo di errori che il codice è in grado di correggere, si considerano i laterali ai quali
appartengono tutte le parole di peso minore o uguale a t. In tali laterali, vi è un’unica parola
di peso minimo (cfr. teorema 1.16 e proposizione 4.1): tale parola viene scelta come presunto
errore se la parola ricevuta è in uno di questi laterali.
Se invece la parola ricevuta non appartiene all’unione dei suddetti laterali, la parola non viene
corretta perché si devono essere verificati più errori di quanti siamo sicuri di poter correggere.
Riassumendo, lo schema di correzione a sindromi funziona così, supponendo di aver
ricevuto la parola v:
1. costruire la tabella T con tutte le coppie (e, S (e)) al variare di tutte le possibili parole e
di peso minore o uguale a t;
2. calcolare S (v);
3. consultare la tabella:
(a) se esiste una parola e di peso minore o uguale a t tale che S (e) = S (v), decodificare
v con v − e;
(b) altrimenti, restituire un codice di errore.
Osserviamo che lo schema appena esposto permette di effettuare sempre la decodifica esattamente
quando il codice è perfetto.
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
60
Decodifica nei codici di Hamming
Come visto nel caso particolare del codice di Hamming [7, 4] la decodifica diventa particolarmente semplice, soprattutto nel caso binario, se si usa un codice con matrice di controllo di
parità data dalla matrice Hq (r). Nel caso non binario, tuttavia, è necessario un passaggio ulteriore perché non è sufficiente individuare la posizione in cui è avvenuto l’errore ma si deve anche
individuare come è cambiata la coordinata.
Mostriamo la procedura nel caso generale: la semplificazione nel caso binario risulterà evidente. Mettiamoci dunque nell’ipotesi che la matrice di controllo di parità sia H = Hq (r) e siano
H 1 , . . . , H n le sue colonne. Siano inoltre e1 , . . . , en i vettori della base canonica di Fnq .
Il codice di Hamming è in grado di individuare e correggere al più un errore: sia quindi v ∈ C
la parola del codice inviata e che dobbiamo recuperare, r la parola ricevuta e supponiamo che si
sia verificato un errore di valore α ∈ Fq nella coordinata ei , vale a dire r − v = αei . Calcolando
la sindrome abbiamo
S (r) = S (v + αei ) = S (v) + αS (ei ) = αH i .
Dato che H i ha per costruzione 1 come cifra più significativa, si ottiene subito α: esso è la cifra
più significativa di S (r). Ottenuto α, si ha che α−1 S (r) = H i : in questo modo, confrontando
α−1 S (r) con la matrice H si recupera anche i e, da qui, si ottiene v tramite v = r − αei .
4.2
Decodifica nei codici ciclici: algoritmo di Meggitt
Sia C un codice ciclico con polinomio generatore g (X) di grado r, S la funzione che calcola la
sindrome di una parola. Nella sezione 4.1 abbiamo definito la sindrome di v come S(v) = vH tr ;
in realtà, le proprietà essenziali che deve avere S sono che è un morfismo di spazi vettoriali e che
S (v) = 0 ⇔ v ∈ C.
Nel caso dei codici ciclici può esser utile definire la funzione sindrome del polinomio v (X)
come la classe di resto del polinomio v (X) modulo g (X). Più precisamente, se f (X) ∈ K [X]
allora indichiamo con Rg (f (X)) il polinomio resto nella divisione euclidea di f (X) rispetto a
g (X). Per definizione, il grado del resto è minore del grado di g (X).
Definizione 4.7. Se C è un codice ciclico con polinomio generatore g (X), il polinomio
sindrome di f (X) ∈ K [X] è S (f ) = Rg (f (X)).
La decodifica di Meggitt si basa sul principio della decodifica a sindromi esposta nella sezione 4.1: supponendo che il codice sia in grado di correggere t errori, si crea una tabella con le
sindromi di un opportuno insieme di parole di peso minore o uguale a t. Alla ricezione di una
parola v se ne calcola la sindrome: si cerca nella tabella una parola e avente la stessa sindrome
di quella ricevuta e si assume che e rappresenti l’errore avvenuto nella trasmissione e quindi si
decodifica la parola ricevuta con v − e.
Nei codici ciclici questo schema può essere semplificato poiché si può ridurre il numero di
sindromi da calcolare: mostriamo che è sufficiente considerare solo le classi laterali i cui polinomi
rappresentanti siano di grado massimo, cioè n − 1, oltre che di peso minore o uguale a t.
Supponiamo che c (X) sia il polinomio del codice trasmesso, v (X) il polinomio ricevuto ed
ẽ (X) il polinomio di errore di grado m < n − 1 di modo che
v (X) = c (X) + ẽ (X) .
Segue che S (v) = S (ẽ); inoltre,
X n−1−m v (X) = X n−1−m c (X) + X n−1−m ẽ (X)
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
61
e, dato che C è ciclico, si ha xn−1−m c (x) ∈ C (x), per cui S X n−1−m v (X) = S X n−1−m ẽ (X)
e quindi compare nella tabella delle sindromi: esistepertanto un polinomio e (X) di grado n − 1
e peso minore o uguale a t tale che S X n−1−m ẽ (X) = S (e (X)). Dato che sia xn−1−m ẽ (x) che
e (x) hanno peso minore o uguale a t e C corregge t errori, ne segue che
xn−1−m ẽ (x) = e (x)
cioè
ẽ (x) = xm+1 e (x)
e da ciò si ricava v.
In definitiva, lo schema di decodifica di Meggitt si sviluppa in due parti:
1. calcolare una tabella con le sindromi dei polinomi di peso minore o uguale a t e grado n − 1;
2. se si riceve v, calcolare S X i v (X) per i = 0, . . . , n − 1 fino a quando non si trova una
sindrome nella tabella calcolata, che permette come descritto di decodificare v; se invece si
esauriscono le possibilità senza aver determinato una sindrome nella tabella, vuol dire che
si sono verificati più di t errori e quindi il codice non è in grado di effettuare la correzione.
Il significato di questo procedimento è: supponiamo che in v si sia verificato almeno un errore
e al più t errori e inoltre che l’errore nella coordinata più significativa (cioè, più a destra) sia in
posizione m; allora
S (v (X)) , . . . , S X n−1−m−1 v (X)
non saranno nella nostra tabella, perché
sono sindromi di polinomi di grado minore di n − 1.
La sindrome S = S X n−1−m v (X) invece è nella tabella, perché il polinomio sul quale la si
calcola ha grado n − 1; si deve quindi avere S = S (e (X)) per qualche e (X) di grado n − 1 e
peso minore o uguale a t perché abbiamo effettuato delle rotazioni cicliche dei coefficienti fino a
portare l’errore più significativo in posizione n − 1.
Per determinare l’errore ẽ (X) è quindi necessario effettuare n − 1 − m shift a sinistra oppure,
equivalentemente, m + 1 shift a destra; recuperato l’errore, lo si sottrae alla parola ricevuta. La
decodifica avviene dunque assumendo che la parola di errore ẽ (X) sia X m+1 e (X).
Questo permette di ridurre sensibilmente la dimensione della tabella delle sindromi che è
necessario calcolare preventivamente e diventa di implementazione
ancora più efficace se si rie
scono a calcolare in modo efficiente le sindromi S X i v (X) . Usando come sindrome il resto
della divisione euclidea, il teorema seguente ci permette di calcolare le sindromi in maniera ricorsiva mediante operazioni di facile implementazione in un calcolatore: è questo il motivo della
ridefinizione della sindrome nei codici ciclici.
Ricordiamo che, nell’anello quoziente Rn , la moltiplicazione di un polinomio per X ha come
effetto lo shift circolare a destra di una posizione nel vettore delle coordinate; questo permette
di ricavare la sindrome di X i+1 v (X) a partire da quella di X i v (X):
Teorema 4.8. Sia g (X) un polinomio monico di grado r. Se f (X) ∈ K [X] e
S (f (X)) = s (X) =
r−1
X
si X i
i=0
allora
S (Xf (X)) = S (Xs (X)) = Xs (X) − sr−1 g (X) .
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
62
Dimostrazione. Scriviamo
f (X) = q (X) g (X) + s (X)
Xs (X) = q̂ (X) g (X) + ŝ (X)
di modo che S (f (X)) = s (X) e S (Xs (X)) = ŝ (X), per cui
Xf (X) = Xq (X) g (X) + Xs (X)
= g (X) (Xq (X) + q̂ (X)) + ŝ (X)
che implica S (Xf (X)) = S (Xs (X)) = ŝ (X), che è la prima affermazione della tesi. Inoltre,
Xs (X) = sr−1 g (X) + Xs (X) − sr−1 g (X) .
Dato che deg (Xs (X) − sr−1 g (X)) ≤ r−1 = deg g (X), segue anche la seconda affermazione.
Osservazione 4.9. La decodifica di Meggitt può essere implementata in molti modi diversi. A
seconda dell’implementazione può essere vantaggioso definire il polinomio sindrome in modo
leggermente diverso. Per esempio, una particolare implementazione prevede l’uso di circuiti a
scorrimento di registro. In tal caso, le operazioni risultano
più semplici usando come definizione
di sindrome la formula S (X) = Rg X deg g(X) f (X) . La teoria resta invariata.
Ricapitoliamo quanto visto: sia C sia un [n, k]-codice ciclico con polinomio generatore g (X)
in grado di correggere al più t errori e sia v sia la parola ricevuta. Per effettuare la decodifica
di Meggitt
1. si crea una tabella con tutte le coppie
S (C) = {(f (X) , S (f (X))) : deg f (X) = n − 1 ∧ w (f (x)) ≤ t} ;
2. posto
i = min j : f (X) , S X j v (X) ∈ S (C) per qualche f (X) ,
sia e (X) tale che e (X) , S X i v (X) ∈ S (C). La parola v (x) viene decodificata con
v (x) − xn−i e (x).
3. Se invece f (X) , S X j v (X) ∈
/ S (C) per nessun valore, si restituisce un codice di errore.
Esempio 4.10. Consideriamo il [15, 7]-codice ciclico binario C con polinomio generatore
g (X) = 1 + X 4 + X 6 + X 7 + X 8 = X 4 + X + 1 X 4 + X 3 + X 2 + X + 1 .
Se α è una radice di X 4 + X + 1, l’insieme di definizione è
Tα = {1, 2, 3, 4, 6, 8, 9, 12}
e quindi C può correggere fino a due errori.
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
e (X)
S (e (X))
0
X
0
14
7
6
X + X + X5 + X3
1 + X 14
X7 + X6 + X5 + X3 + 1
X + X 14
X7 + X6 + X5 + X3 + X
2
X +X
14
X7 + X6 + X5 + X3 + X2
X 3 + X 14
X7 + X6 + X5
X 4 + X 14
X7 + X6 + X5 + X4 + X3
X 5 + X 14
X 6 + X 14
X7 + X6 + X3
X7 + X5 + X3
X 7 + X 14
X6 + X5 + X3
X 8 + X 14
9
X +X
14
X5 + X4 + X3 + 1
7
X + X4 + X3 + X + 1
X 10 + X 14
X3 + X2 + X
X 11 + X 14
X7 + X6 + X5 + X4 + X2 + 1
X 12 + X 14
X7 + X6 + X4 + X
X
13
63
+X
14
X7 + X4 + X3 + X2
Supponiamo di aver ricevuto la parola v = 101000011011100, che corrisponde al polinomio
v (X) = 1 + X 2 + X 7 + X 8 + X 10 + X 11 + X 12 .
Si ha S0 = S (v (X)) = X 7 + X 4 + X 2 + 1 che non compare nella tabella.
Calcoliamo allora S1 = S (Xv (X)) = S (XS0 ). Per il teorema1
S1 = Xs (X) + g (X) = X 7 + X 6 + X 5 + X 4 + X 3 + X + 1.
che non è nella tabella. Calcoliamo quindi S2 = S X 2 v (X) = S (XS1 ):
S2 = XS1 + g (X) = X 5 + X 2 + X + 1.
Neanche questo è nella tabella. Procedendo con il calcolo, S3 = S X 3 v (X) ; si ha
S3 = XS2 = X 6 + X 3 + X 2 + X,
che non compare nella tabella. Per S4 = S X 4 v (X) abbiamo
S4 = XS3 = X 7 + X 4 + X 3 + X 2
che, questa volta, compare in tabella come sindrome di X 13 + X 14 . Dato che X 4 v (X) è la parola
v traslata a destra di 4 posizioni, abbiamo che in X 4 v (X) ci sono due errori: uno in penultima ed
uno in ultima posizione. Correggendo questi due errori e poi traslando a sinistra di 4 posizioni,
recuperiamo la parola inviata, cioè u = 101000011101100. In formule,
u (x) = v (x) + x11 x13 + x14 ,
dove la riduzione al quoziente è fatta relativamente al polinomio X 15 + 1.
1 Ricordiamo
che r = 8 e −1 = 1.
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
64
Osserviamo che con lo schema di Meggitt abbiamo dovuto calcolare una tabella con solo 16
sindromi, invece che una tabella con le 121 sindromi di tutti i polinomi di peso minore o uguale
a 2.
Esempio 4.11. Con le stesse impostazioni, supponiamo questa volta di aver ricevuto la parola
v = 101000011011000, che corrisponde al polinomio
v (X) = 1 + X 2 + X 7 + X 8 + X 10 + X 11 .
Se calcoliamo tutte le sindromi, abbiamo la tabella
i
S X i v (X)
0
1
X7 + X5 + X3 + X2 + X + 1
X7 + X3 + X2 + X + 1
2
X7 + X6 + X3 + X2 + X + 1
3
X6 + X3 + X2 + X + 1
4
X7 + X4 + X3 + X2 + X
5
X7 + X6 + X5 + X3 + X2 + 1
6
X3 + X + 1
7
X4 + X2 + X
8
X5 + X3 + X2
9
X6 + X4 + X3
10
X7 + X5 + X4
11
X7 + X5 + X4 + 1
12
7
X + X5 + X4 + X + 1
13
X7 + X5 + X4 + X2 + X + 1
14
X7 + X5 + X4 + X3 + X2 + X + 1
Come si vede, in nessun caso otteniamo una delle sindromi “ammissibili” precedentemente
calcolate: in questo caso lo schema di decodifica della sezione 4.1 (e quindi anche lo schema di
Meggitt) restituisce un errore; ciò vuol dire che non c’è alcuna parola del codice che dista al più
2 da v.
4.3
Decodifica dei codici BCH
I codici BCH, con la sottofamiglia dei codici Reed-Solomon, hanno importanti applicazioni,
grazie al fatto che esistono efficienti algoritmi di decodifica.
Un algoritmo di decodifica ha come scopo di determinare
il numero degli errori;
le posizioni degli errori;
i valori degli errori.
Alcuni di questi obiettivi possono essere raggiunti seguendo strade diverse, sviluppando così
algoritmi più o meno efficienti.
Fissiamo la notazione che useremo.
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
65
q = pa è una potenza di un primo, n è un intero coprimo con p, b = ordn (q), β è un
elemento primitivo di Fqb e α è una radice primitiva n-esima di 1 in Fqb ;
C è un [n, k]-codice BCH in senso stretto su Fq (che il codice sia in senso stretto non è
un’ipotesi necessaria ma semplifica la notazione);
g (X) = g0 + · · · + gr X r (con k + r = n) è il polinomio generatore di C;
δ è la distanza designata;
w è la parola
ricevuta: essa è composta da una parola del codice v ed un errore e di peso
; i corrispondenti polinomi sono
m ≤ t = δ−1
2
w (X) = v (X) + e (X)
= v (X) + ei1 X i1 + · · · + eim X im
con eij 6= 0
Stiamo quindi implicitamente usando l’ipotesi di lavoro che siano avvenuti m ≤ t errori,
come già più volte osservato.
La prima delle nostre incognite è m, il numero degli errori avvenuti durante la trasmissione.
Le altre sono gli interi i1 , . . . , im , detti locazioni degli errori, e i valori ei1 , . . . , eim ∈ Fq , detti
grandezze degli errori.
Per costruzione,
v αi = 0 per i = 1, . . . , 2t, per cui se definiamo le sindromi Si tramite
i
Si = w α si ha
Si = w αi = v αi + e αi = e αi
m
m
m
X
i j X
i X
=
eij αi =
eij αij =
j γji
j=1
j=1
j=1
dove si è posto j = eij ∈ Fq e γj = αij ∈ Fqb per j = 1, . . . , m. Osserviamo che logα γj = ij ,
pertanto i γj tengono traccia delle posizioni in cui si sono verificati gli errori.
Indichiamo inoltre con S (X) il polinomio sindrome:
S (X) = S1 + S2 X + · · · + S2t X 2t−1 .
Abbiamo quindi un sistema di 2t equazioni


 1 γ12 + · · · + m γm

2
 1 γ 1 + · · · + m γ m
..
..

.
···
.



2t
1 γ12t + · · · + m γm
=
=
..
.
S1
S2
..
.
= S2t
In questo sistema i valori S1 , . . . , S2t sono noti, mentre non sono noti m, gli j ed i γj .
Algoritmo PGZ e metodo di Forney
L’algoritmo PGZ prende il nome dai suoi ideatori: Peterson, Gorenstein e Ziegler.
(4.3)
(4.4)
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
66
Determinazione del numero degli errori
Per prima cosa, occupiamoci di determinare m a partire dalla sola conoscenza degli Sj . Per
l = 1, . . . , t definiamo la matrice


S1 S2 · · ·
Sl
S2 S3 · · · Sl+1 


S[l] =  .
..
..  .
 ..
.
···
. 
Sl Sl+1 · · · S2l−1
Teorema 4.12. S[m] è invertibile e inoltre m = rk S[t] .
Dimostrazione. Indichiamo con D la matrice diagonale

1 γ 1
0
···
 0
γ
···
2 2

D=
..
..
 0
.
.
0
···
0

0
0 


0 
m γ m
e, per l ≤ t, indichiamo con Al la matrice

1
γ1
..
.


Al = γji−1 i=1,...,l = 

j=1,...,m
γ1l−1
Svolgendo i calcoli, si verifica

1
 γ1

Al DAtr
l =  ..
 .
···
···
···
···
1
γm
..
.



.

l−1
γm
che
···
···
1
γm
..
.



0
1
 1 γ 1 · · ·
  ..
..   ..
.
.
 .
.
.  .

···
0
·
·
·
1
m γm
l−1
γ1l−1 · · · γm


S1 S2 · · ·
Sl
S2 S3 · · · Sl+1 


= .
..
..  = S[l]
 ..
.
···
. 
Sl Sl+1 · · · S2l−1
γ1
..
.
γm
···
···
···

γ1l−1
.. 
. 
l−1
γm
(4.5)
Dato che per costruzione gli elementi γ1 , . . . , γm ∈ Fqb sono distinti non nulli, per l = m la
matrice Am è una matrice di Vandermonde invertibile; essendo anche gli 1 , . . . , m non nulli, ne
segue che S[m] è invertibile.
Ancora per il fatto che i γi sono distinti, i polinomi pi (X) ∈ Fqb [X] definiti da
pi (X) =
m−1
X
(X − γ1 ) · . . . · (X − γi−1 ) (X − γi+1 ) · . . . · (X − γm )
=
pi,j X j
(γi − γ1 ) · . . . · (γi − γi−1 ) (γi − γi+1 ) · . . . · (γi − γm )
j=0
sono di grado m − 1 e tali che pi (γj ) = δi,j (dove δi,j è la delta di Kronecker).
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
Se indichiamo con P la matrice m × t

p1,0 p1,1
 ..
..
P = .
.
pm,0
pm,1
···
..
.
p1,m−1
..
.
0
..
.
···
..
.

0
.. 
.
···
pm,m−1
0
···
0
67
la relazione pi (γj ) = δi,j è equivalente a P At = Im , dove Im è la matrice identità m × m. Da
ciò e dal fatto che la (4.5) in particolare ci dice che At DAtr
t = S[t] , abbiamo
D = Im DIm = P At DAtr P tr = P S[t] P tr
da cui
rk S[t] ≥ rk P S[t] P tr = rk D = m.
D’altra parte,
rk S[t] = rk At DAtr
≤ rk D = m
t
e quindi
rk S[t] = m.
In virtù di questo teorema si ha det S[m] 6= 0 mentre
det S[m+1] = det S[m+2] = · · · = det S[t] = 0
per cui per determinare m si deve calcolare det S[t] , det S[t−1] , det S[t−2] e così via fino a quando
non se ne trova uno non nullo: l’ordine di questo minore principale è il valore m cercato. Naturalmente, il caso in cui non si sono verificati errori è quello in cui Si = 0 per ogni i: in questo
caso, l’algoritmo termina subito.
Determinazione della posizione degli errori
Dato che ij = logα γj , la posizione degli errori è nota una volta che sono noti i valori γ1 , . . . , γm
(a meno di risolvere il problema del logaritmo discreto). Questi ultimi, a loro volta, sono noti
una volta che sono noti i coefficienti del polinomio
σ (X) = (1 − γ1 X) (1 − γ2 X) · . . . · (1 − γm X) = 1 +
m
X
σi X i .
(4.6)
i=1
−1
sono esattamente tutte
(a meno di trovare le radici del polinomio). Infatti, si ha che γ1−1 , . . . , γm
e sole le radici di σ. Per questo motivo il polinomio σ (X) è detto polinomio error locator.
Osserviamo che questo polinomio ha tutte le radici distinte.
In definitiva, il problema di determinare la posizione degli errori si riconduce al problema di
determinare i coefficienti di σ (X).
Teorema 4.13. Gli elementi σi sono l’unica soluzione del sistema lineare m × m


 

S1
S2
···
Sm
σm
−Sm+1
 S2

 

S3
· · · Sm+1 

 σm−1  −Sm+2 
= . 
 ..



..
.
.
.
..
..   ..   .. 
 .
.
Sm Sm+1 · · · S2m−1
σ1
−S2m
(4.7)
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
68
Dimostrazione. Per costruzione, σ γi−1 = 0 per i = 1, . . . , m; vale a dire
σ1 γ1−1
..
.


 1 +
..
.


1 +
−1
σ1 γm
+···+
···
+···+
σm γ1−m
..
.
=
0
..
.
−m
σm γm
=
0
Fissiamo un intero i ∈ {1, . . . , 2t − m} e moltiplichiamo la riga j per j γji+m :

i+m

 1 γ 1
..
.


i+m
m γ m
+
σ1 1 γ1i+m−1
..
.
+
i+m−1
σ 1 m γ m
+···+
σm 1 γ1i
..
.
···
i
+ · · · + σ m m γ m
=
0
..
.
=
0
Sommando tutte le righe, otteniamo
Si+m + σ1 Si+m−1 + · · · + σm Si = 0
per i = 1, . . . , 2t − m.
(4.8)
In particolare, per i = 1, . . . , m le (4.8) sono esattamente il sistema lineare (4.7). La matrice
dei coefficienti di tale sistema è S[m] e il suo rango, secondo il teorema 4.12, è esattamente
m. Il sistema ha quindi un’unica soluzione, che può essere calcolata con i metodi dell’algebra
lineare.
Osservazione 4.14. I calcoli fatti nella dimostrazione sono una parafrasi di quelli necessari per
dimostrare le identità di Newton. Di fatto, se q = 2 allora le equazioni del sistema (4.7) sono
proprio le equazioni di Newton per i relativi indici.
Osservazione 4.15. Dato che
σ (X) = 1 + σ1 X + · · · + σm−1 X m−1 + σm X m ,
il suo polinomio reciproco σ ∗ (X) è
σ ∗ (X) = X m σ X −1
= X m + σ1 X m−1 + · · · + σm−1 X + σm
m
Y
(X − γj )
=
j=i
quindi determinare l’uno o l’altro è indifferente perché ci si riduce sempre al sistema (4.7). Il
motivo per cui viene scelta la (4.6) come definizione del polinomio error locator è che, come
vedremo, per il calcolo del valore dell’errore è più naturale usare σ (X) invece di σ ∗ (X). Se
invece non è necessario calcolare il valore dell’errore (per esempio, nel caso di un codice binario)
allora può essere più spontaneo usare i coefficienti σ1 , . . . , σm per costruire σ ∗ (X) piuttosto che
σ (X), in modo da evitare il passaggio di invertire le radici.
Determinazione del valore degli errori
Avendo determinato m e gli interi i1 , . . . , im , ci restano da determinare i valori degli errori,
cioè gli eij . Naturalmente ciò non è necessario nel caso q = 2: nel caso dei codici binari l’algoritmo
si arresta qui.
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
69
Il sistema (4.4)

1 γ 1



 1 γ12
..

.



1 γ12t
+···+
+···+
···
+···+
m γ m
2
m γ m
..
.
=
=
..
.
S1
S2
..
.
2t
m γ m
= S2t
è a questo punto un sistema lineare a coefficienti in Fqb di rango massimo m nelle incognite
j = eij con i = 1, . . . , m e siamo nuovamente ricondotti all’utilizzo degli algoritmi dell’algebra
lineare.
Osservazione 4.16. Da quanto detto, risulta che per poter applicare questo algoritmo sono necessari alcuni algoritmi collaterali: logaritmo discreto nei campi finiti, calcolo delle radici di un
polinomio a coefficienti in un campo finito e calcolo dell’inverso di un elemento di un campo
finito; infatti, dalla conoscenza di σ (X) dobbiamo essere in grado di ricavare le sue radici ζj , da
queste gli inversi γj = ζj−1 e da questi ultimi gli interi ij = logα γj , che sono le locazioni degli
errori.
Questo si applica, come vedremo, anche a tutti gli altri algoritmi di decodifica: ogni algoritmo
ci permetterà di determinare il polinomio error locator e da questo dobbiamo ricavare gli altri
dati necessari.
Di questi tre problemi solo il calcolo dell’inverso è di facile ed efficiente soluzione, grazie
all’algoritmo euclideo; gli altri due problemi sono complessi e non ci occuperemo qui della loro
soluzione. Citiamo solo l’esistenza di un algoritmo molto utilizzato (l’algoritmo Chien search)
che permette di ridurre la complessità computazionale della ricerca delle radici di un polinomio
rispetto al semplice tentativo “a forza bruta”.
Riepilogo PGZ
Tenuto conto dell’osservazione precedente, l’algoritmo si basa sui teoremi 4.12 e 4.13 e il suo
svolgimento segue il seguente schema:
1. individuazione del numero degli errori: calcolare le sindromi Si per i = 1, . . . , 2t e costruire
le matrici S[i] per i = 1, . . . , t; calcolare det S[i] per i = t, t − 1, . . . , 2, 1: il primo indice m
per cui det S[m] 6= 0 è il numero degli errori;
2. individuazione della posizione degli errori: risolvere il sistema lineare non singolare (4.7)


 

S1
S2
···
Sm
σm
−Sm+1
 S2

 

S3
· · · Sm+1 

 σm−1  −Sm+2 
= . 
 ..



..
.
.
.
..
..   ..   .. 
 .
.
Sm
Sm+1
···
3. (solo se q 6= 2) individuazione del
singolare (4.4)

1 γ 1



 1 γ12
..

.



1 γ12t
S2m−1
−S2m
σ1
valore degli errori: risolvere il sistema lineare non
+···+
+···+
m γ m
2
m γ m
..
.
···
2t
+ · · · + m γ m
=
=
..
.
S1
S2
..
.
= S2t
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
70
Metodo di Forney
Il metodo di Forney è una variante dell’algoritmo PGZ. Le osservazioni che si svolgono per
svilupparlo sono poi utili anche per sviluppare altri algoritmi.
I primi due passi (calcolo del numero degli errori e della loro posizione) sono invariati.
Nel terzo passo (la determinazione del valore degli errori) invece di risolvere il sistema lineare (4.4) si utilizza un polinomio che, opportunamente valutato, permette di calcolare il valore
degli errori. Naturalmente in tutto quanto segue si assume che m > 0, altrimenti l’algoritmo
termina subito.
Iniziamo osservando che
Lemma 4.17. Il polinomio S (X) σ (X) non ha monomi nei gradi m, . . . , 2t − 1.
Dimostrazione. Pensando ad S (X) e σ (X) come serie di potenze con coefficienti nulli negli indici
maggiori dei rispettivi gradi, abbiamo
!
∞
h
X
X
S (X) σ (X) =
Sh−k+1 σk X h .
h=0
k=0
La tesi è quindi equivalente alle equazioni (4.8).
Il lemma ci induce a definire un nuovo polinomio
Definizione 4.18. Sia ω (X) il polinomio resto della divisione di S (X) σ (X) rispetto a X 2t , di
modo che
ω (X) ≡ S (X) σ (X) (mod X 2t ).
(4.9)
ω (X) è detto polinomio error evaluator. Per il lemma, si ha deg ω (X) < m.
Teorema 4.19. Se indichiamo con σ 0 (X) la derivata di σ (X), allora gli errori sono dati da
ω α−ik
ω γk−1
k = eik = − 0 −i = − 0 −1 per k = 1, . . . , m.
σ (α k )
σ γk
Dimostrazione. Per prima cosa, osserviamo che il polinomio error locator è, per costruzione, un
0
polinomio senza radici
multiple pertanto, per il criterio della derivata, MCD (σ (X) , σ (X)) = 1
0
−ij
e quindi 0 6= σ α
∈ Fqb .
Per definizione,
S (X) =
2t−1
X
Si+1 X i
i=0
=
2t−1
X
m
X

i=0
=

m
X
=
j=1
j γji+1  X i
j=1
j γ j
j=1
m
X

2t−1
X
!
γji X i
i=0
2t
j γ j
(γj X) − 1
γj X − 1
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
71
da cui
S (X) σ (X) = S (X)
m
Y
(1 − γl X)
l=1
m
Y
m
= (−1) S (X)
(γl X − 1)
l=1


m
m
2t
Y
X
(γ
X)
−
1
j
m

(γl X − 1)
= (−1) 
j γ j
γj X − 1
j=1
(4.10)
l=1
= (−1)
m
m
X
m
Y
2t
j γj (γj X) − 1
(γl X − 1)
j=1
≡ (−1)
m+1
l=1
l6=j
m
X
j γ j
j=1
m
Y
(γl X − 1)
(mod X 2t )
l=1
l6=j
Dato che deg ω (X) ≤ 2t − 1 e m ≤ t abbiamo
ω (X) = (−1)
m+1
m
X
j γ j
j=1
=
m
X
j γ j
j=1
m
Y
m
Y
(γl X − 1)
l=1
l6=j
(4.11)
(1 − γl X)
l=1
l6=j
e valutando in γk−1 otteniamo
m
Y
m+1
k γ k
γl γk−1 − 1 .
ω γk−1 = (−1)
(4.12)
l=1
l6=k
Occupiamoci ora di σ (X): da
σ (X) = (−1)
m
m
Y
(γl X − 1)
l=1
segue
m
σ 0 (X) = (−1)
m
X
γj
j=1
m
Y
(γl X − 1) .
l=1
l6=j
e quindi si ha
m
Y
m
σ 0 γk−1 = (−1) γk
γl γk−1 − 1 .
l=1
l6=k
Mettendo insieme la (4.12) e la (4.13) si ha la tesi.
(4.13)
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
72
Osservazione 4.20. La formula (4.11) potrebbe essere usata come definizione alternativa del
polinomio error evaluator:
m+1
ω (X) = (−1)
m
X
j γ j
j=1
m
Y
(γl X − 1)
(4.14)
l=1
l6=j
Osservazione 4.21. La definizione del polinomio error evaluator 4.18 sembra uscire dal cilindro.
Per capire come si arriva a questa definizione, costruiamo un polinomio h (X) tale che
h γk−1 = k per k = 1, . . . , m..
Il procedimento per fare ciò è semplice e ben noto: prima si costruiscono dei polinomi hj (X)
tali che hj γk−1 = δj,k :
m
Y
(γl X − 1)
.
hj (X) =
γl γj−1 − 1
l=1
l6=j
Se, per brevità, poniamo gj (X) =
Qm
l=1
l6=j
(1 − γl X), possiamo scrivere
σ (X) = (1 − γj X)
m
Y
(1 − γl X) = (1 − γj X) gj (X)
l=1
l6=j
e
σ 0 (X) = −
m
X
γj gj (X) .
j=1
A questo punto, basta porre
h (X) =
m
X
j hj (X) .
(4.15)
j=1
Il problema è che in questo modo nella definizione di h (X) si usano gli k , che sono proprio le
nostre incognite. È necessario allora cercare qualche relazione che permetta di costruire h (X)
usando ciò che conosciamo e dato che il valore degli k è in qualche modo codificato nelle sindromi,
è ragionevole aspettarci che nella relazione cercata interverrà il polinomio sindrome. Dato che
hj (X) =
gj (X)
gj γj−1
la (4.15) diventa
h (X) =
m
X
j=1
−1
ma gj γj
−1
= −γj−1 σ 0 γj
j
gj (X)
;
gj γj−1
e quindi
h (X) = −
m
X
j=1
j
m
X
gj (X)
gj (X)
=
−
j γj 0 −1 γj−1 σ 0 γj−1
σ
γj
j=1
è il polinomio cercato tale che
h γk−1 = k
per k = 1, . . . , m.
(4.16)
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
73
La (4.16) suggerisce la definizione
ω (X) =
m
X
j γj
j=1
m
Y
(1 − γl X)
(4.17)
l=1
l6=j
(in accordo con la (4.11)) dato che la funzione razionale − σω(X)
0 (X) ha valutazione uguale a quella
−1
−1
del polinomio h (X) in γ1 , . . . , γm :
m
m
m
Y
Y
X
ω γk−1 =
j γ j
1 − γl γk−1 = k γk
1 − γl γk−1 = k γk gk γk−1 = −k σ 0 γk−1 .
j=1
l=1
l6=j
l=1
l6=k
Seguendo questa strada, resta da dimostrare che ω (X) definito secondo la (4.17) sia lo stesso
precedentemente definito, cioè che con questa definizione è soddisfatta la relazione ω (X) ≡
S (X) σ (X) (mod X 2t ). Ciò naturalmente può essere fatto ripercorrendo a ritroso la (4.10).
Quest’ultima, comunque, trova anche un’interpretazione che ne chiarisce l’origine, a patto di
mettersi nel campo delle serie formali di Laurent Fqb ((X)): in tale campo,
ω (X) = (−1)
m+1
m
X
j γ j
j=1
= (−1)
m+1
= σ (X)
m
X
j=1
m
X
−
j=1
= σ (X)
m
X
m
X
m
Y
1
j γ j
(γl X − 1)
γj X − 1
l=1
1
j γ j
γj X − 1
−j γj
j=1
= σ (X)
∞
X
l=0
j
(γl X − 1)
l=1
l6=j
j=1
= σ (X)
m
Y
∞
X
∞
1 X l+1 l
γj X
−
γj
l=0
!
!
γjl+1 X l
l=0


m
X

j γjl+1  X l
j=1
e si riconosce che i primi 2t coefficienti dell’ultima serie di potenze sono esattamente le sindromi:
troncando quindi questa relazione al grado 2t, cioè passando al quoziente modulo X 2t , si ottiene
esattamente la (4.10) che è alla base della definizione 4.18.
Corollario 4.22. Si ha deg ω (X) < m e ω (X) 6= 0.
Dimostrazione. Segue dalla formula (4.11) che definisce ω (X) e dal fatto che che i γj sono tutti
distinti per cui
m
Y
ω γk−1 = −k γk
1 − γl γk−1 = −k σ 0 γk−1 =
6 0
l=1
l6=k
per k = 1, . . . , m.
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
74
Algoritmo di Sugiyama
L’algoritmo di Sugiyama evita il calcolo dei determinanti agendo in modo più efficiente rispetto all’algoritmo PGZ. Questo algoritmo utilizza l’algoritmo euclideo e risolve la decodifica
determinando in un colpo solo sia m che i polinomi error locator ed error evaluator. Come nella
precedente sezione, anche in questa supponiamo che S (X) 6= 0, cioè m > 0, altrimenti abbiamo
una parola del codice e l’algoritmo termina subito.
Riprendiamo la relazione che definisce ω (X):
ω (X) ≡ S (X) σ (X)
(mod X 2t ).
(4.18)
Questa equazione è equivalente al fatto che esiste un polinomio v (X) tale che
ω (X) = v (X) X 2t + S (X) σ (X) .
(4.19)
Definizione 4.23. L’equazione (4.19) (anche nella sua versione modulare (4.18)) è detta equazione fondamentale per i codici BCH.
Nell’equazione fondamentale (4.19) i polinomi S (X) e σ (X) determinano univocamente i
polinomi ω (X) e v (X). Per calcolarli, ripartiamo dall’ultima uguaglianza nella (4.10) (quella
che si ha subito prima di passare al modulo):
m
S (X) σ (X) = (−1)
m
X
m
Y
2t
j γj (γj X) − 1
(γl X − 1)
j=1


m
= (−1)
m
X
l=1
l6=j
j γj2t+1
j=1

m
Y

m
m
X
Y

m+1
j γ j
(γl X − 1)
(γl X − 1) X 2t + (−1)
j=1
l=1
l6=j
m
m
l=1
l6=j

Y
X


m+1
(γl X − 1) X 2t + ω (X)
j γj2t+1
= − (−1)
j=1
l=1
l6=j
pertanto se si pone
v (X) = (−1)
m+1
m
X
j=1
j γj2t+1
m
Y
(γl X − 1)
(4.20)
l=1
l6=j
si ottiene la (4.19).
Definizione 4.24. Il polinomio (4.20) è detto polinomio error co-evaluator.
Abbiamo quindi che i polinomi error locator, error evaluator ed error co-evaluator sono una
terna che soddisfano l’equazione fondamentale. Riassumiamo alcune loro proprietà evidenti.
Lemma 4.25. Siano ω (X), v (X) e σ (X) rispettivamente, i polinomi error evaluator, error
co-evaluator ed error locator. Allora
1. deg ω (X) < t;
2. deg v (X) < t;
3. deg σ (X) ≤ t;
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
75
4. σ (0) = 1;
5. MCD (σ (X) , v (X)) = 1.
Dimostrazione. Le prime quattro seguono direttamente dalla definizione (per le prime tre in
realtà dalla definizione segue che le disuguaglianze possono essere anche più strette). Quanto
−1
all’ultima, anch’essa segue dalla definizione osservando che le radici di σ (X) sono γ1−1 , . . . , γm
e
m
Y
m+1
−1
2t+1
v γj
= (−1)
j γ j
γl γj−1 − 1 6= 0
l=1
l6=j
dato che i γj sono tutti diversi tra loro.
Il nostro obiettivo è mostrare che le proprietà elencate nel lemma 4.25 sono sufficienti a
determinare univocamente la terna ω (X), v (X) e σ (X).
Per trovare altre soluzioni che soddisfino l’equazione, osserviamo che
∃a (X) , b (X) , c (X) |a (X) = b (X) X 2t + c (X) S (X) ⇔ a (X) ∈ MCD X 2t , S (X) .
Lemma 4.26. MCD X 2t , S (X) = X d per qualche d < t.
2t
Dimostrazione. Chiaramente MCD X
,
S
(X)
= X d per qualche d. Essendo soluzione dell’e
d
quazione fondamentale, ω (X) ∈ X ; dal corollario 4.22, ω (X) 6= 0, pertanto d ≤ deg ω (X) e
quindi d < t per il lemma precedente.
Dato che il massimo comun divisore tra X 2t e S (X) ha grado minore di t, l’algoritmo euclideo ci permette di trovare delle soluzioni dell’equazione fondamentale aventi grado “abbastanza
piccolo”: il teorema A.3 dice
che se ri (X), xi (X) e yi (X) sono le successioni indicate per il
calcolo di MCD X 2t , S (X) allora si ha
ri (X) = xi (X) X 2t + yi (X) S (X) .
Grazie al teorema A.13, i gradi dei resti ri (X) formano una successioni di interi strettamente
decrescente per i ≥ 1: indichiamo con ω0 (X) il primo resto rj (X) per cui deg rj (X) < t e con
v0 (X) e σ0 (X) i rispettivi coefficienti xj (X) e yj (X) nell’equazione precedente.
Teorema 4.27. Con le notazioni precedenti, valgono le seguenti proprietà:
1. deg ω0 (X) < t;
2. deg v0 (X) < t;
3. deg σ0 (X) ≤ t;
4. MCD (σ0 (X) , v0 (X)) = 1.
Dimostrazione. La 1 vale per costruzione. La 4 è la A.3.7.
Usando la notazione dell’algoritmo euclideo, per il teorema A.13 si ha
deg yj−1 (X) < deg σ0 (X) e
deg rj−1 (X) > deg ω0 (X)
da cui
deg (yj−1 (X) ω0 (X)) < deg (σ0 (X)rj−1 (X)) .
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
76
Dal teorema A.3.5,
σ0 (X) rj−1 (X) − ω0 (X) yj−1 (X) = ±X 2t
da cui deg (σ0 (X) rj−1 (X)) = 2t. Dato che ω0 (X) = rj (X) è il primo resto di grado minore di
t, si ha deg rj−1 (X) ≥ t e quindi deg σ0 (X) ≤ t, cioè la 3.
Per la 2 si ragiona in modo simile: deg xj−1 (X) < deg v0 (X) per cui
deg (xj−1 (X) ω0 (X)) < deg (v0 (X)rj−1 (X)) .
Dato che
v0 (X) rj−1 (X) − ω0 (X) xj−1 (X) = ±S (X)
segue deg (v0 (X) rj−1 (X)) < 2t e deg v0 (X) < t.
−1
Moltiplicando la terna σ0 (X) , ω0 (X) , v0 (X) per σ0 (0) abbiamo un’altra soluzione dell’equazione che soddisfa le proprietà del lemma 4.25: resta da capire quante sono tali terne.
Teorema 4.28. Sia (a (X) , b (X) , c (X)) una soluzione dell’equazione
a (X) = b (X) X 2t + c (X) S (X) .
1. Se
(a) deg a (X) < t,
(b) deg b (X) < t,
(c) deg c (X) ≤ t
allora esiste un polinomio k (X) tale che
a (X) = k (X) ω (X) ,
b (X) = k (X) v (X)
e
c (X) = k (X) σ (X) .
2. Se, inoltre, MCD (b (X) , c (X)) = 1 allora k (X) = k ∈ F∗q è una costante non nulla.
3. Infine, se oltre alle precedenti vale anche c (0) = 1, allora k = 1.
Dimostrazione. Supponiamo di aver dimostrato la proprietà 1. Dato che k (X) divide sia b (X)
che c (X), segue che k (X) divide anche il loro massimo comun divisore, pertanto k (X) è una
costante, ovviamente non nulla. La 3 segue banalmente dalla 2 e dal fatto che σ (0) = 1.
Resta da dimostrare la 1.
Abbiamo
a (X) = b (X) X 2t + c (X) S (X)
ω (X) = v (X) X 2t + σ (X) S (X)
Eliminando S (X) da queste due equazioni abbiamo
σ (X) a (X) − c (X) ω (X) = (σ (X) b (X) − c (X) v (X)) X 2t .
Entrambi gli addendi a sinistra hanno grado strettamente minore di 2t, pertanto la precedente
equazione implica
σ (X) a (X) − c (X) ω (X) = 0
(4.21)
σ (X) b (X) − c (X) v (X) = 0
(4.22)
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
77
Sappiamo che MCD (σ (X) , v (X)) = 1: siano f (X) e g (X) tali che
f (X) σ (X) + g (X) v (X) = 1.
Moltiplicando per c (X) e usando la (4.22) abbiamo
c (X) = f (X) σ (X) c (X) + g (X) v (X) c (X)
= f (X) σ (X) c (X) + g (X) σ (X) b (X)
= (f (X) c (X) + g (X) b (X)) σ (X)
= k (X) σ (X)
dove k (X) = f (X) c (X) + g (X) b (X). Sostituendo c (X) nella (4.21) e nella (4.22), otteniamo
infine
σ (X) a (X) = σ (X) k (X) ω (X)
σ (X) b (X) = σ (X) k (X) v (X)
Dato che σ (X) 6= 0, dalla legge di cancellazione in Fq [X] segue
a (X) = k (X) ω (X)
b (X) = k (X) v (X)
Unendo questi risultati, otteniamo che
ω0 (X) = σ0 (0) ω (X)
v0 (X) = σ0 (0) v (X)
σ0 (X) = σ0 (0) σ (X)
che è il risultato cercato.
Riepilogo Sugiyama
Riassumiamo i passaggi fondamentali per effettuare la decodifica di un codice BCH con questo
metodo.
1. Determinare le sindromi S1 , . . . , S2t e costruire il polinomio sindrome S (X).
2. Applicare l’algoritmo euclideo ai polinomi X 2t e S(t) fermandosi al primo passaggio in cui
il resto è di grado minore di t: siano
−1
rj (X)
−1
Xj (X)
−1
yj (X)
ω (X) = yj (0)
v (X) = yj (0)
σ (X) = yj (0)
i polinomi così trovati: essi sono, nell’ordine, i polinomi error evaluator, error co-evaluator
e error locator.
3. Il grado di σ (X) è m, il numero degli errori.
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
78
4. Determinare le posizioni degli errori trovando le radici di σ (X), facendo gli inversi e
prendendone il logaritmo rispetto ad α.
5. Determinare i valori degli errori con il metodo di Forney, cioè tramite la formula
ω α−ik
ω γ −1
k = eik = − 0 −i = − 0 k−1 per k = 1, . . . , m.
σ (α k )
σ γk
Algoritmo di Berlekamp-Massey
L’algoritmo di Berlekamp-Massey è probabilmente l’algoritmo più utilizzato per la correzione
dei codici BCH. Esso permette di determinare il polinomio error locator σ (X) in modo più
efficiente rispetto all’algoritmo PGZ perché parte da un problema computazionalmente poco
complesso e aumenta ricorsivamente i calcoli solo quando sono strettamente necessari. Nel caso
in cui il codice non sia binario, una volta trovato il polinomio error locator si procede alla
determinazione del valore degli errori usando il metodo di Forney.
Per introdurre l’algoritmo dobbiamo prima sviluppare la teoria necessaria.
LFSR e serie di potenze
Definizione 4.29. Una successione A = (a1 , a2 , . . .) di elementi di un campo K si dice linear
feedback shift register (LFSR) se esiste un intero k > 0 e degli elementi c1 , . . . , ck tali che
ai = c1 ai−1 + c2 ai−2 + · · · + ck ai−k =
k
X
cj ai−j
per ogni i > k.
(4.23)
j=1
La k-upla (a1 , . . . , ak ) si dice seme del LFSR mentre (c1 , . . . , ck ) si dice generatore. Il polinomio
c (X) = 1 − c1 X − · · · − ck X k
si dice polinomio generatore. Scriveremo anche
A = h(a1 , . . . , ak ) , (c1 , . . . , ck )i = h(a1 , . . . , ak ) , c (X)i .
Nel seguito tenderemo ad identificare un generatore (c1 , . .P
. , ck ) con il corrispondente polinomio
∞
generatore ed il LFSR A con la serie di potenze A (X) = i=0 ai+1 X i .
Osservazione 4.30. Un LFSR non è altro che la soluzione di un’equazione alle differenze finite
lineare omogenea
(y1 , . . . , yk ) = (a1 , . . . , ak )
yn+k − c1 yn+k−1 − · · · − ck yn = 0 per n ≥ 1
In questo contesto il problema è trovare l’equazione che fornisce una soluzione data piuttosto che
trovare la soluzione data l’equazione.
Osservazione 4.31. È evidente che un generatore ed il seme individuano univocamente il LFSR;
essi non sono però necessariamente unici: il LFSR costante (a, a, a, . . .) ha come generatore (1)
ma anche (1, −1, 1), (1, −1, 1, −1, 1), ecc.
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
79
P∞
P∞
Definizione 4.32. Se B (X) = i=0 bi X i e C (X) = i=0 ci X i sono due serie di potenze in
K [[X]], il prodotto (di convoluzione) è definito in K [[X]] come


∞
X
X

B (X) C (X) =
bj c k  X i .
(4.24)
i=0
j+k=i
Indichiamo con (B (X) C (X))i il coefficiente di grado i di B (X) C (X).
Osservazione 4.33. È ben noto che il prodotto definito dalla (4.24) è associativo, per cui segue
subito che
(4.25)
X j B (X) C (X) i = X j (B (X) C (X)) i = (B (X) C (X))i−j
dove si considerano nulli i coefficienti di indice negativo.
Osservazione 4.34. A causa della nostra convenzione di iniziare a contare gli indici di un LFSR
a partire da 1, quando consideriamo un LFSR come serie di potenze dobbiamo tener conto di
questo sfasamento nella definizione (4.24): questo vuol dire che il coefficiente del monomio di
grado i è dato dalla somma dei prodotti dei coefficienti la cui somma degli indici è i + 1.
Proposizione 4.35. Sia A = (a1 , a2 , . . .) un LFSR e f (X) = 1+f1 X +· · ·+fk X k un polinomio
di grado k tale che f (0) = 1. Si ha A = h(a1 , . . . , ak ) , f (X)i se, e solo se,
(f (X) A (X))i = 0
per ogni i ≥ deg f (X) .
(4.26)
Dimostrazione. Se l > k, tenendo conto dello sfasamento sottolineato nell’osservazione precedente, partendo dalla (4.23) si ha
al =
k
X
j=1
−fj al−j ⇔
k
X
fj al−j = 0 ⇔ (f (X) A (X))l−1 = 0.
j=0
Questa proposizione ci induce a definire l’insieme dei generatori di un LFSR o, più in generale,
di una serie di potenze:
Definizione 4.36. Se B = B (X) è una serie di potenze, gli annullatori di B sono gli elementi
dell’insieme
Ann B = f (X) ∈ K [X] f (X) B (X) ∈ K [X] .
(4.27)
I generatori di B sono gli elementi dell’insieme
Gen B = f (X) ∈ Ann B deg (f (X) B (X)) < deg f (X) .
(4.28)
Osservazione 4.37. Se con R indichiamo l’anello dei polinomi K [X], con M l’anello delle serie
di potenze visto come R-modulo, con M 0 il sottomodulo di M dato da R1 e con N il modulo
quoziente M/M 0 , allora si ha
Ann B = AnnR B = f ∈ R|f B = 0 ,
dove B = B + M 0 è la classe di resto di B nel quoziente. Sappiamo che Ann B è un ideale di R.
Osserviamo anche che 0 ∈
/ Gen B.
I generatori sono ovviamente chiusi rispetto alla moltiplicazione per scalari non nulli. Sono
anche chiusi rispetto alle traslazioni:
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
80
Proposizione 4.38. Siano f (X) e g (X) due polinomi e supponiamo f (X) = X r g (X); allora
f (X) ∈ Gen B ⇔ g (X) ∈ Gen B.
Dimostrazione. Poiché i ≥ deg f (X) se e solo se i − r ≥ deg g (X), per la (4.25) si ha
(f (X) B (X))i = ((X r g (X)) B (X))i = (g (X) B (X))i−r
da cui la tesi.
Proposizione 4.39. Sia B una serie di potenze; allora
Gen B 6= ∅ ⇔ B è un LFSR.
Se B è un LFSR allora Gen B = Ann B \ {0}.
−1
In particolare, se Ann (B) = (f (X)) allora f (0) 6= 0 e c (X) = f (0) f (X) ∈ Gen B è un
generatore per B di grado minimo.
Dimostrazione. Se B è un LFSR, per definizione Gen B 6= ∅.
Viceversa, sia f (X) ∈ Gen B e scriviamo f (X) = aX r g (X) con g (0) = 1. Per la proposizione 4.38 si ha g (X) ∈ Gen B e g (X) è un polinomio generatore perché g (0) = 1, quindi B è
un LFSR.
Supponiamo ora Gen B 6= ∅ e siano Ann (B) = (f (X)) con f (X) 6= 0 e h (X) ∈ Gen B.
Allora h (X) = q (X) f (X) per un polinomio q (X) ∈ K [X]. Poiché h (X) ∈ Gen B e f (X) ∈
Ann (B) si ha
deg (h (X) B (X)) < deg (h (X))
deg (q (X) f (X) B (X)) < deg (q (X) f (X))
deg q (X) + deg (f (X) B (X)) < deg q (X) + deg f (X)
deg (f (X) B (X)) < deg f (X)
pertanto f (X) ∈ Gen B. Utilizzando gli stessi conti al contrario, si ottiene che ogni multiplo
non nullo di f (X) è in Gen B.
Sia ora Ann (B) = (f (X)) e scriviamo f (X) = X r g (X) con g (0) 6= 0. Se si assume r > 0,
applicando la proposizione 4.38 si contraddice la minimalità di deg f (X). Da ciò segue che è
possibile definire
nell’enunciato.
Dato che c (0) = 1, dalla proposizione 4.35
c (X) come indicato
segue che B = b1 , . . . , bdeg c(X) , c (X) .
Grazie alla proposizione 4.39 possiamo definire il generatore di grado minimo.
Definizione 4.40. Sia A un LFSR e sia f (X) ∈ Gen A è un polinomio di grado minimo tra
quelli in Gen A; se f (0) = 1, allora f (X) è detto polinomio generatore di grado minimo
di A.
Il fatto che Gen A = Ann (A) \ {0} ci assicura che il polinomio generatore di grado minimo
di A è unico e si ha (f (X)) = Ann (A).
La proposizione 4.39 ci permette di caratterizzare i LFSR all’interno di K [[X]] (o, meglio,
all’interno del suo campo quoziente). Ricordiamo che una serie di potenze B = B (X) è invertibile
se, e solo se, B (0) 6= 0.
Corollario 4.41. Sia B = B (X) una serie di potenze.
1. Ann (B) 6= {0} se, e solo se, esistono due polinomi f (X) e g (X) tali che B (X) =
g(X)
f (X) .
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
81
2. Gen B 6= ∅ se, e solo se, esistono due polinomi f (X) e g (X) tali che f (0) 6= 0, deg g (X) <
deg f (X) e B (X) = fg(X)
(X) .
In tali casi, se si scelgono f (X) e g (X) tali che MCD (f (X) , g (X)) = 1 allora (f (X)) = I (B).
Dimostrazione. I due punti sono simili: mostriamo solo il secondo.
(⇐) Si ha f (X) B (X) = g (X) e quindi f (X) ∈ Gen B che pertanto è non vuoto; dalla
proposizione 4.39 segue che B è un LFSR.
(⇒) Sia f (X) un polinomio generatore di B e poniamo g (X) = f (X) B (X). Dal fatto
che f (X) è un polinomio generatore abbiamo f (0) = 1, pertanto f (X) è invertibile, per cui
B (X) = fg(X)
(X) ; poiché f (X) ∈ Gen B, abbiamo deg g (X) < deg f (X).
Sia ora MCD (f (X) , g (X)) = 1 e sia h (X) ∈ Ann (B), di modo che h (X) B (X) è un
polinomio; poiché h (X) B (X) = h(X)g(X)
f (X) , usando il fatto che MCD (f (X) , g (X)) = 1 si ottiene
f (X) |h (X), da cui la tesi.
Osservazione 4.42. Indicando con S = {f ∈ K [X] |f (0) 6= 0} si ha che S è chiuso moltiplicativamente ed inoltre S ⊂ U (K [[X]]), pertanto possiamo effettuare l’identificazione S −1 K [X] ⊂
K [[X]]. In questo senso, il corollario 4.41 ci dice che i LFSR sono le “frazioni proprie” di K [[X]].
Questo vuol anche dire che l’algoritmo di Berlekamp-Massey è lo strumento che permette di costruire la funzione generatrice, espressa in forma di funzione razionale, di una successione definita
per ricorrenza, cfr. (4.49).
LFSR generati da successioni finite
Lo scopo dell’algoritmo di Berlekamp-Massey è determinare il polinomio generatore di grado
minimo per un LFSR di cui siano forniti i primi N elementi, cioè risolvere il seguente problema.
Problema 4.43. Dati N elementi S = (S1 , . . . , SN ), determinare un polinomio
c (X) = 1 + c1 X + · · · + cl X l
di grado minore o uguale a N tale che esso generi, insieme a (S1 , . . . , Sl ), un LFSR i cui primi
N elementi siano proprio (S1 , . . . , SN ) e tale che c (X) sia di grado minimo rispetto a questa
proprietà.
In altre parole, vogliamo trovare un polinomio generatore di grado minimo di fra tutti i
polinomi che generano un LFSR che inizia per S.
Osservazione 4.44. Non è detto che una soluzione del problema 4.43 sia necessariamente unica.
Per esempio, si consideri S = (0, 1): evidentemente, non esiste nessun polinomio c (X) = 1 + c1 X
di primo grado che generi, insieme ad un opportuno seme (a), un LFSR A = (a1 , a2 , a3 , . . .) tale
che (a1 , a2 ) = S. Infatti si dovrebbe avere a = 0 ma allora il LFSR generato è sempre il LFSR
con tutti i termini nulli, indipendentemente da c1 .
Viceversa, ogni polinomio di secondo grado c (X) = 1 + c1 X + c2 X 2 genera, insieme al seme
(0, 1), un LFSR i cui primi due elementi sono banalmente S.
Saremo in particolare interessati a risolvere il problema con dato iniziale fornito dalla successione delle sindromi. In questo caso è naturale estendere la successione finita delle sindromi
S1 , . . . , S2t in modo da ottenere un LFSR: se poniamo
Sj + σ1 Sj−1 + · · · + σm Sj−m = 0
per j > 2t,
(4.29)
allora queste equazioni, insieme alle (4.8), ci dicono che Σ = {S1 , S2 , . . .} è un LFSR avente il
polinomio error locator σ (X) come generatore e gli elementi (S1 , . . . , Sm ) come seme.
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
82
Introduciamo la notazione che useremo nel seguito.
Se A è un LFSR, indichiamo con A(k) i primi k elementi di A.
Se S = (S1 , . . . , SN ) è una successione finita e c (X) = 1 + c1 X + · · · + cN X N un polinomio
tale che c (0) = 1, indichiamo con hS, c (X)i il LFSR generato da S e c (X).
Poniamo
n
o
hSi = A | A è un LFSR e A(N ) = S
(4.30)
cioè l’insieme di tutti i LFSR che iniziano per S.
Con G (S) indichiamo l’insieme di tutti i polinomi generatori di grado minimo di qualche
LFSR che inizia per S:
G (S) = c (X) ∈ K [X] | c (X)
(4.31)
è un polinomio generatore di grado minimo per qualche A ∈ hSi
e infine indichiamo con l (S) il minimo dei gradi possibili:
l (S) = min {deg c (X) | c (X) ∈ G (S)} .
(4.32)
Appare evidente che ci capiterà frequentemente di confrontare i primi termini di un LFSR
con una successione data: ciò viene fatto tramite la proposizione 4.35. Riscriviamo questo caso
particolare per riferimenti futuri.
Lemma 4.45. Sia f (X) = 1 + f1 X + · · · + fl X l un polinomio di grado l e sia h un intero tale
che l < h. Indichiamo con A = (a1 , a2 , . . .) il LFSR generato da f (X) e S (l) . Allora A(h) = S (h)
se, e solo se,
f (X) S (h) (X)
= 0 per l < j ≤ h.
(4.33)
j−1
Secondo queste definizioni, se g (X) ∈ G (S) e l = deg g (X) ≤ N allora g (X) genera, insieme
a (S1 , . . . , Sl ), un LFSR che inizia per S e pertanto l ≥ l (S).
Lemma 4.46. Con la notazione introdotta, hSi =
6 ∅ e l (S) ≤ N . Inoltre, se S 0 è un’altra
successione e l0 = l (S 0 ) è il corrispondente minimo grado, allora S ⊂ S 0 ⇒ l (S) ≤ l (S 0 ).
Dimostrazione. Se S (N ) = (S1 , . . . , SN ) è la successione data, basta considerare una qualsiasi
successione di elementi (c1 , . . . , cN ): il LFSR da loro generato considerandoli, rispettivamente,
seme e generatore inizia per S. Quindi hSi =
6 ∅. Inoltre il polinomio generatore
c (X) = 1 − c1 X − · · · − cN X N
ha grado N e quindi l ≤ N . L’ultima osservazione segue dal fatto che hS 0 i ⊂ hSi.
Grazie al lemma 4.46 abbiamo l’esistenza di una soluzione al problema 4.43 e anche un limite
superiore per il grado delle soluzioni.
Ovviamente non è detto che il polinomio 1−c1 X −· · ·−cN X N , che è un polinomio generatore,
realizzi il grado minimo l(S): ciò avviene se, e solo se, l (S) = N .
Il nostro obiettivo è calcolare una soluzione del problema 4.43 nel caso in cui S = (S1 , . . . , S2t ),
le sindromi di un codice BCH. Lo studio fatto dell’equazione fondamentale per i codici BCH ci
dice che la soluzione del problema è proprio il polinomio error locator.
Lemma 4.47. Se S = (S1 , . . . , S2t ) allora l (S) ≤ m.
Dimostrazione. La successione Σ definita dalle (4.29) è un LFSR che inizia per S, cioè Σ ∈ hSi;
il suo polinomio generatore è il polinomio error locator σ (X), cioè σ (X) ∈ G (S); da ciò,
l (S) ≤ m = deg σ (X).
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
83
Teorema 4.48. Siano S = (S1 , . . . , S2t ) le sindromi di un codice BCH e Σ = {S1 , S2 , . . .} il
LFSR delle sindromi. Se c (X) una soluzione del problema 4.43 per S e se deg c (X) ≤ t, allora
si deve avere c (X) = σ (X) e l (S) = m, dove σ (X) è il polinomio error locator e m è il suo
grado.
Dimostrazione. Nel caso delle sindromi, per il lemma abbiamo l (S) ≤ m = deg σ (X), dato che
σ (X) ∈ hSi. Sia dunque c (X) una soluzione del problema con N = deg c (X) ≤ m e poniamo
C = h(S1 , . . . , SN ) , c (X)i. Per il lemma 4.45, da C (2t) = S segue che S (X) c (X) non ha monomi
nei gradi m, . . . , 2t − 1.
Sia a (X) il resto della divisione di S (X) c (X) rispetto a X 2t ; da quanto appenda detto,
deg a (X) < m ≤ t. Se poniamo
a (X) − S (X) c (X) = b (X) X 2t ,
si ha che anche deg b (X) < t, pertanto la terna a (X) , b (X) , c (X) è una soluzione dell’equazione
fondamentale (4.19) che soddisfa le proprietà del teorema 4.28. Da ciò, esiste k (X) tale che
c (X) = k (X) σ (X); questo, unito al fatto che deg c (X) ≤ deg σ (X), implica che k (X) è una
costante (non nulla). Da σ (0) = c (0) = 1, segue k = 1
L’algoritmo B-M
Sia data una successione S = (S1 , . . . , S2t ). L’algoritmo di Berlekamp-Massey che svilupperemo in questa sezione permette di risolvere il problema 4.43 per la successione S. Nel caso
particolare in cui S è la successione delle sindromi, il teorema 4.48 ci assicura che la soluzione è
il polinomio error locator.
Osservazione 4.49. Se m è il grado del polinomio error locator, da quanto visto nelle sezioni
precedenti segue che il LFSR Σ delle sindromi è, in realtà, univocamente determinato dai soli
S1 , S2 , . . . , S2m . Non supponendo di conoscere m né il polinomio error locator, il nostro punto
di partenza sarà necessariamente la successione S1 , S2 , . . . , S2t .
Come nella sezione precedente poniamo S (j) = (S1 , S2 , . . . , Sj ) per 1 ≤ j ≤ 2t. Indichiamo
anche con S (j) (X) il polinomio individuato da S (j) .
Il nostro obiettivo è costruire dei polinomi
(j)
(j)
σ (j) (X) = 1 + σ1 X + · · · + σlj X lj
di grado lj ≤ j tali che σ (j) (X) generi, con seme S1 , . . . , Slj , un LFSR Σj i cui primi j elementi
siano S (j) e, inoltre, tali che σ (j) (X) sia soluzione del problema 4.43 per S (j) .
Introduciamo la seguente notazione, in accordo a quella della precedente sezione.
Per 1 ≤ j ≤ 2t definiamo
n
o
λj = min deg c (X) | c (X) ∈ G S (j) .
Dal lemma 4.46 segue che λj ≤ j per 1 ≤ j ≤ 2t ed inoltre λj−1 ≤ λj per 1 < j ≤ 2t.
L’ipotesi induttiva è quindi che per k − 1 = 1, . . . , 2t − 1 il polinomio σ (k−1) (X) sia un
polinomio che realizza tale minimo, cioè lk−1 = λk−1 ; in altre parole, abbiamo una successione
di LFSR
D
E
(1)
Σ1 = S (λ1 ) , σ (1) (X)
tale che Σ1 = S (1)
D
E
(2)
Σ2 = S (λ2 ) , σ (2) (X)
tale che Σ2 = S (2)
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
84
..
.
D
E
Σk−1 = S (λk−1 ) , σ (k−1) (X)
(k−1)
tale che Σk−1 = S (k−1)
Supponendo di aver costruito σ (k−1) (X) che risolve il problema 4.43 per S (k−1) , se necessario
lo si modifica in un nuovo polinomio σ (k) (X) che risolve il problema 4.43 per S (k) ; la modifica viene effettuata utilizzando un polinomio σ (r−1) (X) scelto in modo opportuno tra quelli precedenti
σ (k−1) (X).
Ricordiamo che nel caso generale non abbiamo la certezza che la soluzione sia unica, né che
il suo grado sia minore o uguale di t però, nel caso delle sindromi di un codice BCH, si ha
σ (2t) (X) = σ (X), il polinomio error locator. Se però il polinomio finale σ (2t) (X) ha grado
maggiore di t allora la successione S (2t) non è interpretabile come quella delle sindromi di un
codice BCH: in altre parole, si devono essere verificati più di t errori nella trasmissione.
Prima di iniziare la dimostrazione, è opportuno trasformare in formule le ipotesi induttive;
per controllare i primi k − 1 o k elementi del LFSR generato, applichiamo il lemma
4.45 ai
polinomi derivanti dall’induzione: il polinomio σ (k−1) (X), con il seme S1 , . . . , Sλk−1 , genera
un LFSR Σk−1 iniziante per S (k−1) , per cui vale la relazione
λk−1
Sj = −
X
(k−1)
σi
per λk−1 < j ≤ k − 1,
Sj−i
(4.34)
i=1
cioè
σ (k−1) (X) S (k−1) (X)
j−1
= 0 per λk−1 < j ≤ k − 1.
(4.35)
Dato che S (k) coincide con S (k−1) sui primi k − 1 valori e considerato che ci limitiamo a λk−1 <
j ≤ k − 1, quest’ultima è equivalente a
σ (k−1) (X) S (k) (X)
= 0 per λk−1 < j ≤ k − 1.
(4.36)
j−1
Osserviamo anche che dalla (4.25) si ha
X k−r σ (r−1) (X) S (k) (X)
=
σ (r−1) (X) S (k) (X)
j−1
j−1−k+r
e, per r ≤ k − 1, l’ipotesi induttiva (4.36) diventa
σ (r−1) (X) S (k) (X)
= 0 per λr−1 < j − k + r ≤ r − 1
j−k+r−1
cioè
σ (r−1) (X) S (k) (X)
j−1−k+r
= 0 per k − r + λr−1 < j ≤ k − 1.
(4.37)
Controlliamo ora se Σk−1 inizia per S (k) : in tal caso l’induzione finisce subito, perché basta
porre σ (k) (X) = σ (k−1) (X).
A tal fine, calcoliamo l’elemento k-esimo del LFSR generato da σ (k−1) (X) e S1 , . . . , Sλk−1 :
esso è
λk−1
X (k−1)
Ŝk = −
σi
Sk−i .
i=1
I primi k valori del LFSR Σk−1 sono quindi S1 , . . . , Sk−1 , Ŝk .
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
85
Definizione 4.50. La discrepanza è dk = Sk − Ŝk .
(k−1)
Come nel lemma 4.45, tenendo conto σ0
λk−1
dk = Sk − Ŝk = Sk +
X
i=1
= 1 e che σ (k−1) ha grado λk−1 ≤ k − 1, si ha
λk−1
(k−1)
σi
Sk−i =
X
(k−1)
σi
Sk−i = σ (k−1) (X) S (k) (X)
i=0
.
(4.38)
k−1
La successione S1 , . . . , Sk−1 , Ŝk ha quindi una discrepanza
( 0, . . . , 0 , dk )
| {z }
k−1 volte
rispetto alla successione desiderata S (k) .
L’idea per correggere questa discrepanza è la seguente: scegliamo r ≤ k − 1. Per ipotesi
induttiva, σ (r−1) (X) insieme a S1 , . . . , Sλr−1 genera un LFSR Σr−1 iniziante per S (r−1) ; dato
che σ (r−1) (X) ∈ Gen Σr−1 , il LFSR Σr−1 generato da σ (r−1) (X) ha discrepanza
(0, . . . , 0 , dr )
| {z }
r−1 volte
rispetto a S (r) . Scegliamo r in modo che dr 6= 0: traslando a destra il polinomio di k − r
(cioè moltiplicando σ (r−1) (X) per X k−r ), aggiustando opportunamente il coefficiente direttivo
e sommando, si corregge la discrepanza di σ (k−1) (X) definendo così σ (k) (X).
Osserviamo che si deve scegliere un σ (r−1) (X) con r ≤ k − 1, altrimenti si cercherebbe di
correggere la discrepanza di σ (k−1) (X) con se stessa; in altre parole, se nell’aggiornamento (4.39)
si utilizzasse r = k si otterrebbe banalmente σ (k) (X) = 0.
Teorema 4.51. Con la notazione precedente, definiamo σ (−1) (X) = σ (0) (X) = 1, d0 = 1 e
λ−1 = λ0 = 0. Sia k ∈ [1, . . . , 2t] e supponiamo che per i = 1, . . . , k − 1 siano definiti i polinomi
σ (i) (X) che risolvono il problema 4.43 per S (i) . Definiamo inoltre la discrepanza dk secondo
la (4.38). Allora esistono a ∈ K ed un intero r ≤ k − 1 tali che il polinomio
σ (k) (X) = σ (k−1) (X) + aX k−r σ (r−1) (X) ,
(4.39)
risolve il problema 4.43 per S (k) .
In particolare, il polinomio σ (2t) (X) è il polinomio error locator.
Dimostrazione. Se k = 1, si ha d1 = S1 . Scegliendo a = −S1 e r = 0 allora
σ (1) (X) = 1 − S1 X = 1 + (−S1 ) X 1 σ (−1) (X) ,
che è banalmente una soluzione del problema per S (1) = (S1 ) (anche nel caso S1 = 0) e la (4.39)
è verificata.
Sia k > 1.
Se dk = 0, non c’è niente da fare: si ha che σ (k−1) (X) produce un LFSR i cui primi k elementi
sono S (k) e pertanto basta porre σ (k) (X) = σ (k−1) (X) e Σk = Σk−1 . Infatti, dato che σ (k−1) (X)
risolve il problema 4.43 per S (k−1) , segue che σ (k−1) (X) risolve il problema 4.43 anche per S (k) ,
visto che per il lemma 4.46 il grado del polinomio generatore di grado minimo non può diminuire
al crescere della parte iniziale della successione. Quindi per a = 0 e r = 0 la (4.39) è soddisfatta.
Se dk 6= 0, definiamo σ (k) (X) modificando σ (k−1) (X) secondo la formula (4.39), con a ∈ K
ed r ≤ k − 1 da determinare; osserviamo che da r < k segue che σ (k) (0) = σ (k−1) (0) = 1
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
86
e quindi σ (k) (X) genera un LFSR se si fissa un seme con almeno lk = deg σ (k) (X) elementi.
Chiaramente, se si pone
n
o
l = max deg σ (k−1) (X) , deg X k−r σ (r−1) (X)
= max {λk−1 , k − r + λr−1 }
Sappiamo che se
λk−1 6= k − r + λr−1 ⇒ lk = l.
(4.40)
Se invece i due numeri sono uguali possiamo solo concludere che lk ≤ l.
Dall’ipotesi induttiva si ha λj ≤ j per ogni j ≤ k − 1, per cui l ≤ k − 1.
Sia j un intero tale che l < j ≤ k; allora
σ (k) (X) S (k) (X)
= σ (k−1) (X) + aX k−r σ (r−1) (X) S (k) (X)
j−1
j−1
(k−1)
(k)
k−r (r−1)
= σ
(X) S (X)
+ aX
σ
(X) S (k) (X)
j−1
j−1
(k−1)
(k)
(r−1)
(k)
= σ
(X) S (X)
+a σ
(X) S (X)
(4.41)
j−1
j−1−k+r
Sia l < j < k. Poiché vale sia λk−1 ≤ l < j che k − r + λr−1 ≤ l < j, per la (4.36) e la (4.37), si
ha
σ (k) (X) S (k) (X)
= 0.
j−1
Se invece j = k, allora, usando la (4.38) anche per k = r, la (4.41) diventa
σ (k) (X) S (k) (X)
= σ (k−1) (X) S (k) (X)
+ a σ (r−1) (X) S (k) (X)
k−1
k−1
λk−1
=
X
r−1
λr−1
(k−1)
σi
Sk−i + a
i=0
X
(r−1)
σi
Sr−i
i=0
= dk + adr
Scegliamo ora r ≤ k − 1 in modo che dr sia non nullo e a = −d−1
r dk : con questa scelta,
σ (k) (X) S (k) (X)
= 0 per l < j ≤ k.
j−1
Per il lemma 4.45, il polinomio σ (k) (X), insieme al seme (S1 , . . . , Slk ), genera un LFSR Σk
che inizia per S (k) . In particolare, per il lemma 4.46, si ha lk ≥ λk−1 = deg σ (k−1) (X). Questo,
unito alla (4.40), ci permette di concludere che, in ogni caso,
lk = deg σ (k) (X) = l = max {λk−1 , k − r + λr−1 } .
Riassumendo, per definire σ (k) (X) si procede ponendo scegliendo r tale che r ≤ k − 1 e
dr 6= 0. Scelto un tale r (se esiste), si definisce
k−r (r−1)
σ (k) (X) = σ (k−1) (X) − d−1
σ
(X) .
r dk X
(k)
In questo modo, posto lk = deg σ (k) (X) e Σk = (S1 , . . . , Slk ) , σ (k) (X) , si ha Σk = S (k) e
pertanto lk ≥ λk .
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
87
Resta da capire se si può scegliere un r tale che
r ≤k−1
e dr 6= 0.
(4.42)
Se Sj = 0 per ogni j non c’è niente da fare e l’algoritmo termina subito.
Supponiamo quindi che gli Sj non siano tutti nulli e poniamo i = min {j | Sj 6= 0}. Dato che
i ≥ 1, la tesi è ovvia fino a quando k < i, essendo
σ (0) (X) = · · · = σ (i−1) (X) = 1.
Per k = i, si ha di = Si , da cui σ (i) (X) = 1 − Si X i = 1 + (−Si ) X i σ (−1) (X), che è la (4.39)
2
per r = 0 e a = −d−1
r dk .
Se k ≥ i + 1, una scelta di r in modo tale da soddisfare la (4.42) è sempre possibile: basta
scegliere r = i. Ci possono però essere più scelte possibili per r. Per contro, una volta scelto r,
(k)
la scelta di a nella (4.39) è obbligata: a = −d−1
(X)
r dk e, con queste definizioni, il polinomio σ
(k)
così definito insieme al seme (S1 , . . . , Slk ) genera sicuramente un LFSR che inizia per S .
A priori non è detto però che si tratti di un generatore di grado minimo e, pur sfruttando
la discrezionalità sulla scelta di r, nulla assicura che un polinomio definito seguendo la formula (4.39) fornisce necessariamente un generatore di grado minimo per qualche valore di r tra
quelli ammissibili. Dobbiamo vedere che per qualche r ammissibile ciò avviene.
Il lemma 4.54 assicura che per uno dei valori di r che soddisfano la (4.42) il polinomio σ (k) (X)
così definito è soluzione del problema 4.43 per S (k) e ciò conclude la dimostrazione.
Osservazione 4.52. Nel caso dei codici BCH, il teorema 4.48 ci permette di concludere che il
polinomio finale σ (2t) (X) è proprio il polinomio error locator, se è di grado minore o uguale a t.
Per minimizzare il grado di σ (k) definito tramite la (4.39), dobbiamo capire come si può
modificare il grado secondo tale formula.
Avendo posto lk−1 = deg σ (k−1) (X), l’ipotesi induttiva è λk−1 = lk−1 .
Come già visto durante la dimostrazione, se dk = 0 allora Σk = Σk−1 e σ (k) (X) = σ (k−1) (X).
Da ciò lk = lk−1 = λk−1 e l’algoritmo prosegue correttamente: poiché λk ≥ λk−1 e lk ≥ λk ,
otteniamo lk = λk che è la tesi induttiva.
Possiamo limitarci quindi a studiare il caso dk 6= 0.
Lemma 4.53. Sia
c (X) = 1 + c1 X + · · · + cl X l
un polinomio di grado l che insieme a (S1 , . . . , Sl ) produce un LFSR che inizia per S (k) e, con
la notazione precedente, supponiamo dk =
6 0. Allora
l ≥ max {λk−1 , k − λk−1 }
e quindi λk ≥ max {λk−1 , k − λk−1 }.
Dimostrazione. Per definizione di λk , si ha l ≥ λk ≥ λk−1 = lk−1 .
Se λk−1 ≥ k − λk−1 non c’è niente da dimostrare: supponiamo quindi λk−1 < k/2.
Per assurdo, supponiamo l ≤ k − 1 − λk−1 .
Per ipotesi,
(
λk−1
X (k−1)
Sj
per λk−1 + 1 ≤ j ≤ k − 1
−
σi
Sj−i =
Ŝk 6= Sk per j = k
i=1
2 In
sostanza, k = i è il “vero” passo iniziale per l’induzione.
(4.43)
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
−
l
X
per l + 1 ≤ j ≤ k.
ci Sj−i = Sj
88
(4.44)
i=1
In particolare,
Sk = −
l
X
ci Sk−i .
(4.45)
i=1
Le sindromi coinvolte in questa somma sono Sk−l , . . . , Sk−1 e abbiamo per ipotesi che λk−1 + 1 ≤
k − l: possiamo quindi usare le (4.43) e sostituire i rispettivi valori nella (4.45), ottenendo
Sk = −
l
X
ci Sk−i
i=1
=
l
X
λk−1
X
ci
i=1
X
Sk−i−j
j=1
lk−1
=
(k−1)
σj
(k−1)
σj
j=1
l
X
ci Sk−i−j
i=1
Usando la stessa tecnica ma partendo dalla (4.43) e dall’ipotesi scritta questa volta come l + 1 ≤
k − λk−1 , si ottiene
λk−1
Ŝk = −
(k−1)
X
σi
Sk−i
i=1
λk−1
=
X
(k−1)
σi
i=1
l
X
cj Sk−i−j
j=1
e dato che Sk 6= Ŝk si ha una contraddizione.
Mostriamo ora che è possibile effettuare una opportuna scelta di r in modo da avere che
lk = deg σ (k) (X) soddisfa lk = max {λk−1 , k − λk−1 }.
Lemma 4.54. Se dk 6= 0 allora si può scegliere r in modo che definendo σ (k) (X) tramite
la (4.39) si abbia
lk = max {λk−1 , k − λk−1 } .
In particolare, durante l’aggiornamento il grado del polinomio generatore di grado minimo cambia
se, e solo se, k > 2λk−1 .
Dimostrazione. Poniamo i = min {j | Sj 6= 0}. Chiaramente k ≥ i e per l = 1, . . . , i−1 è evidente
che i polinomi minimi sono σ (l) (X) = 1, tutti di lunghezza 0. Come nel teorema, poniamo per
convenzione anche σ (0) (X) = 1, di modo che sia definito λ0 = 0. Osserviamo che di = Si 6= 0.
Se k = i allora poniamo σ (i) (X) = 1 − Si X i . In questo modo si ha
lk = i = max {0, i} = max {λk−1 , k − λk−1 }
che è la tesi. Inoltre, i = λi > λi−1 = 0 e ciò vale anche se i = 1, per la scelta fatta.
Supponiamo ora k > i e definiamo
R = {j ∈ N | (j ≤ k − 1) ∧ (dj 6= 0) ∧ (λj−1 < λj )} .
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
89
Innanzi tutto, dato che i ≤ k − 1, di 6= 0 e λi−1 < λi si ha i ∈ R, cioè R 6= ∅ e, inoltre, è
evidentemente finito. Poniamo
r = max R.
Per come è definito r, abbiamo
λk−1 = λr .
(4.46)
Infatti, se r + 1 ≤ j ≤ k − 1 per non contraddire la massimalità di r si deve avere dj = 0 oppure
λj−1 = λj .
Se dj = 0, vuol dire che non c’è aggiornamento nel polinomio, pertanto la sua lunghezza non
cambia; se invece λj−1 = λj il polinomio viene aggiornato ma la sua lunghezza non cambia. In
ogni caso, ad ogni passo tra r +1 e k −1 la lunghezza del generatore di grado minimo non cambia.
Dato che r ≤ k − 1 possiamo applicare l’ipotesi induttiva:
λr = max {λr−1 , r − λr−1 } .
(4.47)
Nuovamente, la definizione di r dice che λr−1 < λr ; ciò, insieme alla (4.46) ed alla (4.47), ci dà
λk−1 = λr = max {λr−1 , r − λr−1 } = r − λr−1 .
Definendo σ (k) (X) secondo la formula di aggiornamento (4.39), abbiamo
lk = deg σ (k) (X) ≤ max {λk−1 , k − r + λr−1 } = max {λk−1 , k − λk−1 }
che, insieme al lemma 4.53 applicato a c (X) = σ (k) (X), dà la tesi.
Naturalmente, nell’aggiornamento (4.39) il grado del polinomio non cambia se, e solo se,
λk−1 ≥ k − λk−1 .
Il lemma ci dice in quali casi aumenta il grado di un polinomio generatore di grado minimo
e ci permette di ottenere ulteriori informazioni.
Corollario 4.55. Se dk = 0, allora λk = λk−1 .
Se dk 6= 0 allora
1. λk ≥ k2 .
2. λk > λk−1 ⇒ λk+1 = λk .
Dimostrazione. Se dk = 0 non c’è niente da dimostrare. Supponiamo quindi che dk 6= 0.
1. Poiché λk = max{λk−1 , k − λk−1 }, si ha
(λk ≥ λk−1 ) ∧ (λk ≥ k − λk−1 ) ⇒ λk + λk ≥ λk−1 + (k − λk−1 ) ⇒ 2λk ≥ k.
2. Se λk > λk−1 allora
k + 1 − λk < k + 1 − λk−1
che è equivalente a
k + 1 − λk ≤ k − λk−1 .
Ma se λk > λk−1 allora da λk = max{λk−1 , k − λk−1 } segue λk = k − λk−1 , per cui
k + 1 − λk ≤ λk .
D’altra parte, applicando il lemma per k + 1 si ottiene λk+1 = max {λk , k + 1 − λk } e
quindi λk+1 = λk .
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
90
Oltre a completare la dimostrazione del teorema 4.51 assicurando che l’aggiornamento (4.39) è
possibile in modo da ottenere ancora un polinomio generatore di grado minimo, la dimostrazione
del lemma 4.54 ci fornisce il valore di r da usare per l’aggiornamento: si tratta dell’ultimo
generatore di grado minimo con discrepanza non nulla precedentemente trovato tale che durante
il suo aggiornamento è cambiata la lunghezza; tale polinomio viene traslato a destra di una
posizione ad ogni ciclo finché non viene sostituito da un nuovo polinomio e il suo coefficiente
direttivo viene opportunamente modificato. Inoltre, il lemma ci dice anche se la lunghezza
del polinomio generatore cambia o meno nel corso dell’aggiornamento: questa informazione è
necessaria per sapere se durante l’aggiornamento attuale cambia il valore di r da utilizzare in
futuro oppure rimane lo stesso.
Possiamo riassumere quanto trovato in questa sezione nel
Teorema 4.56 (Algoritmo di Berlekamp-Massey). Date le sindromi S1 , . . . , S2t , inizializziamo
le variabili c (X) = 1, p (X) = X, δ = 1 e l = 0. Per k ∈ [1, . . . , 2t] calcoliamo la discrepanza
d=
l
X
ci Sk−i .
i=0
Ad ogni passo, usiamo la variabile ausiliaria γ (X) definita tramite la formula
γ (X) = c (X) − dδp (X)
(4.48)
e aggiorniamo le variabili p (X) , c (X) , δ, l secondo la seguente regola
se k > 2l e d 6= 0 allora
p (X) ← Xc (X)
c (X) ← γ (X)
δ ← d−1
l ← deg c (X)
altrimenti
p (X) ← Xp (X)
c (X) ← γ (X)
Al termine del ciclo il polinomio c (X) è il polinomio error locator.
Dimostrazione. L’unica differenza tra la (4.39) e la (4.48) è che in quest’ultima manca la traslazione di k − r posti, cioè il prodotto per X k−r : ciò è dovuto al fatto che esso viene fatto
di una posizione alla volta ad ogni aggiornamento. La regola di aggiornamento tiene conto del
lemma 4.54 che ci dice quando il grado del polinomio generatore di grado minimo aumenta: in
tal caso bisogna cambiare il polinomio di servizio σ (r) (X), ricordandone la discrepanza.
Osserviamo che nella (4.48) non c’è aggiornamento del polinomio se la discrepanza attuale d
è 0. Le variabili usate nel teorema hanno il seguente significato:
1. Si = sindromi;
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
91
2. k = indice di ricorsione attuale;
3. c (X) = polinomio generatore al passo k − 1;
4. l = grado del polinomio generatore al passo k − 1;
5. d = discrepanza attuale;
6. γ (X) = polinomio generatore attuale;
7. p (X) = traslato del polinomio generatore al momento dell’ultimo cambio di lunghezza;
8. δ = inverso della discrepanza al momento dell’ultimo cambio di lunghezza.
Osservazione 4.57. Se alla fine dell’algoritmo il polinomio c (X) ha grado maggiore di t allora
la successione delle sindromi S1 , . . . , S2t non soddisfa le equazioni (4.8): questo vuol dire che
la parola ricevuta ha distanza maggiore di t da ogni parola del codice e quindi non può essere
decodificata. In questo caso, l’algoritmo di decodifica deve restituire un codice di errore.
Riepilogo B-M
Secondo quanto visto nel teorema 4.56, i passi necessari per l’applicazione dell’algoritmo di
Berlekamp-Massey sono:
1. inizializzare le variabili:
(a) Si per i = 1, . . . , 2t;
(b) k = 1;
(c) c (X) = 1;
(d) l = 0;
(e) p (X) = X;
(f) δ = 1;
2. calcolare la discrepanza d =
Pl
i=0 ci Sk−i ;
3. se d = 0, aggiornare p (X) ← Xp (X) e andare al punto 5;
4. se d 6= 0 definire γ (X) = c (X) − dδp (X) e inoltre
(a) se 2l ≥ k aggiornare:
i. p (X) ← Xp (X);
ii. c (X) ← γ (X);
(b) se 2l < k aggiornare:
i.
ii.
iii.
iv.
p (X) ← Xc (X);
c (X) ← γ (X);
δ ← d−1 ;
l ← deg c (X);
5. incrementare l’indice di iterazione: k ← k + 1;
se k > 2t terminare l’algoritmo restituendo c (X), altrimenti tornare al punto 2.
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
92
Gli aggiornamenti descrivono le seguenti possibilità:
3. non si aggiorna il polinomio generatore di grado minimo;
4.a. si aggiorna il polinomio generatore di grado minimo ma il suo grado non cambia;
4.b. si aggiorna il polinomio generatore di grado minimo e il suo grado cambia.
Esempi
Come evidenziato nell’osservazione 4.42, l’algoritmo di Berlekamp-Massey può essere usato
per determinare la funzione generatrice di una successione definita per ricorrenza dati alcuni suoi
termini: vediamo alcuni esempi di applicazione dell’algoritmo a successioni classiche.
La successione di Fibonacci Sia S = (S1 , S2 , S3 , S4 ) = (0, 1, 1, 2) la parte iniziale della
successione di Fibonacci e applichiamo l’algoritmo a questa sequenza. Si ha
k
Sk
d
c (X)
1
1
0
0
1
2
1
1
1 − X2
2
3
1
1
1−X −X
4
2
0
1 − X − X2
l
p (X)
δ
0
X
1
0
X
2
X
2
1
1
2
X
2
1
2
X3
1
Una soluzione del problema 4.43 per S è data quindi da c (X) = 1 − X − X 2 . Indichiamo con
F il LFSR generato da c (X) con seme (0, 1): F = h(0, 1) , c (X)i.
b(X)
Per il corollario 4.41, abbiamo F (X) = c(X)
, cioè c (X) F (X) = b (X). D’altra parte,
sappiamo che deg b (X) < 2, per cui
c (X) F (X) ≡ (1 − X) X ≡ X
(mod X 2 ),
che vuol dire b (X) = X, da cui si ricava
F (X) =
X
.
1 − X − X2
Sia ora fn la successione di Fibonacci:


0
fn = 1


fn−2 + fn−1
(4.49)
se n = 0
se n = 1
se n ≥ 2
e sia f = (f0 , f1 , . . .) = (0, 1, 1, 2, 3, 5, 8, 11, . . .). Poiché l’equazione caratteristica di f è X 2 +
X − 1, si ha X 2 + X − 1 ∈ Ann f . Ma f (2) = S (2) e deg cP
(X) = 2, pertanto f = F e la (4.49) è
∞
la ben nota formula per la funzione generatrice F (X) = i=0 Fi X i .
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
93
Sia S = (S1 , S2 , S3 , S4 ) = (1, 3, 7, 15). Svolgendo i calcoli come prima,
Crescita delle foglie
k
1
Sk
1
d
1
c (X)
l
p (X)
1
0
X
1−X
1
X
δ
1
1
2
2
3
2
1 − 3X
1
X
3
7
−2
1 − 3X + 2X 2
2
X − 3X 2
− 12
4
15
0
1 − 3X + 2X 2
2
X 2 − 3X 3
− 21
1
Una soluzione del problema 4.43 per S è data quindi da c (X) = 1 − 3X + 2X 2 . Indichiamo
con F il LFSR generato da c (X) con seme (1, 3):
F = h(1, 3) , c (X)i = (0, 1, 1, 2, 3, 5, 8, . . .)
che diventa F (X) = X + X 2 + 2X 3 + · · · .
Per il corollario 4.41, abbiamo F (X) =
b(X)
c(X) ,
con deg b (X) < 2. D’altra parte,
c (X) F (X) ≡ (1 − 3X) (1 + 3X) ≡ 1
(mod X 2 ),
per cui b (X) = 1, da cui si ricava
F (X) =
1
.
1 − 3X + 2X 2
(4.50)
Sia ora fn la successione


1
fn = 3


3fn−1 − 2fn−2
se n = 0
se n = 1
se n ≥ 2
Questa successione rappresenta un modello per la crescita dei rami di una pianta secondo la
seguente regola: supponiamo che, in una certa varietà di piante, ogni anno i nuovi rami spuntano
dai rami che sono cresciuti nel corso dell’anno precedente e, inoltre, che spuntino esattamente
due nuovi rami da ogni ramo che era spuntato l’anno precedente.
P∞
Come prima, f = F e la (4.50) è la formula per la funzione generatrice F (X) = i=0 Fi X i .
I quadrati Nei due esempi precedenti, le successioni S da cui si partiva erano la parte iniziale di due successioni definite per ricorrenza e già note a priori: il fatto che il loro polinomio
caratteristico sia di grado due, ci assicurava che già al terzo passo dell’induzione avremmo trovato il polinomio generatore di grado minimo, perché tale polinomio coincide con il polinomio
caratteristico che definisce la formula induttiva e il seme ha lunghezza uguale al grado di tale
polinomio.
In generale, se si parte da una successione (infinita) S definita in modo non ricorsivo, come
si può procedere per determinare se essa è in realtà una successione ricorsiva lineare, cioè un
LFSR? Se applichiamo l’algoritmo di Berlekamp-Massey, al passo k otteniamo un polinomio
(k)
σ (k) (X) di grado λk che genera, insieme a S (λk ) un LFSR Σk tale che Σk = S (k) . La speranza
sarebbe quella di ottenere Σk = S per qualche k. Naturalmente non è detto che esista un tale
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
94
k, perché S potrebbe non essere un LFSR. Se invece lo è, un tale k deve esistere e quindi, da
un certo punto in poi, le discrepanze del teorema devono essere nulle: questo suggerisce che un
buon candidato per fermarsi è k tale che dk = 0. A questo punto, si può controllare se il LFSR
generato è S oppure no: se troviamo S l’algoritmo termina, altrimenti vuol dire che proseguendo
si deve incontrare almeno un’altra discrepanza dj non nulla per qualche j > k e quindi bisogna
continuare l’esecuzione dell’algoritmo fino a trovare h tale che dh = 0 e h > j e si ripete il
controllo.
Come esempio, consideriamo la successione di tutti i quadrati degli interi: fn = n2 . La
successione non è definita mediante una regola induttiva, pertanto applichiamo l’algoritmo di
Berlekamp-Massey come indicato a S = (0, 1, 4, 9, 16, 25, 36, . . .).
La prima discrepanza nulla la troviamo al primo passo: d1 = 0 e σ (1) (X) = 1. Il LFSR
generato però è quello costante (0, 0, 0, . . .) e quindi non è ciò che cerchiamo. Del resto, la
discrepanza successiva è non nulla, questo vuol dire che è senz’altro prematuro fermarsi.
Continuando, otteniamo d7 = 0: la tabella completa dello svolgimento dell’algoritmo si
presenta come segue
k
Sk
d
c (X)
l
p (X)
δ
1
0
X
1
1
0
0
1
0
X2
1
2
1
1
1 − X2
2
X
1
3
4
4
1 − 4X − X 2
2
X2
1
4
9
−8
1 − 4X + 7X 2
3
X3
1
5
16
8
1 − 4X + 7X 2 − 8X 3
3
X − 4X 2 + 7X 3
1
8
6
25
−8
1 − 3X + 3X 2 − X 3
3
X 2 − 4X 3 + 7X 4
1
8
7
36
0
1 − 3X + 3X 2 − X 3
3
X 3 − 4X 4 + 7X 5
1
8
8
49
0
1 − 3X + 3X 2 − X 3
3
X 4 − 4X 5 + 7X 6
1
8
9
64
0
1 − 3X + 3X 2 − X 3
3
X 5 − 4X 6 + 7X 7
1
8
Il fatto che anche le discrepanze successive siano nulle è incoraggiante: si può effettuare
la congettura che S sia un LFSR e che −c (X) = X 3 − 3X 2 + 3X − 1 sia il suo polinomio
caratteristico. Naturalmente, ciò deve essere verificato per altra via. Nel caso specifico, abbiamo
2
2
2
fn+3 − 3fn+2 + 3fn+1 − fn = (n + 3) − 3 (n + 2) + 3 (n + 1) − n2
2
2
2
= (n + 3) − n2 − 3 (n + 2) − (n + 1)
= (2n + 3) 3 − 3 ((2n + 3) 1) = 0
che conferma la congettura. In definitiva,
c (X) S (X) ≡ 1 − 3X + 3X 2
e quindi
S (X) =
∞
X
i=0
X + 4X 2 ≡ X + X 2
i2 X =
X (1 + X)
(1 − X)
3
(mod X 3 )
(4.51)
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
95
è la funzione generatrice di S, come è ben noto.
Si osservi come in tutti gli esempi svolti la crescita del grado dei polinomi generatori soddisfi
le condizioni imposte dal corollario 4.55.
Osservazione 4.58. La (4.51) è un caso particolare di una formula più generale dovuta ad Eulero:
se con S (n, X) indichiamo la funzione generatrice delle potenze n-esime, cioè
S (n, X) =
∞
X
in X i
i=0
allora si ha
Pn
j=0
S (n, X) =
A (n, j) X j+1
n+1
(1 − X)
=
XAn (X)
n+1
(1 − X)
dove A (n, j) è il numero euleriano: esso è definito come il numero delle permutazioni dei numeri
da 1 a n in cui esattamente j numeri sono maggiori del precedente (permutazioni con j “salite”).
Più precisamente, se si rappresenta una permutazioneσ ∈ Sn secondo la notazione di Cauchy
1
2
···
n−1
n
σ=
,
σ (1) σ (2) · · · σ (n − 1) σ (n)
allora
A (n, j) = # {σ ∈ Sn tali che # {i|σ (i) > σ (i − 1)} = j} .
Pn
Il polinomio An (X) = j=0 A (n, j) X j è detto polinomio euleriano.
4.4
Un esempio svolto
Svolgiamo nel dettaglio un esempio di decodifica di un codice BCH seguendo i vari algoritmi
visti.
In questa sezione C è un [15, 9, 7]-codice di Reed-Solomon su F16 , α è una radice primitiva
15-esima dell’unità che, in questo caso, è anche un elemento primitivo di F16 . Supponiamo che
il polinomio minimo di α sia mα (X) = X 4 + X + 1. Per la rappresentazione degli elementi
di F16 in funzione di α facciamo riferimento alla tabella in B, alla quale rimandiamo anche per
effettuare le somme ed i prodotti. La caratteristica è 2, però il campo non è binario, quindi è
necessario determinare anche i valori degli errori.
L’insieme di definizione, per avere distanza designata 7, è dato da
Tα = {1, 2, 3, 4, 5, 6}
e pertanto il polinomio generatore è
g (X) =
6
Y
X + αi
i=1
6
= α + α9 X + α6 X 2 + α4 X 3 + α10 X 5 + X 6
Supponiamo di aver ricevuto la parola
w = w0 w1 w2 . . . w13 w14
= α7 , 0, α10 , 1, α2 , α5 , α4 , α4 , 0, 0, 0, α7 , 0, 0, 0
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
96
che corrisponde al polinomio
w (X) = α7 + α10 X 2 + X 3 + α2 X 4 + α5 X 5 + α4 X 6 + α4 X 7 + α7 X 11 .
Per prima cosa, dobbiamo calcolare le sindromi Si = w αi per i = 1, . . . , 6: questo è un
passaggio necessario per ogni algoritmo.
Usando la tabella per fare i calcoli, abbiamo
S1 = α7 + α12 + α3 + α6 + α10 + α10 + α11 + α18
= 1 + α + α3 + 1 + α + α2 + α3 + α3 + α2 + α3 +
+ 1 + α + α2 + 1 + α + α2 + α + α2 + α3 + α3
= α + α2
= α5
Con calcoli analoghi, otteniamo
S2 = α7
S3 = α10
S4 = α5
S5 = α7
S6 = α3
Il polinomio sindrome è dunque
S (X) = α5 + α7 X + α10 X 2 + α5 X 3 + α7 X 4 + α3 X 5 .
PGZ
Numero degli errori
Si ha
S[1] = α
5
S[2]
5
α
= 7
α
α7
α10
α5

= α7
α10

S[3]
α7
α10
α5

α10
α5 
α7
Calcolando i determinanti,
det S[1] = α5
det S[2] = α3
det S[3] = α10 ,
pertanto il numero m degli errori è 3.
Locazione degli errori
Il polinomio error locator è dato
soddisfano il sistema
 5
α
 α7
α10
da σ (X) = 1 + σ1 X + σ2 X 2 + σ3 X 3 e i suoi coefficienti
    5
α7 α10
σ3
α
α10 α5  σ2  = α7  .
α5 α7
α3
σ1
Risolvendolo, si trova che
   4
σ3
α
σ2  = α6 
σ1
α5
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
97
e quindi
σ (X) = 1 + α5 X + α6 X 2 + α4 X 3 .
Le sue radici si trovano a tentativi, andando a sostituire i valori 1, α, α2 , . . . , α14 . Si ottiene
σ (X) = α4 X + α4 X + α9 X + α13
le radici e i loro inversi sono
   13 
ζ1
α
ζ2  =  α9 
ζ3
α4
   2
γ1
α
γ2  =  α6 
γ3
α11
pertanto gli errori si trovano nelle posizioni relative agli esponenti 2, 6 e 11, cioè le coordinate
errate sono w2 , w6 e w11 :
e (X) = 1 X 2 + 2 X 6 + 3 X 11 .
Determinazione del valore degli errori
Il sistema (4.4) è
 2
α
α4
α6
α6
α12
α3
    5
α11
1
α
α7  2  = α7  .
α3
α3
3
Risolvendolo, otteniamo
   
1
1
2  = α3 
α7
3
cioè
e (X) = X 2 + α3 X 6 + α7 X 11
che ci porta alla decodifica
v (X) = w (X) + e (X)
= α7 + α10 + 1 X 2 + X 3 + α2 X 4 + α5 X 5
+ α4 + α3 X 6 + α4 X 7 + α7 + α7 X 11
= α7 + α5 X 2 + X 3 + α2 X 4 + α5 X 5 + α7 X 6 + α4 X 7
e quindi la parola che era stata spedita è
v = α7 , 0, α5 , 1, α2 , α5 , α7 , α4 , 0, 0, 0, 0, 0, 0, 0 .
Determinazione del valore degli errori - 2
Effettuiamo nuovamente il calcolo usando questa volta il metodo di Forney.
Dobbiamo calcolare il polinomio error evaluator. Da
S (X) σ (X) = α5 + α7 X + α10 X 2 + α5 X 3 + α7 X 4 + α3 X 5 1 + α5 X + α6 X 2 + α4 X 3
= α5 + α7 X + α10 X 2 + α5 X 3 + α7 X 4 + α3 X 5 +
+ α10 X + α12 X 2 + X 3 + α10 X 4 + α12 X 5 + α8 X 6 +
+ α11 X 2 + α13 X 3 + αX 4 + α11 X 5 + α13 X 6 + α9 X 7 +
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
98
+ α9 X 3 + α11 X 4 + α14 X 5 + α9 X 6 + α11 X 7 + α7 X 8
= α5 + α6 X + α5 X 2 + αX 6 + α2 X 7 + α7 X 8
≡ α5 + α6 X + α5 X 2
(mod X 6 )
e quindi
ω (X) = α5 + α6 X + α5 X 2 .
Inoltre, σ 0 (X) = α5 + α4 X 2 e, applicando il teorema 4.19, abbiamo
1 =
ω(ζ1 )
σ 0 (ζ1 )
=
α5 +α19 +α31
α5 +α30
=
α10
α10
=1
2 =
ω(ζ2 )
σ 0 (ζ2 )
=
α5 +α15 +α23
α5 +α22
=
α
α13
= α3
3 =
ω(ζ3 )
σ 0 (ζ3 )
=
α5 +α10 +α13
α5 +α12
=
α6
α14
= α7
e troviamo nuovamente
e (X) = X 2 + α3 X 6 + α7 X 11 .
Sugiyama
Dobbiamo applicare l’algoritmo euclideo ai polinomi X 6 e S (X) fermandoci appena troviamo
un resto di grado minore di 3. Usando la notazione del teorema A.3, costruiamo la tabella (usando
la notazione vettoriale per i polinomi)
i
qi
ri
0
(0, 0, 0, 0, 0, 0, 1)
5
1
12
2
α, α
3
α5 , α3
4
α11 , α7
7
10
5
7
α ,α ,α ,α ,α ,α
α6 , 1, α13 , α10 , 1
α3 , α10 , α10 , α8
α8 , α9 , α8
3
xi
yi
(1)
(0)
(0)
(1)
α, α12
(1)
α5 , α3
α4 , α5 , α10
α13 , α10 , 1
α3 , α8 , α9 , α7
Dopo aver normalizzato in modo da rendere uguale a 1 il termine noto di y4 (X), abbiamo
−1
σ (X) = y4 (0)
y4 (X) = 1 + α5 X + α6 X 2 + α4 X 3
m = deg σ (X) = 3
−1
ω (X) = y4 (0)
r4 (X) = α5 + α6 X + α5 X 2
Trovando le radici di σ (X) otteniamo nuovamente
   13 
   2
ζ1
α
γ1
α
ζ2  =  α9 
γ2  =  α6 
ζ3
α4
α11
γ3
e
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
1 =
ω(ζ1 )
σ 0 (ζ1 )
=
α5 +α19 +α31
α5 +α30
=
α10
α10
=1
2 =
ω(ζ2 )
σ 0 (ζ2 )
=
α5 +α15 +α23
α5 +α22
=
α
α13
= α3
3 =
ω(ζ3 )
σ 0 (ζ3 )
=
α5 +α10 +α13
α5 +α12
=
α6
α14
= α7
e (X) = X 2 + α3 X 6 + α7 X 11 .
Berlekamp-Massey
Ricordiamo i passi necessari:
1. inizializzare le variabili:
(a) Si per i = 1, . . . , 2t;
(b) k = 1;
(c) c (X) = 1;
(d) l = 0;
(e) p (X) = X;
(f) δ = 1;
2. calcolare la discrepanza d =
Pl
i=0 ci Sk−i ;
3. se d = 0, aggiornare p (X) ← Xp (X) e andare al punto 5;
4. se d 6= 0 definire γ (X) = c (X) − dδp (X) e inoltre
(a) se 2l ≥ k aggiornare:
i. p (X) ← Xp (X);
ii. c (X) ← γ (X);
(b) se 2l < k aggiornare:
i.
ii.
iii.
iv.
p (X) ← Xc (X);
c (X) ← γ (X);
δ ← d−1 ;
l ← deg c (X);
5. incrementare l’indice di iterazione: k ← k + 1;
se k > 2t terminare l’algoritmo restituendo c (X), altrimenti tornare al punto 2.
La tabella che sviluppa l’algoritmo è
99
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
k
Sk
1
α
5
2
d
c (X)
l
δ
0
X
1
1+α X
1
X
α10
α6
1 + α2 X
1
X2
α10
α10
α13
1 + α2 X + α8 X 2
2
X + α2 X 2
α2
4
α5
α3
1 + αX + α11 X 2
2
X 2 + α2 X 3
α2
5
α7
α7
1 + αX + α2 X 2 + α11 X 3
3
X + αX 2 + α11 X 3
α8
6
α3
α9
1 + α5 X + α6 X 2 + α4 X 3
3
X 2 + αX 3 + α11 X 4
α8
1
4.5
p (X)
100
5
α7
3
α
5
Altri esempi
Descriviamo nel dettaglio alcuni codici BCH.
BCH [7,4]
Descrizione: Individua e corregge un errore.
Alfabeto: F2 = {0, 1}.
Lunghezza: 7. Gli elementi di F72 vengono anche rappresentati tramite polinomi di grado al più
6 mediante la funzione
F72 → F2 [X]
(a0 , a1 , a2 , a3 , a4 , a5 , a6 ) 7→ a0 + a1 X + a2 X 2 + a3 X 3 + a4 X 4 + a5 X 5 + a6 X 6
Funzione di codifica: Il polinomio generatore è g (X) = X 3 + X + 1 ∈ F2 [X] e sia α una sua
radice. Si ha che α è un elemento primitivo di F8 e ogni elemento non nullo di F8 si scrive
in modo unico come a2 α2 + a1 α + a0 : cfr. B.
Sia vI = (a3 , a4 , a5 , a6 ) ∈ F42 l’informazione che si vuole codificare. Costruiamo il polinomio
vI (X) = a3 X 3 +a4 X 4 +a5 X 5 +a6 X 6 e determiniamo il resto della sua divisione per g (X):
vI (X) = q (X) g (X) + vR (X) ,
con vR (X) = a0 + a1 X + a2 X 2 . La funzione di codifica è allora
F42 → F72
(a3 , a4 , a5 , a6 ) 7→ (a0 , a1 , a2 , a3 , a4 , a5 , a6 )
Tasso di informazione: 4/7.
Parole del codice: Le parole di C sono tutte le combinazioni lineari dei vettori
z1
z2
z3
z4
= 1101000
= 0110100
= 0011010
= 0001101
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
101
cioè
0000000
0001101
1100101
1010001
1101000
1011100
0111001
1111111
0110100
1110010
0010111
0100011
0011010
0101110
1000110
0100011
Distanza minima: 3.
Controllo: Per costruzione,
v ∈ C ⇔ g (X) |v (X) ⇔ v (α) = 0.
Se la parola ricevuta è r = v + e, dove e è l’errore (ed e (X) è il relativo polinomio), si
calcola r (α) = v (α) + e (α) = e (α) .
Correzione:
• r (α) = 0: Non si sono verificati errori.
• r (α) = αi : Si è verificato un errore nella posizione di esponente i. Per correggerlo,
sommare 1 a tale coordinata.
Decodifica: Per troncamento:
F72 → F42
(a0 , a1 , a2 , a3 , a4 , a5 , a6 ) 7→ (a3 , a4 , a5 , a6 )
BCH [15,7]
Descrizione: Individua e corregge 2 errori.
Alfabeto: F2 = {0, 1}.
Lunghezza: 15. Gli elementi di F15
2 vengono anche rappresentati tramite polinomi di grado al
più 14 mediante la funzione
F15
2 → F2 [X]
(a0 , a1 , . . . , a13 , a14 ) 7→
14
X
ai X i
i=0
Funzione di codifica: Consideriamo il polinomio m1 (X) = X 4 + X + 1 ∈ F2 [X] e sia α una
sua radice. Si ha che α è un elemento primitivo di F16 e ogni elemento non nullo di F16 si
scrive in modo unico come a3 α3 + a2 α2 + a1 α + a0 : cfr. B. Il polinomio minimo di α3 è
m3 (X) = X 4 + X 3 + X 2 + X + 1. Il polinomio generatore del codice è
g (X) = m1 (X) m3 (X) = X 8 + X 7 + X 6 + X 4 + 1.
Esso ha grado 8 e g αi = 0 per i = 1, 2, 3, 4.
Sia vI = (a8 , . . . , a14 ) ∈ F72 l’informazione che si vuole codificare. Costruiamo il polinomio
vI (X) = a8 X 8 + · · · + a14 X 14 e determiniamo il resto della sua divisione per g (X):
vI (X) = q (X) g (X) + vR (X) ,
con vR (X) = a0 + · · · + a7 X 7 . La funzione di codifica è allora
F72 → F15
2
(a8 , . . . , a14 ) 7→ (a0 , a1 , . . . , a13 , a14 )
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
102
Tasso di informazione: 7/15.
Parole del codice: Le parole di C sono tutte le combinazioni lineari dei vettori
z1
z2
z3
z4
z5
z6
z7
= 100010111000000
= 010001011100000
= 001000101110000
= 000100010111000
= 000010001011100
= 000001000101110
= 000000100010111
Distanza minima: 5.
Controllo: Per costruzione,
v ∈ C ⇔ g (X) |v (X) ⇔ v αl = 0 per l = 1, 2, 3, 4.
Se la parola ricevuta è r = v + e, dove e è l’errore (ed e (X) è il relativo polinomio), si
calcolano
Sl = r αl = v αl + e αl = e αl
per l = 1, 2, 3, 4.
Correzione: Calcoliamo la matrice
S[2] =
S1
S2
S2
.
S3
• Se non c’è stato alcun errore,
S[2] =
0
0
0
.
0
• Se c’è stato un errore nella posizione i,
i
α
α2i
S[2] = 2i
α
α3i
i
α
α2i αi
= 2i
α
α3i
0
0 1 αi
0 0 0
• Se ci sono stati due errori nelle posizioni i, j,
i
α + αj α2i + α2j
S[2] = 2i
α + α2j α3i + α3j
i
1
1
α
0
1 αi
= i
α αj
0 αj 1 αj
Si ha quindi che il numero di errori è dato dal rango di S[2] .
Supponiamo che ci siano stati due errori: dobbiamo determinare i e j. Si ha e (X) =
X i + X j , pertanto
Sl = e αl = αli + αlj .
Per ciò, calcoliamo un polinomio che abbia esattamente αi ed αj come radici.
polinomio è
σ ∗ (X) = X + αi X + αj = X 2 + σ1 X + σ2
Tale
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
e i suoi coefficienti devono soddisfare il sistema
2i
α + σ1 α i + σ2
α2j + σ1 αj + σ2
= 0
= 0
103
(4.52)
Moltiplicando la prima equazione per αi e la seconda per αj , otteniamo
3i
α + σ1 α2i + σ2 αi = 0
α3j + σ1 α2j + σ2 αj = 0
e, sommando le equazioni di quest’ultimo sistema, otteniamo
S3 + σ1 S2 + σ2 S1 = 0.
Analogamente, se moltiplichiamo la prima equazione del sistema (4.52) per α2i e la seconda
per α2j e poi sommiamo le due equazioni otteniamo
S4 + σ1 S3 + σ2 S2 = 0.
In definitiva, σ1 e σ2 devono essere soluzioni del sistema
S1 S2 σ2
S
= 3 .
S2 S3 σ1
S4
Risolvendolo, si ottiene
σ1
σ2
= S1
= (S3 + S1 S2 ) S1−1
e quindi trovando le radici del polinomio X 2 + σ1 X + σ2 si determinano le posizioni in cui
si sono verificati gli errori.
Dato che l’alfabeto ha solo due caratteri, ciò è sufficiente per correggere gli errori.
Decodifica: Per troncamento:
7
F15
2 → F2
(a0 , a1 , . . . , a13 , a14 ) 7→ (a8 , a9 , . . . , a14 )
BCH [15,5]
Descrizione: Individua e corregge 3 errori.
Alfabeto: F2 = {0, 1}.
Lunghezza: 15. Gli elementi di F15
2 vengono anche rappresentati tramite polinomi di grado al
più 14 mediante la funzione
F15
2 → F2 [X]
(a0 , a1 , . . . , a13 , a14 ) 7→
14
X
ai X i
i=0
Funzione di codifica: Il polinomio generatore è
g (X) = m1 (X) m3 (X) m5 (X) = X 10 + X 8 + X 5 + X 4 + X 2 + X + 1,
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
104
dove m5 (X) = X 2 + X + 1 è il polinomio minimo di α5 e pertanto g αi = 0 per i =
1, 2, 3, 4, 5, 6.
Sia vI = (a10 , . . . , a14 ) ∈ F52 l’informazione che si vuole codificare, vI (X) = a10 X 10 + · · · +
a14 X 14 e
vI (X) = q (X) g (X) + vR (X) ,
con vR (X) = a0 + · · · + a9 X 9 . Come prima, la funzione di codifica è
F52 → F15
2
(a10 , . . . , a14 ) 7→ (a0 , a1 , . . . , a13 , a14 )
Tasso di informazione: 5/15.
Parole del codice: Le parole di C sono tutte le combinazioni lineari dei vettori
z1
z2
z3
z4
z5
= 111011001010000
= 011101100101000
= 001110110010100
= 000111011001010
= 000011101100101
Distanza minima: 7.
Controllo: Per costruzione,
v ∈ C ⇔ g (X) |v (X) ⇔ v αi = 0 per i = 1, 2, 3, 4, 5, 6.
Se la parola ricevuta è r = v + e, dove e è l’errore (ed e (X) è il relativo polinomio), si
calcolano
Sl = r αl = v αl + e αl = e αl
per l = 1, 2, 3, 4, 6.
Correzione: Calcoliamo la matrice
S[3]

S1
= S2
S3
S2
S3
S4

S3
S4  .
S5
0
0
0

0
0 .
0
• Se non c’è stato alcun errore,
S[3]

0
= 0
0
• Se c’è stato un errore nella posizione i,
 i

α
α2i α3i
S[3] = α2i α3i α4i 
α3i α4i α5i

 i
1 0 0
α
=  α i 0 0  0
α2i 0 0
0

0 0 1
0 0 0
0 0
0
αi
0
0

α2i
0 
0
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
• Se ci sono stati due errori nelle posizioni i, j,
 i

α + αj α2i + α2j α3i + α3j
S[3] = α2i + α2j α3i + α3j α4i + α4j 
α3i + α3j α4i + α4j α5i + α5j



1
1 0 αi 0 0
1 αi
i
j
j
α
0  0 α 0 1 αj
= α
2i
2j
α
α
0
0
0 0 0 0
105

α2i
α2j 
0
• Se ci sono stati tre errori nelle posizioni i, j, k,
 i

α + αj + αk
α2i + α2j + α2k α3i + α3j + α3k
S[3] = α2i + α2j + α2k α3i + α3j + α3k α4i + α4j + α4k 
α3i + α3j + α3k α4i + α4j + α4k α5i + α5j + α5k
 i



1
1
1
α
0
0
1 αi α2i
=  αi αj αk   0 αj 0  1 αj α2j 
1 αk α2k
0
0 αk
α2i α2j α2k
In ogni caso il numero di errori è dato dal rango di S[3] :
rk S[3] = numero degli errori.
Supponiamo che ci siano stati 3 errori (se gli errori sono meno, si procede come negli esempi
precedenti). Si ha e (X) = X i + X j + X k , pertanto
Sl = e αl = αli + αlj + αlk .
Dobbiamo determinare i, j, k. Il polinomio reciproco del polinomio error locator ha esattamente αi , αj ed αk come radici:
σ ∗ (X) = X + αi X + αj X + αk = X 3 + σ1 X 2 + σ2 X + σ3 .
I suoi coefficienti devono soddisfare il sistema
 3i
 α + σ1 α2i + σ2 αi + σ3
α3j + σ1 α2j + σ2 αj + σ3
 3k
α + σ1 α2k + σ2 αk + σ3
= 0
= 0
= 0
Moltiplicando la prima equazione per αi , la seconda per αj e
 4i
 α + σ1 α3i + σ2 α2i + σ3 αi =
α4j + σ1 α3j + σ2 α2j + σ3 αj =
 4k
α + σ1 α3k + σ2 α2k + σ3 αk =
(4.53)
la terza per αk , otteniamo
0
0
0
e, sommando le equazioni di quest’ultimo sistema, otteniamo
S4 + σ1 S3 + σ2 S2 + σ3 S1 = 0.
Analogamente, se moltiplichiamo la prima equazione del sistema (4.53) per α2i , la seconda
per α2j e la terza per α2k e poi sommiamo le tre equazioni otteniamo
S5 + σ1 S4 + σ2 S3 + σ3 S2 = 0.
CAPITOLO 4. CORREZIONE DEGLI ERRORI NEI CODICI LINEARI
106
Infine, moltiplicando rispettivamente per α2i , α2j e α2k e sommando otteniamo
S6 + σ1 S5 + σ2 S4 + σ3 S3 = 0.
In definitiva, σ1 , σ2 e σ3 devono essere soluzioni del sistema

   
S1 S2 S3
σ3
S3
S2 S3 S4  σ2  = S4  .
S3 S4 S5
σ1
S5
Risolvendolo otteniamo i coefficienti del polinomio le cui radici (determinate “a forza bruta”) individuano le posizioni in cui si sono verificati gli errori, che possono essere subito
corretti visto che il codice è binario.
Decodifica: Per troncamento:
7
F15
2 → F2
(a0 , a1 , . . . , a13 , a14 ) 7→ (a10 , a11 , . . . , a14 )
Appendice A
L’algoritmo euclideo
In questa appendice raccogliamo alcune proprietà dell’algoritmo euclideo esteso (AEE) molto
utili nelle applicazioni. Ricordiamo il teorema di Euclide che dà origine all’algoritmo.
Teorema A.1 (Euclide). Se a, b sono due numeri naturali con a > b allora
MCD (a, b) = MCD (a − b, b) .
Più in generale,
Teorema A.2. Siano a, b, q, r elementi di un anello a fattorizzazione unica A tali che a = qb+r.
Allora
MCD (a, b) = MCD (b, r) .
Dimostrazione. Chiamiamo con X l’insieme dei divisori comuni di a e b, cioè
X = {d : d|a ∧ d|b}
e con Y i divisori comuni di b ed r:
Y = {d : d|b ∧ d|r} .
Dimostriamo che X = Y, da cui segue il teorema.
“⊆”: Sia d ∈ X un divisore comune di a e b: possiamo quindi scrivere a = da0 e b = db0 .
Scegliendo q ed r tali che a = qb + r, si ha
r = a − bq = da0 − db0 q = d(a0 − b0 q)
e quindi d | r, cioè d ∈ Y.
“⊇”: Sia d ∈ Y : b = db0 e r = dr0 . Allora
a = bq + r = db0 q + dr0 = d (b0 q + r0 )
e quindi d | a, cioè d ∈ X.
Questo teorema permette di ridurre il problema del calcolo del MCD tra a e b al problema
del calcolo del MCD tra b ed r.
107
APPENDICE A. L’ALGORITMO EUCLIDEO
A.1
108
AEE in generale
Nel caso in cui l’anello A sia euclideo, questo teorema fornisce un algoritmo per il calcolo del
MCD. Escludiamo dal teorema i casi banali in cui uno degli elementi è nullo.
Teorema A.3 (Algoritmo euclideo). Sia A un anello euclideo e a, b ∈ A due elementi non nulli.
Definiamo
(
(
(
r0 = a
x0 = 1
y0 = 0
,
,
.
(A.1)
r1 = b
x1 = 0
y1 = 1
e, per induzione, definiamo per i ≥ 0, qi+2 , ri+2 ∈ A in modo tale che
ri = qi+2 ri+1 + ri+2
con ri+2 = 0 oppure ∂ (r) < ∂ (b) ,
dove ∂ è il grado euclideo di A. Inoltre, sempre per induzione, definiamo
(
xi+2 = xi − qi+2 xi+1
yi+2 = yi − qi+2 yi+1
(A.2)
(A.3)
Allora la successione dei resti ri delle divisioni euclidee
a = q2 b + r2
b = q3 r2 + r3
r2 = q4 r3 + r4
..
.
(A.4)
rn−1 = qn+1 rn + rn+1
rn = qn+2 rn+1
arriva a 0 (= rn+2 ) in un numero finito di passi e qn+2 6= 1 se a 6= b.
Inoltre, per i = 0, . . . , n + 1, si ha che
1. MCD (a, b) = MCD (ri , ri+1 ) = rn+1 ;
2. ri = xi a + yi b; in particolare, per i = n + 1 si ha l’identità di Bézout:
MCD (a, b) = xn+1 a + yn+1 b;
3. xi+1 ri − xi ri+1 = (−1)
i+1
(A.5)
b;
i
4. yi+1 ri − yi ri+1 = (−1) a;
i
5. yi+1 xi − yi xi+1 = (−1) ;
6. MCD (xi , yi ) = 1 (anche per i = n + 2).
Dimostrazione. Essendo b 6= 0, la divisione euclidea permette di scegliere q ed r in modo che
a = qb + r
e
r = 0 oppure ∂ (r) < ∂ (b) .
Partendo da r0 = a e r1 = b, costruiamo per induzione la successione dei resti (ri )i∈N secondo
la regola ri = qi+2 ri+1 + ri+2 . Si noti che se ∂ (b) > ∂ (a) allora nel primo passo dell’algoritmo
APPENDICE A. L’ALGORITMO EUCLIDEO
109
euclideo si ha q = 0, r = a: in altre parole, il primo passo ha l’effetto di “scambiare” a e b e
poi la successione dei resti procede come quella dei resti calcolata applicando lo stesso algoritmo
partendo dalla coppia (b, a). Pertanto non è restrittivo supporre sempre ∂ (b) ≤ ∂ (a).
Per definizione di divisione euclidea, si ha che per i > 0 la successione (∂ri )i∈N è una successione di numeri naturali strettamente decrescente per i > 0 e quindi deve collassare a 0 in un numero
finito di passi. Più precisamente, deve esistere un intero n tale che rn+1 6= 0 e rn+2 = 0 (e quindi
la successione (∂ri )i∈N è in realtà una successione finita (∂ri )i∈N = (r0 , r1 , . . . , rn+1 , rn+2 = 0)).
Dato che ri − qi+2 ri+1 = ri+2 , a posteriori anche gli ri sono definiti induttivamente mediante
la stessa regola (A.3) che definisce xi e yi .
Osserviamo che le tre successioni ri , xi e yi sono definite per i = 0, . . . , n + 2, mentre la
successione dei quozienti qi è definita per ; inoltre, da ∂ (rn+1 ) < ∂ (rn ) e rn = qn+2 rn+1 segue
che qn+2 6= 1, a meno che n = 0 e q2 = 1, cioè a = b.
1. Segue applicando induttivamente il teorema A.2.
2. L’equazione (A.5) è banalmente verificata per i = 0, 1. Sia i > 1 e supponiamo che
l’equazione sia verificata per ogni j < i; allora
xi a + yi b = (xi−2 − qi xi−1 ) a + (yi−2 − qi yi−1 ) b
= (xi−2 a + yi−2 b) − qi (xi−1 a + yi−1 b)
= ri−2 − qi ri−1
= ri
dove la penultima equazione segue dall’ipotesi induttiva e l’ultima dalla definizione di ri
in (A.4).
Osserviamo che la relazione vale anche per i = n + 2, nel qual caso diventa
0 = rn+2 = xn+2 a + yn+2 b.
3. Per i = 0 essa è banalmente verificata.
Sia i > 0 e supponiamo che l’equazione sia vera per i − 1; si ha:
xi+1 ri − xi ri+1 = (xi−1 − qi+1 xi ) ri − xi (ri−1 − qi+1 ri )
= xi−1 ri − xi ri−1 − qi+1 (xi ri − xi ri )
= − (xi ri−1 − xi−1 ri )
i
= − (−1) b
= (−1)
i+1
b.
4. Simile alla 3.
5. Idem.
6. Segue dalla 5.
Osservazione A.4. Le proprietà 3, 4 e 5 possono anche essere ricavate nel seguente modo.
Consideriamo la matrice
ri
xi
yi
Ri =
ri+1 xi+1 yi+1
APPENDICE A. L’ALGORITMO EUCLIDEO
110
definita per i = 0, . . . , n + 1. Dalla regola induttiva che definisce le successioni xi , yi ed ri segue
che la matrice Ri+1 si ottiene dalla matrice Ri sottraendo qi+2 volte la seconda riga alla prima
e poi scambiando le righe. In termini matriciali, se per i = 0, . . . , n definiamo la matrice
0
1
Qi+2 =
1 −qi+2
allora Ri+1 = Qi+2 Ri e, per induzione, per 0 < i ≤ n + 1 si ha
Ri = Qi+1 · · · Q2 R0 .
(A.6)
Dato che per ogni i si ha det Qi+2 = −1 e considerato che un minore 2 × 2 di Ri+1 si ottiene
moltiplicando per Qi+2 il corrispondente minore 2 × 2 di Ri , ne segue che un minore 2 × 2 di
Ri+1 ha determinante uguale all’opposto del determinante del relativo minore della matrice Ri .
Considerato che i valori iniziali sono
r x0 y0
a 1 0
R0 = 0
=
r1 x1 y1
b 0 1
per induzione, o dalla formula (A.6), seguono le proprietà 3, 4 e 5.
Esempio A.5. Effettuiamo il calcolo MCD (240, 140) secondo la procedura indicata nel teorema:
usiamo le stesse notazioni e mettiamo le successioni in una tabella.
i
qi
ri
xi
yi
0
–
240
1
0
1
–
140
0
1
2
1
100
1
−1
3
1
40
−1
2
4
2
20
3
−5
5
2
0
−7
12
Esempio A.6. Ricordiamo che l’identità di Bézout può essere calcolata in due modi.
Il primo modo nasce dalla successione di divisioni successive (A.4): partendo dall’ultima
equazione si ricavano a ritroso gli altri ri fino ad arrivare ad esprimere rn+1 in funzione dei soli
r0 (= a) ed r1 (= b) .
Il secondo modo è fornito, come già visto, dall’equazione (A.5) del teorema A.3, in cui il
resto parziale ri viene calcolato, direttamente in funzione di a e b, parallelamente al calcolo delle
divisioni successive.
Mostriamo con un esempio in Z la differenza tra le due procedure di calcolo.
Eseguiamo l’algoritmo euclideo secondo lo schema delle equazioni A.4 per i numeri 123456 e
56789. Per meglio evidenziare i resti ed il loro ruolo, scriviamo i numeri di partenza in corsivo
ed i resti successivi in grassetto.
APPENDICE A. L’ALGORITMO EUCLIDEO
111
La lista delle operazioni necessarie è
123456 = 2 · 56789 + 9878
56789 = 5 · 9878 + 7399
9878 = 1 · 7399 + 2479
7399 = 2 · 2479 + 2441
2479 = 1 · 2441 + 38
2441 = 64 · 38 + 9
38 = 4 · 9 + 2
9=4·2+1
2=2·1
Se ora si vuole “risalire” la successione di divisioni in modo da esprimere 1 come combinazione
lineare di 123456 e 56789, si ha
1=9−4·2
= 9 − 4 · (38 − 4 · 9)
= −4 · 38 + 17 · 9
= −4 · 38 + 17 · (2441 − 64 · 38)
= 17 · 2441 − 1092 · 38
= 17 · 2441 − 1092 · (2479 − 1 · 2441)
= −1092 · 2479 + 1109 · 2441
= −1092 · 2479 + 1109 · (7399 − 2 · 2479)
= 1109 · 7399 − 3310 · 2479
= 1109 · 7399 − 3310 · (9878 − 1 · 7399)
= −3310 · 9878 + 4419 · 7399
= −3310 · 9978 + 4419 · (56789 − 5 · 9878)
= 4419 · 56789 − 25405 · 9878
= 4419 · 56789 − 25405 · (123456 − 2 · 56789 )
= −25405 · 123456 + 55229 · 56789
e quindi l’identità di Bézout è
1 = −25405 · 123456 + 55229 · 56789
Se invece si segue lo schema indicato nel teorema A.3, si costruisce la tabella
APPENDICE A. L’ALGORITMO EUCLIDEO
112
i
qi
ri
xi
yi
0
–
123456
1
0
1
–
56789
0
1
2
2
9878
1
−2
3
5
7399
−5
11
4
1
2479
6
−13
5
2
2441
−17
37
6
1
38
23
−50
7
64
9
−1489
3237
8
4
2
5979
−12998
9
4
1
−25405
55229
10
2
0
56789
−123456
Osservazione A.7. Per calcolare l’identità di Bézout con il primo metodo è necessario memorizzare tutte le divisioni successive perché si parte dall’ultima, che esprime il MCD, e si risale
fino alla prima. Con il secondo metodo è sufficiente tenere traccia solo dell’ultimo quoziente e
degli ultimi due valori della successione stessa poiché per le successioni ri , xi e yi vale la regola
di calcolo
#i+2 = −qi+2 · #i+1 + #i
e ciò basta per la formula (A.5).
È evidente quindi come il secondo metodo risulti di gran lunga più efficiente e di più semplice
implementazione, permettendo inoltre di sapere a priori quanto spazio sia necessario allocare per
i calcoli necessari.
Osserviamo anche che non è strettamente necessario procedere parallelamente al calcolo sia
degli xi che degli yi : per esempio, se si procede calcolando sempre gli xi secondo la formula
ricorsiva allora gli yi possono essere ricavati da ri = xi a + yi b.
Nell’identità di Bézout relativa ad una coppia a, b si può sempre scegliere uno dei due coefficienti
in modo che risulti essere coprimo rispetto all’altro elemento della coppia.
Lemma A.8. Sia A un PID, l, b ∈ A; sia inoltre b = db0 . Se MCD (l, b0 ) = 1 allora esiste u tale
che MCD (l + ub0 , b) = 1.
Dimostrazione. Sia
P = {p : p primo, p | d, p - l}
e sia U un insieme di rappresentanti dei primi di P . Chiaramente U è un insieme finito per cui
ha senso definire
Y
u=
p
p∈U
(u = 1 se U = ∅).
Sia p un primo che divide b.
Se p | l allora p ∈
/ P pertanto p - u; per ipotesi, p - b0 e quindi p - ub0 da cui p - l + ub0 .
Sia ora p - l; se p - d allora p | b0 , dato che b = db0 , pertanto p - l + ub0 ; se invece p | d allora
p ∈ P e pertanto p | u da cui, nuovamente, p - l + ub0 e ciò esaurisce tutti i possibili casi.
APPENDICE A. L’ALGORITMO EUCLIDEO
113
Proposizione A.9. Sia A un PID, a, b ∈ A due elementi non nulli e (d) = MCD (a, b) =
(a) + (b) . Si ponga a = da0 e b = db0 e sia (l0 , m0 ) una coppia tale che d = l0 a + m0 b. Allora:
1. ogni coppia (l, m) tale che d = la+mb è della forma (l0 + hb0 , m0 − ha0 ) per qualche h ∈ A
e viceversa;
2. esistono λ, µ ∈ A tali che d = λa + µb e MCD (λ, b) = 1 (oppure MCD (µ, a) = 1).
Dimostrazione. 1. Se l, m ∈ A sono tali che d = la + mb allora 1 = la0 + mb0 , da cui
1 = MCD (l, b0 ) = MCD (l, m) = MCD (a0 , m) = MCD (a0 , b0 ) .
(A.7)
Sia ora (l0 , m0 ) una qualsiasi coppia che soddisfa la relazione l0 a + m0 b = d. Vediamo che
(l, m) ∈ A2 : la + mb = d = {(l0 + hb0 , m0 − ha0 ) : h ∈ A} .
Se h ∈ A, allora
(l0 + hb0 ) a + (m0 − ha0 ) b = l0 a + m0 b + hb0 a − ha0 b
= d + hb0 a0 d − ha0 b0 d
=d
e quindi (l0 + hb0 , m0 − ha0 ) ∈ A2 .
Viceversa, se la + mb = d allora
la0 + mb0 = 1 = l0 a0 + m0 b0
da cui
(l − l0 ) a0 = (m0 − m) b0 .
Dato che MCD (a0 , b0 ) = 1, segue che ∃h tale che (m0 − m) = a0 h pertanto l − l0 = hb0 e quindi
mb0 = 1 − la0
= 1 − (l0 + hb0 ) a0
= l0 a0 + m0 b0 − l0 a0 − hb0 a0
= m0 b0 − hb0 a0
che implica m = m0 − ha0 , cioè la coppia (l, m) è della forma (l0 + hb0 , m0 − ha0 ).
2. Fissiamo una soluzione l0 a + m0 b = d. Applicando il lemma A.8 a l0 , b = db0 otteniamo
λ = l0 + ub0 con MCD (λ, b) = 1. Posto µ = m0 − ua0 , per quanto osservato λa + µb = d con
l1 = l0 + ub0 , che è la tesi.
Osservazione A.10. Ovviamente il ruolo di a e b è intercambiabile, però nella proposizione A.9 non
è sempre possibile poter scegliere λ e µ in modo che valgano contemporaneamente MCD (λ, b) =
1 = MCD (µ, a) . Per esempio, si prenda A = Z, a = 6 e b = 10. In questo caso, d = 2, a0 = 3,
b0 = 5 e l’identità di Bézout è 2 = 2 · 6 + (−1) · 10. Tutte le altre coppie (l, m) che soddisfano
l’identità di Bézout sono date da l = 2 + h · 5, m = −1 − h · 3 al variare di h in Z. Ora, se h è
pari allora l è pari e quindi non è coprimo con b, mentre se h è dispari allora m è pari e non è
coprimo con a.
In alcuni casi particolari le successioni definite nell’algoritmo euclideo godono di ulteriori
proprietà. Vediamo, in dettaglio, cosa possiamo dire in modo più preciso per i casi di maggiore
interesse, cioè i numeri interi ed i polinomi.
Nel seguito, usiamo la notazione del teorema A.3.
APPENDICE A. L’ALGORITMO EUCLIDEO
A.2
114
AEE per A = Z
Teorema A.11. Sia A = Z e a ≥ b > 0.
1. Per i = n + 2, . . . , 2 vale
n+2
Y
qh ≤ ri−2 ;
h=i
in particolare,
Qn+2
h=2 qh
≤ a.
2. Per i > 1 i coefficienti xi hanno segno alternato ed inoltre
|x1 | < |x2 | ≤ |x3 | < |x4 | < |x5 | < · · · < |xn+1 | < |xn+2 | .
3. Per i > 0 i coefficienti yi hanno segno alternato ed inoltre
|y0 | < |y1 | ≤ |y2 | < |y3 | < |y4 | < · · · < |yn+1 | < |yn+2 | .
4. Per 2 ≤ i ≤ n + 2 si ha xi yi < 0.
5. Per 0 ≤ i ≤ n + 1 si ha |xi+1 | ≤ rbi . Inoltre, la disuguaglianza è stretta tranne che per
b
b
i = 1, n + 1. In particolare, |xn+1 | < MCD(a,b)
e |xn+2 | = MCD(a,b)
.
6. Per 0 ≤ i ≤ n + 1 si ha |yi+1 | ≤ rai . Inoltre, la disuguaglianza è stretta tranne che per
a
a
i = 0, n + 1. In particolare, |yn+1 | < MCD(a,b)
e |yn+2 | = MCD(a,b)
.
7. Per 0 ≤ i ≤ n si ha ri+2 <
ri
2.
Dimostrazione. 1. Per i = n + 2 non c’è niente da dimostrare.
Per induzione,
n+2
n+2
Y
Y
qh = qi
qh ≤ qi ri−1 ≤ ri−2 .
h=i
h=i+1
2. Abbiamo che
x1 = 0
x2 = x0 − q 2 x1 = 1
x3 = x1 − q3 x2 = −q3
x4 = x2 − q4 x3 = 1 + q4 q3
pertanto le prime tre disuguaglianza sono verificate.
Supponiamo ora per induzione xi−1 xi < 0 e |xi−1 | < |xi |; da xi+1 = xi−1 − qi+1 xi (e dal fatto
che i quozienti sono tutti positivi) segue che xi+1 ha segno opposto rispetto ad xi ed inoltre
|xi+1 | = |xi−1 − qi+1 xi | = |xi−1 | + qi+1 |xi | ≥ |xi−1 | + |xi | > |xi | .
3. In questo caso,
y0 = 0
y1 = 1
y2 = y0 − q2 y1 = −q2
y3 = y1 − q3 y2 = 1 + q3 q2
APPENDICE A. L’ALGORITMO EUCLIDEO
115
e le prime tre disuguaglianze sono verificate in quanto q2 6= 0 perché a ≥ b; il resto della
dimostrazione è simile al punto precedente.
4. Segue da 2. e 3., osservando che x2 = 1 e y2 = −q2 .
i+1
5. Per 0 ≤ i ≤ n + 1 si ha b = (−1)
(xi+1 ri − xi ri+1 ).
Se i < n + 1 i due addendi all’interno della parentesi hanno lo stesso segno. Da ciò,
b = |xi+1 ri − xi ri+1 | = |xi+1 ri | + |xi ri+1 | = |xi+1 | ri + |xi | ri+1
e quindi
|xi+1 | ri = b − |xi | ri+1
cioè
ri+1
b
b
− |xi |
≤ .
ri
ri
ri
6 0 per i < n + 1 e xi = 0 solo per i = 1, la disuguaglianza è stretta tranne che
=
|xi+1 | =
Dato che ri+1
nel caso i = 1.
b
. Se invece
In particolare, se n > 0 da rn > rn+1 = MCD (a, b), segue |xn+1 | < MCD(a,b)
n = 0, allora xn+1 = x1 = 0 e MCD (a, b) = b e la formula segue banalmente.
n+2
Se i = n + 1 si ha rn+2 = 0 e quindi b = (−1)
xn+2 rn+1 . Poiché rn+1 = MCD (a, b), si ha
la tesi.
6. Simile alla precedente.
7. Se i < n segue dalla definizione:
ri = qi+2 ri+1 + ri+2 ≥ ri+1 + ri+2 > 2ri+2 .
Se i = n è ovvia perché rn+2 = 0.
Osservazione A.12. La proprietà 7. rafforza notevolmente la proprietà più generale che vale in ogni anello euclideo che dice che la successione dei resti è una successione strettamente
decrescente: in Z tale successione deve decrescere con velocità esponenziale.
Alcune delle proprietà del teorema A.11 sono peculiari al caso A = Z, altre invece sono estendibili ad ogni anello euclideo, possibilmente con qualche piccola differenza nella formulazione.
AEE per A = K[X]
A.3
Nel caso di un anello di polinomi alcune delle proprietà del teorema A.11 vengono perse, altre
invece diventano più precise. Abbiamo visto che non è restrittivo supporre sempre deg a ≥ deg b.
Teorema A.13. Sia K un campo e a, b ∈ A = K [X]. Supponiamo deg a ≥ deg b e ab 6= 0.
1. Per i = n + 2, . . . , 2
deg rn+1 +
n+2
X
deg qh = deg ri−2 .
h=i
In particolare,
deg MCD (a, b) +
n+2
X
deg qh = deg a
h=2
e
deg MCD (a, b) +
n+2
X
h=3
deg qh = deg b.
APPENDICE A. L’ALGORITMO EUCLIDEO
116
2. Per 3 ≤ i ≤ n + 2 si ha
deg xi =
i
X
deg qh = deg b − deg ri−1 .
h=3
In particolare, i gradi dei coefficienti xi crescono strettamente (per i ≥ 1) e deg xn+1 <
deg b − deg MCD (a, b).
3. Per 2 ≤ i ≤ n + 2 si ha
deg yi =
i
X
deg qh = deg a − deg ri−1 .
h=2
In particolare, i gradi dei coefficienti yi sono una successione crescente per ogni i (strettamente per i ≥ 2). Inoltre, se a 6∼ b allora deg yn+1 < deg a − deg MCD (a, b).
Osservazione A.14. Ricordiamo che
j
X
deg qh = deg
h=i
j
Y
!
qh
h=i
per cui le formule del teorema esistono anche in una versione con il prodotto.
Dimostrazione. 1. In ogni divisione euclidea tra polinomi
a = qb + r
se il quoziente è non nullo si ha deg a = deg q + deg b.
In una successione di divisioni euclidee prodotte dall’algoritmo A.3 un quoziente può essere
nullo solo quando deg a < deg b, che è escluso dalle nostre ipotesi pertanto, nel nostro caso,
abbiamo qi 6= 0 e deg ri−2 = deg qi + deg ri−1 per ogni i = 2, . . . , n + 2. Per i = n + 2 questa è
la formula della tesi.
Per induzione,
deg rn+1 +
n+2
X
deg qh = deg qi + deg rn+1 +
n+2
X
deg qh
h=i+1
h=i
= deg qi + deg ri−1
= deg (ri−2 )
essendo ri−2 = qi ri−1 + ri .
I casi particolari seguono ricordando che rn+1 = MCD (a, b).
2. Si ha
x1 = 0
x2 = x0 − q 2 x1 = 1
x3 = x1 − q3 x2 = −q3
x4 = x2 − q4 x3 = 1 + q4 q3
Ricordiamo che per convenzione deg 0 = −∞ e, con l’unica eventuale eccezione di q2 , tutti i
quozienti hanno grado positivo perché deg ri > deg ri+1 per i > 0; questo implica che deg x2 <
deg x3 < deg x4 . Inoltre, deg x4 = deg q3 + deg q4 .
APPENDICE A. L’ALGORITMO EUCLIDEO
117
Pi
Sia i ≥ 4 e supponiamo per induzione deg xi > deg xi−1 e che deg xi =
h=3 deg qh =
deg b − deg ri−1 .
Da xi+1 = xi−1 − qi+1 xi e da deg qi > 0 segue che deg xi+1 > deg xi . Usando l’ipotesi
induttiva e il punto 1 abbiamo
deg xi+1 = deg (qi+1 xi )
= deg qi+1 + deg xi
= deg qi+1 +
i
X
deg qh
h=3
=
i+1
X
deg qh
h=3
=
n+2
X
n+2
X
deg qh −
h=3
deg qh
h=i+2
= deg b − deg rn+1 − (deg ri − deg rn+1 )
= deg b − deg ri
Chiaramente deg xi ≤ deg b. Per i = n + 1, si ha deg xn+1 = deg b − deg rn .
Se n > 0 si ha deg MCD (a, b) = deg rn+1 < deg rn , da cui deg xn+1 < deg b − deg MCD (a, b).
Nel caso “degenere” n = 0 (cioè b|a e quindi MCD (a, b) = b), si ha xn+1 = x1 = 0 ed è
comunque vero che
−∞ = deg x1 < deg b − deg b = 0.
3. In questo caso,
y0 = 0
y1 = 1
y2 = y0 − q2 y1 = −q2
y3 = y1 − q3 y2 = 1 + q3 q2
Osserviamo che se q2 ∈
/ K (i.e., deg a > deg b) allora i gradi di yi sono una successione strettamente crescente per ogni i. La dimostrazione adesso procede per induzione come nel punto
2.
Per i = n + 1, si ha deg yn+1 = deg a − deg rn .
Se n > 0 allora in particolare a 6∼ b e deg MCD (a, b) = deg rn+1 < deg rn e si conclude come
nel punto 2.
Nel caso “degenere” n = 0 (cioè b|a e quindi MCD (a, b) = b) questa volta dobbiamo
distinguere due casi: deg b < deg a e deg b = deg a. Ovviamente
(b|a) ∧ (deg b = deg a) ⇔ b ∼ a.
Si ha yn+1 = y1 = 1 e quindi
0 = deg y1 < deg a − deg MCD (a, b) = deg a − deg b ⇔ deg b < deg a ⇔ a 6∼ b.
APPENDICE A. L’ALGORITMO EUCLIDEO
118
Il teorema A.13 dice che i coefficienti xi , yi prodotti dalla successione delle divisioni che
compongono l’AEE hanno grado “piccolo”, in un certo senso. Il fatto che questo grado sia
piccolo garantisce che i polinomi ri , xi e yi sono sostanzialmente unici: ogni combinazione lineare
di a e b di grado più piccolo di a è (multipla di) una delle combinazioni ri = xi a + yi b date dal
punto 2 del teorema A.3.
Teorema A.15 (unicità dei coefficienti dell’AEE). Sia deg a ≥ deg b e siano r, s, t polinomi tali
che r = sa + tb con t 6= 0 e
deg t < deg a − deg r.
Inoltre sia i ∈ {1, . . . , n + 2} tale che deg ri ≤ deg r < deg ri−1 . Allora esiste α ∈ K [X] non
nullo tale che
r = αri
s = αxi
t = αyi .
In particolare, se MCD (s, t) = 1 allora r = sa + bt è uno dei resti della successione dell’AEE (a
meno di una costante).
Dimostrazione. Consideriamo l’equazione tra matrici
"
#" # " #
xi yi a
ri
=
.
s t
b
r
Se la matrice è non singolare, cioè se xi t 6= yi s, trovando a con la regola di Cramer si ottiene
"
#
ri yi
det
r t
"
#
a=
xi yi
det
s t
da cui
(xi t − yi s) a = ri t − yi r.
Poiché
deg (ri t − yi r) ≤ max {deg ri + deg t, deg yi + deg r}
≤ max {deg r + deg t, deg a − deg ri−1 + deg r}
< max {deg a, deg a − deg ri−1 + deg ri−1 }
= deg a
si ha una contraddizione.
Abbiamo quindi xi t = yi s. Sappiamo che MCD (xi , yi ) = 1 per cui yi |t e sia t = αyi per
qualche α ∈ K [X], con α 6= 0 perché t 6= 0 da cui yi s = xi αyi . Cancellando yi abbiamo s = αxi
e quindi
r = sa + tb = αxi a + αyi b = α (xi a + yi b) = αri
Indichiamo con (d0 , . . . , dn+1 ) la successione dei gradi dei resti che si ottengono nello svolgimento dell’algoritmo euclideo secondo le divisioni successive (A.4), cioè di = deg ri (e quindi
d0 = deg a e d1 = deg b). Abbiamo che
d0 ≥ d1 > d2 > · · · > dn > dn+1 ≥ 0.
APPENDICE A. L’ALGORITMO EUCLIDEO
119
A volte può essere comodo considerare anche dn+2 = −∞.
Per ogni ri vale ri = xi a+yi b e quindi di = deg (xi a + yi b), deg xi < d1 −di e deg yi < d0 −di .
Questa proprietà caratterizza la successione dei gradi:
Teorema A.16. Sia k un intero tale che 0 ≤ k ≤ d1 ≤ d0 . Allora k non compare nella
successione dei gradi se, e solo se, esistono s, t ∈ K [X] tali che
t 6= 0,
deg s < d1 − k,
deg t < d0 − k,
deg (sa + tb) < k.
Dimostrazione. (⇒) Supponiamo che k non compaia nella successione dei gradi. Esiste allora
un indice 2 ≤ i ≤ n + 2 tale che di < k < di−1 . Poniamo s = xi e t = yi . Chiaramente t 6= 0 e
deg (sa + tb) = deg (xi a + yi b) = deg ri = di < k.
Inoltre,
deg s = deg xi = d1 − di−1 < d1 − k
0 ≤ deg t = deg yi = d0 − di−1 < d0 − k
Osserviamo che se i = n + 2 allora s = b/rn+1 e t = −a/rn+1 , con k < dn+1 e rn+2 = 0.
(⇐) Siano s, t come nelle ipotesi del teorema e poniamo r = sa + tb. Dal teorema di unicità A.15 se i ∈ {1, . . . , n + 2} è tale che deg ri ≤ deg r < deg ri−1 allora esiste α ∈ K [X] non
nullo tale che
r = αri
s = αxi
t = αyi .
Usando il teorema A.13 abbiamo
d0 − di−1 = deg yi ≤ deg (αyi ) = deg t < n − k
di ≤ deg α + di = deg (αri ) = deg r < k
Messe insieme, queste equazioni implicano di < k < di−1 e quindi k non può comparire nella
successione dei gradi.
Questo teorema può essere riletto nel linguaggio dell’algebra lineare. Introduciamo per ciò
alcune notazioni. j k
Indichiamo con fg il quoziente della divisione di due polinomi e siano a, b ∈ K [X],
a = au X u + · · · + a0
b = bv X v + · · · + b0
con au bv 6= 0 e u ≥ v. Sia Pd ⊂ K [X] il sottospazio vettoriale di dimensione d formato dai
polinomi di grado minore di d e per 0 ≤ k ≤ v definiamo l’applicazione
ϕk : Pv−k × Pu−k
(s, t)
In pratica,
j
(sa+tb)
Xk
k
k
−→
7−→
P
j u+v−2kk
(sa+tb)
Xk
è il polinomio sa + tb privato dei suoi monomi di grado minore di k e
diviso per X : se identifichiamo un polinomio con la successione dei coefficienti di modo che, per
esempio, a ↔ (au , . . . , a0 ) allora
(sa + tb)
↔ (sa + tb)u+v−k−1 , (sa + tb)u+v−k−2 , . . . , (sa + tb)k+1 , (sa + tb)k .
k
X
I teoremi A.15 e A.16 possono essere riscritti come
APPENDICE A. L’ALGORITMO EUCLIDEO
120
Teorema A.17. Sia k un intero tale che 0 ≤ k ≤ d1 = v = deg b ≤ d0 = u = deg a. Allora
1. k compare nella successione dei gradi per l’AEE applicato ad (a, b) ⇐⇒ ϕk è un isomorfismo.
2. Se k = di = deg ri , c è il coefficiente direttivo di ri e xi , yi sono i polinomi calcolati
nell’AEE, allora i polinomi c−1 xi , c−1 yi sono l’unica soluzione di ϕk (s, t) = 1.
Per avere il teorema precedente espresso in funzione di matrici piuttosto che di funzioni lineari,
introduciamo la matrice di Sylvester (e alcune sue sottomatrici rilevanti) di due polinomi.
Definizione A.18. La matrice di Sylvester
(u + v) × (u + v) definita come

au au−1
···

 0
au
au−1


.
..
..
 0
.

 0
·
·
·
0

···
S0 (a, b) = 
 bv bv−1

 0
bv
bv−1


..
.
..
 0
.
0
···
0
|
di a e b è la matrice quadrata S0 (f, g) di dimensione
···
a0
···
..
.
au
b1
···
···
..
.
bv
u+v
···
au−1
b0
b1
···
bv−1

··· 0 


. 
..
. ..  
a0
 v righe

.

· · · .. 0 




· · · · · · a0  
0 ··· 0 
.




.. 
..

. . 
b0
 u righe

..
. 0 

···


· · · b1 b0
0
{z
}
colonne
Il risultante dei polinomi a e b è l’elemento R (a, b) = det (a, b).
N.B.: l’allineamento delle colonne tra la prima e la u-esima riga dipende da u; nello stesso modo,
quello tra la (v + 1)-esima e la(u + v)-riga dipende da v. L’allineamento tra le righe u ed u + 1
è invece quello descritto, cioè
0
···
0 au au−1 · · · · · · a0
.
bv bv−1 · · · b1
b0
0 ··· 0
Definiamo anche, per k = 1, . . . , v, la matrice Sk (a, b) di dimensione (u + v − 2k) × (u + v − 2k)
in questo modo: dalla matrice S0 (a, b) si cancellano le righe u − k + 1, . . . , u e le righe u + v −
k + 1, . . . , u + v, dopodiché si cancellano le ultime 2k colonne, cioè


au au−1
· · · · · · · · · · · · a2k−v+1 


..


..

 0

.
a
a
·
·
·
·
·
·
.
u
u−1

 v − k righe


..
..
..
..
 0

.
.
.
··· ···
.



 0

·
·
·
0
a
a
·
·
·
a
u
u−1
k


· · · · · · · · · · · · b2k−u+1 
.
Sk (a, b) = 
 bv bv−1





.
.

..
..

 0
bv
bv−1 · · · · · ·

 u − k righe


.
.
.
.
.
..
..
..
.
.
 0

.

···
.


0
···
0
bv bv−1 · · ·
bk
|
{z
u+v−2k
colonne
Il determinate di Sk (a, b) è detto sottorisultante di a e b.
}
APPENDICE A. L’ALGORITMO EUCLIDEO
121
Se consideriamo negli spazi vettoriali le basi standard date dalle potenze di X, allora posto
s = sv−k−1 X v−k−1 + · · · + s0 e t = tu−k−1 X u−k−1 + · · · + t0 si vede facilmente che
ϕk (s, t) = (sv−k−1 , . . . , s0 , tu−k−1 , . . . , t0 ) Sk (a, b) ,
cioè la matrice Sk (a, b) rappresenta ϕk in tali basi e quindi il teorema A.17 diventa
Teorema A.19. Sia k un intero tale che 0 ≤ k ≤ d1 = v = deg b ≤ d0 = u = deg a. Allora
1. k compare nella successione dei gradi per l’AEE applicato ad (a, b) ⇐⇒ det Sk (a, b) 6= 0.
2. Se k = di = deg ri , c è il coefficiente direttivo di ri e
xi = sd1 −di −1 X d1 −di −1 + · · · + s0 ,
yi = td0 −di −1 X d0 −di −1 + · · · + t0
sono i polinomi calcolati nell’AEE, allora c−1 (sd1 −di −1 , . . . , s0 , td0 −di −1 , . . . , t0 ) è l’unica
soluzione del sistema
(sv−k−1 , . . . , s0 , tu−k−1 , . . . , t0 ) Sk (a, b) = (0, . . . , 0, 1) .
Corollario A.20. Il grado del massimo comun divisore di a (X) e b (X) è d se, e solo se,
S0 (a, b) = . . . = Sd−1 (a, b) = 0 6= Sd (a, b) .
Il caso particolare k = 0 merita di essere evidenziato:
Corollario A.21. R (a, b) 6= 0 se, e solo se, MCD (a, b) = 1.
Concludiamo osservando che il risultante di due polinomi gode anche di altre proprietà: per
esempio, il discriminante di un polinomio è strettamente collegato al risultante tra il polinomio
stesso e la sua derivata. Tali proprietà sono più in relazione con le radici dei polinomi piuttosto
che con il massimo comune divisore, pertanto risultano di maggior interesse in teoria dei campi
più che in teoria dei codici. Per questo motivo non approfondiamo qui queste proprietà.
Appendice B
Rappresentazione degli elementi
dei campi finiti
In questa appendice ricordiamo come rappresentare gli elementi nei campi finiti. Il teorema
di struttura dei campi finiti verrà considerato noto.
Quando si vuole descrivere esplicitamente gli elementi di un campo finito Fqb , dove q = pa , è
necessario effettuare due scelte: la prima riguarda il sottocampo da cui si parte (cioè un qualsiasi
campo intermedio Fp ⊆ K ⊆ Fqb ) e la seconda riguarda il tipo di notazione da usare. Come
sottocampo di partenza generalmente, ma non sempre, scegliamo K = Fq . Per quel che riguarda
la notazione ci sono essenzialmente tre notazioni che risultano utili:
1. notazione esponenziale (o moltiplicativa);
2. notazione vettoriale (o additiva);
3. base normale.
La prima riflette il fatto che esiste un elemento β ∈ Fqb tale che, come gruppo
moltiplicativo,
F∗qb = hβi e quindi ogni elemento non nullo si scrive come β i per un unico i ∈ 0, . . . , q b − 1 . In
questo caso, il polinomio minimo di β deve essere primitivo, oltre che irriducibile di grado b.
La seconda invece esprime l’isomorfismo di spazi vettoriali Fqb ' Fq [X] / (m (X)), dove m (X)
èPun polinomio irriducibile di grado b, pertanto ogni elemento si scrive in modo unico come
b−1
i
i=0 ci β dove ci ∈ Fq e β è una radice di m (X).
La terza notazione è simile alla seconda: anch’essa esprime l’isomorfismo di spazi vettoriali
b
Fqb ' (Fq ) ma questa volta assume per ipotesi che il polinomio minimo di β, oltre che irriducibile
b−1
di grado b, sia anche normale; in altre parole, i vettori β, β q ,P
. . . , βq
devono essere linearmente
i
b−1
indipendenti e ogni elemento si scrive in modo unico come i=0 ci β q dove ci ∈ Fq .
Ognuna di queste notazioni ha vantaggi e svantaggi nella pratica, facilitando o meno il calcolo
effettivo di alcune operazioni tra gli elementi del campo.
Mostriamo, tramite un esempio, come rappresentare gli elementi di un campo finito, partendo
dal sottocampo fondamentale, secondo le prime due notazioni e come utilizzare tali rappresentazioni a seconda delle operazioni algebriche che si desidera effettuare.
122
APPENDICE B. RAPPRESENTAZIONE DEGLI ELEMENTI DEI CAMPI FINITI
B.1
123
Il campo F16
Il campo con 16 elementi è formato dall’insieme delle radici del polinomio X 16 −X = X 16 +X
nella chiusura algebrica di F2 .
Il polinomio X 16 + X si fattorizza, in F2 [X] come
X 16 + X = X(X + 1)(X 2 + X + 1)(X 4 + X 3 + 1)(X 4 + X + 1)(X 4 + X 3 + X 2 + X + 1)
Si ha pertanto che F16 = F2 (α) ∼
= F2 [X] / (p (X)) , dove p (X) è uno qualsiasi dei tre polinomi
di quarto grado e α è una sua radice.
F∗16 è un gruppo ciclico di ordine 15 pertanto è isomorfo a Z/15Z ed è quindi composto da
un elemento di ordine 1, due elementi di ordine 3, quattro elementi di ordine 5 e otto elementi
di ordine 15; questi ultimi sono i generatori di F∗16 , cioè i suoi elementi primitivi. Naturalmente
l’elemento di ordine 1 è 1, radice di X + 1, e gli elementi di ordine 3 sono le radici di X 2 + X + 1.
I restanti dodici elementi sono le radici dei tre polinomi di quarto grado; di questi tre polinomi
uno non è primitivo: si tratta di X 4 + X 3 + X 2 + X + 1 e le sue quattro radici hanno ordine
5. Gli altri due polinomi sono primitivi e una qualsiasi radice è un generatore del gruppo ciclico
F∗16 .
Nel seguito sceglieremo come polinomio di riferimento il polinomio X 4 + X + 1 e indicheremo
con α una sua radice.
La notazione esponenziale, come detto, riflette il fatto che F16 = {0} ∪ F∗16 = {0} ∪ hαi:
in questa notazione ogni elemento non nullo si esprime come una potenza di α con esponente
compreso tra 0 e 14. Questa notazione è pratica per effettuare le moltiplicazioni; infatti basta
sommare gli esponenti dei due fattori e, eventualmente, ridurre la somma modulo 15:
αi · αj = αi+j
mod 15
.
(B.1)
In virtù di questa proprietà, se u = αi l’esponente i viene chiamato logaritmo discreto di u
(relativamente ad α).
La notazione vettoriale invece riflette il fatto che
F16 = F2 (α) = F2 [α] ∼
= F2 [X] / X 4 + X + 1 .
In questa notazione ogni elemento si esprime in modo unico come combinazione lineare degli
elementi 1, α, α2 ed α3 , con coefficienti in F2 . Questa notazione è pratica per effettuare le
somme; la somma di due combinazioni lineari viene fatta componente per componente:
(u3 α3 + u2 α2 + u1 α + u0 ) + (v3 α3 + v2 α2 + v1 α + v0 ) =
= (u3 + v3 )α3 + (u2 + v2 )α2 + (u1 + v1 )α + (u0 + v0 ).
Naturalmente il prodotto di due elementi può anche essere calcolato usando la notazione additiva: per trovare il risultato bisogna effettuare il prodotto ed eliminare le potenze di α di
grado più grande di 3 usando (ripetutamente) la proprietà α4 = α + 1. Equivalentemente, si
possono trasformare i due elementi
in due polinomi di terzo grado (usando per ciò l’isomorfismo
F2 (α) ∼
= F2 [X] / X 4 + X + 1 ), ridurre il prodotto dei due polinomi modulo X 4 + X + 1 e
trasformare il resto in una combinazione lineare di 1, α, α2 ed α3 (con l’isomorfismo inverso).
Questo procedimento è evidentemente più “costoso” di quanto sia necessario per effettuare la
moltiplicazione in notazione moltiplicativa, però se due elementi sono espressi in forma additiva
non richiede la conversione in forma moltiplicativa.
Osserviamo, per contro, che non esiste nessuna regola pratica per effettuare la somma di
due elementi espressi in notazione moltiplicativa: è sempre necessario tradurre gli elementi in
APPENDICE B. RAPPRESENTAZIONE DEGLI ELEMENTI DEI CAMPI FINITI
124
notazione additiva (usando la tabella), effettuare la somma e tradurre il risultato in notazione
moltiplicativa.1
La notazione additiva può essere scritta in modo più
considerando il fatto che,
compatto
come spazio vettoriale su F2 , vale F2 [X] / X 4 + X + 1 ∼
= F42 e pertanto un elemento (u3 α3 +
u2 α2 + u1 α + u0 ) può essere identificato con le sue coordinate (u3 , u2 , u1 , u0 ). Ovviamente è
necessario concordare l’ordinamento con cui si scrive la base: in questo caso, la base è stata
ordinata come {α3 , α2 , α, 1}. Dato che per F16 ogni vettore è formato da quattro coordinate in
F2 , in questo caso particolare la notazione può essere ulteriormente compattata in una stringa
di quattro numeri binari.
Un’ulteriore compattazione puramente simbolica può essere effettuata considerando un vettore (u3 , u2 , u1 , u0 ) come le cifre di un numero compreso tra 0 e 15 2 espresso in notazione
posizionale binaria:
(u3 , u2 , u1 , u0 ) ←→ u3 23 + u2 22 + u1 2 + u0 .
Naturalmente in questa notazione la somma degli elementi di F16 rappresentati dai due numeri
non ha nessuna relazione con la somma dei due numeri in quanto tali: bisogna sempre tener ben
presente cosa rappresenta il numero stesso. È quindi più corretto considerare questi oggetti come
simboli piuttosto che numeri.
Nella tabella B.1 sono riassunte tutte le precedenti notazioni.
Osserviamo che se invece di scegliere la radice α di X 4 + X + 1 si sceglie un’altra radice
β sempre dello stesso polinomio, le notazioni della tabella rimangono formalmente invariate, a
patto di sostituire nella scrittura α con β. Di conseguenza, la tabella delle operazioni B.2 resta
invariata.
Se invece β è radice di un altro polinomio primitivo (in F16 l’unica altra possibilità è il
polinomio X 4 + X 3 + 1), allora la tabella delle notazioni cambia e di conseguenza cambia anche
la tabella delle operazioni.
Per ritrovare i coniugati dei vari elementi secondo quanto visto nell’appendice C, ricordiamo
che le classi 2-ciclotomiche modulo 15 sono:
{0} , {1, 2, 4, 8} , {3, 6, 12, 9} , {5, 10} , {7, 14, 13, 11} .
Nella tabella B.2 effettuiamo invece le operazioni in F16 usando la notazione numerica. Nella
prima riga scriviamo il logaritmo discreto di ogni elemento di F16 (si osservi che il logaritmo è un
numero naturale mentre i “numeri” che rappresentano gli elementi di F16 sono da interpretarsi
come simboli). Questa riga può essere usata per effettuare il prodotto di due numeri espressi in
notazione moltiplicativa applicando la (B.1). La commutatività delle operazioni ci permette di
registrare in una singola tabella 16 × 16 tanto la somma quanto il prodotto: ordinando i simboli
secondo l’ordinamento indotto dai numeri naturali di cui i simboli stessi hanno la forma, nella
tabella registriamo ab quando si ha a ≤ b, mentre registriamo a + b quando si ha a > b. Sulla
diagonale, cioè quando a = b, è sufficiente registrare il prodotto, dato che il calcolo della somma
è banale: a + b = a + a = 2a = 0 per ogni a poiché la caratteristica del campo è 2.
1 Si può ricorrere al logaritmo di Zech, però anche in questo caso è necessario consultare una tabella
precompilata.
2 Al posto dei numeri da 0 a 15 si possono alternativamente usare le cifre esadecimali 0, . . . , F
APPENDICE B. RAPPRESENTAZIONE DEGLI ELEMENTI DEI CAMPI FINITI
Notazione
Polinomio minimo
moltiplicativa
polinomiale
vettoriale
numerica
−
0
0000
0
0
X
1
1
0001
1
1
X +1
α
α
0010
2
2
X4 + X + 1
α2
α2
0100
4
4
X4 + X + 1
α3
α3
1000
8
8
X4 + X3 + X2 + X + 1
α4
α+1
0011
3
3
X4 + X + 1
α5
α2 + α
0110
6
6
X2 + X + 1
α6
α3 + α2
1100
12
C
X4 + X3 + X2 + X + 1
α7
α3 + α + 1
1011
11
B
X4 + X3 + 1
α8
α2 + 1
0101
5
5
X4 + X + 1
α9
α3 + α
1010
10
A
X4 + X3 + X2 + X + 1
α10
α2 + α + 1
0111
7
7
X2 + X + 1
α11
α3 + α2 + α
1110
14
E
X4 + X3 + 1
α12
α3 + α2 + α + 1
1111
15
F
X4 + X3 + X2 + X + 1
α13
α3 + α2 + 1
1101
13
D
X4 + X3 + 1
α14
α3 + 1
1001
9
9
X4 + X3 + 1
Tabella B.1: Elementi di F16
125
APPENDICE B. RAPPRESENTAZIONE DEGLI ELEMENTI DEI CAMPI FINITI
126
log
—
0
1
4
2
8
5
10
3
14
9
7
6
13
11
12
×
+
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
2
2
3
4
6
8
A
C
E
3
1
7
5
B
9
F
D
3
3
2
1
5
C
F
A
9
B
8
D
E
7
4
1
2
4
4
5
6
7
3
7
B
F
6
2
E
A
5
1
D
9
5
5
4
7
6
1
2
D
8
E
B
4
1
D
C
3
6
6
6
7
4
5
2
3
7
1
5
3
9
F
E
8
2
4
7
7
6
5
4
3
2
1
6
D
A
3
4
2
5
C
B
8
8
9
A
B
C
D
E
F
C
4
F
7
A
2
9
1
9
9
8
B
A
D
C
F
E
1
D
5
C
6
F
7
E
A
A
B
8
9
E
F
C
D
2
3
8
2
1
B
6
C
B
B
A
9
8
F
E
D
C
3
2
1
9
D
6
8
3
C
C
D
E
F
8
9
A
B
4
5
6
7
F
3
4
8
D
D
C
F
E
9
8
B
A
5
4
7
6
1
E
A
7
E
E
F
C
D
A
B
8
9
6
7
4
5
2
3
B
5
F
F
E
D
C
B
A
9
8
7
6
5
Tabella B.2: Operazioni in F16
4
3
2
1
A
Appendice C
Campi finiti e radici dell’unità
In questa appendice ricaviamo le prime proprietà algebriche del polinomio X n − 1 in Fq [X],
dove q = pa , per un primo p e un intero a.
Indichiamo con σp il morfismo di Frobenius definito da
σp : Fp → Fp .
γ 7→ γ p
a
Per brevità, poniamo σq = σpa di modo che σq (γ) = γ q = γ p . Per il teorema di struttura dei
campi finiti, Fq = γ ∈ Fp : σq (γ) = γ .
Dato che F∗q è un gruppo moltiplicativo (abeliano), ogni suo elemento ha ordine che divide
q − 1 = pa − 1; in altre parole, ogni elemento non nullo è una radice (q − 1)-esima dell’unità.
Se Fqb è un’estensione finita di Fq , quanto sopra vale anche per Fqb , i cui elementi non nulli
sono radici q b −1-esime dell’unità. Inoltre, raggruppando insieme gli elementi coniugati si ottiene
Y
Y
b
f (X) .
(C.1)
Xq − X =
(X − γ) =
γ∈Fqb
C.1
f (X)∈Fq [X]
f monico
f irriducibile
deg f |b
Coniugati ed elementi primitivi
Gli elementi di F∗q non sono solo elementi che hanno ordine che divide q − 1: il teorema
dell’elemento primitivo dice che F∗q è un gruppo ciclico e quindi i suoi generatori, cioè i γ tali
che hγi = F∗q , sono esattamente le radici primitive (q − 1)-esime dell’unità. Nel caso particolare
n = q b − 1 ogni generatore del gruppo ciclico F∗qb è una radice primitiva n-esima di 1, e viceversa.
Per tale motivo questi elementi si chiamano elementi primitivi e i loro polinomi minimi si dicono
polinomi primitivi.
Osservazione C.1. In teoria dei campi un’estensione L/K si dice semplice se L = K (θ) per
qualche θ, nel qual caso θ si dice elemento primitivo (o elemento generatore). Nel caso dei campi
finiti si ha che ogni estensione finita di un campo finito è semplice, per cui esiste sempre un
elemento generatore. Non succede però in generale che un elemento tale che L = K [θ] sia anche
tale che hθi = L∗ . Per tale motivo, nei campi finiti la definizione di elemento primitivo viene
ristretta solo a quegli elementi tali che hθi = L∗ .
127
APPENDICE C. CAMPI FINITI E RADICI DELL’UNITÀ
128
Per esempio, se consideriamo l’estensione F16 /F2 allora si ha F16 = F2 [α] = F2 [β] = F2 [γ]
dove α, β e γ sono radici dei polinomi X 4 + X + 1, X 4 + X 3 + 1 e X 4 + X 3 + X 2 + X + 1
rispettivamente, però o (α) = o (β) = 15 mentre o (γ) = 5 per cui i primi due sono elementi
primitivi mentre γ non lo è, pur generando F16 . Osserviamo che γ è una radice primitiva quinta
dell’unità.
In ogni caso, ogni elemento non nullo di un campo finito è radice dell’unità e l’ordine
moltiplicativo di due elementi coniugati è lo stesso, grazie al teorema seguente.
∗
Teorema C.2. Sia γ ∈ Fp , f (X) il suo polinomio minimo su Fq e deg f (X) = b. Sia inoltre β
un elemento primitivo di F [γ], γ = β m e poniamo n = o (γ). Allora:
1. F [γ] = Fqb ;
n
o
i
2. b = deg f (X) = min i > 0 : γ q = γ ;
b
q −1
3. n = o (γ) = MCD(m,q
b −1) ;
i
4. o γ q = o (γ) per ogni i ≥ 0;
i
5. le radici (distinte) di f sono γ q = σqi (γ) per i = 0, . . . , b − 1;
6. se γ è un elemento primitivo allora sono primitivi anche tutti i coniugati di γ e tutti i
coniugati di γ −1 ;
7. il polinomio minimo di γ −1 è f (0)
Dimostrazione.
−1
f ∗ (X), dove f ∗ (X) è il polinomio reciproco di f (X).
1. Poiché deg f (X) = b si ha b = [Fq [γ] : Fq ] e quindi Fq [γ] = Fqb .
i
2. Se i > 0 è tale che γ q = γ allora dal teorema di struttura γ ∈ Fqi . Dato che Fqb è la più
piccola estensione di Fq che contiene γ, segue Fqb ⊂ Fqi e quindi b|i; il viceversa è ovvio.
In particolare,
n
o
i
b = min i > 0 : γ q = γ .
3. Sia n l’ordine di γ. Poiché o (β) = q b − 1 e γ = β m , dal teorema di struttura dei gruppi
q b −1
ciclici segue che n = MCD(m,q
b −1) .
4. Si ha n = o (γ) |q b − 1 pertanto p - n e
i
n
n
o γq =
=
= n = o (γ) .
MCD (q i , n)
MCD (pai , n)
5. f (X) è un polinomio irriducibile in Fq [X] e Fq è perfetto in quanto è finito, pertanto
per il criterio della derivata f (X) è separabile, cioè tutte le sue radici sono distinte. Da
i
σq (f (X)) = f (X q ) (che è valida in Fq [X]) segue per induzione che tutte le potenze γ q
sono radici di f per ogni i ∈ N: basta quindi vedere che fra questi elementi ce ne sono b
i
j
distinti. Vediamo più precisamente che γ q 6= γ q per 0 ≤ i < j ≤ b − 1; supponiamo che
i
j
γ q = γ q per qualche 0 ≤ i < j ≤ b − 1, cioè
1 = γq
j
−q i
i qj−i −1
i
j−i
= γ q (q −1) = γ q
.
APPENDICE C. CAMPI FINITI E RADICI DELL’UNITÀ
129
i
D iE
h ii
Poiché o γ q = o (γ) si ha γ q = hγi e, in particolare, γ ∈ Fq γ q da cui Fq [γ] =
h ii
Fq γ q , essendo ovvia l’altra inclusione.
i qj−i −1
i
Per il teorema di struttura dei campi finiti, da γ q
= 1 segue γ q ∈ Fqj−i e quindi
h ii
Fqb = Fq [γ] = Fq γ q ⊆ Fqj−i
e quindi
q b = Fqb ≤ Fqj−i = q j−i ≤ q b−1
una contraddizione.
6. Dato che F∗qb è un gruppo ciclico (moltiplicativo), γ è primitivo se, e solo se, oF∗b (γ) = q b −1.
q
Abbiamo già visto che l’ordine di un coniugato di γ coincide con l’ordine di
γ, quindi γ è
primitivo se, e solo se, lo è ogni suo coniugato. Poiché oF∗b (γ) = oF∗b γ −1 , si ha che γ è
q
q
primitivo se, e solo se, γ −1 è primitivo e lo stesso vale anche per i coniugati di γ −1 .
7. Indichiamo (cfr. 3.3) con f ∗ (X) il polinomio reciproco di f (X), cioè f ∗ (X) = X b f X −1 ,
∗
dove b = deg f (X). Si ha che (f (X) g (X)) = f ∗ (X) g ∗ (X) e da f (0) 6= 0 abbiamo
−1
f ∗∗ (X) = f (X). Da ciò segue facilmente che f (0) f ∗ (X) è il polinomio minimo di γ −1 .
C.2
Polinomi ciclotomici
Studiamo ora il polinomio X n − 1 per un generico n.
Se p|n, scriviamo n = ps n0 con p - n0 e si ha
0
ps
,
Xn − 1 = Xn − 1
pertanto le radici n-esime di 1 sono tutte e sole le radici n0 -esime, ognuna contata con molteplicità
ps . In definitiva, possiamo limitarci a studiare il caso p - n, ipotesi che sarà sottintesa da ora in
poi.
Poniamo
Gn = ζ ∈ Fp : ζ n = 1 .
Da p - n segue che il polinomio X n − 1 è separabile, cioè le sue radici sono tutte distinte, vale a
dire |Gn | = n e
Y
Y Y
Y
Xn − 1 =
(X − ζ) =
(X − ζ) =
Φd (X)
(C.2)
ζ∈Gn
d|n ζ∈Gn
o(ζ)=d
d|n
dove con Φd (X) si indica come di consueto il polinomio ciclotomico d-esimo
Y
Φd (X) =
(X − ζ) ∈ Z [X] .
ζ∈Gn
o(ζ)=d
Ricordiamo che Φd (X) è irriducibile in Q [X] ma ciò non è sempre vero in caratteristica positiva.
APPENDICE C. CAMPI FINITI E RADICI DELL’UNITÀ
130
∗
Gn è un sottogruppo moltiplicativo di Fp e pertanto, per il teorema dell’elemento primitivo,
è un gruppo ciclico: Gn = hαi per qualche α ∈ Gn e la (C.2) diventa
Xn − 1 =
n−1
Y
X − αi .
(C.3)
i=0
D’altra parte, in Fq [X] si deve avere
X n − 1 = m1 (X) · · · · · mj (X)
(C.4)
per degli opportuni polinomi irriducibili m1 (X) , . . . , mj (X): dobbiamo quindi capire come i
fattori della (C.3) (o della (C.2)) si ricombinano per dar luogo alla fattorizzazione (C.4).
Naturalmente Fq [G] = Fq [α] è un’estensione finita di Fq , pertanto Fq [α] = Fqb per qualche
b. Dato che o (α) = n, in generale α non è un elemento primitivo per Fq [α]: lo è solo nel caso
n = q b − 1 e quindi, in generale, le radici primitive n-esime di 1 non corrispondono agli elementi
primitivi della più piccola estensione di Fq che le contiene. In altre parole, Fq [α] = Fqb ma non
è detto che hαi = F∗qb : si ha hαi = F∗qb se, e solo se, n = q b − 1. Per questo motivo, questo caso
particolare è generalmente detto primitivo.
Il primo problema è determinare b, cioè il grado della più piccola estensione di Fq che contiene
tutte le radici n-esime.
Teorema C.3. Sia p un primo, q = pa e n > 0 un intero tale che p - n. Allora il campo di
spezzamento di X n − 1 su Fq è Fqb dove b = oZ∗n (q). Inoltre Φn (X) si spezza come il prodotto
di v = nb distinti fattori irriducibili, ognuno di grado b.
∗
Dimostrazione. Sia α una radice primitiva n-esima di 1. Considerando α come elemento di Fp ,
il teorema di struttura dei campi finiti implica che
i
α ∈ Fqi ⇔ αq = α ⇔ αq
i
−1
= 1.
Dato che l’ordine moltiplicativo di α è n (essendo una radice primitiva n-esima dell’unità) si ha
che
i
αq −1 = 1 ⇔ n|q i − 1
cioè Fqi contiene α se, e solo se, n divide q i −1. Essendo n fissato questo ci permette di concludere
che la più piccola estensione di Fq che contiene α è Fqb dove
b = min i > 0 : n | q i − 1
= min i > 0 : q i ≡ 1 (mod n)
= oZ∗n (q)
e quindi Fq [α]= Fqb . Dato che α èuna radice primitiva n-esima di 1, le altre radici n-esime di 1
sono date da αi : i = 0, . . . , n − 1 e sono anch’esse elementi di Fq [α] = Fqb che quindi risulta
essere il campodi spezzamento
di X n − 1 su Fq .
Poiché b = Fqb : Fq = [Fq [α] : Fq ] e Fq [α] ∼
= Fq [X] / (ma (X)), dove mα (X) ∈ Fq [X] è il
polinomio minimo di α, ne segue che mα (X) ha grado b, cioè α ha esattamente b coniugati che,
per il teorema C.2, sono anch’essi radici primitive n-esime di 1. Poiché α è una generica radice
primitiva n-esima dell’unita, da
Y
Φn (X) =
(X − α)
α∈Gn
o(α)=n
si ha la tesi raggruppando i generatori che hanno lo stesso polinomio minimo.
APPENDICE C. CAMPI FINITI E RADICI DELL’UNITÀ
131
Per brevità, indichiamo con ordn (q) l’ordine di q in Z∗n .
Il teorema C.2 ci dice qual è il grado del polinomio minimo di una radice n-esima dell’unità
calcolando i suoi distinti coniugati e quindi il loro numero. In realtà il numero di distinti coniugati
di una radice n-esima dell’unità è una proprietà puramente aritmetica del numero che esprime
tale radice come potenza di una radice primitiva n-esima dell’unità.
Teorema C.4. Sia p un primo, q = pa e n > 0 un intero tale che p - n. Poniamo b = ordn (q) e
sia β un elemento primitivo di Fqb . Sia inoltre α = β m una radice primitiva n-esima di 1 (cioè
α ha ordine moltiplicativo uguale a n).
Se 0 ≤ s ≤ n − 1, allora il polinomio minimo di γ = αs ha grado
u = min i : sq i ≡ s (mod n) .
Dimostrazione. Poniamo q b − 1 = dn. Per il teorema di struttura dei gruppi ciclici, α è una
b
q b −1
Da n = q d−1 otteniamo d =
radice primitiva n-esima di 1 se, e solo se, n = MCD(m,q
b −1) .
MCD m, q b − 1 e possiamo scrivere m = m0 d con MCD m0 , q b − 1 = 1.
n
o
i
Indichiamo con mγ (X) il polinomio minimo di γ su Fq e con u = min i > 0 : γ q = γ .
2
Dal teorema C.2, u = deg (mγ (X)) e i coniugati di γ sono γ, γ q , γ q , . . . , γ q
u−1
coniugati di γ sono β ms , β msq , . . . , β msq . Poiché
i
γq = γ ⇔ γq
⇔β
i
−1
u−1
. Sostituendo, i
=1
msq i −ms
=1
i
⇔ msq ≡ ms (mod q b − 1)
⇔ m0 dsq i ≡ m0 ds (mod q b − 1)
⇔ dsq i ≡ ds (mod q b − 1)
⇔ dsq i ≡ ds (mod dn)
⇔ sq i ≡ s (mod n)
si ha
n
o
i
u = min i > 0 : γ q = γ = min i : sq i ≡ s (mod n) .
Osservazione C.5. Il caso particolare n = q b − 1 è detto primitivo perché se α è una radice
primitiva n-esima dell’unità allora è anche un elemento primitivo dell’estensione Fq [α] = Fqb ,
cioè nel teorema si può prendere m = 1 e α = β.
Grazie al teorema, se α è una radice primitiva n-esima di 1 e αs è un’altra radice n-esima
dell’unità, i coniugati di αs dipendono quindi solo da s e dal suo comportamento in Zn rispetto
alla moltiplicazione per q. È quindi spontanea la seguente definizione.
Definizione C.6. Sia s un intero, 0 ≤ s ≤ n; la classe laterale q-ciclotomica di s modulo
n è l’insieme degli interi (modulo n)
Cs = s, sq, sq 2 , . . . , sq u−1
(mod n)
(C.5)
dove u = min i tali che sq i ≡ s (mod n) .
Ovviamente si ha sempre C0 = {0} e |C1 | = ordn (q). Inoltre
APPENDICE C. CAMPI FINITI E RADICI DELL’UNITÀ
132
Corollario C.7. Con la notazione precedente, se Cs è la classe laterale q-ciclotomica di s modulo
n, allora |Cs | divide b.
2
u−1
Dimostrazione. Usiamo la notazione del teorema. Gli elementi αs , αsq , αsq , . . . , αsq
sono i
coniugati di αs , quindi |Cs | = u = [Fq [αs ] : Fq ]. Da Fq [αs ] ⊆ Fq [β] segue, per il teorema della
torre, che u| [Fq [β] : Fq ] = b.
n
e, pur essendo legato ad s, non ha
Osservazione C.8. L’ordine di αs è evidentemente MCD(s,n)
un legame diretto con la classe laterale q-ciclotomica di s modulo q b − 1 e la sua cardinalità.
Le classi ciclotomiche formano una partizione:
Proposizione C.9. Le classi laterali q-ciclotomiche modulo n formano una partizione dell’insieme {0, 1, 2, . . . , n − 1} cioè
Cr ∩ Cs 6= ∅ ⇒ Cr = Cs .
Cr ∩ Cs 6= ∅ ⇒ Cr = Cs
(C.6)
Dimostrazione. Poiché n|q abbiamo q b = 1 (mod n) quindi se t ∈ Cr ∩ Cs allora tq i ∈ Cr e
tq i ∈ Cs per ogni i. Dalla definizione di classi ciclotomiche, esistono 0 ≤ i, j ≤ b − 1 tali che
t = rq i = sq j pertanto si ha r = tq b−i ∈ Cs e Cr ⊆ Cs . In modo analogo si ottiene l’inclusione
opposta e quindi l’uguaglianza.
Siamo ora pronti per fattorizzare il polinomio X n − 1.
Teorema C.10. Sia n un intero, p - n, b = ordn (q), β un elemento primitivo di Fqb , α una
radice primitiva n-esima di 1, s un intero in [0, n − 1] e Cs la classe q-ciclotomica di s modulo
n. Allora il polinomio minimo di αs su Fq è
Y
mαs (X) =
X − αi .
i∈Cs
Inoltre, se {s1 , . . . , sw } è un insieme di rappresentanti per le classi q-ciclotomiche modulo n,
allora
w
Y
Xn − 1 =
mαsj (X) .
j=1
Dimostrazione. Grazie al teorema C.4 i coniugati di αs sono
n
o u−1
αs , αsq , . . . , αsq
= αi : i ∈ Cs
da cui segue la prima formula.
Partendo da
Xn − 1 =
Y
ζ∈Gn
(X − ζ) =
n−1
Y
(X − αs )
i=0
e usando la prima formula si ottiene la fattorizzazione di X n − 1.
APPENDICE C. CAMPI FINITI E RADICI DELL’UNITÀ
133
Esempio C.11. Consideriamo p = q = 2, b = 4, n = 15 = 24 − 1. Si tratta di un caso primitivo.
Le classi 2-ciclotomiche modulo 15 = 24 − 1 sono
C0 = {0} , C1 = {1, 2, 4, 8} , C3 = {3, 6, 12, 9} , C5 = {5, 10} , C7 = {7, 14, 13, 11} .
Sia β un elemento primitivo di F16 radice, per esempio, del polinomio X 4 +X+1, S = {0, 1, 3, 5, 7}
un insieme di rappresentanti delle classi q-ciclotomiche modulo 15. Allora (ricordando che la
caratteristica è 2)
mβ 0 = X + 1
mβ 1 = X 4 + X + 1
mβ 3 = X 4 + X 3 + X 2 + X + 1
mβ 5 = X 2 + X + 1
mβ 7 = X 4 + X 3 + 1
e
X 15 + 1 = (X + 1) X 4 + X + 1
X4 + X3 + X2 + X + 1
X2 + X + 1
X4 + X3 + 1 .
Osserviamo che se scriviamo
Xn − 1 =
Y
Φd (X)
d|n
allora nel nostro caso
X 15 + 1 = Φ1 (X) Φ3 (X) Φ5 (X) Φ15 (X)
= (X + 1) X 2 + X + 1 X 4 + X 3 + X 2 + X + 1 X 8 + X 7 + X 5 + X 4 + X 3 + 1
e
Φ15 (X) = X 8 + X 7 + X 5 + X 4 + X 3 + 1 = X 4 + X + 1
X4 + X3 + 1 .
Infine, se usassimo come elemento primitivo un’altra radice di X 4 +X +1, nelle formule precedenti
non cambierebbe nulla mentre se usassimo una radice γ del polinomio X 4 +X 3 +1 allora si avrebbe
mγ 0 = X + 1
mγ 1 = X 4 + X 3 + 1
mγ 3 = X 4 + X 3 + X 2 + X + 1
mγ 5 = X 2 + X + 1
mγ 7 = X 4 + X + 1
Esempio C.12. Consideriamo ora p = 2, q = 2a , n = 5. Questo caso non è primitivo, neanche
per a = 1.
Sia q = 2a , n = 5 e α una radice 5 primitiva di 1. Il polinomio
X 5 − 1 = X 5 + 1 = (X + 1) X 4 + X 3 + X 2 + X + 1 ∈ F2a [X]
si spezza in F2a F24 = F2m dove m = mcm (a, 4). Poiché

1 se



4 se
4
ord5 2i =
=
MCD (i, 4) 
2 se



4 se
abbiamo 3 possibilità:
i≡0
i≡1
i≡2
i≡3
(mod
(mod
(mod
(mod
4)
4)
4)
4)
APPENDICE C. CAMPI FINITI E RADICI DELL’UNITÀ
134
1. MCD (a, 4) = 1: in questo caso il campo di spezzamento è F2a [α] = F24a . Si ha
b = ord5 (2a ) = 4 = [F2a [α] : F2a ]
e X 4 + X 3 + X 2 + X + 1 si spezza come il prodotto di
cioè è irriducibile su F2a [X].
Le classi laterali q-ciclotomiche modulo 5 sono
4
4
= 1 fattori irriducibili su F2a [X],
{0} , {1, 2, 3, 4} .
2. MCD (a, 4) = 2: questa volta si ha che F2a contiene F22 = F2 [γ], dove γ è radice del
polinomio X 2 + X + 1 e il campo di spezzamento di X 5 + 1 è F2a [α] = F22a . Il polinomio
X 4 + X 3 + X 2 + X + 1 non è irriducibile su F2a [X] ma si spezza nel prodotto di due fattori
irriducibili di grado 2. Infatti, ricordando che 2|a ma a2 è dispari, si ha
a
4
a
q = 2a = 22 2 = 4 2 ≡ (−1) 2 = −1 ≡ 4
(mod 5).
Da ciò
b = ord5 (2a ) = 2 = [F2a [α] : F2a ]
2
e inoltre αq = α4 = α−1 dato che α5 = 1 e anche α2q = (αq ) = α4
ciò
2
= α8 = α3 . Usando
Φ5 (X) = X 4 + X 3 + X 2 + X + 1
Y
=
(X + ζ)
ζ∈G5
o(ζ)=5
= (X + α) X + α2
= (X + α) X + α4
X + α3
X + α4
X + α2 X + α3
= (X + α) (X + αq ) X + α2 X + α2q
= mα (X) mα2 (X)
= X 2 + α + α4 X + 1 X 2 + α2 + α3 + 1
2
= X 2 + α + α4 X + 1 X 2 + α + α4 + 1
dove mα (X) è il polinomio minimo di α su F2a e deve avere grado 2. D’altra parte,
2
ricordando che α è radice di Φ5 (X) si ha α4 + α3 + α2 + α + 1 = 0, cioè α + α4 =
α2 + α3 = α + α4 + 1 per cui il polinomio minimo di α + α4 su F2a divide X 2 + X + 1. Ma
γ ∈ F2a e in F2a [X] il polinomio X 2 +X +1 si spezza come X 2 +X +1 = (X + γ) X + γ 2
quindi (possiamo supporre che) α + α4 = γ e otteniamo infine
Φ5 (X) = X 2 + γX + 1 X 2 + γ 2 + 1
che è la fattorizzazione in F2a [X].
Le classi laterali q-ciclotomiche modulo 5 sono
{0} , {1, 4} , {2, 3} .
3. MCD (a, 4) = 4: questa volta α ∈ F2a , b = ord5 (2a ) = 1 e otteniamo subito lo spezzamento
Φ5 (X) == (X + α) X + α2 X + α3 X + α4 .
APPENDICE C. CAMPI FINITI E RADICI DELL’UNITÀ
Le classi laterali q-ciclotomiche modulo 5 sono
{0} , {1} , {2} , {3} , {4} .
135
Bibliografia
[1] Blahut, R. E.: Algebraic codes for data transmission. Cambridge, 2003
[2] Huffman, W. C., Pless, V.: Fundamentals of error-correcting codes. Cambridge, 2003
[3] Lidl, R, Niederreiter, H.: Finite Fields. Cambridge, 1997
[4] MacWilliams, F. J., Sloane, N. J. A.: The theory of error-correcting codes. North-Holland,
1977
[5] Moon, T. K.: Error correction coding. Wiley, 2005
[6] Niesi, G.: Teoria dei codici http://www.dima.unige.it/~niesi/TdC/TdC.html
[7] Pless, V.: Introduction to the theory of error-correcting codes. J. Wiley & Sons, 1998
[8] Pretzel, O.: Error-correcting codes and finite fields. Oxford, 1992
[9] van Lint, J. H.: Introduction to coding theory. Springer-Verlag, 1982
136