gpt4 book ai didi

prolog - 在 Prolog 中定义 Material 条件

转载 作者:行者123 更新时间:2023-12-04 12:42:04 27 4
gpt4 key购买 nike

我一直在尝试适应 Prolog 和 Horn 子句,但是从形式逻辑的过渡仍然感到尴尬和被迫。我知道将所有内容都采用标准格式有好处,但是:

什么是最佳 定义物质条件运算符的方法-->在 Prolog 中,其中 A --> B成功时 A = trueB = trueB = false ?也就是说,if->then不属于 fail 的声明当iffalse没有 else .

truth table

另外,Horn 子句的不明显优势到底是什么?

最佳答案

What is the best way to define the material conditional operator --> in Prolog



AB只是要绑定(bind)到原子的变量 truefalse , 这很简单:
cond(false, _).
cond(_, true).

但总的来说,没有最好的方法,因为 Prolog 没有提供适当的否定,只有 negation as failure ,这是非单调的。最接近实际命题 AB经常
(\+ A ; B)

试图证明 A ,然后转到 B如果 A不能被证明(这并不意味着由于 closed-world assumption 而它是错误的)。

然而,在 Prolog 中应谨慎使用否定。

Also, what exactly are the non-obvious advantages of Horn clauses?



他们有一个简单的程序阅读。 Prolog 是一种编程语言,而不是定理证明器。可以编写具有明确逻辑含义的程序,但它们仍然是程序。

要查看差异,请考虑经典的排序问题。如果 L是一个没有重复的数字列表,那么
sort(L, S) :-
permutation(L, S),
sorted(S).
sorted([]).
sorted([_]).
sorted([X,Y|L]) :-
X < Y,
sorted([Y|L]).

是对 S 含义的逻辑规范包含 L 的元素按排序顺序。但是,它也有一个程序含义,即:尝试 L的所有排列。直到你有一个它排序。在最坏的情况下,这个过程会贯穿所有 n!排列,即使排序可以在 O(n lg n) 时间内完成,这使它成为一个非常糟糕的排序程序。

另见 this question .

关于prolog - 在 Prolog 中定义 Material 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13571989/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com