0_tutorial_AI/zz5_allcode.book(保存済みの内容) … 編集へ / ファイル一覧へ
/common/word_logic.bookthmel /common/default(default.thmel。-| と --| の両方が書ける)です。word ∈_(x ∈_ X_ で「もの x がクラス X_ に入っている」。表示は ∈ と同じ)、prop =_.(クラスの等号 =_ の定義。DB に登録された prop で、X_ =_ Y_ ⟺ ∀ x (x ∈_ X_ ⇔ x ∈_ Y_))。表示では =_ も = と同じ記号なので、ソースで区別します。word \cls、abbr cls(\{ cls x | P \} と書けるようにする略記)。\{ cls x | P \} は「P を満たす x の集まり」で、x は cls が束縛する変数です(∀ x と同じ規則)。thm `y ∈_ \{ cls x | x = x \}` ◀ O、prf `y ∈_ \{ cls x | x = x \}` -| O p;。「y は『自分自身に等しいもの』の集まりに入る」。-| の変換が内包の所属を y = y に書き換えるので(下の cvt(cls.))、Prover9 には一階の式が渡ります。|A_ はクラス定数(ある特定のクラス)、付かない X_ はクラス変数(すべてのクラス)です。この違いで、書ける関係(-| か --|)が分かれます。prf `X_ =_ Y_ ⟹ Y_ =_ X_` --| O v;。X_, Y_ はクラス変数(すべてのクラスについて)です。-| O p; と書くと「|0 翻訳不可: cvt+ 後に ∈_ が残っています。クラス変数への所属は述語に置き換えられません。」で FAIL します(実測)。--| はクラスを残したまま({s,c}ソートのまま)Vampire に投げるので通ります。`|A_ =_ |B_ ⟹ |B_ =_ |A_` ◀ O は -| O p; で OK(|cvt+ がクラス定数への所属を述語に置き換える)。word \fn、abbr fn、prf `「 fn ● + a 」 ( b ) = b + a` -| O p;。「 fn ● + a 」 は「x を x + a に写す関数」(アロー関数)で、直後の ( b ) で b に適用します。-| の変換が適用を b + a に書き換えます(下の cvt(fn.))。--| O v; と書くと「class abstraction以外は未対応です: \fn」で FAIL します(実測)。| Thm に含まれるもの | -| … p;(|cvt+|0) | --| … v;(|cls-elim +sos W+.) |
|---|---|---|
| 内包 \{ cls x | P \} への所属 | OK(P に書き換える) | OK |
| クラス定数 |A_ | OK(述語に置き換える) | OK |
| クラス変数 X_ | FAIL(∈_ が残る) | OK |
| アロー関数 「 fn … 」 | OK(適用を書き換える) | FAIL(未対応) |
y ∈_ \{ cls x | x ∈_ X_ \} ◀ y ∈_ X_ は -| p; で FAIL、--| v; で OK=実測)。let |C_ := `\{ cls x | … \}` で置いた |C_ は内包そのものなので、内包の行に当たります(未定義のクラス定数 |A_ とは違う)。goal --| sos v;「 fn … 」)がある → goal -| sos p;goal -| sos p;`X_ =_ Y_ ⟹ Y_ =_ X_` ◀ O v; も通ります(実測)。◀ と --| はどちらも、投げる前に内包を除き、本が紹介した W+.(c を含む語の定義)を sos に足します(実測:prop ⊂_. を紹介せずに `X_ ⊂_ X_` ◀ O v; と書くと「本が紹介していない定義を翻訳で使っています: ⊂_.」で FAIL)。|cvt は「cvt 規則を最大限繰り返し適用したもの」です。入れ子は内側からやる方が楽です: \(x \in \{ y \mid z \in \{ x \mid x = y \} \}\) |cvt … \(z = x\) 。外側からだと \(\int f(x)dx = \int f(y)dy\) のような束縛変数の名前替えが要ります。|cvt+ は、Thm \(\mathcal{T}\) に次のことを最大限繰り返すThm の変換です。|cvt をとる。$x ∈_ w を \({\mathrm{p}} ( x )\) に替える(\({\mathrm{p}}\) は \(\mathcal{T}\) に現れない新しい述語)。$x ∈_ w ($t) を \(\mathbin{\mathrm{p}} ( t , x )\) に替える。|cvt+ … \(\forall x ( {\mathrm{X}} ( x ) \Leftrightarrow {\mathrm{X}} ( x ) )\) ◀ O|0(3.book)がエラーになります。これが表の「FAIL(∈_ が残る)」です。|cvt+|0 がエラーでなければ \(\mathcal{T}\) holds in \(\mathbb{L}_*\) \(\Longleftrightarrow\) \(\mathcal{T}\)|cvt+|0 holds in \(\mathbb{L}_\mathrm{H}\)|cvt+|0|0 は 3.book のとおり高階言語(ソートの無い言語)への翻訳なので、右辺は \(\mathbb{L}_\mathrm{H}\) です(\(\mathbb{L}_1\) ではありません)。|?X^ のような新しい述語は記号(定数)です。Thm に高階変数(P^ など)が残っていれば、prover+ は投げる前に |v-elim(3.book)で一階言語 \(\mathbb{L}_1\) の Thm にします。let |C_ := `\{ cls x | ∀ y \; x + y = y + x \}`(|C_ を「すべての y と可換な x の集まり」という内包の名前として置く)、thm `[ ∀ u ; v ; w \; u + (v + w) = (u + v) + w ] ⟹ [ ∀ a ; b ∈_ |C_ . \, a + b ∈_ |C_ ]` ◀ O、prf goal -| O p;。|C_ は内包なので -| で書き換えられます。[ ∀ u ; v ; w \; P ] は ∀ u ∀ v ∀ w P(\; は区切り)、[ ∀ a ; b ∈_ |C_ . \, P ] は ∀ a ∀ b (a ∈_ |C_ and b ∈_ |C_ ⇒ P) です(slash_cli で確認)。ページ 1 / 3 … 次のページ →