Variáveis ​​distintas para diferentes cláusulas

10

Na prova do teorema da resolução, normalmente é assumido que variáveis ​​em diferentes cláusulas são distintas. Isso não é algo que acontece automaticamente; requer código extra significativo e computação para implementar. Dado isso, estou procurando um caso de teste para ele.

O problema é que, em todos os casos de teste que eu tentei até agora, não faz diferença. Presumivelmente, importa apenas em casos extremos incomuns. Como a Wikipedia coloca, "variáveis ​​em cláusulas diferentes são distintas ... Agora, unificar Q (X) na primeira cláusula com Q (Y) na segunda cláusula significa que X e Y se tornam a mesma variável de qualquer maneira".

Existem casos de teste conhecidos que darão a resposta errada se cláusulas diferentes usarem as mesmas variáveis?

rwallace
fonte

Respostas:

6

Edit: Encontrei um exemplo melhor. Considere estas cláusulas: Obviamente, esse conjunto de cláusulas é contraditório. Mas sem renomear variáveis, o único resolvente possível é e não são mais possíveis - todos levam à substituição de por , o que é impossível. P(f(x))f(x)x

¬P(x)P(f(x))P(x)¬P(f(f(x)))
P(f(x))f(x)x

Editar: considere o significado das cláusulas. Cada cláusula é implicitamente quantificada universalmente. Portanto, o significado de suas variáveis ​​não está fixo em nada. Agora, digamos que você tenha duas cláusulas, ambas contendo . Se você executar a resolução sem renomear em uma delas, adicione um significado a que não possui: você diz que significa a mesma coisa nas duas cláusulas, o que não é verdade. Se você não tiver variáveis ​​distintas em suas cláusulas, a resolução fornecerá conclusões muito fracas.x x xxxxx


(A resposta original.) Por exemplo, vamos ter 4 cláusulas:

  1. UMAB(x)
  2. ¬UMAC(x)
  3. ¬B(c)
  4. ¬C(d)

onde são variáveis constantes . Se executarmos a resolução nos dois primeiros sem renomear , obteremos . Podemos prosseguir com para obter mas agora não podemos resolvê-lo com .x,yc,dxB(x)C(x)¬B(c)C(c)¬C(d)

Por outro lado, se renomearmos para no segundo para ter um conjunto de variáveis ​​separado, obteremos na primeira etapa da resolução e podemos derivar uma cláusula vazia usando e .xyB(x)C(y)¬B(c)¬B(d)

Petr Pudlák
fonte
Quando tento isso no meu provador com variáveis ​​distintas desabilitadas, ele resolve com para fornecer , obtém da mesma forma e, portanto, a cláusula vazia, portanto o resultado final é o mesmo. Estou esquecendo de algo? B(x)¬B(c)UMA¬UMA
precisa saber é o seguinte
@rwallace Não ter variáveis ​​distintas não significa que você não pode derivar a cláusula vazia, apenas que os métodos não estão completos. Se você sempre renomear variáveis, não importa em que ordem você escolhe cláusulas, sempre derivará a cláusula vazia se o conjunto original for insatisfatório - o método está completo. Mas, se você não renomear variáveis, (como o exemplo mostra), a ordem é subitamente importante - algumas seqüências de derivações não encontrarão a cláusula vazia. E, um provador não pode "contar" antecipadamente qual sequência de derivações é a correta.
Petr Pudlák 6/09/12
Mas não é o caso de um método completo eventualmente tentar todas as derivações possíveis (a menos que encontre a cláusula vazia primeiro)? Para ter certeza de que não há garantia, ele tentará as derivações mencionadas antes das mencionadas, mas quando as mencionadas falham por falta de variáveis ​​distintas, as mencionadas ainda estão abertas e um método completo deve voltar e tentar aqueles mais cedo ou mais tarde?
precisa saber é o seguinte
Seu adendo em relação ao significado das cláusulas no resumo faz sentido, mas parece-me que, se for assim, deve ser possível encontrar um caso de teste, algo que eu possa alimentar um provador e fazer com que ele dê a resposta errada se o recurso de variáveis ​​distintas está desativado. Só não consegui encontrar um caso de teste até agora.
rwallace
@rwallace Por que você quer fazer isso? A resolução é um método completo e você sabe que, em qualquer circunstância, é necessário executar a resolução em cada par de cláusulas apenas uma vez. Você sugere, eventualmente, tentar todas as sequências possíveis como proceder com o retorno. Isso resultará em um aumento realmente enorme da complexidade do algoritmo, nem remotamente comparável com o simples nome de variáveis ​​em cada etapa.
Petr Pudlák