COMPUTABILIDADE 1. M´aquinas de...

55
Licenciatura em Ci ˆ encias da Computac ¸ ˜ ao COMPUTABILIDADE 1. M´ aquinas de Turing Ano letivo 2011/2012 Jos´ e Carlos Costa Departamento de Matem ´ atica e Aplicac ¸ ˜ oes Universidade do Minho

Transcript of COMPUTABILIDADE 1. M´aquinas de...

Licenciatura em

Ciencias da Computacao

COMPUTABILIDADE

1. Maquinas de Turing

Ano letivo 2011/2012

Jose Carlos Costa

Departamento de Matematica e Aplicacoes

Universidade do Minho

Definicao de maquina de Turing

Definicao 1.1 Uma maquina de Turing e um septeto T = (Q, A, T, δ, i, f, ∆):

1) Q e um conjunto finito nao vazio, dito o conjunto de estados de T;

2) A e um alfabeto, chamado o alfabeto (de entrada) de T;

3) T ⊇ A e um alfabeto, dito o alfabeto da fita de T, tal que Q ∩ T = ∅. O

conjunto T \ A e chamado o alfabeto auxiliar de T;

4) δ : Q × T → Q × T × {E, C, D} e uma funcao parcial, dita a funcao

transicao de T, indefinida em (f, t) para cada t ∈ T .

Movimentos: E-esquerda; D-direita; C-“centro” (ausencia de movimento);

5) i ∈ Q, dito o estado inicial de T;

6) f ∈ Q, chamado o estado final de T;

7) ∆ ∈ T \ A e um sımbolo auxiliar, designado o sımbolo branco.

1

Exemplo 1.2 O septeto T = ({1, 2, 3}, {a, b}, {a, b, ∆}, δ, 1, 3, ∆) onde δ e a

funcao parcial de {1, 2, 3} × {a, b} em {1, 2, 3} × {a, b} × {E, C, D} tal que

δ(1, ∆) = (2, ∆, D) δ(2, a) = (2, a,D)

δ(2, b) = (2, b, D) δ(2, ∆) = (3, ∆, C)

e uma maquina de Turing com: tres estados (1, 2 e 3); alfabeto de entrada

{a, b}; ∆ como unico sımbolo auxiliar; 1 e 3 como estados inicial e final. A

funcao transicao δ pode ser representada pela tabela

δ a b ∆

1 (2, ∆, D)

2 (2, a,D) (2, b, D) (3, ∆, C)

Na tabela omite-se a linha referente ao estado final pois, por definicao,

numa maquina de Turing nao existem transicoes a sair do estado final.

2

Fita e cursor de maquina de Turing

Uma maquina de Turing T = (Q, A, T, δ, i, f, ∆) e dotada de uma:

1) fita dividida em celulas, infinita a direita e com uma celula inicial a esquerda.

Cada celula tem uma letra de T e em cada instante o numero de celulas nao

brancas (ou seja celulas onde nao esta escrito o sımbolo branco ∆) e finito;

2) cabeca ou cursor (de leitura e escrita) posicionada em cada momento numa

determinada celula da fita, que permite ler a letra da celula e eventualmente

substituir essa letra por outra.

Por exemplo, a figura a ∆ b b a ∆ ∆ ∆ · · ·↑q

representa a fita de uma maquina de Turing em que nas 1a¯ e 5a

¯ celulas esta

escrita a letra a, nas 3a¯ e 4a

¯ celulas esta escrito b e todas as outras estao em

3

branco. A seta indica que a cabeca esta posicionada na 3a¯ celula e a letra q

por baixo da seta indica o estado atual da maquina de Turing.

A cabeca pode efetuar movimentos determinados pela funcao transicao. Assim,

a igualdade

δ(q, t) = (q′, t′, m)

significa que, quando a maquina esta no estado q com a cabeca posicionada

numa celula onde esta escrita a letra t:

• a maquina transita para o estado q′,

• substitui a letra t pela letra t′ na fita e

• a cabeca efetua o movimento m (ou seja, move-se para a esquerda, para a

direita ou nao se move, conforme m seja E, D ou C).

4

Exemplo 1.3 Seja T = ({1, 2, 3}, {a, b}, {a, b, ∆}, δ, 1, 3, ∆) a maquina de

Turing cuja funcao transicao δ e dada pela tabela

δ a b ∆

1 (2, ∆, D)

2 (2, a,D) (2, a,D) (3, ∆, C)

Num dado momento, uma situacao possıvel de fita e de cursor e, por exemplo,

∆ a a a b ∆ ∆ · · ·↑2

que indica que a maquina esta posicionada no estado 2 e o cursor esta posi-

cionado na 4a¯ celula onde esta escrita a letra a. Dado que δ(2, a) = (2, a,D),

no momento seguinte, a situacao de fita e de cursor passara a ser

∆ a a a b ∆ ∆ · · ·↑2

ou seja, apenas mudou a posicao do cursor que se situa agora na 5a¯ celula.

5

Dado que δ(2, b) = (2, a,D), a situacao posterior seria entao

∆ a a a a ∆ ∆ · · ·

↑2

Note-se que neste passo houve uma alteracao da letra na 5a¯ celula da fita

mantendo-se ainda a maquina no estado 2. No proximo passo, usando a

igualdade δ(2, ∆) = (3, ∆, C) obtem-se

∆ a a a a ∆ ∆ · · ·

↑3

Como a maquina atingiu o estado 3, que e o estado final da maquina, nao e

possıvel efetuar mais passos.

6

Representacao grafica de maquinas de Turing

A representacao de maquinas de Turing e feita de forma analoga aos automatos

finitos. A unica diferenca e na representacao das transicoes:

δ(q, t) = (q′, t′, m) e representada por q����

q′����

-t/t′, m

que tem o seguinte significado: estando a maquina no estado q e lendo a letra t

na fita, a maquina transita para o estado q′, substitui a letra t por t′ e a cabeca

efetua o movimento m.

Por exemplo, o diagrama

1����

- 2����

3��������

-∆/∆, D �

a/a,D

b/b, D

-∆/∆, C

representa a maquina de Turing do Exemplo 1.2. Esta maquina nao e ainda

fundamentalmente diferente de um automato finito pois nao substitui letras na

fita por outras diferentes e, com excepcao da transicao para o estado final, o unico

7

movimento que faz e para a direita. Veremos mais tarde que, de facto, esta maquina

reconhece uma linguagem regular, ou seja, reconhece uma linguagem reconhecida

por automato finito. Um outro exemplo ja mais “sofisticado” de maquina de

Turing e apresentado a seguir.

Exemplo 1.4 O diagrama

1����

- 2����

3����

4����

5����

6��������

-∆/∆, D !!!!!!!!1a/∆, D aaaaaaaaq

∆/∆, E�

a/a,D

b/b, D

!!!!!!!!) b/∆, E

∆/∆, D

aaaaaaaai

a/a,E

b/b, E

?

∆/∆, C

descreve uma MT cujo alfabeto de entrada contem as letras a e b. Como

veremos, esta MT reconhece a linguagem nao regular {anbn | n ∈ N0}.

8

Configuracoes de uma maquina de Turing

Seja T = (Q, A, T, δ, i, f, ∆) uma maquina de Turing. Uma configuracao de T e

um par ordenado (q, utv) onde q ∈ Q, u, v ∈ T ∗, t ∈ T e:

1) q e o estado atual da maquina;

2) a palavra utv esta escrita na fita o mais a esquerda possıvel (i.e., a 1a¯ letra de

utv ocupa a 1a¯ celula) e todas as celulas apos v estao preenchidas com ∆;

3) a cabeca esta posicionada na celula ocupada pela letra t.

Note-se que uma configuracao representa a situacao da fita e do cursor da MT

num dado momento. Por esse facto, a configuracao (q, utv) e tambem notada, por

vezes, para cada n ∈ N, por (q, utv∆n).

9

Por exemplo, a configuracao (2, a∆bba) representa a situacao

a ∆ b b a ∆ ∆ ∆ · · ·

↑2

Esta configuracao pode ser tambem representada, por exemplo, por (2, a∆bba∆∆).

Para uma palavra v ∈ T ∗, utilizaremos a notacao (q, uv), onde q ∈ Q e u ∈ T ∗,

para representar a configuracao:

• (q, utv′) se t ∈ T e v′ ∈ T ∗ sao tais que v = tv′;

• (q, u∆) se v = ε.

Assim, no exemplo acima a configuracao (2, a∆bba) pode ser representada tambem

por (2, a∆bba), ou por (2, a∆bba∆), etc.

10

Computacoes numa maquina de Turing

Sejam c1 = (q1, u1t1v1) e c2 = (q2, u2t2v2) duas configuracoes de T. Diz-se que:

• c2 e uma computacao direta a partir de c1, e escreve-se c1 −→T

c2, se T passa

da configuracao c1 para a configuracao c2 num unico passo.

Assim, no Exemplo 1.3, a configuracao (2, ∆aaab) e uma computacao direta a

partir de (2, ∆aaab) e poderıamos escrever (2, ∆aaab) −→T

(2, ∆aaab).

• c2 e uma computacao a partir de c1, e escreve-se c1∗−→T

c2, se T passa da

configuracao c1 para a configuracao c2 em zero ou mais passos;

ou seja, se c1 = c2 ou c1 = c′1 −→T

c′2 −→T

c′3 · · · c′n−1−→T

c′n = c2 para con-

figuracoes c′1, c′2, . . . , c

′n.

Quando nao houver ambiguidade em relacao a maquina de Turing T que se esta

a considerar, simplificaremos as notacoes de −→T

e de ∗−→T

omitindo a letra T.

11

Exemplo 1.5 Seja T a maquina de Turing

1����

- 2����

3��������

-∆/∆, D �

a/b, D

b/a, D

-∆/∆, C

do Exemplo 1.2. A partir da configuracao (1, ∆aab) podem ser efetuadas em

T, sucessivamente, as seguintes computacoes diretas

(1, ∆aab) −→ (2, ∆aab) −→ (2, ∆bab) −→

(2, ∆bbb) −→ (2, ∆bba∆) −→ (3, ∆bba∆).

Portanto (1, ∆aab) ∗−→ (3, ∆bba∆) e uma computacao em T.

12

Linguagem aceite por uma maquina de Turing

Seja T = (Q, A, T, δ, i, f, ∆) uma maquina de Turing. Uma configuracao

c = (q, utv)

de T diz-se uma configuracao de:

• paragem se δ nao esta definida em (q, t) ou, u = ε e δ(q, t) = (q′, t′, E) para

alguns q′ ∈ Q e t′ ∈ T ;

• aceitacao se q = f ;

• rejeicao se c e uma configuracao de paragem e q 6= f ;

• ciclo se a partir de c nao e possıvel computar uma configuracao de paragem.

Diz-se ainda que:

• (i, ∆w) e a configuracao inicial associada a uma palavra w ∈ A∗;

13

• uma palavra w ∈ A∗ e aceite por T se existe uma computacao de uma con-

figuracao de aceitacao a partir da configuracao inicial associada a w;

ou seja, se existe uma computacao

(i, ∆w) ∗−→T

(f, utv)

para uma certa configuracao de aceitacao (f, utv).

• a linguagem aceite ou reconhecida por T, representada por L(T), e o conjunto

das palavras aceites por T.

Note-se que uma palavra w podera nao ser aceite por uma de duas razoes: partindo

da configuracao inicial associada a w,

� a maquina de Turing para numa configuracao de rejeicao;

� a maquina de Turing nao para (ou seja, a configuracao inicial associada a w e

uma configuracao de ciclo);

14

Exemplo 1.6 Mostraremos neste exemplo como se pode construir uma maquina

de Turing que reconhece a linguagem regular

L = A∗abaA∗

sobre o alfabeto A = {a, b}. Um automato finito determinista que reconhece

L e

1����

- 2����

3����

4���������

b

-a �

a

Y

b

-b -a �

a, b

Entao, como se pode verificar sem grandes dificuldades, a seguinte maquina

de Turing T reconhece L:

0����

- 1����

2����

3����

4����

5��������

-∆/∆, D �

b/b, D

-a/a,D �

a/a,D

Y

b/b, D

-b/b, D

-a/a,D �

a/a,D

b/b, D

-∆/∆, C

15

Verifiquemos, por exemplo, que T aceita a palavra aaba. Em T podem ser

efetuadas as seguintes computacoes diretas

(0, ∆aaba) −→ (1, ∆aaba) −→ (2, ∆aaba) −→ (2, ∆aaba) −→(3, ∆aaba) −→ (4, ∆aaba∆) −→ (5, ∆aaba∆).

Dado que 5 e o estado final de T, a configuracao (5, ∆aaba∆) e uma con-

figuracao de aceitacao. Logo a palavra aaba e aceite por T.

Pelo contrario, T nao aceita a palavra abba. De facto,

(0, ∆abba) −→ (1, ∆abba) −→ (2, ∆abba) −→(3, ∆abba) −→ (1, ∆abba) −→ (2, ∆abba∆).

Ou seja, atingiu-se uma configuracao de rejeicao pois a maquina parou num

estado que nao e o final e, portanto, a palavra abba nao e aceite por T.

16

A construcao do exemplo anterior pode ser generalizada para todas as linguagens

regulares, o que mostra que a classe de linguagens reconhecidas por maquinas de

Turing contem a classe das linguagens reconhecidas por automatos finitos.

Teorema 1.7 Toda a linguagem regular e reconhecida por uma maquina de

Turing.

No entanto, nem todas as linguagens reconhecidas por maquinas de Turing sao

regulares. Tal e o caso, por exemplo, da linguagem reconhecida pela maquina de

Turing do Exemplo 1.4. Apresentaremos de seguida outra destas linguagens.

Exemplo 1.8 Seja L = {u ∈ A∗ | uI = u} a linguagem nao regular das

palavras capicua sobre o alfabeto A = {a, b}. A seguinte maquina de Turing

T reconhece a linguagem L

17

0����

- 1����

2����

3����

4����

5����

6����

7��������

-∆/∆, D

a/∆, D

��

��

��

-∆/∆, E�

a/a,D

b/b, D

a/∆, E@

@@

@@R

�∆/∆, D

b/∆, D@

@@

@@R

-

∆/∆, E�

a/a,D

b/b, D

b/∆, E

��

��

��Y

a/a,E

b/b, E

~

∆/∆, D

>

∆/∆, D

∆/∆, C

A maquina T aceita a palavra abba, como o mostra a seguinte computacao

(0, ∆abba) −→ (1, ∆abba) −→ (2, ∆∆bba) ∗−→ (2, ∆∆bba∆) −→ (3, ∆∆bba) −→(4, ∆∆bb∆) ∗−→ (4, ∆∆bb∆) −→ (1, ∆∆bb∆) −→ (5, ∆∆∆b∆) −→ (5, ∆∆∆b∆)

−→ (6, ∆∆∆b∆) −→ (4, ∆∆∆∆∆) −→ (1, ∆∆∆∆∆) −→ (7, ∆∆∆∆∆).

Analogamente, pode-se verificar que T aceita aba e nao aceita aaba.

18

Note-se que a estrategia desta maquina T para verificar se u ∈ L, para

uma dada palavra u ∈ A∗, e a de iterar o seguinte procedimento: procurar as

letras nas extremidades da palavra em analise e verificar se sao iguais. Se o

forem, estas letras sao substituıdas pelo sımbolo branco e este procedimento

repete-se. A maquina parara por uma de tres razoes:

1) em algum passo do processo as letras inicial e final da palavra em analise

sao diferentes. Neste caso a palavra u (que nao e uma capicua) nao e

aceite.

2) em algum passo do processo a palavra em analise e a palavra vazia. Neste

caso a maquina atinge o estado final (a partir do estado 1) e, portanto, a

palavra u (que e uma capicua de comprimento par) e aceite.

3) em algum passo do processo a palavra em analise e uma letra. Neste caso

a maquina atinge o estado final (a partir dos estados 3 ou 6) e, portanto,

a palavra u (que e uma capicua de comprimento ımpar) e aceite.

19

Composicao sequencial de maquinas de Turing

Sejam T1 = (Q1, A, T, δ1, i1, f1, ∆) e T2 = (Q2, A, T, δ2, i2, f2, ∆) duas maquinas

de Turing com Q1 ∩Q2 = ∅. A composicao sequencial de T1 com T2 e a MT

T1T2 = (Q1 ∪Q2, A, T, δ, i1, f2, ∆)

cuja funcao transicao δ e definida por

i) ∀q ∈ Q1 ∀t ∈ T, se δ1(q, t) esta definido, entao δ(q, t) = δ1(q, t);

ii) ∀t ∈ T, δ(f1, t) = (i2, t, C);

iii) ∀q ∈ Q2 ∀t ∈ T, se δ2(q, t) esta definido, entao δ(q, t) = δ2(q, t).

Informalmente, a maquina de Turing T1T2:

i) atua como a maquina T1 quando esta posicionada num estado de Q1 \ {f1};

ii) passa para i2 sem alterar a situacao da fita quando esta posicionada em f1;

iii) atua como a maquina T2 quando esta posicionada num estado de Q2.

20

Na representacao de maquinas de Turing serao usadas as seguinte notacoes:

1) T1 −→ T2 para representar a composicao sequencial de T1 com T2.

2) T1a/a,C−−−→ T2 (onde a ∈ T ) para representar a composicao sequencial condi-

cional de T1 com T2: isto e, a composicao sequencial em que a condicao ii) e

substituıda pela condicao ii’) δ(f1, a) = (i2, a, C).

3) q����−→ T2 e q����a/a,C−−−→ T2 (onde q ∈ Q1 e a ∈ T ) para representar a maquina

de Turing que se comporta como T1 ate atingir o estado q e depois comporta-se

como T2 (no segundo caso o cursor tem que ler um a).

4) T1 −→ q����e T1

a/a,C−−−→ q����(onde q ∈ Q2 e a ∈ T ) com um significado

simetrico em relacao ao do ponto anterior.

As maquinas de Turing que apresentamos de seguida sao frequentemente utilizadas

para construir novas MTs, usando composicao sequencial. As computacoes que

realizam sao uteis para fazerem parte de computacoes mais complexas.

21

Exemplo 1.9 (Copia de palavras) Construamos uma maquina de Turing

Tcopiar = (Q, A, T, δ, i, f, ∆)

capaz de, ao partir da configuracao inicial associada a uma palavra u, efetuar

uma copia de u na fita, colocando um sımbolo branco entre o original e a

copia, ficando a cabeca posicionada na 1a¯ celula. Ou seja, Tcopiar devera ser

capaz de efetuar a seguinte computacao

(i, ∆u) ∗−→ (f, ∆u∆u)

onde u ∈ A∗ e uma palavra qualquer sobre o alfabeto de entrada.

Admitamos que o alfabeto de entrada e A = {a, b} (para alfabetos mais

genericos constroem-se maquinas de Turing analogas) e que α e β sao letras

do alfabeto auxiliar (que vao estar associadas a a e b respetivamente). A

estrategia da maquina, indicada abaixo, e a de copiar uma letra de u de cada

vez, substituindo as letras ja copiadas pelo correspondente sımbolo auxiliar.

22

0����

- 1����

2����

3����

4����

6����

7����

5����

8����

9��������

-∆/∆, D �

������7

a/α,D

-∆/∆, D�

a/a,Db/b, D

a/a,Db/b, D

SSSSSSSw

∆/a,E

α/α, Dβ/β, D

ee

ee

eew

b/β, D

-∆/∆, D

a/a,Db/b, D

a/a,Db/b, D

%%

%%

%%7

∆/b, E

Y

a/a,Eb/b, E

a/a,Eb/b, E

��

��

���

∆/∆, E

�∆/∆, C

α/a,Eβ/b, E

�∆/∆, E

Por exemplo, em Tcopiar pode efetuar-se a seguinte computacao

(0, ∆ba) −→ (1, ∆ba) −→ (6, ∆βa) −→ (6, ∆βa∆) −→ (7, ∆βa∆∆) −→ (4, ∆βa∆b)

−→ (5, ∆βa∆b) −→ (5, ∆βa∆b) −→ (1, ∆βa∆b) −→ (2, ∆βα∆b) −→ (3, ∆βα∆b)

−→ (3, ∆βα∆b∆) −→ (4, ∆βα∆ba) −→ (4, ∆βα∆ba) −→ (5, ∆βα∆ba) −→ (1, ∆βα∆ba)

−→ (8, ∆βα∆ba) −→ (8, ∆βa∆ba) −→ (8, ∆ba∆ba) −→ (9, ∆ba∆ba).

23

Exemplo 1.10 (Apagar letras) Construamos uma maquina de Turing

Tapagar = (Q, A, T, δ, i, f, ∆)

que apague a letra que o cursor esta a ler, ou seja, que faca a computacao

(i, utv) ∗−→ (f, uv)

em que u ∈ (A ∪ {∆})∗, t ∈ A ∪ {∆} e v ∈ A∗.

Admitamos que A = {a, b} e que o unico sımbolo auxiliar e ∆. A maquina

comeca por substituir a letra t a apagar pelo sımbolo branco, desloca o cursor

para a ultima letra de v e move sucessivamente cada letra de v uma celula

para a esquerda.

24

0����

- 1����

2����

3����

5��������

4����

-

a/∆, Db/∆, D∆/∆, D

-∆/∆, E�

a/a,Db/b, D

!!!!!!!!!!1a/∆, E

a/a,E

aaaaaaaaaaq

∆/a, C

aaaaaaaaaaqb/∆, E !!!!!!!!!!1

∆/b, C

b/b, E

b/a, E

a/b, E�

∆/∆, C

Como exercıcio calcule, por exemplo, a sequencia de computacoes em Tapagar

a partir de (0, ∆babbaab).

25

Calculo de funcoes com maquinas de Turing

Seja T = (Q, A, T, δ, i, f, ∆) uma maquina de Turing e seja

g : A∗ → T ∗

uma funcao parcial. Diz-se que T calcula g quando, para cada u ∈ A∗:

• se g esta definida para u, entao pode ser efetuada a computacao

(i, ∆u) ∗−→T

(f, ∆g(u)).

• se g nao esta definida para u, entao nao e possıvel computar uma configuracao

de aceitacao a partir da configuracao inicial associada a u.

26

Mais geralmente, para um natural k e uma funcao parcial em k variaveis

g : (A∗)k → T ∗,

diz-se que T calcula g quando, para cada u1, . . . , uk ∈ A∗:

• se g(u1, . . . , uk) esta definida, entao pode ser efetuada a computacao

(i, ∆u1∆ · · ·∆uk)∗−→T

(f, ∆g(u1, . . . , uk)).

• se g(u1, . . . , uk) nao esta definida, entao nao e possıvel computar uma con-

figuracao de aceitacao a partir da configuracao (i, ∆u1∆ · · ·∆uk).

Sejam k ∈ N, A e T alfabetos com A ⊆ T e g : (A∗)k → T ∗ uma funcao

parcial em k variaveis. Diz-se que g e uma funcao Turing-computavel se existe

uma maquina de Turing, de alfabeto de entrada A e alfabeto de fita contendo T ,

que calcula g.

27

Exemplo 1.11 (Concatenacao de palavras) Seja A = {a, b} e seja

conc : A∗ × A∗ → A∗

a funcao de concatenacao de duas palavras de A∗. Uma MT, Tconc, que calcula

esta funcao e obtida utilizando a maquina Tapagar, que apaga a letra da celula

apontada pelo cursor. Pretende-se que Tconc realize a computacao

(i, ∆u∆v) ∗−→ (f, ∆uv)

para cada u, v ∈ A∗. A ideia e que a maquina Tconc, apresentada abaixo,

0����

- 1����

Tapagar 2����

3��������

-∆/∆, D �

a/a,Db/b, D

-∆/∆, C

-

a/a,Eb/b, E

∆/∆, E �

a/a,Eb/b, E

-∆/∆, C

apague o sımbolo branco que separa as palavras u e v. Logo a funcao de

concatenacao sobre o alfabeto {a, b} e Turing-computavel. Em geral, prova-se

que a funcao de concatenacao sobre qualquer alfabeto e Turing-computavel.

28

Funcoes numericas podem tambem ser descritas por maquinas de Turing desde

que se consiga representar os numeros atraves de palavras. Para funcoes en-

volvendo o conjunto N0 dos inteiros nao negativos, utilizaremos a representacao

“unaria” no alfabeto {1}, em que

n ∈ N0 e representado pela palavra 1n = 1 · · · 1︸ ︷︷ ︸n vezes

.

Seja T = (Q, {1}, T, δ, i, f, ∆) uma maquina de Turing e seja g : N k0 → N0

uma funcao parcial. Diz-se que T calcula g quando, para n1, . . . , nk ∈ N0:

• se g(n1, . . . , nk) esta definida, entao pode ser efetuada a computacao

(i, ∆1n1∆ · · ·∆1nk) ∗−→T

(f, ∆1g(n1,...,nk)).

• se g(n1, . . . , nk) nao esta definida, entao nao e possıvel computar uma con-

figuracao de aceitacao a partir da configuracao (i, ∆1n1∆ · · ·∆1nk).

29

Exemplo 1.12 (Adicao em N0) Consideremos a funcao

+ : N0 × N0 → N0

de adicao em N0. A seguinte maquina de Turing calcula +

0����

- 1����

Tapagar 2����

3��������

-∆/∆, D �

1/1, D

-∆/∆, C

-

1/1, E∆/∆, E �

1/1, E

-∆/∆, C

onde Tapagar e a maquina de Turing que apaga a letra lida pelo cursor.

30

Seja L uma linguagem sobre um alfabeto A. A funcao caracterıstica de L e a

funcao χL : A∗ → {0, 1} definida, para cada u ∈ A∗, por

χL(u) =

1 se u ∈ L

0 se u 6∈ L.

Exemplo 1.13 Sejam A = {a, b} e L = a∗b. A seguinte maquina de Turing

calcula χL.

0����

- 1����

- 2����

3����

4����

7��������

5����

6����

-∆/∆, D �

a/a,Db/b, D

-∆/∆, E �

��

��

��>b/∆, E

-∆/∆, D�

a/∆, E

ZZ

ZZ

ZZ

Z~

∆/1, E

ZZ

ZZ

ZZ

Z~

a/∆, E

-

∆/∆, D�

a/∆, Eb/∆, E

��

��

��

�>

∆/0, E

7∆/∆, D

b/∆, E

31

A afirmacao seguinte, enunciada pela primeira vez por Alonzo Church na decada

de 1930 e conhecida como tese de Church ou tese de Church-Turing, embora

nao seja um enunciado matematico preciso e, por isso, nao possa ser provado e

geralmente aceite como valido pois nao ha qualquer evidencia de que esteja errado.

Tese de Church Qualquer funcao que pode ser calculada por um processo

algorıtmico, por pessoas ou computadores, e Turing-computavel. 2

Variantes de maquinas de Turing

O modelo de maquina de Turing que temos vindo a estudar admite varias alter-

nativas possıveis. Consideraremos de seguida duas dessas alternativas.

32

1) Maquinas de Turing com mais do que uma fita

Uma maquina de Turing com ` fitas e um septeto T = (Q, A, T, δ, i, f, ∆)

similar a uma MT usual, mas com ` fitas independentes, cada uma com o seu

cursor, em que a funcao transicao δ e uma funcao parcial

δ : Q× T ` → Q× T ` × {E, C, D}`.

Uma configuracao de T e um (` + 1)-tuplo ordenado

(q, u1v1, . . . , u`v`)

onde q ∈ Q e ui, vi ∈ T ∗, em que:

• q e o estado atual de T;

• para cada i ∈ {1, . . . , `} a (i + 1)-esima componente representa a situacao da

i-esima fita e do cursor correspondente.

33

A configuracao inicial associada a uma palavra u ∈ A∗ e

(i, ∆u, ∆, . . . , ∆).

As nocoes de computacao direta, computacao, configuracao de pa-

ragem (resp. de aceitacao, de rejeicao, de ciclo) sao similares as nocoes

correspondentes para maquinas de Turing usuais.

Uma palavra u ∈ A∗ e aceite por T se

(i, ∆u, ∆, . . . , ∆) ∗−→T

(f, v1w1, . . . , v`w`)

para alguns v1, . . . , v`, w1, . . . , w` ∈ T ∗, ou seja, se existe uma computacao de

uma configuracao de aceitacao a partir da configuracao inicial de u.

A linguagem aceite ou reconhecida por T, e o conjunto das palavras L ⊆ A∗

formado pelas palavras aceites por T.

34

Exemplo 1.14 Seja A = {a, b} e seja T a seguinte MT sobre A com 2 fitas,

0����

- 1����

2����

3����

4����

5��������

-(∆, ∆)/(∆, ∆), (D, D)

-(∆, ∆)/(∆, ∆), (E, E)�

(a, ∆)/(a, a), (D, D)

(b, ∆)/(b, b), (D, D)

(b, a)/(b, a), (C, E)

(b, b)/(b, b), (C, E)

?

(b, ∆)/(b, ∆), (C, D)

(b, a)/(b, a), (E, D)

(a, b)/(a, b), (E, D)�

(a, b)/(a, b), (E, D)

(∆, ∆)/(∆, ∆), (C, C)

A linguagem aceite por T e {anbn | n ∈ N}. Por exemplo, em T pode

efetuar-se a seguinte computacao

(0, ∆aabb, ∆) −→ (1, ∆aabb, ∆∆) ∗−→ (1, ∆aabb∆, ∆aabb∆) −→ (2, ∆aabb, ∆aabb)

∗−→ (2, ∆aabb, ∆aabb) −→ (3, ∆aabb, ∆aabb) −→ (3, ∆aabb, ∆aabb) −→ (3, ∆aabb, ∆aabb)

−→ (4, ∆aabb, ∆aabb) −→ (4, ∆aabb, ∆aabb∆) −→ (5, ∆aabb, ∆aabb∆).

35

Sendo k ∈ N e g : (A∗)k → T ∗ uma funcao parcial em k variaveis, diz-se que T

calcula g quando, para cada u1, . . . , uk ∈ A∗:

• se g(u1, . . . , uk) esta definida, entao pode ser efetuada a computacao

(i, ∆u1∆u2∆ · · ·∆uk, ∆, . . . , ∆) ∗−→T

(f, ∆g(u1, . . . , uk), v2w2, . . . , v`w`)

para alguns v2, . . . , v`, w2, . . . , w` ∈ T ∗.

• se g(u1, . . . , uk) nao esta definida, entao nao e possıvel computar uma con-

figuracao de aceitacao a partir da configuracao (i, ∆u1∆ · · ·∆uk, ∆, . . . , ∆).

Teorema 1.15 As maquinas de Turing usuais e as maquinas de Turing com

` fitas reconhecem as mesmas linguagens e calculam as mesmas funcoes. 2

36

2) Maquinas de Turing nao-deterministas

Uma maquina de Turing nao-determinista e um septeto

T = (Q, A, T, δ, i, f, ∆)

definido de forma similar a uma maquina de Turing usual com excepcao da funcao

transicao δ que e da forma

δ : Q× T → P(Q× T × {E, C, D}).

As nocoes de computacao, de aceitacao de palavras e linguagens, e de

calculo de funcoes sao similares as correspondentes nocoes para as maquinas

de Turing usuais.

37

A diferenca entre as maquinas de Turing nao-deterministas e as maquinas de

Turing usuais e que a partir de uma dada configuracao:

• nas maquinas de Turing usuais so pode ser efetuada, no maximo, uma com-

putacao direta;

• nas maquinas de Turing nao-deterministas podem ser efetuadas, eventual-

mente, varias computacoes diretas.

Teorema 1.16 As maquinas de Turing usuais e as maquinas de Turing

nao-deterministas reconhecem as mesmas linguagens e calculam as mesmas

funcoes. 2

38

Linguagens recursivas e linguagens recursivamente enu-

meraveis

Seja L ⊆ A∗ uma linguagem e seja T uma maquina de Turing com alfabeto de

entrada A. Diz-se que:

• T aceita ou reconhece L se L = L(T);

• T decide L se a funcao caracterıstica χL : A∗ → {0, 1} e calculada por T.

Uma linguagem L diz-se:

• recursivamente enumeravel se existe uma maquina de Turing que re-

conhece L;

• recursiva se existe uma maquina de Turing que decide L.

39

Proposicao 1.17 Uma linguagem L ⊆ A∗ e recursiva se e so se existe uma

maquina de Turing T (dita um algoritmo) que reconhece L e tal que a con-

figuracao inicial de qualquer palavra u ∈ L e uma configuracao de rejeicao.

Demonstracao: (⇒) Se L e recursiva, entao existe uma MT que decide L. A

partir desta MT e facil construir uma outra que reconheca L.

(⇐) A partir da configuracao inicial associada a uma palavra u ∈ A∗ atinge-se

sempre uma configuracao de paragem. Esta configuracao e de aceitacao se u ∈ L

e e de rejeicao se u 6∈ L. Modifica-se entao a maquina de Turing T de forma que:

• a partir de uma configuracao de aceitacao em T se escreva 1 na 2a¯ celula da

fita, deixando todas as outras celulas em branco e o cursor na 1a¯ celula;

• a partir de uma configuracao de rejeicao em T se escreva 0 na 2a¯ celula da fita,

deixando todas as outras celulas em branco e o cursor na 1a¯ celula;

Esta nova MT calcula χL, a funcao caracterıstica de L, donde L e recursiva. 240

Corolario 1.18 Todas as linguagens recursivas sao recursivamente

enumeraveis. 2

Sao validas ainda as seguintes propriedades.

Proposicao 1.19 Sejam L e K linguagens sobre um alfabeto A.

i) Se L e K sao recursivas (resp. recursivamente enumeraveis), entao L ∪K

e L ∩K sao recursivas (resp. recursivamente enumeraveis).

ii) Se L e recursiva, entao L e recursiva.

Demonstracao: A ideia em i) e considerar maquinas de Turing TL e TK que

decidam (resp. aceitem) L e K, respetivamente, e construir uma maquina de

Turing com conjunto de estados QL × QK (onde QL e QK sao os conjuntos de

estados de TL e TK respetivamente) e com duas fitas, que executa em simultaneo

segundo TL e TK.

A alınea ii) e imediata. 2

41

Teorema [Post, 1943] Uma linguagem L ⊆ A∗ e recursiva se e so se L e L

sao recursivamente enumeraveis. 2

Seja A um alfabeto e sejam RE(A) o conjunto das linguagens recursivamente

enumeraveis sobre A e T (A) o conjunto das maquinas de Turing de alfabeto de

entrada A. O conjunto T (A) e numeravel. Logo RE(A) tambem e numeravel pois

cada linguagem de RE(A) e reconhecida por uma maquina de Turing de T (A).

O teorema seguinte mostra que as linguagens recursivamente enumeraveis for-

mam uma ınfima parte do conjunto de todas as linguagens.

Teorema 1.20 Existem linguagens nao recursivamente enumeraveis sobre

qualquer alfabeto A. Mais precisamente, o conjunto das linguagens nao re-

cursivamente enumeraveis sobre A tem o cardinal do contınuo.

Demonstracao: Basta notar que o conjunto RE(A) e numeravel, enquanto que

P(A∗), o conjunto de todas as linguagens sobre A, tem o cardinal do contınuo. 2

42

Maquinas de Turing Universais

Convencao Assume-se que existem dois conjuntos numeraveis

Q = {q0, q1, q2, . . .} e S = {s0, s1, s2, . . .}

tais que, para cada maquina de Turing,

T = (Q, A, T, δ, i, f, ∆)

se tem:

• Q ⊆ Q, com f = q0;

• T ⊆ S, com ∆ = s0.

Diz-se que T e normalizada se todos os estados e todos os sımbolos nao

brancos de T pertencem a alguma transicao. Note-se que cada maquina de

Turing e equivalente a alguma maquina de Turing normalizada.

43

Definicao 1.21 (funcao codificadora) Define-se uma funcao injetiva

c : TN −→ {x, y}∗

T 7−→ c(T)

que associa a cada maquina de Turing T (normalizada) uma palavra c(T)

sobre o alfabeto {x, y}, chamada “o codigo de T”, da seguinte forma:

1) a cada qi ∈ Q, si ∈ S e movimentos C, E, D e associada uma palavra sobre

{x} da seguinte forma:

c′(si) = xi+1

c′(qi) = xi+1

c′(C) = x

c′(E) = x2

c′(D) = x3.

Note-se que, em particular,

c′(∆) = c′(s0) = x e c′(f ) = c′(q0) = x.

44

2) cada transicao e de uma maquina de Turing, descrita por

δ(q, t) = (q′, t′, m)

e codificada pela palavra

c′(e) = c′(q)yc′(t)yc′(q′)yc′(t′)yc′(m)y.

3) cada maquina de Turing T e codificada pela palavra

c(T) = c′(qi)yc′(e1)yc′(e2) · · · yc′(ek)y,

onde qi e o estado inicial de T e e1, e2, . . . , ek sao as transicoes de T numa

ordem fixa previamente.

Para alem disso, cada palavra w = r1r2 · · · rn, onde cada ri ∈ S, e codificada

por

c(w) = yyc′(r1)yc′(r2) · · · yc′(rn)y.

Note-se que, devido ao prefixo yy de c(w), quando se tem uma sequencia

c(T)c(w), fica claro quando c(T) acaba.

45

Exemplo 1.22 Seja T a maquina de Turing

i����

- p����

f��������

-∆/∆, D �

a/b, D

b/a, D

-∆/∆, C

que percorre uma dada palavra sobre o alfabeto {a, b} trocando cada a por b

e vice-versa. Suponhamos, para simplificar, que

i = q1, p = q2 (e f = q0), a = s1, b = s2 (e ∆ = s0),

e que as 4 transicoes sao tomadas na ordem em que aparecem no grafo (da

esquerda para a direita e de cima para baixo).

A 1a¯ transicao e1, descrita por δ(i, ∆) = (p, ∆, D), i.e., δ(q1, s0) = (q2, s0, D)

e codificada por x2yxyx3yxyx3y, enquanto que T e codificada por

x2︸︷︷︸c′(q1)

y x2yxyx3yxyx3y︸ ︷︷ ︸c′(e1)

y x3yx2yx3yx3yx3y︸ ︷︷ ︸c′(e2)

y x3yx3yx3yx2yx3y︸ ︷︷ ︸c′(e3)

y x3yxyxyxyxy︸ ︷︷ ︸c′(e4)

y.

46

Teorema 1.23 (Turing, 1936) Existe uma maquina de Turing TU sobre o

alfabeto {x, y} tal que, para qualquer maquina de Turing T=(Q, A, T, δ, i, f, ∆)

e qualquer palavra w ∈ A∗, “ TU simula o processamento de w por T”, isto e,

1) T aceita w se e so se TU aceita c(T)c(w). Neste caso, se a saıda para w

em T e u, entao a saıda para c(T)c(w) em TU e c(u).

2) T entra em ciclo com w se e so se TU entra em ciclo com c(T)c(w). 2

Uma maquina de Turing TU nas condicoes do Teorema anterior e chamada uma

maquina de Turing universal.

O comportamento de uma destas maquinas e exemplificado de seguida. Seja T

a maquina do Exercıcio 1.26,

q1����

- q2����

q3����

q0��������

-∆/∆, D �

b/b, D

-

a/b, E

∆/∆, E �

b/b, E

-∆/∆, C

47

Simularemos o processamento da palavra w = baa pela maquina T. Considera-

remos uma maquina TU com 3 fitas:

• a 1a¯ fita e a fita de entrada: e iniciada com a palavra c(T)c(w). Esta fita e

tambem a de saıda: se T aceita w, entao TU aceita c(T)c(w) e o conteudo final

da 1a¯ fita de TU e o codigo do conteudo final da fita de T.

• a 2a¯ fita e a que simula o funcionamento de T: contem o codigo do conteudo

da fita de T num dado instante.

• a 3a¯ fita contem o codigo do estado atual da maquina T.

Note-se que c(baa) = y2x3yx2yx2y. As 3 fitas de TU sao portanto iniciadas

como segue:

c(T) c(baa)

︷ ︸︸ ︷ ︷ ︸︸ ︷∆ x x y x x y x y x x x y x y x x x y y · · · y y y y x x x y x x y x x y ∆ · · ·∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ · · · ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ · · ·∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ · · · ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ · · ·

48

A maquina TU :

• comeca por copiar c(baa) para a 2a¯ fita (excepto o prefixo yy), escrevendo

ainda xy como prefixo para representar o sımbolo ∆ que esta na 1a¯ celula da

fita de T;

• depois copia o xx, que codifica o estado inicial de T, para a 3a¯ fita e apaga-o

da 1a¯ fita;

• coloca os cursores das 3 fitas na posicao 2.

∆ x x y x y x x x y x y x x x y y · · · y y y y x x x y x x y x x y ∆ · · ·∆ x y x x x y x x y x x y ∆ ∆ ∆ ∆ · · · ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ · · ·∆ x x ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ · · · ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ · · ·

A 3a¯ fita indica que T esta atualmente no estado q1 e o cursor da 2a

¯ fita indica

que o cursor da fita de T esta a ler o sımbolo ∆. Assim, TU vai procurar na 1a¯ fita

o quıntuplo (de potencias de x, separadas pelo sımbolo y) que codifica a transicao

cujas duas primeiras componentes correspondem a estes dados.

49

Neste exemplo, por acaso, o cursor da 1a¯ fita ja esta colocado na posicao corre-

spondente aos dados das outras fitas. Agora, o quıntuplo da 1a¯ fita diz que:

• na maquina T o novo estado passa a ser o q2,

• o sımbolo ∆ deve ser mantido;

• o cursor deve mover-se para a direita.

Logo, a maquina TU transforma as 3 fitas e o resultado e o seguinte:

∆ x x y x y x x x y x y x x x y y · · · y y y y x x x y x x y x x y ∆ · · ·∆ x y x x x y x x y x x y ∆ ∆ ∆ ∆ · · · ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ · · ·∆ x x x ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ · · · ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ · · ·

Como resultado da proxima iteracao, obter-se-ia

∆ x x y x y x x x y x y x x x y y · · · y y y y x x x y x x y x x y ∆ · · ·∆ x y x x x y x x y x x y ∆ ∆ ∆ ∆ · · · ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ · · ·∆ x x x ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ · · · ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ · · ·

50

e a seguir

∆ x x y x y x x x y x y x x x y y · · · y y y y x x x y x x y x x y ∆ · · ·∆ x y x x x y x x x y x x y ∆ ∆ ∆ · · · ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ · · ·∆ x x x x ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ · · · ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ · · ·

• O processo e iterado ate que a maquina TU detete, na 3a¯ fita, que a maquina

T chegou ao estado final q0.

• Entao TU copia o conteudo da 2a¯ fita para a 1a

¯ (depois de apagar esta) e vai

para o seu estado final.

A situacao final das 3 fitas seria a seguinte:

∆ x y x x x y x x x y x x y ∆ · · ·∆ x y x x x y x x x y x x y ∆ · · ·∆ x ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ · · ·

Portanto a situacao final da fita da maquina T e ∆bba.

51

De seguida apresenta-se exemplos concretos de uma linguagem nao recursiva-

mente enumeravel e de uma linguagem recursivamente enumeravel que nao e re-

cursiva.

Seja NaoAutoAceite, tambem denotado por NAA, o seguinte subconjunto de

{x, y}∗:NaoAutoAceite = NAA1 ∪NAA2

onde

NAA1 = {w ∈ {x, y}∗ | w = c(T) e T nao reconhece w}NAA2 = {w ∈ {x, y}∗ | w 6= c(T) para toda a maquina de Turing T }.

Seja ainda AutoAceite o complemento AA = {x, y}∗ \ NAA de NaoAutoAceite

em {x, y}∗, ou seja,

AutoAceite = {w ∈ {x, y}∗ | w = c(T) e T reconhece w}.

52

Teorema 1.24 NaoAutoAceite e uma linguagem nao recursivamente enu-

meravel.

Demonstracao: Suponhamos que existe uma maquina de Turing T0 que aceita

NAA, ou seja,

T0 aceita uma palavra w ∈ {x, y}∗ se e so se w ∈ NAA. (1)

Seja w0 = c(T0) e consideremos a questao: T0 aceita w0?

• Se T0 aceita w0, entao w0 ∈ NAA por (1). Como w0 = c(T0) e w0 ∈ NAA,

entao w0 ∈ NAA1. Logo T0 nao aceita w0, o que e uma contradicao.

• Se T0 nao aceita w0, entao w0 ∈ NAA1 e portanto w0 ∈ NAA. Logo T0

aceita w0 por (1), o que e uma contradicao.

Em ambos os casos atinge-se uma contradicao. Por isso, a maquina T0 nao existe

e NAA nao e recursivamente enumeravel. 2

53

A seguir mostra-se que a linguagem AA e reconhecida por maquinas de Turing,

mas cada maquina dessas entra em ciclo pelo menos para uma entrada w 6∈ AA.

Teorema 1.25 A linguagem AutoAceite e recursivamente enumeravel mas

nao e recursiva.

Demonstracao: Seja w ∈ {x, y}∗. Tem-se

w ∈ AA ⇔ w = c(T) e T aceita w, para alguma maquina T

⇔ w = c(T) e TU aceita c(T)c(w), onde TU e uma MT universal

⇔ w = c(T) e TU aceita wc(w).

Constroi-se uma maquina de Turing T1 (provar que existe) que rejeite w se

w nao e codigo de alguma MT e que deixe na fita wc(w) se w = c(T) para

alguma maquina T. Entao AA e reconhecida pela maquina T1TU . Portanto AA

e recursivamente enumeravel.

Que AA nao e recursiva e consequencia do teorema anterior. De facto, se AA

fosse recursiva, entao AA = NAA seria tambem recursiva. 2

54