Меня именно этот вопрос волнует - можно ли средствами классического лямбда-исчислении промоделировать языки программирования с динамическим связыванием и ленивой стратегией вычисления.
Хороший вопрос, меня он тоже заинтересовал, поэтому хорошо было б, если кто-нибудь знающий, например, ЗУ просветил это.
Не часто. Но вот возникла потребность, и хочу с этим разобраться (в чем суть динамического связывания, в чем его вред/польза, совместимо ли оно со статическим и проч. Это легче всего было бы понять на примере лямбда исчисления.)
Значит, приходилось? Вот один мой знакомый спросил, о чём вообще речь идёт в этой теме, и мне было сложно ему объяснить на примере зачем вообще нужно динамическое связывание. Оно лишь тем отличается от статического, что допускает связывание переменных во время редукции (

-редукции в первую очередь). Сразу возникает проблема с

-конверсией. И сходу вопрос: пусть Вы хотите редуцировать
![$(\lambda xy.C[x,y])D[y]$ $(\lambda xy.C[x,y])D[y]$](https://dxdy-02.korotkov.co.uk/f/1/e/d/1ed570122c402a3feb33109495bec63082.png)
до
![$\lambda y.C[D[y],y]$ $\lambda y.C[D[y],y]$](https://dxdy-01.korotkov.co.uk/f/0/d/9/0d9f5ad5d6eb5f98ace54cab663501c582.png)
так, что

свяжется абстрактором, где
![$C[x,y]$ $C[x,y]$](https://dxdy-01.korotkov.co.uk/f/c/2/5/c256d4d69b5ec0dc4e3aa5f17b18156e82.png)
и
![$D[y]$ $D[y]$](https://dxdy-01.korotkov.co.uk/f/8/4/9/849f495649b8b920f62881cec15d84c282.png)
— обычные (или необычные, всё-таки о гипотетической ситуацией говорим)

-термы с явным вхождением

и

, то почему бы Вам не записать это выражение в виде
![$(\lambda xy.C[xy,y])(\lambda y.D[y])$ $(\lambda xy.C[xy,y])(\lambda y.D[y])$](https://dxdy-01.korotkov.co.uk/f/c/7/4/c747d151d71c6eae11c73fc7ed995c2d82.png)
? Всё-таки терм мы формируем на основании наших потребностей, мыслей, и вопрос лишь в том, будет ли первая форма более понятна человеку, чем вторая.
Я так понимаю, это уже расширение лямбда-исчисления? А с исходным, все-таки, как - можно промоделировать динамическое связывание или нет?
Я долго думал и пришел к выводу, что известные мне системы не позволяют делать динамическое связывание.
Также мне кажется, что основная причина состоит в том, что строимые теории базируются на

-инвариантности, что не допускается при динамическом связывании.
Как мне кажется (в очередной раз подчёркиваю в совершенной неуверенности высказываемых утверждений), для того, чтобы ввести динамическое связывание, нужно пересмотреть основу да так, чтоб не было

-конверсии. Например, ввести упомянутое понятие контекста.
Другой путь заключается в том, чтобы не фиксировать

как конверсию, но возвести в статус редукции, т.е.

-собственное бинарное отношение. Тогда можно саму

-редукцию модифицировать или вовсе отменить. Полагаю, в такой модификации также можно достичь формализма динамического связывания.