Skip to content

Latest commit

 

History

History

equivalent-for-down

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

包括演算子の等価定義

関係写像 copy N R は、写像に入力される関係を複製し、 関係写像 R を実行します。 写像 R のなかで N を使うと、複製された関係を参照できます。 このノートでは、関係写像の入力を入れ子の関係として包み込む 包括演算子 down と等価な計算を copy を使って行う方法を説明します。

このノートの内容は甲州計算機のバージョン 0.50 に対応します。 ここで説明している甲州スクリプトの実行結果は script ディレクトリにあります。

DOWN

DOWN-1

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

この判断集合を項目 /a /b の関係として読み出し、

p : source P /a /b

演算子 down でその関係全体を入れ子の関係とする関係をつくります。

|== DOWN-1 : p | down /r

この式から、つぎの出力が得られます。

|-- DOWN-1  /r {| /a : /b | 10 : 40 | 10 : 50 | 20 : 60 |}

DOWN-2

このような入れ子の関係を down を使わずにつくるには、 関係写像 pslice に与えることで実現できます。

|== DOWN-2 : slice /r p

関係写像には、まず、無項万有関係 dee が入力として与られるので、 この式は dee | slice /r p と同じ意味になります。 無項万有関係は組をひとつだけもっているので、 そのひとつの組に項目 /r として p の出力が追加されます。

|-- DOWN-2  /r {| /a : /b | 10 : 40 | 10 : 50 | 20 : 60 |}

DOWN-3

この DOWN-2 の計算式は、slice の引数に p が必要なため、 ほんとうの意味で down と等価とはいえません。 slice /r p の自由変数の p を束縛変数に置き換えるには、 copy r ( ... slice /r r ) のようにすることです。

演算子 slice は、入力の各組に対して、関係を追加するので、 p | copy ... とすると 3 つの複製がつくられます。

|== DOWN-3 : p | copy r ( slice /r r )
|-- DOWN-3  /r {| /a : /b | 10 : 40 | 10 : 50 | 20 : 60 |}  /a 10  /b 40
|-- DOWN-3  /r {| /a : /b | 10 : 40 | 10 : 50 | 20 : 60 |}  /a 10  /b 50
|-- DOWN-3  /r {| /a : /b | 10 : 40 | 10 : 50 | 20 : 60 |}  /a 20  /b 60

DOWN-4

そのため、組をひとつだけもつ dee を挟み、 その出力を slice /r r へ流すことで、 down と同等の計算になります。

|== DOWN-4 : p | copy r ( dee | slice /r r )
|-- DOWN-4  /r {| /a : /b | 10 : 40 | 10 : 50 | 20 : 60 |}

以上をまとめると、down /r と同じ意味の関係写像は、 copy r ( dee | slice /r r ) になります。

tee

甲州記法の copy は UNIX のコマンド tee に似ています。 UNIX のマニュアルでは、tee の概要は duplicate standard input (標準入力を複製する) と説明されることがありますが、 この説明にならえば、演算子 copy は duplicate relamp input (関係写像の入力を複製する) と説明できます。