- Edmund Gettierの1963年の3ページの論文は、知識を正当化された真なる信念とみなす合意を揺さぶり、この記事はその問題をソフトウェアデバッグにおける思い込みと結び付けている
- Gettier事例とは、信念が証拠によって正当化され、実際に真でもあるが、真になった理由が根拠と異なるため、知っているとは言いにくい状況を指す
- Webアプリでは、検索欄のフォーカスに関するpull requestをデプロイした直後にautofocusが壊れ、その変更が原因のように見えたが、実際の原因はフレームワークのルートDOMイベントバインディングの変更だった
- メール通知の問題でも、コード変更がバグのように見えたが、ほぼ同じ時期に依存していたメールサービス障害が直接の原因だった
- こうした状況に名前を付けることで、キャッシュ、ブランチ、コードパスのような前提をより疑うようになり、複雑で一時的なソフトウェア問題の原因をより慎重に判断できる
Gettier問題と知識の条件
- Edmund Gettierは1963年、Analysisに3ページの論文を発表し、この論文は哲学分野の古典となった
- 啓蒙主義以降、知識は通常正当化された真なる信念として定義されてきた
- 正当化: 証拠に由来すること
- 真: 偽であるものを「知っている」とは言えない
- 信念: 頭の中の命題
- Gettierは「正当化された真なる信念は知識なのか?」という問いを投げかけ、そうではない事例を示した
- これらの事例はその後Gettier casesと呼ばれ、独自の議論文献を生み出した
野原の牛の事例
- 野原の遠くに牛が見えると思っているが、実際に見ているのは紙で作られた牛の模型である
- ところが、その牛の模型のすぐ後ろに本物の牛がいる
- この場合、「野原に牛がいる」という信念は3つの条件をすべて満たす
- 野原に牛がいると信じている
- 牛のように見える何かを見たので、その信念には根拠がある
- 実際に野原に牛がいる
- それでも、その人が野原に牛がいる事実を知っていたと言うのは難しい
- 真になった理由が、その人が見た対象ではなく、偶然後ろにいた本物の牛だからである
Geniusで使われた「gettier」
- GeniusのCTOは学部で哲学を学んでおり、Gettier事例に強い関心を持っていた
- Geniusではこのような状況を略してgettierと呼び、プログラミング中によく出会う思い込みを説明する言葉として使っていた
- 名前が付くと、似たような状況がより頻繁に目に入るようになる
autofocusが壊れたWebアプリの事例
- あるWebアプリケーションは、社内開発のクライアントサイドフレームワークを使っていた
- 小さな検索エンジンアプリで、検索欄でEnterを押すと入力フィールドがフォーカスを失うようにするpull requestを作成した
- キーボードでWebを操作するユーザーが、入力ボックスから手動で抜けなくても済むようにする変更だった
- 新しいバージョンをデプロイした後、ページ読み込み時に検索欄へ自動でフォーカスが当たるはずの動作が壊れていることに気付いた
- いろいろなコードを変え、行をコメントアウトし、ブラウザをハードリロードしても、autofocusの動作は戻らなかった
- 実際の原因は、同僚がフレームワーク自体を変更したことで、特定のイベントがルートDOM要素にバインドされる方法が変わったことだった
- その結果、
"autofocus"属性が壊れた
- routine rebaseの過程で、この変更と無関係な別の変更も一緒に入ってきた
- 小さなpull requestをデプロイするとき、自分の変更とは無関係なバグも一緒にデプロイされた
- 検索欄のフォーカス関連コードを修正していたため、そのpull requestが問題を起こしたように見えた
- 「たった今デプロイしたpull requestがproduction siteのautofocusを壊した」という信念は正当化されており、実際にデプロイ後に壊れてもいたが、実際の破損原因はまったく別の変更だった
- テストで捕捉されるべきだったし、不審な挙動も見えていたが、それでもソフトウェア開発が難しいことに変わりはない
メール通知が止まった事例
- あるユーザーが、サイト内メッセージがもうメール通知を生成しなくなったと報告した
- Webアプリのメール処理コードには最近変更が入っており、その変更が問題の挙動を生んだバグのように見えた
- しかしほぼ同じ時期に、そのコードが依存していたメールサービス自体がダウンしていた
- コード変更がメール配信停止の原因だという信念は正当化されており、結果としても実際に真だったが、直接原因はサービス障害だった
プログラマーに有用な用語
- 哲学者は、このような事例は厳密なGettier事例ではないと見るかもしれず、本当のgettierはまれである
- それでもこの概念はGeniusで用語のように使われ、その後も有用であり続けた
- プログラマーが経験する厄介な状況の1つは、問題に複数の潜在的原因があり、そのうち1つを信じる十分な理由があるものの、実際の原因は別の場所に隠れている場合である
- こうした状況に名前を付けると、より警戒するようになる
- キャッシュを消し忘れていないか確認する
- 間違ったブランチで作業していないか疑う
- 実際にそのコードパスを通っているか点検する
- ソフトウェアは複雑で一時的なものなので、開発者は他の人々よりも奇妙な認識論的問題に頻繁に直面する
- 野原の牛とgettierを区別できれば、開発者としてより良い判断に近づける
1件のコメント
Hacker News のコメント
関連するツイートだが、今は削除されているようだ:
記事に出てくる事例は、実のところ興味深い論点をほとんど生み出していない。暗い雲を見て火事が起きたと「知っている」観察者は、単に間違っているだけだ。その雲は虫の群れかもしれないし火災かもしれないので、曖昧さを解消する追加の証拠が不足している状態だ
砂漠の旅人が遠くに見たきらめきも、オアシスかもしれないし蜃気楼かもしれないため、正当化された知識と呼ぶにはさらなる証拠が必要だ
「正当化された真なる知識」の条件に 予測力 を入れるのが筋が通るのか気になる。そうすれば、この2つの例と Russell の止まった時計の例も扱える。何かを知っていると思っていても、その知識によって有効な予測ができないなら、実際には知っていない。Zoom 背景の例は、意図的な欺きがなければ、この基準を満たし得る
a) Zoom の背景が実際の背景を表していなければならないと考える人はいないので、そのような結論を主張する正当性があるとは思わない
b) 背景が実際の背景と1:1で対応しているなら、別の根拠でそれが実際の背景だと考えたとしても、命題は真なので 正当化された真なる信念 を持つことになる
たとえば視聴者は知らないと思っていても、実際には知っていると判断する私の知識も正当化に基づいている。ここでは、私が偽の背景を表示したという知識がその根拠だ
逆に、私がこっそり君の背景をオフにしてしまった状況も簡単に作れる。すると Zoom の相手は知識を持っているが、君はそうではないことになる。それでも今回は、君が相手は知らないと思うことになる
大学で哲学を専攻していたが、当時はゲティア問題をめぐる意味論的な揚げ足取りが流行していた。
ゲティアが有名になった理由は、論文が3ページしかなく、学者たちが実際に最後まで読んだ唯一の論文だったからだと、ずっと信じてきた。
この問題に、特に深かったり注目すべき点があると思ったことはない。本質的には知識の定義をめぐる論争であり、そういうものはいくらでも永遠に続けられる。実際、彼らは30ページの論文を1本ずつ書きながら、知識の定義をめぐって争い続けていた。
最高レベルの哲学者たちは概ね理解していると思うが、安楽椅子哲学者や、一部の形式的な訓練を受け資格もある人たちでさえ、「知識」の定義が一つ存在し、それをめぐって争うことが意味のある活動だと勘違いしている。
まるで私たちが「知識」とは何かに合意しさえすれば、宇宙に何らかの有益な影響が生じるかのように考えている。言葉そのものが重要で、実在論的な実体を持っているかのように見なし、「知識とは正確には何か」を突き止めれば、何かを成し遂げたと思っている。
だが実際にはそうではない。とりわけ、それを確定すれば意味のある影響が生じるという部分はなおさら違う。有益かどうかもまた別の話だ。
知識には複数の定義がある。100%確信していて、抽象的にも「正しく」なければ何かを知っているとは言えない、という見方がある。ここで「抽象的」と呼ぶのは、そもそも私たちには「野原に牛がいるか?」のような事実について正しいかを教えてくれる神託がなく、具体化が不可能だからだ。
この見方は結局デカルト的な立場に行き着き、ほぼ唯一「知っている」と言えるのは、自分が存在するという事実だけになる。哲学的・歴史的には興味深く重要な定義ではあるが、すぐに限界に達する。「私は存在する」だけでは論理をあまり積み上げられず、もっと多くの材料が必要になる。
別の見方として確率的知識を採用すれば、「野原に牛が見えるので、そこに牛がいることを知っている」と言える。ここでの意味は、私が見ているものが張り子の牛ではなく本物の牛だと信じるだけの帰納的理由が十分にある、ということだ。誰かが野原に張り子の牛を設置した確率は、帰納的に低いからだ。
この種の知識は間違いうる。純粋に理論哲学の問題ではなく、実際にも野原にいたずら用の物が置かれているのを見たことがあるし、一見するとだまされるほどよくできた案山子や、遠くから人に見えるよう作られた庭の装飾にだまされたこともある。これは現実の問いだ。
それでも、真理の神託が「間違いだ」と言うような状況でも、私がそこに人がいるという「知識」を持っていたと見なす知識の定義を運用できる。真理に「収束」するが必ずしも到達はしない知識概念の上に、何かを築くことができる。より複雑だが、はるかに有用だ。
この2つの例が、興味深く有用な知識の定義をすべて網羅しているわけでもない。後者は単一の定義というより、定義の一群に近い。
繰り返すが、最もよく訓練された哲学者一般をこのように非難したいわけではない。ただ、多くの哲学者は「絶対的真理の神託にはアクセスできない」という事実の周りを、あまりに長く回り続ける傾向がある。
その通りだ。それは扱うべき事実だ。「我思う、ゆえに我あり。では、それ以外に何を100%厳密に結論できるのか?」といった問題も同様だ。だが、それを形だけ変えて繰り返し掴み続けるのは生産的ではない。
そんな神託は存在しない。その事実を受け入れて先に進むべきだ。定義したからといって生じるものではなく、望んだからといって生じるものでもない。紙にインクを注ぎ、論理をプレッツェルのようにねじ曲げて、それがどうにか必然的だと宣言しても生じない。
神が存在するなら、個人的には「存在する」側だが、どちらにせよ、神は明らかに「そこに牛はいるか?」と尋ねるたびに照会できるデータベースではない。
そこから抜け出せなければ、どれほど言葉を付け加えても、ごく小さな遊び場に閉じ込められる。もしかすると、彼らが望んでいることも、やる意志があることもその程度なのかもしれないが、それでも小さな遊び場だ。
哲学では、実際には「間違う」ことができない。アイデアを間違いだと証明して捨てることがないからだ。そういうことが可能なら、単に「科学」と呼ぶだろう。
だから哲学は、「誰がこう言い、誰がああ言った」が積み重なり続ける体系になる。哲学的な問いを投げかけると、答えは「Aristotleはこう言い、Kantはああ言い、Descartesはこう言い、Searleはああ言った」になる。
「で、答えは何なの?」と聞くと、「今言っただろう」となる。だから実際に何かについて論争したければ、定義をめぐって争うことになる。
知識と真理は中央集権的な概念だ。そうした問題のないモデルのほうを好む。
すべてのモデルは不完全で暫定的であり、同じプロセスについて複数のモデルがありうる。知識と真理は終わりのない論争につながりやすいが、モデルは限界をよりよく理解しており、誰も完全に到達すると主張しない。プログラミングではこれを抽象化と呼び、常に漏れ穴があることも分かっている。
物事を中央集権的に説明しようとする欲望から生じる哲学的問題は多いと思う。意識、理解、知能がその例だ。
「探索」という表現のほうを好む。探索は分散的で、個人的・対人的・社会的な領域を包含する。探索は探索空間を定義するが、意識は、それについて語るとき、環境や他者について沈黙してしまう。
探索は、意識、理解、知能がやろうとしていることを行う。注意、記憶、想像、計画といったあらゆる精神能力は探索の一形態だ。学習は表象を見つける探索であり、科学も探索であり、市場も探索であり、DNAの進化やタンパク質の折りたたみも探索だ。
より普遍的で科学的だ。探索は多くの神秘を取り除き、単一の人間の中に自分自身を中央集権化するという誤りを犯さない。
深い哲学的問題は、存在について本当に謎めいたものがあるために生じる。用語を変えたからといって、その謎が消えるわけではない。
最初のインターンシップで一緒に働いたベテランが、こういう種類の問題を偶然の失敗の法則と呼んでいて、それを肝に銘じている
デバッグするときは、真実を確かめるために当たり前のことをたくさん試す。たとえば、自分の変更をすべて戻したらバグが直るかを確認する
その時点でも動かなければ、ハードウェア、バックエンドサービス、地球の揺れのような外部要因が変わったと考える。動くなら、時間軸を二分探索して場所を突き止める
論理を拒むような難しいバグでは、この方法が99%通用する。終わりのないログ、blame、ファイル差分をあさる代わりに、既知の正常状態から出発するわけだ
もちろん場合によっては不可能だが、ビルド・インストール・テストのサイクルがかなり速いコードでは本当によく効く
コンパイラの境界ケースのバグやライブラリコードの問題を見つけたのか確かめようとして、テストまで書いた。ライブラリにissueを立てる直前まで行って、真の原因が明らかになった
実際には、テスト設定の微妙なバグと、古いプロトコルのハードウェアインターフェースをIREGではなくHREGとして誤って定義したミスが組み合わさっていた
それが偶然うまく動いていたのだが、スタック破壊か変なポインタのような理由で、ライブラリ内部にコールバックループを作っていた。本当に自分の正気を疑い始めたバグだった
「私は庭で哲学者と一緒に座っている。彼は近くにある木を指して『私はあれが木だと知っている』と繰り返し言う。別の人がやって来てこの言葉を聞くと、私はその人に言う。『この人は狂っているわけではありません。私たちはただ哲学をしているだけです』」
― Ludwig Wittgenstein
何がそんなに大問題なのか、よく分からない。正当化は0から1までの尺度で、1なら全知全能の状態だ。
私たちは複雑な世界に生きていて、誰も神になる時間などないのだから、0.5くらいの「正当化された真なる信念」を受け入れて先に進めばいい。
信念の部分については、「君が信じているなら、それは嘘ではない」とも言える。
真であるという部分も、実際に牛がいると仮定してみよう。ところが、君が誰かを呼んでその正当化された真なる信念を検証してもらう前に、宇宙人が牛を誘拐してミステリーサークルを残す。いま皆が目にするのは紙粘土の牛だけなので、君は間抜けに見えるが、実際には真である正当化された真なる信念を持っていたことになる。シュレーディンガーの正当化された真なる信念だ。
他人を説得できないなら、それは本当に重要なのか? 逆に、知識が間違っていたとしても、皆が真だと合意しているなら、それは重要なのか?
正当化された真なる信念は、誤った仮定を明らかにするためにだけ存在する。分岐予測器の外れた側にいるのと似ている。0.9の正当化された真なる信念を持っていながら、0.1の確率で正しい答えを得て、仮定を更新しないなら問題がある。野原の彫像が一つあるくらいは大したことではない。
ただし、殺人捜査中で君がSherlock Holmesなら例外だ。彼は本当に強力な分岐予測器だからだ。
牛の死骸にロボットを入れて、誰も違いに気づかないなら、それは依然として牛なのか? おぞましい牛と馬の雑種を発見したら、それを何と呼ぶべきなのか? その牛が他のどの牛にもない独特の突然変異を持っていたとしても、なお牛の典型に当てはまるのか?
例えば乳を出せないなら? 実験室で作られたなら? 牛らしさを受け継ぐために必要な特徴とは何か?
これも言語が覆い隠している曖昧さだ。例えば「cow」は、必ずしもウシ科の動物を指すわけではない蔑称としても使われる。
さらに「知識は有限か無限か」という問題もある。いつかすべてを説明でき、科学が終わり、達成に寄りかかって休める地点が来るのだろうか? その次はどうなるのか? 存在しない仮定を説明して時間を過ごすのか? 純粋な理論数学か? それともそれすら終わり得るのか?
https://www.wikiwand.com/en/articles/Karl_Popper
帰納の問題と境界設定問題について知るには、読んでみる価値がある: https://www.wikiwand.com/en/articles/Falsifiability
要するに、私たちは「全知全能」ではないので、実際には何一つ決して知ることはできない、という意味だ。
しかしその説明を明確に述べるよう求められると、人々はしばしば、自分の説明が他人の説明と両立しないことに気づく。さらに掘り下げると、その説明はまったく持ちこたえない。だから古代ギリシャの思考実験の一部は、禅問答のように見えることがある。
厳密な答えを見つけなくても、人生は生きていける。生存を超えた人間の活動の大半は、「何がそんなに大問題なのか分からない」という範疇に入れられる。
知識の問いに対してそう言ったあとで200語を続けるのは、参加を拒んでいるわけではない。新しい課題に合わせて、十分に悪くない答えを継ぎ足して先に進んでいるのだ。
まさにそれゆえに、こうした問いは難しく、また一部の人々はその答えを探究することに引きつけられる。
Ramachandranのカプグラ妄想の事例:
https://www.youtube.com/watch?v=3xczrDAGfT4
「逆に、知識が間違っていたとしても、皆が真だと合意しているなら、それは重要なのか?」という問いは、合意現実の例だ。どこかから借りてきた直観ポンプである。
合意現実は量子領域でも尊重される:
https://youtu.be/vSnq5Hs3_wI?t=753
個々の粒子は量子重ね合わせ状態のままだが、相対的な位置がもつれのネットワーク内で集団的な合意を作る。この合意が巨視的物体の構造を定義し、Schrödingerの猫を含め、観測者には明確に定義されたもののように見せる。
ゲティア事例は、真理と知識について興味深いことを教えてくれる。
事実主張には、その主張を生み出した有効原因である出来事が描かれていなければならない。描写とは、絵を描く関係、つまり言葉と可能な出来事との対応である。例えば野原の牛のようなものだ。
知識は、描写された出来事が信念の有効原因であったときに成立する。紙粘土の牛が信念の原因であり、実際の牛は原因ではなかったので、私たちの直観はこれを通常の知識とは見なさない。
したがって、真である陳述は、世界の何かと因果的関係と描写的関係の両方を持たなければならない。言い換えれば、真である陳述は暗黙のうちに、自分自身の因果的履歴の一部を記述している。
古典論理では、証明がなくても命題はそれ自体で真であり得るが、直観主義論理では証明があるときにだけ命題は真である。証明がその命題を真にする原因なのだ。
直観主義論理では、「野原に牛がいるか、いないか」のように単純ではない。述べたように、「野原に牛がいる」という知識が真になるには、その証明が必要だからだ。
そのため多くの微妙な点が生じる。例えば「野原に牛がいないわけではない」は、「野原に牛がいる」より弱い知識である。
QED、用語上の慣例による証明である。
「偽であることを『知っている』というのはおかしいので、真でなければならない」という部分からして問題がある
ギリシャ人には通じたのかもしれないが、21世紀にはまったく通じない。私たちは皆、偽であることを「知って」生きているということが広く認められている
つまり間違っていたのは知識ではなく、知識を持っているという信念である
もちろん日常的な意味では、結局私たちはそれを知っていたと言うこともできるし、こうした区別はせいぜい過度な揚げ足取りだとも言える。しかし哲学は、理性が分割できる限り髪の毛を細かく裂くことをいとわない
おそらく現実の本性についての根本的な信念が異なるか、あるいは同じ単語に互いに異なる定義を使っているのかもしれない
したがって、実際には偽であるものを真として知ることはできず、実際には偽であるものを真だと信じることしかできない。信念から知識へどのように移行するのかを正確に記述するのが、まさに認識論である
そして特定の主題に関する一部の具体的な議論では、黙っていない参加者の大半にとって「知らない」という状態が事実上不可能に見えることもある
問題は、「知っている」という言葉が過負荷になっていることだ
一人称の「知っている」は信念である。ある程度は単なる信仰でもある。私たちは物理法則が明日変わらないと信じ、昨日があったと記憶していると信じている
科学はあらゆるものを徹底的に検証し、その信仰を事実に近づけようとする。しかし私たちは、何かがなぜそうなのかを決して知ることはできない
別の「知っている」は絶対的真理のような概念であり、誰かの信念がそこに偶然一致するということだ。その偶然が純粋な運であれ鋭い観察であれ、論文の事例のようにその両方であれ同じである
実際にはもっとスペクトラムに近く、この表現自体も私が過負荷にして使っている言葉だ。私がよく使うもう一つの表現は「これは確率的な問題で、ここに絶対的なものはない」だ
これが分析哲学やその下位分野を揺るがした可能性はあるが、哲学全体ではそれ以上に大きく感知されたわけではない
分析哲学は自分たちを本物の哲学であるかのように想像したがるが、それはナンセンスだ。単に過信し、攻撃的に縄張りを守る一派にすぎず、資源を独占している
多くの学生は、今日ポスト・カント哲学と呼ばれるもの、かつての大陸哲学または近代ヨーロッパ哲学に近い豊かさと幅を渇望しているにもかかわらずだ