読者です 読者をやめる 読者になる 読者になる

ジョセフの日記

Haskellのこととか日常のこととか

ふぃっしゅ数バージョン5

Haskell

バージョン3の方法が思いつかなかったので、バージョン5から作ることにしました。
なかなか複雑な定義なのでちゃんと書けているかどうかは少し自信がないです。
ふぃっしゅ数バージョン5及び{\rm m}(n)変換について詳しくは下のリンクを参照してください。
ja.googology.wikia.com
ja.googology.wikia.com

今回の{\rm m}(n)変換が上手く行っていればバージョン3の{\rm s}(n)変換も書けます。

あまりにゴチャゴチャしているので、このプログラムの{\rm m}(n)変換について説明を追記しておきます。
まず一つ目に、非負整数リスト[a_n,a_{n-1},\ldots,a_2,a_1]の要素がすべて1以上のとき、このリストは m^{a_n}(n) m^{a_{n-1}}(n-1) \ldots m^{a_2}(2) m^{a_1}(1) (x)と対応しています。

二つ目に、非負整数リストのリスト[[a_i,\ldots,a_1],[b_j,\ldots,b_1],\ldots,[l_k,\ldots,l_1]]の要素の要素がすべて1以上のときは
 m^{a_i}(i) \ldots m^{a_1}(1) \biggl(m^{b_j}(j) \ldots m^{b_1}(1) \Bigl (\ldots\bigl(m^{l_k}(k) \ldots m^{l_1}(1) (x)\bigr)\ldots \Bigr)\biggr)
と対応しています。見辛いです。

三つ目に、非負整数リストのリストの最後の要素は引数xをとり次のように変わります。
[\ldots, [a_n,a_{n-1},\ldots,a_2,a_1]](x)
 = [\ldots, [a_n-1,a_{n-1},\ldots,a_2,a_1],\ldots , [a_n-1,a_{n-1},\ldots,a_2,a_1]](x)
(x個の[a_n-1,a_{n-1},\ldots,a_2,a_1])


そして、非負整数リストの要素に0以下の要素があればそれは切り詰められます。


{\rm m}(n)変換についての幾つかの実行結果は以下の通りです。(入力と同等の変換を示しています。)
{\rm m}(2){\rm m}(1) (2) = 256
{\rm m}^2(1) (2) = 256
{\rm m}^2(1) (3) = 443426488243037769948249630619149892803

ふぃっしゅ関数バージョン5についての実行結果は以下の通りです。
{\rm F_5}(1) = 1
{\rm F_5}(2) = 256

今回作ったプログラムです。