石橋秀仁(zerobase)書き散らす

まじめなブログは別にあります→ja.ishibashihideto.net

"Identity" と "Identifier" を混同して "ID" と言わないように

一般的に使われる "ID" は "identifier" (識別子)の意味であって、 "identity" (同一性)の意味ではない。ぜんぜん違う。

Conflict

システムの実装上、 ID が衝突 (conflict) することはありえる。複数の別々のものに同じ ID を振ってしまう問題を、 ID の「衝突」という。

「本来異なるもの」を「同一である」と誤認することが起こりうる。それは「 ID が衝突した」という事態に気付かずにシステムを運用した場合に生じうる。

(それ以外にも、同定 (identification) のプロセスにおけるミスやバグなどといった理由も考えられるが、本題ではない)

Equivalency

ID の衝突は、存在 (existence) の「重複」などという意味ではない。そもそも存在は「重複」しない。「同じものが二つ存在する」ということはない。

二つ以上存在してよいのは、「同じ意味のもの」や「等価なもの」だ。それらは存在としては別々だが、意味や価値が「同じ」なのだ。

「同じチョコレート片」が二つあるように見えても、それは製造規格が同じなだけであり、存在として「同じ」なわけではない。これはデータでも同様で、記憶装置のなかで一定の位置を占めるデータには、まったく同じ内容の複製であっても、存在としては別なのだ。

プログラマーなら「参照」と「値」の違いで理解できるだろう。このような「同一性」 (identity) と「同値性」 (equivalency) の違いは、具体的にはプログラミング言語での同一性比較 (==) と同値性比較 (equals()) の違いに等しい。

Uniqueness

ID の衝突を避けるためには、 ID を与えるべき存在ごとに一意 (unique) の ID を発行すればよい。つまり ID の一意性 (uniqueness) を担保すればよい。そのためには、

  • 全発行済 ID を一元管理し、衝突しない新規 ID を生成するか、または、
  • 衝突する確率がほぼゼロの、十分なビット数の乱数値として ID を生成する

という方法が用いられる。

(後者の実例として、 UUID (Universally Unique Identifier) の実装としての GUID (Globally Unique Identifier) が挙げられる)

一意性を保証するならば、 ID は変更可能である。

ID の変更は、存在論的 (ontological) な同一性に影響しない。 ID は、ものの属性にすぎない。属性値を変更しても、そのものの同一性には影響しない。

ただし、 ID を変更する際には、古い ID は廃番にしたほうがよい。なぜなら、その ID を別の存在に付与するような使い回しによって、将来の衝突のリスクが生じるからである。

または、 ID のスコープとライフサイクルによっては、 ID を使い回しても問題がない。例えば、ウェブページの DOM (Document Object Model) の id は、リロード前後のウェブページで重複するし、異なるウェブページ間でも重複する。しかし、衝突問題にはならない。スコープ内やライフサイクル内では衝突していないからである。

Identifier

リレーショナル・データベースで、あらゆるテーブルのレコードに、シリアルナンバーの ID を付番することは、アンチ・パターンとされている(ID Required Antipattern)。

ID の型 (type) を整数値に限定してしまうことは好ましくない。例えば、 ISBN (International Standard Book Number) は広く使われている ID だ。ISBN の値は 'X' という文字を含む可能性がある。したがって、整数ではなく、文字列である。

Identity

同一性とは、ある存在(もの)について、

  • 異なる時点でも「同じもの」と識別できることであり、また、
  • ある時点において、別のものとは別である、と識別できること

を意味する。

簡単に言えば、「二つのものが、同一のものであるか否か」ということだ。

「あの人は去年とは別人だ」という言葉は比喩で用いられる。

人の存在論的な同一性は失われない。

しかし、認識上 (cognitive) の同一性は失われることがある。

記憶喪失により、自己認識上の同一性は失われる。

変装により、他人による認識上の同一性は失われる。

どちらの場合も、認識上の同一性は失われているが、存在論的な同一性は保たれている。

Fragility

存在論的な同一性は失われることがある。

ひとかけらのチョコレートを食べる。消化されたチョコレートのかけらは、同一性を失う。認識上も、存在論上も。ただし、チョコレートを構成していた分子の単位では、存在論上の同一性は保たれている。

(化学反応により分子構造が変われば、分子の同一性は失われる)

もし、個々のチョコレート片を追跡するシステムがあるとして、「食べられたチョコレート」はどのように扱われるのだろうか。それをシステムのスコープ外としているのが現代だが、将来は分からない。分子単位のトレーサビリティが実現しているかもしれないのだ。

Ontology

心を丸ごとデータ化できて、コンピューター上で「生きる」ことができるようになるとしよう。そういう人間(?)を、仮に「幻体」と呼ぶことにしよう。

幻体の本人が、「体はないけれど、たしかに以前の自分と同じ自分である」と思えるならば、自己認識上の同一性がある。その幻体とのやり取りを通じて、他者も「この人は、肉体を持つあの人と同じ人である」と思うなら、他人による認識上の同一性もある。

つまり、本人にとっても、他人にとっても同一性を認めることができる。「以前と同じ人」というわけだ。ならば、この人には存在論的な同一性を認めてよいだろう。このような立場の情報哲学 (Philosophy of Information) で知られるのがルチアーノ・フロリディだ。

Information: A Very Short Introduction (Very Short Introductions)

Information: A Very Short Introduction (Very Short Introductions)

このようなテーマを扱った SF 作品もある。キー・テクノロジーは「量子コンピューター」だ。

ゼーガペイン FILE.01 [DVD]

ゼーガペイン FILE.01 [DVD]

クォンタム・ファミリーズ

クォンタム・ファミリーズ

Binary Code

ソフトウェアで概念を処理するためには、概念の輪郭を明確に定義し、境界線を引かなけれならない。簡単に言うと、システムの「内」と「外」を分ける厳密な基準を作ることだ。これはニクラス・ルーマンが社会システム理論で「二値コード化」と呼んでいる行いに等しい。

コンピューターが社会に浸透していく「情報化」は、人間の世界認識に影響をもたらす。概念の境界線が明確になることで、曖昧さが排除される。これまで曖昧な基準により円滑に回っていた人間社会に、異なるルールが持ち込まれることになる。そこに軋轢が生じる。

(続きは:受動的な「ソフトウェアが作り替える我々の社会」から、能動的な「我々がソフトウェアで作り替える社会」へ

Biometrics

ID は人為的に付番するものだけではない。身体認証技術は、例えば網膜パターンにより人を同定する。この場合、網膜パターンが、「人物」という存在の ID だ。

ID の同定は、認識上の問題だ。存在論的な同一性の誤認が生じうる。例えば、眼球移植手術によって「人物」は ID を変更できる。認証の際に「人物」が提示した ID と、システムが登録している ID が一致すれば、認証をパスすることができる。『マイノリティ・リポート』という SF 映画には、そのような「 ID 偽装」のシーンが描かれている。

マイノリティ・リポート 特別編 [DVD]

マイノリティ・リポート 特別編 [DVD]