用语法表示绑定变量,尤其是避免捕获替换表示绑定变量的问题是众所周知的,并且有许多解决方案:具有alpha等价性的命名变量,de Bruijn索引,局部无名,名词集等。
但是似乎还有另一种相当明显的方法,尽管如此,我仍未在任何地方使用它。也就是说,在基本语法中,我们只有一个“变量”术语,写为,然后分别给出了一个函数,该函数将每个变量映射到其作用域内的绑定器。所以 -term like
将被写为,该函数会将第一个映射到第一个,将第二个映射到第二个。因此,它有点像de Bruijn索引,只是在您评估一个函数来查找相应的联编程序时不必“计数 s”。(如果在实现中将其表示为数据结构,我会考虑为每个可变项对象配备一个指向相应绑定项对象的简单指针/引用。)
显然,这对于在页面上编写语法以供人类阅读来说并不明智,但是de Bruijn索引也不是。在我看来,从数学上讲,它是完全有意义的,尤其是它使避免捕获的替换变得非常容易:只需替换您要替换的术语并采用绑定函数的并集即可。的确,它没有“自由变量”的概念,但是(再次)de Bruijn索引也没有。在任何一种情况下,包含自由变量的术语都表示为一个术语,其前面带有“上下文”联编程序列表。
我是否缺少某些内容,并且由于某种原因该表示不起作用?是否有问题使它比其他问题严重得多,因此不值得考虑?(我现在唯一能想到的问题是术语集(及其绑定功能)不是归纳定义的,但这似乎并不是无法克服的。)或者实际上是否有使用它的地方?