| |||
The Emissia.Offline Letters Электронное научное издание (научно-педагогический интернет-журнал) | |||
Издается с 7 ноября 1995 г. Учредитель: Российский государственный педагогический университет им. А.И.Герцена. ISSN 1997-8588 | |||
| |||
Кудрявцева Ирина Андреевна Интерпретатор λ-термов и его возможности в процессе обучения теоретическому программированию студентов IT-специальностей
Аннотация
Ключевые слова:
Предметом изучения теоретического программирования являются математические абстракции программ - предписаний, выраженных на специальных алгоритмических языках, обладающих определённой информационной и логической структурой и подлежащих выполнению на компьютерах. Анализ теоретических исследований в области теоретического программирования показывает, что чаще всего используется математический аппарат, содержащий следующие взаимосвязанные разделы (по [1,с.27-28]): λ-исчисление, комбинаторная логика, теория типов языков программирования, теория категорий. Одним из разделов теоретического программирования является λ-исчисление, которое представляет собой:
λ-исчисление, по своему внутреннему строению и наполнению, можно также трактовать как язык программирования, если:
Таким образом, наличие интерпретатора языка программирования чистого λ-исчисления позволит автоматизировать процесс преобразования одних λ-термов в другие, открывая возможность для исследования довольно широкого класса примитивов и базовых операций над ними как со стороны их представления в виде программ, так и с позиции эффективности их обработки (по количеству совершённых β-преобразований). Процесс погружения некоторого языка программирования в λ-исчисление в теоретическом программировании называется доказательством комбинаторной определимости базисных функций языка программирования. На данный момент нам известен лишь один интерпретатор бестипового λ-исчисления, написанный на языке программирования C – lci (автор K.Chatzikokolakis, 12.03.2006). Данный интерпретатор осуществляет вычислительный процесс в соответствии с нормальным порядком β-редукции. Для его использования в учебном процессе требуется знать встроенные в него функции и операторы, записанные во внутреннем представлении λ-термами. Эта информация извлекается из текстового файла, к которому интерпретатор обращается. Причём, данную базу функций можно пополнять или создавать собственный модуль функций. В итоге, весь процесс программирования сводится к тому, чтобы на "ассемблере" (с помощью λ-термов) выразить нужную функцию или оператор, а затем на языке "высокого уровня" (с помощью описанных функций и операторов) составлять выражения и композиции функций для запуска в интерпретаторе. На выходе результат вычисления оценивается количеством произведённых β-редукций и затраченным временем процессора. Для учебного процесса интерпретатор lci является хорошим подручным средством, однако в нём процесс распознавания термов и проведения нормального порядка β-редукции "спрятан" от обучаемых. Помимо этого существует интерпретатор λ-термов Lambda Animator (автор M.Thyer [2]), который лишь визуализирует разнообразные стратегии вычислений программ, записанных на языке Scheme. В связи с этим появилась идея создать интерпретатор λ-термов с открытым кодом на языке, доступном для быстрого понимания, и содержащим библиотеки по работе с фундаментальными языковыми примитивами и операциями над ними, расширив список λ-термов интерпретатора lci. Для написания интерпретатора λ-термов чистого бестипового λ-исчисления был выбран функциональный язык программирования Haskell, поскольку в его основании находятся λ-исчисление (бестиповое и типизированное) и комбинаторная логика. В соответствии с индуктивным определением λ-терма была построена структура алгебраического типа данных "λ-терм" ("--" - комментарии):
Приведём примеры λ-термов на представленном выше языке:
Преобразования λ-термов осуществляются в соответствии с двумя стратегиями вычислений: 1. Нормальный порядок β-редукции. Нормальным порядком β-редукции называется порядок проведения β-редукции, при котором вначале преобразовывается самый левый из самых внешних β-редексов. Понятие "самый левый из самых внешних редексов" определим индуктивным образом:
Приведём пример нормального порядка β-редукции для λ-терма
На основе реализации операции "подстановка λ-терма N вместо всех свободных вхождений предметной переменной x в λ-терм M" и правила β-редукции смоделирована стратегия вычислений "нормальный порядок" [3,с.168-171]. Помимо этого в приведённом коде добавлена реализация α-конверсии и η-конверсии. 2. Аппликативный порядок β-редукции. Аппликативным порядком β-редукции называется порядок проведения β-редукции, при котором вначале преобразовывается самый левый из самых внутренних β-редексов. Понятие " самый левый из самых внутренних редексов" определим индуктивным образом:
Приведём пример аппликативного порядка β-редукции для λ-терма
Для организации и отображения процесса вычислений была написана функция по приведению λ-терма к нормальной форме: рекурсивное применение правила β-редукции к исходному λ-терму до тех пор, пока в результате никакой λ-подтерм не будет является β-редексом (т.е. следующий λ-подтерм примет вид предыдущего). В результате по полученному списку промежуточных термов видны изменения строения исходного терма. В заключение перечислим функциональные возможности интерпретатора λ-термов чистого бестипового λ-исчисления, отображённые в учебном пособии [3,с.460-487]. С помощью него возможно программирование:
В результате нами построено средство обучения теоретическому программированию, поддерживающее содержание обучения λ-исчислению, исчислению комбинаторов и фрагменту теории категорий, относящемуся к декартово замкнутой категории. Литература
Рекомендовано к
публикации: ______
Irina A.
Kudryavtseva
The interpreter of λ-terms in training to theoretical programming of students IT-specialties The author presents an interpreter of λ-terms and its ability in learning theoretical programming. The tool support learning content λ-calculus, calculus combinators and a fragment of category theory (cartesian closed category). Code interpreter is written in Haskell, is open to students and contains a library for working with basic language primitives and operations on them.
Keywords:
Literatura
| |||
| |||
Copyright (C) 2014, Письма в
Эмиссия.Оффлайн (The Emissia.Offline Letters) ISSN 1997-8588. Свидетельство о регистрации СМИ Эл № ФС77-33379 (000863) от 02.10.2008 от Федеральной службы по надзору в сфере связи и массовых коммуникаций При перепечатке и цитировании просим ссылаться на " Письма в Эмиссия.Оффлайн ". Эл.почта: emissia@mail.ru Internet: http://www.emissia.org/ Тел.: +7-812-9817711, +7-904-3301873 Адрес редакции: 191186, Санкт-Петербург, наб. р. Мойки, 48, РГПУ им. А.И.Герцена, корп.11, к.24а |