このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

名前の参照関係のグラフ構造:これは物凄く大事

こういう絵になる。

NSは名前空間の略称。NSコンテナはいくつかの名前空間を保持する入れ物。NSソートは名前空間の種別。

  • NSコンテナにNSソート指定=名前空間=束縛セット=置換=コンテキスト

色々な用語が使われているが同じこと。束縛セット(単に束縛ともいう)と置換は用途が違うので呼び方も変えている。

上の絵で:

  1. 四角い枠が名前空間=束縛セット=置換(substitution)
  2. 黒丸が名前
  3. 枠内の黒丸は内部の名前
  4. 枠の外の黒丸は外部の名前
  5. 白い丸(楕円っぽい)は、名前の定義体(definition body)、値、式、項とか。
  6. 黒丸→白丸 の矢印は、束縛、定義、宣言などを表す。
  7. 白丸→黒丸 の矢印は、名前による参照。
  8. 枠内は黒丸グループと白丸グループからなる二部ブラフと考えるとよい。
  9. 下側に、名前ごとの可達性が書いてある。
  10. 「名前 => 可達な内部名の集合 => 可達な外部名の集合

Catyの名前構造では、再帰(サイクル)のスコープは名前空間に限定されるので、外部に出た参照の矢印が戻ってくることはない。名前空間(四角い枠)内のサイクルだけを考えればよい。また、サイクルは必ず「1つ以上の黒丸と1つの以上の白丸」を通る。よって、最短でも長さ2以上となる。(白丸を無視すると自己ループもあるが、黒丸と白丸の両方を考える。黒丸→黒丸 はエイリアス。)

内部の黒丸の集合に、次の関係「〜」を入れる。x〜y とは:

  • xからyに至るパス(長さ2以上)がある。
  • yからxに至るパス(長さ2以上)がある。

つまり、「互いに行ったり来たり出来る」こと。この定義より:

  1. x〜y ならば、 y〜x (対称律)
  2. x〜y かつ y〜z ならば、x〜z (推移律)

しかし、x〜x (反射律)は成立しない。x〜x のとき、その黒丸(名前)はサイクルに含まれるので再帰的となる。再帰的な名前だけを選んだ部分集合上では、関係「〜」は、反射的/対称的/推移的 となるので同値関係。この同値関係のよる分割の成分を、再帰的連結成分と呼ぶことにする。

四角枠=名前空間=束縛セット=置換 の黒丸の集合(名前の集合)に関して、再帰的連結成分を完全に求めることは非常に重要である。再帰的連結成分を単一のノード(例えば二重枠の白丸とか)にして、名前と定義体を結ぶ矢印を加工すると、再帰的定義の解釈ができる。

再帰的定義では、ツリーではなくて、サイクルを持つグラフそのものの不動点(の成分)を定義体と考えることになる。多変数の不動点演算子μと成分を取る(名前による射影)演算子πxを組み合わせればよい。