A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Complementos de Engenharia de Software 2005/06

Apresentações semelhantes


Apresentação em tema: "Complementos de Engenharia de Software 2005/06"— Transcrição da apresentação:

1 Complementos de Engenharia de Software 2005/06
Introdução à Teoria da Computação: Decidibilidade João Pascoal Faria (Com base em notas de Gabriel David e Cristina Ribeiro)

2 Problemas de computação e de decisão
Problema de computação: calcular saída (resposta) em função de entrada Exemplo (resto da divisão inteira): achar o resto da divisão inteira de dois números Entrada: dois números inteiros Saída (resposta): o resto da divisão inteira do 1º pelo 2º Pode-se formular como problema de tradução de linguagens Problema de decisão: problema de computação com resposta “sim” ou “não” Exemplo (divisibilidade): determinar se um número inteiro é divisível por outro Resposta: sim (o 1º é divisível pelo 2º) ou não (o 1º não é divisível pelo 2º) Pode-se formular como problema de aceitação de linguagem Problemas de decisão podem-se reduzir a problemas de computação e vice-versa Problema de decisão  problema de computação Para determinar se n é divisível por m, calcula-se o resto da divisão inteiro do n pelo m. Se este resto for 0, a resposta é “sim”, caso contrário a resposta é “não”. Problema de computação  problema de decisão Para achar o resto da divisão inteira de n por m, verifica-se se n+m-r é divisível por m, para r=0, 1, …, m-1. O valor de r em que a resposta é “sim” é o resto procurado.

3 Computabilidade e decidibilidade
Problema solúvel: existe um algoritmo (isto é, uma máquina de Turing) que dá a resposta em tempo finito Sem entrar em ciclo infinito! Se for um problema de computação, diz-se computável O resto da divisão inteira é computável Se for um problema de decisão, diz-se decidível A divisibilidade é decidível Existem problemas insolúveis, como veremos a seguir! Caso paradigmático – problema da terminação

4 Problema da Terminação
Problema da terminação genérico: Existe algum algoritmo A capaz de decidir em tempo finito, para qualquer programa P e entrada E, se o programa P termina (não entra em ciclo infinito) quando executado com entrada E? Não chega executar o programa P com entrada E e ver o que acontece, pois, se o programa P não terminar ao fim de um certo tempo (por maior que seja esse tempo), não sabemos se vai algumas vez terminar ou não Problema da terminação para máquinas de Turing: Dada uma máquina de Turing arbitrária T e uma cadeia de entrada arbitrária w sobre o alfabeto {a, b} (ou, equivalentemente, sobre o alfabeto {0, 1}), existe algum algoritmo capaz de decidir se T termina (não entra em ciclo infinito) quando executado com entrada w? Problema indecidível! Prova por contradição (redução ao absurdo)!

5 Prova por contradição (1)
Suponhamos que existe o algoritmo/programa A Sim (se P for executado com entrada E, termina) programa P A entrada E Não (se P for executado com entrada E, não termina) (A termina em tempo finito)

6 Prova por contradição (2)
Se A existe, podemos definir o algoritmo/programa B da seguinte forma: B Sim (se P for executado com entrada E, termina) programa P programa P A ciclo infinito entrada E Não (se P for executado com entrada E, não termina) Não (se P for executado tendo como entrada o seu próprio código, não termina) (A termina em tempo finito) Comportamento de B tendo como entrada o código do programa P: - Se o programa P termina quando executado tendo como entrada o próprio código do programa P, então B não termina. - Caso contrário, B termina e imprime “não”.

7 Prova por contradição (3)
Correndo agora B tendo como entrada o próprio B: B Sim (se P for executado com entrada E, termina) B programa P A ciclo infinito entrada E Não (se P for executado com entrada E, não termina) Não (A termina em tempo finito) Comportamento de B tendo como entrada o código do programa B: - Se o programa B termina quando executado tendo como entrada o próprio código do programa B, então B não termina (quando executado tendo como entrada o código do programa B). - Caso contrário, B termina e imprime “não”. Contradição!

8 Prova por contradição (4)
Portanto, não pode existir o programa/algoritmo B! Se A existe, então B existe. Como B não existe, então A não existe! Logo o problema da terminação não é decidível!


Carregar ppt "Complementos de Engenharia de Software 2005/06"

Apresentações semelhantes


Anúncios Google