繁体   English   中英

在Prolog中定义条件材料

[英]Defining the material conditional in Prolog

我一直试图适应Prolog和Horn条款,但从形式逻辑的过渡仍然感到尴尬和被迫。 我知道以标准形式提供所有东西都有好处,但是:

定义材料条件运算符的最佳方法是什么-->在Prolog中,当A = trueB = trueB = false时, A --> B成功? 也就是说, iffalse而没有else ,则if->then语句不会fail

真相表

另外,Horn条款的非显而易见的优点究竟什么?

在Prolog中定义材质条件运算符的最佳方法是什么?

AB只是要绑定到原子的变量truefalse ,这很容易:

cond(false, _).
cond(_, true).

但总的来说,没有最好的方法,因为Prolog没有提供适当的否定,只有作为失败的否定 ,这是非单调的。 最接近实际命题AB的经常是

(\+ A ; B)

试图证明A ,然后如果A 无法证明则继续B (这并不意味着由于封闭世界假设它是假的)。

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

另外,Horn条款的非显而易见的优点究竟是什么?

他们有一个简单的程序性阅读。 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 )时间内完成,使其成为一个非常差的排序程序。

另见这个问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM