En lógica matemática , las lógicas de punto fijo son extensiones de la lógica de predicados clásica que se han introducido para expresar la recursividad. Su desarrollo ha sido motivado por la teoría descriptiva de la complejidad y su relación con los lenguajes de consulta de bases de datos , en particular con Datalog .
La lógica de punto mínimo fue estudiada sistemáticamente por primera vez por Yiannis N. Moschovakis en 1974, [1] y se presentó a los científicos informáticos en 1979, cuando Alfred Aho y Jeffrey Ullman sugirieron la lógica de punto fijo como un lenguaje de consulta expresivo de bases de datos. [2]
Para una firma relacional X , FO[PFP]( X ) es el conjunto de fórmulas formadas a partir de X utilizando conectivos y predicados de primer orden , variables de segundo orden y un operador de punto fijo parcial utilizado para formar fórmulas de la forma , donde es una variable de segundo orden, una tupla de variables de primer orden, una tupla de términos y las longitudes de y coinciden con la aridad de .
Sea k un número entero, sean vectores de k variables, P sea una variable de segundo orden de aridad k y sea φ una función FO(PFP,X) que utilice x y P como variables. Podemos definir iterativamente tal que y (es decir, φ sustituido por la variable de segundo orden P ). Entonces, o hay un punto fijo o la lista de s es cíclica. [3]
se define como el valor del punto fijo de en y si hay un punto fijo; en caso contrario, es falso. [4] Dado que P s son propiedades de la aridad k , hay como máximo valores para s, por lo que con un contador de espacio polinomial podemos verificar si hay un bucle o no. [5]
Se ha demostrado que en estructuras finitas ordenadas, una propiedad es expresable en FO(PFP, X ) si y sólo si se encuentra en PSPACE . [6]
Dado que los predicados iterados involucrados en el cálculo del punto fijo parcial no son en general monótonos, es posible que el punto fijo no siempre exista. FO(LFP,X), lógica de punto mínimo fijo , es el conjunto de fórmulas en FO(PFP,X) donde el punto fijo parcial se toma sólo sobre aquellas fórmulas φ que sólo contienen ocurrencias positivas de P (es decir, ocurrencias precedidas por un número par de negaciones). Esto garantiza la monotonicidad de la construcción de punto fijo (es decir, si la variable de segundo orden es P , entonces siempre implica ).
Debido a la monotonicidad, solo agregamos vectores a la tabla de verdad de P , y como solo hay vectores posibles siempre encontraremos un punto fijo antes de las iteraciones. El teorema de Immerman-Vardi, mostrado independientemente por Immerman [7] y Vardi , [8] muestra que FO(LFP, X ) caracteriza a P en todas las estructuras ordenadas.
La expresividad de la lógica de punto mínimo fijo coincide exactamente con la expresividad del lenguaje de consulta de bases de datos Datalog , lo que demuestra que, en estructuras ordenadas, Datalog puede expresar exactamente aquellas consultas ejecutables en tiempo polinomial. [9]
Otra forma de garantizar la monotonicidad de la construcción de punto fijo es agregando solo nuevas tuplas en cada etapa de la iteración, sin eliminar las tuplas que ya no son válidas. Formalmente, definimos como dónde .
Este punto fijo inflacionario coincide con el punto menos fijo donde se define este último. Aunque a primera vista parece que la lógica inflacionaria de punto fijo debería ser más expresiva que la lógica de punto fijo mínimo, ya que admite una gama más amplia de argumentos de punto fijo, de hecho, cada fórmula FO[IFP]( X ) es equivalente a una fórmula FO[LFP]( X ). [10]
Si bien todos los operadores de punto fijo introducidos hasta ahora iteran sólo sobre la definición de un único predicado, es más natural pensar que muchos programas de computadora iteran sobre varios predicados simultáneamente. Ya sea aumentando la aridad de los operadores de punto fijo o anidándolos, cada punto fijo mínimo, inflacionario o parcial simultáneo puede de hecho expresarse utilizando las correspondientes construcciones de iteración única discutidas anteriormente. [11]
En lugar de permitir la inducción sobre predicados arbitrarios, la lógica de cierre transitivo sólo permite expresar directamente cierres transitivos .
FO[TC]( X ) es el conjunto de fórmulas formadas a partir de X utilizando conectivos y predicados de primer orden, variables de segundo orden y un operador de cierre transitivo utilizado para formar fórmulas de la forma , donde y son tuplas de primeros pares distintos -variables de orden, y tuplas de términos y las longitudes de , y coinciden.
TC se define de la siguiente manera: Sea k un número entero positivo y sean vectores de k variables. Entonces es cierto si existen n vectores de variables tales que y para todos es verdadero. Aquí, φ es una fórmula escrita en FO(TC) y significa que las variables u y v se reemplazan por x e y .
Sobre estructuras ordenadas, FO[TC] caracteriza la clase de complejidad NL . [12] Esta caracterización es una parte crucial de la prueba de Immerman de que NL es cerrado bajo complemento (NL = co-NL). [13]
FO[DTC]( X ) se define como FO(TC,X) donde el operador de cierre transitivo es determinista. Esto significa que cuando aplicamos , sabemos que para todo u , existe como máximo un v tal que .
Podemos suponer que es azúcar sintáctico para dónde .
Sobre estructuras ordenadas, FO[DTC] caracteriza la clase de complejidad L . [12]
Las operaciones de punto fijo que definimos hasta ahora iteran las definiciones inductivas de los predicados mencionados en la fórmula indefinidamente, hasta que se alcanza un punto fijo. En las implementaciones, puede ser necesario limitar el número de iteraciones para limitar el tiempo de cálculo. Los operadores resultantes también son de interés desde un punto de vista teórico ya que también pueden usarse para caracterizar clases de complejidad.
Definiremos el primer orden con iteración ; Aquí hay una (clase de) funciones de enteros a enteros, y para diferentes clases de funciones obtendremos diferentes clases de complejidad .
En esta sección escribiremos significar y significar . Primero necesitamos definir bloques cuantificadores (QB), un bloque cuantificador es una lista donde las s son fórmulas FO sin cuantificadores y las s son o . Si Q es un bloque de cuantificadores, llamaremos al operador de iteración, que se define como Q tiempo escrito . Hay que prestar atención que aquí hay cuantificadores en la lista, pero solo k variables y cada una de esas variables se usa veces. [14]
Ahora podemos definir que son las fórmulas FO con un operador de iteración cuyo exponente está en la clase y obtenemos las siguientes igualdades: