结合内置和符号约束的函数式与逻辑式编程
1. 引言
函数式逻辑编程(FLP)旨在将函数式编程和逻辑式编程的优良特性融合到一个范式中。在许多FLP方法里,程序被视为基于构造器的条件重写系统。像CRWL框架就用合适的基于构造器的重写逻辑替代了经典等式逻辑,能很好地表达懒函数、部分函数和可能的非确定性函数的归约行为。
不过,多数FLP方法基于自由构造器,而在某些应用中,用非自由构造器表示数据更方便,因为会有相应的等式规范。已有研究对CRWL框架进行了扩展,探讨了具有多态代数类型的FLP通用框架。其中,多重集是一个有趣的例子,它在很多场景中都很有用,比如Gamma编程模型或动作与变化问题。
同时,很多问题涉及特定领域的计算,如实数、布尔函数或有限域,基于构造器的方法在这些领域并不适用。逻辑编程领域的约束逻辑编程范式及其不同实例,如CLP(R)语言,在这方面做出了重要贡献。
我们的目标是将多态代数类型和约束的表达能力融合到一种名为SETA的语言中,它可看作已有框架的扩展实例。SETA语言的独特之处在于,它仅考虑多重集构造器这一非自由构造器,同时纳入了原始“内置”数据(实数)、对这些数据的约束以及对构造器项(特别是多重集)的“符号”约束,包括相等、不等、成员关系和非成员关系。我们为SETA程序开发了证明论和模型论语义(包括自由项模型的存在性),并通过结合懒窄化、模多重集等式公理的合一和约束求解的目标求解演算,提出了操作语义。这种懒函数、多重集、算术约束和符号约束的组合在其他相关声明式语言中并不常见,SETA的潜在应用范围非常广泛。
2. SETA语言
SETA语言处理实数,其呈现基于两个层次:原始层和符号层。
超级会员免费看
订阅专栏 解锁全文
1028

被折叠的 条评论
为什么被折叠?



