Проблема представления связанных переменных в синтаксисе и, в частности, проблема подстановки во избежание захвата, хорошо известна и имеет ряд решений: именованные переменные с альфа-эквивалентностью, индексы де Брейна, локальное безымянность, именные множества и т. Д.
Но, похоже, есть еще один довольно очевидный подход, который я, тем не менее, нигде не видел. А именно, в базовом синтаксисе у нас есть только один «переменный» термин, написанный, скажем, , а затем отдельно мы даем функцию, которая отображает каждую переменную в подшивку, в рамках которой она лежит. Так что λ- термин, как
будет написано , и функция отобразит первый ∙ на первый λ, а второй ∙ на второй λ . Так что это похоже на индексы де Брюйна, только вместо того, чтобы «считать λ s», когда вы выходите из термина, чтобы найти соответствующее связующее, вы просто оцениваете функцию. (Если представить это как структуру данных в реализации, я бы подумал о том, чтобы снабдить каждый объект с переменным членом простым указателем / ссылкой на соответствующий объект с связующим термином.)
Очевидно, что это не имеет смысла для написания синтаксиса на странице для чтения людьми, но в то же время это не индексы де Брейна. Мне кажется, что в математическом плане это имеет смысл, и, в частности, это делает замену без захвата очень простой: просто отбросьте термин, который вы заменяете, и возьмите объединение функций связывания. Это правда, что в нем нет понятия «свободная переменная», но (опять же), на самом деле, индексы де Брейна тоже не работают; в любом случае термин, содержащий свободные переменные, представляется термином со списком «контекстных» связывателей впереди.
Я что-то упустил, и по какой-то причине это представление не работает? Есть ли проблемы, которые делают его намного хуже, чем другие, о которых не стоит задумываться? (Единственная проблема, о которой я могу подумать сейчас, заключается в том, что набор терминов (вместе с их связывающими функциями) не определен индуктивно, но это не кажется непреодолимым.) Или действительно есть места, где он использовался?