Universidade Estadual do Oeste do Paraná Centro de Engenharias e Ciências Exatas Especialização em Educação Matemática Códigos Lineares Alex de Oliveira Ornold Foz do Iguaçu-PR 2008 Códigos Lineares Alex de Oliveira Ornold Monografia apresentada como requisito parcial à obtenção do grau de especialista em Educação Matemática, Programa de Especialização em Educação Matemática, Centro de Engenharias e Ciências Exatas, Universidade Estadual do Oeste do Paraná. FOZ DO IGUAÇU-PR 2008 Agradecimentos Agradeço a Deus, pela vida que este me proporciona. Aos meus pais por tudo que eles sempre fizeram para que eu pudesse ter chegado a este momento. i Resumo No presente trabalho vamos apresentar uma introdução à teoria dos Códigos, que é uma parte da matemática utilizada na área de transmissão de informações. Falaremos especificamente de uma classe de códigos, os códigos lineares e seus conceitos. Estaremos trabalhando com o espaço vetorial Fnq das n-uplas sobre o corpo finito Fq . Faremos uma abordagem inicial sobre os corpos finitos Fq . Os códigos binários de Hamming também serão abordados. Palavras-chave: Códigos lineares, corpos finitos, código binário de Hamming. ii Sumário Resumo ii Introdução v 1 Álgebra Linear sobre Corpos Finitos 1 1.1 Números Inteiros . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1.1 Divisores . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1.2 Máximo Divisor Comum (MDC) . . . . . . . . . . . . . 3 1.1.3 Números Primos . . . . . . . . . . . . . . . . . . . . . 4 1.1.4 Congruência . . . . . . . . . . . . . . . . . . . . . . . . 5 1.2 Grupos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.2.1 Subgrupos . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.3 Anéis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.4 Espaços Vetoriais . . . . . . . . . . . . . . . . . . . . . . . . . 15 2 Corpo Finito 20 3 Códigos Lineares 24 3.1 Preliminares . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.2 Matriz geradora e de paridade . . . . . . . . . . . . . . . . . . 31 iii SUMÁRIO iv 3.3 Código de Hamming . . . . . . . . . . . . . . . . . . . . . . . 37 3.4 Código de Reed-Solomon . . . . . . . . . . . . . . . . . . . . . 39 3.5 Considerações Finais . . . . . . . . . . . . . . . . . . . . . . . 40 Referências Bibliográficas 41 Introdução O estudo inicial sobre a teoria dos códigos se dá no final dos anos 40 do século XX, especificamente em 1948 com o matemático e engenheiro estadunidense Claude Elwood Shannon (1916 - 2001), com seu trabalho “A Mathematical Theory of Communication” (Uma Teoria Matemática da Comunicação), a partir deste trabalho a matemática ganha uma nova área a Teoria da Informação. Claude Elwood Shannon procurou em seu trabalho em detectar e corrigir erros durante o armazenamento e transmissão das mensagens. Entre os mais variados tipos de códigos, a classe mais utilizada e mais fáceis de descrever, codificar e decotificar são os códigos lineares, que são definidos como um subespaço vetorial de Fn. A partir da década de 50, novos códigos começaram a surgir, como exemplo temos o código binário de Hamming, que foi inserido à Teoria dos Códigos pelo matemático Richard Wesley Hamming (1915 - 1998). Atualmente notamos que a Teoria dos Códigos esta cada vez mais presente no dia-a-dia da sociedade. Vemos que ela está se popularizando ao meio a uma velocidade incrível, através de códigos que estão sendo usados na transmissão de informações, imagens, no audio-visual, etc. Como exemplo tivemos em 1972 a transmissão de imagens de Marte com v SUMÁRIO vi 64 tonalidades de cinza pela espaçonave Mariner, através do código ReedMuller, e em 1979 a espaçonave Voyager enviou imagens com 4096 tonalidades de cores de Júpiter e Saturno utilizando o código de Golay [3]. O presente trabalho será descrito em 03 capítulos, sendo que no primeiro capítulo abordaremos conceitos de algebra, definições e conceitos que nos servirão como alicerce para a leitura do trabalho. No segundo capítulo, faremos uma introdução a teoria dos corpos finitos, mostrando suas definições, para que fique mais claro o estudo posterior de códigos lineares que será visto no terceiro capítulo. Capítulo 1 Álgebra Linear sobre Corpos Finitos A álgebra linear é fundamental para o estudo da teoria dos códigos, pois a mesma nos dá ferramentas essencias para entedermos os processos de codificação e decodificação, responsáveis pela confiabilidade da transmissão de informações de grande parte dos novos sistemas de comunicação. Portanto, vamos relembrar conceitos elementares sobre o conjunto dos números inteiros, anéis, corpos e espaços vetoriais. 1.1 Números Inteiros Seja N = {1, 2, 3, . . .} o conjunto dos números naturais e Z = {. . . , −3, −2, −1, 0, 1, 2, 3, . . .} 1 CAPÍTULO 1. ÁLGEBRA LINEAR SOBRE CORPOS FINITOS 2 o conjunto dos números inteiros. Considerando em Z1 as operações usuais de adição “+” e multiplicação “·”, destacamos em relação a estas operações, as seguintes propriedades elementares (bem conhecidas). Para todo a, b, c ∈ Z, valem: (A1) Associativa: a + (b + c) = (a + b) + c; (A2) Comutativa: a + b = b + a; (A3) Elemento neutro: a + 0 = a; (A4) Simétrica: a + (−a) = 0; Também valem: (M 1) Associativa: a · (b · c) = (a · b) · c; (M 2) Comutativa: a · b = b · a; (M 3) Distribuitiva: a · (b + c) = a · b + a · c; (M 4) Elemento Neutro: a · 1 = a. Todo conjunto A não vazio equipado com duas operações, denotadas usualmente por + e ·, que satisfazem as propriedades (A1)-(A4) e (M1)(M 4) é chamado de anel. Neste sentido (Z, +, ·) é um anel. Se em um anel (K, +, ·) vale a propriedade de que para todo 0 = x ∈ K existe y ∈ K tal que x · y = 1, então diremos que (K, +, ·) é um corpo. O elemento y é denotado por x−1 e chamado de elemento simétrico de x. 1 A letra Z que representa o conjunto dos números inteiros, provém da palavra alemã “Zahlen” que significa número ou algarismo. CAPÍTULO 1. ÁLGEBRA LINEAR SOBRE CORPOS FINITOS Example 1 3 (a) (Z, +, ·), (Q, +, ·), (R, +, ·), (C, +, ·) são anéis; (b) Qualquer corpo é um anel comutativo. 1.1.1 Divisores Sejam a, b, c ∈ Z. Se c = a · b, então diremos que a divide c (ou c é múltiplo de a) e denotaremos por a | c. Considerando a divisão exata entre dois números inteiros quaisquer, segue as seguintes propriedades, ∀ a, b, c ∈ Z: (a) Se a = 0, a | a; (b) Se a, b ≥ 0, a | b e b | a então a = b; (c) Se a | b e b | c então a | c; (d) Se a | b e a | c então a | (xb + yc), para todo x, y ∈ Z. 1.1.2 Máximo Divisor Comum (MDC) O maior divisor comum positivo de dois ou mais números inteiros quaisquer é chamado de máximo divisor comum desses números e é indicado por mdc (a, b). Definição 1.1 Sejam a, b ∈ Z. Então d ∈ Z é o máximo divisor comum de a e b se: (a) d ≥ 0; (b) d | a e d | b; (c) Se d′ ∈ Z tal que d′ |a e d′ |b, então d′ |d. CAPÍTULO 1. ÁLGEBRA LINEAR SOBRE CORPOS FINITOS 4 Proposição 1.1 Dois inteiros a e b são primos entre si se, e somente se, existem inteiros x0 e y0 tais que ax0 + by0 = 1. Demonstração A implicação é imediata da identidade de Bezout (sejam quais forem os inteiros a, b ∈ Z e sendo d o máximo divisor desses inteiros é possível garantir a existência de inteiros x0 e y0 tais que d = ax0 + by0 ). Vejamos a recíproca. Suponha que existam inteiros x0 e y0 de forma que ax0 + by0 = 1. Como mdc (a, b)|a e mdc(a, b)|b, então mdc(a, b)|(ax0 + by0 ). Portanto mdc(a, b)|1, donde segue que mdc(a, b) = 1. 1.1.3 Números Primos Definição 1.2 Um número p ∈ Z é considerado primo se: (a) p = 0; (b) p = ±1; (c) os únicos divisores de p são ±1, ±p, e estes são chamados divisores triviais de p. Por exemplo, o número 7 é primo pois seus divisores inteiros são ±1 e ±7. Se um inteiro é diferente de 1 e não é primo, diz-se que ele é um número composto. Uma metodologia utilizada para se encontrar números primos2 é através do Crivo de Eratóstenes [5]. Método este que permite obter uma tabela de 2 Atualmente o maior primo encontrado é o número 232.582.657 −1 descoberto pela equipe de colaboradores formado pelos doutores Curtis Cooper e Steven Boone, número este que fora descoberto em 4 de setembro de 2006, contendo 9.808.358 dígitos. É o 44o número primo de Mersenne (dado um número M p, este é primo de Mersenne, se M p for primo, CAPÍTULO 1. ÁLGEBRA LINEAR SOBRE CORPOS FINITOS 5 números primos. Escreve-se a sucessão natural dos números inteiros até ao número desejado. Suprime-se o número 1. O número 2 é o menor número primo. A partir do que lhe segue o 3, cortam-se todos os múltiplos de 2. O número 3, o primeiro que não foi cortado, é primo. A partir dos que lhe seguem cortamos todos os múltiplos de três. O primeiro não riscado é 5, que será número primo, e a partir de 6 cortamos todos os múltiplos de cinco e assim sucessivamente. 1.1.4 Congruência As congruências estão presentes em nosso cotidiano nos mais variados momentos de nossas vidas, com as mais variadas atividades. Como exemplo fácil de se observar temos, os relógios, que trabalham com módulos 12 ou 24 para as horas e módulo 60 para os minutos e segundos. A linguagem da congruência foi desenvolvida pelo matemático, astrônomo e físico alemão Carl Friedrich Gauss (1777 - 1855) no início do século XIX. Gauss era conhecido como o príncipe dos matemáticos. Definição 1.3 Seja m > 1 um número inteiro. Dados a, b ∈ Z, dizemos que a é congruente a b módulo m, e escrevemos a ≡ b (mod m), se m|(a − b). Vejamos algumas propriedades da relação de congruência, sejam a, b, c, d ∈ Z, temos: sendo que M p = 2p − 1, para um primo positivo p). Aos interessados em conhecerem os demais 43 números primos de Mersenne, in- dicamos o sitio: http://www.profcardy.com/artigos/mersenne.php. E para os mais curiosos e entendiados ressaltamos que a fundação The Electronic Frontier Foundation (http://www.eff.org/), oferece um prêmio de U$$ 100 mil a primeira pessoa ou grupo que encontrar um primo com 10 milhões de casas decimais, boa sorte e não esqueça de nós. CAPÍTULO 1. ÁLGEBRA LINEAR SOBRE CORPOS FINITOS Definição 1.4 6 (a) Reflexiva: a ≡ a (mod m); (b) Simétrica: a ≡ b (mod m), então b ≡ a (mod m); (c) Transitiva: a ≡ b (mod m) e b ≡ c (mod m), então a ≡ c (mod m); (d) a ≡ b (mod m) e c ≡ d (mod m), então a + c ≡ b + d (mod m); (e) a ≡ b (mod m), então ac ≡ bc (mod m); (f ) a ≡ b (mod m), então ar ≡ br (mod m). Exemplo 1.1 4; (a) 10 ≡ 2 (mod 4), porque 10 − 2 = 8, e 8 é divisível por (b) −1 ≡ 9 (mod 5), porque −1 − 9 = −10, e −10 é divisível por 5; (c) 12 ≡ 2 (mod 5), porque 12 − 2 = 10 que é divisível por 5; (d) 72 ≡ 52 (mod 12), por que 49 − 25 = 24 que é divisível por 12. 1.2 Grupos Grupos estão por trás de muitas estruturas algébricas, como corpos e espaços vetoriais, sendo que sua estrutura é parte essencial para a teoria de códigos, ou seja, papel fundamental na geração, codificação, decodificação e análise de desempenho de códigos. A origem histórica do conceito de grupo vem da Teoria de Galois, que deve-se ao matemático francês Evariste Galois (1811 - 1832). O objetivo da teoria de Galois é estudar as soluccões da equação polinomial f(t) = tn + an−1 tn−1 + ... + a1 t + a0 = 0 CAPÍTULO 1. ÁLGEBRA LINEAR SOBRE CORPOS FINITOS 7 e a idéia principal de Galois é olhar os polinomios simétricos de f (t), os quais formam um grupo [6], mais conhecido como grupo de Galois, assim dando início a Teoria dos Grupos. Podemos descrever um grupo como sendo um conjunto com uma operação binária que satisfaz certos axiomas. Uma operação binária ∗ sobre um conjunto W é uma regra que associa algum elemento de W a cada par ordenado (a, b) de elementos de W (a ∗ b denotará o elemento associado a (a, b) através de ∗). Definição 1.5 Um grupo (G, ∗) é um par ordenado, sendo G um conjunto não vazio, junto com uma operação binária ∗ sobre G, tal que as seguintes sentenças são satisfeitas: (i) ∀ a, b, c ∈ G, (a ∗ b) ∗ c = a ∗ (b ∗ c), (Associativa); (ii) ∃ e ∈ G, ∀ a ∈ G, e ∗ a = a ∗ e = a, (Elemento Neutro); (iii) ∀ a ∈ G, ∃ a′ ∈ G, a ∗ a′ = a′ ∗ a = e, (Elemento Simétrico). Exemplo 1.2 (a) O conjunto dos números inteiros é um grupo com re- lação à operação de adição; (b) A operação de adição usual é uma operação binária sobre o conjunto dos números reais. Por outro lado ela não é uma operação binária sobre R∗ = R\{0} já que, por exemplo, 5 + (−5) não pertence a R∗ . Definição 1.6 Um grupo G é abeliano3 se a sua operação binária for comutativa, ou seja, a ∗ b = b ∗ a para todo a e b em G. 3 Os grupos abelianos são assim chamados devido ao brilhante matemático norueguês Niels Henrik Abel (1802 - 1829), que aos dezesseis anos começou, por conta própria, a degustar integralmente os maiores trabalhos de seus predecessores, como dos renomados matemáticos: Isaac Newton, Leonhard Euler e Lagrange. CAPÍTULO 1. ÁLGEBRA LINEAR SOBRE CORPOS FINITOS 8 Proposição 1.2 Dado um grupo (G, ∗), então: (a) O elemento neutro é único; (b) Para cada a ∈ G, o simétrico de a é único e (a′)′ = a; (c) ∀ a, b ∈ G; (a ∗ b)′ = b′ ∗ a′; (d) Todo elemento de G é regular: a ∗ x = a ∗ y se, e somente se, x = y. Demonstração (⇒)Provaremos apenas o item (d), os demais itens ficam a cargo do leitor. Suponha que x ∗ a = y ∗ a, com x, y ∈ G. Então: (x ∗ a) ∗ a′ = (y ∗ a) ∗ a′ =⇒ x ∗ (a ∗ a′) = y ∗ (a ∗ a′) =⇒ x ∗ e = y ∗ e =⇒ x = y. Exemplo 1.3 (a) (R, +), (Z, +), (Q, +) e (C, +) são grupos abelianos; (b) (R∗ , ·), (Q∗ , ·) e (C∗ , ·) são grupos abelianos; (c) Mm × n (R) = {(aij )/aij ∈ R} é um grupo aditivo abeliano; (d) O grupo das rotações em torno de um eixo formam um grupo abeliano. Teorema 1.1 O conjunto Zn é um grupo sob a operação adição módulo n. CAPÍTULO 1. ÁLGEBRA LINEAR SOBRE CORPOS FINITOS 9 Teorema 1.2 Se m for um número primo, então o conjunto Zm = {1, 2, ..., m− ∗ 1} é um grupo sob a operação multiplicação módulo m. Demonstração (⇒): (Zm , ·) é um grupo e m não é primo então ∗ ∃ r·s > 1 tal que r · s = m =⇒ r · s = r · s = m = 0 ∗ / (Zm , ·). Absurdo pois 0 ∈ ∗ (⇐): i) assotividade (obvia); ii) 1 ∈ Zm e é o elemento neutro; iii) como ∗ ∗ m é primo então todo a ∈ Zm tem simétrico. Agora provamos que (Zm , ·) é ∗ fechado em relação a operação “ · ”. Sejam r, s ∈ Zm tal que r · s = 0 então r·s ≡ 0 (mod m) =⇒ r · s − 0 = m · q =⇒ r · s = m · q =⇒ m | rs, como m é primo então m | r ou m | s então r = 0 ou s = 0. Absurdo, pois ∗ r e s ∈ Zm . 1.2.1 Subgrupos Definição 1.7 Se um subconjunto H não vazio de um grupo G é fechado sob a operação binária de G e se H forma um grupo, então diz-se que H é um subgrupo de G e denota-se isto por H ≤ G. Exemplo 1.4 de C; (a) (C, +) é um grupo abeliano e Z, Q e R são subgrupos CAPÍTULO 1. ÁLGEBRA LINEAR SOBRE CORPOS FINITOS 10 (b) (C∗ , ·) é um grupo abeliano e Q∗ e R∗ são subgrupos de C∗ ; (c) Consideremos o grupo multiplicativo (R∗ , ·). Mostremos que H = {x ∈ R, x > 0} é um subgrupo de (R∗ , ·): Sejam a, b ∈ H então a > 0 e b > 0 então a > 0 e 1/b > 0 =⇒ a ∗ b′ =⇒ a.1/b > 0 =⇒ a/b > 0, logo a/b ∈ H então é um grupo. Definição 1.8 Seja G um grupo finito. A ordem de G, denotada por | G |, é o número de elementos de G. Definição 1.9 Dado um elemento a em um grupo G, se acontecer que G = {an | n ∈ Z} então dizemos que G é um grupo cíclico gerado por a.Neste caso escrevemos G = a. Definição 1.10 A ordem n de um elemento a em um grupo G {(multiplicativo) ou (com identidade e)} é o menor inteiro positivo tal que an = e. Definição 1.11 Em um grupo G, um subconjunto S de elementos com a propriedade de que todo elemento de G pode ser escrito como um produto de elementos de S é denominado um conjunto de geradores de G. Denota-se isto por G = S e diz-se que G é gerado por S. Exemplo 1.5 (a) (Zm , +) é cíclico, ∀ m > 1. Zm = {0, 1, . . . , (m − 1)}. Tomando como exemplo Z2 temos que Z2 = {0, 1}, que é gerado por 1. Vejamos: 0 · 1 = 0 e 1 · 1 = 1. E Z3 , Z4 , . . ., Zm , também são gerado por 1, logo temos que para m ∈ Zm e a ∈ {0, 1, . . . , (m − 1)}, temos Zm = {a · 1 tal que a ∈ Zm }. Assim como 1 gera o grupo (Zm , +), logo (Zm , +) é cíclico. CAPÍTULO 1. ÁLGEBRA LINEAR SOBRE CORPOS FINITOS 11 (b) Se G = a é um grupo cíclico de ordem 6. Sendo H = a2 , construa a tábua do grupo G/H: · H H aH H aH aH aH H Sendo G = {e, a, a2 , a3 , a4 , a5 } e H = {e, a2 , a4 }. Então G/H = {e, a2 , a4 } = H, G/H = {a, a3 , a5 } = a.H, G/H = {a2 , a4 , a6 } = {a2 , a4 , e} = H, como G é abeliano então xH = Hx, ∀ x ∈ G. (c) Considere o conjunto dos números inteiros Z sob a operação de adição usual. Claramente o conjunto 4Z forma um subgrupo de Z. As classes laterais de 4Z em Z são dadas por: 0 = 0 + 4Z = {. . . , −12, −8, −4, 0, 4, 8, 12, . . .}, 1 = 1 + 4Z = {. . . , −11, −7, −3, 1, 5, 9, 13, . . .}, 2 = 2 + 4Z = {. . . , −10, −6, −2, 2, 6, 10, 14, . . .}, 3 = 3 + 4Z = {. . . , −9, −5, −1, 3, 7, 11, 15, . . .}, 4 = 4 + 4Z = 0. O conjunto dessas classes laterais Z/4Z = {0, 1, 2, 3} forma então um grupo quociente cuja tabela de Cayley é ilustrada abaixo: ∗ 0 1 2 3 0 0 1 2 3 1 1 2 3 0 2 2 3 0 1 3 3 0 1 2 CAPÍTULO 1. ÁLGEBRA LINEAR SOBRE CORPOS FINITOS 1.3 12 Anéis O estudo de anéis tem seu ponto de partida a partir da teoria de anéis de polinômios e da teoria de inteiros algébricos, sendo que o conceito de anel surge com o matemático alemão Julius Wilhelm Richard Dedekind (1831 1916). O termo anel (Zahlring) foi estabelecido no artigo Die Theorie der algebraischen Zahlkörper, Jahresbericht der Deutschen Mathematiker Vereiningung, Vol. 4, 1897, do matemático alemão David Hilbert (1862 − 1943), mas somente em 1914 surge a primeira definição axiomática de anéis que foi dada pelo matemático israelense Adolf Abraham Halevi Fraenkel (1891 − 1965). Definição 1.12 Um anel (A, +, ·) é um conjunto A não vazio, junto com duas operações binárias, adição “+” e multiplicação “·”, tal que as seguintes condições são satisfeitas: ∀ a, b, c ∈ R: (a) (A, +) é um grupo abeliano (A tem um elemento neutro, denotado por 0, e todo x ∈ A tem um inverso aditivo, denotado por −x); (b) a · (b · c) = (a · b) · c; (c) a · (b + c) = a · b + a · c e (b + c) · a = b · a + c · a. Definição 1.13 Um anel no qual a multiplicação é comutativa, a·b = b·a, ∀ a, b ∈ A, é um anel comutativo. Um anel A com uma identidade multiplica- tiva 1, (∃ 1 ∈ A, ∀ a ∈ A, a · 1 = a = 1 · a) é um anel com unidade. Uma identidade multiplicativa em um anel é uma unidade. CAPÍTULO 1. ÁLGEBRA LINEAR SOBRE CORPOS FINITOS Exemplo 1.6 13 (a) (Z, +, ·), (Q, +, ·), (R, +, ·), (C, +, ·) e (Zm , ⊕, ⊙), m > 1, são anéis comutativos com unidades; (b) R[x] = { unidade; n i=1 ai xi tal que ai ∈ R, n ∈ N}, é um anel comutativo com (c) Mn (R) = {(aij ) tal que aij ∈ R}, é um anel não comutativo com unidade In; (d) Qualquer corpo é um anel comutativo. Definição 1.14 Seja (A, +, ·) um anel e B ⊆ A, B = ∅. Dizemos que B é um subanel de A se, e somente se, (a) B é fechado para as operações de A, isto é, a+ b e a · b ∈ B; (b) (B, +, ·) também é um anel. Proposição 1.3 Sejam A um anel e, B ⊆ A, B = ∅. Então B é um subanel de A se e somente se,∀ a, b ∈ B, temos que: a − b ∈ B e a · b ∈ B. Demonstração (⇒): Se B é um subanel então B é um subgrupo de A, então ∀ a, b ∈ B, temos que a − b ∈ B. Ainda como L é subanel então B é fechado em relação à segunda operação, ou seja, a · b ∈ B. (⇐): ∀ a, b ∈ B, temos que a − b ∈ B então L é um grupo de A. Logo a + b ∈ B e a · b ∈ B. Para terminarmos esta prova resta mostrar que B é um anel além de ser grupo, como já mostramos. Mas ∀ a, b, c ∈ B ⊂ A temos a · (b · c) = (a · b) · c e a · (b + c) = a · b + a · c, pois A é um anel. CAPÍTULO 1. ÁLGEBRA LINEAR SOBRE CORPOS FINITOS Exemplo 1.7 14 (a) Z[i] = {a + bi : a, b ∈ Z} é um subanel de C, chamado de anel dos inteiros de Gauss. Definição 1.15 Seja (A, +, ·) um anel, então: (a) Dizemos que um elemento x = 0, x ∈ A, é um divisor de zero se existe um elemento y = 0 em A, tal que x · y = 0 ou y · x = 0; (b) Em um anel comutativo (A, +, ·), com unidade, não contendo divisor de zero diferente de zero é chamado anel de integridade ou domínio de integridade ou simplesmente domínio, se A satisfaz a seguinte condição: a · b = 0 então a = 0 ou b = 0; (c) Considere que A seja um anel com unidade. Um elemento a de A é denominado inversível em A se existir a−1 em A tal que a · a−1 = a−1 · a = 1. Se todo elemento não nulo é inversível o anel é chamado de anel de divisão. Exemplo 1.8 (a) O anel Z dos números inteiros não tem divisores de zero; (b) Seja n um número natural maior do que 1 e seja Zn = {0, 1, . . . , n −1} com a adição e o produto assim definidos: se a, b ∈ Zn , então a + b é o resto da divisão por n da soma dos números inteiros a e b e a · b é o resto da divisão por n do produto dos números inteiros a e b. Então Zn tem divisores de zero quando e só quando n for primo. Se n não for primo e se a e b forem números naturais tais que a · b = n então, em Zn , a · b = 0; (c) (Z, +, ·), (Q, +, ·), (R, +, ·) e (C, +, ·) são anéis de integridade; CAPÍTULO 1. ÁLGEBRA LINEAR SOBRE CORPOS FINITOS 15 (d) Todo corpo é um domínio; (e) Zm é um domínio, se e somente se, m é um número primo; (f ) Se A é um domínio então A[x] = { n i =1 ai xi | ai ∈ A; n ∈ N} é um domínio. (Anel dos Polinômios com coeficientes em A na variável x). 1.4 Espaços Vetoriais A noção comum de vetores como objetos com tamanho, direção e sentido, juntamente com as operações de adição e multiplicação por números reais forma o conceito básico de um espaço vetorial. Deste ponto de partida então, para definirmos um espaço vetorial, precisamos de uma uma estrutura (V, +, ·) formada por um conjunto V de elementos, assim temos apenas que especificar o conjunto, o corpo F, e definir as operações sobre os elementos deste conjunto, adição em V e multiplicação por escalar em V . Definição 1.16 Seja F um corpo. Um espaço vetorial sobre F consiste de um grupo abeliano V sob as operações binárias, adição e multiplicação por escalar, de cada elemento de V por cada elemento de F à esquerda, satisfazendo as seguintes propriedades, ∀ u, v, w ∈ V e a, b ∈ F: (a) Associatividade: (u + v) + w = u + (v + w); (b) Comutatividade: u + v = v + u; (c) Elemento neutro: ∃ 0 ∈ V ; u + 0 = 0 + u = u; (d) Elemento inverso: ∃ − u ∈ V ; u + (−u) = (−u) + u = 0; (e) Se 1 é a unidade de F: 1.u = u.1 = u; CAPÍTULO 1. ÁLGEBRA LINEAR SOBRE CORPOS FINITOS 16 (f ) a · (b · u) = (a · b) · u; (g) (a + b) · u = au + bu; (h) a(u + v) = au + av. Exemplo 1.9 (a) Todo corpo K é um espaço vetorial sobre o próprio corpo K com as operações usuais de adição e multiplicação de K; (b) O corpo R dos números reais é um espaço vetorial sobre o corpo Q dos números racionais com as operações de adição e multiplicação de R; (c) O corpo C dos números complexos é um espaço vetorial sobre o corpo R dos números reais com as operações de adição e multiplicação de C; (d) O conjunto P [K] de todas as funções polinomiais da forma: p(x) = a0 + a1 x + a2 x2 + ... + an xn onde ai ∈ K ( i = 0, 1, 2, ..., n) é um espaço vetorial sobre o corpo K; n (e) O conjunto F, dado por Fq = {(a1 , a2 , ..., an ); ai ∈ Fq ; 1 ≤ i ≤ n}, formado por n-uplas de elementos em Fq com as operações: (a1 , a2 , ..., an ) + (b1 , b2 , ..., bn ) = (a1 + b1 , a2 + b2 , ..., an + bn ) e a · (a1 , a2 , ..., an ) = (a · a1 , a · a2 , ..., a · an ) determina um espaço vetorial sobre o corpo Fq , onde q é uma potência de primo. CAPÍTULO 1. ÁLGEBRA LINEAR SOBRE CORPOS FINITOS 17 Como veremos futuramente, um código linear de comprimento n sobre Fq nada mais é do que um subespaço vetorial do espaço de todas as n-uplas Fnq . Definição 1.17 Seja (V, +, ·) um espaço vetorial. Um subconjunto W ⊆ V , não vazio, será um subespaço vetorial de V , se as seguintes propriedades são satisfeitas: (a) Se o vetor nulo (0) ∈ W ; (b) Se u, v ∈ W =⇒ u + v ∈ W ; (c) ∀ a ∈ R; ∀ u ∈ W =⇒ a · u ∈ W . Observação 1.1 Obviamente {0} e V são subespaços vetoriais do espaço vetorial V , e são chamados de subespaços vetoriais triviais. Exemplo 1.10 (a) Seja Pn∗ ⊂ Pn , dado por Pn∗ = {p(x) ∈ Pn ; p(0) = 0}. Verifiquemos que Pn∗ é, de fato, um subespaço vetorial de Pn . (i) O polinomio nulo se anula em x = 0, logo, pertence a Pn∗ ; (ii) Se p(x), q(x) ∈ Pn∗ =⇒ p(0) + q(0) = 0 e, portanto, p(x) + q(x) ∈ Pn∗ ; (iii) Se p(x) ∈ Pn∗ =⇒ λp(0) = 0, para qualquer λ ∈ R. Assim, λp(x) ∈ Pn∗ . (b) Verifiquemos que S = {(x, y, z) ∈ R3 ; x + y + z = 0} é um subespaço vetorial de R3 . (i) É claro que (0, 0, 0) satisfaz 0 + 0 + 0 = 0; CAPÍTULO 1. ÁLGEBRA LINEAR SOBRE CORPOS FINITOS 18 (ii) Se (x, y, z), (u, v, w) ∈ S então (x + u) + (y + v) + (z + w) = (x + y + z) + (u + v + w) = 0, portanto, (x, y, z) + (u, v, w) ∈ S; (iii) Se (x, y, z) → S então λx + λy + λz = λ(x + y + z) = 0, para qualquer λ ∈ R. Assim λ(x, y, z) ∈ S. (c) Considere o seguinte conjunto S = {y ∈ C2 (R; R); y” − y = 0} onde y” representa a derivada de segunda ordem de y. Verifiquemos que S é um subespaço vetorial de C2 (R; R). (i) Claramente a função nula satisfaz 0” − 0 = 0; (ii) Se y1 , y2 ∈ S entao (y1 +y2 )”−(y1 −y2 ) = (y”1 −y1 )−(y”2 −y2 ) = 0. Logo, y1 + y2 ∈ S; (iii) Se y ∈ S e λ ∈ R entao (λy)” − λy = λ(y” − y) = 0. Portanto, λ y ∈ S. Definição 1.18 Seja V = {0} um espaço vetorial. Uma base de V é uma sequência de vetores linearmente independentes (LI) (α1 v1 +...+αn vn = 0 ⇒ α1 = ... = αn = 0) de V que também gera V . Exemplo 1.11 (a) Os vetores de B = {(1, 0, 0), (0, 1, 0), (0, 0, 1)} formam uma base de R3 . Vê-se facilmente que os vetores de B são LI, e que todo (x, y, z) ∈ R3 se escreve como (x, y, z) = x(1, 0, 0) + y(0, 1, 0) + z(0, 0, 1); CAPÍTULO 1. ÁLGEBRA LINEAR SOBRE CORPOS FINITOS 19 (b) Os vetores e1 , ..., en ∈ Rn onde e1 = (1, 0, . . . , 0), e2 = (0, 1, 0, . . . , 0), . . . , en = (0, . . . , 0, 1) formam uma base de Rn . Proposição 1.4 Sejam v1 , v2 , ..., vn vetores não nulos que geram um espaço vetorial V . Então dentre estes vetores sempre podemos extrair uma base para V . Demonstração Se v1 , v2 , . . . , vn são LI, então por definição eles formam uma base. Se v1 , v2 , . . . , vn são LD, então deve existir uma combinação linear desses vetores com algum coeficiente diferente de zero, satisfazendo x1 v1 + ... + xn vn = 0. Suponha xn = 0. Da equação acima, vn = − x1 xn−1 v1 − . . . − vn−1 xn xn onde, vn é combinação linear de v1 , v2 , . . . , vn−1 e portanto v1 , v2 , . . . , vn−1 geram V . Se {v1 , v2 , . . . , vn−1 } for LD, então existe uma combinação linear não nula desses vetores resultando no vetor nulo. Portanto, podemos extrair aquele vetor que corresponde a este coeficiente. Seguindo dessa forma, após uma quantidade finita de passos, chegamos a um subconjunto de {v1 , v2 , . . . , vr } formado por r(r ≤ n) vetores LI, que ainda geram V , ou seja, formamos uma base. Definição 1.19 Seja V um espaço vetorial finitamente gerado. Se V = {0} definimos a dimensão de V como sendo 0. Se V = {0} definimos a dimensão de V como sendo o número de elementos de uma base qualquer de V . Indicaremos por dimV para designar a dimensao de V . Definição 1.20 Um espaço vetorial V sobre um corpo F tem dimensão finita, se existe um subconjunto finito de V cujos vetores geram V . Capítulo 2 Corpo Finito Entre os mais variados tipos de corpos estaremos nos detendo aos que mais nos interessam neste trabalho, o corpos finitos. Definição 2.1 Seja (K, +, ·) um anel comutativo, com unidade, tal que todo elemento não nulo é inversível, dizemos que K é um corpo, se ∀ a = 0 ∈ K, ∃ b = a−1 ∈ K, tal que a · a−1 = 1. Definição 2.2 Seja K um corpo e L = ∅ ⊆ K. Então, L é um subcorpo de K se, e somente se, (L, +, ·) é um corpo, ∀ a, b ∈ L; a − b e a · b ∈ L e ∀ a ∈ L\{0}; a−1 ∈ L. Exemplo 2.1 (a) Os anéis (Q, +, ·), (R, +, ·) e (C, +, ·) são corpos; (b) Q[i] = {a + bi tal que a, b ∈ Q} é um subcorpo de C; √ √ (c) Q[ p] = {a + b p tal que a, b ∈ Q} é um subcorpo de R se p > 0 e é um subcorpo de C se p < 0. 20 CAPÍTULO 2. CORPO FINITO 21 Equivalentemente, podemos definir: Definição 2.3 Seja K um conjunto não vazio sobre o qual podem ser definidas as operações binárias ⊕ e ⊗, a estrutura (K, ⊕, ⊗) é um corpo se: (a) (K, ⊕) é um grupo abeliano; (b) (K− {0}, ⊗) é um grupo abeliano; (c) ⊗ é distribuitiva em relação à operação ⊕. Exemplo 2.2 (a) O conjunto K = {0, 1, 2, 3} munido com as operações de adição ⊕ e multiplicação ⊗, definidas pelas tabelas: ⊕ 0 1 2 3 ⊗ 0 1 2 3 0 0 1 2 3 0 0 0 0 0 1 1 2 3 0 e 1 0 1 2 3 2 2 3 0 1 2 0 2 0 1 3 3 0 1 2 3 0 3 2 1 representa um estrutura de corpo com uma quantidade finita de elementos. Os corpos são ferramentas de suma importância para o estudo da teoria dos códigos, a seguir estaremos trazendo uma abordagem mais aprofundada sobre corpos finitos, sobre os quais os códigos estão definidos, mais especificamente os corpos Zp , que será a base para o entendimento do proxímo capítulo. Um corpo finito é um corpo em que o conjunto dos elementos é finito, sendo que a sua estrutura se aplica em muitas áreas, entre elas a teoria dos códigos (podemos nos deter aqui ao corpo binário), geometria projetiva, CAPÍTULO 2. CORPO FINITO 22 combinatória, criptografia (estudo dos Sistemas Criptográficos Baseados em Curvas Elípticas). Um exemplo bem familiar é o corpo finito Fp = (Zp ) dos inteiros módulo p (p primo). Existem corpos finitos com cardinalidade não prima (por exemplo, existe corpo com 4 elementos). De forma geral, para todo primo p e para todo inteiro positivo m, existe um corpo finito com pm elementos (este é o conhecido teorema de Galois da teoria dos corpos finitos). Mais ainda, se K é um corpo finito, então a cardinalidade de K é uma potência de primo (se K é um corpo finito então sua característica é um número primo p; consequêntemente existe um subcorpo K ′ ⊆ K isomorfo a Zp ; desta forma temos que K é um espaço vetorial sobre o corpo Zp ; como dimZp (K) é finita, digamos m, concluímos que |K| = pm ). Exemplo 2.3 Seja f = z 4 + z + 1. Afirmamos que o anel quociente Z2 [x] f é um corpo finito com 24 elementos: 0 z2 z3 z3 + z2 1 z2 + 1 z3 + 1 z3 + z2 + 1 z z2 + z z3 + z z3 + z2 + z z + 1 z2 + z + 1 z3 + z + 1 z3 + z2 + z + 1 Multiplicação: (z 3 + z 2 + 1).(z 2 + z + 1) = z 2 + 1, já que (z 3 + z 2 + 1).(z 2 + z + 1) = z 5 + z + 1, e (z 5 + z + 1) mod (z 4 + z + 1) = z 2 + 1, a tabela da multiplicação fica como exercício ao leitor; Inversão: (z 3 + z 2 + 1) já que (z 3 + z 2 + 1) · z 2 mod(z 4 + z + 1) = 1. −1 = z2, CAPÍTULO 2. CORPO FINITO 23 Após esta analise dos corpos finitos, onde já exemplificamos os de ordem prima e binária, devemos ressaltar que existem outros corpos finitos muito comuns no estudo de códigos lineares, que são os corpos: ternário com 3 elementos (q = 3) e o quaternário, de 4 elementos (q = 4), que serão exemplificados a seguir: Exemplo 2.4 (a) O corpo ternário F3 com os elementos {0, 1, 2} tem as seguintes tabelas de adição e multiplicação no módulo 3: + 0 1 2 0 0 1 2 1 1 2 0 2 2 0 1 . e 0 1 2 0 0 0 0 1 0 1 2 ; 2 0 2 1 (b) O corpo quaternário F4 com os elementos {0, 1, a, b}, admite as seguintes tabelas de adição e multiplicação (F4 não é o anel dos inteiros módulo 4): + 0 1 a b . 0 1 a b 0 0 1 a b 0 0 0 0 0 1 1 0 b a e 1 0 1 a b a a b 0 1 a 0 a b 1 b b a 1 0 b 0 b 1 a Devemos evidenciar que não existe nenhum corpo finito em que a ordem não seja uma potência de número primo, como exemplo, evidenciamos que não existe um corpo de ordem 6. No entanto, temos uma infinita sequência de corpos Zm finitos, dado por: Z2 , Z3 , Z5 , Z7 , Z11 , ... (m ∈ Z, m é primo). Capítulo 3 Códigos Lineares No ano de 1948, com a publicação do artigo “A Mathematical Theory of Communication”, do engenheiro e matemático estadunidense Claude Elwood Shannon (considerado fundador da teoria da informação), surge a teoria dos códigos, que trabalha com sistemas de comunicação, transmissão de dados, codificação, correção de erros, etc. A teoria dos códigos através da sua estrutura trata da codificação, decodificação, detecção e correção de erros, durante a transmissão e recepção de dados (informações). Hoje em nosso meio, a quase todo momento de nosso cotidiano, estamos utilizando algum tipo de código, dos mais variados que existem, podemos nos referir quando usamos algum meio digital, como exemplos podemos citar: quando estamos utilizando a internet, enquanto ouvimos música de um CD ou de uma rádio, quando assistimos a um programa de televisão, falamos ao celular, entre muitos outros. Mas em determinados momentos podem surgir alguns tipos de erros, como chuvisco, ruídos, turbulência, etc, podendo assim nos dar uma informação não desejada. Diante disso a teoria dos códigos vem 24 CAPÍTULO 3. CÓDIGOS LINEARES 25 para detectar e corrigir estes erros para que possamos receber a mensagem correta. Um significado em termos gerais para um determinado código, para uma melhor visualização do leitor, é a idéia de substituição simples de palavras ou frases por algum tipo de alfabeto, por exemplo, podemos substituir a frase “Atacar imediatamente” por “Sou Brasileiro”. Para o envio de uma mensagem, necessitamos de um sistema de comunicaão, que segue a seguinte ordem na transmissão de dados: a mensagem será enviada de uma determinada fonte, que é processada pelo codificador da f onte, que codifica os dados em determinados símbolos (palavra código da fonte), logo os dados passam ao codif icador de canal, transformando a palavra código da fonte em palavra código do canal, em seguida o modulador converte cada símbolo da palavra código do canal, que é transmitida pelo canal de comunicaccão ao demodulador, que converte cada símbolo da palavra código do canal, cometendo as vezes alguns erros, após demoluda, a palavra recebida passa ao decodificador do canal, que corrige os erros, após feita a correção, o decodif icador da fonte (operação inversa do codificador da fonte), transmiti a mensagem para o determinado destino. Neste capítulo estaremos abordando a classe dos códigos lineares, que são os mais utilizados entre as famílias de códigos, utilizando-se aqui o conteúdo estudado nos capítulos anteriores. Um corpo finito será designado por Fq . O espaço vetorial sobre Fq de dimensão n ∈ N será denotado por Fnq . CAPÍTULO 3. CÓDIGOS LINEARES 3.1 26 Preliminares Podemos representar nossa mensagem por uma sequência de dados, chamado de Alf abeto do código e denotado por A. O alfabeto mais usado em teoria dos códigos é o dos corpos binários. Esta sequência pode ser escrita por uma informação binária, sendo que podemos definir as operações de soma e produtdo deste alfabeto binário através dos anéis dos inteiros módulo m. A critério de exemplo temos A = {0, 1}, e para que esta informação con- tenha o mínimo de erros, partimos para o acrescímo de símbolos ao alfabeto, como podemos ver no código de repetição, que acrescenta o mesmo símbolo n vezes a informação, por sua vez nosso alfabeto A poderia ser escrito por: 0 → 0000 1 → 1111 logo nosso código seria C = {0000, 1111}. n Definição 3.1 Um código C ⊂ Fq será chamado de código linear se for um n subespaço vetorial de Fq . Um código, cujo seu tamanho seja T , é designado pelo seu comprimento n, e por sua dimensão K, denotado por [n, k] − código, na maioria das vezes T = 2k (k ∈ Z), e tem q k palavras códigos, sendo que a soma de duas palavras- código quaisquer é uma palavra-código e o produto de qualquer palavracódigo por elemento de Fq é uma palavra-código, de um determinado código. Dado um código de dimensão K e {u1 , u2 , ..., uk } a base de C, temos: C = {λ1 u1 , λ2 u2 , ..., λk uk ; λ1 , ..., λ1 ∈ Fq}. Exemplo 3.1 Seja C o [n, k] - código C = {00000, 01011, 10110, 11101}, CAPÍTULO 3. CÓDIGOS LINEARES 27 assim temos que n = 5, k = 2 e T = 4. n Definição 3.2 Dados dois vetores u, v ∈ Fq , a distância entre u e v é denominada distância de Hamming, definida como: d (u, v) = |{i : ui = vi }| onde u = (u1 , ..., un ) e v = (v1 , ..., vn ). A distância de Hamming entre duas palavras-código, u e v, é o número de coordendas distintas entre estes vetores, sendo que distância mínima (menor distância de Hamming entre quaisquer duas palavras-código) de um código C, determina o número de erros para serem corrigidos, ou seja, um código pode detectar até d − 1 erros e corrigir até t erros, onde t = [ d −2 1 ]. Um [n, k] − código com distância mínima d é denotado por [n, k, d] − código. Exemplo 3.2 (a) Calculando a distância de Hamming das palavras-código durante uma certa transmissão de dados, sendo u = (11101) enviada e v = (10110) recebida, então temos: d(11101, 10110) = 3; (b) Dado o código linear C = {(00000), (01011), (11101)} , devemos encon- trar a distância mínima entre as palavras-códigos e o número de erros a serem corrigidos: d(00000, 01011) = 3; d(00000, 11101) = 4; d(01011, 11101) = 3; d(c) = min{d(x, y)} = 3; d − 1 3 −1 t=[ ]= = 1. 2 2 CAPÍTULO 3. CÓDIGOS LINEARES 28 n Definição 3.3 Dados um elemento a ∈ Fq e um número natural t > 0 , definimos o disco e a esfera de centro a e raio t como sendo, respectivamente, os conjuntos: n (a) D(a, t) = {u ∈ Fq : d(u, a) ≤ t}; n (b) S(a, t) = {u ∈ Fq : d(u, a) = t} Exemplo 3.3 (a) Considere F42 = {(0, 0, 0, 0), (0, 0, 0, 1), (0, 0, 1, 0), (0, 1, 0, 0), (1, 0, 0, 0), (1, 0, 0, 1), (1, 0, 1, 0), (1, 1, 0, 0), (0, 1, 0, 1), (0, 1, 1, 0), (0, 0, 1, 1), (1, 1, 1, 0), (0, 1, 1, 1), (1, 0, 1, 1), (1, 1, 0, 1), (1, 1, 1, 1)}, Assim, para a = (0, 0, 0, 0) e t = 1, temos que : D(a, 1) = {(0, 0, 0, 0), (0, 0, 0, 1), (0, 0, 1, 0), (0, 1, 0, 0), (1, 0, 0, 0)} e S(a, 1) = {(0, 0, 0, 1), (0, 0, 1, 0), (0, 1, 0, 0), (1, 0, 0, 0)} Note que Fnq = D(a, 4). (b) Considere F32 = {(0, 0, 0), (1, 0, 0), (0, 1, 0), (0, 0, 1), (1, 0, 1), (1, 1, 0), (0, 1, 1), (1, 1, 1)} CAPÍTULO 3. CÓDIGOS LINEARES 29 Assim, para a = (0, 0, 0) temos que : D(a, 2) = {(0, 0, 0), (0, 0, 1), (1, 0, 0), (0, 1, 0), (1, 0, 1), (1, 1, 0), (0, 1, 1)} e S(a, 2) = {(1, 0, 1), (0, 1, 1), (1, 1, 0)}. Definição 3.4 Seja C ⊂ Fnq um código com distância mínima d e seja t = [ d −2 1 ]. O código C será dito perfeito se: ∪c ∈ C Dt (c, t) = Fnq . Exemplo 3.4 O código C = {(000), (111)} ⊂ F32 que possui raio de empa- cotamento t = 1 é perfeito. Como c e c′ são palavras distintas de C, então Dt(c) ∩ Dt(c′) = : D1 (000) ∩ D1 (111) = {(000), (100), (010), (001)} ∩ {(111), (110), (011), (101)} = e D1 (000) ∪ D1 (111) = F32 . Logo C é perfeito. Definição 3.5 Seja α ∈ Fnq , define-se o peso de Hamming de α como sua distância à palavra nula, dado pelo número inteiro: w(α) = |{i : αi = 0}| , ou seja, w(α) = d(α, 0). Definição 3.6 O peso mínimo de um código C é o inteiro: w(C) = min{w(v) : v ∈ C − {0}}. CAPÍTULO 3. CÓDIGOS LINEARES 30 Proposição 3.1 Seja um código linear C ⊂ Fnq , com distância mínima d, temos que: (a) Para quaisquer u, v ∈ Fnq , d(u, v) = w(u − v); (b) d(C) = w(C). Demonstração O item a provém das definições de métrica e peso de Hamming, e o item b além da métrica de Hamming, decorre do peso do código C, de fato temos: (a) d(u, v) = |{i : ui = vi }| = |{i : ui − vi = 0}| (b) ∀ u, v ∈ C, com u = v , temos que u − v = z ∈ C então d(u, v) = w(z). Logo, o conjunto {w(z) : z ∈ C − {0}} = {d(u, v) : u, v ∈ C e u = v} então d = min{d(u, v) : u, v ∈ C e u = v} = min{w(z) : z ∈ C − {0}} = w(C). Antes de entrarmos no proxímo sub item deste capítulo, vamos verificar a maneira de como podemos representar um código linear. Com vimos anteriormente, já sabemos por definição que um código linear C é um subespaço vetorial do espaço vetorial Fnq , então pela álgebra linear, temos duas maneiras de descrevê-lo, sendo como imagem (Im) ou como núcleo (Ker) de uma transformação linear. Para descrever o código linear C como a imagem, tomamos uma base v1 , v2 , . . . , vk ∈ C e consideramos a transformação linear T : CAPÍTULO 3. CÓDIGOS LINEARES T : Fkq 31 → Fnq (x1 , . . . , xk ) → (x1 v1 + . . . + xk vk ) Como o núcleo de T é nulo, temos que T é injetora. No entanto para n construirmos C ⊂ Fq basta mostrarmos uma transformação linear injetora T : Fkq → Fnq , definindo o código linear C = Im(T ). Considerando a transformação linear: T : F22 → F42 (a1 , a2 ) → (a1 , a2 , a2 , a1 ), Temos que T (a1 , a2 ) = (0, 0, 0, 0), se (a1 , a2 , a2 , a1 ) = 0, ou seja, a1 = a2 = 0. Logo Ker(T ) = {(0, 0)} e Im(T ) = C. Portanto T é injetora. Como a1 , a2 ∈ F2 , temos que |C| = 22 = 4 e: C = {(0, 0, 0, 0); (1, 0, 0, 1); (0, 1, 1, 0); (1, 1, 1, 1)} Como d(C) = w(C) = 2 então C corrige t = 0 erros, ou seja, é um código ineficiente. 3.2 Matriz geradora e de paridade Como um código linear é um subespaço vetorial, logo o que o gera é um conjunto de vetores que forma uma base para este subespaço. Se C é um [n, k, d] − código em Fnq , podemos tomar uma base ordenada {vi , ..., vk } = B ⊂ C onde vi = (vi1 , vi2 , ..., vin ), com 1 ≤ i ≤ k. Logo definimos a matriz de ordem k × n, cujas linhas são os vetores da base, da seguinte forma: CAPÍTULO 3. CÓDIGOS LINEARES vi . . G= . = vk 32 v11 v12 .. .. . . ··· .. . vk1 vk2 ··· v1n .. . , vkn A matriz G é denominada de matriz geradora de C. Ressaltamos que a matriz geradora não é única, ela varia de acordo com a base escolhida. Podemos obter uma nova matriz G′ para gerar o mesmo código, através de sequências de operações elementares de escalonamento: permutação de duas linhas, multiplicação de uma linha por um elemento não nulo de Fq , substituição de uma linha por ela mesma somada a um múltiplo escalar de outra linha. Consideremos a transformação linear definida por: k n T : Fq → Fq a → a · G k Temos então que C = {a · G : a ∈ Fq }. Definição 3.7 Uma matriz geradora G de um [n, k]−código C está na forma padrão se G = (Idk |A), sendo que Idk é a matriz indentidade k × k e A uma matriz k × (n − k). Exemplo 3.5 Seja a matriz geradora G na forma padrão: 1 0 0 0 1 1 , G= 0 1 0 1 0 1 0 0 1 1 1 0 CAPÍTULO 3. CÓDIGOS LINEARES 33 então temos k = 3 e n = 6, ou seja, [n, k] = [6, 3] − código. Dado um vetor u = (101), temos que C = u·G= u1 · v11 + u2 · v21 + u3 · v31 , ..., u1 · v16 + u2 · v26 + u3 · v36 = (101101). Para definição a seguir, denotaremos o produto interno entre dois vetores por a, b, ou seja, ∀ u, v, w ∈ Fnq e λ ∈ Fq , temos: u, v = u1 v1 + u2 v2 + ... + un vn = u · v = n ui vi , i=1 desta operação temos algumas propriedades usuais: (a) u, v = v, u; (b) u + w, v = u, v + w, v; (c) λu, v = λ u, v. Definição 3.8 Dado o código linear C ⊂ Fnq , define-se o código dual da seguinte forma: C ⊥ = {v ∈ Fnq : v, u = 0, ∀ u ∈ C}. Através da dimensão de um código dual, que é dada por n−k, podemos escrever uma base {h1 , h2 , . . . , hn−k } para C ⊥ , sendo onde hi = (hi1 , hi2 , ..., hin ), CAPÍTULO 3. CÓDIGOS LINEARES 34 com 1 ≤ i ≤ n − k, assim podemos escrever a matriz geradora de C ⊥ , de ordem (n − k) × n: h1 h11 h12 . . .. = .. . H= . . hn−k h(n−k)1 h(n−k)2 ··· .. . h1n ··· h(n−k)n ··· Esta matriz H recebe o nome de matriz verificação de paridade do código C, a partir dela podemos concluir que se uma n-upla é uma palavra-código do código C. Logo uma n-upla será uma palavra-código se e só se, H · xt = 0 (vetor nulo), onde xt denota a transposta de x. Teorema 3.1 Seja C ⊂ Fnq um código de dimensão k gerado pela matriz G = (Idk |A). Então H = (−AT |Idn−k ) matriz verificação de paridade de C é a matriz geradora de C ⊥ . Demonstração De fato por Idn−k as linhas de H são LI, logo geram um subespaço vetorial W de dimensão n − k. As linhas de H são ortogonais as linhas de G, pois H.GT = 0. Portanto os vetores formados pelas linhas de H estão contidos em C ⊥ , logo W ⊂ C ⊥ . Como a dimW = n−k = dim(C ⊥ ) en tão estes subespaços coicidem e concluímos que H = −AT |Idn−k gera C ⊥ . Não podemos nos esquecer que como existem inúmeras maneiras de se escolher uma base para um mesmo código, então um número igual de matrizes geradoras G também é possível, logo podemos concluir que existe mais de uma matriz de paridade H. CAPÍTULO 3. CÓDIGOS LINEARES Exemplo 3.6 35 (a) Considere a matriz G na forma padrão, dada por: 1 0 0 1 0 1 0 1 1 0 , G= 0 1 0 0 1 0 0 1 1 1 então temos que H= 0 1 1 0 1 . (b) Suponha o código C sobre F2 com matriz geradora G abaixo. Vamos determinar se o vetor v = (1010101) ∈ F72 pertence a C. 1 0 0 0 1 0 1 0 1 G = 0 0 0 0 1 1 = 0 1 1 1 0 0 1 1 1 = (Id4 |A) =⇒ −At 1 0 0 1 1 0 1 1 1 0 0 1 1 1 , 1 0 logo podemos escrever H, 1 0 0 1 1 0 1 = (Id3 | − AT ), H= 0 1 0 0 1 1 1 0 0 1 1 1 1 0 Agora basta verificar se H · v t = 0, então: CAPÍTULO 3. CÓDIGOS LINEARES 36 H · vt 1 0 0 1 1 0 1 = 0 1 0 0 1 1 1 · 0 0 1 1 1 1 0 1+1+1 = 1+1 1+1 1 1 0 1 0 1 0 1 = 0 = (000), 0 logo não obtivemos o vetor nulo, portanto v não é uma palavra código de C. (c) Seja um [5, 2] − código ∈ F2 , onde temos a seguir a matriz de paridade H. Verificaremos se z = (10110) pertence ao código. 1 0 1 0 0 , H= 1 1 0 1 0 0 1 0 0 1 basta então verificar se H · z t = 0: H · zt 1 0 = 1 1 0 1 0 · 1 1 0 1 0 0 1 0 1 0 1 0 0 CAPÍTULO 3. CÓDIGOS LINEARES 1+0+1+0+0 37 0 = 0 = (000), = 1 + 0 + 0 + 1 + 0 0+0+0+0+0 0 ou seja, z ∈ C. Proposição 3.2 (Limitante de Singleton): A distância mínima (peso mínimo) de um [n, k, d] − código linear C ⊂ Fnq satisfaz: d ≤n−k+1 Demonstração Considere um subespaço linear W ⊆ Fnq dado por W = {(a1 , . . . , an ) ∈ Fnq | ai = 0; ∀i ≥ d} e d o menor peso de uma palavra- código não nula. Logo para um a ∈ W temos que w(a) ≤ d − 1, portanto W ∩ C = {0}. Como dimW = d − 1 temos, dimC + dimW = dim(C + W ) + dim(C ∩ W ) = dim(C + W ) ≤ n Logo k + d − 1 ≤ n =⇒ k + d ≤ n + 1 =⇒ d ≤ n − k + 1. Satisfazendo a igualdade do Limitante de Singleton (d = n − k + 1), temos excelentes códigos os denominados MDS (maximum distance separable), como exemplo o código de Reed-Solomon. 3.3 Código de Hamming Vamos nos deter aqui ao código binário de Hamming, que é definido sobre o corpo Z2 , que serve para a detecção de erros em transmissões de dados CAPÍTULO 3. CÓDIGOS LINEARES 38 binários, mas não apenas para detectar o erro de um bit, mas também para a localização do bit errado . Este código foi implementado por Richard Hamming em 1950. Proposição 3.3 Seja C um código binário e seja H uma matriz de teste para C. Se todas as colunas de H são não-nulas e distintas, então a distância mínima de C é pelo menos três. Um código binário de Hamming, é um exemplo de código cuja a distância mínima é pelo menos 3, sendo que a sua matriz verificação de paridade é a matriz Hr de ordem r × n, onde: r −1 Hr = {x ∈ F22 : Hr · xt = 0} O comprimento das palavras deste código é n = 2r − 1, pois o número de colunas da matriz Hr é 2r − 1, a dimensão é k = n − r = 2r − r − 1, e como a distância é pelo menos 3, temos então que os parâmetros de Hr são [2r − 1, 2r − r − 1, 3], para qualquer r > 1. Exemplo 3.7 (a) Seja r = 2, então: Hr = 1 0 1 0 1 1 é a matriz verificação de paridade do código H2 = {(000), (111)}. Ob- serve que quaisquer duas colunas de Hr são LI e que h3 = h1 + h2 . Portanto d(H2 ) = 3 e os parâmetros de H2 são [3, 1, 3].; CAPÍTULO 3. CÓDIGOS LINEARES 39 (b) Dado o código [7, 4], a matriz verificação de paridade que gera o código H3 é: 1 0 0 0 1 1 1 . H3 = 0 1 0 1 0 1 1 0 0 1 1 1 0 1 Teorema 3.2 (Limitante de Hamming) Seja um [n, k, d] − código C ⊂ Fn2 e seja t = [ d 2- 1 ] então: q n−k n n n ≥ + + ... + . 0 1 t Logo o código que obter a igualdade na expressão acima, será dito que é um código perfeito, assim podemos concluir que o código de Hamming Hr é perfeito. 3.4 Código de Reed-Solomon O código de Reed-Salomon é um código corretor de erros, que foi desenvolvido para efetuar a correção de erros múltiplos em diversos sistemas. Este código é uma importante subclasse dos códigos de blocos não-binários BCH (BoseChaudhuri-Hocquenghem). O código de Reed-Salomon é uma forma de FEC (Forward Correction Error: procura inferir e imediatamente corrigir erros pela característica do sinal recebido) e é utilizado em diversas aplicações em comunicação digital e armazenamento, como é o caso do ADSL e comunicação via celular. Um código de Reed-Solomon é denotado como RS, com símbolos de bbits, onde n é o número total de bits por palavra do código e k é o número de bits de informação por palavra de código. CAPÍTULO 3. CÓDIGOS LINEARES 40 Por exemplo, se forem utilizados grupos de 6 bits, pode-se gerar códigos de Reed-Solomon. Um código RS − [64, 40] consisti em palavras código de 64 × 6 = 384 bits, cada uma contendo 240 bits de informação, tratados como 40 símbolos de 6 bits. Um decodificador Reed-Solomon pode corrigir até t símbolos incorretos, onde t = exemplo t = 64 − 40 2 Exemplo 3.8 n−k , 2 ou seja, pode-se corrigir então neste = 12 símbolos. (a) Dado um RS − [255, 223], então teremos, 223 bits de informação, 32 bits de correcção de erros e corrige até 16 bits errados. Teorema 3.3 Seja Am (m um natural menor do que q) um conjunto de polinômios, que tem grau no maxímo m, Am = {a0 + a1 x + ... + am xm : ai ∈ Fq }, então da aplicação ϕ : Am → Fqq p → (p (0) , p (α1 ) , . . . , p (αq−1 )) que é linear e injetora, temos que a imagem de ϕ é o código Reed-Solomon [q, m + 1, q − m]. 3.5 Considerações Finais A teoria dos códigos cresce gradativamente, junto a evolução dos meios de comunicação (telefone, celular, internet, televisão) e a cada dia se tornando mais acessível a toda sociedade. Por causa deste acesso, logo nossos professores de matemática do ensino secundário poderão instigar seus alunos a uma pesquisa sobre códigos lineares. CAPÍTULO 3. CÓDIGOS LINEARES 41 Nosso trabalho visa em relembrar conceitos de algebra e mostrar as definições de códigos lineares, para que o leitor ganhe interesse pelo assunto, para que o mesmo possa posteriormente degustar de uma leitura mais profunda. Como a teoria dos códigos é um assunto muito novo esperamos que este assunto seja tema de muitas monografias a serem escritas, pois existe muito a se descobrir. Referências Bibliográficas [1] BERLEKAMP, E. R. Key papers in the development of coding theory. IEEE Press, 1974. [2] BOLDRINI, J. L. et al. Álgebra linear. Editora Harbra Ltda, 1980. [3] CRISSAFF, Lhaylla.Uma construção algébrica de códigos geométricos. Dissertação (Mestrado). Orientador: Nicolau Corção Saldanha; coorientador: Miriam Del Milagro Abdón. Rio de Janeiro : PUC-Rio, Departamento de Matemática, 2005. [4] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna. Atual Editora, 1982. [5] GUNDLACH, B. H. História dos números e numerais. Trad. Hygino H. Domingues. São Paulo, Atual, 1992. [6] MELO, F. D. A Teoria de Galois e os Números Algébricos. Artigo (Pós-Graduação). Orientador: Trajano Pires da Nóbrega Neto. IBILCE/UNESP - Sao José do Rio Preto - SP, Brasil. [7] PLESS, V. S.; HUFFMAN, W. C. Handbook of coding theory. Elsevier, 1998. [8] SHANNON, C. E. A mathematical theory of communication. Bell System Tech. J. 27 (1948), 379-423. 42 REFERÊNCIAS BIBLIOGRÁFICAS 43 [9] VERA, Paula Fernanda. Código Binário de Golay Estendido em Espaços Poset. Monografia (Graduação). Orientador: Luciano Panek. Foz do Iguaçu: UNIOESTE-PR, Centro de Engenharias e Ciências Exatas, 2007.