タッパーの自己言及式の導出過程を想像してみる

タッパーの自己言及式というものを紹介するツイートがあったので、WikiPedia掲載の式を見てみると、なんだかそのものずばりで高尚な符号理論ではないっぽい雰囲気がした。ので、導出過程を想像してみた。
4
横山 明日希 @asunokibou

これすごく好き。どうやって思いついたのだろう。笑 pic.twitter.com/qYnLIEKamg

2019-08-31 21:40:36
拡大
拡大

脊髄反射

代数符号とか符号列を数式として扱うのに先人が苦労しただろう跡もあるし、ビット列を桁の多い数にするには算術符号とかもあったしなあ、と脊髄反射

Toshitaka Miura @tdmiura

@asunokibou 符号理論というやつがビットの並びと数式を関連付ける形で作られているし、実装例として算術符号という先例もあるとすれば、ビットマップを適当にエンコードした大きな数とそれをデコードしてビットマップに戻す数式の組は作れるんじゃないですかね。 部品としての切捨てとモジュロもまあ使いやすい。

2019-09-02 19:53:44

式をよく見たらとても分かりやすかった。

ひとっ風呂浴びてから引用されたWikiPediaの記事を見たら、なんかすごくわかりやすくというかそのものずばりの、2次元座標に描いたドット絵を2進数として読み取ったのを2次元座標に展開し直すアルゴリズムを表現した式だった。

しかも発表されたのがACM SIGGRAPHときた。
ああ、こういうおふざけを堂々と発表できる学会いいよね。

思い立ってもやもやしてしまったので、想像をつけたアルゴリズムというか導出過程を書き残したくなった。

Toshitaka Miura @tdmiura

@asunokibou というか、式をよく見ると2値のビット列を座標に展開するそのものずばりのエンコードじゃん。 a) ビットマップの縦の長さを決める。タッパーの式では17。 b) ビット列を2進数に見立てて10進に変換したものを絵のコードと決める。 c) ビット列を縦の長さで折り畳んで2次元座標に展開する式を考える。

2019-09-03 01:46:46
Toshitaka Miura @tdmiura

@asunokibou c-0) ビットマップをコードする2進数Bの桁位置iの数えはじめを1桁目とする。 c-1) 座標(x,y)をBの桁位置iに折り畳む一例は、縦の長さ17よりx=floor(i/17), y=i mod 7 c-2) Bの各桁b_iを取り出すには、2^(i-1)で割って小数点以下を捨て、モジュロ2で上を捨てればいいので b_i=floor(B*2(1-i)) mod 2。

2019-09-03 02:12:24
Toshitaka Miura @tdmiura

@asunokibou タイプミス。 c-1) の y は y=i mod 17 。

2019-09-03 02:24:09
Toshitaka Miura @tdmiura

@asunokibou c-3) b_i の周りを1×1のサイズに四角く塗りつぶすのを場合分けを使わずに表現するには、b_iが0か1だから間の1/2を閾値とする不等式にする。 c-4) 式一本にまとめるために c-1) の(x,y)をiについて説き、c-2) に代入し表記を調える。

2019-09-03 02:20:08
Toshitaka Miura @tdmiura

@asunokibou d) c-4) の式を縦17のドット絵に描き、c-1) の順に 2^i の重みを与えて総和を取れば絵のコードBを与える。

2019-09-03 02:22:22
Toshitaka Miura @tdmiura

@asunokibou どうよ。 もう、先にビットマップありきの泥縄導出だと思うな。

2019-09-03 02:22:48
Toshitaka Miura @tdmiura

@asunokibou 任意の桁を取り出す操作は学生の頃にこちらの本(の旧版)で学んだ。奥村先生のアルゴリズム事典。 amazon.co.jp/dp/4774196908/…

2019-09-03 02:27:55
Toshitaka Miura @tdmiura

@asunokibou あとで元論文読んで答え合わせしないとな。

2019-09-03 02:37:45

自分に先立って味わっていた方々

tomo @tonagai

タッパーの自己言及式をPari/GPとExcelで描いてみる。 sci.tea-nifty.com/blog/2015/04/p… pic.twitter.com/ilRhzXrZqV

2019-09-01 10:34:10
拡大
8っちゃん @8ttyan

タッパーの自己言及式すごすぎるな…

2019-09-01 11:00:03
すきえんてぃあ@書け @cicada3301_kig

タッパーの自己言及式 vs ラマヌジャン

2019-09-01 15:54:48
n @StNiwa1030

タッパーの自己言及式→クワイン→無限後退→infinitisimってwiki君にぶっ飛ばされたけど面白かった

2019-09-01 15:56:12
しのみー @1125__rui

タッパーの自己言及式好き

2019-09-01 20:19:18
電子工作(見習中) @NcFYYbuai93s0SH

リツィートされてたので、タッパーの自己言及式をPythonで実行してみました 詳しく解説されているサイトが参考になりました 17で除算して、2進化された文字列を画像化するようです Pythonは大きな数値が扱えるのでこういう計算には楽ですね pic.twitter.com/XF2pudKJCY

2019-09-02 00:20:19
拡大
るふぁ @lpha_z

タッパーの自己言及式って、ただ k&1<<Nみたいなことやっているだけかぁ……

2019-09-02 05:37:58
クマシロ @kumasiro

タッパーの自己言及式読んでる・・。 note.mu/kumasiron/n/nf…

2019-09-02 06:11:20
シャッカ @hogextend

異常で良い / “タッパーの自己言及式 - Wikipedia” htn.to/h3k8B9SS4F

2019-09-02 07:41:04
地獄の猟犬 @takuya_nakayasu

デマじゃない?みたいな気持ちになった…デマじゃないんだろうけど / 他2件のコメント b.hatena.ne.jp/entry/s/ja.wik… “タッパーの自己言及式 - Wikipedia” (26 users) htn.to/YsVeVfJ5nc

2019-09-02 09:30:29