• Nenhum resultado encontrado

2.3 Máquinas de Turing paraconsistentes

2.3.2 Poder computacional das MTPs

Poderíamos ingenuamente pensar que seria fácil definir uma MTP que computasse o problema de satisfatibilidade de fórmulas do cálculo proposicional clássico (SAT)7em tempo polinomial: poderíamos considerar como oráculo uma MTD M′ tal que, dada uma fórmula α do cálculo proposicional clássico e uma valoração para as variáveis em α, determine o valor de verdade de α para essa valoração em tempo polinomial (o que é relativamente fácil de definir). Acrescentando instruções que gerem multiplicidade de símbolos nas posições correspondentes à valoração (generalizando o que fazem as instruções i3 a i6 do exemplo anterior), poderíamos dessa maneira representar todas as possíveis valorações para que M′ realize a valoração da fórmula em paralelo. E por último, acrescentando a instrução ik+1 : qf0•1qf +1 (onde qf é o estado final de M′), seria possível eliminar a ambigüidade do resultado quando a fórmula não seja nem contradição nem tautologia.

Contudo, o paralelismo permitido por este primeiro modelo de MTPs tem pro- priedades peculiares que podem levar a ‘anomalias’ no processo de computação.

7O problema SAT consiste em definir um algoritmo que, dada uma fórmula do cálculo propo-

sicional clássico como entrada, determine se essa fórmula é satisfatível ou não, i.e., se existe uma valoração que faz a fórmula tomar o valor verdadeiro. É bem conhecido que SAT é um problema NP-completo.

Por exemplo, considere uma MTD M′ com instruções: i

1 = q100q2, i2 = q111q3, i3 = q20Rq4, i4 = q31Rq4, i5 = q21Rq5, i6 = q4∅1q4 e i7 = q5∅0q5. Se M′ começa a computação com um único símbolo (0 ou 1) como dado de entrada, pode se veri- ficar que M′ computa a função constante 1 (deixando o resultado na posição 1 da fita). Porém, se M′ é considerada como um oráculo que começa a computar com os símbolos 0 e 1 (ambos simultaneamente) como dados de entrada, produz então como saída 0 e 1, como se M′ computasse uma função não constante. Este exem- plo mostra que diferentes caminhos de computação do oráculo podem se misturar de maneira indiscriminada, gerando caminhos de computação que não são possí- veis na MTD (considerada como oráculo) quando computa de maneira seqüencial, e produzindo resultados indesejados. Portanto somente MTDs que não produzam resultados anômalos (i.e., resultados que não podem ser obtidos se a MTD computar de maneira seqüencial) podem ser consideradas como oráculos. As MTDs com estas propriedades serão chamadas de paralelizáveis.

Conseqüentemente, para definir uma MTP que computasse SAT em tempo poli- nomial precisaríamos que a MTD M′, que determina o valor de verdade da fórmula dada uma valoração, fosse paralelizável. Definir uma MTD com estas propriedades não é nada fácil, e talvez seja mesmo impossível: na verdade, essa tarefa é equiva- lente a demonstrar que P = NP (o que seria uma conseqüência direta do Teorema 2.4, apresentado a seguir).

O paralelismo permitido por estas primeiras MTPs, embora possa ser usado para explicar algumas propriedades da computação quântica (veja o Capítulo 5), pode ser simulado em tempo polinomial por MTDs (Teorema 2.4), e portanto não representa nenhuma vantagem quanto à eficiência.

Teorema 2.4. Toda MTP pode ser simulada em tempo polinomial por uma MTD. Demonstração. SejaM uma MTP com n estados e m símbolos de entrada/saída. A MTD M′ para simular M é definida assim:

• Vamos supor que a fita de M′ é dividida em 2n + m faixas (estas 2n + m faixas podem ser reduzidas a uma faixa mudando a linguagem de M′, sem implicações quanto à eficiência).

• As faixas i (1 ≤ i ≤ n), na posição p, serão usadas para representar os estados qi em que M se encontra nessa posição, representando com 1 a ocorrência do estado e com 0 a não ocorrência.

• As faixas j (n + 1 ≤ j ≤ n + m), na posição p, serão usadas para representar os símbolos sj presentes na célula de M nessa posição, representando com 1 a ocorrência do símbolo e com 0 a não ocorrência.

• As faixas n+m+1 a 2n+m serão usadas para calcular os estados que resultam da execução em paralelo das instruções em M; o valor da faixa n + m + i, na posição p, indicará se o estado qi ocorrera nessa posição no seguinte instante de tempo, representando com 1 a ocorrência e com 0 a não ocorrência.

• O símbolo $ sera usado na faixa 1 de M′ para delimitar a área na qual M está em algum estado.

O dado de entrada para M′ é representado de acordo com as convenções anteriores, e os delimitadores $ são colocados nas posições −1 e 1 da fita (antes e depois da posição 0, que é onde começa a computação de M). Para simular um passo de computação de M, M′ deve percorrer quatro vezes a parte da fita delimitada pelos símbolos $. No primeiro percurso (de esquerda a direita), M′ simula a execução em paralelo em M das instruções do tipo (II) (onde a ação consiste em um movimento a direita): em cada posição p, M′ escreve valores nas faixas n + m + 1 a 2n + m de acordo com as instruções de M e o conteúdo das faixas 1 a n+m; além disso, desloca os delimitadores $ se for necessário. O segundo percurso é similar ao anterior, mas no sentido contrário e simulando a execução de instruções do tipo (III) (onde a ação consiste em um movimento à esquerda). No terceiro percurso (de esquerda para a direita de novo), M′ simula a execução em paralelo de instruções do tipo (I) (onde a ação consiste em modificar o símbolo da célula): em cada posição p, dependendo das instruções de M e do conteúdo das faixas 1 a n + m, M′ escreve valores nas faixas n + 1 a n + m (correspondentes a símbolos escritos pelas instruções de M) e nas faixas n + m + 1 a 2n + m (correspondentes às mudanças de estados das instruções de escrita). Finalmente, no quarto percurso (de direita a esquerda), M′ copia os

valores das faixas n + m + 1 a 2n + m nas faixas 1 a n, e reinicia as faixas n + m + 1 a 2n + m deixando-as com valores 0.

Vamos mostrar agora que a simulação de n passos de computação é realizada em tempo polinomial: depois de n passos de computação em M, o estado mais à direita e o estado mais à esquerda podem estar separados no máximo por 2n células; portanto, essa é a separação máxima entre os delimitadores $ em M′ na simulação do n-ésimo passo de computação. Como em cada percurso que M′ realiza na simulação de um passo de computação a cabeça da máquina deve se deslocar entre os delimitadores $, além de realizar operações de escrita em cada posição, cada percurso na simulação do n-ésimo passo toma no máximo 4n passos (ignorando os passos devidos a possíveis deslocamentos dos delimitadores $, que são um número constante de passos). Dessa forma a simulação da n-ésima instrução exige no máximo 16n passos. Portanto, para simular os n primeiros passos de computação, M′ vai demorar no máximo n(16n) passos de computação, i.e., O(n2).

Note que cada escolha de elementos de uma MTP (em qualquer instante de tempo) representa uma configuração de uma MT clássica, portanto, podemos pensar na configuração de uma MTP como sendo um conjunto de configurações (clássicas). Assim, sob o suposto de que no final da computação de uma MTP deve ser escolhida aleatoriamente uma única configuração das múltiplas possíveis, de maneira a obter um único resultado, e de que cada configuração é escolhida com a mesma probabi- lidade, podemos adequar a definição de aceitação de cadeias de símbolos (Definição 2.5) para MTPs da seguinte maneira:

Definição 2.13. Seja M uma MTP com alfabeto de entrada/saída Σ e seja α ∈ Σ. M aceita (resp. rejeita) α se a computação de M(α) pára e pelo menos 23 das configurações finais8 tem como estado q

s (resp. qn), i.e. se a probabilidade de obter uma configuração final com estado qs (resp. qn) é maior ou igual a 23.

Nas MTPs o tempo de computação não pode, porém, ser definido como o número de instruções que a máquina executa; pois num mesmo instante de tempo múltiplas

8Por ‘configurações finais’ nos referimos às configurações no instante de tempo em que a com-

instruções podem ser executadas simultaneamente. O tempo de computação numa MTP deve ser definido como o número de passos de computação, onde um passo de computação corresponde à execução (simultânea) de todas as instruções que podem ser efetivadas na configuração atual da máquina. Podemos então definir uma nova classe de complexidade algorítmica, a qual chamaremos de BParP, que corresponde à classe de linguagens que podem ser decididas por MTPs em tempo polinomial com erro limitado.

BParP ={L | existe uma MTP que decide L e termina em tempo f (c) = ck, para alguma constante k∈ N}.

É claro que P ⊆ BParP (pois as MTD são casos especiais de MTPs). A inclusão no outro sentido é conseqüência do Teorema 2.4:

Corolário 2.1. BParP ⊆ P.

Demonstração. Basta acrescentar instruções na MTDM′, definida na demonstração do Teorema 2.4, para determinar se o número de símbolos 1 na faixa correspondente ao estado qs é pelo menos 23 dos que tem na faixa correspondente ao estado qn; nesse caso M′ deve passar a seu estado de aceitação, caso contrário deve passar a seu estado de rejeição.

Portanto, BParP = P. O que mostra que este primeiro modelo de MTPs intro- duzido não acrescenta nada quanto à complexidade algorítmica.