並行論理プログラミングと半環
「論理プログラミング」では PLP と PLP+ というプログラミング言語を考えています。PLP は「Prolog について」のところで書いたような理想的な並行 Prolog です。PLP+ はこれの無限に実行できるバージョンなのですが、PLP が定義されていないので PLP+ も定義されていません。PLP+ はいったい何なのかというと、「素数を登録するプログラム」のようなものが書けるように Prolog を拡張したプログラミング言語を目指したものです。
以下のような問題を考えます。
- PLP は定義できるか
- PLP で論理式が証明できるかどうかを調べることができるか
2は「不完全性定理」で調べた「チューリング機械の停止問題」の問題があるので、(まだ PLP を定義していないのですが)できないと考えられます。その代わりに
- PLP が有限回で終了して結果が真 論理式が証明できる
という問題を考えることができます。
まず、PLP のプログラムを単純化して考えます。
Prolog のプログラムを単純化して
とします。これを項 に論理式
を対応させる写像
とみなします。これを
と書くことにします。項 が写る先
を
と書くことにします。
と
に対して を項 に論理式
を展開して選言標準形にしたものを対応させる写像とします。これを展開と呼ぶことにします。展開をChatGPTでやってもらおうとしましたが、うまくできませんでした。展開を有限回繰り返したものの各「連言」を順に実行する(「選言」については並行に実行)とどうなるのか、ということを考えます。これで論理式の証明ができるのかということをChatGPTで聞いてみましたが、あまり良い答えは返ってきませんでした。これは無限ループになる可能性があると考えられますが、よくわかりません。今後考えていきます。