您如何编写以下算法?
想象一下这样的“事实”列表,其中字母代表绑定到数值的变量:
x = 1
y = 2
z = 3
a = 1
b = 2
c = 3
a = x
b = z
c = z
这些“事实”显然不一定都是“真实的”:b=z 而 b=2 和 z=3 是不可能的。如果 b=z 或 b=2 被删除,所有事实都将是一致的。如果 z=3 并且 b=z 或 c=z 被删除,那么所有事实都将是一致的,但会比上面少一个事实。该集合包含许多这样的一致子集。例如,a=1、b=2、c=3 是一致的子集,许多其他子集也是如此。
在此示例中,两个一致子集大于任何其他一致子集:
x = 1
y = 2
z = 3
a = 1
b = 2
c = 3
a = x
c = z
和
x = 1
y = 2
z = 3
a = 1
c = 3
a = x
b = z
c = z
使用适当的编程语言(我在想 PROLOG,但也许我错了)你将如何处理包含一致和不一致事实的大集合,然后输出最大可能的一致事实子集(或多个子集,如上面的例子)?