I favor saying that "one possible" definition of LETREC is the one given earlier, or even the following: (letrec ((x v) ...) e ...) => (let ((x 'any) ...) (set! x v) ... e ...) Neither definition catches all the possible errors, but we have already said that not all errors need be caught. Of course, any implementation would be free to check for errors before performing this transformation!