Сокращение - это термин из лямбда-исчисления, который включает в себя сохраняющее семантику преобразование, которое заменяет один термин эквивалентным термином.Для приведенных вами примеров наиболее важным видом сокращений являются
- Замена имени его определением (пример замены на равно).
- Бета-сокращениеприложения функции.
Бета-редукция является фундаментальным правилом в лямбда-исчислении, а в чистом ленивом языке, таком как Haskell, она всегда сохраняет семантику.Бета-правило гласит:
(\x. e) m
может быть заменено на e
с m
вместо x
.(Подстановка должна избегать «захвата» бесплатных экземпляров x
в m
.)
Вполне возможно, что ваш инструктор хочет, чтобы вы комбинировали сокращения следующим образом:
- Найтиприложение функции, где применяемая функция является именем.
- Замените имя на его определение, которое будет лямбда-абстракцией.
- Бета-сокращение приложения.
- Сделайте все это за один шаг.
Обратите внимание, что у вас часто есть выбор о том, какое приложение сократить;Например, в названии, которое вы даете, есть два применения square
и одно из fst
, которые можно уменьшить таким образом.(Применение + также может быть уменьшено, но для сокращения с использованием констант требуются другие правила.)
Из вопросов, которые я вижу, ваш инструктор хочет, чтобы вы сокращали каждый член несколько раз, пока он не достигнет нормальной формы и что ваш инструктор хочет, чтобы вы продемонстрировали свое понимание различных стратегий сокращения. Слово «источник» в «сокращении источника» является излишним; сокращение означает манипулирование исходными терминами в некоторых языках.Я бы сформулировал вопросы следующим образом:
Используя стратегию сокращения, которая соответствует ленивой оценке Хаскелла, приведите следующее выражение к нормальной форме слабой головы.Покажите каждый шаг в последовательности сокращений.
Используя стратегию сокращения, которая соответствует оценке на строгом функциональном языке, уменьшите следующее выражение до нормальной формы головы.
Вероятно, я бы выбрал быть менее скромным и просто назвал бы стратегии сокращения: стратегию сокращения по требованию и стратегию сокращения по стоимости.