数据日志中的不安全表达式



为什么这个目标被认为是不安全的?

MANAGER(Name) :- WORKER(Name, Age, _ ), ¬ SUBORDINATE (_, Name), Age <= 40

我们的老师说这是因为 SUBORDINATE 被否定,所以它不能有未定义的 (_( 空格,但对我来说这个表达似乎是逻辑。 有人可以帮助我吗?

数据记录中的安全要求旨在防止无限的结果。如果你有一个变量出现在头部,只在身体中否定,那么它可以绑定到无限多个值,这显然是一个问题。

对安全的具体要求很难精确制定,因此通常您会看到要求简化为"每个变量都必须积极发生"。这比需要的限制要多一些。

这个问题最有信息量的答案是,该规则在技术上是不安全的,但它没有无限的结果。一些数据日志引擎将允许此规则并返回有限结果。

这个规则是完全安全的,它不会产生无限的关系。这是您正在使用的数据记录引擎的实现缺陷。

通常,处理_的一种简单方法是将其转换为新变量。这使得引擎的实现变得容易,但可能是此子句引发错误的原因。如果它是一个变量,那么SUBORDINATE的第一个参数不可能是无限数量的值。

最新更新