module language/grandpa1 abstract sig Person { father: lone Man, mother: lone Woman } sig Man extends Person { wife: lone Woman } sig Woman extends Person { husband: lone Man } fact { no p: Person | p in p.^(mother+father) wife = ~husband } assert NoSelfFather { no m: Man | m = m.father } check NoSelfFather fun grandpas (p: Person): set Person { p.(mother+father).father } pred ownGrandpa (p: Person) { p in grandpas (p) } run ownGrandpa for 4 Person