fc2ブログ

中の人の徒然草424 連休に中に考えた事の続き「集合と何かについて考えた」

 3連休に考えた事の続きです。集合論の矛盾と言われているもの(カントール曰く課題)は、集合とは何かについて厳密に定義していないから発生するものだと思います。私達技術者は、集合オブジェクトを定義する場合、集合オブジェクトは何かについてよく考えます。また、「属する」という言葉の意味もよく考えます。そうしないと実装できません。
 そうした結果、集合オブジェクトが直ぐに思い浮かびます。

class Set
{
    private Func< object, bool > m_contained;

    //集合と元(要素)の対応を指定する
    public Set( Func< object, bool > isFunc )
    {
        this.m_contained = isFunc;
    }

    //指定した元が集合に属するか判定する
    public bool Contained( object element ) 
        { return this.m_contained( element ); }

}

つまり私が考えたのは、集合とは元の対応の事ではないかと言う事です。個々の元は、規則も有用な利用法もありません。しかし、対応を持たせるとそこに有用性が見いだせます。集合とは元の対応を定めることにより、その性質を分析したり、目的に応じて有効に使用したりするものではないでしょうか?
 こうした考えを持てば、集合演算の正体が自然と分かります。例えば和演算は・・・

public Set Join( Set otherSet )
{
    Func< object, bool > f = ( x ) => 
      this.Contained( x ) || otherSet.Contained( x );
    return new Set( f );
}

ようするに、{ f( x ) 論理演算 g( x ) }の合成関数〈対応/写像〉で集合は定義できると思うのです。そう考えれば、部分集合や、集合の集合の正体についても厳密に分かります。また、集合を合成関数で定義できると言う事は、集合論が自然と広がる事も意味します。
 研究者の習性で、私は常にこうした事を考える習慣があります。それに、メタ集合(集合の集合)は仕事でよく遭遇します。例えば、社員オブジェクトが部下を表す社員オブジェクトを持つ場合があります。そうした自己を持つオブジェクトは、自己参照の無限構造を持ちます。しかし数学的に考えると難しい無限構造も、情報技術で考えるとよくあるオブジェクトです。ですから、集合論の矛盾と言われてもあまりピンときません。ごく普通のオブジェクトですから、それをもって集合論の矛盾になるとは到底思えません。ただ人間が記号の限界で想像出来ないだけだと思います。きっとカントールは、だから矛盾とは思わず、上手い方法があると考えたのでしょう。おそらくカントールは、無限を扱うための新しい記号を定義すれば、集合論が本当の意味で活用できると考えたのだと思います。
 ちなみに、私が思うにメタ集合(集合の集合)の正体は、集合を表す元と、集合でないものを表す元を持つ集合だと思います。従ってメタ集合の冪集合とは、集合でないものに集合を組とした集合なのではないでしょうか?だから別に冪集合の濃度が大きくても不思議だと思いません。集合の集合と言う言葉に惑わされているだけであり、集合と集合でないものを合成関数で定義した集合だと思うと別に不思議なものではありません。
 他にも説明がつきます。順序数の集合を元として持つ順序集合も、集合オブジェクトが集合オブジェクトを持っているだけだから、行列で表現できると思います。数学は専門でないから、矛盾がよく分かりません。実務的に困らなくても、数学的には困るのかな?でも、実務で困らないから私は気にしません。
 なにはともあれ、こうした思考遊戯は面白いです。秋の夜長に数学の本を読むのは如何でしょうか?きっと楽しい時間を過ごせると思います。お受験の死んだ数学は面白くありませんが、本当の数学は面白いです。
スポンサーサイト



テーマ : 情報処理技術
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

インドリ

Author:インドリ
みなさん、はじめまして、
コンニチハ。

ボクは、無限の夢(infinity dream)を持つネタ好きな虹色の鳥インドリ(in dre)です。
色々な情報処理技術を啄ばむから楽しみにしてね。

http://twitter.com/indori
は別人による嫌がらせ行為です。
私とは関係ないので注意して下さい。
次はなりすましブログなどをするかもしれませんが、ここ以外でブログをするつもりがないので、ここ以外にインドリのブログがあったとしても無視してください。


何度言っても分からない人がいるので、ここにコメント欄へ書き込むときの注意事項を書きます。


一、社会人としてのマナーをわきまえましょう。
一、妄想に基づく書き込みを止めてください。
一、暴言の類は書かないで下さい。
一、某誹謗中傷サイトの書き込みは彼らの妄想に基づく書き込みですから無視して、ここへ書き込まないで下さい。
一、コメント書く前に他のコメントよく読んでから行って下さい。
一、言いがかかり等の行為を禁止します。
一、その他常識的に考えて迷惑なコメントはしないで下さい。


以上のルールを守れない人のコメントは削除します。



利用上の注意
ここに紹介してある文章およびプログラムコードは正確であるように心がけておりますが、内容を保証するものではありません。当サイトの内容によって生じた損害については、一切の責任を負いませんので御了承ください。


執筆したCodeZineの記事


【VB.NETで仮想CPUを作ろう】

  1. VB.NETで仮想CPUを作ろう
  2. レジスタの実装
  3. 仮想CPUのGUI化
  4. テストドライバの改良
  5. CPUの基礎動作の実装
  6. MOV命令の実装
  7. ADD命令実装
  8. SUB命令実装
  9. INC命令&DEC命令の実装と命令長
  10. MLU命令の実装とModR/Mについて
  11. DIV命令の実装とイベント設計について
  12. 機械語駆動式 関数電卓を作ろう!
  13. 機械語駆動式 関数電卓を作ろう! 解答編(前半)
  14. 機械語駆動式 関数電卓を作ろう! 解答編(後半)


【仮想ネットワーク実装でTCP/IPを学ぼう】
  1. TCP/IPの基礎と勘所
  2. ネットワークアクセス層の勘所
  3. インターネット層の勘所
  4. トランスポート層の勘所
  5. アプリケーション層の勘所
  6. セキュリティの基礎と仮想ネットワークの仕様
  7. GDI+と独自プロトコルの定義



【並列化】
インテル Parallel Studioを使って並列化プログラミングを試してみた
並列プログラミングの効率的なデバッグを実現する「Parallel Inspector」


【TBBシリーズ】
  1. インテル スレッディング・ビルディング・ブロックの概要
  2. インテルTBBから学ぶループの並列化
  3. スレッドセーフとインテルTBBのコンテナ
  4. インテルTBBのスレッドクラス


【OpenMPシリーズ】
  1. OpenMPの基礎構文
  2. OpenMPの実行時ライブラリと並列ループ
  3. OpenMPのメモリモデルとfork- joinモデル

最近の記事
最近のコメント
月別アーカイブ
カテゴリ
Ada (9)
COBOL (5)
C (9)
C++ (11)
C# (370)
D (25)
Java (8)
Perl (1)
Ruby (14)
PHP (2)
Boo (2)
Cobra (2)
LISP (6)
F# (33)
HTML (0)
XHTML (0)
CSS (0)
XML (0)
XSLT (0)
Scala (4)
WPF (0)
WF (2)
WCF (0)
LINQ (4)
MONO (5)
Linux (0)
MySQL (0)
ブログ内検索
リンク
最近のトラックバック
RSSフィード
ブロとも申請フォーム

この人とブロともになる

QRコード
FC2カウンター