Un teorema clásico en Programación Entera por Lenstra dice que cualquier sistema de enteros $$A x \le b$$ se puede resolver en tiempo polinómico, donde $A \in \mathbb{Z}^{m \times n}, x \in \mathbb{Z}^n, b \in \mathbb{Z}^m$. Aquí fijamos la dimensión $n$ de las variables a resolver (sería NP-completo resolver para $n$ arbitrario).
Visto bajo la lente de la lógica/complexidad computacional, este teorema dice que cualquier declaración existencial $$ \exists x \in \mathbb{Z}^n : \Phi(x)$$ se puede decidir en tiempo polinómico, donde $\Phi$ es una fórmula en la aritmética de Presburger.
Por el trabajo de Semenov, también sabemos que la aritmética de Presburger con predicados adicionales, como "x es una potencia de 2", o "x es un número Fibonacci" es decidible.
Pregunta: Para $n$ fijo, ¿podemos decidir en tiempo polinómico oraciones de la forma $$\exists x \in \mathbb{Z}^n : \Psi(x)$$ donde $\Psi(x)$ es una fórmula de Presburger, aumentada con algunos predicados de Fibonacci (o Potencia de 2)?
Ejemplo: ¿Tiene el siguiente sistema una solución?
$$ \begin{cases} 3x_1 + 2x_2 \le 1000 \\ 17x_2 - x_1 \le 5 \\ 2x_1 + 5x_2 \quad \text{es una potencia de 2} \end{cases} $$
1 votos
¿Estás limitando a $x_i>0$?
0 votos
Parece muy poco probable para mí...
0 votos
Sí, podemos restringirnos a variables positivas. No creo que cambie mucho.
0 votos
Estoy seguro de que sabes (pero también mencionaré por completitud) que los solucionadores SMT pueden hacer este tipo de cosas en la práctica.
1 votos
Cambiando a variables positivas es un cambio lineal de variables, duplicas su número, lo cual está bien en este contexto.
0 votos
¿Qué haces si no hay una solución?
0 votos
@joro: Me gustaría tener un procedimiento para decidir si hay una solución o no. Más específicamente, estoy interesado en la complejidad de dicho procedimiento.
0 votos
@SteveHuntsman 'Los solucionadores SMT pueden hacer este tipo de cosas en la práctica', ¿podrías explicarlo?
1 votos
@Turbo La forma más sencilla de hacer que un solucionador SMT funcione en esto es tener un literal para cada potencia de dos en un rango razonable (ten en cuenta que esto impone límites) y luego hacer que funcione. No estoy seguro si hay una mejor manera de hacer las cosas de inmediato. Un buen lugar para comenzar después de es.wikipedia.org/wiki/Satisfiability_modulo_theories es decision-procedures.org
0 votos
¿Me falta algo? Es bien sabido que decidir proposiciones en aritmética de Presberger lleva tiempo exponencial doble. La programación entera parecería ser peor en lugar de mejor que un mero algoritmo de decisión, que podría considerarse como un solucionador cuyo resultado estaba limitado a estar en el conjunto {0,1}.