我们正在实施诊断工具,用于解释纯单调 Prolog 程序中意外的普遍不终止——基于故障切片的概念。
正如论文“本地化和解释带有故障片的非终止逻辑程序的原因”中所介绍的那样,在许多程序点添加目标false/0
以减少解释候选的程序片段大小(同时仍然保留非终止)。
到目前为止,一切都很好......所以我的问题1来了:
为什么有 N 个目标的子句中有 N+1 个程序点?
或者,更准确地说:
为什么N分不够?我们是否需要第 (N+1) 个程序点?
难道我们不能把它转移
false
到关注谓词的每次使用上吗?此外,我们知道程序片段仅用于查询,例如
?- G, false.
脚注 1:我们假设每个事实foo(bar,baz).
都被视为规则。foo(bar,baz) :- true.