Você está na página 1de 15

Faça um resumo estendido de cada um dos cinco assuntos diferentes estudados durante o

semestre, levando em conta minimamente para cada um deles:

1. O objeto do estudo (o que foi estudado);


2. As suas principais definições e conceitos;
3. Os seus principais resultados;
4. As suas implicações teóricas mais importantes;
5. As suas implicações práticas mais importantes;
6. O relacionamento do mesmo com demais conteúdos da disciplina e/ou com outras
disciplinas do curso;
7. A importância do mesmo para a sua formação profissional.

PROGRAMAS, MÁQUINAS E EQUIVALÊNCIAS

Programas

São o conjunto de instruções que estabelecem a sequência em que certas operações e testes
devem ser executados. Tem como objetivo manipular dados de entrada produzindo a saída
desejada. O programa possui uma estrutura de controle que define a maneira como as operações e
testes são sequenciados no tempo. Os tipos são:
- Estrutura Monolítica: programas de um único bloco com desvios arbitrários;
- Estrutura Iterativa: programas estruturados em subprogramas;
- Estrutura Recursiva: subprogramas recursivos sem comando iterativo.

Máquinas

Uma máquina é uma estrutura capaz de interpretar um programa lendo e armazenando dados, e
devolvendo-os para o meio externo. Além disso, ela é responsável por atribuir significado para os
identificadores de operação e de teste usados nos programas. Dizemos que P é um programa para
uma máquina M se todos os identificadores de operações e testes utilizados em P estiverem
definidos em M através de correspondentes funções de operações e testes.

Computação

Uma computação de um programa é uma cadeia de elementos que indicam a sequência de estados
que são assumidos por uma máquina M durante a execução de um programa P. Uma computação
pode ser finita ou infinita.

Função Computada
É a obtenção em tempo finito de uma saída a partir de uma entrada aplicando-se uma função de
entrada ao dado de entrada, executando-se a computação (finita) e aplicando-se a função de saída
ao valor final de memória. A função computada pelo programa P na máquina M é denotada por
(P,M): X->Y, onde X são os dados lidos na entrada e Y são os dados gerados na saída.

Equivalência Forte de Programas

Dois programas são ditos fortemente equivalentes se, e somente se, duas funções computadas para
P e Q coincidem para qualquer máquina M que se possa considerar. Essa relação permite analisar,
de forma comparativa, as propriedades exibidas pelos programas, como é o caso da sua
complexidade estrutural. As computações de programas fortemente equivalentes executam as
mesmas operações na mesma ordem.

Teorema 1: Seja Pi um programa iterativo. Então existe um programa monolítico Pm tal que Pm é
fortemente equivalente a Pi, ou seja, o conjunto dos programas iterativos está contido no conjunto
dos programas monolíticos.

Teorema 2: Seja Pm um programa monolítico. Então existe um programa recursivo Pr tal que Pr é
fortemente equivalente a Pm, ou seja, o conjunto dos programas monolíticos está contido no
conjunto dos programas recursivos.

Corolário: Para qualquer programa iterativo Pi existe um programa recursivo Pr tal que Pr pe
fortemente equivalente a Pi.

Teorema 3: Dado um programa recursivo Pr qualquer, não necessariamente existe um programa


monolítico Pm tal que Pm é fortemente equivalente a Pr, ou seja, podemos mostrar que existe pelo
menos um programa recursivo que, para uma determinada máquina, não apresente nenhum
programa monolítico que seja fortemente equivalente.

Teorema 4: Dado um programa monolítico Pm qualquer, não necessariamente existe um programa


iterativo Pi tal que Pi é fortemente equivalente a Pm, ou seja, podemos mostrar que existe pelo
menos um programa monolítico que, para uma determinada máquina, não apresente nenhum
programa iterativo que seja fortemente equivalente.

Equivalência de Programas em uma Máquina

Dois programas P e Q são ditos equivalentes na máquina M se, e somente se, as correspondentes
funções computadas na máquina M são iguais.
Equivalência de Máquinas

Duas máquinas são ditas equivalentes se uma pode simular a outra e vice-versa.

Verificação de Equivalência Forte de Programas

Queremos determinar se dois programas são fortemente equivalentes. Esse problema é indecidível
para programas recursivos mas é decidível para programas monolíticos (e, consequentemente,
programas iterativos também). Para isso necessitaremos de uma Máquina de Traços e instruções
rotuladas compostas.

Uma Máquina de Traços é uma máquina que gera, como saída, uma cadeia composta pelos
identificadores das operações executadas durante a computação. Ela produz um histórico da
ocorrência das operações no programa que está sendo executado, e a isso damos o nome de traço.

Teorema 5: Sejam P e Q dois programas de tipos quaisquer. Então P é fortemente equivalente a Q


se, e somente se, eles são equivalentes em qualquer Máquina de Traços.

Corolário: P é fortemente equivalente a Q se, e somente se, para toda Máquina de Traços M, as
computações de programas fortemente equivalentes executam as mesmas operações na mesma
ordem.

Uma instrução rotulada composta é uma instrução que combina testes e operações, e dispensa,
portanto, a necessidade de uso de instruções distintas para executar operações e desviar o fluxo do
controle.

Rótulos são consistentes se a sua execução pode (ou não) percorrer as mesmas operações na
mesma ordem. Rótulos são fortemente equivalentes se a sua execução percorre (ou não) as
mesmas operações na mesma ordem (é uma noção mais forte do que apenas a de rótulos
consistentes, pois leva em conta o que acontece na instrução corrente e em todas as seguintes).

Considerando o par formado pelos rótulos iniciais dos programas, na verificação de equivalência
forte de programas monolíticos, o algoritmo para com resposta afirmativa quando não forem gerados
novos pares e para com resposta negativa quando for gerado pelo menos um novo par que não é
consistente.

A união disjunta de dois conjuntos A e B é o conjunto formado pelos elementos de A e de B,


devidamente indexados com os nomes dos conjuntos de origem.Diferentemente da união simples,
na união disjunta os elementos repetidos não são representados por uma única cópia. Caso existam
elementos repetidos em ambos os conjuntos todos eles deverão fazer parte de A união disjunta com
B, porém devidamente identificados com o nome do conjunto de origem.

A verificação da equivalência forte de Q e R corresponde à verificação da equivalência forte de Pq e


Pr.

MÁQUINAS UNIVERSAIS

Introdução

Máquina Universal é uma máquina que permite a representação de qualquer algoritmo na forma de
um programa para a mesma. As evidências que permitem caracterizar uma máquina como sendo
universal são:
- Interna: quaisquer extensões ou variações não aumentam o seu poder computacional;
- Externa: equivalência com outros modelos que representam a noção de algoritmo.

Hipótese de Church

Estabelece uma equivalência entre a noção de algoritmo e Máquina de Turing. A hipótese não pode
ser provada porque a noção de algoritmo é informal. A necessidade por uma definição formal de
algoritmo é grande pois a partir dela é que é possível investigar a existência de algoritmos que
resolvem certos problemas e calculam certas funções além de poder demonstrar certas propriedades
dos mesmos.
- “Qualquer função computável pode ser processada por uma Máquina de Turing”;
- “A Máquina de Turing é o dispositivo de computação mais genérico que existe”;
- “Tudo que é computável é computável por uma Máquina de Turing”;
- “A capacidade de computação apresentada pela Máquina de Turing é o limite máximo
que pode ser atingido por quaisquer dispositivos de computação”;
- “Qualquer outra forma de expressar algoritmos terá, no máximo, a mesma capacidade
computacional da Máquina de Turing”.

Codificação de Dados Estruturados

O Teorema fundamental da aritmética diz que qualquer número inteiro maior que 1 pode ser
decomposto de forma unívoca, no produto de potências de números primos.
Máquina Norma

É uma máquina de registradores onde cada registrador armazena um único número natural. Uma
máquina Norma pode ser simulada por uma máquina de dois registradores. A Máquina Norma pode
simular uma pilha através de dois registradores.

Máquina de Turing

A Máquina de Turing é aceita como a formalização da noção informal de algoritmo e possui, no


mínimo, o mesmo poder computacional de qualquer computador moderno ou outro modelo de
computação. Ela procura reproduzir uma pessoa trabalhando na solução de um problema:
- possui um instrumento para escrever e outro para apagar;
- uma folha de papel dividida em regiões;
- os dados iniciais estão na folha de papel.
Durante o trabalho:
- um novo símbolo pode ser lido;
- um símbolo existente pode ser alterado;
- os olhos podem se deslocar de região;
- a ação a ser executada depende do símbolo lido e do estado mental do trabalhador;
- estados iniciais e finais indicam começo e término das atividades.

Algumas simplificações:
- a folha de papel tem dimensão infinita;
- ela é organizada de forma unidimensional e dividida em células;
- o conjunto de símbolos é finito;
- o conjunto de estados mentais é finito;
- apenas um símbolo é lido de cada vez;
- a atenção se desloca apenas para as células adjacentes.

Critérios de aceitação:
- Estado final: w é aceita se, após a parada, M se encontra em um estado final;
- Entrada: w é aceita imediatamente após a entrada de M em um estado final;
- Parada: w é aceita se M para e rejeitada se M entra em loop infinito.

Uma linguagem L é dita geral e corresponde à maior classe de linguagens que pode ser definida
sobre um alfabeto sem garantias de que possa ser reconhecida mecanicamente.

Uma linguagem L é dita recursivamente enumerável se existe uma Máquina de Turing M tal que M
para e aceita a entrada se w pertence a L, e para e rejeita ou entra em loop se w não pertence a L.
Uma linguagem é dita recursiva se existe uma Máquina de Turing M tal que M para e aceita a
entrada se w pertence a L, e para e rejeita a entrada se w não pertence a L.

Toda linguagem recursiva é também recursivamente enumerável, mas existem linguagens que são
recursivamente enumeráveis que não são recursivas.
Toda linguagem recursivamente enumerável é também geral mas existem linguagens que são gerais
que não são recursivamente enumeráveis.

Máquinas de Turing podem ser vistas como dispositivos que computam funções.
Uma função é computável se, e somente se, existe uma Máquina de Turing que computa f. Uma
função computável é total se existe uma Máquina de Turing que computa f e que sempre para para
qualquer entrada.

Teorema 1: Toda Máquina de Turing pode ser simulada por alguma Máquina Norma.
Se M é uma Máquina de Turing então existe um programa monolítico P que simula M na máquina
Norma.

Teorema 2: Toda Máquina Norma pode ser simulada por alguma Máquina de Turing. É suficiente
considerar programas monolíticos e as Máquinas de Turing que computam as mesmas funções,
além de considerar uma Máquina Norma com apenas dois registradores.

Máquina de Post

É um dispositivo que usa uma estrutura de dados do tipo fila para a entrada, saída e memória de
trabalho. Possui uma variável X que representa a fila e um programa associado, que é uma
sequência finita de instruções, representada como um diagrama de fluxos no qual cada vértice é
uma transição. As instruções podem ser de partida, parada, desvio e atribuição.

Teorema 3: Seja uma M uma Máquina de Turing. Então existe uma Máquina de Post M’ que simula
M.

Teorema 4: Seja M uma Máquina de Post. Então existe uma Máquina de Turing M’ que simula M.

Máquina com Pilhas

A Máquina com pilhas diferencia-se das Máquinas de Turing e de Post principalmente pelo fato de
possuir uma memória de entrada separada das memórias de trabalho e de saída.
A classe de linguagens representadas por Máquinas de Pilhas depende da quantidade de pilhas que
ela possui:
- Nenhuma pilha: corresponde ao autômato finito, capaz de reconhecer a classe das
linguagens regulares;
- Uma pilha: corresponde ao autômato de pilha, capaz de reconhecer a classe das
linguagens livres de contexto;
- Duas pilhas: corresponde à Máquina de Turing capaz de aceitar a classe das
linguagens recursivamente enumeráveis;
- Três ou mais pilhas: podem sempre serem simuladas por uma máquina com apenas
duas pilhas.

Autômato com Duas Pilhas

É uma Máquina similar à Máquina com Duas Pilhas, e no lugar de um diagrama de fluxos usa-se um
diagrama de estados. Seus componentes são uma fita de entrada, duas pilhas e uma máquina de
estados. Para uma dada cadeia de entrada, um Autômato com Duas Pilhas pode parar e aceitar,
parar e rejeitar, ou ainda entrar em loop com a mesma.

Teorema 5: Toda Máquina de Turing pode ser simulada por algum Autômato com Duas Pilhas.

Teorema 6: Todo Autômato com Duas Pilhas pode ser simulado por alguma Máquina de Turing.

Variações das Máquinas de Turing

As variações (extensões e restrições) das Máquinas de Turing não possuem poder computacional
diferente da Máquina de Turing Básica.
Extensões:
- Fita de entrada com múltiplas trilhas;
- Não-determinismo;
- Múltiplas fitas de entrada.
Restrições:
- Nunca escrever brancos na fita de entrada;
- Fita limitada à esquerda.

A complexidade no tempo ou tempo de execução de uma Máquina de Turing M com uma entrada w
é definida como a quantidade de movimentos que M executa com a entrada w até parar.
A complexidade no tempo ou tempo de execução de uma Máquina de Turing M é definida como a
função T(n) que representa a quantidade de movimentos que são executados quando são
consideradas todas as possíveis cadeias w de comprimento n.
Problemas tratáveis são aqueles que possuem tempo de execução polinomial e problemas
intratáveis são aqueles que possuem tempo de execução exponencial.

DECIDIBILIDADE

Introdução

Decidibilidade é o estudo dos problemas codificados como linguagens e as Máquinas de Turing são
usadas como representação formal da noção de algoritmo. A prova da existência (ou não existência)
de um algoritmo é equivalente à demonstração da existência (ou não existência) de uma Máquina de
Turing que resolve o mesmo problema.
Um problema é dito um problema de decisão quando ele é transformado num problema equivalente
cujas respostas são apenas sim ou não.
Um problema é dito decidível se a linguagem que representa as instâncias afirmativas do problema
forma uma linguagem recursiva. Caso contrário o problema é dito indecidível. Isso quer dizer que
existe uma Máquina de Turing que sempre para para qualquer entrada fornecida ao problema.
Problemas de decisão que formam linguagens recursivamente enumeráveis e não recursivas são
aceitos apenas por Máquinas de Turing que entram em loop para pelo menos uma instância do
problema de decisão cuja resposta é negativa.
Problemas de decisão que formam linguagens não-recursivamente enumeráveis não são aceitos por
nenhuma Máquina de Turing que pare sempre que as instâncias são afirmativas.
Relações:
- Problema solucionável = Linguagem recursiva
- Problema não solucionável = Linguagem não-recursiva
- Problema parcialmente solucionável (ou computável) = Linguagem recursivamente
enumerável
- Problema totalmente insolúvel ( ou não-computável) = Linguagem não-recursivamente
enumerável

Problemas Decidíveis

Estudar decidibilidade ajuda a identificar problemas insolúveis e evita o desperdício de tempo e


esforço com a tentativa de resolução de problemas insolúveis. A decidibilidade aponta para
possibilidades de simplificações ou alterações do problema original, a fim de que ele se torne
solúvel, além de ampliar a sua compreensão sobre a natureza, as possibilidades e os limites da
computação. Alguns problemas decidíveis relevantes são listados a seguir:
- Problema Aafd: aceitação em autômatos finitos determinísticos sem transições em
vazio;
- Problema Aafn: aceitação em autômatos finitos não-determinísticos com transições em
vazio;
- Problema Aexr: geração de cadeia por expressão regular;
- Problema Vafd: vacuidade da linguagem reconhecida por autômato finito
determinístico;
- Problema EQafd: igualdade das linguagens reconhecidas por dois autômatos finitos
determinísticos;
- Problema Aglc: geração de cadeia por gramática livre de contexto;
- Problema Vglc: vacuidade da linguagem gerada por uma gramática livre de contexto;
- Problema EQglc: igualdade das linguagens geradas por duas gramáticas livres de
contexto;
- Problema LLC: determinar se uma cadeia pertence a uma determinada linguagem livre
de contexto L (análise sintática).

Linguagem Ld

O método diagonal de Cantor mostra como obter um conjunto diferente de todos os conjuntos de
uma dada coleção de conjuntos, seja ela finita ou infinita. Cada um dos conjuntos dessa coleção
pode conter um número finito ou infinito de elementos e o número de elementos usados para
caracterizar tais conjuntos também pode ser finito ou infinito.
Uma Máquina de Turing M pode ser codificada por uma cadeia w sobre um alfabeto de M. A
linguagem Ld contém as cadeias que, quando consideradas como codificações de Máquinas de
Turing, são tais que elas não são aceitas pelas respectivas Máquinas de Turing que elas
representam. Utiliza-se o método diagonal de Cantor para demonstrar isso.

Teorema 1: Ld não é recursivamente enumerável. A prova é feita supondo uma Máquina de Turing M
que aceita Ld.

Complemento de Linguagens

Teorema 2: Se L é recursiva, então o complemento de L também é recursivo.

Teorema 3: L e L complemento são recursivamente enumeráveis se e somente se L é recursiva.


- Método 1: construir M com duas fitas para simular, de forma intercalada, a operação de
M1 na primeira fita e de M2 na segunda fita;
- Construir M com uma única fita a partir da composição não-determinística de M1 e de
M2.
O complemento de um problema solucionável é sempre um problema solucionável.
O complemento de um problema estritamente parcialmente solucionável é totalmente insolúvel.
O complemento de um problema totalmente insolúvel pode ser estritamente parcialmente
solucionável ou totalmente insolúvel.

Máquina de Turing Universal

Uma Máquina de Turing Universal U é uma MT que aceita como entrada a descrição de uma outra
MT e a entrada que essa outra máquina deve processar. Ela simula a máquina descrita e produz
como resultado o mesmo resultado que a máquina simulada produziria. A máquina é universal
porque é capaz de executar qualquer algoritmo.
A MTU possui quatro fitas, onde a primeira fita contém a descrição da máquina a ser simulada e a
sua correspondente entrada. A segunda fita é usada para simular a fita da máquina a ser simulada.
A terceira fita é usada para representar o estado de M e a quarta fita é usada para rascunho.
Na simulação de M com U, U para e aceita se M para e aceita; U para e rejeita se M para e rejeita, e
U entra em loop infinito se M entra em loop infinito.

Linguagem Lu

A linguagem universal Lu é uma linguagem onde existe uma MT que aceita a cadeia que representa
a codificação dessa mesma MT.

Teorema 4: Lu é RE não-recursiva. O complemento de Lu é não-RE

Teorema 5: O complemento de Ld é RE não-recursivo. Ld é não-RE

Redutibilidade

É uma técnica usada para determinar a decidibilidade de um problema a partir de outro cuja natureza
é conhecida. Uma redução é uma maneira de converter um problema em outro de tal forma que uma
solução para o segundo problema possa ser usada para resolver o primeiro problema.
Uma redução de P1 para P2 é uma função total f que mapeia sentenças de P1 para sentenças de P2
e também pode ser vista como uma MT (algoritmo) que mapeia sentenças de P1 em sentenças de
P2.

Teorema 6: Se f é uma redução de P1 para P2, então:


- Se P1 é indecidível, então P2 também é indecidível; Se P2 é decidível, então P1
também é decidível;
- Se P1 é não-RE, então P2 também é não-RE; Se P2 é RE, então P1 também é RE.
Problema da Parada

O problema da parada corresponde ao problema de determinar se um programa qualquer para com


uma entrada qualquer.

Teorema 7: PARAmt é indecidível através de redução. Basta construir uma MT que simula M com a
entrada w. Se M aceita w, M’ aceita w. Se M rejeita w ou entra em loop infinito, M’ entra em loop
infinito. Como Lu é indecidível, PARAmt também é indecidível.
PARAmt é RE. Basta simular M com a entrada w e gerar, na saída, o mesmo resultado da
simulação.

Linguagens Le e Lne

Considerando (M) como a codificação de uma MT M sobre o alfabeto {0,1}, Le é o conjunto das
codificações de M cuja linguagem aceita por ela é vazia, e Lne é o conjunto das codificações de M
cuja linguagem aceita por ela é não-vazia. Le = complemento de Lne.

Teorema 1: Lne é RE. Basta construir uma MT M que aceita como entrada a codificação de outra MT
M’. Se M’ aceita alguma cadeia, M adivinha essa cadeia e aceita M’. Se M’ não aceita nenhuma
cadeia, então nenhuma cadeia, então não há cadeia que conduza à aceitação em M’ e M não aceita
M’.

Teorema 2: Lne é não-recursiva. Faz-se uma redução de Lu para Lne através de um algorito que
efetua a redução de Lu para Lne para provar que não é recursiva.

Teorema 3: Le é não-RE. Supõe-se que Le é RE e prova-se por contradição usando o teorema


anterior.

Teorema de Rice

O Teorema de Rice diz que qualquer propriedade não-trivial das linguagens recursivamente
enumeráveis é indecidível.
Propriedade é uma condição que deve ser satisfeita por um grupo de linguagens.
Não-trivial é uma condição que é satisfeita por pelo menos uma linguagem e que não é satisfeita por
pelo menos uma linguagem.
As linguagens RE serão representadas pelas MTs que as aceitam, pois essas máquinas são
descrições finitas de tais linguagens.
Teorema 1: Qualquer propriedade não-trivial das linguagens recursivamente enumeráveis é
indecidível. Basta fazer uma redução de Lu para Mp por meio de uma Máquina Universal.

Autômato Linearmente Limitado

Um Autômato Linearmente Limitado (ALL) também conhecido como Máquina de Turing com Fita
Limitada é uma Máquina de Turing na qual o tamanho da fita de entrada é limitada ao comprimento
da cadeia a ser analisada. É um modelo bastante próximo dos computadores reais modernos e é
capaz de decidir Aafd, Aglc Vafd e Vglc. Reconhece a classe das linguagens sensíveis ao contexto.

Teorema 1: Problema em Autômatos Linearmente Limitados Determinísticos. Aall é uma linguagem


decidível.

Problemas Indecidíveis e Histórias de Computação

Uma história de computação de uma MT M sobre uma cadeia de entrada w é a sequência de


configurações que M assume durante a análise de w.
Se M é determinística, então existe uma única história de computação para w. Se M é
não-determinística então podem existir várias histórias de computação para w.

Teorema 2: Vacuidade da linguagem aceita por um Autômato Linearmente Limitado. Vall é uma
linguagem indecidível.

Teorema 3: Totalidade da linguagem gerada por uma gramática livre de contexto. TODASglc é uma
linguagem indecidível.

PCP

O Problema da Correspondência de Post é um problema combinacional que envolve a manipulação


(emparelhamento) de cadeias de caracteres e demonstra-se ser indecidível. Ele é usado para
demonstrar a indecidibilidade de vários outros problemas. A estratégia da demonstração é:
- Reduzir Lu para uma versão modificada do PCP (MPCP);
- Reduzir MPCP para PCP;
- Como Lu é indecidível, MPCP e PCP são também indecidíveis.

Problemas Relacionados com GLCs e LLCs

Teorema 1: Determinar se uma gramática livre de contexto G qualquer é ambígua. AMBglc é


indecidível. Prova-se por redução a partir de PCP.
Teorema 2: Seja La uma linguagem para a lista A de uma instância PCP P sobre o alfabeto. Então o
complemento de La é também livre de contexto.

COMPLEXIDADE

Motivação

Certos problemas decidíveis podem demandar quantidades exageradas de tempo e espaço


inviabilizando soluções que tenham interesse prático. A teoria da decidibilidade classifica os
problemas em decidíveis e indecidíveis. Já a teoria da complexidade classifica os problemas
decidíveis em tratáveis e intratáveis.

Medição do Tempo de Execução

Seja M uma MT determinística que para sobre todas as entradas. O tempo de execução ou
complexidade de tempo de M é a função f: N->N onde n é o comprimento da entrada w e f(n) é o
número máximo de transições que M executa ao processar qualquer entrada de comprimento n.
Seja M uma MT não-determinística que para sobre todas as entradas. O tempo de execução ou
complexidade de tempo de M é a função f: N->N onde n é o comprimento da entrada w e f(n) é o
número máximo de transições que M executa em qualquer ramo da sua computação ao processar
qualquer entrada de comprimento n.
Na teoria da complexidade, diferentemente da teoria da decidibilidade, a escolha do modelo de
computação pode resultar em complexidades de tempo diferentes para uma mesma linguagem.

A notação O-grande caracteriza funções de acordo com suas taxas de crescimento. Funções
diferentes com as mesmas taxas de crescimento tem a mesma notação O-grande.

A Classe P

P é a classe das linguagens que podem ser decididas em tempo polinomial por uma MT
determinística. A classe P não depende do modelo de computação que esteja sendo usado, desde
que esse seja polinomialmente equivalente à Máquina de Turing determinística e corresponde
aproximadamente à classe de problemas que são possíveis de serem solucionados em um
computador moderno, ou seja, ela apresenta relevância prática.
Sempre que um algoritmo de tempo polinomial é descoberto para um algoritmo que até então
parecia requerer apenas tempo exponencial, isso significa que foi obtido algum entendimento mais
profundo sobre a natureza do problema e sobre a forma de se conseguir uma solução para o mesmo
e também significa que novas reduções de tempo podem ser obtidas na medida em que esse
entendimento for aprofundado, até finalmente alcançar uma implementação suficientemente rápida
para ser executada em computadores modernos.

Teorema 1: Problema CAM. CAM pertence a P.

A Classe NP

NP é a classe das linguagens que podem ser decididas em tempo polinomial por uma MT
não-determinística. A classe NP é insensível ao modelo de computação não-determinístico
selecionado uma vez que eles são todos polinomialmente equivalentes, e contém muitos problemas
de interesse prático.

Teorema 2: Problema CAMHAM. CAMHAM pertence a NP.

Um verificador para uma linguagem analisa uma possível solução para o problema e informa se ela
de fato é uma solução ou não. NP é a classe das linguagens que tem verificadores de tempo
polinomial.

Teorema 3: L possui um verificador de tempo polinomial se, e somente se, L é decidida por uma MT
não-determinística de tempo polinomial.

Teorema 4: Problema CLIQUE. CLIQUE pertence a NP.

Teorema 5: Problema SOMAsubc. SOMAsubc pertence a NP.

Como toda linguagem que pode ser decidida por uma MT determinística pode também ser decidida
por uma MT não-determinística, a classe P está contida em NP. Ainda não sabermos se P=NP ou
P!=NP pois para isso precisaríamos provar que todo algoritmo de tempo exponencial tem um
equivalente de tempo polinomial, ou que existe um algoritmo de tempo exponencial que não pode
ser resolvido em tempo polinomial.

Redutibilidade em Tempo Polinomial

Para provar que L pertence a P basta apresentar uma MT determinística de tempo polinomial que
decide L ou efetuar uma redução para outro problema pertencente a P.
Para provar que L pertence a NP basta apresentar uma MT não-determinística de tempo polinomial
que decide L, ou apresentar um verificador de tempo polinomial para L.
Não existe um método conhecido para provar que L não pertence a P, podemos apenas exibir fortes
evidências de que isso seja verdade.
Uma função f é dita função computável em tempo polinomial se existir uma MT determinística de
tempo polinomial que, ao processar a entrada w, para com exatamente f(w) gravada na sua fita.
Uma linguagem A é dita redutível em tempo polinomial à linguagem B se existir uma função
computável em tempo polinomial f tal que w pertence a A se, e somente se, f(w) pertence a B.

Teorema 1: Reduções de tempo polinomial são importantes pois o limite imposto no número de
transições executadas pela máquina que efetua a redução limita também o comprimento da cadeia
que é gerada para a máquina decisora. Essa propriedade garante que a combinação de uma
redução de tempo polinomial com um algoritmo de tempo polinomial produz um outro algoritmo de
tempo polinomial.

Teorema 2: A composição de reduções polinomiais é também uma redução polinomial


(transitividade).