GNU Prolog で書かれたトートロジー チェッカーのオープンソース実装を探しています (SWI-Prolog の実装も受け入れられますが、GNU Prolog が推奨されます)。
次のようなクエリでプログラム入力をフィードしたいと思います。
A and (B or C) iff (A or B) and (A or C).
また
3^2 * (X + 2) == (9 * X) + 18.
もちろん、表記は次のように異なる場合があります。
(3 power 2) mul (X plus 2) equals (9 mul X) plus 18.
結果として私が期待するのは、「はい/いいえ」、「等しい/異なる」、「見つかった証明/証明を見つけることができなかった」などのブール値の答えです。
ftp://ftp.cs.yorku.ca/pub/peter/SVT/GNU/で GNU-Prolog のトートロジー チェッカーを見つけましたが、ライセンスが添付されておらず、Gnu Prolog 算術制約と算術機能を適用する方法の手掛かりがありません論理モデルだけを算術で拡張するため。
- 他の同様のソルバーはありますか?
- モデルを拡張するために算術機能を使用する方法の例。
ありがとう、グレッグ。
PS 算術によると、部分的なサポートを探しています - 提案されたソリューションが古典的なロジックを適切に処理して開く場合、単純なヒューリスティック (gnu-prolog 整数関数の例も歓迎) を使用して手動でコーディングできるいくつかの基本的なケースのみを処理したい-ソースコードは拡張するのに適しています:)。
PPS @larsmansが指摘したように、ゲーデルの不完全性定理によれば、 「すべての」式を証明する方法はありません。そのため、Gnu Prolog プログラムを探しているので、与えられた公理と規則のセットから証明できるものを探しています。そのような公理と規則のセットの例を探しています ;) もちろん、チェッカーは失敗する可能性があります-「いくつかの」ケースで動作することを期待しています:)。- 一方、ゲーデルの完全性定理があります ;)。