Teoria da Computação
Aula 10: Decidibilidade
DAINF-UTFPR
Prof. Ricardo Dutra da Silva
Definição 10.1. Um problema de decisão P é um conjunto de questões para as quais as
respostas são sim ou não.
Exemplo 10.1
O problema PSQ que determina se um dado número natural é um quadrado perfeito
consiste nas seguintes questões:
• 0 é um quadrado perfeito?
• 1 é um quadrado perfeito?
• 2 é um quadrado perfeito?
• 3 é um quadrado perfeito?
..
.
Definição 10.2. Uma solução para um problema de decisão P é um algoritmo que determina a resposta correta para cada umas das perguntas de P . Um algoritmo deve ser:
• completo: produz uma resposta para todas as questões do problema;
• mecanicista: consiste em um conjunto de instruções bem definidas;
• determinista: para entradas idênticas retorna a mesma resposta;
Uma MT é mecanicista e determinística. Caso a máquina pare com qualquer entrada,
ela também é completa. Uma MT é o modelo formal para estudar problemas de decisão.
Definição 10.3.
Um algoritmo é uma MT que para com qualquer entrada.
Definição 10.4. Um problema é decidível se ele possui uma representação para a qual o
conjunto de strings aceitas forma uma linguagem recursiva.
A solução para um problema de decisão requer que para qualquer instância do problema
seja retornada uma resposta. Relaxando essa restrição, podemos definir uma solução parcial
como um procedimento que retorna sim para toda instância verdadeira mas no caso de uma
instância falsa pode retornar não ou falhar em produzir uma resposta.
1
2
Aula 10: Decidibilidade
Assim como uma solução para uma problema de decisão pode ser formulada como uma
questão de pertinência em uma linguagem recursiva, uma solução parcial pode ser formulada
como pertinência em uma linguagem recursivamente enumerável.
Definição 10.5 (Tese de Church-Turing). Existe um procedimento efetivo para resolver
um problema de decisão se, e somente se, existe uma MT que para com qualquer entrada e
resolve o problema.
Definição 10.6 (Tese Estendida de Church-Turing). Um problema de decisão P é parcialmente solucionável se, e somente se, existe uma MT que aceita as instâncias de P para as
quais a resposta é sim.
Definição 10.7. Um problema de decisão é decidível se há uma MT que determina a
resposta para cada pergunta. Se não existe tal máquina, o problema é indecidível.
Veremos a seguir que existem problemas indecidíveis provando que o Problema da Parada
é indecidível. Suponha que queiramos definir um algoritmo A que tenha como entrada um
algoritmo B e uma entrada para B. O Algoritmo A executa o algoritmo B com a entrada
dada e é capaz de determinar se B para com tal entrada. Provaremos que o algoritmo A não
existe, ou seja, não existe uma MT que realize tal computação e que pare para toda entrada.
Definição 10.8 (Problema da Parada). Dadas uma MT qualquer M com alfabeto Σ e uma
string w ∈ Σ∗ , a computação de M irá parar com a entrada w?
Como em qualquer computador, uma MT é capaz de codificar qualquer entrada como
uma string sobre o alfabeto Σ = {0, 1}. Vamos limitar nossas máquinas para usar os alfabetos
Σ = {0, 1} e Γ = {0, 1, B}.
Aula 10: Decidibilidade
3
Exemplo 10.2
Seja qualquer MT M com estados {q0 , q1 , . . . , qn } e função de transição da forma δ(qi , a) =
(qj , b, d), onde qi , qj ∈ Q, a, b ∈ Γ e d = {L, R}. Uma codificação possível para os símbolos
da máquina é dada abaixo:
símbolo
codificação
0
1
B
q0
q1
..
.
1
11
111
1
11
qn
L
R
1n+1
1
11
4
Aula 10: Decidibilidade
Considere que a codificação de um símbolo z é retornada pela função enc(z). A função
de transição é codificada pela string
δ(qi , a) = (qj , b, d)
enc(qi )0enc(a)0enc(qj )enc(b)0enc(d)
com os zeros separando as componentes.
Como uma MT é completamente definida por sua função de transição, podemos codificála pela codificação das transições e separar cada uma das transições por dois 0’s.
Considere o caso da MT M = (q0 , q1 , q2 , 0, 1, 0, 1, B, q0 , δ, B, q1 ) com função de transição
δ(q0 , 1) = (q2 , 0, R)
δ(q2 , 0) = (q0 , 1, R)
δ(q2 , 1) = (q1 , 0, R)
δ(q2 , B) = (q2 , 1, L).
Os códigos para cada transição acima são, respectivamente:
enc(q0 )0enc(1)0enc(q2 )0enc(0)0enc(R) = 1011011101011
enc(q2 )0enc(0)0enc(q0 )0enc(1)0enc(R) = 1110101011011
enc(q2 )0enc(1)0enc(q1 )0enc(0)0enc(R) = 11101101101011
enc(q2 )0enc(B)0enc(q2 )0enc(1)0enc(L) = 1110111011101101.
O código da MT M é
10110111010110011101010110110011101101101011001110111011101101.
Consideraremos que a função enc(M ) retorna a MT M codificada com 0’s e 1’s, como
demonstrado no exemplo anterior.
Definição 10.9. Uma Máquina de Turing Universal U é uma máquina que toma como
entrada uma outra MT M e uma string arbitrária e simula o comportamento de M com
entrada w.
Podemos pensar na Máquina de Turing Universal U como um computador que executa
um programa M que por sua vez recebe w como dados de entrada.
O problema da parada exige um algoritmo que responda a questão para qualquer combi-
Aula 10: Decidibilidade
5
nação de MT M e string de entrada w. Ou seja, dado um par (M, w) queremos uma máquina
H que decida o problema. A entrada para a MT H é, portanto, uma MT M e uma string
w.
Teorema 10.1. O problema da parada é indecidível.
Demonstração. Segundo o Teorema 10.1, não existe uma MT que decida o problema da
parada. Vamos no entanto supor, por contradição, que tal máquina exista. Vamos dar o
nome H para a MT.
Como estamos supondo que exista a máquina H, então, dada uma entrada da forma
enc(M )w, a máquina H é capaz de parar e aceitar a string enc(M )w se M para com a string
w. Caso contrário, se M não para com a string w, H para e rejeita a entrada enc(M )w. A
máquina H é representada pelo desenho abaixo.
M para com a entrada w
enc(M )w
aceita e para
H
M não para com a entrada w
rejeita e para
Vamos construir uma nova máquina H 0 baseada na máquina H. A MT H 0 tem os mesmos
estados da máquina H. No entanto, em todo estado de aceitação incluímos uma transição
que faz com que H 0 entre em um loop infinito. A máquina H 0 entrará em loop sempre que
M aceitar a string w, quando H aceita e para com string enc(M )w. A máquina H 0 irá parar
quando H rejeita e para com string enc(M )w, ou seja, quando M não parar com a string w.
M para com a entrada w
enc(M )w
H
loop
0
para
M não para com a entrada w
A string de entrada w para uma máquina M pode inclusive ser a própria codificação
da máquina. Vamos analisar o que nossa máquina que decide o problema da parada diz
quando uma máquina M executa com sua própria codificação. A máquina H 0 receberá como
entrada enc(M )enc(M ). Para isso, basta adicionar uma MT C que recebe enc(M ) e faz uma
cópia, produzindo enc(M )enc(M ). Temos uma máquina resultante D cujo comportamento
é descrito na figura abaixo.
D
M para com a entrada enc(M )
enc(M )
C
enc(M )enc(M )
loop
H0
para
M não para com a entrada enc(M )
6
Aula 10: Decidibilidade
A entrada para a máquina D pode ser qualquer máquina, inclusive a própria máquina D. A
computação realizada pela máquina D recebendo ela mesma é mostrada na figura abaixo.
D
D para com a entrada enc(D)
enc(D)
C
enc(D)enc(D)
loop
H0
para
D não para com a entrada enc(D)
Vamos analisar as possíveis computações realizadas pela máquina D e a resposta da máquina
H que decide o problema da parada:
• Considere que a máquina D parou com a entrada enc(D). Isso significa que a máquina
H rejeitou a entrada, ou seja, ela computou que a máquina D não para com entrada
enc(D). Mas se D parou então temos uma contradição.
• Considere agora o caso em que D não parou com a entrada enc(D). Isso significa
que a máquina H aceitou a entrada, ela computou que D para com entrada enc(D).
Novamente, contradição.
Portanto, nossa suposição de que exite a máquina H é absurda e, como consequência, o
problema da parada não é decidível.
Segundo o Teorema 10.1, não existe uma algoritmo para o problema da parada. Concluímos, portanto, que a linguagem LH = {enc(M )w | enc(M ) é a codificação de uma máquina
M e M para com a entrada w ∈ {0, 1}∗ } não é recursiva.
Para o problema da parada definimos uma máquina que recebe uma máquina M e uma
string w para a máquina M . A máquina que definimos simula M com entrada w.
Teorema 10.2. A linguagem LH é recursivamente enumerável.
Demonstração. Basta codificar M , enc(M ), e usar enc(M )w como entrada para uma
Máquina de Turing Universal que para se M para.
Sabemos agora que existem linguagens que são recursivamente enumeráveis mas que não
são recursivas. Será que existem linguagens que não são recursivamente enumeráveis?
Para responder essa questão usaremos o princípio da diagonalização que nos ajuda a
comparar o tamanho de conjuntos infinitos. Podemos dizer que dois conjuntos têm o mesmo
tamanho se pudermos formar pares entre os elementos de cada um dos conjuntos 1 .
1
Mais informações sobre o assunto? Veja
SIPSER, M.. Introdução à Teoria da Computação. Thomson Pioneira, 2007;
ROSEN, K. H.. Matemática Discreta e suas Aplicações. Macgraw-Hill, 2008.
Aula 10: Decidibilidade
7
Definição 10.10. Um conjunto é contável se ele é finito ou se ele tem o mesmo tamanho
de N (conjunto dos números naturais).
Definição 10.11. Se não existe uma correspondência de uma conjunto com o conjunto N,
então ele é incontável.
Temos agora todas as ferramentas para verificar se existe alguma linguagem que não é
recursivamente enumerável, ou seja, uma linguagem que não possui uma Máquina de Turing.
Faremos isso comparando o tamanho do conjunto de todas as possíveis Máquinas de Turing
com o conjunto de todas as possíveis linguagens. A ideia é mostrar que o conjunto de
linguagens é maior do que o conjunto de Máquinas de Turing.
Primeiramente, vamos contar o número de Máquinas de Turing.
Corolário 10.1. O conjunto Σ∗ de todas as strings é contável.
Demonstração. Vamos formar uma lista das strings de Σ∗ ordenadas por tamanho (strings
de tamanho 0, 1, 2, . . .): λ, 0, 1, 00, 01, 10, 11 . . .. Se concatenarmos um dígito 1 na frente
dessas strings obtemos 1λ, 10, 11, 100, 101, 110, 111 . . . e, portanto, um mapeamento direto
das strings com os naturais:
n f (n)
1
2
3
4
5
6
7
..
.
1
10
11
100
101
110
111
..
.
O conjunto Σ∗ de todas as strings tem o mesmo tamanho de N, sendo contável.
Corolário 10.2. O conjunto de Máquinas de Turing é contável.
Demonstração. Toda Máquina de Turing M tem uma codificação enc(M ), que é uma
string. Podemos omitir todas as strings que não são codificações de máquinas de Turing e
listá-las, como na prova anterior. Assim, conseguimos uma correspondência com os naturais.
Agora, vamos contar o número de linguagens.
Corolário 10.3.
O conjunto de todas as possíveis linguagens é incontável.
8
Aula 10: Decidibilidade
Demonstração. Seja L o conjunto de todas as linguagens e Σ∗ = {s1 , s2 , s3 , . . .} o conjunto
de todas as strings sobre um alfabeto Σ. Temos que
Σ∗ = {s1 , s2 , s3 , s4 , s5 , s6 , . . .}
= {λ, 0, 1, 01, 10, 11, . . .}
e que uma linguagem L é formada por um subconjunto de strings de Σ∗ .
Vamos formar uma sequência binária χL , chamada sequência característica, na qual o i-ésimo
bit é 1 se si ∈ L e 0 caso contrário. Como exemplo, dado o conjunto
Σ∗
= {
λ
, 0 , 1 , 01 , 10 , 11 ,
...
}
o subconjunto L
Σ∗
L
= { λ , 0 , 1 , 01 , 10 , 11 , . . . }
= {
, 0 ,
, 01 ,
,
, ... }
é uma linguagem com sequência característica χL
Σ∗
A
χL
= {
= {
=
λ
0
, 0 , 1 , 01 , 10 , 11 , . . . }
, 0 ,
, 01 ,
,
, ... }
1
0
1
0
0
...
Como podemos ter linguagens incluindo ou excluindo qualquer elemento de Σ∗ , cada linguagem L ∈ L tem uma sequência característica. O conjunto de todas as linguagens pode ser
visto com o conjunto de todas as sequências características, ou seja, o conjunto de todas as
sequências binárias infinitas,
Cbs = {
0000000 . . . ,
1111111 . . . ,
0101010 . . . ,
1010101 . . . ,
1101011 . . . ,
0011011 . . . ,
1000100 . . . ,
..
.
}
Aula 10: Decidibilidade
9
Vamos supor que Cbs é contável, ou seja, existe uma função bijetora f : N → Cbs . Podemos
pensar numa enumeração arbitrária como
n
f (n)
1
2
3
4
5
6
7
..
.
0000000 . . .
1111111 . . .
0101010 . . .
1010101 . . .
1101011 . . .
0011011 . . .
1000100 . . .
..
.
Construímos uma sequência s pegando o n-ésimo bit de f (n) e fazemos o complemento deste
bit o n-ésimo bit de s. Mas s é uma sequência binária infinita que difere de todo f (n). Logo,
ela não está mapeada e não existe a função f . Cbs é incontável.
Corolário 10.4. Algumas linguagens não são recursivamente enumeráveis.
Demonstração. Como temos mais linguagens do que Máquinas de Turing, concluímos
que algumas linguagens não são recursivamente enumeráveis.
Download

Aula 10: Decidibilidade - DAINF