データベース論

定義域関係論理のお話.これは私には全く知らなかったもの.これは関係代数のように処理の順序ではなく(つまり,どのように処理を組み合わせればよいかを書くのではなく),どんな値が欲しいのかということを宣言的に書くだけで処理をさせようというものである.
基本形式としては,数理論理学で出てきたような書き方をする.例えば,

{R(A,C)|(\exists B)(S(A,B) \wedge S(B,C)) \wedge A \leq C}

は,どういう問い合わせかというと,S(A,B)かつS(B,C)のようなBが存在し,かつAがCよりも小さいような関係を示したときのR(A,C)を返す.というものである.(SやRはここでは2列の関係である.また,このときRの関係に書ける列は自由変数でなくてはならない)
そのままであるが,これを関係代数にすると,これをどのようにして実現させるかということを考えなくてはならない.
例えば,S(W,Z)という関係があるとした場合,まず,同じ関係同士の条件が作りたいので,もう一つつくりS'(W,Z)を作る.直積をとって,あとは条件式を書き,必要な列だけ射影演算すればよい.というわけで以下のようになる.

 \pi_{S.W, S1.Z}(\sigma_{S.Z = S1.W \wedge S.W \leq S1.Z}(S \times \rho_{S1(W,Z)}S))

ただ,この定義域関係論理の難点は,結果が値の定義域の取り方に依存するということ.例えば,

{R(X)|\neg S(X)}

のような式.これはXをどうとるかによって値が変わってしまう.つまり,S(X)に0,1などの値があったとしたら,それ以外ということは,一体何を示しているのかがわからない.このようにXの定義域が明確でないと意味を成さないものが書けてしまう.
ということは,そのような定義域に依存しないようなものをdomain-independantとよぶことにし,これだけで成り立つものをsafe range 定義域関係論理とする.