logic-programming相关内容

Datalog vs CLIPS vs Prolog

与我在大学学习 Prolog 的程序员一样多,但只学过很少.我知道Prolog和Datalog密切相关,但Datalog更简单?另外,我相信我读到 Datalog 不依赖于逻辑子句的顺序,但我不确定为什么这是优势.CLIPS 应该是完全不同的,但它太微妙了,我无法理解.有人可以提供这些语言相对于其他语言的一般亮点吗? 解决方案 datalog 是prolog 的一个子集.datalog 携 ..
发布时间:2022-01-12 10:57:35 其他开发

纯 Prolog 图灵完备,如果是,为什么不能实现列表交集?

关于这个主题的维基百科部分是一团糟.它指出: Pure Prolog 基于图灵完备的一阶谓词逻辑 Horn 子句的子集.Prolog的图灵完备性可以通过模拟图灵机来展示: (强调) 然后它继续显示使用非 Horn 子句的代码(! 和 once): turing(Tape0, Tape) :-执行(q0,[],Ls,Tape0,Rs),反向(Ls,Ls1),附加(Ls1,Rs,磁 ..

使用不纯原语的 Prolog 谓词的纯度

我知道 var/1、nonvar/1 和 !/0 是不纯的原语,但它们的使用会使 每个使用它们的程序都不纯? 我写了下面的谓词 plus/3,它的行为就像它是纯粹的,或者至少这是我所声称的.谓词是说明性的,并非旨在高效. % nat(X) 如果 X 是自然数则为真nat(0).nat(X):- nonvar(X), !, X >0.nat(X):- nat(X1),X 是 X1 + 1.% ..
发布时间:2022-01-12 10:11:52 其他开发

Prolog 和 miniKanren 在逻辑编程方面的主要技术区别是什么?

如今,当我想阅读逻辑编程时,我总是会偶然发现两种“主要"方法: miniKanren,The Reasoned Schemer 中引入的一种迷你语言由于 core.logic 而在当下流行. Prolog,第一个“大"逻辑编程语言. 我现在感兴趣的是:两者之间的主要技术差异是什么?它们在方法和实现上是否非常相似,或者它们采用完全不同的逻辑编程方法?它们来自数学的哪些分支,理论基础是什 ..
发布时间:2022-01-12 10:10:45 其他开发

是“几乎纯"的Prolog 富有表现力?

@false 评论了 较早: 是的,您可以在没有 dif/2 的情况下实现图灵机.但是你甚至不能实现交集或类似的谓词. 假设我们确实扩展了纯 Prolog (Horn FOL + CWA + UNA) 与 call/N、dif/2、(=)/3,要在if_/3中使用,会不会还有差距?表现力,ie 定义微不足道的事物,例如,Scheme,但是在这种扩展的(几乎是纯的)Prolog 中更难说 ..

Java的嵌入式Prolog解释器/编译器

我正在开发一个 Java 应用程序,它需要执行一些复杂的逻辑规则推导作为其功能的一部分.我想用 Prolog 或其他一些逻辑/约束编程语言而不是 Java 来编写我的逻辑推导,因为我相信生成的代码会更简单且更易于维护. 我用谷歌搜索了 Prolog 上的嵌入式 Java 实现,发现其中有很多,每个都有很少的文档.我的(适度的)选择标准是: 应该可以嵌入到 Java 中(例如,可以与我的 ..

将`appendo`关系从smt2转换为python

最近我正在学习 SMT 求解器.虽然 SMT 求解器对我来说是一个新概念,但它让我想起了逻辑编程,例如Prolog 和 minikanren.所以我在SMT求解器中尝试了一个经典的逻辑编程示例. 示例是appendo 关系,我们可以向后执行它.即给定一个输出列表,返回所有可能的两个输入,当连接这两个输入列表时返回输出列表. 以下是appendo关系,我在z3/smt2求解器中实现: ..
发布时间:2021-10-04 20:38:50 Python

λProlog 拒绝假设的推理查询?

我怀疑 teyjus,λProlog 的主要实现,可能有点被遗弃,但 λProlog 是一个迷人的 Prolog,它应该让你使用高阶逻辑、假设推理和其他东西,这就是为什么我'我正在尝试使用它. 文件“example.sig": sig 示例.善良的人,语言类型.类型汉斯人.输入德语、法语、意大利语.类型等级人 ->哦.类型带人 ->语言 ->哦. 文件“example.mod": 模 ..
发布时间:2021-06-22 19:00:26 其他开发

NU-Prolog 和 Gödel 的逻辑和合理的“if-then-else"扩展

关于mercury 说明如下: 大多数 Prolog 变体中的 if-then-else 和否定结构都是不合逻辑且不合理的:它们会导致系统计算与被视为逻辑理论的程序不一致的答案.一些现有的逻辑编程系统,例如 NU-Prolog 和 Gödel,为这些 Prolog 结构提供了逻辑和合理的替代.不幸的是,这些系统通过运行时基础检查来加强安全性.这种效果可以将程序的运行时间增加任意大的系数;如果 ..
发布时间:2021-06-22 19:00:23 其他开发

是纯Prolog Turing-complete,如果是,为什么不能实现列表交集?

关于这个主题的维基百科部分是一团糟.它指出: Pure Prolog 基于一阶谓词逻辑 Horn 子句的子集,它是图灵完备的.Prolog 的图灵完备性可以通过使用它来模拟图灵机来展示: (强调) 然后它继续显示使用非 Horn 子句的代码(! 和 once): turing(Tape0, Tape) :-执行(q0,[],Ls,Tape0,Rs),反向(Ls,Ls1),追加( ..

是“几乎纯的"序言表达?

@false 评论 之前: 是的,您可以在没有 dif/2 的情况下实现图灵机.但是你甚至不能实现交集或类似的谓词. 假设我们确实扩展了纯 Prolog (Horn FOL + CWA + UNA) 和 call/N、dif/2 和(=)/3,在if_/3中使用,会不会还有差距?表现力,即在Scheme中定义的东西是微不足道的,但是在这种扩展的(几乎是纯的)Prolog 中很难表述吗? ..

Prova是通过Prolog编译器或Prolog解释器实现的吗?

我正在看用Java编写的Prolog系统Prova. https://prova.ws/ 但是不清楚它的实现是Prolog编译器还是Prolog解释器?我阅读了手册,但没有找到答案. 解决方案 有传言称Prova基于Mandarax.最新的 版本似乎正朝着SWI-Prolog 7的方向发展 即它支持字典和点表示法.另请参见此处: http://prova.ws/confluen ..
发布时间:2020-06-29 21:06:23 其他开发

在逻辑编程中,无用的是什么?

问题 “理性计划者"描述了如何使用miniKanren,它类似于Prolog,但是是类似Lisp的语言的库.这本书的“第一条诫命"是这样的: 转换值为布尔值的函数 转化为以价值为目标的函数,替换cond 与conde和unsest每个问题和答案. 通过将#s替换为#s,取消对#t(或#f)答案的嵌套 (或#u). 除非通过几个大致等效的示例,否则它们实际上并没有定义嵌套.最清楚的 ..
发布时间:2020-06-29 21:06:20 其他开发

在Prolog中交换列表的连续项

我正在尝试编写Prolog代码,该代码可以交换列表中的两个元素,但前提是它们彼此彼此连续.也就是说, conseq_swap(d, e, [a, g, d, e, f], X). 应给出: X = [a, g, e, d, f]. (d和e是连续的.) 但是, conseq_swap(a, e, [a, g, d, e, f], X). 应始终失败(a和e不连续 ..
发布时间:2020-06-29 21:06:17 其他开发

数据记录vs CLIPS vs Prolog

与许多程序员一样,我在大学学习过Prolog,但很少.我了解Prolog和Datalog紧密相关,但是Datalog更简单吗?另外,我相信我读到Datalog不依赖于逻辑子句的顺序,但是我不确定为什么这是优点. CLIPS完全不同,但是对我来说太微妙了.有人可以提供其他语言的一般亮点吗? 解决方案 datalog是prolog的子集.数据日志携带的子集有两点注意: 采用支持规则和查询 ..
发布时间:2020-06-29 21:06:10 其他开发

Python中的关系/逻辑编程?

我是一个长期的python开发人员,最近被介绍给Prolog.我喜欢对某些类型的任务使用关系规则的概念,并希望将其添加到我的曲目中. 在Python中是否有用于逻辑编程的好的库?我已经在Google上进行了一些搜索,但发现了以下内容: jtauber关于Relational_python的博客系列 很乐意与其他人进行比较...谢谢! -aj 解决方案 也许您应该在G ..
发布时间:2020-06-29 21:06:05 Python

使用不纯原语的Prolog谓词的纯度

我知道var/1,nonvar/1和!/0是不纯的基元,但是它们的使用是否会使使用它们的每个程序不纯? 我写了下面的谓词plus/3,它的行为就像是纯的,或者至少是我所声称的.谓词是说明性的,并非旨在提高效率. % nat(X) is true if X is a natural number nat(0). nat(X):- nonvar(X), !, X > 0. nat(X): ..
发布时间:2020-06-29 21:06:01 其他开发