计算机功能必须满足哪些要求才能被考虑"单调"?

时间:2017-04-10 03:44:09

标签: prolog logic logical-purity

计算机功能/程序/谓词必须满足哪些要求才能考虑?#34;单调"

Let A be some thing ,
Let B be some thing ,
Let R be a monotonic relationship between A and B ,
Let R_ be a non-monotonic relationship between A and B ,
Let R become false if R_ is true ,
Let R_ become true if R is false ,
Let C be a constraint in consideration of R ,
Let C become false if R_ is true ,
Let D be the collection of constraints C (upon relationship R) .

**What is D ?**

我已经回顾了一些文献,例如:维基百科文章" monotonic function"。 我最感兴趣的是我可以应用的一套实用标准 务实地参与计算机编程。 在创建和设计我的函数时,我应该遵循哪些提示和最佳实践,以便它们更可能是单调的"?

1 个答案:

答案 0 :(得分:4)

逻辑编程以及逻辑中,“monotonic”分类几乎总是指monotonicity of entailment

例如在经典的一阶逻辑中遇到这个基本属性:当你能够从一组子句中导出一个结果时,你也可以 在你时得到结果扩展子句集。相反,删除一个条款并不会带来以前案例的后果。

在Prolog的子集中,从声明的角度来看,此属性成立。因此,我们有时将其称为Prolog的纯单调子集,因为杂质与破坏单调性的构造不完全一致。

蕴含单调性是推理逻辑程序的几种方法的基础,有时甚至是必要的条件,特别是声明性调试

请注意,Prolog有一些语言结构可能阻止一般的推理。例如,考虑以下Prolog程序:

f(a).
f(b).
f(c).

以下查询:

?- setof(., f(X), [_,_]).
false.

现在我删除程序中的一个事实,我用 strikethrough 文字表示:

f(a) :- false.
f(b).
f(c).

如果Prolog程序是单调的,那么以前失败的每个查询现在肯定会失败更多,因为我已经删除了以前是这样的。

但是,我们现在有:

?- setof(X, f(X), [_,_]).
true.

因此,setof/3违反单调性的谓词示例!