Pertanyaan Bagaimana menerapkan logika Tanduk deklaratif sepenuhnya? [Tutup]


Saya ingin memformalkan beberapa pengetahuan dan mengeksekusi pertanyaan dalam apa yang dapat disebut sebagai sepenuhnya-deklaratif Logika tanduk (atau, Prolog sepenuhnya-deklaratif). Adakah yang bisa memberikan beberapa panduan tentang cara menerapkannya? Secara singkat saya rekap uraian halus dari tautan di atas:

Bahasa formal adalah dari (inti) Prolog: "program" adalah seperangkat aturan dan fakta seperti dalam Prolog (termasuk fungsi dan variabel dan pada dasarnya, hanya berisi predikat yang ditentukan pengguna).

Berbeda dengan Prolog, bagaimanapun, saya mencari sebuah implementasi yang baik dan lengkap sehubungan dengan semantik deklaratif standar dari program logika --- model Herbrand paling tidak (yaitu, kumpulan istilah dasar yang didefinisikan secara induktif). Dalam pekerjaan teoritis pada pemrograman logika, ini biasanya merupakan objek studi, dan sudah diketahui bahwa jawaban suara dan jawaban lengkap untuk pertanyaan dapat diperoleh (dalam arti "secara rekursif-enumerabel"), misalnya, menggunakan subjek resolusi SLD untuk kondisi berikut:

  • adil cari aturan yang cocok (misalnya, pencarian kedalaman-pertama Prolog adalah tidak adil);
  • penyatuan dengan "terjadi-cek"(memeriksa bahwa variabel tidak terjadi dalam istilah yang bersatu).

Saya mencari implementasi yang ringkas yang akan membangun kemampuan yang ada, daripada menciptakan roda. Dua dari arah yang lebih menjanjikan yang saya lihat mengimplementasikannya sebagai meta-interpreter dari Prolog, atau sebagai bagian dari beberapa teorema prover. Adakah yang memiliki pengetahuan praktis dalam domain ini yang memberikan beberapa panduan tentang cara menerapkannya? Bisakah itu mudah diimplementasikan miniKanren?


Niat saya adalah untuk merumuskan beberapa pengetahuan dengan cara yang sepenuhnya deklaratif. Karakteristik penting dari formalisasi semacam itu adalah bahwa ia secara tepat sesuai dengan gagasan matematika induksi (monoton), sehingga pengetahuan dan sifat-sifatnya dapat dengan mudah dibenarkan dengan argumen induktif.


5
2017-07-28 11:21


asal


Jawaban:


Ini adalah latihan yang mudah untuk menerapkan prover untuk logika Horn dalam beberapa baris Prolog. Mulailah dengan Inter-Interpretasi Vanilla, lalu ubah untuk menggunakan standar unify_with_occurs_check/2 predikat untuk semua unifications, dan untuk menggunakan prosedur pencarian yang lengkap - kedalaman pencarian mendalam yang berulang adalah yang paling sederhana untuk diterapkan.

Lihat halaman @ mat Sepasang Meta-interpreter di Prolog untuk beberapa inspirasi.


7
2017-07-28 11:34



Lebih banyak petunjuk:

  • Datalog memiliki semantik deklaratif, tetapi sebagai "Prolog tanpa simbol fungsi" itu bukan Prolog. Lihat intro yang sangat baik "Apa yang Selalu Ingin Anda Ketahui tentang Datalog (Dan Jangan Pernah Bertanya)" oleh Ceri, Gottlob dan Tanca, 1989. Tersedia melalui CiteSeerX

  • Implementasi Prolog yang digunakan tabling alih-alih pencarian kedalaman-pertama untuk deklarasi tambahan (ditambah fitur bagus lainnya yang saya mengerti), suka XSB.


2
2017-07-31 03:49