Variabel yang berbeda untuk klausa yang berbeda

10

Dalam pembuktian teorema resolusi, biasanya diasumsikan variabel dalam klausa yang berbeda berbeda. Ini bukan sesuatu yang terjadi secara otomatis; itu membutuhkan kode dan perhitungan tambahan yang signifikan untuk diterapkan. Mengingat itu, saya mencari test case untuk itu.

Masalahnya adalah, dalam semua kasus uji yang saya coba sejauh ini, tidak ada bedanya. Agaknya itu penting hanya dalam kasus tepi yang tidak biasa. Seperti Wikipedia katakan, "variabel dalam klausa yang berbeda berbeda ... Sekarang, menyatukan Q (X) dalam klausa pertama dengan Q (Y) dalam klausa kedua berarti bahwa X dan Y tetap menjadi variabel yang sama."

Adakah kasus uji yang diketahui yang benar-benar akan memberikan jawaban yang salah jika beberapa klausa menggunakan variabel yang sama?

rwallace
sumber

Jawaban:

6

Sunting: Saya menemukan contoh yang lebih baik. Pertimbangkan klausa ini: Jelas, kumpulan klausa ini saling bertentangan. Tetapi tanpa mengganti nama variabel, satu-satunya penyelesaian yang mungkin adalahP(f(x))dan tidak ada lagi penyelesaian yang mungkin - semua mengarah pada penggantianf(x)untukx, yang tidak mungkin.

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

Sunting: Pertimbangkan arti klausa. Setiap klausa secara implisit dikuantifikasi secara universal. Jadi arti dari variabel-variabelnya tidak terbatas pada apa pun. Sekarang katakanlah Anda memiliki dua klausa yang keduanya berisi . Jika Anda melakukan resolusi tanpa mengganti nama x di salah satu dari mereka, maka Anda menambahkan makna ke x yang tidak ada: Anda mengatakan bahwa x berarti hal yang sama di kedua klausa, yang tidak benar. Jika Anda tidak memiliki variabel berbeda di klausa Anda, resolusi akan memberi Anda kesimpulan yang terlalu lemah.xxxx


(Jawaban aslinya.) Misalnya, mari kita memiliki 4 klausa:

  1. SEBUAHB(x)
  2. ¬SEBUAHC(x)
  3. ¬B(c)
  4. ¬C(d)

di mana adalah variabel dan c , d konstanta. Jika kita melakukan resolusi pada dua yang pertama tanpa mengganti nama x , kita akan mendapatkan B ( x ) C ( x ) . Kita dapat melanjutkan dengan ¬ B ( c ) untuk mendapatkan C ( c ) tetapi sekarang kita tidak dapat menyelesaikannya dengan ¬ C ( d ) .x,yc,dxB(x)C(x)¬B(c)C(c)¬C(d)

xyB(x)C(y)¬B(c)¬B(d)

Petr Pudlák
sumber
B(x)¬B(c)SEBUAH¬SEBUAH
@rwallace Tidak memiliki variabel yang berbeda tidak berarti Anda tidak dapat menurunkan klausa kosong, hanya saja metode tidak lengkap. Jika Anda selalu mengganti nama variabel maka tidak masalah urutan yang Anda pilih klausa, Anda akan selalu mendapatkan klausa kosong jika set asli tidak memuaskan - metode selesai. Tetapi, jika Anda tidak mengganti nama variabel, maka (seperti contoh menunjukkan) urutan tiba-tiba penting - beberapa derivasi tidak akan menemukan klausa kosong. Dan, pepatah tidak bisa "memberi tahu" terlebih dahulu urutan derivasi mana yang tepat.
Petr Pudlák
Tetapi bukankah itu masalahnya bahwa suatu metode yang lengkap pada akhirnya harus mencoba setiap derivasi yang mungkin (kecuali ia menemukan klausa kosong terlebih dahulu)? Untuk memastikan tidak ada jaminan itu akan mencoba derivasi yang saya sebutkan sebelum yang Anda sebutkan, tetapi ketika yang Anda sebutkan gagal karena kurangnya variabel yang berbeda, yang saya sebutkan masih terbuka dan metode lengkap harus kembali dan mencoba itu cepat atau lambat?
rwallace
Adendum Anda mengenai makna klausa dalam abstrak masuk akal, tetapi menurut saya jika demikian maka mungkin untuk menemukan test case, sesuatu yang bisa saya masukkan ke dalam prover dan membuatnya memberikan jawaban yang salah jika fitur variabel yang berbeda dinonaktifkan. Saya hanya belum dapat menemukan test case sejauh ini.
rwallace
@rwallace Mengapa Anda ingin melakukan itu? Resolusi adalah metode yang lengkap dan Anda tahu bahwa dalam keadaan apa pun hanya perlu melakukan resolusi pada setiap pasangan klausa hanya sekali. Anda menyarankan untuk akhirnya mencoba semua urutan yang mungkin bagaimana melanjutkan dengan mundur. Hal ini akan mengakibatkan sangat besar peningkatan kompleksitas algoritma ini, tidak bahkan jauh dibandingkan dengan hanya mengubah nama variabel pada setiap langkah.
Petr Pudlák