Pointers memory personal identity

ポインタとメモリ:個人のアイデンティティの連続性

シリーズ:プログラマーの哲学的思索 #05/11 | 読了時間:25〜30分 | 概念:個人の同一性(Personal Identity)— 記憶、連続性、そして自己

著者:Wina @ Code & Cogito


もはや自分ではないgit blame

金曜日の午後、同僚がSlackにコードの一節を投げ込みました。

「これ誰が書いたの? ジュニアの初日みたいなんだけど。」

git blame を開き、その行の作者を確認しました。

自分でした。18ヶ月前の自分。

命名規則は混沌とし、エラーハンドリングはなく、ビジネスロジックとUIロジックが混然一体——確かに自分です。少なくともgitにはそう記録されています。

しかしそのコードを見つめながら、奇妙な疎外感を覚えました。なぜそう書いたのか覚えていない。当時の思考プロセスが理解できない。今日書き直すなら、まったく別のものを書くでしょう。

このコードを書いた人は、まだ「自分」なのだろうか?

名前は同じ。メールアドレスも同じ。SSH鍵も同じ。しかし思考法、技術的判断、価値観さえも変わっています。18ヶ月前の自分と今の自分を一緒にコードレビューさせたら、おそらくアーキテクチャ設計で口論になるでしょう。

ふと気づきました。これは単なる技術的成長の話ではない。哲学の問い——人類が二千年にわたって考え続けてきた問いなのだ、と。

時間を超えて一人の人間を「同じ人」たらしめるものは何か?

身体の細胞は約7年ですべて入れ替わります。信念は成長とともに絶えず修正されます。記憶は想起のたびにひそかに書き換えられます。二十歳のあなたと四十歳のあなたが「同じ人」だと信じる根拠は、一体何なのでしょうか。

プログラマーとして、あなたは実はこの問題を考えるための装備を人一倍持っています。なぜなら、アイデンティティの核心的なメカニズムを毎日扱っているからです。ポインタ、参照、コピー、ガベージコレクション。

これは「プログラマーの哲学的思索」シリーズの第五回です。メモリ管理の言語で、個人のアイデンティティという千年の謎を解きほぐしましょう。

Let’s debug the self.


背景:プログラムの世界のアイデンティティ問題

Object ID:あなたは「メモリアドレス」なのか?

Pythonでは、すべてのオブジェクトに一意の id() があります。そのメモリアドレスです。内容が完全に同一の2つのオブジェクトでも、異なるメモリ位置を占めていれば、それらは別のオブジェクトです。

a = {"name": "Wina", "beliefs": ["open source", "clean code"]}
b = {"name": "Wina", "beliefs": ["open source", "clean code"]}
print(a == b)       # True —— 内容は同じ
print(a is b)       # False —— 同一のオブジェクトではない

== が問うのは「同じに見えるか?」(内容の等価性)。is が問うのは「同一のものか?」(アイデンティティの同一性)。

この区別はシンプルに見えますが、哲学における根本的な分岐に対応しています。

数的同一性(numerical identity)——文字通り同一の実体。あなたはあなたであり、あなたの複製品ではない。a is a が常に True であるのと同じ。

質的同一性(qualitative identity)——まったく同一の属性を持つこと。同じ金型から打ち出された2枚のコインは質的には同一ですが、数的には2枚の異なるコインです。a == bTrue でも a is bFalse であるのと同じ。

日常生活では、この2種類の同一性の間を絶えず行き来しています。「十年前の自分と同じ自分だ」と言うとき——数的同一性を使っています。「もう完全に別人だ」と言うとき——質的同一性の否定を使っています。

しかし問題は、質的属性がすべて変わったとき、数的同一性はまだ成立するのか?

参照と実体:あなたはポインタか、ポインタが指すものか?

プログラムでは、変数名は単なる参照——あるメモリ位置を指すラベルです。

me = Person("Wina")  # 'me' は参照、Person(...) は実体

あなたの名前はこの変数名に似ています。「あなた」と呼ばれる実体を指す、社会的な参照です。しかし参照は再代入でき、実体も変更できます。

さらに混乱するのは、複数の参照が同じ実体を指せるということです。

developer = me
writer = me
friend = me
# 3つの役割、1人の人間

同僚の目にはエンジニア、家族の目には子ども、友人の目にはまた別の人格。これらの「参照」は同じ実体を指していますが、各参照が見る「インターフェース」は異なります。

では、すべての参照が異なる面を見ているとき、「本当のあなた」はどこにいるのでしょうか。参照の交集合なのか。それとも参照の向こう側にある、いかなる単一の視点でも完全に捕捉できないものなのか。

哲学者のアイデンティティをめぐる戦場

個人の同一性について、哲学史には3つの主要な理論的伝統があります。

魂の理論——プラトンとデカルトの立場。あなたがあなたであるのは、不変の魂を持つからです。身体は老い、記憶は消え、性格は変わりうるが、魂は常に同一。これはプログラムにおける永続的な id() のようなもの——オブジェクトの属性がどう変わろうと、idは変わらない。

身体の理論——アリストテレスの方向。あなたがあなたであるのは、身体が連続した物理的実体だからです。細胞が入れ替わっても、身体の全体的な構造と物理的連続性は途切れていない。これはメモリ上の同じアドレスのようなもの——中のデータが上書きされても、アドレス自体は連続的。

心理的連続性の理論——ロックの革命的主張。あなたがあなたであるのは、魂や身体のためではなく、記憶が過去のあなたと現在のあなたをつないでいるからです。今日のあなたは昨日の自分を覚えており、昨日の自分は一昨日の自分を覚えている。この記憶のチェーンがアイデンティティを構成します。

ロックの理論はプログラマーに最も共鳴するでしょう。最もデータ構造に近いからです。アイデンティティは固定の値ではなく、連結リスト——各ノードが前の状態と次の状態をリンクしています。

しかしロックの理論にも深刻な穴があります。スコットランドの哲学者リード(Thomas Reid)が有名な「勇敢な将校」パラドックスを提示しました。老齢の将軍は中年時代に勲章を授与されたことを覚えており、中年の彼はリンゴを盗んで鞭打たれた少年時代を覚えている。しかし老齢の将軍はリンゴ盗みの記憶を持っていない。ロックの理論に従えば、将軍と将校は同一人物であり、将校と少年は同一人物であるが、将軍と少年は同一人物ではない——同一性の推移律が破れてしまいます。

記憶は重要な手がかりですが、完全な基盤ではないのです。


深層分析:コピーからガベージコレクションまで

一、シャローコピー vs. ディープコピー:コピーされたあなたはあなたか?

アイデンティティの問いを極限まで推し進めてみましょう。

もしある日、技術が脳を完全にスキャンできるようになったら——すべてのニューロンの接続、すべての記憶のエンコーディング、すべての感情の化学パターン——そしてそれを別の身体に正確に再構築できたら。

この複製は目覚めたとき、あなたのすべての記憶、すべての性格特性、すべての習慣と嗜好を持っています。自分こそがあなただと確信するでしょう。

二人は同一人物でしょうか?

プログラムの答えは明確です。

import copy
original = {"memories": [1, 2, 3], "personality": {"openness": 0.8}}
clone = copy.deepcopy(original)
print(original == clone)   # True —— 内容は完全に同一
print(original is clone)   # False —— 同一のオブジェクトではない

ディープコピーは、内容が完全に同一だが独立して存在する新しい実体を生成します。その瞬間から、両者は独立に進化します。オリジナルの記憶が変更されても、コピーには影響しません。

しかしシャローコピーの場合は:

shallow = copy.copy(original)
# 外層は新しいが、内層のlistやdictは共有されている
original["memories"].append(4)
print(shallow["memories"])  # [1, 2, 3, 4] —— 影響を受けている

シャローコピーの2つの実体は完全には独立していません。深層の構造を共有しています。一方の深層部分を変更すると、もう一方にも影響します。

人間のアイデンティティにも類似の「シャローコピー」的な側面があります。兄弟姉妹は遺伝子、文化的背景、子供時代の記憶を共有しています。同僚は専門用語、仕事のコンテキスト、チームの経験を共有しています。これらの共有された「参照」により、アイデンティティは完全には独立していません。一方の変化がもう一方の自己認知に影響することがあります。

哲学者パーフィット(Derek Parfit)はこの問題に対して急進的な見解を示しました。おそらく「同一性」そのものが最も重要なことではない。重要なのは心理的連続性の度合い——あなたと過去のあなたの間にどれだけの記憶、性格、価値観の延続があるか。延続の度合いが高ければ、「同一人物かどうか」という問いはそれほど重要ではなくなる。

パーフィットはさらに踏み込んで、「私」の同一性に執着することは認知的な誤りだと考えました。川に対して「これは昨日と同じ川か」と問わないのと同じです。川の水は絶えず流れていますが、私たちはそれを同じ川として扱います。アイデンティティもまた、この流れの中のパターンなのかもしれません。

仏教哲学では、これを「諸行無常」(しょぎょうむじょう)と表現します。すべての現象は移り変わる。固定した「自己」は存在しないが、変化の流れの中に一貫したパターンはありうる。パーフィットの洞察と仏教の無我論は、驚くほど近い場所にたどり着いています。

二、記憶のチェーンと連結リスト:連続性の脆さと強靭さ

ロックの記憶理論は連結リストとしてモデル化できます。

# アイデンティティとしての記憶の連結リスト
identity = memory_today -> memory_yesterday -> ... -> memory_childhood

各ノードが前のノードにリンクし、現在から過去へ延びるチェーンを形成します。しかし連結リストには致命的な弱点があります。どこか一つのノードが切れれば、後続のすべてがアクセス不能になる。

記憶喪失がまさにこの切断です。過去10年の記憶を失った人がいる。チェーンが切れた。厳密なロック理論に従えば、記憶喪失後の彼と記憶喪失前の彼は同一人物ではないことになります。

しかし直感的にはそうは思いません。家族は彼を認め、法律は彼を拘束し、身体は同一です。つまりアイデンティティは一本の記憶チェーンだけではなく、多重にリンクされたネットワーク——記憶は一つのスレッドだが、身体の連続性、社会的関係の承認、法的文書の記録も、すべて追加のリンクなのです。

記憶のチェーンが切れても、他のリンクがアイデンティティの安定性を維持できます。

分散システムのフォールトトレランス設計に似ています。すべてのアイデンティティ情報を単一ノードに置くのではなく、複数の独立したソースに分散させる。いずれかのソースが失効しても、他のソースがシステムの稼働を維持できる。

より正確に言えば、アイデンティティは一つの値ではなく、複数の当事者が継続的にメンテナンスするコンセンサスです。

三、ガベージコレクション:忘却はバグではなくフィーチャー

ガベージコレクションのないプログラムは最終的にメモリリークを起こし、メモリを使い果たしてクラッシュします。

人間がもし本当に「すべてを覚えていたら」どうなるでしょうか。

超記憶症(hyperthymesia)と呼ばれる稀な神経学的状態があります。人生のほぼすべての日の詳細を記憶できる状態です。超能力のように聞こえますが、研究によれば、超記憶症の人々は大きな心理的負担を抱えていることが多い。つらい経験を忘れることができず、トラウマから回復できず、過去を「過去」にできないのです。

忘却は人間の認知システムのガベージコレクション機構です。欠陥ではなく、システムの稼働可能性を維持するための重要な機能です。

# 人間のガベージコレクション:頻繁に使われない記憶を解放する
def cognitive_gc(memories, relevance_threshold):
    """関連性の高い記憶を保持し、それ以外を解放"""
    return [m for m in memories if m.relevance > relevance_threshold]

ニーチェはこの点で並外れた洞察を示しました。『反時代的考察』の中で彼は指摘します。動物が幸福そうに見えるのは、永遠の「今」の中に生きており、記憶に引きずられないからだ。人間にはある程度の忘却が必要であり、そうでなければ「前に進む」ことができない。完全に忠実な記憶は祝福ではなく呪いだ、と。

アイデンティティの観点から見ると、これは直感に反する事実を意味します。忘却はアイデンティティのアップデート機構である。

変化できるということ——ジュニアからシニアへの成長、一つの価値観から別のものへの転換——その一因は、古い自己を忘れることにあります。すべてのバージョンの自分を同時に記憶し、等しく重視していたら、アイデンティティの「バージョンコンフリクト」に陥り、いかなる決定も下せなくなるかもしれません。

ガベージコレクションは古いメモリを解放し、新しいオブジェクトの生成を可能にします。忘却は古い自己を退場させ、新しい自己の登場を可能にします。


現代への接続:デジタルの分身とAI時代のアイデンティティ危機

あなたのデジタルコピーはすでに存在する

お気づきでないかもしれませんが、あなたの「デジタル分身」はすでにネットの至るところに散在しています。

ソーシャルメディアのプロフィールはあなたの一つのコピー——慎重にキュレーションされたバージョン。検索履歴はまた別のコピー——あなたが認めたがるよりも正直なバージョン。各プラットフォーム上の行動データは統計モデルを構成し、広告システムがあなたの次の行動を予測するために使います。

今、生成AIがこれらのコピーをさらにリアルにしています。チャット履歴、文体、語調の癖を使ってLLMをファインチューニングし、「あなたのように話す」モデルを作れます。

このAIの分身はあなたに代わってメールに返信し、あなたがいない間も社交的なインタラクションを維持し、あなたの死後も「存在」し続けることができます。

しかし、それはあなたではありません。

ディープコピーと同じく、作成された瞬間にはあなたと同一ですが、その瞬間から二人は独立に進化します。あなたは新しいことを学び、新しい感情を経験し、考えを改めますが、分身は過去のあなたに留まっています。

問題は、他者に区別できるのか? そして区別できなければ、社会的な意味において、それは「あなた」なのか?

テセウスの船のデジタル版

古代ギリシャのテセウスの船のパラドックス——船の板を一枚ずつ交換し、元の板が一枚も残っていない状態になったとき、それはまだ元の船なのか。

ソフトウェアシステムは毎日このパラドックスを経験しています。モジュールをリファクタリングし、依存関係を入れ替え、フレームワークをアップグレードする。元のコードが一行も残っていなくても、ユーザーは同じプロダクトと呼び続けます。

人間も同じです。身体の細胞は絶えず入れ替わり、信念は絶えず修正され、記憶は想起のたびにひそかに書き換えられます。厳密に言えば、10年前のあなたと今のあなたの間には、同一の原子は一つもないかもしれません。

しかし、あなたはまだ「あなた」です。

なぜなら、アイデンティティは物質の延続ではなく、パターンの延続に基づいているからです。船の形、機能、名前は延続する。ソフトウェアのインターフェース、振る舞い、ユーザーの認知は延続する。あなたの物語、関係性、自己認知は延続する。

アイデンティティとは一種の連続性の契約——あなた自身、周囲の人々、そして社会制度の三者が共同で維持するものです。契約が破られない限り、アイデンティティは成立します。

契約が破られるとき

しかし、契約が破られたり再交渉を迫られたりする瞬間があります。

重大なトラウマ——PTSDは人に「別人になった」という感覚を与えることがあります。トラウマの前後で記憶のチェーンは存在するかもしれませんが、人格の連続性が深刻に撹乱されています。

技術的複製——もしいつか意識をクラウドにアップロードできるようになったら、法律と倫理は答えなければなりません。アップロードされたコピーに市民権はあるか? オリジナルとコピーの法的関係は何か?

AIによるなりすまし——ディープフェイクとAI音声が完璧に人を模倣できるとき、アイデンティティの社会的認定メカニズムは根本的な挑戦に直面します。友人があなたとあなたのAI分身を区別できなければ、アイデンティティの「社会的参照」がハイジャックされたことになります。

これらはもはや遠い思考実験ではありません。現在進行形の技術的現実です。


省察と示唆:プログラマーのアイデンティティリテラシー

あなたが守りたいのは、どの種類の「同じ」か?

アイデンティティの問題に直面したとき、人それぞれ異なるアンカーポイントを持ちます。

価値観を守る人がいます。「どれだけ変わっても、核心の信念は変わらない。」オブジェクトのimmutable属性のように。

関係性を守る人がいます。「この人たちが自分を認めてくれる限り。」オブジェクトの外部参照のように。

物語を守る人がいます。「過去と現在を一つのストーリーとしてつなげる限り。」オブジェクトのchangelogのように。

名前を守る人がいます。「この名前である限り。」変数名のように。

どのアンカーポイントが「正しい」というわけではありません。重要なのは、自分のアンカーポイントが何かを知り、それが揺さぶられたときにどう応答するかを考えることです。

アイデンティティは協調的にメンテナンスされるシステム

最も深い洞察はおそらくこれです。アイデンティティはあなた一人のものではない。

アイデンティティは、あなたの自己認知、他者による認定、社会制度の三者が共同でメンテナンスしています。分散システムがマルチノードのコンセンサスを必要とするように、アイデンティティも複数の当事者の協力があって安定するのです。

一人で遠い土地に旅し、知人全員から離れ、まったく新しい環境に入ったとき、アイデンティティの浮遊感を覚えるかもしれません。「自分が誰か忘れた」からではなく、アイデンティティをメンテナンスする他のノードが一時的にオフラインになったからです。

4つの持ち帰りアイデンティティメンタルモデル

  1. is== を区別する——「同一のもの」と「同じに見える」を混同しない。デジタルコピーはあなたと == かもしれないが、永遠に is あなたにはなりません。

  2. アイデンティティは連結リストであり、定数ではない——あなたは固定不変の値ではなく、一連の状態遷移の連続記録です。自分が変わることを許すことは、自分を失うことではありません。

  3. 忘却は機能であり故障ではない——適度なガベージコレクションが心のシステムを稼働可能に保ちます。すべてを覚えている必要はなく、連続性を維持すればよいのです。

  4. アイデンティティの契約をメンテナンスする——自己の物語、大切な人間関係、社会における役割を主体的に管理する。アイデンティティは自動的には維持されません。継続的な投入が必要です。


おわりに

あの git blame の午後に戻りましょう。

18ヶ月前の自分と今の自分は、同じgitアカウント、同じ職歴、同じ記憶のチェーンを共有しています。しかしコードスタイル、技術的判断、価値観さえもすでに異なっています。

まだ「自分」なのか。

答えは、どの種類の「同じ」を問うかによります。

数的同一性を問うなら——はい、物理的に連続した同一の身体です。質的同一性を問うなら——完全にはそうではなく、多くの属性がすでに変わっています。心理的連続性を問うなら——はい、ただしチェーンのすべてのノードは前のノードとわずかに異なっています。

おそらく最良の答えはパーフィット的なものでしょう。「同一人物かどうか」という問いに執着しすぎないこと。

重要なのは、過去の自分との間に学びを可能にする十分な連続性があり、成長を可能にする十分な差異があることです。

継続的にリファクタリングされるシステムのように——リファクタリングのたびにより良くなり、ユーザーは一貫して同じプロダクトとして扱い続ける。

あなたはリファクタリング進行中のシステムです。変化を恐れないでください。


次回予告

因果連鎖と関数呼び出し

3日かけて追ったバグのroot causeをやっと見つけた。しかし待ってください——見つけたのは本当に「原因」なのか? それともスタックトレース上で最も近いノードに過ぎないのか?

  • ヒュームは、因果を「見た」ことは一度もないと言った。前後して起きた事象を見ただけだ、と。ではプログラムのコールスタックは本当の因果連鎖と言えるのか?
  • イベント駆動とコンカレンシーの中で、因果はなぜ一本の線からネットワークに変わるのか?
  • レコメンドシステムのフィードバックループ:結果が原因を書き換えるとき、root causeはまだ見つかるのか?
  • ポストモーテムの本当の目的は何か——誰かに責任を押し付けることか、修復可能な構造を構築することか?

次回は、関数呼び出しとイベント駆動から出発し、因果関係の哲学的迷宮を解きほぐします。


参考資料

  • Locke, John. An Essay Concerning Human Understanding, Book II, Ch. 27. 1689. (心理的連続性の理論)
  • Parfit, Derek. Reasons and Persons. Oxford University Press, 1984. (個人の同一性と心理的連続性)
  • Reid, Thomas. Essays on the Intellectual Powers of Man, Essay III. 1785. (勇敢な将校のパラドックス)
  • Nietzsche, Friedrich. “On the Uses and Disadvantages of History for Life.” Untimely Meditations, 1874. (忘却の価値)
  • Plutarch. Life of Theseus. (テセウスの船のパラドックス)
  • Nozick, Robert. Philosophical Explanations. Harvard University Press, 1981. (最も近い連続者の理論)
  • Floridi, Luciano. The Fourth Revolution. Oxford University Press, 2014. (デジタルアイデンティティの哲学)
  • 道元『正法眼蔵 現成公案』(自己と世界の不二性)


プログラマーの哲学思考・シリーズナビ

メインシリーズ

#00 序章:なぜプログラマーに哲学が必要なのか

#01 真理は関数なのか?

#02 知識はデータに過ぎないのか?

#03 我思う、ゆえに我あり.py

#04 時間計算量 vs. 時間の本質

#05 ポインタとメモリ:個人のアイデンティティの連続性 ← 今ここ

類似投稿

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です