Kin*_*ken 5 logic prolog logical-purity
计算机功能/过程/谓词必须满足哪些要求才能被视为“单调”?
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 ?**
Run Code Online (Sandbox Code Playgroud)
我查阅了一些文献,例如维基百科文章“单调函数”。我最感兴趣的是在实际参与计算机编程时可以应用的一组实用标准。在创建和设计我的函数时,我应该遵循哪些提示和最佳实践,以便它们更可能是“单调的”?
在逻辑编程中,以及在逻辑中,“单调”分类几乎总是指蕴含的单调性。
例如,在经典的一阶逻辑中会遇到这个基本属性:当您能够从一组子句中导出结果时,您也可以在扩展子句集时导出结果。相反,删除子句不会带来以前不存在的后果。
在Prolog的纯子集中,从声明的角度来看,这个属性也成立。因此,我们有时将其称为Prolog的纯 单调子集,因为杂质与破坏单调性的构造并不完全一致。
蕴涵的单调性是几种推理逻辑程序的方法的基础,有时甚至是必要条件,特别是声明式调试。
请注意,Prolog 有几种语言结构,通常可以防止这种推理。例如,考虑以下 Prolog 程序:
F A)。 f(b)。 f(c)。
以及以下查询:
?- setof(., f(X), [_,_])。 错误的。
现在我从程序中删除了一个事实,我用删除线文本表示:
f(a) :-假。f(b)。 f(c)。
如果 Prolog 程序是单调的,那么以前失败的每个查询现在肯定会更加失败,因为我已经删除了以前的情况。
但是,我们现在有:
?- setof(X, f(X), [_,_])。 真的。
所以,setof/3
是一个违反单调性的谓词的例子!