ee cons
ee
te Ms CINE ee
a ae OT ees
weed SHIT pone i
prea pseu
Introdug&o a teoria de
99238 UESC
UESC
99238
ee
erwT ers TRADUGAO DA SEGUNDA EDICAO AMERICANACapitulo 1
Autématos: os métodos
e a loucura
A teoria de automatos € 0 estudo dos dispositivos de computacao abstratos, ou
“maquinas”. Antes de existirem os computadores, na década de 1930, A. Turing
estudou uma maquina abstrata que tinha todas as caracteristicas dos computa-
dores atuais, pelo menos no que se refere ao quanto eles poderiam calcular. O
objetivo de Turing era descrever com exatidao 0 limite entre o que uma maqui-
na de computacdo podia fazer e aquilo que ela nao podia fazer; suas conclusoes
se aplicam nao apenas as suas maquinas de Turing abstratas, mas também as ma-
quinas reais de hoje
Nas décadas de 1940 e 1950, tipos de maquinas mais simples, que hoje cha-
mamos “automatos finitos”, foram estudados por diversos pesquisadores. Esses
autOmatos, propostos originalmente para modelar a funcao do cérebro, se mos-
traram extremamente titeis para uma grande variedade de outros propésitos,
que mencionaremos na Seco 1.1. Também no final dos anos 50, o linguista N.
Chomsky iniciou 0 estudo de “gramaticas” formais. Embora nao sejam estrita-
mente maquinas, essas gramaticas tém relacionamentos estreitos com os auto-
matos abstratos ¢ hoje servem como a base de alguns importantes componentes
de software, incluindo algumas partes dos compiladores.
Em 1969, S. Cook estendeu o estudo de Turing do que podia e do que nao
podia ser calculado. Cook conseguiu separar os problemas que podem ser resol-
vidos de forma eficiente por computadores daqueles problemas que podem em
principio ser resolvidos mas que, na pratica, levam tanto tempo que os compu-
tadores sdo imiteis para solucionar todas as instancias do problema, exceto
aquelas muito pequenas. Os problemas dessa tiltima classe so chamados “in-
trataveis” ou “NP-dificeis” (NP-hard). E altamente improvavel que até mesmo a
melhoria exponencial na velocidade de computacao que o hardware de compu-
tadores vem alcancando (“Lei de Moore”) tenha impacto significativo sobre
nossa habilidade para resolver grandes instancias de problemas intrataveis.INTRODUCAO A TEORIA DE AUTOMATOS, LINGUAGENS E COMPUTACAO
Todos esses desenvolvimentos tedricos tém relacdo direta com aquilo que os
cientistas da computacao fazem hoje. Alguns conceitos, como automatos finitos e
certos tipos de gramiaticas formais, s4o usados no projeto e na construcao de im-
portantes componentes de software. Outros conceitos, como a maquina de Tu-
ring, ajudam a entender o que podemos esperar de nosso software. Em especial, a
teoria de problemas intrataveis nos permite deduzir se temos a chance de, ao nos
depararmos com um problema, sermos capazes de escrever um programa para re-
solve-lo (porque ele nao pertence a classe intratavel), ou se teremos de descobrir
algum modo de contornar o problema intratavel: encontrar uma aproximacao,
‘usar uma heuristica ou empregar algum outro método para limitar 0 periodo de
tempo que o programa despendera para resolver o problema.
Neste capitulo introdutorio, comegaremos com uma visao de alto nivel do
objeto de estudo da teoria dos automatos € de quais sao seus usos. Grande parte
do capitulo ¢ dedicada a uma pesquisa a respeito de técnicas de prova (ou de-
monstracao) ¢ de artificios para descobrir provas. Abordaremos as provas dedu-
tivas, a reformulacao de enunciados, as provas por contradicao, as provas por
inducao ¢ outros conceitos importantes. Uma secao final introduz os conceitos
que permeiam a teoria de automatos: alfabetos, strings ¢ linguagens.
1.1 Por que estudar a teoria de automatos?
Ha varias raz6es pelas quais o estudo de automatos ¢ complexidade é uma parte
importante do nucleo da Ciencia da Computacao. Esta secao serve para apre-
sentar ao leitor a principal motivacao, e também descreve os tpicos mais im-
portantes abordados neste livro.
1.1.1 Introducao aos automatos finitos
Osautomatos finitos constituem um modelo util para muitos elementos impor-
tantes de hardware e software. Veremos, a partir do Capitulo 2, exemplos de
como 0 conceitos sao usados. Por enquanto, vamos apenas listar alguns dos
elementos mais importantes:
1. Software para projetar e verificar o comportamento de circuitos digitais.
2. O “analisador léxico” de um compilador tipico, isto é, 0 componente do
compilador que divide o texto de entrada em unidades logicas, como
identificadores, palavras-chave e pontuacao.
3. Software para examinar grandes corpos de texto, como colecdes de pagi-
nas da Web, a fim de encontrar ocorréncias de palavras, frases ou outros
padroes.