Введение

Изменяется ли поведение программы при перестановке выражений и их значений?
Референтная прозрачность в теории языков программирования

В аналитической философии и информатике референтная прозрачность и референтная непрозрачность – это свойства лингвистических конструкций и, как следствие, языков. Лингвистическая конструкция называется референтной прозрачной, если для любого выражения, построенного на её основе, замена подвыражения другим, обозначающим то же значение, не изменяет значение всего выражения. В противном случае конструкция называется референтной непрозрачной. Каждое выражение, построенное с использованием референтной непрозрачной конструкции, содержит утверждение о конкретном подвыражении, в то время как каждое выражение, построенное с использованием референтной прозрачной конструкции, содержит утверждение не о подвыражении, а о его значении, то есть подвыражения "прозрачны" для выражения и выступают лишь как "ссылки" на что-то другое. Например, лингвистическая конструкция "был мудрым" является референтной прозрачной (например, "Сократ был мудрым" эквивалентно "Основатель западной философии был мудрым"), а конструкция "сказал" – референтной непрозрачной (например, "Ксенофонт сказал: 'Сократ был мудрым'" не эквивалентно "Ксенофонт сказал: 'Основатель западной философии был мудрым'"). Референтная прозрачность зависит от значений, связанных с выражениями, то есть от семантики языка. Следовательно, как декларативные, так и императивные языки могут быть референтными прозрачными или непрозрачными, в зависимости от заданной им семантики. Важность референтной прозрачности заключается в том, что она позволяет программисту и компилятору рассуждать о поведении программы как о системе преобразований. Это может помочь в доказательстве корректности, упрощении алгоритма, облегчении модификации кода без его нарушения или оптимизации кода с помощью мемоизации, исключения общих подвыражений, ленивых вычислений или параллелизации.

Определенность

Формальный язык считается определенным, если все вхождения переменной в пределах ее области видимости обозначают одно и то же значение. Пример. — Математическое выражение определено: 3x² + 2x + 17. Действительно, два вхождения x обозначают одно и то же значение.

Нескладимость

Формальный язык называется разворачиваемым, если все его выражения β-редуцируемы. Пример. — Лямбда-исчисление разворачиваемо: ((λx. x + 1) 3). Действительно, 1 = ((λx. x + 1) 3) = (x + 1)[x := 3].

Отношения между свойствами

Референтная прозрачность, определённость и развёртываемость независимы. Определённость подразумевает развёртываемость только для детерминированных языков. Недетерминированные языки не могут обладать определённостью и развёртываемостью одновременно.