Вот контекст ( Структура и интерпретация компьютерных программ , раздел 1.1.8, под заголовком «Локальные имена»):
Формальный параметр процедуры играет особую роль в определении процедуры, поскольку не имеет значения, какое имя имеет формальный параметр. Такое имя называется связанной переменной , и мы говорим, что определение процедуры связывает ее формальные параметры. Значение определения процедуры не изменяется, если связанная переменная последовательно переименовывается по всему определению.
В конце этой последней строки есть сноска (26), которая гласит:
Концепция последовательного переименования на самом деле тонкая и ее трудно определить формально. Знаменитые логики допустили здесь неловкие ошибки.
На что или на кого ссылается текст? Почему определение «согласованного переименования» было бы трудным, какие логики допустили ошибки, пытаясь определить это, и что это были за ошибки?
Ответы:
Это частичный ответ: я понятия не имею, о каких ошибках или людях ссылается SICP. Я могу лишь дать некоторые подсказки о том, «почему» переименование переменной может быть болезненным для точной обработки.
Прежде всего, это кажется тривиальным для определения. Например, мы можем переименовать связанные переменные в индексированных суммах
гдеe - любое выражение, а e{y/x} обозначает синтаксическую замену каждого x на y . Тривиально, правда?
Ну, если мы слепо применяем правило выше, мы получаем
Это не хорошо. Нам нужно добавить требование «y не встречается в e », или мы получим конфликт имен.
Теперь рассмотрим это правильное переименование
если мы хотим переименоватьx в y , по вышеупомянутому правилу мы можем сделать это с правой стороны, но не с левой стороны. Это неудобно, поскольку они отличаются только переименованием, поэтому они должны обрабатываться одинаково.
Типичный подход здесь - прибегнуть к переопределениюe{y/x} как «замены, избегающей захвата», и ослабить требование »y не встречается вe » и использовать вместо него «y не встречаетсясвободновe ».
Затем мы определяем бесплатные вхождения:
Наконец, захват, избегающий замены:
Последний случай болезненный. Еслиx=y , подстановка запрещена, так как мы хотим, чтобы она влияла только на свободные переменные, а x связан. Таким образом, результат просто ∑xe .
Еслиy≠x , мы хотели бы сказать, что (∑xe){t/y}=∑x(e{t/y}) . Это, однако, в общем случае неверно, так как если x появляется свободным в t мы получаем перехват.
Вздох. Итак, мы допустим, чтобыz была «первой» переменной, которая 1) не y , 2) не свободна в t и 3) не свободна в ∑xe . Здесь «первый» означает, что нам нужно упорядочить набор имен переменных (например, выбрав биекцию между именами и натуральными числами). Затем, наконец, пусть
(∑xe){t/y}=∑z(e{z/x}{t/y}) .
Надеюсь, я понял это правильно. (Кстати, моя первая попытка была ошибочной)
Теперь представьте, что приходится иметь дело с этим сложным определением каждый раз, когда мы хотим доказать что-то в теории PL. Мы могли бы, но мы не хотим. Это скучно, утомительно, подвержено ошибкам, загромождает доказательства и не дает читателю понимания. По этой причине многие авторы PL просто пропускают детали, говоря (или даже принимая как должное!), Что термины должны приниматься «вплоть до переименования переменных», что все связанные переменные предполагаются отличными от того, от чего они должны отличаться, что мы принимаем «конвенцию Барендрегта», или что-то в том же духе.
Честно говоря, это обман в доказательствах. Мы могли бы также добавить «подмигнуть, подтолкнуть, сказать больше!» в том же духе. По сути, мы просим пощады и говорим читателю: «Смотри, это скучно, я не хочу это делать, ты не хочешь читать это - мы оба знаем, что, приложив огромные усилия, мы могли бы переписать это доказательство, чтобы включить все детали ".
Технически это это можно использовать этот ярлык , чтобы доказать ложное утверждение. Опытный рецензент, однако, знает, что "морально хорошо" и что можно сделать идеальным (с большими усилиями), а что подозрительно. Последнее может включать в себя что-то, что зависит от фактического выбора связанных имен (поэтому мы не работаем "до", как обещали!). В этих случаях рецензия запросит более подробную информацию, чтобы его можно было убедить.
источник