Performance 一阶公式中变量的有效重命名

Performance 一阶公式中变量的有效重命名,performance,algorithm,variables,formula,substitution,Performance,Algorithm,Variables,Formula,Substitution,edit2:考虑到de Bruijn指数可能更容易使用,我重新制定了许多公式的内部表示法,以使用混合的de Bruijn表示法,如Connor McBride的论文所述。这大大简化了一些关于必须处理α-等价的语法的算法,但使其他算法更加复杂。在任何情况下,这意味着自由变量可以分开标准化,绑定变量具有由其绑定距离表示的规范名称。这并不完全令人满意,但至少是一个更好的开始 edit1:我意识到问题约束不足以保证变量的标准化。特别是,量词的迭代意味着必须首先将活页夹中的变量标准化。因此,对于需要对每个

edit2:考虑到de Bruijn指数可能更容易使用,我重新制定了许多公式的内部表示法,以使用混合的de Bruijn表示法,如Connor McBride的论文所述。这大大简化了一些关于必须处理α-等价的语法的算法,但使其他算法更加复杂。在任何情况下,这意味着自由变量可以分开标准化,绑定变量具有由其绑定距离表示的规范名称。这并不完全令人满意,但至少是一个更好的开始

edit1:我意识到问题约束不足以保证变量的标准化。特别是,量词的迭代意味着必须首先将活页夹中的变量标准化。因此,对于需要对每个抽象语法树进行多次传递的解决方案,可能无法避免。使用de Bruijn指数的建议通常是一个相当好的解决方案,但如果不打破符号及其实用性,它将很难实现标准化

原件: 对于任意一阶公式φ,设V是由自然数索引的无限变量集,fv(φ)表示φ的自由变量,bv(φ)表示φ的有界变量。我试图解决的问题如下

设φ和ψ为一阶公式。求替换θ1和θ2,使得:(a)fv(θ1(φ)),fv(θ2(φ)),bv(θ1(φ)),和bv(θ2(ψ))是不相交的;(b) fv(θ1(φ))、fv(θ2(φ))、bv(θ1(φ))和bv(θ2(ψ))的并同构于自然数的初始段;和(c)bv中的所有变量(θ1(φ))小于bv中的所有变量(θ2(ψ))小于fv中的所有变量(θ1(ψ))小于fv中的所有变量(θ2(ψ))

困难在于公式中有界变量和自由变量的集合不一定是不相交的,量词可能会被迭代,这意味着简单的替换会产生意外的变量捕获,等等

下面是一个低效的解决方案。给定φ和ψ,首先对φ和ψ的自由变量进行标准化,使标准化项中的所有自由变量大于最大的有界变量加上φ和ψ中的有界算子数,得到φ'和ψ'。然后从x0开始重命名φ’的绑定变量。然后是ψ′的界变量。然后是φ′的自由变量。然后是ψ’的自由变量


我想要的是一种更有效的满足问题约束的方法。也就是说,解决方案不需要重命名自由变量的初始标准化。有效地将变量标准化不是问题。然而,额外的限制给我带来了麻烦。

一定要使用De Bruijn idices。另外,请注意,它们都是积极的。然后你可以在统一过程中使用负数。如果要使用新索引,请使用全局索引。

如何表示这些公式?您正在使用哪些编程语言?您是否可以轻松访问量词、子公式、术语、变量和运算符?还是只有一根弦?什么是ω的初始段?我能回忆起的唯一ω(除了角量等)与Cantor集合有关。公式表示为代数数据类型,这意味着我可以访问它们的抽象语法树。然而,这个问题比我的实现更普遍。理想情况下,一个解决方案就是对两个公式的抽象语法树进行一次操作或一组操作。@chac:我编辑了这篇文章,使其更加清晰,将“…ω的初始段”改为“…自然数的初始段”-即,如果集合中有n个变量,那么第一个变量的索引为0,最后一个变量的索引为n-1。您是否考虑过用De Bruijn ID表示变量?