如何使用逻辑证明和prolog解决这个问题?

如何使用逻辑证明和prolog解决这个问题?,prolog,logic,artificial-intelligence,Prolog,Logic,Artificial Intelligence,共有3个房间,上面有以下告示 房间1:公主不在这个房间里。房间2:公主不在这个房间里。3号房间:公主不在2号房间 只有一种说法是正确的 请帮忙 看一看SWI序言的clpb库,它看起来像家庭作业,这只是用命题演算非常简单地说明。但除了任务之外,你仍然什么也不提供。没有自己的想法。我还强烈认为语句只有一个语句是正确的。是错误的,因为有一个解决方案(实际上是两个),其中所有语句都是正确的,这也是更有趣的。@sascha:没有“只有一个语句是正确的”约束,总共有4个不同的解决方案,但只有一种说法是正确的

共有3个房间,上面有以下告示

房间1:公主不在这个房间里。房间2:公主不在这个房间里。3号房间:公主不在2号房间

只有一种说法是正确的


请帮忙

看一看SWI序言的clpb库,它看起来像家庭作业,这只是用命题演算非常简单地说明。但除了任务之外,你仍然什么也不提供。没有自己的想法。我还强烈认为语句
只有一个语句是正确的。
是错误的,因为有一个解决方案(实际上是两个),其中所有语句都是正确的,这也是更有趣的。@sascha:没有“只有一个语句是正确的”约束,总共有4个不同的解决方案,但只有一种说法是正确的。也许你是对的,但你能详细说明吗?据我所知,有两种解决方案:3号房间的公主;3号房间没有公主。没有类似于存在的约束。@sascha:你绝对是对的:这些任务中有许多都是自然平滑的,可以用单纯形和其他著名的方法来解决。在CLP(B)中,检查
card/2
约束,以使用BDD有效地模拟“k中的n”。例如,在本例中,我使用:
?-sat(S1=:=~Room1)、sat(S2=:=~Room2)、sat(S3=:=~Room2)、sat(卡片([1]、[S1、S2、S3])。
获得:
S1=Room2、Room2=1、Room1=S2、S2=S3、S3=0
。正如您正确指出的,即使包含基数约束,这仍然允许至少2个解决方案!因此,这是一个相当粗心大意的任务。看看SWI序言的clpb库,它看起来像家庭作业,这只是用命题演算非常简单地说明。但除了任务之外,你仍然什么也不提供。没有自己的想法。我还强烈认为语句
只有一个语句是正确的。
是错误的,因为有一个解决方案(实际上是两个),其中所有语句都是正确的,这也是更有趣的。@sascha:没有“只有一个语句是正确的”约束,总共有4个不同的解决方案,但只有一种说法是正确的。也许你是对的,但你能详细说明吗?据我所知,有两种解决方案:3号房间的公主;3号房间没有公主。没有类似于存在的约束。@sascha:你绝对是对的:这些任务中有许多都是自然平滑的,可以用单纯形和其他著名的方法来解决。在CLP(B)中,检查
card/2
约束,以使用BDD有效地模拟“k中的n”。例如,在本例中,我使用:
?-sat(S1=:=~Room1)、sat(S2=:=~Room2)、sat(S3=:=~Room2)、sat(卡片([1]、[S1、S2、S3])。
获得:
S1=Room2、Room2=1、Room1=S2、S2=S3、S3=0
。正如您正确指出的,即使包含基数约束,这仍然允许至少2个解决方案!因此,这是一项相当粗心大意的任务。