ほんとに必要な概念
- ストラクチャ={構造体 | クラス | 型クラス | レコード | 指標 | オブジェクト}
- トランスフォーマ={ファンクタ(SML) | 型クラス・インスタンス | セオリー}
- プロファイリング : ストラクチャのメンバーの一部
- バインディング : ストラクチャのメンバーの一部
- 名前=識別子 : ストラクチャのメンバーのキー
- メンバー: 名前、プロファイルは必須で、オプショナルな値からなる。
- 項: 評価されと、プロファイルまたは値となる式。
- プロファイル項: 評価されと、プロファイルとなる式。
- 値項: 評価されと、値となる式。
プロファイル項
- ドクトリン項 : 圏のプロファイル
- 圏項 : 対象のプロファイル
- 対象項 : 射のプロファイルの一部
- ホムセット項 : 射のプロファイル
- 圏項 : コンストラクタのプロファイルの一部
- コンストラクタ項 : トランスフォーマーのプロファイルの一部
名前 | プロファイル形式 |
---|---|
圏名 | ドクトリン項 |
対象名 | 圏項 |
射名 | 対象項 -> 対象項 (ホムセット項) |
コンストラクタ名 | 圏項 -> 圏項 |
コンビネータ名 | コンストラクタ項 -> コンストラクタ項 => (同様) |
出てくる名前
- ドクトリン名 : CCCなど
- 圏名 : Setなど
- 圏の対象名 : nat など
- 圏の射名 : +, 0 など
- コンストラクタ名 : DirectProd, Squre など
- コンビネータ名: diag, comp, terminal
以上の名前は、インデックス付き圏のベース圏と垂直圏に対して使う。ハイパードクトリンのグロタンディーク圏(平坦化した圏をそう呼ぶ)の対象はストラクチャ、射はトランスフォーマー。
圏 | その対象 | その射 |
---|---|---|
アンビエント圏 | 型 | 関数 |
ベース圏 | 指標 | 指標射 |
垂直圏(ファイバー) | 命題 | 定理 |
グロタンディーク圏 | 仕様 | セオリー |
注意事項:
- アンビエント圏はドクトリンから選ぶ
- アンビエント圏は型〈type〉と関数〈function〉の圏である。
- ハイパードクトリンの余域はドクトリンから選ぶ
- ベース圏はアンビエント圏と識別子集合〈Name〉から構成する
- 指標は、プロファイリングのリストである。
- 指標射は、名前集合のあいだを繋ぐ、forkと関数ノードから構成されるクローンと呼ばれるグラフである。
- 指標はプロファイリングだけを持つストラクチャ〈structure〉で表現する。
- 指標射はトランスフォーマー〈transformer〉で表現する。
- 命題は普通の論理式構文で定義する。
- 論理結合子はコンストラクタである。
- 推論規則はコンビネータとして定義する。
圏論 | ソフトウェア |
---|---|
ドクトリン | 暗黙 |
アンビエント圏 | 型の型 |
対象 | 型 type |
射 | 関数 function |
ベース圏 | 暗黙 |
ベース圏の対象 | プロファイリングだけの structure |
ベース圏の射 | 関数だけの transformer |
垂直圏 | proposition の値として暗黙 |
垂直圏の対象 | 命題 proposition |
垂直圏の射 | 定理 theorem |
グロタンディーク圏 | 暗黙 |
グロタンディーク圏の対象 | structure |
グロタンディーク圏の射 | transformer |
注意事項
- 名前空間 : ストラクチャの用法のひとつ。実体はストラクチャ
- 名前パス=完全修飾名
- 型クラス、クラス、インターフェイス、指標は、ストラクチャの利用法
- インスタンス、セオリーは、トランスフォーマーの利用法
結果、ソフトウェア的に必要な概念
- doctrine ほとんど不要
- category ほとんど不要
- type 対象名のバインディング
- function 射名のバインディング
- proposition 垂直圏の対象名のバインディング
- theorem 垂直圏の射名のバインディング
- structure ベース圏とグロタンディーク圏の対象名のバインディング
- transformer ベース圏とグロタンディーク圏の射名のバインディング
- constructor 関手と自然変換のバインディング、ほとんど不要
- combinator 関手と自然変換のバインディング、ほとんど不要
別名
- doctrine : bland
- category : kind
- type : sort
- function : value
- proposition : assertion, constraint, condition, hypothesis
- theorem : axiom, conjecture, fact, confirmation
- structure : class, typeclass, specification, interface, signature, record
- transformer : theory, object, instance, implementation, simulation, simulator
型は単純なストラクチャに、関数は単純なトランスフォーマーに埋め込める。
// 自明なストラクチャ テータ structure Θ = {} structure S := { ... } structure T := { // プロファイル部 t1 : T1, t2 : T2 // 命題バインディング部 propositons q1 := Q1, q2 := Q2 } transformer Foo : S -> T := { // 変換関数達 transforming functins function >t1 := { } function >t2 := { } // 変換定理達 transforming theorems theorem >q1 := { } theorem >q2 := { } }
簡単な例:
structure T := { // プロファイル部 t1 : int, t2 : int // 命題バインディング部 propositons q := t1 ≦ t2, } transformer Foo : Θ -> T := { // 変換関数達 transforming functins function >t1 := 1 function >t2 := 2 // 変換定理達 transforming theorems theorem >q := { 1 ≦ 2 by trivial } }
別名とシュガーを使って書くと:
class T := { t1 : int, t2 : int assertions q := t1 ≦ t2, } object Foo : ->T := { value for t1 := 1 value for t2 := 2 confirmation for q := { 1 ≦ 2 by trivial } }