2016-10-25 4 views
0

Datalog에서 다른 변수의 각 가능한 값에 대해 변수 중 하나에 정확히 하나의 값이있는 사실에 대한 쿼리를 작성할 수 있습니까?Datalog에서 고유성 쿼리?

찾아 모든 X 하나의 X에 대한 당신이 계산 첫째로이 표현할 수있는 각 Y 일반 데이터 로그에서

답변

0

expr(X, Y)에를가하도록 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. 
+0

첫 x 째는 표준 Datalog입니까? 부정은 표준 기능입니까? –

+0

공식적인 표준은 없지만 내가 알고있는 모든 Datalog 변형에 부정이 지원되므로 표준 기능으로 간주 할 수 있습니다. 이 예제는 매우 기본적인 부정의 사용법입니다. 부정의 의미는 재귀에서 부정이 사용되는 경우에만 도전적이됩니다 (대부분의 시스템은 층화 부정이라고 불리우는 것을 구현합니다). 또는 부정으로 사용 된 변수가 규칙에 적극적으로 묶이지 않은 경우 (안전하지 않은 부정이라고 함). –