はてなキーワード: 数学的帰納法とは
数学では完全無欠であることが理想とされ、完全無欠なものの一番初等的なのは円であるけれども、その円のように使用できる様々な完全無欠と考えられるものが存在する。
ところでそんなことはどうでもよくてここで、現在の問題を解くときに、何を用いたらよいのか?帰納法はなぜ円のように使用できるのか疑問なしとしない、しかしinductionが円のように
使用できることは間違いないことである。ところが民事訴訟法などと呼ばれる、法と呼ばれるものが、全て、このように高度な知能指数がないと理解できないようなものであるかというと
悪質すぎてまだ解明されていない。なぜなら誰も教えていないし理解しようがないからである。数学的帰納法とひとくちにいっても練習問題のように円ではないものがあることは誰でも理解できる
だろう。しかし、民事訴訟法は社会に出てからは円であるのかというと分からないという他ない。a,b,cの直角三角形に対して、a+bの正方形の中に一辺がcの正方形が与えられることに関しても
Steamで買った『Recursed』というゲームを全ステージクリアしたので、記念に感想を書く。
Steam:Recursed
https://store.steampowered.com/app/497780/Recursed/?l=japanese
一見すると『Recursed』は2Dのレトロな雰囲気のアクションゲームである。操作はシンプルで、方向キーで左右に移動し、アクションはジャンプと物をつかむ/投げるだけだからだ。部屋の中を移動してブロックをつかんで足場を作ったり、鍵をつかんで扉を開錠したりしてゴールへと到着(crystalを獲得)すればステージクリアだ。
ステージの始めはチュートリアルの様に簡単だが、ステージを経るごとに難しくなり、そのうち何度も試行錯誤したり難しさのあまり何十分も頭を抱えたりもした。
この複雑さを生み出す要因は箱(ゲーム中表記ではChest)である。このゲームでは箱の中へジャンプすることで部屋の内に入れるが、一度箱の外にでると箱の内部状態はリセットされてしまうのだ。よって箱の中にブロックや鍵などのオブジェクトを持ち込んでも保存することはできないし、ブロックの位置もリセットされるし、開錠した扉もまた施錠されてしまうことになる。
さらに大きな特徴として、箱を持ち歩いて移動することができるのだ。それにより、箱を持ったまま別の箱に入ったり箱を持って箱の外にでることもできる。
そして、ステージを経ると箱の中の部屋は箱の外と同じ部屋という場面に出くわす。Recursedは『再帰呼び出し』という意味らしいが、まさにこのゲームのタイトル通りの現象が起こるのだ。そして、以降のステージでは再帰を交えることでパズルの複雑さはより深まっていく。
再帰は数学的帰納法やアルゴリズムでは定番の概念だが、それがパズルとなってプレイヤーの思考回路を奪ってくる。私はかつて社畜プログラマとしてJavaプログラミングを経験していたので、箱に入ることはメソッドを呼び出すことの様に感じた。オブジェクトを持って箱に入ることは引数を使ってメソッドを実行することであり、オブジェクトを持って箱の外に出ることはreturn文でメソッドを終わらせることであった。
「ゴール前の段差が大きくブロックが必要だから、ブロック生成メソッドを呼び出してブロックオブジェクトを返り値として渡さなくてはいけないけど、そうすると鍵オブジェクトをゴールメソッドの引数として渡すことができなくて……、いっそのこと、ブロックメソッド内からゴールメソッドを呼び出すべきか……、メソッドの返り値は一つだけだが何度も呼び出せばいけるか? この緑色のオーラはなんだ? Staticを意味するのか? Staticなオブジェクトの位置情報をあらかじめ変更しておけば、ゴールメソッドで引数渡しをする必要がなくなるのか?」
こんなことを一つのステージをクリアするだけのために何十分も考えていたのだ。念のために書いておくが、ゲーム内には数学用語やプログラミング用語は一切出てこない。ただ単に、私にJavaプログラミングの経験があるからその用語でパズルを考えていただけだ。ゲーム内で箱から出入りしたりオブジェクトを箱の中から出し入れするとどうなるかを、Eclipseでステップ実行するように想起していた。ちなみに、ゲーム内で存在しない部屋や壁の中に移動しようとするとparadoxが発生して強制的に特殊な部屋へ移動されるが、私はその度にステップ実行でExceptionに遷移されたことの様に感じた。他の言語に精通するプログラマだったり数学畑の人ならば、私とは異なる概念でパズルを思考をするのだろうか。
プログラマを辞めて何年もプログラミング的思考をしてこなかった私でも全ステージクリアすることができたのだから、学校でプログラムを学んでいたり現役でプログラミングをしてきた人ならばこのゲーム『Recursed』をクリアすることは可能だろう。いっそのこと、『Recursed』のクリアすらできない人にプログラミングができるのか? と煽ってみたいくらいだ。
ちなみに、もし私が社畜プログラマ時代にこのゲームをやったらブチ切れていただろう。なんで仕事でプログラミングで脳を酷使した上に自宅のゲームでも同じようなプログラム的な思考をしなければならないんだよと。プログラミングから何年も離れていた今の私にとって『Recursed』は、プログラミングや単体テストが無事成功した時の快楽を思い出させるものだった。
『Recursed』はパズルとしての難易度は非常に高いが、理不尽な解法を求められることはない。理不尽な解法のクイズやパズルには怒りが湧いてくる。ひと昔前のクイズ番組を見たことのある人なら『モヤッとボール』を投げつけたくなる、と言えばその感情が伝わるだろう。『Recursed』はどんなに難しいステージでも、ただただ開発者のパズル作成能力に感嘆するだけで怒りは湧いてこない。
似たようなアクション風パズルゲームとして有名なのは『The Witness』であろう。『The Witness』も私が好きなパズルゲームであり、ゲームとして高い評価を得ていることに間違いはないのだが、しばしば理不尽な解法を求められるパズルがありその度に私は怒りが湧いてきたものだ。そう考えると、『Recursed』はパズルとしての洗練さだけなら『The Witness』を超えるものだと私は思う。
具体的にパズルを解説するととただのネタバレになってしまうので(もっとも、文字だけでパズルの解法を説明できないのだが)、『Recursed』で私が好きなステージを述べる。順番は攻略順に並べた。
チュートリアルの様に簡単だったこれまでのステージから突如再帰の概念を見せつけられることで、このゲームのタイトル名の意味を理解することになった。
鍵を手に入れたら扉に到達できず、先に扉に到達したら鍵が手に入らずで、まさにインターロックの名前に相応しいステージだった。
一画面だけのオブジェクトが少ないシンプルなステージだが、氷の壁に阻まれてゴールできず苦戦した。試行錯誤の繰り返しの末クリアできたが、何故クリアできたのかがわからない。
The Voidのステージはどれもこれまでの集大成という感じでやりごたえあったが、中でも頭をひねらせたのがこれ。ゴールの部屋を水没させたり水の無い状態で入ったりして鍵を運搬するのに苦労した。
箱を左右へ投げて移動を繰り返して、高い位置にあるゴールを目指すのがまさにEscalateというステージ名そのものだった。paradoxを発生した後のパターンが複雑だったのが印象に残っている。paradoxを発生させたらcrystal獲得(通常のクリア)できないのかよ……という落胆は大きかった。しかし、それだけにcrystal獲得とdiamond獲得(paradox発生によるクリア)のどちらも大きな達成感を得られた。
簡単そうに見えて難しく、唯一ステージを飛ばして次のステージへと進んだので印象に残っている。後に複数日に及ぶ数時間の試行錯誤で改めてこのステージをクリアができて、クリアにかかった時間が最も長くなったステージでもある。しかしながら、おそらく開発者の想定外の方法でのクリアであり。初期画面から右の方へ一切行かずにOobleckさえ使用しないというクリア方法にスッキリしなかった。といっても、開発者の想定を無視するゴリ押し的なクリアを見つけたのはこのステージだけだった。
The Void/Escalateと似たコンセプトのステージだが、釜(JavaにおけるThread?)のギミックを利用したより複雑な構成となっている。高い位置にあるゴールを目指すのは、やはりFlightというステージ名そのものだった。
この記事を投稿する前にエンディングを見れていないことに気づいた。
全ステージクリア(全てのCrystal取得)したからと、この記事を執筆するためにネタバレを気にせず攻略情報を調べていたけど、エンディングなんてわかる訳ねえよ。The Void/Trilemmaの最後にCrystal取得とは関係ない意味深なオブジェクトがあることには気づいていたけど……。ちなみに、私のSteam実績によるとdiamondとrubieの全取得はできてないけれども、もう取得する気力はない。パズルゲームガチ勢にとっては、実績全解除を目指さない私は軟弱者に映るのだろうか? 攻略を調べずに実績全解除できる人は、高い論理的思考能力を有しているに違いない。
この話に関する最も愚かで、最も多い人種の説明は、全単射だのヒルベルトホテルだのを持ち出して的外れな解説をした挙げ句、「人間の感覚が裏切られる数の性質のひとつ」などとのたまうアレである。本質をまるで理解せず、明らかな矛盾や自らの違和感を深く追求することもせず、権威を前に思考停止して、自分よりは深くものを考えている人たちが納得できずにいるのを見て優越感に浸る真性のゴミカスである。
頭の働く人であれば、無限集合の「大きさ」の定義は一般的な定義とは違っており、表題のような混乱を招かないため新たに「濃度」という語が定義されている、ということを明言するだろう。この話ではそもそも言葉の定義が知識と違うのだから齟齬が生じるのは当然だ。この再定義を経ずに表題の結論に至るとしたら、間違っているのはそちらの方だと言ってもいい。受験レベルの数学的帰納法でも偶数が自然数より少ないことは証明できるだろう。これが感覚であるなどと、よくもまあ言い張ったものである。
参考までに、次のロジックなら誰もが納得できるだろう。『2つの無限集合において集合の全ての要素が1対1で対応するとき、「2つの集合は大きさ(濃度)が同じである」と言う。無限集合A={1,2,3,...,n,...}と無限集合B={2,4,6,...,2n,...}は各要素が1対1で対応するため大きさ(濃度)が同じである』。これは数学的にも直感的にも何ら欠陥の無いロジックだ。
さて、定義を改めればひとまず納得することはできる。だが逆に言えば、一般の定義で見た場合に明らかな誤謬が生じているという事実は残っている。集合の要素が1対1で対応するのであれば同じ大きさである、というのは一般的にも間違いなさそうに見えるからだ。真理を冒している論理の誤りがどこにあるのかを明らかにしてこそ、この問題を十分に考え抜いて理解したのだと言えよう。
違和感がどこにあるかは、おそらく誰もが直感的に分かっている所だろう。すなわち、仮に集合Aを100までに限ると、集合Bは200までの偶数となる。一方では100を上限としながら、もう一方では102~200までを考慮してもいいのだろうか。普通、自然数と偶数と言われてこのような解釈をすることはまずありえない。この矛盾感が、無限集合という言葉を盾にされても看過しがたいものに思えているのではないだろうか。その直感は何も間違っていない。それこそが核心である。何故なら「正の偶数は自然数に含まれなけれなければならない」からだ。要素を1対1で対応させようとすれば集合Bは必ず集合Aに無い要素を含む。そのため自然数に含まれるという本来の定義を満たすことができない。集合A={1,2,3,...,n,...}を自然数、集合B={2,4,6,...,2n,...}を正の偶数の集合、とすることは各々では正しくとも、偶数の定義に自然数が関わる以上は両者の定義上の関係性を改めて保証する必要が生じていたのだ。かくして表題のような誤謬が生じたわけである。
オタクがよく使う言葉に、n番煎じという言葉がある。「n番煎じですが、書きたかったので書きました!」といったような感じで、おもにネタかぶりへの配慮を兵源するのに使われる。これは「二番煎じ」から派生したスラングで、「何番目かすらわかんないくらいとにかく大きな数字」として「n」が使われている。ここからさらに派生して、「n」という言葉は「とにかく大きな数字」として使われている。「キンプリが好きすぎてn回も見たわ」「わらびもち旨すぎ。n個食べたい」のような感じ。
私見だが、この「n」というのは、たぶん高校で習う数学的帰納法のイメージからきてるんじゃないかなと思う。1、2、3、………n……というような表現をよくやるので「n」というのが「漠然と大きめの数字」として共有されたんだと思う。ここまで読んで変なのと思った人は多いと思うが、元ネタ?の「n」は任意の数であって任意の大きな数字ではない。だからなんか、「n番煎じ」「n回も」というスラングを見るたび、なんだか居心地の悪さを感じている。
「〜したい人生だった」
という言葉はオタクの皆さんなら1度は耳にした事があるだろう。
これについてよく言われることといえば、
「やりたいと思った事はその時点で行動まで完了しているから、後回しに出来るって事はあまりやりたくないのでは?」論である。ちなみに私も支持している。
これについてのありがちな答えが「いや、明日やるかもしれないし」的なやつである。
さて、本当にやるだろうか。
今日やりたかったけどなんだかんだ言ってやらなかった事を次の日もなんだかんだ言ってやらなかったら一生やらないといえるだろう。数学的帰納法から明らかである。