/* FoFo says Gumo is honest. Kumu says Mazo or Aroo is lying. Dobo says Mazo is honest. Gumo says Fofo or Aroo is lying. Aroo says Kumu is lying. Mazo says that he and Dobo are honest. */ abstract sig Boolean {} one sig True, False extends Boolean {} abstract sig Anouki { truthful: Boolean } one sig Fofo, Kumu, Dobo, Gumo, Aroo, Mazo extends Anouki {} pred whoTellsTruth { Fofo.truthful = True implies Gumo.truthful=True Kumu.truthful = True implies ((Mazo.truthful=False) or (Aroo.truthful=False)) Dobo.truthful = True implies Mazo.truthful=True Gumo.truthful = True implies ((Fofo.truthful=False) or (Aroo.truthful=False)) Aroo.truthful = True implies (Kumu.truthful=False) Mazo.truthful = True implies Mazo.truthful=True and Dobo.truthful=True } pred onlyOneIsLying { one a: Anouki | a.truthful=False } run { whoTellsTruth onlyOneIsLying }