Ищете уникальность в Datalog?

Возможно ли в Datalog написать запрос для фактов, где есть ровно одно значение для одной из переменных, для каждого возможного значения других переменных?

например найти все X такой, что есть только один X для каждого Y в expr(X, Y)

1 ответ

В простом Datalog вы можете выразить это, сначала вычислив Y, которые имеют более одного X, а затем используя это для вычисления Y с 1 X.

  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.
Другие вопросы по тегам