Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТПфунк_Лекція_05_06_07.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
214.02 Кб
Скачать

6.2.5. Редукция комбинаторных термов

Напомним, что одной из основных причин возникновения ламбда-исчисления была необходимость исследовать возможность кратчайшей перезаписи выражения (функции) с сохранением эквивалентного значения. Для реализации этой возможности вводилось преобразование редукции ламбда-термов.

В комбинаторной логике наследуется возможность редукции. Поскольку она интересна теоретически (для сокращения выкладок) и полезна практически (для оптимизации программного кода абстрактных машин), рассмотрим ее более подробно.

В ходе исследований выяснилось, что редукция (преобразование для сокращения записи) комбинаторных термов возможна в соответствии с правилами вывода, аналогичными аксиомам (K) и (S).

Пример моделирования механизма редукции следующим

Рассмотрим комбинаторный терм вида

SKKx.

Пользуясь аксиомами (К) и (S), а также правилами вывода, произведем редукцию терма:

SKKx = (по правилу S) Kx(Kx) = (по правилу K) x.

В результате получаем, что SKKx = x, откуда, с учетом аксиом и правила (I), I = SKK.

Как видно из предыдущего примера, одни комбинаторы можно выразить через другие.

6.2.6. Базис термов

Возникает вопрос: существует ли конечный набор комбинаторов, посредством которого можно выразить произвольный терм комбинаторной логики? Оказывается, что ответ на поставленный вопрос утвердителен, причем введенные аксиомы и правила вывода обеспечивают весьма лаконичный набор такого рода.

Необходимость продолжения рассуждений приводит нас к понятию базиса.

Определение 6.3. Базисом (минимальным) называется множество (минимальной мощности) комбинаторов, через элементы которого может быть выражен произвольный комбинатор.

Оказывается, можно доказать, что:

  1. базис термов для комбинаторной логики действительно существует (причем существует бесконечное множество возможных базисов);

  2. для любого базиса справедливо, что он обеспечивает представление произвольного комбинаторного терма (в силу свойства полноты, которым обладает система комбинаторной логики);

  3. минимальный базис состоит всего из двух "инструкций"-комбинаторов, например, {K,S}.

Приведем еще несколько примеров базисов:

{I,K,S}; {I,B,C,S}; {B,W,K}.

Разложение термов в базисе {K,S} для ранее рассмотренных комбинаторов имеет вид:

B = S(KS)K; W = SS(K(SKK)); C = S(BBS)(KK).

Разложение в базисе аналогично программированию на языке базисных инструкций.

В качестве иллюстрации естественности применения формальной системы комбинаторной логики для моделирования языка функционального программирования SML приведем определения функций, реализующих характеристики некоторых из базисных комбинаторов:

fun Ix = x;

Функция I реализует комбинатор тождества I

fun Kxy = x;

функция K - комбинатор-канцелятор K

fun Sxyz = xz(yz);

функция S - комбинатор-коннектор S

Для более подробного самостоятельного ознакомления с тематикой лекции рекомендуется следующий список источников: [32, 43, 44, 76].

Лекція 7. Теория типов и комбинаторная логика

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

Комбинаторная логика обладает возможностью не только моделировать процесс реализации программного обеспечения на языке функционального программирования, но и прозрачно формализовать процедуру приписывания типов объектам этого языка.

Рассмотрим построение системы типизации на основе комбинаторной логики.