Skip to content

Latest commit

 

History

History

relational-lattice

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

関係束のふたつの演算

関係束 (かんけいそく、relational lattice) は、 関係モデル (リレーショナル・モデル) のための代数的な理論です。 関係モデルは関係を基本要素とした計算体系です。 この計算体系は、ふたつの関係を合成する演算として 結び交わり を用意し、 関係の計算に必要な演算規則を定式化しています。

関係型データ言語のひとつの 甲州記法 では、 結びは演算子 join で実行され、 交わりは演算子 meet で実行されます。 このノートでは、甲州記法を使って、関係モデルを初めて学ぶ方のために、 結びと交わりを説明します。

外延の拡大と縮小

たし算とかけ算が、ふたつの数 ab を合成した新しい数 c = a + bd = a * b をつくるように、 結びと交わりは、ふたつの関係 ab を合成した新しい関係 c : a | join bd : a | meet b をつくります。 結びは、ふたつの関係の共有する項目のみに着目することで、 内包概括 し外延を拡大します。 逆に、交わりは、ふたつの関係のすべての項目に着目することで、 内包を 限定外延 を縮小します。

たとえば、3 項目 /v /w /x からなる 3 項関係 a と 4 項目 /w /x /y /z からなる 4 項関係 b があるとします。 そのとき、共有項目は /w /x であるため、 結びは /w /x のみからなり、 交わりはすべての項目 /v /w /x /y /z からなります。

a : /v /w /x                  a : /v /w /x
b :    /w /x /y /z            b :    /w /x /y /z
------------------  join      ------------------  meet
c :    /w /x                  d : /v /w /x /y /z

共有項目のみに着目するということは、 ab から /v/y /z を捨象して概括することに相当します。 a/w /x の間に成立している関係と、 b/w /x の間に成立している関係とを考えるように、 内包が緩和されるため、外延が拡大します。

逆に、交わりがすべての項目に着目するということは、 /v /w /x /y /z の間に成立する関係として、 ab を同時に考慮することになります。 a において /v /w /x の間の関係が成立することに加えて、同時に、 b において /w /x /y /z の間にも 関係が成立するという条件で情報が限定されます。 内包が限定されるほど、それをみたせる組み合わせが減るため、外延が縮小します。

甲州記法

甲州記法では、判断集合を関係として読み出し、 その関係上で計算し、最後に、関係を判断集合として書き出します。 判断の書き方 の説明は別の文書にゆずりますが、判断集合として、 判断種 A の判断が 3 つ、判断種 B の判断も 3 つあるとします。

|-- A  /v 1  /w 20  /x 100
|-- A  /v 2  /w 30  /x 100
|-- A  /v 2  /w 40  /x 120

|-- B  /w 30  /x 100  /y 10  /z 140
|-- B  /w 40  /x 120  /y 10  /z 150
|-- B  /w 50  /x 140  /y 20  /z 150

これを、関係写像演算子 source を使って、 関係 ab として読み出し、

a : source A /v /w /x
b : source B /w /x /y /z

関係写像演算子 joinmeet で、 結び c と交わり d を計算します。

c : a | join b
d : a | meet b

最後に、関係 cd のそれぞれに、 判断種 CD を付与し、計算結果を書き出します。

|== C : c
|== D : d

そうすると、判断種 C として、つぎの 4 つの概括的な判断が書き出され、

|-- C  /w 20  /x 100
|-- C  /w 30  /x 100
|-- C  /w 40  /x 120
|-- C  /w 50  /x 140

判断種 D として、つぎの 2 つの限定的な判断が書き出されます。

|-- D  /y 10  /z 140  /v 2  /w 30  /x 100
|-- D  /y 10  /z 150  /v 2  /w 40  /x 120

この計算は koshu lattice.k によって実行でき、 その結果は 入出力リスト で確認できます。

計算方法

項目 /v /w /x からなる関係 a と 項目 /w /x /y /z からなる関係 b は、 各項目が列をなし、各組が行となるように配置すると、 つぎのように視覚化できます。

a : /v 1  /w 20  /x 100      b : /w 30  /x 100  /y 10  /z 140
    /v 2  /w 30  /x 100          /w 40  /x 120  /y 10  /z 150
    /v 2  /w 40  /x 120          /w 50  /x 140  /y 20  /z 150

これらを共有項目 /w /x で重ね合わせると、 結びは、共有項目部分を抜き出すことで計算できます。 関係 ab の重ね合わせはつぎのようになり、

        c :
/v 1  | /w 20  /x 100 |
/v 2  | /w 30  /x 100 |  /y 10  /z 140
/v 2  | /w 40  /x 120 |  /y 10  /z 150
      | /w 50  /x 140 |  /y 20  /z 150

垂直線で囲まれた領域を抜き出したものが結び c に相当することになります。

交わりは、一方の関係の各組に対して、 共有項目の内容が一致する組を他方の関係から探し出し、 たとえば、関係 a の組 /v 2 /w 30 /x 100 に対して、 関係 b の組 /w 30 /x 100 /y 10 /z 140 を探し出し、 それらの項目を合併することで計算できます。 関係 ab の重ね合わせ

    /v 1  /w 20  /x 100
    - - - - - - - - - - - - - - - - -
d : /v 2  /w 30  /x 100  /y 10  /z 140
    /v 2  /w 40  /x 120  /y 10  /z 150
    - - - - - - - - - - - - - - - - -
          /w 50  /x 140  /y 20  /z 150

のなかで、水平線で囲まれた領域を抜き出したものが交わり d に相当します。