A postagem no blog de Scott Aaronson hoje deu uma lista de problemas / tarefas abertos interessantes em complexidade. Um em particular chamou minha atenção:
Crie uma biblioteca pública de instâncias 3SAT, com o menor número possível de variáveis e cláusulas, que teria consequências notáveis se resolvidas. (Por exemplo, instâncias que codificam os desafios de fatoração de RSA.) Investigue o desempenho dos melhores solucionadores de SAT atuais nesta biblioteca.
Isso desencadeou minha pergunta: qual é a técnica padrão para reduzir os problemas de RSA / fatoração para SAT e qual a velocidade? Existe uma redução tão padrão?
Só para esclarecer, por "rápido" não quero dizer tempo polinomial. Gostaria de saber se temos limites superiores mais apertados na complexidade da redução. Por exemplo, há uma redução cúbica conhecida?
fonte
Estendendo o que a @Amir escreveu, me deparei com a boa página da web a seguir, que hospeda um gerador de CNF para circuitos de fatoração que, por exemplo, poderia ser executado em alguns dos números (agora inativos) do Desafio de Factoring RSA (agora inativos) . As instâncias geradas estão em DIMACS formato que pode ser directamente alimentado a qualquer um dos concorrentes atuais na anual SAT solver competição . Em relação às instâncias difíceis do SAT em geral, os problemas de referência apresentados no site da competição do SAT parecem ser bastante úteis, também a classificação em aleatório / trabalhada / industrial é boa.
fonte
Aqui está um artigo sobre a geração de instâncias SAT a partir de fatoração:
Horie, S. & Watanabe, O. [1997] " Hard instance generation for SAT " Algoritmos e computação 1350: 22-31 ( pdf )
fonte
O ToughSat de Henry Yuen e Joseph Bebel é outra ferramenta semelhante à vinculada por @Martin, que gera fórmulas CNF que codificam instâncias de fatoração e outros problemas difíceis.
fonte
Veja
satfactor
:Converter fatoração inteira em um problema booleano de SATISFIABILITY
visão global
Os fatores determinantes de um número inteiro grande são de interesse do Homem desde pelo menos o tempo de Euclides. Não existe um algoritmo geral conhecido para esse problema que seja escalonado em tempo menor que exponencial em relação ao número de bits necessários para representar o número inteiro.
O que esse código faz
Converte um problema de fatoração inteiro em um problema booleano de SATISFIABILITY. Se o problema for resolvido por um solucionador SAT, ele extrai os fatores inteiros.
Os solucionadores de satisfação da Boolen melhoram a cada ano. A cada 2 anos, ocorre uma competição internacional entre solucionadores (consulte http://www.satcompetition.org/ e http://www.satlive.org/ ). Até que ponto esses solucionadores de última geração podem se sair contra um dos mais antigos problemas de matemática abertos existentes?
Este projeto tem 2 objetivos principais:
1) Converta o problema e fatore um número inteiro de interesse!
2) Crie rapidamente um problema de SATISFIABILIDADE solucionável ou insolúvel, cuja dificuldade é facilmente controlada pelo criador.
- Para criar um problema insatisfatório de SATISFIABILITY, basta codificar um número primo.
- Para criar problemas mais difíceis, mas solucionáveis, escolha números compostos maiores com menos fatores.
O número de interesse pode ser de qualquer tamanho!
Existem alguns solucionadores de SATISFIABILITY de código aberto. Vejo http://www.satlive.org/ para alguns deles.
Construir
make -C src /
Como
Insira um número de interesse em sua forma binária:
bin / iencode 10101> composite.21
// resolva com seu solucionador favorito e coloque resultados em solution.txt
bin / extract-sat composite.21 solution.txt
A saída seria:
00011
00111
que são representações binárias para números inteiros decimais 3 e 7, os fatores de 21.
Se um número inteiro de entrada tiver mais de 2 fatores e o problema SAT for resolvido, a saída será apenas dois dos fatores. Esses podem não ser números primos (você pode testar isso facilmente no Maxima, Maple ou Mathematica).
Nem todos os solucionadores SAT produzem resultados no mesmo formato. Pode ser necessário medicar esses resultados levemente. extract-sat requer um arquivo de solução contendo uma lista de números inteiros (em qualquer número de linhas). Por exemplo,
1 -2 3 4 -5 ...
fonte