Logic 巴伯悖论的合金解决方案仍然不一致

Logic 巴伯悖论的合金解决方案仍然不一致,logic,alloy,Logic,Alloy,众所周知,如果有多个理发师可以互相剃须,那么理发师悖论就解决了 本规范是一致的: sig Man {shaves: set Man} some sig Barber extends Man {} fact { Barber.shaves = {m: Man | m not in m.shaves} } run { } for 4 sig Man { shavedMen : set Man } fact { # {barber:Man | barber.shav

众所周知,如果有多个理发师可以互相剃须,那么理发师悖论就解决了

本规范是一致的:

 sig Man {shaves: set Man} 
 some sig Barber extends Man {} 
 fact {   
   Barber.shaves = {m: Man | m not in m.shaves} 
 } 
 run { } for 4
sig Man {
 shavedMen : set Man
}
fact {
 # {barber:Man | barber.shavedMen = {m: Man | m not in m.shavedMen} } > 1
}
run {} for 4
然而,以下内容尽管看起来相当,但仍然不一致:

 sig Man {shaves: set Man} 
 some sig Barber extends Man {} 
 fact {   
   Barber.shaves = {m: Man | m not in m.shaves} 
 } 
 run { } for 4
sig Man {
 shavedMen : set Man
}
fact {
 # {barber:Man | barber.shavedMen = {m: Man | m not in m.shavedMen} } > 1
}
run {} for 4

为什么?

在约束的第一个事实中: 所有理发师剃过胡子的人都是不自己剃的人

编辑 我对第二个事实的解释显然不够清楚。
你说,如果一个男人刮胡子的那组人等于所有不刮胡子的人(包括他在内,这就是不一致的原因,这就是这个问题的全部乐趣)。

首先,你约束: 所有理发师剃过胡子的人都是不自己剃的人

编辑 我对第二个事实的解释显然不够清楚。
你说,如果一个男人刮胡子的人数与所有不刮胡子的人的人数相等(包括他在内,这就是不一致的原因,这就是这个问题的全部乐趣所在)。

我明白了。那么为什么第二个不一致呢?谢谢,洛伊奇!在第二个例子中,我说理发师的数量不止一个(事实上最外面的操作符是>)。这本应该使规范保持一致(就像第一个规范一样),但事实并非如此。知道为什么吗?我明白了。那么为什么第二个不一致呢?谢谢,洛伊奇!在第二个例子中,我说理发师的数量不止一个(事实上最外面的操作符是>)。这本应该使规范保持一致(就像第一个规范一样),但事实并非如此。有什么线索吗?