module addressBook abstract sig Target {} sig Addr extends Target {} abstract sig Name extends Target {} sig Alias, Group extends Name {} sig Book {addr: Name -> Target} pred showMe () {some addr} run showMe for 3 fact {all b: Book | no n: Name | n in n.^(b.addr)} -- fact {all b: Book, a: Alias | sole b.addr[a]}