直観的解説
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/06/23 10:02 UTC 版)
コンピュータ以外の実世界の例で、抽象解釈の意味を解説する。 会議室に人々が集まっているとする。ある人物がまだ来ていないことを証明したい場合、最も確実な方法は出席者の名前と何らかのID番号(例えばアメリカなら社会保障番号)をリストアップしていけばよい。2人の人間が同じID番号を持つことはないので、このリストを参照すれば特定の人物が出席しているか否かは簡単に判明する。 ここで、名前しかリストアップできないとする。ある人物の名前がリストにない場合、その人物が出席していないということは確実と思われる。しかし、もしあったとしても、出席していると確実に断言できるわけではない。なぜなら、同姓同名の別人かもしれないからである。実際には同姓同名はそうあることではないので、このような不正確な情報でも多くの場合は意味がある。しかし厳密に言えば、その人物が出席していると確実に言えるわけではなく、単に「おそらく」出席しているだろうとしか言えないのである。探している人物が犯罪者なら、「警報」を鳴らすことになるだろう。しかし、その警報が誤りである可能性ももちろんある。同様の現象はプログラムの解析においても発生する。 例えば「n歳の人物がその部屋にいるか」といった特定の情報だけを欲しい場合、名前と生年月日のリストを作る必要はない。単に出席者の年齢のリストだけを作れば、正確に質問に答えられる。そのようなリストを作るのも困難な場合、出席者の最小年齢 m と最大年齢 M だけを保持するものとする。もし質問の年齢 n が m より小さいか M より大きいなら、そのような人物はいないと確実に答えられる。しかし、それ以外の場合は「わからない」としか答えられないだろう。 コンピュータの場合、確実で正確な情報は、一般に有限の時間とメモリで計算できない(ライスの定理とチューリングマシンの停止問題を参照)。抽象化によって、問題を自動的に解けるレベルにまで単純化する。重要な問題は、「このプログラムはクラッシュするか?」といった質問に答えられるだけの精度を保ちつつ、問題(プログラム)を扱える程度にまで抽象化によって簡略化できるか、である。
※この「直観的解説」の解説は、「抽象解釈」の解説の一部です。
「直観的解説」を含む「抽象解釈」の記事については、「抽象解釈」の概要を参照ください。
- 直観的解説のページへのリンク