我想在一些可能被称为完全声明的Horn logic(或完全声明的Prolog)中形式化一些知识并执行查询。任何人都可以提供一些如何实施它的指导方针吗?我简要回顾一下上面链接中的精细描述:
正式语言是Prolog的核心语言:#34;程序"是Prolog中的一组规则和事实(包括函数和变量,基本上只包含用户定义的谓词)。
然而,与Prolog相反,我正在寻找一个完整的逻辑程序标准声明语义 - 最简单的Herbrand模型(即归纳定义的基础术语集)。在逻辑编程的理论工作中,这通常是研究的对象,众所周知,可以获得对查询的完整和完整的答案(例如,在递归 - 可枚举的意义上),例如,使用SLD解析符合以下条件:
我正在寻找一种基于现有功能的简洁实现,而不是发明轮子。我看到的两个更有希望的方向是将它作为Prolog的元解释器实现,或者作为一些定理证明器的一部分。任何在这些领域具有实践知识的人都能提供一些如何实施它的指导方针吗?可以在miniKanren中轻松实现吗?
我的意图是以完全陈述的方式形式化一些知识。这种形式化的关键特征是它恰好对应于(单调)归纳的数学概念,因此知识及其属性可以通过归纳论证轻易推理出来。
答案 0 :(得分:7)
在Prolog的几行中实现Horn逻辑的证明是一项简单的练习。从Vanilla Meta-interpreter开始,然后修改它以使用标准unify_with_occurs_check/2
谓词进行所有统一,并使用完整的搜索过程 - 迭代加深深度优先搜索是最简单的实现。
请参阅@ mat的页面A Couple of Meta-interpreters in Prolog获取一些灵感。
答案 1 :(得分:2)