束縛変数と自由変数:変数のスコープを理解する - 記号論理学

量化子を使う際に重要なのが、束縛変数と自由変数の区別です。変数が量化子によって「縛られている」かどうかで、論理式の意味が大きく変わります。プログラミングにおける変数のスコープと類似した概念です。

束縛変数と自由変数

束縛変数(bound variable)は、量化子によって束縛されている変数です。∀x や ∃x の直後に来る式の中の x が束縛変数です。

自由変数(free variable)は、量化子によって束縛されていない変数です。式の外側から値を受け取る「空きスロット」のようなものです。

束縛変数

量化子のスコープ内にあり、特定の値を持たない。∀x P(x) の x は束縛変数。

自由変数

量化子に縛られず、外部から値が与えられる。P(x) ∧ Q(y) の x, y は自由変数。

具体例

∀x(P(x) → Q(x)) では、x はすべて束縛変数です。「すべての x について」という量化子のスコープが式全体に及んでいます。

∀x P(x) → Q(y) では、x は束縛変数ですが、y は自由変数です。量化子 ∀x のスコープは P(x) だけであり、Q(y) には及びません。

∀x P(x) → Q(y) の解釈

「すべての x について P(x)」ならば「Q(y)」。y は外部から与えられる値。

スコープの確認

量化子の直後の括弧が、そのスコープを示す。括弧がない場合は最も近い部分式だけがスコープ。

同じ変数名の異なる出現

同じ変数名でも、出現箇所によって束縛状況が異なることがあります。

∀x P(x) ∧ Q(x) という式を考えましょう。最初の x は ∀x に束縛されていますが、Q(x) の x は自由変数です(量化子のスコープが P(x) だけなので)。

このような混乱を避けるため、通常は異なる変数名を使うか、括弧を明示して ∀x(P(x) ∧ Q(x)) のようにスコープを明確にします。

閉じた式と開いた式

自由変数を含まない式を閉じた式(closed formula)または文(sentence)と呼びます。閉じた式は真か偽かが確定します。

自由変数を含む式を開いた式(open formula)と呼びます。開いた式は、自由変数に値を代入しない限り、真偽が定まりません。

閉じた式

∀x P(x)、∃x∃y L(x,y) など。自由変数がない。真偽が確定する。

開いた式

P(x)、∀x L(x,y) など。自由変数がある。真偽は変数への代入に依存する。

代入と束縛変数

変数に値(項)を代入する操作は、自由出現にのみ適用されます。束縛出現には代入できません。

φ(x) に項 t を代入した結果を φ(t/x) や φ[t/x] と書きます。これは、φ の中の x の自由出現をすべて t で置き換えたものです。

たとえば P(x) ∧ ∀x Q(x) に t を代入すると、P(t) ∧ ∀x Q(x) になります。∀x Q(x) の中の x は束縛されているので置き換わりません。

自由出現を特定する

自由出現のみを項 t で置き換える

束縛出現はそのまま残る

変数の捕獲

代入の際に注意すべきことがあります。代入した項 t に含まれる変数が、代入先で束縛されてしまう現象を「変数の捕獲」(variable capture)といいます。

∀y P(x, y) に y を代入して ∀y P(y, y) とすると、代入した y が ∀y に捕獲されてしまい、意図した意味と異なります。

これを避けるには、代入前に束縛変数の名前を変更します。∀y P(x, y) を ∀z P(x, z) と書き換えてから y を代入すれば、∀z P(y, z) となり問題ありません。

このように、変数のスコープを正確に理解することは、述語論理を正しく扱う上で必須です。次回は、述語論理の形式化の全体像を見ていきます。