命題論理式を和積標準形に変換するCGIページである.たとえば,a & (b ; b) は 分配律を使って a&b ; a& c に変換される. 論理式 - (a; b) は ド・モルガン律を使って (- a) & (- b)に変換される.
ブール代数の公式を教科書で見かける形で与え,あとはそれを参照しながら, 部分式を書き換えるという方針をとった.ブール代数理論のparamodulationを 遂行するプログラムといってもよいだろう. ところが,さまざまなブール式簡単化処理を を行っているため, ナイーブ版の作り方では,バックトラッキング数の組み合わせ的爆発が起こり, ごく簡単な例でも予想の時間内に終わらないことが分かった.
そこでさらに工夫をして得られたのが, このCGIで動いている方法である.Prologのリスト構造[a,b,...] を用いた 点が効いたのか,効果は劇的であった.下の例ならばどれも一瞬にして 結果が表示される.旧版では,中には一時間以上もかかる ものがあった.効果が劇的である理由は,部分式を「フラット」なリストにして表現する 方法にあると思われる.そしてこの方法は,論理積や論理和のような結合律と可換律を満たす 演算を持つ代数系の数式処理に対しても同様な効果があると予想される. なぜならば,結合律と可換律を満たす演算の式,たとえば,算術式,((1+2)+(3+4))+ 5 は木(項)ではなくリストを使って,+([1,2,3,4,5])と表す方が 自然であるし扱いやすいと考えられるからである.これ以上のことは 現時点では分からない.
問題: 同様に`積和標準形'への変換プログラムを作れ. ヒント: このProlog CGIのプログラム中の規則を2行を 適切に( = 論理積と論理和を`双対的'に) おきかえれば`積和標準形'への変換プログラムになる.