甲州記法は、重関係 (入れ子の関係) を扱うための演算子をもっています。 重関係を考えるためのひとつの枠組みは、 それが、埋め込まれた関係データセットであるというものです。 関係データセットというのは、複数の関係からなる系、 つまり、関係系のことです。 このノートでは、重関係をそのように捉える方法を説明します。 甲州計算機のバージョン 0.50 に対応します。
例として、判断種 P
と Q
の判断集合をとりあげます。
|-- 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
この計算過程で、名前がついた関係写像として
p
、q
、r
の 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