[英]Defining the material conditional in Prolog
我一直试图适应Prolog和Horn条款,但从形式逻辑的过渡仍然感到尴尬和被迫。 我知道以标准形式提供所有东西都有好处,但是:
定义材料条件运算符的最佳方法是什么-->
在Prolog中,当A = true
且B = true
或B = false
时, A --> B
成功? 也就是说, if
为false
而没有else
,则if->then
语句不会fail
。
另外,Horn条款的非显而易见的优点究竟是什么?
在Prolog中定义材质条件运算符的最佳方法是什么?
当A
和B
只是要绑定到原子的变量true
和false
,这很容易:
cond(false, _).
cond(_, true).
但总的来说,没有最好的方法,因为Prolog没有提供适当的否定,只有作为失败的否定 ,这是非单调的。 最接近实际命题A
和B
的经常是
(\+ 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.