これは何
プログラムの性質を数学的に扱ったりするときや型理論のベースとして一階述語論理がサラッと登場したりするので、雑に触れてみよう、という記事。
量化記号(quantifier)
一階述語論理では命題(命題論理式)に以下の量化記号を導入する。
- : 全称記号(universal quantifier)
- 任意の...について 、という意味
- すべてのものは条件を満たすということを表現
- : 存在記号(existential quantifier)
- ある...について、という意味
- 条件を満たすものが存在するということを表現
述語(predicate)
0個以上の変数を受け取り真偽を返す記述のこと。雑にいうと、boolを返す関数。命題との違いは、命題はそれ自体で真または偽が定まるが、述語は変数(引数)を受け取って真偽が決まる。(0個以上なので、引数はなくてもよい)
例えば とか など。
引数として を持つ記述は のように表現する。引数がない場合はカッコを付けずに述語名のみを書く。
例として、 を としたとき、 は真、は偽。
述語と量化記号
引数を1個以上もつ述語は、量化記号をくっつけて量についても表現ができる。
量化記号は右側に掛かる。
例
は すべての に対して が成り立つ ということを言っている。
例えば が「人間である」という述語とすると、 は「全ての は人間である」という意味。例えば がプログラマーなら、全てのプログラマーは人間である、という意味になりこの論理式は 真 と判定できる。
複数の量化記号の例
は すべての と の組み合わせについて が成り立つ、ということを表している。例えばこの論理式の対象の集合が (整数全体の集合の記号)の場合、この論理式は 偽 である。
は ある はすべての に対して が成り立つ という意味。たとえば において、 が ならこれは 真。
ある はすべての について となるかどうか考えると、たとえば はすべての について となる。