查询Datalog的唯一性?

时间:2016-10-25 13:37:11

标签: datalog

对于其他变量的每个可能值,Datalog是否可以为其中一个变量只有一个值的事实编写查询?

e.g。找到所有X,以便X

中每个Y只有一个expr(X, Y)

1 个答案:

答案 0 :(得分:1)

在简单的数据记录中,您可以通过首先计算具有多个X的Y,然后使用它来计算具有1 X的Y来表达这一点。

  problem(y) <- expr(x1, y), expr(x2, y), x1 != x2.
  exactly_one_opt1(y) <- expr(_, y), !problem(y).

大多数系统还支持可能是更有效的解决方案的聚合,但聚合语法不是标准的Datalog。我在这里使用LogiQL(LogicBlox Datalog)语法:

  count[y] = c <- agg<<c = count()>> expr(_, y).
  exactly_one_opt2(y) <- count[y] = 1.