Problemas e Algoritmos
Que problemas podem ser resolvidos algoritmicamente?
- Muitos problemas numéricos, por exemplo.
- Ordenação, Criptografia, Programação Linear, etc
E sobre problemas na lógica?
Problemas e Instâncias
É necessário começar por definir (semi-formalmente) o que é um problema e uma instância e a diferença entre resolver e decidir
Definição (Problema, Instância, Resolver, Decidir)
Um problema é um conjunto de pares (instância, resposta).
- Resolver consiste em calcular a resposta que corresponde a uma instância.
- Decidir consiste em verificar se um candidato é, ou não, a resposta de uma instância.
Exemplo. Problema da soma
O problema da soma consiste no conjunto de pares em que . Algumas dos pares deste problema são
A resolução da soma tem como "entrada" uma instância e consiste em calcular um de forma que . Por exemplo, dada a instância a resolução é .
A decisão da soma tem como "entradas" uma instância e um candidado e consiste em verificar se , isto é, se é uma resposta da instância . Por exemplo, dada a instância e o candidato a decisão é . Já se o candidato for a decisão é .
Problemas Computacionais da Lógica Proposicional
Definição (SAT)
O problema da satisfação (SAT) consiste no conjunto de pares em que é uma proposição e um valor booleano tal que
Isto é, Dada uma proposição, determinar se essa proposição tem um modelo.
Nos Tipos de Proposições, uma proposição que tenha algum modelo é compatível ou satisfazível.
Definição (Validade)
O problema da validade consiste no conjunto de pares em que é uma proposição e um valor booleano tal que
Isto é, Dada uma proposição, determinar se essa proposição é válida.
Nos Tipos de Proposições, para uma proposição válida (ou tautologia) todas as valorações são modelos.
Definição (Provabilidade)
O problema da provabilidade consiste no conjunto de pares em que é uma proposição e um valor booleano tal que
Isto é, Dada uma proposição, determinar se essa proposição é um teorema.
Um teorema é uma proposição que tem uma prova (sem hipóteses).
O Problema da Satisfação (SAT)
Existe uma valoração tal que ?
É fácil fazer um algoritmo para resolver a este problema. Por exemplo, em Rust:
#![allow(unused)] fn main() { fn sat(p: Proposition) -> bool { let vs = valorations(p); // gerar todas as valorações de p for vi in vs { // para cada valoração vi... if vi(p) { // testar se vi é modelo de p return true; // nesse caso, devolver "true" } } return false; // se não foi encontrado um modelo, devolver "false" } }
O problema é que vs
tem elementos se tiver átomos. Se for satisfazível o algoritmo termina antes de testar todas as valorações. Mas, se não for satisfazível então este algoritmo vão ser testadas todas as valorações obtidas.
Este algoritmo não é eficiente porque consome demasiado tempo (a fazer as verificações no pior caso) e espaço (a memória para guardar todas as valorações).
Supondo que um computador que faz de verificações vi(p)
por segundo:
- Se tiver átomos existem valorações, e demora segundos, isto é milhões de milénios a verificar , no pior caso.
- Em comparação, o universo tem uma idade estimada de 13787 milhões de milénios; seriam necessárias milhões de vidas do universo para resolver este problema para uma única proposição.
- Mesmo melhorando milhões de vezes a velocidade dos computadores este algoritmo não é utilizável na prática — e átomos é um exemplo muito modesto.
Embora seja tecnicamente possível converter a função valorations
num iterador, resolvendo o problema do espaço, ainda assim continua a fazer as verificações — o problema do tempo persiste!.
Existe um algoritmo eficiente para resolver SAT? Ninguém sabe!
Quem resolver SAT eficientemente tem Fama, Fortuna & Glória Instantâneas, Universais & Eternas &tc.
O Interesse do Problema da Satisfação
Uma única proposição pode descrever um sistema complexo:
- Um automóvel.
- Um foguetão.
- Uma central nuclear.
- A economia de um país.
- O clima de um planeta.
- Um ser vivo.
- A ecologia de uma região.
- O funcionamento de um programa.
- ...
Um modelo descreve as condições para atingir um objetivo e/ou as consequências de uma ação.
Resolver SAT eficientemente (por exemplo, em tempo polinomial) iria permitir uma revolução em todos os setores da atividade humana: política, gestão, engenharia, etc.
Os Problemas do Problema da Satisfação
-
Embora sejam conhecidos algoritmos que resolvem rapidamente problemas SAT com dezenas de milhar de variáveis, a complexidade computacional é desconhecida no caso geral.
-
SAT é -completo. Isto significa que pode ser decidido em tempo polinomial e ser usado para resolver vários problemas de otimização, desenho de circuitos, inteligência artificial, etc.
-
A linguagem da lógica proposicional não descrimina objetos de um domínio nem como estes se relacionam — portanto SAT sofre também desta limitação.
Os Outros Problemas
- A validade é equivalente à provabilidade, porque se e só se (o teorema da validade e completude).
- A satisfação é equivalente à validade, porque se não existe tal que ( é uma contradição) então para qualquer , ( é válida).
Problemas Equivalentes. Intuitivamente dois problemas A e B são equivalentes se um algoritmo para resolver A pode ser eficientemente adaptado para resolver B e vice-versa.