找到大小为 2 的谓词的最低元素并确保只有一个最低元素?

Find lowest element of predicates of the size 2 and ensure that there is only one lowest element?

我正在研究一段编码,它可以找到网格中坐标最低的单元格。此单元格将用作路径的起点。单元格是用谓词 cell(X,Y) 定义的。

isLower(X,Y,F,G) :- cell(X,Y), cell(F,G), X<=F, Y<=G.   

first(X,Y) :- cell(X,Y), not black(X,Y), cell(F,G), not black(F,G), cell(A,B), not black(A,B), isLower(X,Y,F,G), not isLower(A,B,X,Y).

我只想拥有一个第一个单元格。我的问题是 ASP 开始给我一堆单元格,因为 first(X,Y) 是一个谓词并且 ASP 会尝试生成尽可能多的单元格。

我如何告诉程序它应该只找到最低的元素(即具有最小坐标的单元格)?我怎样才能强制它只有一个单元格?

目前还不清楚你到底想达到什么目的,但如果 cell/2 是事实,我会推荐这样的规则:

first(X',Y') :- (X',Y') = #min {(X,Y) : cell(X,Y)}.