2

我希望能够在 ASP/cligo 中制定以下 FOL 语句:

∀ X. prop(X) ⇐ (∃ Y. ∀ V. ∃ A. 
                 (p(Y, V, A) ∧ q(X, V, A))
               )

两者的域XY给出dom/1。的域A由 给出domA/1。的域V1..n

对我来说,问题是混合量化。现在,当然,我可以扩展∀ V并得到如下内容:

prop(X) :- p(Y, 1, A_1), q(X, 1, A_1), domA(A_1),
           p(Y, 2, A_2), q(X, 1, A_2), domA(A_2),
           ...,
           p(Y, n, A_n), q(X, n, A_n), domA(A_n)

           dom(X), dom(Y).

但是,当我n直到运行时才知道(我将它作为参数传递给 cligo)时,这并不能很好地工作。

有没有办法用 cligo 方便又干净地做到这一点?还是应该改用 Python/Lua 脚本功能?如果是这样,怎么做?

4

1 回答 1

0

迟到总比没有好......我可能完全错了,但也许数数可以解决问题:

pq(X,Y,V) :- p(Y, V, A), q(X, V, A), dom(X), dom(Y), V=1..n, domA(A).
allpq(X,Y) :- {pq(X,Y,V):V=1..n} == n, dom(X), dom(Y).
prop(X) :- allpq(X,Y), dom(X), dom(Y).
于 2021-12-07T20:41:26.637 回答