ラムダ計算におけるニュートラル/ノーマル形式の直感的な説明


7

副次表現としてベータredexを含まない通常の用語と他の用語を区別することは可能です

data WithBound a = Var | Other a

data Normal a
  = Neutral (Neutral a)
  | Abstract (Normal (WithBound a))

data Neutral a
  = Variable a
  | Apply (Neutral a) (Normal a)

このプロパティが保持される理由について、直感的な説明はありますか?十分に長く見た後、どうやら完全に自明であるかもしれませんが、現時点ではすぐにはわかりません。

回答:


6

この特性がすぐに自明ではないことを私はあなたに安心させることができます。正規形のセットを記述/列挙しようとする場合、必要な主な観察は次のとおりです。

  • 抽象化は通常の形を保持します:if t 正常です、そうです λバツt

  • アプリケーションは通常のフォームを保持しませt そして あなた 正常です t あなた redexが含まれている可能性があります。

アプリケーションを実行するときにredexesを作成できない通常のフォームを特徴付けたいと思います。明らかに、これはtλ-抽象化。特に、私たちは取ることができますあなた それが通常の形である限り、私たちが望むものになること。

ために t、変数またはアプリケーションのいずれかが必要です。それ自体はすでに通常の形式です。これにより、便利な再帰的な定義が可能になりますt、これをニュートラルと呼びます:

t=バツ
または
t=t1 t2
t2 通常の形 t1 t2 また、通常の形、すなわち t1 中立的な用語でもあります。

しかし、これはまさにあなたの定義ですNeutral

このプロセスをさらに実行して、さらに弱い頭の拡張を許可する場合は、正規化(または強く正規化)項を正確に特徴付けることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.