RDBと述語論理と

私は趣味で論理式を書いている者です。
Relational Data Base(RDB)を述語論理としてみたらどう見えるかが、ずっと気になっていたのですが、考えているとわけがわからなくなって中断していました。
今回すこしわかった気がするので書いておきます。

まず、RDBは論理体系ではなくデータの検索システムなので、もともと違うものです。ただ、RDBを構成する概念を述語論理で解釈したらどうなるかな、という好奇心です。

RDBはすべて「表(実表)」が土台になります。

表は同じ個数のデータが並んだものを行として、行の集まりになっています。この表の名前を例えばHとしたとき、述語論理では行がN個のデータからできているとすると

 +H(d1,d2,...,dn)

という述語の命題が真であると書かれていると考えることができます。
つまり、一つの表は、こういう述語の命題の集合とみなせます。(&で結合されています)

ビューにしろ、SQLのselect文の結果にしろ、すべて、なんらかの同じ個数のデータが並んだ(タプルと呼ぶようですが)をベースに操作が定義されています。

表は表名を述語記号として命題としてみなせましたが、ビューは表から必要なデータを選んだ命題だし、select文の結果は匿名の述語記号の命題とみなすことができます。

これらの表以外の述語の命題は、表という真となる命題をもとに、真であることが確実なものが作られます。これは、述語論理のように推論するのではなく、計算によって得られる結果である点が面白いと思います。


・SQLのinsert、delete、update

select文はなんらかの関係Φを作って、
{(x1,x2,...,xm) : Φ(x1,x2,...,xm) in RDB}
みたいなタプルの集合を作り出す文ですが、SQLの他の文はまた違うことをしています。

  • insertは、新しい真となる命題を定義します。

  • deleteは、偽となる命題を定義します。

これは、RDBの特徴だと思いますが、ある表Hに含まれないタプル wについて +H(w)は偽だと考えます。考え方によっては、含まれないものの真偽は不明とすることもできると思います。
だから、¬H(w)というものは考えず、表Hにwがなくなれば+H(w)は偽になります。真偽の判定が表に含まれるかどうかで判定できるので計算が容易です。
こうすると、圧倒的に偽となるデータが多いわけですが、世界はそういうふうにできているということでしょう。
insertやdeleteで、真となる命題が動的に変わっていくのが面白いですね。

最後は、updeteです。これは表がデータを入れる入れ物だと考えると、ある真である命題の引数を変えてしまうという操作になるわけですが、入れ物であると言う考え方は述語論理とはなじまないので、deleteしてinsertした結果だと思えば、論理システムとしては問題なさそう。