正規化(lambdaの下での置換を含む)を「最適化」として使用する型付きlambda-calculus(非終端と暗黙の再帰の厄介な問題を除外する)の素朴なコンパイラを想像してみてください。プログラムを悪化させるコンパイル時の置換の例
ほとんどまたはすべての変数が1回だけ使用される単純なプログラムでは、正規化によってプログラムが短くて高速になります。
私にとっては、それは一般的には良いアイデアではないことは「明らかです」。つまり、正規化によって共有が減少するため、最適化のために悪化する用語があります。 2回の乗算
\x -> let a = x * x in a * a
との用語は、それらの3と
\x -> (x * x) * (x * x)
に "最適化" されます。
任意に悪化する例を作成するにはどうすればよいですか?正規化するとRAMがオーバーフローする可能性のある用語はありますか?
私たちは強い正規化を持つ型システムで作業しているので、発散することはできません。システムFの適切なサブセットにおいて、定数およびデルタルールを用いて計算される。
またはmul
のような定数を追加するための「フリー」アプローチでは、
\mul x -> let a = mul x x in mul a a
定数を追加する代わりに、これらは単に「実行時に提供される追加のパラメータ」です。
質問はSEコンピュータサイエンスに属しているようですが、IMOは本当にエントリーレベルなので、ここではもっと適切だと思います。
[CS。 se]は、エントリレベルの質問を含む、cs関連のあらゆる種類の質問のサイトです。 [cstheory.se]は、研究レベルの質問の場です。 –