Skip to content

Latest commit

 

History

History

nested-relations-as-relational-system

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 

関係系としての重関係

甲州記法は、重関係 (入れ子の関係) を扱うための演算子をもっています。 重関係を考えるためのひとつの枠組みは、 それが、埋め込まれた関係データセットであるというものです。 関係データセットというのは、複数の関係からなる系、 つまり、関係系のことです。 このノートでは、重関係をそのように捉える方法を説明します。 甲州計算機のバージョン 0.50 に対応します。

通常の計算

例として、判断種 PQ の判断集合をとりあげます。

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

|-- Q  /b 40  /c 80
|-- Q  /b 40  /c 90
|-- Q  /b 50  /c 80
|-- Q  /b 60  /c 90

これを、つぎの計算式

|== R : r

p : source P /a /b
q : source Q /b /c
r : p | meet q
      | add /d ( /a + /c )
      | cut /b

で変換すると、判断種 R の集合が出力されます。

|-- R  /d 100  /c 90  /a 10
|-- R  /d 90  /c 80  /a 10
|-- R  /d 110  /c 90  /a 20

この計算過程で、名前がついた関係写像として pqr の 3 つのが定義されているので、 3 つの関係からなる関係系を構成しているとみなせます。

入れ子の計算

重関係が、埋め込まれた関係系の要素であるとすると、 通常の計算と同様の処理ができなければなりません。 関係写像 slice /np p は、関係写像 p が出力した関係を、 重関係として項目 /np に追加します。

演算子 slice-with オプション をつけた形式の slice /nr nr -with /np /nq は、 関係項目 /np /nq を写像 nr のなかから参照できるようにします。 写像 nr のなかの、項目名からスラッシュを除いた名前 np nq が、 項目 /np /nq の内容の関係を出力する関係写像に置き換えられるとみなせます。

|== S : s

s : slice /np p
  | slice /nq q
  | slice /nr nr -with /np /nq

nr : np | meet nq
        | add /d ( /a + /c )
        | cut /b

この計算式によって、つぎのような 3 つの関係項目をもつ判断 S が出力されます。 甲州記法では、見出し H と組の集合 { T, T, ... } からなる関係リテラルを {| H | T | T | ... |} のようにあらわします。 この判断は、関係系が埋め込まれているとみなせます。

|-- S  /nr {| /d : /c : /a | 100 : 90 : 10 | 90 : 80 : 10 | 110 : 90 : 20 |}
       /nq {| /b : /c | 40 : 80 | 40 : 90 | 50 : 80 | 60 : 90 |}
       /np {| /a : /b | 10 : 40 | 10 : 50 | 20 : 60 |}

最後に、項目 /np /nq /nr をもっている s から、 項目 /nr を引き上げると

|== T : s | up /nr

判断 R と同じ内容が出力されます。

|-- T  /d 100  /c 90  /a 10
|-- T  /d 90  /c 80  /a 10
|-- T  /d 110  /c 90  /a 20