【プログラミング言語とラムダ計算】5.2ISWIM約化

5.2ISWIMの削減

関数ISWIMはパラメーター値のみを受け取るため、最初にセットを定義する必要があります値セットV(またはUW)は、式セットのサブセットです。
ここに画像の説明を挿入します

特に、アプリケーション式は決して値ではなく、抽象化(関数など)は、その本体の形式に関係なく、常に値です。

コア減少関係ISWIMであるβ Vと同様、β、そのパラメータは、配下でなければならないVの代わりにM
ここに画像の説明を挿入します

パラメータをVのメンバーに制限し、ある程度、割り当ての順序を課します。例えば、((λx.1)(sub1λy.y))をすることができない1に減少βとV(ためsub1λy.y)はVのメンバーではありません 同様に、((λx.1)(sub11))は最初に((λx.1)0)に、次に1に減らす必要があります。

ISWIMにはη同様の関係はありませんこれは、プログラミング言語の実装では、通常、別のプログラミング言語の本体に適用されている関数が抽出されないことを反映しています。また、今後は、αを還元として扱うのではなく、比較する際に、一般的にα相当(= α)を使用します

関数適用に加えて、ISWIM削減ルールはプリミティブ操作も考慮する必要があります。そして、同じ原理でのbO n-抽象化(特定のセットを定義したとしても)、抽象プリミティブδに関連する縮小された操作δ各関係O N一定の値にマッピングされたプラスN基本。具体的には、次のδを選択します
ここに画像の説明を挿入します

βδを組み合わせることにより、完全に縮小された関係vが得られます
ここに画像の説明を挿入します

常に、→ vvマージが閉じられ、→→ v再帰的-転送タイプのクロージャ、= v対称が閉じられます。

演習5.1

使用→ ** V **すること(証明λw(。 - (W)⌈5⌉)⌈1⌉)((λxをX ⌈10⌉)λyzを(+ Z Y))の値に低減することができます。

回答:

λw( - (W)⌈5⌉)⌈1⌉)((λxをX ⌈10⌉)λyz。(+ Z Y))

** ** Vλw( - 。(⌈1⌉)⌈5⌉))(λyz。(+付き Y)⌈10⌉)

** ** Vλw( - 。()⌈5⌉)⌈1⌉)(λz。(+から⌈10⌉))

** **の( - ((λz。(+から⌈10⌉))⌈1⌉)⌈5⌉)

** v **(-(+⌈1⌉⌈10⌉)⌈5⌉)

** v **(-⌈11⌉⌈5⌉)

** v ** ⌈6⌉

おすすめ

転載: blog.csdn.net/qq_35714301/article/details/114240342