free(Ref) :- object(Ref), !, send(Ref, free). free(_).
This definition implies free/1 only fails if the object may not be freed (see object->protect).
->