Skip to content

Latest commit

 

History

History

slices-of-relation

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

関係のうす切り

このノートでいうところの「関係のうす切り」とは、 関係を各組ごとに切り離し、それらを個別に入れ子の関係で 包み込むことを意味します。たとえば、つぎのような判断集合

|-- P  /a 10  /b 40
|-- P  /a 10  /b 50

に対して、演算子 slice を使って計算します。 この演算子は、関係の各組をバラして包み込んだ小さな関係に対して関係写像を適用し、 その関係写像が出力した関係を、入れ子の関係として、もとの組に追加します。 ここでは関係写像として、恒等写像 id を使うので、 入力の関係が、そのまま出力されます。

|== SLICE -fore /a /b :
    source P /a /b | slice /r id

そうすると、関係のうす切りが得られます。

|-- SLICE  /a 10  /b 40  /r {| /a : /b | 10 : 40 |}
|-- SLICE  /a 10  /b 50  /r {| /a : /b | 10 : 50 |}

このような関係のうす切りを応用すると、 演算子の group を簡単に実装できます。 まず、group の機能を確認しましょう。 この演算子は、入力関係で別の関係を分割した、 交わり部分関係を計算します。たとえば、

|== GROUP -fore /a /b :
    p | group /g q

によって、計算した結果は、pq の共有項目 /b の内容 4050 で分割した、つぎのような判断集合になります。

|-- GROUP  /a 10  /b 40  /g {| /b : /c | 40 : 80 | 40 : 70 |}
|-- GROUP  /a 10  /b 50  /g {| /b : /c | 50 : 90 |}

slice でうす切りにした個々の関係に対して meet q した上で q の項目に射影することで、 group と同等の計算ができます。

|== GROUP2 -fore /a /b : 
    p | slice /r ( meet q | pick-term q )

この計算結果は、|-- GROUP の場合とちょうど同じになります。

|-- GROUP2  /a 10  /b 40  /r {| /b : /c | 40 : 80 | 40 : 70 |}
|-- GROUP2  /a 10  /b 50  /r {| /b : /c | 50 : 90 |}