あなたがいると仮定した場合 -calculusは、関数型プログラミング言語の良いモデルである、そして一つは考えることがあります。λ -calculusは時間の複雑さの一見単純な概念を持っている:ちょうど数カウントβ -reductionの手順を(λ X 。M )N → M [ N / x ]。λλβ(λ X 。M)N→ M[ N/ x]
しかし、これは良い複雑さの尺度ですか?
この質問に答えるには、そもそも複雑さの尺度が意味することを明確にする必要があります。1つの適切な答えは、Slotおよびvan Emde Boasの論文によって与えられます。適切な複雑さの尺度は、チューリングマシンを使用して定義される時間複雑さの標準的な概念と多項式の関係を持つ必要があります。換言すれば、「合理的な」コードがあるはずからλそのようないくつかの多項式のためのチューリングマシンへ-calculus用語Pは、それは場合は、各タームのためのMサイズの| M | :Mはp (| M |t r (。)λpM|M|Mβ削減ステップは、 t r (M )がチューリングマシンの p (| t r (M )|)ステップの値に減少するときに正確にステップします。p(|M|) βtr(M)p(|tr(M)|)
長い間、これがλ計算で達成できるかどうかは不明でした。主な問題は次のとおりです。
- 指数サイズの正規形(多項式のステップ数)を生成する用語があります。通常のフォームを書き留めるのに、指数関数的な時間がかかります。
- 選択した削減戦略は重要な役割を果たします。たとえば、多項式の数の並列βステップ(最適なλ減少の意味)で減少するが、その複雑さは非素数(指数関数より悪いことを意味する)である項のファミリーが存在します。
紙は、「ベータ削減は確かに、不変である B. AccattoliとU.ダルラゴはジャム複雑性クラスのことをエンコードする「合理的」を示すことによって、問題を明確にすることにより、」Pと仮定して、多項式時間関数の左端の最外による呼び出し名削減を。重要な洞察は、指数関数的な爆発は、適切な共有によって打ち負かされる可能性のある「面白くない」理由でのみ発生する可能性があるということです。言い換えれば、クラスPは、チューリングマシンのステップをカウントするか、(左端から外端へ)減少をカウントして定義するかに関係なく同じです。β
他の評価戦略がどのような状況にあるのか分かりません。同様のプログラムがスペースの複雑さのために実行されたことを私は知りません。