バインドされた変数を構文で表す問題、特にキャプチャ回避置換の問題はよく知られており、いくつかの解決策があります。
しかし、別のかなり明白なアプローチがあるようです。それにもかかわらず、私はどこでも使用されていません。つまり、基本構文では、「」と書かれた「変数」という用語が1つだけあり、その後、各変数をスコープ内のバインダーにマッピングする関数を個別に指定します。だから、λのような-termは、
と書かれます。(λ 。∙ ∙ )、および機能は、最初のマップになる∙を最初にλ及び第∙第二のλ。したがって、de Bruijnインデックスのようなもので、対応するバインダーを見つけるために用語を終了するときに「λsをカウントする」だけでなく、関数を評価するだけです。(これを実装のデータ構造として表す場合、各変数用語オブジェクトに、対応するバインダー用語オブジェクトへの単純なポインター/参照を装備することを考えます。)
明らかに、これは人間が読むためのページに構文を書くのには賢明ではありませんが、どちらもde Bruijnインデックスではありません。数学的には完全に理にかなっているように思えます。特に、キャプチャ回避の置換は非常に簡単になります。置換する用語をドロップするだけで、バインディング関数を結合できます。それは「自由変数」の概念を持っていないのは事実ですが、それから(再び)de Bruijnインデックスも実際にはありません。どちらの場合でも、自由変数を含む用語は、「コンテキスト」バインダーのリストが前にある用語で表されます。
私は何かを見逃していますか、この表現が機能しない理由はありますか?他の問題よりもさらに悪化させ、検討する価値がない問題はありますか?(私が今考えることができる唯一の問題は、用語のセットが(それらの結合機能と一緒に)帰納的に定義されていないということですが、それは乗り越えられないようではありません。)または実際に使用されている場所はありますか?