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

What are the requirements a computer function must meet to be considered "monotonic"?

计算机 function/procedure/predicate 必须满足什么要求才能被考虑 "monotonic"?

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”。 我最感兴趣的是一套实用的标准,我可以在以下情况下应用 务实地参与计算机编程。 在创建和设计我的函数时,我应该遵循哪些技巧和最佳实践,以便它们更有可能 "monotonic"?

逻辑编程中,也在逻辑中,分类"monotonic"几乎总是指monotonicity of entailment .

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

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

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

请注意,Prolog 有几种语言结构,通常可以防止 这种推理。例如考虑以下 Prolog 程序:

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

以及以下查询:

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

现在我从程序中删除 一个事实,我用删除线 text:

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

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

但是,我们现在有:

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

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