「集合族」とか「集合の集合」という概念には、なかなかに微妙な点があります。N君も「うーん、よく分からないなー」と嘆いていました。ちょっとだけ真面目に(うんと真面目ではない)考えてみます。クラス関数による集合族の定義を導入して、これがけっこう使いやすいことを例示します。
[追記 date="翌日"]変なことを書いている所があったので、取り消し線と追記で修正しました。[/追記]
内容:
- 集合族と集合の集合
- 気になる点
- クラス関数としての集合族
- すべての集合族の集合
- 集合族の直和
- 直和のセクションの集合=直積
集合族と集合の集合
「集合族」と「集合の集合」という言葉を、とりあえず定義しましょう。
集合族は、正確に言えばインデックス付き集合族〈indexed family of sets〉です。長たらしいので、単に集合族〈family of sets〉とも略称します。集合Iと集合Xがあるとして、F:I→Pow(X) という写像(関数)が集合族です*1。Iは(Fの)インデックス集合〈indexing set〉と呼びます。Pow(X)はXのベキ集合です。集合族を定義するために、写像とベキ集合を使っているので、事前に写像とベキ集合は理解されているものとします。
Sが集合の集合〈set of sets〉だとは、適当な集合Xについて、S⊆Pow(X) であることだとします。やはり、ベキ集合については事前に知っている必要があります。
Sが集合の集合のとき、包含写像 S→Pow(X) があるので、この包含写像をFとすれば、F:S→Pow(X) となり、Sをインデックス集合とする集合族です。つまり、集合の集合は、自分自身をインデックス集合とする集合族とみなせます。
集合族 F:I→Pow(X) に対して、Fの像を考えると、F(I)⊆Pow(X) なので集合の集合が得られます。しかし、FからF(I)を作ると情報が失われます。F(I)からFを再現できることは保証されません。なので、集合族を像により集合の集合とみなすのは、具合が悪いこともあります。
気になる点
前節の定義は、特にマズイ点はないように思えます。しかし、ちょっと気になる点はあります。
公理的集合論では、すべてのモノが集合です。となると、集合の要素も集合です。つまり、どんな集合であれその要素は集合なので、集合の集合です。結局、集合の集合とは集合のことであり、あえて集合の集合なんて言う意味がありません。
と突っ込んでおいて、前節の定義を自分で擁護もします。
- 素朴集合論では、アトムを認めるので、集合の集合は単なる集合とは異なる概念である。(素朴集合論については「現場の集合論としての有界素朴集合論」を参照。)
- 最初にXを決めてかかるので、Xという特定の集合の部分集合の集まりという条件が付き、まったく勝手な集合の集合とは違う。
我々が普段使う集合論は公理的集合論ではないし、Xを決めてかかることで分かりやすさや使い勝手が向上している、というわけです。前節の集合族の定義でも、Xを前もって決めています。このことが、今言った“分かりやすさ/使いやすさ”というメリットになっています。
それがメリット? むしろデメリットじゃないの? 集合族や集合の集合を考えるとき、全体集合Xを事前に固定しないとダメなの? 全体集合は指定しないで、なんからの集合達の族/集合ってのを考えたらマズイの?
クラス関数としての集合族
前節最後の疑問に答えるために、いくつかの概念を導入しましょう。
集合とは呼べない集まりも考えて、それらの集まりを総称してクラス〈class | 類〉と呼びます。集合ではないクラスを真クラス〈proper class〉と呼びます。
「クラス」という言葉を導入したくないときは、小さい/大きいという形容詞を使います。
「クラス」という言葉を使う | 「集合」だけで済ませる |
---|---|
クラス | (必ずしも小さくない)集合 |
集合 | 小さい集合 |
真クラス | 大きい集合 |
関数(写像)という概念は、始域/終域がクラスになっても定義できます。始域/終域の少なくとも一方が真クラス(大きい集合)のとき、そのような関数をクラス関数〈class function〉と呼びます。
真クラスの例として、すべての集合(小さい集合)からなるクラスをUとします。U→U であるクラス関数の例として、ベキ集合クラス関数Pow(-)があります。任意の集合Xを受け取って、そのベキ集合Pow(X)を返す関数です。
次の後者関数〈successor function〉もクラス関数です。
- succ(X) := X∪{X}
空集合にsucc(-)を次々と適用していくと:
- succ() = ∪{} = {}
- succ({}) = {}∪{{}} = {, {}}
- succ({, {}}) = {, {}}∪{{, {}}} = {, {}, {, {}}}
前節の「全体集合は指定しない、なんからの集合達の族/集合」は、次のように考えればいいでしょう。
- F:I→U というクラス関数が集合族を表す
- S⊆U という部分クラスが集合の集合を表す
ここで、IとSは集合なので、
- I∈U
- S∈U
すべての集合族の集合
ここからは、集合族とは、F:I→U というクラス関数だとしましょう。集合の集合 S⊆U に対しては、(クラスとしての)包含写像により、集合族とみなします。
インデックス集合Iを選んで固定したとき、Iをインデックス集合とする集合族の全体をMap(I, U)とします。集合族は写像(関数)なので、IからUへの写像の全体を考えたのです。
[追記]以下で、「Map(I, U)は集合か?」という話があったのですが、Uが真クラスなら、Map(I, U)は集合ではないし、集合である必要もないです。そこは問題ではなくて、次が問題です。
- Map(I, U)をクラスとして認めるか?
- Map(I, U)の要素である集合族に、置換公理を適用してよいか?
僕はどちらもYESと答えます。この記事を書いている最中は、YESが根拠なき楽観主義のような気がして、言い訳っぽい書き方してるんですが、あらためて考えると、NOと言う人はいない気がします。つまり、あえて「問題」として取り上げるほどのこともなかったかも知れません。[/追記]
しかしそもそも、Map(I, U)なんて考えていい(存在が許される)のでしょうか? 仮にクラスとしての存在を認めたとして、Map(I, U)は集合でしょうか?
公理的集合論のフレンケル〈Fraenkel〉の置換公理〈Axiom schema of replacement〉では、クラス関数を使っています -- クラス関数がダメというわけではないのです。とはいえ、任意のクラス関数やクラス関数の全体を考えているわけではなくて、置換公理に出てくるクラス関数は論理式で定義できるもの(definable class function)だけです。Map(I, U)のような超越的な構成物の要素すべてに置換公理を適用することが許されるものか、それが集合になるのかは(僕には)よく分かりません議論の余地はあるかもしれません。
ここでは、作業仮説としてMap(I, U)は集合だとします。宇宙Uが集合の大宇宙ではなくて、小さなワーキング宇宙であるなら、Map(I, U)は大宇宙のなかの集合なので、Map(I, U)を集合と捉えることに何の問題もありません。僕は、こういった状況を想定していますすることが多いです。
F:I→U が集合族なら、Fの像F(I)がUの部分クラスとして確定します-- F(I)⊆U。F(I)がIより大きいとは思えないので、F(I)は集合だとします。置換公理を、定義可能クラス関数以外にまで適用したことになります。
F(I)が集合なので、その合併∪(F(I))が作れます。∪(F(I))は次のように書いたほうがお馴染みかも知れません。
集合族の直和
集合族 F:I→U に対して、別な表現を作ります。それは、F(i)達を直和で寄せ集めた集合です:
この直和を具体的に作るには、Y = ∪(F(I)) として、次のようにします。
F(i)達を共通部分なしで寄せ集めたことになります。
F(i)達の直和を簡略にΣ(F)とも書くことにして、z∈Σ(F) のとき、z∈F(i) となるiは一意的に決まります。z|→(z∈F(i) となるi) という対応により、写像 p:Σ(F)→I が決まります。この写像pは次の性質を持ちます。
ここから先は、F(i)が空にはならない集合族を考えます。U+を空集合を除外した宇宙とすると、F(i)が空にならないことは、F:I→U+ と書けます。このような集合族Fに関しては、p:Σ(F)→I は全射になります。このpも込めてΣ(F)を、集合族Fの直和〈direct sum〉と呼びます*2。
直和のセクションの集合=直積
A, Bを集合として、f:A→B は全射とします。s:B→A がfのセクション〈section〉であるとは、s;f = idB が成立することです*3。fが全射でないと、セクションは存在しません。
全射 f:A→B に対して、そのセクション全体からなる集合をSect(f:A→B)、あるいは単にSect(f)と書くことにします。Sect(-)は、全射に対してだけ考えることにします(全射でないと意味がないので)。
集合族 F:I→U+ に対して、p:Σ(F)→I は全射でした。よって、Sect(p:Σ(F)→I)は意味を持ちます。このSect(p)は、F(i)達すべてを直積した集合と集合として同型になります。
同型の左右どちらの集合の要素も、s(i)∈F(i) を満たすような関数sなので、1:1の対応があります*4。
s(i)∈F(i) と書くと、sが集合族の選択関数〈choice function〉になっていることが分かります。それはまた、直積集合の要素、つまりタプルです。空な成分(空なF(i))を持たない集合族Fに対して、集合族の選択関数、直和のセクション、直積集合の要素(タプル)が実質的に同じなのです。
上記同型の左側も右側も、普通に出てくる集合/構成法だと思います。ヤバイ感じはしません。その素材となっている、F:I→U+ も使って差し支えない概念に思えます。
というわけで、集合族や集合の集合を考えるとき、事前に全体集合を特定しなくてもよい、クラス関数を定義に利用してもよい、と考えています*5。
*1:IやXが空集合であることを禁止はしませんが、空の場合は面白くはありません。
*2:全射pも含めて考えているので、バンドルとかファイブレーションと呼ぶのがいいのかも知れませんが、なんか大げさなので単に直和としました。
*3:セクションの双対概念はレトラクト/レトラクションです。http://d.hatena.ne.jp/m-hiyama/searchdiary?of=10&word=%A5%EC%A5%C8%A5%E9%A5%AF で関連記事を検索できます。
*4:同型ではなくて、イコールだと思ってもいいです。直積の定義は、結局はセクションの集まりとなるので。
*5:[追記]これは特段に主張するような事ではなくて、普通の行われていることの追認に過ぎません。[/追記]