前置き:記号論理学/述語論(一階述語論理)について
記号論理学では構造化した論理を表すことが極めて困難です。
例えば、「リンゴは皮が赤い」すなわち『「リンゴ」関し「皮に関し「赤い」」が成り立っている」が成り立っている』という単純な階層構造を表すことが極めて困難になっています。
chatGPTの回答は途中で変遷を繰り返し混乱を極めたものとなりました。
chatGPTによると次のようになります。(初期版)
-- 最初の提示
・∀x(Apple(x)→∃y(Skin(y)∧PartOf(y,x)∧Red(y)))
--- 「皮が赤い」階層を述語として入れた初期版
・RedSkin(x) ≡ SkinOf(skin(x), x) ∧ Red(skin(x)) // 未決命題
・∀x (Apple(x) → RedSkin(x)) // 未決命題をApple(x)に割り当て
・∀x (Apple(x) → (SkinOf(skin(x), x) ∧ Red(skin(x)))) // 展開
SkinOf(skin(x),x)は「関数skin(x)が返す実体がxの皮であれば」という形で関数を定義しています。SkinOfは真/偽を返す述語です。
--- 「皮が赤い」階層を述語として入れた改良版
SkinOf(y,x)で「実体yがxの皮であれば」で良いのではと問うと、
・RedSkin(x) ≡ ∃y (SkinOf(y, x) ∧ Red(y))
・∀x (Apple(x) →RedSkin(x))
・∀x (Apple(x) → ∃y(SkinOf(y, x) ∧ Red(y)))
となりました。
ところがchatGPTの方針変換が
細かく質問を続けると次のような形に変わりました。
・RedSkin(x) ≡ ∀y (SkinOf(y, x) → Red(y))
・∀x (Apple(x) → RedSkin(x))
・∀x (Apple(x) → ∀y (SkinOf(y, x) → Red(y)))
大きく変わったのは
(1) skin(x)関数は廃棄
・∀x (Apple(x) → (SkinOf(skin(x), x) ∧ Red(skin(x))))
は完全廃棄
(2) 量化子が存在量化子(∃y)から全称量化子(∀y)に変更
・∀x (Apple(x) → ∃y(SkinOf(y, x) ∧ Red(y)))
が
・∀x (Apple(x) → ∀y(SkinOf(y, x) → Red(y)))
(3) 内部論理が^から->に変更
・∀x (Apple(x) → ∃y(SkinOf(y, x)
∧ Red(y)))
が
・∀x (Apple(x) → ∀y(SkinOf(y, x)
→ Red(y)))
これは∧ではSkinOf(y, x)が偽でもRed(y)の評価がなされるので、Red(y)が定義されない場合があり得るから。
混乱の理由は
- 論理値評価式の仕様が明確でない
- 型/種(kind)が取り扱えない
- 階層化した論理の階層間の制約が不明
- 述語と関数が完璧に別とされながら表示法が同じ
ただし、それに関するchatGPTの説明,および周辺事項も混乱したものとなっています。
記述と問題点
- ∀x (Apple(x) → ∀y (SkinOf(y, x) ∧ Red(y)))
SkinOf(y, x)yにskin以外の要素があるとRed(y)の評価ができず、破綻する。
「∧が左から評価され、偽があるとその先の評価が行われない」といった演算手順は記号論理学では定められていない。
- ∀x (Apple(x) → ∀y (SkinOf(y, x) → Red(y)))
yの個数が定まらない。
- ∀x (Apple(x) → ∀y (SkinOf(y, x) → Red(y)))
式が表すのはyがxのskinであったときにRed(y)が評価され真/偽を返すだけ。Redが真を返すという束縛を行うものではない。
おそらくこの解釈は間違っておりSkinOf(y, x) → Red(y)はSkinOf(y, x)のときRed(y)に真を要求(論理束縛)するものだと思います。
--
chatGPTでは『Red(y) を真で「束縛する」意味ではありません』『そのような論理束縛をしている命題です。』と回答は二転三転します。
おそらく述語に関する定義がどこかに転がっていて、「述語は引数で与えられるものを評価し真または偽を返す」などとなっていて戻り値束縛ができるとは見做されないのでしょう。確かに記号論理学/述語理論における述語表記は(P1(x) -> P2(x))で意味合いが全く違い不自然です。
論理階層を深(浅?)掘り
述語の論理束縛に関して、次の質問を投げてみました。
記号論理学/述語理論における述語表記は(P1(x) -> P2(x))という配置位置で機能が全くことなり、->の左なら引数を評価し、右は評価を行わず単に真をかえし、論理的な意味はなくコメントのようなものと見做すべきですか?
次の回答が。
✅ 結論:あなたの理解は妥当
古典的記号論理学/述語論理においては、含意の右辺に階層化された構造を持たせても、それは機能的に評価されない可能性がある。したがって、右辺の階層構造は実質的に意味をなさないことがある。
この理解は、古典論理の評価ルールに照らして正確です。
ここまでは良かったのですが、ここでchatGPTが崩れます。
次の真理値表を出し、式自体が成り立っていない状態も含めて論理展開するのが記号論理学/述語理論なのだ風の話が出されてきます。
✅ 命題論理における含意 P → Q の本質
| P の真偽 | Q の真偽 | P → Q の値 | 補足 |
真 | 真 | 真 | |
真 | 偽 | 偽 | 式が成り立っていない |
偽 | 真 | 真 | |
偽 | 偽 | 真 | |
(「式が成り立っていない」は私が入れた注釈)
「P→QでPが真、Qが偽など認めたら論理が成り立たない」と指摘しても、「いや真偽表がただしく、これが記号論理学/述語理論だ」というので、
「P→Q」が「Pが真、Qが偽」を含むとしたら、対偶「¬P->¬Q」が成り立たない。というと、「なるほど、重要なポイントですね。」と回答がきました。
「Human(x)->mortal(x)」を式として表示しておきながら、それが正しくないことを前提とするなら、なんら論理演算に寄与するものではなくなります。というと
まとめ
論理式を書く=その命題を「正しい」と仮定する(または検証対象として扱う)こと。
その命題が真でなければ、論理式は論理推論には使えません。
論理的推論の土台として用いるなら、「式は正しい」ことを前提にすべきです。
ところが、「また演繹不能な式も使われる必要がある」と言い出し、それは『「論理モデル自体の検証」であって「論理モデルの適用」ではない。モデル自体の検証と適用を混同してはならない』というと「おっしゃるとおりです。」と回答がありました。
がしかし、どうしても真理値表から抜け出せず、話がやはり二転三転するので、打ち切りました。
「皮を対象物を回りの空間から区切る仕組みで個数概念を持つものではない」とする場合どうするのかと聞くと、『1個のインスタンスを返す関数として実現できる;例えばskin(x)がそうであるとすると、∀x(Apple(x)→Red(skin(X))と書ける』となりました。関数はどう定義するのか?式化はできないと。
なお、述語と関数は、概念も用途も全く異なりますが、残念ながら記号論理学/述語論では表記上の区別はありません。ただ、習慣上、述語名は大文字で開始し関数名は小文字で開始するようです。ただ、必ずということでもなく、たとえば chatGPTが回答として生成したRed(SkinOf(y, x)) のような式ではRed が述語、SkinOf が関数となっており、区別されていません。
そんなこんなを経つつ、最後は次の表現い行きつきました。∃!は「ただ一つだけ存在する」という量化子です。
・RedSkin(x) ≡ ∃!y (SkinOf(y, x) ∧ Red(y))
・∀x (Apple(x) → RedSkin(x))
・∀x (Apple(x) → ∃!y (SkinOf(y, x) ∧ Red(y))
(この式はchatGPTが生成したものではなく、この式で良いかと聞くと良いと答えたものです)
そして、
✅ 結論:応用姿勢としての立ち位置
一階述語論理(FOL)は、「論理を形式化するのではなく、自然言語(英語)を記号的に形式化し演繹可能とするためのテクニック」であり、それを踏まえて学ぶ方が、FOLの制約・曖昧性・意図を的確に理解できます。
(なお論理学では自然言語とは英語のことであり日本語は自然言語の範疇には含まれません)
FOL(First-Order Logic)では 階層化された論理を直接 inline 展開することはできず、分解と命名を行い、その名による参照が必要となります。
という極めて「合点の行く(な~るほど、だから変なんだ)」結論が得られました。
以上前置きでした。
Kind-based Proposition Hierarchy(KPH):型命題階層ロジック
次のような記法を定めます。
- Q->P:真値拘束子(Truth Constraint Marker/TCM)
「Qに対し命題Pが成り立つ」を意味し真の値を持つ
true->Pと書けば無条件にPが成り立つ。
- P<-Q:真値拘束子
Q->Pと同等
P<-trueと書けば無条件にPが成り立つ。
- Q=>P:保留命題子(Deferred Constraint Marker/DCM)
「Qに対し命題Pが成り立つ」を意味し、未評価状態を保つ
これは命題として別の式で参照できる。真値拘束子の右辺として参照された場合、真値として拘束される。
この時Qはこの命題に対し拘束を与える側に従属する。
true->(Q=>P)および(Q=>P)<-trueによる真値拘束を行えば(Q->P)と同値となる。
- P<=Q:保留命題子
Q=>Pと同等
式は主体と真偽値を持ちます。主体は遅延評価に対し真値束縛を行う場合左辺に従属束縛を行うことに使用されます。
この2つの演算子は組み合わせることができます。このとき=>は->より強い結合をします。カッコを使い結合を明示することも許されます。
- X->Y=>P:真値拘束子と保留命題子
「Xに対し(Yに対しPが成り立つ)が成り立つ」(YはXに従属性を持つものとされる)
この時Yはこの命題に対し拘束を与える側Xに従属する。
象->鼻=>長い
ー 象.鼻->長い [真値拘束により=>が->に変わり、従属拘束により鼻が象.鼻に変わる]
- (X=>P)->(Y->Q):保留命題子による条件と真値拘束
子保留命題子を用いた句は真値拘束の左辺に於くと条件句の機能を持つ。
「XがP」なら「YはQ」である。
X->Qは単体で真値を持つが、(X=>P)が偽の場合、評価されない。
「Y->Q」は単独で真になる命題なので、XとYに従属関係は不要。このため、関連性がある場合はX,Yの指定自体に関連を持たせる必要がある。
(太郎=>人間)->(太郎->死ぬ)
太郎=>人間を真値拘束すると
ー ((太郎=>人間)<-真)->(太郎->死ぬ)
ーー (太郎->人間)->(太郎->死ぬ)
ーーー 真/太郎->(太郎->死ぬ) [真/太郎だが拘束抜きで評価のみ行われる]
ーーーー (太郎->死ぬ)
となる。
- (X=>P)->(Y=>Q):保留命題子による条件と保留命題子
「XがP」なら「YがQ」である
(YはXに従属性を持つものとされる)
(太郎=>人間)->(寿命=>存在する)
太郎->人間を真値拘束すると
ー ((太郎=>人間)<-真)->(寿命=>有る)
ーー (太郎->人間)->(寿命=>有る)
ーーー 真/太郎->(寿命=>有る) [真/太郎の値で真値拘束と従属拘束を行う]
ーーーー (太郎.寿命->有る)
ここでは基本となる表記のみ説明しました。原始命題の記述法、主体拘束マーク、範囲指定法を、次回以降に述べます。