首页 > 解决方案 > 数据记录中的不安全表达式

问题描述

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

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

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

标签: databaselogicdatalog

解决方案


Datalog 中的安全要求旨在防止无限结果。如果你有一个变量出现在头部并且只在体内取反,那么它可以绑定到无限多个值,这显然是一个问题。

安全的具体要求很难精确制定,所以通常你会看到这些要求被简化为“每个变量都必须积极地发生”。这比需要的限制更多。

对该问题的最丰富的答案将是该规则在技术上是不安全的,但它没有无限的结果。一些 Datalog 引擎将允许此规则并返回有限结果。


推荐阅读