Variables distintas para diferentes cláusulas

10

En la demostración del teorema de resolución, normalmente se supone que las variables en diferentes cláusulas son distintas. Esto no es algo que sucede automáticamente; requiere un código adicional significativo y computación para implementar. Dado eso, estoy buscando un caso de prueba para ello.

El problema es que, en todos los casos de prueba que he probado hasta ahora, no hay diferencia. Presumiblemente solo importa en casos extremos inusuales. Como dice Wikipedia , "las variables en diferentes cláusulas son distintas ... Ahora, unificar Q (X) en la primera cláusula con Q (Y) en la segunda cláusula significa que X e Y se convierten en la misma variable de todos modos".

¿Existen casos de prueba conocidos que realmente den una respuesta incorrecta si diferentes cláusulas usan las mismas variables?

rwallace
fuente

Respuestas:

6

Editar: encontré un mejor ejemplo. Considere estas cláusulas: Obviamente, este conjunto de cláusulas es contradictorio. Pero sin cambiar el nombre de las variables, el único solvente posible es y no son posibles más solventes, todo lleva a sustituir por , lo cual es imposible. P(f(x))f(x)x

¬PAGS(X)PAGS(F(X))PAGS(X)¬PAGS(F(F(X)))
PAGS(F(X))F(X)X

Editar: considere el significado de las cláusulas. Cada cláusula se cuantifica implícitamente universalmente. Entonces, el significado de sus variables no está fijado a nada. Ahora supongamos que tiene dos cláusulas que contienen . Si realiza la resolución sin renombrar en una de ellas, entonces agrega un significado a que no tiene: dice que significa lo mismo en ambas cláusulas, lo cual no es cierto. Si no tiene variables distintas en sus cláusulas, la resolución le dará conclusiones demasiado débiles.x x xXXXX


(La respuesta original.) Por ejemplo, tengamos 4 cláusulas:

  1. UNsi(X)
  2. ¬UNC(X)
  3. ¬si(C)
  4. ¬C(re)

donde son variables y constantes. Si realizamos una resolución en los dos primeros sin cambiar el nombre de , obtendremos . Podemos proceder con para obtener pero ahora no podemos resolverlo con .X,yC,reXsi(X)C(X)¬si(C)C(C)¬C(re)

Por otro lado, si cambiamos el nombre de a en el segundo para tener un conjunto disjunto de variables, obtendremos desde el primer paso de resolución y podemos derivar una cláusula vacía usando y .Xysi(X)C(y)¬si(C)¬si(re)

Petr Pudlák
fuente
si(X)¬si(C)UN¬UN
@rwallace No tener variables distintas no significa que no pueda derivar la cláusula vacía, solo que los métodos no están completos. Si siempre cambia el nombre de las variables, no importa en qué orden elija las cláusulas, siempre obtendrá la cláusula vacía si el conjunto original no es satisfactorio: el método está completo. Pero, si no cambia el nombre de las variables, entonces (como muestra el ejemplo) el orden de repente importa: algunas secuencias de derivaciones no encontrarán la cláusula vacía. Y, un probador no puede "decir" de antemano qué secuencia de derivaciones es la correcta.
Petr Pudlák
¿Pero no es el caso de que un método completo eventualmente deba probar todas las derivaciones posibles (a menos que encuentre primero la cláusula vacía)? Para estar seguro de que no hay garantía de que probará las derivaciones que mencioné antes que las que mencionó, pero cuando las que mencionó fallan debido a la falta de variables distintas, las que mencioné todavía están abiertas y un método completo debe volver y probar esos tarde o temprano?
rwallace
Su anexo sobre el significado de las cláusulas en el resumen tiene sentido, pero me parece que si es así, entonces debería ser posible encontrar un caso de prueba, algo que pueda alimentar a un probador y hacer que dé la respuesta incorrecta si La característica de las distintas variables está deshabilitada. Simplemente no he podido encontrar un caso de prueba hasta ahora.
rwallace
@rwallace ¿Por qué quieres hacer eso? La resolución es un método completo y usted sabe que, bajo cualquier circunstancia, solo es necesario realizar la resolución de cada par de cláusulas solo una vez. Sugiere probar eventualmente todas las secuencias posibles sobre cómo proceder con el retroceso. Esto dará como resultado un aumento realmente enorme de la complejidad del algoritmo, ni siquiera remotamente comparable con simplemente cambiar el nombre de las variables en cada paso.
Petr Pudlák