位相の初学者向けの説明を収束中心に行っていくとどうなるかを考える。
森毅『位相のこころ』冒頭に収録されている解説的な文章「位相概念」は、「極限」「収束概念」から話が始まっている。この行き方について梅田亨『森毅の主題による変奏曲』は
ここは、初学者にとっても、概念のさまざまな側面に触れることで、イメージが作りやすくできる実践的効果が巧妙に盛り込まれている箇所なのだ。
(梅田亨『森毅の主題による変奏曲 上』位相篇(1))
と述べる一方で、
そうは言っても、森さんの記述は、問題意識が根本的すぎて、初学者向きでないものを含む。……
実際、収束(極限)から話に入るので、夾雑物が多くて、誤解しそうなところもある。
(梅田亨『森毅の主題による変奏曲 上』位相篇(1))
としている。そこで、初学者向けでない夾雑物を除いて(ついでに問題意識もあまり持たずその点で意識を低くして)、収束から位相を説明していったらどうなるかを考える。
収束による位相
収束を元にして位相を考えると次のようになる。
- 集合X上の任意の数列anに対して、数列anがどの p∈Xに収束するのかを定める。(もちろん収束先があるとは限らないし一般的には収束先が1点とも限らない)。
- 「収束」によって Xでの「近さ」が決まり、それによって位相概念「開集合」「閉集合」「開核」「閉包」「近傍」などが決まる。
ただしこの行き方には根本的な欠点があって、一般的には「収束」から「位相」が決まるとは限らない。(森、梅田の本では「擬位相」と呼ばれている)。『位相のこころ』の特に最初の数章は擬位相の話なのか位相の話なのか読んでいて混乱した記憶がある。(それ以降になるとフィルターが出てきてもっとつらくなった)。
この欠点を克服する仕方として、a1、a2、a3、……という通常の数列(点列)だけを考えるのではなく、もっといろいろな順序集合(有向集合)を添え字にした有向点列aλを考えて、その収束を考えるというものがある。
しかしマイナーな(と思われる)有向点列を初学者向けの説明に持ち出すのはいかにも本末転倒の感があるし、距離空間やその有限次元の直積などでは有向点列まで考えず通常の数列の収束だけ考えてもちゃんとした位相になるので、「一般的には数列(点列)だけでなく有向点列の収束を考えます」という注意書きを隅っこの方につけて、数列の収束で位相が決まる「かのように」話を進めていくことにする。
(有向点列について『位相のこころ』には
フィルターを嫌って、有向点列などを好む人もあるが、理論の整合性から言えばフィルターの方がよい。
(森毅『位相のこころ』「位相構造」4.近傍)
とある)
関数の連続、収束
数列の収束を用いると、関数の連続や収束は
- 関数f(x)がx=pで連続 ⇔ どんな数列 an についても、lim an =p なら lim f(an) =f(p) となる。
- x→pのときf(x)→q ⇔ どんな数列 an(ただし常にak≠pとなるもの)についても、lim an =p なら lim f(an) =q となる。
と定義される。これは「関数がpで連続というのは、入力がpに近づいていくときに出力は必ずf(p)に近づいていくこと」「x→pでf(x)→q は、入力がpに近づくと出力がqに近づくこと」を数列の収束を使ってそのまま言い換えた感じになる。
ただしこれがεδ式の通常の定義より分かりやすいかというと結局はそうでもない思う。
εδの理解のしにくさの原因として、
- 論理式(特に「ならば」とその否定や「∀」「∃」)の運用に慣れていない。集合や像、逆像の扱いに慣れていない。
というのがあると思うけど、上のように定義しても、その先で論理記号の書き換えや集合演算が必要になるのは変わらないから根本的な難しさは同じな気がする。
あとは論理式の変形に慣れる目的も考慮して、不連続点でのεδ関係を入力x出力yを平行に並べた図で見てみるとか。(もちろん関数の外形自体はxy軸の直交した普通のグラフでも示して)。例えば y=2x+1(x≧0)、=2x(x<0 だったり、y=sin(1/x)(x≠0)、=0(x=0) だったり、 y=0(xが無理数)、=1/q(x=p/q q>0 p⊥q(互いに素))などを例にして。(最後の関数はトーメ関数(Thomae's function、トマエ関数)と呼ぶらしい。この人名について『森毅の主題による変奏曲 下』「はじめのおわり」に「トマエかトーメか」という節があり「今後「トーメ」が主流になるのだろう。ただ、この時点で根拠がはっきりしたわけではない」とある)
開集合、閉集合、開核、閉包、近傍
ここから数列の収束を使って開集合、閉集合、開核、閉包、近傍のそれぞれを説明していく。
しかし本当は数列の収束では(有向数列まで考えないと)位相が定まるとは限らなかったので、収束を除いた開集合、閉集合、開核、閉包、近傍の相互関係の見取り図を示しておく。
開集合--------開核 | \ / | | 近傍 | | | 閉集合--------閉包
オーソドックスな位相の説明では収束の話とは独立に「開集合系」「閉集合系」「開核演算子」「閉包演算子」「近傍系」の各公理系やその間の関係を考えていくことになる。
閉集合と閉包
集合Xの部分集合Aがあったとする。このとき、A上の数列(つまりどのanについても an∈A となる数列)で収束するものを取った時、必ずしも lim an ∈A となるとは限らない。
例えば X=ℝ(実数)として an = 1/n という数列を考えると、an ∈ {x∈ℝ | x>0}だけど、極限 lim an = 0 は{x∈ℝ | x>0}に含まれないし、a1=1、an+1=(an+2/an)/2とすると、an∈ℚ(有理数)だけど、lim an = √2なので極限値はℚに含まれない。
このことを踏まえて、閉集合は次のように定義される。
- Aが閉集合 ⇔ A上の数列 an ∈A が収束するなら必ず lim an ∈ A となる。
つまり、Aの中にあるどんな数列も「極限」によって外に脱出できないならそのAは閉集合ということになる。閉集合という語感とも合う。(あるいは、極限操作について閉じているので「閉」)。
次に、集合A(閉集合とは限らない)に対して、その閉包を取る操作 cl(A) (このcl(A)はA-とかA∙などとも書かれる)は、
- cl(A) = 「A上の数列 an∈A の収束先を全部Aに追加したもの」
となる。この操作の目的は「最小限の要素を追加して逃げ出せない集合にする」ことで、そのために逃げ出した先(収束先)を全部取り込んでいる。
そして、cl(A) =「Aを含む集合のうち外に逃げ出せない最小集合」であり、外に逃げ出せない集合というのは閉集合だったので、
- cl(A) = 「Aを含む最小の閉集合」
のように、閉集合を使ってcl(A)を定義することができる。また閉集合は初めから外に逃げ出せない集合だから閉包をとっても変化しないので、逆に閉集合の方を閉包演算clを使って
- 閉集合 ⇔ 「cl(A)=A」となる集合
と定義することもできる。
- cl(A) = 「A上の数列 an∈A の収束先を全部Aに追加したもの」
とすると、cl(A)上の数列を考えたときにその収束先がcl(A)をはみ出てしまうような位相空間がある。(つまりcl(A)から外に逃げ出せてしまう)。さらに cl(A) ⊊ cl(cl(A)) ⊊ cl(cl(cl(A))) ⊊……とどんどん大きくなるかもしれない。
しかしそのような場合でも有向点列で考えるとうまくいく。例えば普通の数列で lim a(m)n = p(m)∉Aとなってさらに lim p(n) がcl(A)の外に出たとしても、有向点列で考えている場合は適当な順序を入れることで a(m)n全体を有向点列にしてそれを lim p(n)に収束させることができるので収束先はcl(A)に入っている。この例に限らず有向点列の収束ではcl(A)の時点で収束先が十分多く追加されるので、cl(cl(A))がcl(A)よりさらに大きくなるということも起こらない。
開集合、開核
外に逃げ出すのと逆に、外から守ることを考えると開集合が定義される。
- Aが開集合 ⇔ Ac(Aの補集合)上の数列 an ∈Ac が収束するなら必ず lim an ∈ Ac となる。
つまりどの要素anも中に踏み込んでいない( an∉A )なら極限値も中に入り込めない( lim an∉A )のが開集合ということになる。(「開」の語感とはちょっと合わない)。
集合Aに対する開核演算int(A)、Aoは、
- int(A) = 「Aの補集合上の数列 an∈Ac の収束先をAから取り除いたもの」
と定義される。Aの外から攻め込まれうる弱点をすべてAから取り除いたものがint(A)になり、これはなるべく少ない点を取り除いて外から攻め込まれない集合(開集合)にする操作ともいえるので
- int(A) = 「Aに含まれる最大の開集合」
と定義することもできる。逆に開集合は始めから攻め込まれない集合なので
- 開集合 ⇔ 「int(A)=A」となる集合
となる。
また「外に脱出できない」と「外から入り込めない」は、外と内を逆転させれば表裏一体のことなので
となり、開核演算intと閉包演算clについても互いを使って定義でき
- int(A) = (cl(Ac))c (Aの開核 = Aの補集合の閉包の補集合)
- cl(A) = (int(Ac))c (Aの閉包 = Aの補集合の開核の補集合)
となる。
近傍
開集合は内側に踏み込ませない集合だった。
一方、特定の点に到達させない集合が近傍になる。
- 集合Aが点pの近傍 ⇔ Ac(Aの補集合)上の数列が収束するとき必ず lim an ≠ p となる。
近傍Aに足を踏み入れていない数列はpに到達できない。つまり数列 anがpに収束するためには、数列自身がどこかで必ず近傍Aに入り込まないといけない。
開集合は外部から内に入り込ませない集合だったから、開集合は含んでいるどの点に対してもその点の近傍となる。(開集合かつ近傍なので開近傍と呼ばれる)。これを定義にしてしまって
- Aが開集合 ⇔ Aに含まれるどのp∈Aに対してもAはpの近傍になる
とすることもできる。
また開核演算int(A)は、Aの点のうちAが守っていない点を取り除けばいいから
- int(A) = {x | Aはxの近傍}
と定義できる。
逆に近傍は開核演算intを使えば
- Aがpの近傍 ⇔ int(A) ∋ p
と定義できる。(int(A)は開集合なのでint(A) ∋ p のときAの外からpには到達(収束)できない。逆にint(A)∋pでないなら、Aに踏み込まずにpに到達(収束)できる)。またこの右辺では A ⊇ int(A) ∋ p が成り立っていて、int(A)は開集合だから
- Aがpの近傍 ⇔ A ⊇ O ∋ pとなる開集合Oがある。
とも定義できる。
特に距離空間の場合は、A ⊇ O ∋ pとなる開集合Oとして開球体Bε(a) ={x| d(x,a)<ε} を取ることができるので、「Aが開集合」⇔「Aのどの点pを取っても、Aはpの近傍になる」⇔「Aのどの点pを取っても、A ⊇ Bε(p) ∋p となる開球体Bε(p)がある」となって、
- Aが開集合 ⇔ Aのどの点pについても、適当な開球体Bε(p)を取って Bε(p) ⊆ A とできる。(距離空間での定義)
が導かれる。
またこの「A ⊇ O ∋ pとなる開集合Oがある」は実質的には近傍系の公理のひとつと同じことを言っている。ただし近傍系の公理では近傍だけで話を済ますために「開集合 = 含んでいるどの点に対してもその近傍になる」を使って
「A ⊇ O ∋ pとなるpの近傍Oで次を満たすものがある。O∋qとなるどの点qについてもOはqの近傍」と書き換えて、さらにOがqの近傍ならA ⊇ OとなっているAもqの近傍なので、
- Aがpの近傍のとき、A ⊇ O ∋ pとなるpの近傍Oで次を満たすものがある。O∋qとなるどの点qについてもAはqの近傍 (近傍系の公理のひとつ)
となる。
数直線ℝを考える。普通ならpのε近傍は (p-ε, p+ε) だけど、その代わりに [p, p+ε) が近傍になる世界を考える。(下極限位相。この世界では[a,b)が「開区間」になる)。「pを守る近傍が右側(プラス側)にだけ延びていて左がガラ空きだから左側(マイナス側)からの方が収束しやすそう」と考えたら全くの間違いになる。
数列がpに収束するには数列がpの近傍に踏み込まないといけない。そして[p、p+ε)に踏み込むにはpより右側(プラス側)の値を取らないといけないから、数列はプラス側からしか収束できない。つまり右側からしか近づけない世界ということになる。
ふたたび数列の収束
このようにして収束をもとに開集合、閉集合、開核、閉包、近傍が説明されたけど、逆にこれらを使って数列の収束を定義できる。
例えば次のように考えていく。
近傍や開集合は点を守っているので、数列がpに収束するためにはpの近傍や開近傍の中に数列自体が踏み込まないといけなかった。そして
- 単に数列のうちのどれか一項akだけが近傍Aに入るak∈Aだけでは収束には足りない。(数列anがpに収束するのとき任意の部分列もpに収束するので、Aに入る項がひとつだけではそれを除いた部分列は近傍に入らなくなりpに収束することに反する。それにひとつ入るだけでは「収束」というより「通過」になる)。
- 収束と呼ぶためには、はじめのうちは近傍内に入り込めなかったり一旦近傍に入ったあとも後続が再び近傍の外に出ることがあったとしても、どこかの時点から以後は全ての項anがその近傍内に入り込む必要があるだろう。(数列がどこまで進んでも近傍Aの外にいる要素が現れるとしたら、そうした要素だけ集めて部分列にしたらその部分列はずっと近傍Aの外にいるので極限はpにはならない)。
これを踏まえて、収束は
- lim an = p ⇔ pのどの近傍Aについても、ある番号より先は an∈A となる。(近傍による定義)
- lim an = p ⇔ pのどの開近傍A(p∈Aである開集合)についても、ある番号より先は an∈A となる。(開集合による定義)
という見たことのあるような定義に落ち着く。
どの近傍Aについても A⊇O∋p となる開集合(開近傍)Oがあるので、近傍と開近傍のどちらを使った定義 でも結果は等しくなる。
近傍のイメージとして「特定の点に到達させない集合」を初めに出したけど、この収束の定義からは「pの近傍はpに近いかどうかの判定基準を与える」という別の側面が浮かび上がる。つまり近傍を一つ取ると「その近傍に入ればpに近い、入らなければpに近くない」という近さの判定ができる。
もちろんpの近傍は(たいてい)1つではないから、近傍ごとにpへの近さの判断は変わる。しかし数列の収束の定義は、それらの判定基準(=近傍)を全て使って
- 数列がpに収束する ⇔ pの近さについてどの判定基準(=どの近傍)を使っても、数列の後ろの方は全部pに近い。
と言っている。もちろん、たくさんある近さの基準(=近傍)のなかでより重要なのは、より判定の厳しいもの(つまり集合の包含関係で小さいもの)。収束の定義も、ニュアンスを込めた言い方をすれば「pの近さについてのどんな厳しい判定基準(=どんな小さい近傍)を使っても、……」となる。
より厳しい判定基準(より小さい近傍)が重要なのだから、判定のゆるいものはどれだけあってもかまわない。実際、
- Aがpの近傍なら、B⊇AとなるBはpの近傍 (近傍系の公理のひとつ)
となっている。また近さの判定がとてもズレている近傍Aと近傍Bがあっても
- AとBがどちらもpの近傍なら、A∩Bもpの近傍 (近傍系の公理のひとつ)
なので両者のズレた判断は、どちらよりも判定の厳しいA∩Bに統合される。
- lim an = p ⇔ ∀A∈「pの近傍」. ∃n∈ℕ. ({ak| k≧n} ⊆ A)
と書ける。(有向点列の収束も、添え字を有向集合Λに置き換えた「∀A∈「pの近傍」. ∃λ∈Λ. ({ak| k≧λ} ⊆ A) 」と定義される。以下の話も有向点列に置き換えてもそのまま成り立つ)。
さらにpの近傍全体の集合(pの近傍系)を V(p) と書き、Tn = {ak| k≧n} という集合全体をTと書くことにすれば、数列の収束の定義は
- lim an = p ⇔ ∀A∈V(p). ∃Tn∈T. Tn ⊆ A)
となる。
これは「V(p)の要素(pの近傍)xに対して、T側の要素(数列の項からなる集合)yでxより(集合として)小さいものy⊆xがある」と言っている。この時、T側に小さい要素があるかどうかが問題なのだから、Tに含まれている要素よりも大きい要素をTに追加して考えても成立不成立は変わらない。そこで、大きい要素を全て追加した F = {x| ∃y∈T x⊇y} = {x| ∃n∈ℕ. x⊇{ak| k≧n}} を考える。するとこのFはフィルターになる。(フィルターの説明は略)。
また近傍系は初めからフィルターになっている。(近傍系の公理のいくつかがそのままフィルターの公理になっている)。
そうすると、収束の条件は、近傍フィルター V(p)の要素x∈V(p)に対して、数列の尻尾部分 {ak| k≧n} から作ったフィルターFの要素y∈Fで、y⊆xとなるものがあると主張している。さらにフィルターは大きい側の要素は全て含んでいるので y∈Fでy⊆xならx∈Fなので「どのx∈V(p)についてもx∈F」と書き換えられ、これは結局「V(p) ⊆ F」なので、収束の定義は
- lim an = p ⇔ pの近傍フィルター ⊆ {x| ∃n∈ℕ. x⊇{ak| k≧n}} (フィルターによる定義)
というフィルターの包含関係で書ける。
ふたたび関数の連続
数列を使わずに関数の連続を定義する。
数列の収束を使った関数の連続の定義は次のようなものだった。
- 関数f(x)がx=pで連続 ⇔ どんな数列 an についても、lim an = p なら lim f(an) = f(p) となる。
そして近傍を使った数列の定義
- lim an = p ⇔ pのどの近傍Aについても、ある番号より先は an∈A となる。
を見ると、数列がある点に収束するかは、その点の近傍と数列の関係で決まる。したがって
- 関数f(x)がx=pで連続 ⇔ どんな数列 an についても、lim an = p なら lim f(an) = f(p) となる。
- lim an = p かどうかは、pの近傍と数列anの関係で決まる。
- lim f(an) = f(p) かどうかは、f(p)の近傍と数列anの関係で決まる。
ということになる。
このことから、数列を介さず近傍や開集合を使って関数の連続収束を定義をするには、入力側pの近傍と出力側f(q)の近傍の間の関係から定めればいいと考えられる。
ここで重要なのは、出力側に応じて入力側が決まるという(εδでもお馴染みの)関係。
数列の収束の定義でも、出力側の近傍を取る⇒数列(入力側)の適当な番号以降の項はその近傍の内側に入る、という出力⇒入力の関係だった。したがって連続性の定義は、出力側の近傍に対してそれに応じた入力側の近傍が存在する、という形にすればいいだろう。
……この辺りで面倒になってきたので結論の定義を出してしまう。
- 関数f(x)がx=pで連続 ⇔ 出力側f(p)の近傍Bをどのように取っても、それに応じて入力側でpの近傍Aをうまくとれば、x∈Aならばf(x)∈Bとなる。
量化記号を使い、また「ならば」の部分を集合関係に変えると
- 関数f(x)がx=pで連続 ⇔ ∀B∈「f(p)の近傍」. ∃A∈「pの近傍」. f(A)⊆B
となり、さらに写像の性質により
- 関数f(x)がx=pで連続 ⇔ ∀B∈「f(p)の近傍」. ∃A∈「pの近傍」. A⊆f-1(B)
と書き換えられる。ここでAがpの近傍なのでAを含むf-1(B)もpの近傍ということになり、
- 関数f(x)がx=pで連続 ⇔ f(p)の近傍Bの逆像f-1(B)は必ずpの近傍になる。
とも定義できる。
近傍ではなく開集合(開近傍)で連続を定義をする場合、定義の中の近傍を開近傍に置き換えるだけでいいけど、最後の「近傍の逆像が近傍になる」だけは開近傍に置き換えられない。一点だけの連続性では、開集合の逆像が開集合になるとは限らないので。(位相の入門に出てくるように、集合全体で連続な関数では開集合の逆像は開集合になる)。
閉集合の共通部分集合と和集合
閉集合の共通部分集合と和集合については、
- 任意個(有限個でなくてもよい)の閉集合の共通部分 ∩Aλ は閉集合になる。
- 有限個の閉集合の和集合A1∪…∪Anは閉集合だけど、任意個の和集合 ∪Aλ は閉集合とは限らない。(ただし必ず閉集合になるような位相空間もある)。
という非対称な性質がある。
この非対称性は、数列の収束によって閉集合を説明した立場から見ると、
- ∩Aλ上の数列は必ず個々のAλ上の数列になる。あるAλ上の数列は必ず∪Aλ上の数列になる。
- ∪Aλ上の数列は必ずしも個々のAλ上の数列にはならない。あるAλ上の数列は必ずしも∩Aλ上の数列にはならない。
という非対称性が原因だと考えることができる。
閉集合の任意個の共通部分集合が閉集合になることは
- ∩Aλ上の数列anを取り、この数列が収束するとする。
- λを任意にとる。与えられた数列はAλ上の数列でもある。Aλが閉集合なので、 lim an∈Aλとなる。
- よってどのλについてもlim an∈Aλとなるので、lim an∈∩Aλとなる。
- したがって(∩Aλ上の数列の極限値が∩Aλの外に出られないので)、∩Aλは閉集合。
というように説明できる。
しかしこれ変形して∪Aλに適用しようとしても、∩Aλ上の数列と∪Aλ上の数列の非対称のためにうまくいかない。