module tour/addressBook2a

abstract sig Target {}
sig Addr extends Target {}
abstract sig Name extends Target {}

sig Alias, Group extends Name {}
sig Book {addr: Name -> Target}
	{
	no n: Name | n in n.^(addr)
	all a: Alias | lone a.addr
	}

pred show (b: Book) {
	some b.addr
/*
	-- constraints to generate examples to match older draft
	# Alias.(b.addr) = 2
	some Alias.(b.addr) & Group
	no Group.(b.addr)
*/
	some Alias.(b.addr)
	}
run show for 3 but 1 Book
