私はVampireやE-Proverのような一次論理定理証明者を見ています.TPTP構文は今後の道のりです。 Answer Set ProgrammingとPrologのようなLogic Programmingの構文にはよく慣れていますが、TPTP syntaxの詳細な説明を参照しようとしていますが、解釈されたファンクタと解釈されないファンクタを正しく区別する方法はまだ分かりません。間違った用語を使用している)。TPTPの文法的に異なる用語を表現する
本質的には、モデルが反例として機能しないことを示すことによって定理を証明しようとしています。私の最初の難しさは、次の論理プログラムが充足できるとは思わなかったということでした。
fof(all_foo, axiom, ![X] : (pred(X) => (X = foo))).
fof(exists_bar, axiom, pred(bar)).
何もfoo
に等しいからbar
を防止していないので、それは確かに充足可能。したがって、最初の解決策は、これらの2つの用語が異なることを主張し、次の満たされないプログラムを取得することです。
fof(all_foo, axiom, ![X] : pred(X) => (X = foo)).
fof(exists_bar, axiom, pred(bar)).
fof(foo_not_bar, axiom, foo != bar).
Techinal報告書は、異なる二重引用符で囲まれた文字列が実際に異なるオブジェクトであることを明確にしているので、他のソリューションには、次の充足不能のプログラムを得られるように、あちこちで引用符を置くことです。
fof(all_foo, axiom, ![X] : (pred(X) => (X = "foo"))).
fof(exists_bar, axiom, pred("bar")).
私はそれは明らかに、より現実的なシナリオに拡張しませんように手動不平等を指定していないようにうれしいです。私の実際の状況に近づくにつれて、実際には構成された用語を処理しなければならず、次のプログラムは残念ながら満足できるものです。
fof(all_foo, axiom, ![X] : (pred(X) => (X = f("foo")))).
fof(exists_bar, axiom, pred(g("bar"))).
私はf("foo")
という言葉が、オブジェクト"foo"
に適用される関数f
ではないと思います。したがって、機能g
と潜在的に一致する可能性があります。 f
とg
が決して一致しないマニュアル仕様は、このトリックはありませんが、次のプログラムは満足できません。私は間違っているように感じています。そして、文法的に異なっているときには、多くの用語を区別して解釈することは、おそらく私の実際の設定には適用されません。
私は周りに一重引用符を投げてみましたが、それを行う適切な方法が見つかりませんでした。
構文的に異なる(構成された)用語を作り、構文的平等をテストするにはどうすればよいですか?
副次的な質問:自動化定理の証明者が未解釈のファンクタではなく関数としてf
を理解しているので、次のプログラムは充足可能です。
私は手動でfを注入するように指定する必要があります。プログラムで発生するすべてのファンクタの注入性を指定せずにこの動作を取得する自然な方法は何ですか?
fof(exists_f_g, axiom, (?[I] : ((f(foo) = f(I)) & pred(g(I))))).
fof(not_g_foo, axiom, ~pred(g(foo))).
fof(f_injective, axiom, ![X,Y] : (f(X) = f(Y) => (X = Y))).
ありがとう、それは少し明確です。二重引用符については、私は[techincal report](http://www.cs.miami.edu/~tptp/TPTP/TR/TPTPTR.shtml#FormulaeSection)からそれらについて聞きました(それはまた私が信じていた部分でした固有の名前の仮定と注入性を公理化することなく、文法で不等号を書き留める方法があったかもしれない)。 また、一度に複数の推測を指定することは推奨されていませんが、確かに私の予想を明示するために問題を再定式化することができます。 – Abdallah
私はE 1.8とSPASS 4.6で二重引用符のサポートをチェックしました。両方とも '' fof(c1、conjecture、〜( "a" = "b"))という用語を読むことができますが、それ。 SPASSスイートのtptp2dfgツールは、 "a"と "b"に対して異なる定数を作成するだけですが、差の公理は追加しません。複数の推測での問題は、仕様がそれらの接続を証明することを要求されたが、いくつかの証明者が分離を証明することであった。これは少し一般的なコメントにつながります:TPTP形式は、さまざまな証明者によってサポートされている言語(たとえば$ ite)のスーパーセットなので、マニュアルでよく確認してください。 –
申し訳ありませんが、それはSPASS 3.7だったはずです - 私は常にバージョン番号を混同します。 –