Teoria da Computação Professor: Ciro Meneses Santos Unipac – Computação Bibliografia:...

30
Teoria da Computaçã Teoria da Computaçã o o Professor: Ciro Meneses Santos Unipac – Computação Unipac – Computação Bibliografia: ---------------- SUDKAMP, Thomas A.. Languages and machines: an introduction. New York: Addison - Wesley, 1997. SIPSER, M - Introduction to the Theory of Computation - ReferênciaPWS Publishing Company - Ano1997 HOPCROFT, John E. et al. Introdução à teoria dos autômatos linguagens e computação. Rio de Janeiro: Campus, 2002. MENEZES, Paulo Fernando Blauth. Linguagens formais e autômatos. 4. Porto Alegre: Editora Sagra Luzzatto, 2002.

Transcript of Teoria da Computação Professor: Ciro Meneses Santos Unipac – Computação Bibliografia:...

Page 1: Teoria da Computação Professor: Ciro Meneses Santos Unipac – Computação Bibliografia: ---------------- SUDKAMP, Thomas A.. Languages and machines: an introduction.

Teoria da ComputaçãTeoria da Computaçãoo

Professor: Ciro Meneses Santos

Unipac – ComputaçãoUnipac – Computação

Bibliografia:----------------SUDKAMP, Thomas A.. Languages and machines: an introduction. New York: Addison - Wesley, 1997. SIPSER, M - Introduction to the Theory of Computation - ReferênciaPWS Publishing Company - Ano1997HOPCROFT, John E. et al. Introdução à teoria dos autômatos linguagens e computação. Rio de Janeiro: Campus, 2002. MENEZES, Paulo Fernando Blauth. Linguagens formais e autômatos. 4. Porto Alegre: Editora Sagra Luzzatto, 2002.

Page 2: Teoria da Computação Professor: Ciro Meneses Santos Unipac – Computação Bibliografia: ---------------- SUDKAMP, Thomas A.. Languages and machines: an introduction.

Decidibilidade, computabilidade e Decidibilidade, computabilidade e ComplexidadeComplexidade

O objetivo do estudo da decidibilidade de problemas é investigar a existência ou não de algoritmos que solucionem determinada classe de problemas, evitando a pesquisa de soluções inexistentes.A abordagem apresentada concentra-se nos problemas com respostas binárias do tipo sim/não. Na prática, qualquer problema pode ser tratado equivalentemente como um problema de decisão. Um problema de decisão é conjunto de perguntas cujas respostas são sim/não.

DecidibilidadeDecidibilidade

Page 3: Teoria da Computação Professor: Ciro Meneses Santos Unipac – Computação Bibliografia: ---------------- SUDKAMP, Thomas A.. Languages and machines: an introduction.

Um problema é decidível (tratável ou não) se e somente se ele é resolvível por um algoritmo, para qualquer entrada pertencente ao seu domínio, caso contrário ele é um problema indecidível.A partir das definições acima, podemos notar claramente a relação entre problemas decidíveis e indecidíveis com conjuntos recursivos e recursivamente enumeráveis; ou seja, um problema é decidível se o conjunto de soluções das diversas instâncias deste problema é um conjunto recursivo, e indecidível caso tal conjunto seja recursivamente enumerável. Assim sendo, torna-se evidente que a questão da decidibilidade pode ser tratada formalmente através dos modelos que compõem a Teoria das Linguagens e Autômatos

Decidibilidade, computabilidade e Decidibilidade, computabilidade e ComplexidadeComplexidade

Page 4: Teoria da Computação Professor: Ciro Meneses Santos Unipac – Computação Bibliografia: ---------------- SUDKAMP, Thomas A.. Languages and machines: an introduction.

A classe dos problemas indecidíveis é significativamente representada pelo “HALTING PROBLEM” (problema da parada) que consiste em: “Dado uma procedure Z e uma entrada X, decidir (determinar) se Z termina quando aplicado a X. A indecidibilidade deste problema é extremamente útil para demonstrar a indecidibilidade de outros problemas através da redução destes para o “halting problem”

Decidibilidade, computabilidade e Decidibilidade, computabilidade e ComplexidadeComplexidade

Page 5: Teoria da Computação Professor: Ciro Meneses Santos Unipac – Computação Bibliografia: ---------------- SUDKAMP, Thomas A.. Languages and machines: an introduction.

Formalismos conhecidos como propósitos (ou princípios) da Teoria da Computação. Tais formalismos tem sido explorados largamente na Ciência da Computação, onde servem como modelos na solução de diversos problemas práticos. Dentre os formalismos mais importantes, podemos citar:• Máquinas de Turing (Turing, 1936);• Gramáticas - (Chomsky, 1959);• Algoritmos de Markov (Markov, 1951);• Lambda Calculus (Church, 1941);• Sistemas Post e Sistemas de Produção (Emil Post,

1936);• Funções Recursivas (Kleene, 1936).

Decidibilidade, computabilidade e Decidibilidade, computabilidade e ComplexidadeComplexidade

Page 6: Teoria da Computação Professor: Ciro Meneses Santos Unipac – Computação Bibliografia: ---------------- SUDKAMP, Thomas A.. Languages and machines: an introduction.

Uma solução para um problema de decisão é um procedimento eficiente que determina a resposta para cada pergunta do conjunto.Um problema de decisão é não decidível se não existir um algoritmo que resolva o problema.Uma MT pode ser usada como solução em problemas de decisão pela capacidade de retornarem respostas binárias.

Problema de decisãoProblema de decisão

• Um problema de decisão P é um conjunto de perguntas cujas respostas são sim ou não.

• Uma solução determina respostas para todas as perguntas p do conjunto P.

Page 7: Teoria da Computação Professor: Ciro Meneses Santos Unipac – Computação Bibliografia: ---------------- SUDKAMP, Thomas A.. Languages and machines: an introduction.

1. Construir uma representação do problema2. Construir uma MT para resolver o problema.

ProblemasProblemas

Problema: Determinar se um número natural é primo

Solução de problemas de decisão por MT

1. Representação:conjunto de todos os números naturaisaceita: todos os números naturais e primos

2. Construir uma MT que reconhece um número natural primo.P0: é 0 um número primo?P1: é 1 um número primo?P2: é 2 um número primo?

Page 8: Teoria da Computação Professor: Ciro Meneses Santos Unipac – Computação Bibliografia: ---------------- SUDKAMP, Thomas A.. Languages and machines: an introduction.

ProblemasProblemas

Problema: Determinar se um conjunto de números e menor que 15.

1. Representação:conjunto de todos os números naturaisaceita: todos os números naturais menor que 15

2. Construir uma MT que reconhece um número natural menor que 15.P0: é 0 um número menor que 15?P1: é 1 um número menor que 15?P2: é 2 um número menor que 15?

Page 9: Teoria da Computação Professor: Ciro Meneses Santos Unipac – Computação Bibliografia: ---------------- SUDKAMP, Thomas A.. Languages and machines: an introduction.

ProblemasProblemas

Problema: Determinar se um conjunto de moedas (de 5, 10 e 25 centavos) contém um subconjunto que totalize 30 centavos.1. Representação:

Um conjunto de moedas será representada por um string de {n,d,q}.aceita: {nq, ddd, nndd, nnnnd, nnnnnn}

2. Construir uma MT que reconhece os conjuntos que totalize 30 centavos.P0: é {n} igual a 30 centavos?P1: é {ndq}igual a 30 centavos?P2: é {ddd}igual a 30 centavos?

Page 10: Teoria da Computação Professor: Ciro Meneses Santos Unipac – Computação Bibliografia: ---------------- SUDKAMP, Thomas A.. Languages and machines: an introduction.

AlgoritmoAlgoritmo

O que é um algoritmo?

Um algoritmo e um método, procedimento mecânico, com as seguintes características:

Completo: Produz uma resposta SIM ou NÃO para cada pergunta do problema p P.Mecânico: é um conjunto de instruções que não requerem informações adicionais ou adivinhações.Deterministico: Sempre produz a mesma resposta para a mesma entrada p P.

Page 11: Teoria da Computação Professor: Ciro Meneses Santos Unipac – Computação Bibliografia: ---------------- SUDKAMP, Thomas A.. Languages and machines: an introduction.

Classes de ProblemasClasses de Problemas

Problema decidível:Um problema é dito decidível se existe um algoritmo que solucione o problema tal que sempre pára para qualquer entrada, com uma resposta afirmativa (ACEITA) ou negativa (REJEITA).

Problema parcialmente decidível:Um problema e dito parcialmente decidível (parcialmente computável) se existir um aalgoritmo que solucione o problema tal que pare quando a resposta é afirmativa (ACEITA). Entretanto, quando a resposta for negativa, o algoritmo pode parar ou permanecer indefinidamente em loop.

Page 12: Teoria da Computação Professor: Ciro Meneses Santos Unipac – Computação Bibliografia: ---------------- SUDKAMP, Thomas A.. Languages and machines: an introduction.

Classes de ProblemasClasses de Problemas

Problema Insolúvel ou Não computável:Um problema é dito insolúvel se não existe m algoritmo que solucione o problema tal que pare para qualquer entrada, com uma resposta afirmativa (ACEITA) ou negativa (REJEITA).

É importante observar que alguns problemas não-devidível são parcialmente devidível.Para qualquer algoritmo que solucione um problema parcialmente decivível, sempre existe pelo menor um dado de entrada que faz com que o algoritmo fique em “loop”.

Page 13: Teoria da Computação Professor: Ciro Meneses Santos Unipac – Computação Bibliografia: ---------------- SUDKAMP, Thomas A.. Languages and machines: an introduction.

Universo de Todos os ProblemasUniverso de Todos os Problemas

Alguns problemas não decidível são parcialmente decidível. A união das Classes Decidível, Parcialmente Decidível e Não decidível é o Universo de todos os problemas:

Todo problema indecidível e parcialmente decidível.A Classe dos Parcialmente decidível contém: a Classe dos decidível e parte da Classe dos não decidivel.Existem problemas não-decidível que possuem solução parcial.Os problemas não decidível não possuem solução total nem parcial.

Page 14: Teoria da Computação Professor: Ciro Meneses Santos Unipac – Computação Bibliografia: ---------------- SUDKAMP, Thomas A.. Languages and machines: an introduction.

Universo de Todos os ProblemasUniverso de Todos os Problemas

Decidível Não-decidível

ParcialmenteDecidível

CompletamenteInsolúveis

Conputável Não Computável

Page 15: Teoria da Computação Professor: Ciro Meneses Santos Unipac – Computação Bibliografia: ---------------- SUDKAMP, Thomas A.. Languages and machines: an introduction.

Redução de Problemas:Redução de Problemas:Redutibilidade:Redutibilidade:

Um problema de decisão em P é redutível a um problema em P’ se existe uma MT que para qualquer pi P gera um outro problema p’i P’.

A solução de p’i pode ser usada para resolver pi

Redução é uma estratégia muito usada para solucionar problemas novos

Um problema novo pode ser reduzido a uma problema cuja solução já é conhecida ou que já possua um algoritmo para solucioná-la.

Se um problema P é não-decidível e P possue uma redução para P’ então P’ também é não decidível.

Page 16: Teoria da Computação Professor: Ciro Meneses Santos Unipac – Computação Bibliografia: ---------------- SUDKAMP, Thomas A.. Languages and machines: an introduction.

Redutibilidade:Redutibilidade:

Problema A

Reduçãoatravés de

uma MT

Problema B

Page 17: Teoria da Computação Professor: Ciro Meneses Santos Unipac – Computação Bibliografia: ---------------- SUDKAMP, Thomas A.. Languages and machines: an introduction.

Redutibilidade:Redutibilidade:

Sejam A e B dois problemas de decisão. Suponha, que é possível modificar “reduzir” o probelma A de tal forma que ele se porta como um caso do problema B.

Se A é não decidível (não-computável), então como A é um caso de B, conclui-se que B também é não decidível.

Se B é decidível (computável ) então, como A é um caso de B, conclui-se que A também e computável. Se A é decidível então como A é um caso de B, conclui-se que parte de B que pertençe a A e decidível, entretanto o restante de B não se pode garantir.

Page 18: Teoria da Computação Professor: Ciro Meneses Santos Unipac – Computação Bibliografia: ---------------- SUDKAMP, Thomas A.. Languages and machines: an introduction.

História da ComputabilidadeHistória da Computabilidade

A idéia de se ter um algoritmo, receita para se desenvolver uma determinada tarefa, existe a muitos anos.

Durante anos seguidos, as pessoas acreditavam que se um determinado problema fosse precisamente declarado, com esforço suficiente, uma solução poderia eventualmente ser encontrada (ou senão, poderia ser provado que não havia solução).

Acreditava-se que nenhum problema era tão difícil, que jamais poderia ser resolvido.

Page 19: Teoria da Computação Professor: Ciro Meneses Santos Unipac – Computação Bibliografia: ---------------- SUDKAMP, Thomas A.. Languages and machines: an introduction.

David Hilbert David Hilbert

O matemático David Hilbert (1862 - 1943) acreditava que todos os problemas poderiam ser precisamente formulados em um sistema matemático formal, em termos de declarações que seriam falsas ou verdadeiras.Se o objetivo de Hilbert fosse atingido, então qualquer problema bem definido (declarado com precisão) poderia ser resolvido simplesmente pela execução de um algoritmo.Se esta tese fosse verdadeira, o fracasso na resolução de um problema seria devido à escolha insuficiente de hipóteses ou a um raciocínio errado.

Page 20: Teoria da Computação Professor: Ciro Meneses Santos Unipac – Computação Bibliografia: ---------------- SUDKAMP, Thomas A.. Languages and machines: an introduction.

Teorema de GodelTeorema de Godel

Uma das primeiras descobertas nesta linha deve-se a Kurt Godel que em 1931 sugeriu um Teorema da não-completude. (“Incopleteness Theorem”). Entre outras coisas, ele mostrou que não existe algoritmo cujas entradas declaradas sejam números inteiros e cuja saída mostre se esta declaração é verdadeira ou não.

Nesse teorema, um sistema de axiomas é dito completo, quando todo teorema é verdadeiro ou falso. Se existir um sistema de axiomas consistente (quando os axiomas não entrarem em contradição com outros axiomas) existirá então, teoremas que poderão provar que são falsos e teoremas que poderão provar que são verdadeiros.

Page 21: Teoria da Computação Professor: Ciro Meneses Santos Unipac – Computação Bibliografia: ---------------- SUDKAMP, Thomas A.. Languages and machines: an introduction.

Teorema de Godel Teorema de Godel

Há também os que não podem provar nem que são verdadeiros ou falsos. Neste caso, o sistema é dado como incompleto, no sentido de que existem coisas que não podem ser provadas em verdadeiras ou falsas.

Este teorema parte da premissa de que existe verdadeiros e falsos, levando à conclusão que existe teoremas verdadeiros, falsos, entre outros que não sabem se são um ou outro.

Page 22: Teoria da Computação Professor: Ciro Meneses Santos Unipac – Computação Bibliografia: ---------------- SUDKAMP, Thomas A.. Languages and machines: an introduction.

A Hipótese de A Hipótese de Church-TuringChurch-Turing

A aceitação destes formalismos dentro da teoria da computação é, em grande parte, decorrente da hipótese (conhecida como Tese de Church) de que todo processo computável – passível de ser descrito por uma procedure – pode ser realizado por uma Máquina de Turing. Esta tese, apesar de não ter sido provada formalmente, também não foi contradita e continua sendo universalmente aceita. Conseqüentemente podemos afirmar que Máquinas de Turing constituem o formalismo mais genérico para a representação de procedure e que qualquer outro formalismo será significativo se for considerado equivalente às máquinas de Turing. A demonstração formal da equivalência entre os diversos formalismos citados e máquinas de Turing, reforça a tese de Church.

Page 23: Teoria da Computação Professor: Ciro Meneses Santos Unipac – Computação Bibliografia: ---------------- SUDKAMP, Thomas A.. Languages and machines: an introduction.

A Hipótese de Church-Turing A Hipótese de Church-Turing

Afirma que:

Qualquer função computável pode ser processada por uma “Máquina de Turing”

Existe um procedimento eficiente para resolver um probelma de decisão se e somente se, existe uma MT que termina para qualquer entrada que solucione o problema.

“Todos os modelos razoáveis do processo de computação definidos e por definir são equivalentes”

Todos os formalismo propostos são equivalentes

Nenhuma função intuitivamente computável foi obtida que não pudesse ser expressa nesses formalismo.

Page 24: Teoria da Computação Professor: Ciro Meneses Santos Unipac – Computação Bibliografia: ---------------- SUDKAMP, Thomas A.. Languages and machines: an introduction.

Church-Turing Church-Turing

Tem-se uma boa definição de algoritmo se uma sequência de passos puder ser executada de maneira rotineira (ou mecânica), de maneira formal no desenvolvimento da mesma tarefa.

Isto é, existe um algoritmo expresso na forma de Máquina de Turing capaz de processar a função.

A tese de Church-Turing não pode ser provada porque falta uma definição de procedimento.

Portanto a tese poderia ser contestada através de um contra-exemplo: um procedimento que não pode ser implementado em uma MT.

Page 25: Teoria da Computação Professor: Ciro Meneses Santos Unipac – Computação Bibliografia: ---------------- SUDKAMP, Thomas A.. Languages and machines: an introduction.

Church-Turing Church-Turing

Existe uma forte evidência que sugere que não existe um procedimento eficiente que não possa ser computado por uma MT.

A evidência mais forte é a de que todos os procedimentos eficientes conhecidos puderam ser transformados em MT.

Um problema é indecidível se não existe uma máquina de turing para resolvê-lo

A MT não é limitada fisicamente por nenhum dispositivo real

Memória ou CPU não são limitações para MT

Se um problema não poder ser resolvido por uma MT, então também não o será por qualquer computador real.

Page 26: Teoria da Computação Professor: Ciro Meneses Santos Unipac – Computação Bibliografia: ---------------- SUDKAMP, Thomas A.. Languages and machines: an introduction.

Problema de ParadaProblema de Parada

Um dos mais importantes problemas não-computáveis é o de parada.

Em problemas não-computáveis, não são conhecidos algoritmos para resolução destes problemas. Estes algoritmos não são conhecidos porque simplesmente não existem.

Um problema comum é a ocorrência de erros que impedem a terminação normal do programa (muitas vezes, os programas entram em laços infinitos).

Seria muito útil se os programadores pudessem detectar a existência de laços infinitos em seus programas.

Page 27: Teoria da Computação Professor: Ciro Meneses Santos Unipac – Computação Bibliografia: ---------------- SUDKAMP, Thomas A.. Languages and machines: an introduction.

Problema de Parada Problema de Parada

“Problema de Parada” é determinar se um programa arbitrário (qualquer) pára ou não pára.

Exemplo: Detector Universal de Loops

Dado um programa e uma entrada qualquer, não existe algoritmo genérico capaz de verificar se o programa vai parar ou não à entrada.

-Sua solução é um algoritmo no qual, dado um programa qualquer P e sua entrada de dados d, pode-se dizer ou não, se eventualmente P pára, quando executado com a entrada de dados d.

Dado um programa p e um dado d, determinar se p pará quando executado tendo como entrada d.

Page 28: Teoria da Computação Professor: Ciro Meneses Santos Unipac – Computação Bibliografia: ---------------- SUDKAMP, Thomas A.. Languages and machines: an introduction.

Problema da parada Problema da parada

PÁRA(p,d)SIM se p(d) pára

NÃO se p(d) não pára

Prova: Suponha que o problema seja decidívelEntão um programa – pPARA – que computa a função PÁRA

cd(p)if(pPÁRA(p,p)=“SIM”) while(true) x =xelse return “SIM”

cd(p)loop se PÁRA(p,p)=“SIM”)

SIM se PÁRA(p,p)=“NÃO”

Page 29: Teoria da Computação Professor: Ciro Meneses Santos Unipac – Computação Bibliografia: ---------------- SUDKAMP, Thomas A.. Languages and machines: an introduction.

Problema da parada Problema da parada

c = o código do programa cd

cd(c)loop se PÁRA(c,c)=“SIM”)

SIM se PÁRA(m,m)=“NÃO”

cd não pára quando executado tendo ele próprio como entrada

Page 30: Teoria da Computação Professor: Ciro Meneses Santos Unipac – Computação Bibliografia: ---------------- SUDKAMP, Thomas A.. Languages and machines: an introduction.

Problema Exemplo Problema Exemplo

•Suponha que pode-se usá-lo para construir um algoritmo mais limitado o qual testa a terminação de P quando os dados são o próprio P o qual será chamado de novotestaparada.

•Embora possa parecer estranho, na entrada de dados com o próprio programa, qualquer sequência de caracteres pode ser a entrada de um programa. Assim, existem programas de interesse prático, cuja entrada é uma sequência de caracteres representando outro programa; exemplos são compiladores e editores.