次のアルゴリズムをどのようにプログラムしますか?
このような「事実」のリストを想像してみてください。文字は数値にバインドされた変数を表します。
x = 1
y = 2
z = 3
a = 1
b = 2
c = 3
a = x
b = z
c = z
これらの「事実」がすべて「真実」であるとは限らないことは明らかです。b=2 および z=3 の場合、b=z は不可能です。b=z または b=2 のいずれかが削除された場合、すべての事実は一貫しています。z=3 で、b=z または c=z のいずれかが削除された場合、すべての事実は一致しますが、上記よりも事実が 1 つ少なくなります。このセットには、そのような一貫したサブセットが多数含まれています。たとえば、a=1、b=2、c=3 は一貫したサブセットであり、他の多くのサブセットも同様です。
この例では、2 つの一貫したサブセットが他のどの一貫したサブセットよりも大きくなっています。
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 を考えていますが、間違っているかもしれません) を使用して、一貫性のある事実と一貫性のない事実を含む大きなセットをどのように処理し、一貫性のある事実の可能な最大のサブセット (または次のような複数のサブセット) を出力しますか?上記の例)?