【问题标题】:Alloy - solution to Barber paradox still inconsistent合金——巴伯悖论的解决方案仍然不一致
【发布时间】:2014-11-17 00:27:54
【问题描述】:

众所周知,如果有多个理发师,他们可以互相刮胡子,理发师悖论就解决了。

本规范一致:

 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

为什么?

【问题讨论】:

    标签: logic alloy


    【解决方案1】:

    首先你要约束: 所有理发师都剃过的那组男人都是不自己刮胡子的男人

    编辑 我对第二个事实的解释当然不够清楚。 你说如果一个男人刮胡子的人的集合等于所有不刮胡子的男人的集合(包括他,这就是不一致的来源,这就是这个问题的全部乐趣),那么他被认为是理发师。

    【讨论】:

    • 我明白了。那么为什么第二个不一致呢?
    • 谢谢,洛伊克!在第二个中,我说理发师的数量不止一个(事实上,最外面的运算符是 >)。这应该使规范保持一致(如第一个),但事实并非如此。任何线索为什么?
    猜你喜欢
    • 1970-01-01
    • 2015-10-28
    • 2014-05-24
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    相关资源
    最近更新 更多