transferable class Possession {. . .}
class Person {
rep Possession possn ;
void donateTo(Person p)
requires ¬committed È inv = Person ;
requires possn = nullÈ Ètype(possn) = Possession ;
requires p = null È p = this È ¬p.committed È p.inv = Person ;
modifies possn, p.possn ; {
unpack this from Person ; unpack p from Person ;
unpack possn from Possession ;
transfer possn to [p, Person] ;
pack possn as Possession ;
p.possn := possn ; pack p as Person ;
possn := null ; pack this as Person ;
}
. . .
}