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

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

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

参照用 記事

オブジェクト系電波文の傾向と対策

2006-02-03のコメント欄において:

nak2k>ここらへん理解した上で色々と議論をしてみたいのですけど、
これは理解できないでしょうよ。
このページだけのスポット読みで、前後や関連部分は一切見てないからアレだけど、これは*電波文にしかみえない*けど。

なんて書いてしまいました。このなかの「ここらへん」「これ」「このページ」とは、nak2kさんのご教示による:

さて、nak2kさんはobject氏の発言に何か感じるところがあったのでしょうから、「電波文にしかみえない」と片付けてしまうのは(nak2kさんにも、objectさんにも)失礼に過ぎます。で、このページを猛烈に好意的に読み返してみました。その結果、一瞥<いちべつ>するに電波系だけど、背後にそれなりの意図があるようにも思えます。ただし、用語法や(数式風の)記号法があまりにも不適切なので、解読作業なしに直接理解するのは至難の業でしょう。

で、object氏の意図を推測(あくまで推測)して、解読・翻訳を試みます。とはいえ、上記ページだけを対象にします。文脈を理解してないとか、局所的な指摘だとかの批判は覚悟のうえ。僕も、全部の議論をたどるほどには酔狂じゃない。あしからず。

※ 雑談・漫談だけを読みたいなら、「もう例題解釈は終わり」に飛ぶべし。

例題1:ドメイン、コドメインの解釈

オブジェクト指向で、最も重要なのは
「継承」
だと思います。

現在、継承を
「ソフトウエア空間の実装レベル」
だけで判断する考え方があります。
しかし、「最低限」重要なのは、
ドメイン空間で類別・商空間を創造」(->ドメイン分析)
し、それらをベースにして
「コドメイン空間で新たな積空間を構築」(->ソフトウエア設計)
するという所にあるのではないでしょうか?

ウーンと。「空間」、「ドメイン」、「コドメイン」て言葉が出てますね。なんらかの写像を想定しているのでしょう。写像f:A→B があるとき、Aをドメイン、Bをコドメインと言うのは間違いではありません。が、カタカナ語ドメイン」はいろんな意味で使われるので、もし写像の話をするなら、訳語(和製漢語)「定義域」「値域」を使ったほうがいいかと。もっとも、値域は、fの象(f(A) = {y∈B | ∃x. f(x) = y })の意味でも使われるので、コドメイン(余域)を使うのは一種の見識かもしれません。(後の文言を見ると、単に写像の定義域・値域ではないらしいのだけど…)

ドメイン空間で類別・商空間を創造」ってのは、まー分からなくもない。「商」と言っているので、ある写像の定義域(おそらく、それがドメイン空間)に同値関係があるのでしょう。それをもとに商(同値類の集合)を作るのは、それ自体はありきたりの構成法です。

しかし、同値関係から商集合を作ってしまうと、ここで話題の「継承」からは外れてしまいますよ。継承が何を意図しているかわからないのだけど、多重継承でも単純継承でも、構造的には束(lattice)、そうでなくても(部分)順序が必要です。やれ「哺乳類だ犬だダックスフンドだ」とやる(これは僕が毛嫌いしていること)には、階層的分類が必要でしょう。商集合構成だけではいかんともしがたい

ここでまた好意的に拡大解釈してみます。同値関係全体の集合に“分類の精粗”により順序が入ります。例えば、2つのイコール「=」と「='」があって、「x = y ならば x =' y」のとき、「=」が強い/きびしいイコールで、「='」はそれより弱い/ゆるいイコールです。一番ゆるいのは、「人類みな兄弟」みたいになんでもイコールにしちゃうやつ。

ンー、やっぱり、でもー、… 同値関係全体の集合に入る順序関係を継承と見なすのは無理があるなー。個体(individual, atom)の集合Uを固定して、Uのベキ集合Pow(U)の束構造を使うほうが素直でしょう。とはいっても、Pow(U)を使う階層的分類の定式化は素直なだけで、役立たずだとは注意しておきます。

それで、結局なんだかわからないまま次のフレーズへ。「コドメイン空間で新たな積空間を構築」 -- これはジェンジェン解釈できないなー。「積空間」の積ってのは直積なのかな? 「商」と「積」が対<つい>になることを意識しているみたいだけど、圏論的な双対性からいうと、「商」と「部分」が双対。これは、epimorphismとmonomorphismの双対から来るんだよね。(直積の双対なら直和、直積の随伴はベキ。)

死ぬほど好意的に、言いたいことのココロを探ると:

  1. 現実世界またはその抽象モデルがあって、
  2. 別にソフトウェアの世界があって、
  3. その両方に適当な構造(例えば束構造)が入っていて、
  4. 「現実世界→ソフトウェア」という対応が構造を保つ写像によって定式化されるべき。

ってなところ?

例題2:準同型の解釈


それから、私はこのスレの中で
「準同型の重要性」
を少し強調しました。

これは、例えば
ドメイン、コドメインでの継承関係を共に「*」で表すと


f(a * b) = f(a) * f(b)
= u * v
#f(a) = u、f(b) = v
#a、b∈ドメイン、u、v∈コドメイン ∈:属する
#意味:a * b => u * v
#簡単に言えば、継承関係が保証されている
となります。

ここは、数学風の記法の使い方が圧倒的にまずい。例題1で解釈したように、構造を保つ写像を想定しているようだから、それを「準同型」と呼ぶのは妥当です。が、ここでは、「継承関係を保つ」って意味での準同型ですよね。「継承関係とはなんぞや」は棚上げするにしても、“関係により定義される構造の準同型”だったら、次のような書き方をすべき:

f:A→Bとして、a, b∈A、a≦b ならば f(a)≦f(b)

これは、順序集合のあいだの単調写像の定義に見えるけど、それはたまたま「≦」という記号を使ったからで、「R(a, b) ならば R'(f(a), f(b))」とか書いても同じ(いや、より正確)です。まー、継承関係を表す記号なら「≦」ってけっこう適切では?(Rubyの構文とか思い出してね)

「f(a * b) = f(a) * f(b)」は、たぶん群とかモノイド(単位半群)の準同型の定義をコピーしたんだろうけど、“演算で定義される系”と“関係で定義される系”では事情がちょっと違う。形式体系の指標を使うとか、可換図式を使えば、ある程度は統一的に準同型を定義できますがね。

「#意味:a * b => u * v」と書いてあるところが、「*」を関係記号だと解釈すると、いちおうは“あっている”のが救い、つうか混乱しているというか……

結局、ここも、例題1の解釈で示した:

  • 「現実世界→ソフトウェア」という対応が構造を保つ写像によって定式化されるべき。

を言いたいのココロ、みたいよ。

もう例題解釈は終わり

ヒエエエエーー、つっかれたぁ。もう、ここまででカンベンしてくれ。解読作業って、予想外に疲れるわ。お勧めできないな、こんなことは(やってみた人の実感、bonotakeさん正しい)。

でも、もともと僕は電波文が好きなんですよね。湊さんという電波界の有名人がいらっしゃいまして、「トリコじかけの明け暮れ」とかの電波チラシを蒔いてます。彼女の“作品”はもう、プラチナペーパーでしょう(ちょっと大げさ)。かつて僕は、近所でホンモノの湊さん作・電波チラシを入手しました。が、ねだられて人にあげてしまった。うーん、なんか惜しい。

ナイジェリアだかアルジェリアだか、海外から釣りファクスが届いたこともあります。おおよそ「マネーロンダリングのために、貴殿の口座を使わせてくれまいか。入金額の1割を謝礼とする。とりあえず、1億円ほど入金したい。」てな内容。おもしろがってしばらく相手をして、経過を記録しました。

なぜか署名に「Dr. ×××」なんて書いてあるので、「おまえ、何のドクタあるか? thesisへのポインタ示すよろし」みたいな感じの問い合わせをしたら、ソレッキリになってしまいました。その記録も、引っ越しのときにどっかいっちゃった。残念。