module email sig Domain, Target {} disj sig Name extends Target {} disj sig Addr extends Target {dom: Domain} part sig Alias, Group extends Name {} sig AddrBook { map: Name -> Target }{all a: Alias | sole map[a]} fun getDomain (b: AddrBook, n: Name): set Domain { result = n.^(b.map).dom } run getDomain