このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

スキーマとインスタンス -- 一般関手モデル

スピヴァック関手データモデルは、実に示唆に富んでいます。スピヴァックのアイディアは、データモデルに限らず、ソフトウェアシステムのさまざまな側面のモデル化に使えそうです。

関手データモデルの要点を簡略にまとめるなら:

  1. (データベース)スキーマは圏である。
  2. (データベース)スキーマの制約は可換図式である。
  3. (データベース)スキーマの全体は“圏の圏”である。
  4. (データベース)インスタンスは(データベース)スキーマからの関手である。
  5. (データベース)インスタンスのあいだの準同型射は自然変換である。

括弧のなかに入れた「データベース」を他の言葉で置き換えてもこの発想は通用します。実際の適用例はいずれ出すつもりですが、まずは、この発想の一般的な枠組みをハッキリさせておきましょう。

スキーマは圏なので、S, T のようなイタリック体文字で表すことにします。“スキーマの全体”もまた圏を形成しますが、個々のスキーマとは区別するために、Schのようなイタリック体太字としましょう。Schは、すべての小さな圏からなる圏Catの部分圏だとします*1

他に、スキーマインスタンスとして具現化するための環境となる圏(アンビエント圏)Cも考えます。Cは小さい圏である必要はありません。例えば、C = Set としてかまいません。

SスキーマS∈|Sch|)として、S上のCインスタンスとは、関手 F:SC のことです。インスタンスのあいだの変換とか準同型射とは、自然変換 α::F⇒G:SC のことです。関手と自然変換は圏を作るので、この圏を InstC[S] と書きます。より簡略に、CS とか [S, C] とも書きます。

Schの射をスキーマ射と呼びましょう。スキーマ射は、スキーマ変換を与える関手です。スキーマ射は、σ、ρなどのギリシャ小文字で表すことにします*2ギリシャ文字で書いても自然変換ではなく関手なので注意してください。

さて、σ:STスキーマ射のとき、T上のインスタンスは、σによりS上に引き戻されます。Fを F:TC という関手、つまりT上のインスタンスだとして、

  • σ*(F) := σ;F

とすれば、σ* が関手から関手への対応を定義します。同様に、自然変換(関手圏の射)α::F⇒G:TC に対して、σ*(α)A := ασ(A) (A∈|S|)として、自然変換から自然変換への対応も構成できます。これらは全体として、関手圏 [T, C] から別の関手圏 [S, C] への関手σ*を定義します。関手データモデルでは、関手 σ*:[T, C] → [S, C] はスキーマ変換に伴う単純データマイグレーションとなっています。

いま定義した関手σ*を、InstC[σ] と書いてみると、InstC[-] がインデックス付き圏となっていることが分かります。インデックス付き圏が出てきたらとりあえずグロタンディーク構成。この場合は、特定のスキーマ上じゃなくて、すべてのスキーマに渡ってインスタンスを寄せ集めた圏が構成できます。

実は、InstC[-] = [-, C] のCが必ずしも小さくない(例:C = Set)なので、サイズの問題があるのですが、気にしないことにしましょう。

一般に、H:DC がインデックス付き圏のとき、そのグロタンディーク平坦化を積分記号を使って ∫(x∈D | H[x]) と書くことにします*3。“積分変数”xは、対象も射も表すものとします。今回のケースでは、グロタンディーク平坦化は ∫(s∈Sch | [s, C]) と書けます。平坦化には標準的なファイブレーション射影 ∫(s∈Sch | [s, C]) → Sch が伴います。

∫(s∈Sch | [s, C]) の作り方を振り返ると、この圏の射は、異なるスキーマ上のインスタンスを比較する方法を与えることがわかります。まず、スキーマ射 σ:ST in Sch が誘導する引き戻しにより、スキーマT上のインスタンスを、スキーマS上にマイグレーション(引き戻し)します。すると、同じ世界(InstC[S])のなかでの比較が可能となります。

さらに、∫(s∈Sch | [s, C]) という広い世界が手に入ったおかげで、異なるスキーマ上のインスタンスを組み合わせて別なインスタンスを作り出す方法が色々と可能となります。∫(s∈Sch | [s, C]) には、SchCという2つのパラメータが入っているので、これを動かすことによって、多様な事例を作り出すことができます。

∫(s∈Sch | [s, C]) という、自由度が高くて良い構造を持った圏を発見したことがスピヴァックの大きな功績だと言えるでしょう。しばらくは、スピヴァックが見いだした広大な地平を探索してみるつもりです。


関連するエントリー:

  1. 一般関手モデル:インスタンスの余タプリングと貼り合わせ
  2. 一般関手モデル:インスタンスのモノイド積とテンソル積
  3. 一般関手モデル:相対スキーマと相対インスタンス
  4. 一般関手モデル:「圏の表示」の圏
  5. 一般関手モデル:インスティチューションとの関係
  6. 一般関手モデル:どこを一般化?

*1:ほんとにCatの部分圏でなくても、Catの部分圏に圏同値となる圏ならかまいません。

*2:これは、インスティチューション理論の習慣を採用しました。スキーマと、インスティチューションの指標はほとんど同じものです。

*3:積分記号はエンド/コエンドでも使われます。