今回は,一階述語論理である.プログラミングは別として,要求段階で二階以上の高階述語論理を扱うことはないと思う(現状実務的ではないという消極的理由もある).従って,以降では単に述語論理とする.
命題論理では,原子式と記号(∧,→など)のみの操作となる.表現できることに限りがある.P→Qというときに,P:アクセルペダルを踏下する,Q:加速するでもよいし,P:雨が降る,Q:隕石が落ちるでも構造上は同じである(真偽は違うかもしれない).
述語論理では,主として2つの方法で,命題論理における原子式の中身を明示しようとする.
最初は,述語を利用することである.述語論理式という名前に現れている.ここでの述語は,自然言語における述語を思い出せばよい.
自然言語で述語になり得るのは,日本語の場合は,動詞・名詞(+コピュラ 1)・形容詞(イ型およびナ型 2)である.
純粋な名詞のみの場合というのは,有名なうなぎ文にある.「(食堂で注文するときの)ぼくはうなぎ」というときの文字通りではないうなぎである.要求文書に,ぼくはうなぎ,がでてくることはないが,体言止めで終わることは多い 3.ただ,名詞は普通は,コピュラ(繋詞,「です」「である」など)とともに用いられる.
主として,述語には二つの役割がある.ある特性を示す場合,ふるまいを示す場合である.
私の車は白色です.
このときは,車の特性について述べている.
車が加速する.
これは,車のふるまいについて述べている.
これらは,それぞれ次のように書くことができる.
IS_WHITE(mycar),ACCELERATE(the_car)
IS_WHITE,ACCELERATEが述語で,括弧の中は主語になっている.特性について述べる場合は,動詞「である」だけではなく属性まで含んだ述語とする.
どちらも,関数のような形をしていることに気がつく.但し,括弧の中はパラメータではなく,「項」と呼ばれる.
「車がエンジン回転数を上げる」だと,INCREASE(the_car, engine_rotation)とでき,項が2つの場合である.自然言語でいえば,最初の項が主語で,2項目が目的語になる.
(nil)