predecessor function