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

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

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

[参照用 記事]

構造記述のための指標と名前 3/n 名前もっと

前回「構造記述のための指標と名前 2/n 圏の記述」の最後で、

次回は「圏論を使って二重圏を定義する」予定です。

と書いたのですが、二重圏の話の前に、最初の回「構造記述のための指標と名前 1/n 基本」では述べきれなかった“名前に関する説明”を追加します。$`\newcommand{\mrm}[1]{ \mathrm{#1} }
\newcommand{\cat}[1]{ \mathcal{#1} }
%\newcommand{\op}{ \mathrm{op} }
\newcommand{\In}{\text{ in }}
%\newcommand{\Imp}{\Rightarrow}
%\newcommand{\u}[1]{\underline{#1}}
%\newcommand{\o}[1]{\overline{#1}}
%\newcommand{\twoto}{ \Rightarrow }
%\newcommand{\id}{ \mathrm{id} }
\newcommand{\hyp}{\text{-} }
\newcommand{\T}[1]{\text{#1} }
%%
\require{color}
\newcommand{\NN}[1]{ \textcolor{orange}{\text{#1}} } % New Name
`$

内容:

ハブ記事:

分類子名と固有名

指標によって名前が新規導入されたり、指標が既知の名前を使用したりします。指標が導入する名前はニ種類でした(「構造記述のための指標と名前 1/n 基本」参照)。

  1. 指標名〈signature name〉
  2. 構成素役割り名〈constituent role name〉

指標名は、もちろん指標自体に付けられた名前ですが、指標によって記述・定義される概念的事物の“種類の名前”としても使用します。
$`\quad \T{Semigroup}, \T{Monoid}, \T{SmallCategory}`$
などの名前は、概念的事物の“種類の名前”です。概念的事物の“種類の名前”を分類子名〈classifier name〉とも呼ぶことにします。つまり、指標名は分類子名としても使われる、ということです。

分類子名は型名と言っても同じです。が、しかし、様々な型理論において「型とはなんぞや?」がシリアスに議論されていて、型に対して思い入れや主義主張を持つ人もいるでしょうから、ここで「型」を使うのはやめておきます。とはいえ、「型〈type〉」という言葉は、型理論の厳密な定義のもとではなくて、国語辞書的意味で使うことはあります、よくあるでしょう。

分類子名は、構成素役割り名(初出時はオレンジ色で書きます)や変数名を導入するときに、その名前が指す予定の概念的事物の種類の指定に使われます。例えば:

$`\quad \T{variable }S \T{ is }\T{Semigroup}\\
\quad \T{variable }M \T{ is }\T{Monoid}\\
\quad \T{variable }\cat{C} \T{ is }\T{SmallCategory}\\
\:\\
\quad \T{datum }\NN{MulSemigrp} \T{ is }\T{Semigroup}\\
\quad \T{datum }\NN{LeftStim} \T{ is }\T{Monoid}\\
\quad \T{datum }\NN{base} \T{ is }\T{SmallCategory}
`$

これは確かに型名としての用法ですね。

分類子名とは別種な名前として、圏の固有名〈proper name〉があります。
$`\quad {\bf Semigrp}, {\bf Mon}, {\bf Cat}`$
はそれぞれ、
$`\quad`$ 半群達の圏、モノイド達の圏、小さい圏達の2-圏
を名指す固有名です。圏の固有名は太字〈ボールド体〉を使う習慣ですが、習慣が守られる保証はありません。

圏(2-圏も含む)の固有名を絶対値記号で囲むと、集合の固有名として使えます。
$`\quad |{\bf Semigrp}|, |{\bf Mon}|, |{\bf Cat}|`$
はそれぞれ、
$`\quad`$ 半群達の集合、モノイド達の集合、小さい圏達の集合
を名指す固有名です。これらの集合は大きな集合なので、圏 $`{\bf Set}`$ の対象ではありません(大きな集合達の圏 $`{\bf SET}`$ の対象です)。

変数名や構成素役割り名の型(名前が指す予定の概念的事物の種類)の指定には、集合の固有名を使うこともできます。

$`\quad \T{variable }S \in |{\bf Semigrp}|\\
\quad \T{variable }M \in |{\bf Mon}|\\
\quad \T{variable }\cat{C} \in |{\bf Cat}|\\
\:\\
\quad \T{datum }\NN{MulSemigrp} \in |{\bf Semigrp}|\\
\quad \T{datum }\NN{LeftStim} \in |{\bf Mon}|\\
\quad \T{datum }\NN{base} \in |{\bf Cat}|
`$

あるいは、次のように書いても同じです。

$`\quad \T{variable }S \In {\bf Semigrp}\\
\quad \T{variable }M \In {\bf Mon}\\
\quad \T{variable }\cat{C} \In {\bf Cat}\\
\:\\
\quad \T{datum }\NN{MulSemigrp} \In {\bf Semigrp}\\
\quad \T{datum }\NN{LeftStim} \In {\bf Mon}\\
\quad \T{datum }\NN{base} \In {\bf Cat}
`$

同じことを記述するのに、幾つかの書き方があります。

関手意味論

指標により導入される分類子名(指標名でもある)と、圏の固有名は次のように対応しています。

$`\text{分類子名}`$ $`\text{圏の固有名}`$
$`\T{Semigroup}`$ $`{\bf Semigrp}`$
$`\T{Monoid}`$ $`{\bf Mon}`$
$`\T{SmallCategory}`$ $`{\bf Cat}`$

必ずしも同じ綴りにはなってませんが、それは習慣なのでしょうがありません。

どのような方法で、分類子名と圏の固有名の対応が作られるのでしょうか? ローヴェア〈William Lawvere〉が創始した関手意味論〈functorial semantics〉のメカニズムを使います。今、関手意味論について述べることはしませんが、関手意味論を背景とすれば、次のような定義が可能です。

$`\quad \T{define }{\bf Semigrp} := (\T{The category of }(\T{Semigroup})\T{s})
\quad \T{define }{\bf Mon} := (\T{The category of }(\T{Monoid})\T{s})
`$

これはどういうことかと言うと、指標(とターゲット)が与えられれば、その指標で定義される代数系〈代数構造〉を対象とする圏が自動的に作れる、ということです。
$`\quad (\T{The category of }(\hyp)\T{s})`$
が圏を作り出すメカニズムを表しています。ハイフンのところに指標名(分類子名でもある)を入れると、対応する圏が自動的に生成されます。その圏に固有名を付ければいいわけです。

ただし、指標の書き方〈フォーマット | 構文〉は一定の約束に従う必要があります。ローヴェア流の関手意味論が対応している指標は代数指標〈algebraic signature〉というフォーマットのものです。その他のフォーマットの指標に対する関手意味論(圏の自動生成メカニズム)も存在しますが、いずれにしても指標の書き方の約束はあります。

小さい圏の指標 $`\T{SmallCategory}`$ (「構造記述のための指標と名前 2/n 圏の記述」参照)から、小さい圏達の2-圏 $`{\bf Cat}`$ を自動生成できるでしょうか? 圏の2-圏では次元が上がっている(2次元になる)ので、半群やモノイドのような1次元の場合と比べて格段に難しくなります。出来なくはないけど大変だ、ということです。

ローヴェア流の関手意味論のマシナリーを使えば、対象を記述する指標さえ準備すれば、射の記述は不要となります。これは便利です。しかし、マシナリーは使わす、全部手作りする選択肢もあります。射を記述する指標も明示的に書いて、圏の公理系を満たすことを示せば圏を作れます。全部手作りで作った圏に固有名を与えることが出来ます。

固有名の曖昧さ

固有名は、唯一特定のモノを名指す名前です。しかし残念ながら、固有名とされる名前だけを見て、その名前が名指す対象物を特定することは出来ません。例えば、太字〈ボールド体〉の $`{\bf R}`$ は実数の集合を名指す固有名だとされますが、実数の集合以外を名指すためにも使われます。

実数には標準的な大小順序があります。その順序も“込み”で考えた $`{\bf R}`$ は順序集合なので、圏 $`{\bf Set}`$ の対象ではななくて、圏 $`{\bf Ord}`$ (順序集合の圏)の対象です。実数の足し算と掛け算、それに関わる諸々の法則を“込み”で考えると $`{\bf R}`$ は体になります。そのとき、$`{\bf R}`$ は圏 $`{\bf Field}`$ (体の圏)の対象です。

圏の固有名 $`{\bf Set}`$ にしたところで、唯一特定の圏を指すかどうかはあやしいのです。集合圏のデカルト構造を仮定することは多いですが、そうなると、$`{\bf Set}`$ はプレーンな圏ではなくてデカルト圏です。つまり、2-圏 $`{\bf CAT}`$ の対象ではなくて、2-圏 $`{\bf CartCAT}`$ の対象とみなしています。

ひとつの数字〈digit〉から構成される数表現〈numeral〉である $`1`$ は固有名とされますが、一意的に特定対象物を名指しているでしょうか? 名前(ひとつの数字)だけを見ても、それが自然数のイチなのか複素数のイチなのか、特定の単元集合を表しているのか、あるいはモノイドの単位元の構成素役割り名(このとき固有名ではない)なのかわかりません。

名前が指すモノの種類を表す分類子名を添えると、このような曖昧性を少なくすることが出来ます。例えば次のようです。

  • $`{\bf R}\T{ as }\T{Set}`$
  • $`{\bf R}\T{ as }\T{OrderedSet}`$
  • $`{\bf R}\T{ as }\T{Field}`$
  • $`{\bf Set}\T{ as }\T{LargeCategory}`$
  • $`{\bf Set}\T{ as }\T{LargeCartesianCategory}`$
  • $`{ 1 }\T{ as }\T{NaturalNumber}`$
  • $`{ 1}\T{ as }\T{ComplexNumber}`$
  • $`{ 1}\T{ as }\T{Set}`$

実際には、このような曖昧さ回避策が使用されるケースは少なく、文脈から分かるだろうという想定をします。逆に言えば、固有名といえども、文脈なしでは解釈が確定しない、ということです。

オーバーロード: ホムの例

ひとつの名前を複数の意味・用法で使い回すことがオーバーロードです。オーバーロードの例を挙げるときりがないですが、圏のホムセットの例を挙げます。

集合圏をプレーンな圏と考えて、固有名 $`{\bf Set}`$ で名指すことにします。念の為曖昧さ回避をしておくと:

$`\quad {\bf Set} := ({\bf Set} \T{ as }\T{LargeCategory})`$

どんな圏でも、そのホムセットがあります。ホムセットは単一の集合のことではなくて、2つの対象のペアに集合を対応させる写像です。

$`\quad \mrm{Hom}_{\bf Set} : |{\bf Set}| \times |{\bf Set}| \to |{\bf Set}| \In {\bf SET}`$

この写像はめちゃくちゃ多用されるので、単に $`{\bf Set}`$ と書きます。

$`\quad {\bf Set} : |{\bf Set}| \times |{\bf Set}| \to |{\bf Set}| \In {\bf SET}`$

写像としての $`{\bf Set}`$ が使われるときは、2つの引数をともなって、例えば
$`\quad {\bf Set}({\bf N}, {\bf R})`$
$`\quad {\bf Set}(X, Y)`$
とかなので、混乱の心配はあまりありません。

さらに、$`{\bf Set}`$ はホム関手の意味でもオーバーロードされます。

$`\quad {\bf Set} : {\bf Set}^\mrm{op} \times {\bf Set} \to {\bf Set} \In {\bf CAT}`$

この用法の $`{\bf Set}`$ では、引数に写像も入ります。例えば
$`\quad {\bf Set}(f, g)`$
$`\quad {\bf Set}(f, B)`$
とか。引数は対象〈集合〉だと思いこんでいると困惑します。

ホム関手については、次の過去記事で説明しています。

固有名 $`{\bf Set}`$ のオーバーロードに対する曖昧さ回避は例えば次のようです。

  • $`{\bf Set}\T{ as }\T{LargeCategory}`$
  • $`{\bf Set}\T{ as }\T{LargeMap}`$
  • $`{\bf Set}\T{ as }\T{Bifunctor}`$

前節で言ったとおり、曖昧さ回避策が講じられることは少ないので、文脈によるオーバーロード解決をします。