トポロジ空間の紹介。 Javaでの最終トポロジのプログラミング。 パート2:トポロジベース。 連続マッピング

部品リスト:









はじめに



前回、トポロジ空間の理論の基本概念に精通し、Javaで記述された有限トポロジ空間を表現するためのクラスも調べました。 今日は先に進み、トポロジベースの概念を研究し、それが何のために必要なのかを理解し、トポロジ空間の連続マッピングの概念を定義します。 トポロジ空間にはオブジェクト間距離の概念がないため、後者が主な関心事ですが、それでも公式言語でオブジェクトの十分な近接性を記述することができます...まあ、ところで、少し後で見つけるでしょう。



トポロジーベース



先に進む前に、次の簡単な質問をしたいと思います。



演習0。Xをn個の要素のセットとします。 セットXのすべてのサブセットを含む離散トポロジmには、いくつの要素が含まれますか?



明らかに、答えは2 nになります。

前の記事で説明したクラスを使用して、10個の要素のセットに個別のトポロジを作成する場合、1024セットをトポロジに追加する必要があります。非常に多くのルーチン作業が見つかりませんか?



しかし、データベースの助けを借りれば、1024の代わりに10セットのみを指定するだけで十分です。また、トポロジーが離散的でない場合は、さらに少なくなります。



それでは、定義に移りましょう。 トポロジベースには、同等の定義がいくつかあります。 コルモゴロフ学派で使用されている主な定義として、次に別の定義の等価性を証明します。



定義1.セットXのオープンサブセットのコレクションJは、スペース(X、m)のオープンサブセットGがJからのセットのコレクションの和集合として表現できる場合、トポロジのベースと呼ばれます。



数学的な観点からは、この定義は非常に理解しやすいものですが、プログラミングはかなり重要な作業です。 状況は、セットGが基底の2つのセットの結合である必要はなく、3、4などの結合である可能性があるという事実によって複雑になります。



幸いなことに、このケースは次の定理を簡素化するのに役立ちます。

定理1.トポロジのベースとなるシステムJに対して、すべてのオープンセットGおよびGからのすべてのポイントxについて、Jに属し、G(x)がGのサブセット



定理の証明も非常に簡単です。 まず、条件の十分性を証明します。 これは、記述された条件が満たされた場合、Jがトポロジのベースになることを意味します。

しかし、それが満たされている場合、GはセットG(x)のGのすべてのxの和集合として表すことができます。つまり、定義からの条件が満たされ、Jがトポロジベースです。

条件の必要性は、Jがベースであれば、条件が真であることを意味します。 ただし、Jがベースの場合、開いているセットはすべて、Jからのセットの和集合として表現でき、そこからすぐに条件が続きます。



この定理は、サブセットの特定のシステムがベースであるかどうかを判断するアルゴリズムをより適切にプログラムするのに役立ちますが、条件の最初の数量詞が汎用数量詞であるのはここでは多少困難です。



そしてこれは、アルゴリズムを設計するとき、我々は反対から行かなければならないことを意味します。まず、システムがベースであると考え、反対のステートメントが真である場合、ソリューションを変更します。



数学では、このような条件の処理は次のとおりです。普遍的量指定子は実存量指定子に置き換えられ、逆もまた同様です。述語は逆に置き換えられます。



したがって、自然言語で書かれたアルゴリズムは次のように聞こえます。



1.メソッドの引数がトポロジのベースであると考えます。

2. オープンセットGと、xを含むメソッド引数からのセットGがGのサブセットではないGからのポイントxが存在する場合、FALSEを返し、そうでない場合はTRUEを返します。

public boolean isBase(FSet<FSet<Integer>> mbbase) { boolean flag = true; Node t = first; while (t != null && flag) { FSet<Integer> open = t.elem; FSet<Integer>.Node openNode = open.first; boolean isSubsetOpen = true; while (openNode != null && isSubsetOpen) { Integer x = openNode.elem; Node baseNode = mbbase.first; boolean forall = true; while (baseNode != null && forall) { if (baseNode.elem.contains(x) && baseNode.elem.subset(open)) forall = false; baseNode = baseNode.next; } if (forall) { flag = false; isSubsetOpen = false; } openNode = openNode.next; } t = t.next; } return flag; }
      
      







ベースの小さなクラスを作成します

 public class Base extends FSet<FSet<Integer>>{ public Base() { super(); } }
      
      







これは、基本トポロジコンストラクターを記述できるようにするために必要です。



FSet <FSet>を記述したばかりの場合、コンパイラから次のエラーが発生します。FSetパラメーターを持つコンストラクターが既にあるため、メソッドの消去は別のメソッドと同じです。 これはJava言語の機能です。



また、システムをトポロジに追加するのは非常に簡単で、プライベートメソッドをいくつか追加するだけです。 しかし、前に、単純なパズル。



問題1. Xをカーディナリティーnのセットとし、mをこのセットで定義された離散トポロジーとします。 トポロジベースを見つけます。



 private void uniteAll() { for (Node p = first; p != null; p = p.next) { for (Node q = first; q != null; q = q.next) add(p.elem.union(q.elem)); } } private void intersectAll() { for (Node p = first; p != null; p = p.next) { for (Node q = first; q != null; q = q.next) add(p.elem.intersection(q.elem)); } } public Topology(Base base) { for (Node p = base.first; p != null; p = p.next) add(p.elem); boolean isTpl = isTopology(); while (!isTpl) { uniteAll(); intersectAll(); isTpl = isTopology(); } }
      
      







問題への答え
トポロジベースは、すべてのシングルトンサブセットによって形成されます:{{1}、{2}、...、{n}}





一般的なトポロジについて説明する場合、トポロジ空間のかなり重要なクラスは、可算ベースを持つ空間です。 それらは、可算性の第二の公理を持つ空間とも呼ばれます。



有限の位相空間、つまり、それらをプログラムすることは、可算性の第二の公理を持つすべての空間のサブセットを形成することは容易にわかります。



しかし、これがカウントの2番目の公理である場合は、最初のカウントがあるはずですよね? ここで対処し、連続マッピングに突入します。



近隣システムの定義





定義2.トポロジカル空間Xの点xには、xを含む任意のオープンセットGにGに含まれる近傍O n(x)が存在するように、可算の近傍システム{O n (x)}のみが存在するとします。このシステムは、xの近傍の定義システムと呼ばれます。



定義3.各ポイントxに近傍の定義システムが存在する場合、空間は可算性の最初の公理を満たします。



この定義は、現在考慮されている最終的なトポロジよりも一般的なトポロジのフレームワークにおいて大きな関心を集めています。そのようなシステムは、特定のポイントのすべての近傍のシステムとして単純に解釈できるためです。 ただし、ここでも興味深い質問を1つ提起できます。



問題3.ある点の近傍の決定システムが、特定の点のすべての近傍のシステム内に厳密に存在する有限位相空間の例を示します。



 public boolean isFundamentalSystem(int x, ArrayList<FSet<Integer>> neighbourhoods) { boolean flag = true; Node t = first; while (t != null && flag) { FSet<Integer> open = t.elem; if (open.contains(x)) { int i = 0; boolean isSubset = false; while (i < neighbourhoods.size() && !isSubset) { if (neighbourhoods.get(i).subset(open)) isSubset = true; i++; } if (!isSubset) flag = false; } t = t.next; } return flag; }
      
      







問題への答え
X = {1,2,3,4}、m = {Ø、{1}、{3}、{2,4}、{1,3}、{1,2,4}、{2,3 、4}、{1,2,3,4}}。



システム{{3}}は、ポイント3の近傍の決定システムです。





連続マッピング



それで、今日の講義で最も興味深い場所に来ました。 連続マッピングへ。



基本的に、Javaにはすでにマッピング用のインターフェースがあります: Mapperですが、2つのメソッドが含まれているため、機能的なインターフェースとして使用できません。



私はJava 8を使用していますが、インターフェースなどを実装するクラスを作成するよりも便利な方法でマッピングを作成したいと思います。 開発環境がJava 8をサポートしていない場合、メソッドコードは引き続き機能しますが、呼び出しコードを変更する必要があります。



そこで、次のシンプルなインターフェースを作成します

 @FunctionalInterface public interface Mapping { Integer f(Integer x); }
      
      







上記の要約はオプションですが、別の抽象メソッドをインターフェイスに追加するとエラーが発生します。



ここで、問題の数学的側面に目を向け、点の近傍の観点から連続性の概念を示します。



定義4. (X、1)および(Y、2)を2つのトポロジ空間とする。 空間Xの空間Yへのマッピングfは、点y 0 = f(x 0 )の近傍U y 0に対して、点x 0の近傍V x 0があり、 f(V x 0 )がU内に含まれる場合、点x 0で連続と呼ばれますy 0 。 マッピングfは、すべての点で連続している場合、連続と呼ばれます。



これをロシア語に翻訳すると、ある点での連続性の定義は次のようになります: ある特定の点の画像の近傍に関係なく、この点の近傍には、この近傍の画像が点の画像の近傍内にあります。



ちょっと待ってください...分析の始まりを思い出すと、コーシー関数の連続性の定義が正確に得られますが、唯一の違いは、イプシロン-デルタ言語を離れ、近接性を決定する際に半順序関係を置き換えたことです。



しかし、ここではすべてがそれほど単純ではありません。 したがって、私はあなたに面白いパズルを提供します。

問題4. Xをベース{{1}、{2,4}、{1,2,3,4}}のトポロジー空間、Yを{{1}、{3}、{1,2のベース3.4}}。

規則f(x)= xによって機能するXからYへのアイデンティティマップfを考えます。 連続ですか? もしそうなら、それを証明してください。 そうでない場合は、どの時点で中断するかを示します。

同じ質問がYからXへのマッピングfにも適用され、ルールf(x)= xによって動作します。



 public boolean isContinuous(Mapping f, Integer x0, Topology Y) { boolean flag = true; int y0 = ff(x0); ArrayList<FSet<Integer>> Uy0 = Y.getNeighbourhoods(y0); ArrayList<FSet<Integer>> Vx0 = getNeighbourhoods(x0); int i = 0; while (i < Uy0.size() && flag) { int j = 0; boolean subset = false; while (j < Vx0.size() && !subset) { FSet<Integer> image = new FSet<>(); for (FSet<Integer>.Node p = Vx0.get(j).first; p != null; p = p.next) { image.add(ff(p.elem)); } if (image.subset(Uy0.get(i))) subset = true; j++; } if (!subset) flag = false; i++; } return flag; }
      
      







今回は、実行コードを提供します。



 package generaltopology; import java.util.*; public class FSetDemo { public static void main(String[] args) { Base baseX = new Base(); FSet<Integer> x = new FSet<>(); x.add(1); x.add(2); x.add(3); x.add(4); FSet<Integer> a = new FSet<>(); a.add(1); FSet<Integer> b = new FSet<>(); b.add(2); b.add(4); FSet<Integer> c = new FSet<>(); c.add(3); baseX.add(a); baseX.add(b); baseX.add(x); Base baseY = new Base(); baseY.add(a); baseY.add(c); baseY.add(x); Topology tau = new Topology(baseX); System.out.println(tau); Topology tau2 = new Topology(baseY); System.out.println(tau2); for (int i = 1; i <= 4; i++) { System.out.print(tau.isContinuous(u -> u, i, tau2) + " "); } System.out.println(); for (int i = 1; i <= 4; i++) { System.out.print(tau2.isContinuous(u -> u, i, tau) + " "); } } }
      
      







ご覧のとおり、ラムダ式の使用は、1つのスペースを別のスペースに非常に正確にマッピングするためのルールを指定できるため、ここでは非常に正当化されます。



そして、私が約束したように、答えは次のとおりです。



答え
どちらの表示も連続していません。

XからYへのマップは、ポイント3で不連続です。

YからXへのマッピングは、ポイント2および4で不連続です。





おわりに

今日、トポロジベースの重要な概念に精通し、それに基づいて空間のトポロジ全体を構築することを学びました。 可算性の公理と、有限トポロジーが可算性の両方の公理を満たすという事実について学びました。



次のパートでは、トポロジ空間のマッピングについてもう少し話し、オープンマッピングとクローズドマッピングの概念を紹介し、マッピングの連続性の兆候を示します。これは、定義で述べられているものよりも簡単で、新しいトピックである分離可能性の公理に進みます。



この一連の記事の最後に、有限トポロジーのアプリケーションの実用的な例を示すつもりです。 ご清聴ありがとうございました!



All Articles