declare fun {CorrectSimpleLock} Token={NewCell unit} proc {Lock P} Old New in {Exchange Token Old New} {Wait Old} try {P} finally New=unit end end in 'lock'('lock':Lock) end