module addressBook sig Target {} part sig Addr, Name extends Target {} part sig Alias, Group extends Name {} sig Book {addr: Name -> Target} fun 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]}