问题 图表DB与Prolog(或miniKanren)


最近我一直在研究像Neo4j这样的图形数据库,以及Prolog和miniKanren中的逻辑编程。根据我到目前为止所学到的,它们都允许指定事实和它们之间的关系,并且还查询结果系统以进行一些选择。所以,实际上我看不出它们之间有太大的区别,因为它们都可以用来构建图形并查询它,但使用不同的语法。但是,它们是完全不同的软件。

除了数据库可能提出更多时空有效存储技术的技术性,除了像miniKanren这样的微小逻辑核心更简单和可嵌入之外,图形数据库和逻辑编程语言之间的实际区别是什么,如果它们都只是一个图形数据库+查询API?


2267
2018-03-22 09:44


起源

Prolog是一个 编程语言而图形数据库只是一个数据库。只有数据库才能完成Prolog所能完成的大部分工作。例如,构建一个类似于为SWI-Prolog提供支持的Web服务器 网站 可以使用Prolog,但只使用数据库引擎是不可能的。 - mat
将存储过程和触发器添加到图形数据库中,加载一些解析为归属AST的源代码(原生图形),您将获得db执行或转换此AST - Dmitry Ponyatov


答案:


不,这些东西和neo4j所体现的逻辑编程是完全不同的。

在一个层面上,你是对的,它们在概念上都相当于图形存储和图形查询。但是对于逻辑编程,它只是概念上的图形查询,并不能保证它实际存储的方式(neo4j的存储方式)。

其次,通过逻辑编程,您通常会尝试建立 喇叭条款 允许您推理大量数​​据。你可以把喇叭条款想象成一个简单的规则,比如“如果一个人是男性,并且是生物学孩子的直接祖先,则暗示这个人是父亲”。在使用neo4j的密码中,您将描述一个您希望匹配的图形模式,从而产生数据,例如:

 MATCH (p:Person)-[:father*]->(maleAncestor:Person)
 RETURN maleAncestor

这告诉我们遍历图表 father 关系,并回归男性祖先。在逻辑编程语言中,你不会这样做。你可以指定一下 a 作为...的父亲 b 意思是 a 是男性,和 a 是...的祖先 b。对于所有有效的a / b配对,这将隐含地和传递地说明。然后你会问一个问题,“谁是男性祖先”?然后,编程环境将通过利用您的规则来回答这个问题。这将通过与我上面指定的密码非常相似的数据构建遍历的效果,但是您了解数据和构建遍历的方式完全不同。

逻辑编程语言通常可以通过 谓词解析。像cypher这样的图形查询语言通过模式匹配和显式路径指定的组合来工作。他们是非常不同的。


12
2018-03-22 13:42



很好的答案......我发生了两件事情:(1)demorgan规则将disjunction转换为含义,因此任何一组horn子句应该与某些有向图同构,其中所有箭头都是暗示(这可能适合于neo db)。 (2)解释neo数据库的元图产生节点标签,关系类型和属性之间的关系,这些关系可以很容易地在形式逻辑中表示并由推理器处理。我正在做的一点就是,虽然不同,但图形查询和逻辑编程是兼容的并且可能是互补的 - smartcaveman
同意,它们是兼容的,并且是互补的,因为在约束模式neo4j图上实现推理器会相对简单。但是,大多数人在选择一种方法或另一种方法时,会隐含地选择一种特定的代码/数据思维模型。他们 可以 触摸,但他们通常不会。 - FrobberOfBits
对于Prolog的N-ary谓词看超图 - 他们看起来更原生的表示 - Dmitry Ponyatov