автореферат диссертации по информатике, вычислительной технике и управлению, 05.13.13, диссертация на тему:Разработка переносимого программного обеспечения средствами ЛИСП

кандидата технических наук
Аксенов, К. Е.
город
Москва
год
1998
специальность ВАК РФ
05.13.13
Автореферат по информатике, вычислительной технике и управлению на тему «Разработка переносимого программного обеспечения средствами ЛИСП»

Автореферат диссертации по теме "Разработка переносимого программного обеспечения средствами ЛИСП"

На правах рукописи

Аксенов К.Е.

РАЗРАБОТКА ПЕРЕНОСИМОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ СРЕДСТВАМИ ЛИСП

Специальность 05.13.13 - Вычислительные машины, комплексы, системы и сети

АВТОРЕФЕРАТ

диссертации на соискание ученой степени кандидата технических наук

Москва 1998

Работа выполнена в Московском государственном институте электроники математики (техническом университете).

НАУЧНЫЙ РУКОВОДИТЕЛЬ

Доктор технических наук, профессор B.C. Жданов

ОФИЦИАЛЬНЫЕ ОППОНЕНТЫ:

Доктор технических наук, с.н.с. С.Д. Кузнецов

Кандидат физико-математических наук В.М. Юфа

ВЕДУЩЕЕ ПРЕДПРИЯТИЕ: Институт проблем передачи информации РАН, г. Москва

Защита состоится « & X ^ 1998 г. в ^ час, на заседании диссертационного совета К 063.68.03 в Московско государственном институте электроники и математики по адресу: 109028, Москва, Б. Трехсвятительский пер., 3/12

С диссертацией можно ознакомиться в библиотеке института.

Автореферат разослан « Д>» ^ ^ 1998 г.

Ученый секретарь диссертационного совета к.т,н., доцент

ОБЩАЯ ХАРАКТЕРИСТИКА РАБОТЫ

Интенсивное развитие аппаратного и программного обеспечения средств вычислительной техники выдвинуло на одно из первых мест проблему создания мобильного программного обеспечения, как системного, так и прикладного.

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

Решение проблемы построения мобильного программного обеспечения достигается многими средствами, описанными в работах.

Среди наиболее эффективных из них можно отметить применение стандартов и применение современных информационных технологий.

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

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

проводились для ПО, созданного на базе языка Лисп, который достаточно широко применяется как у нас в стране, так и за рубежом.

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

Результаты, приведенные в диссертационной работе могут быть полезны при создании мобильного прикладного программного обеспечения средствами Лисп, а также как методика анализа эффективности разработок переносимого прикладного ПО в различных программных средах и на различных аппаратных платформах.

Цель и задачи исследования.

Данная работа направлена на исследование проблем переноса программного обеспечения на различные аппаратно-программные платформы и разработку решений по созданию конвертора и реляционной СУБД ШР/СЮ88/11.

Цель исследования - разработка методологии переноса программного обеспечения на различные аппаратно-программные платформы.

Для достижения данной цели были поставлены и решены следующие задачи: анализ диалектов языка Лисп с обоснованием выбора диалекта С-Лисп в качестве языка, на который переносится программное обеспечение; разработка денотационной семантики языка С-Лисп; разработка вычислительной модели внешней памяти типа "виртуальная лента";

разработка математического, алгоритмического и программного обеспечения конвертирующего комплекса.

доработка программного обеспечения реляционной СУБД LISP/CROSS/R, ученной путем конвертирования.

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

Практическая значимость работы заключается в разработке ематического, алгоритмического и программного обеспечения вертирующего комплекса, который позволяет переносить программное спечение, разработанное на ЭВМ одного класса на ЭВМ другого класса. С гощью этого конвертирующего комплекса была получена реляционная СУБД P/CROSS/R.

Основные положения, выносимые на защиту:

результаты анализа современных требований к программному обеспечению с ки зрения построения переносимых программ;

результаты анализа диалектов языка Лисп с обоснованием выбора диалекта bien в качестве языка, на который переноси сся программное обеспечение; разработанная денотационная семантика языка С-Лисгт; доказательство корректности конвертирования программ на Лиспе; методология переноса программного обеспечения на различные аппаратно->граммные платформы; вычислительная модель внешней памяти типа "виртуальная лента'-; полученная путем конвертирования реляционная СУБД LÍSP/CROSS/R.

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

Апробация работы. Основные результаты и положения работы докладывались и обсуждались на:

• XXXI научно-технической конференции МИФИ, г. Москва, 1985 г., » XXXII научно-технической конференции МИФИ, г. Москва, 1987 г.,

• научно-техническом семинаре "Технология проектирования интеллектуальных систем", г. Москва, 1989 г.,

• постоянно действующем семинаре Искусственный интеллект при секции Прикладная кибернетика при МДНТП им. Ф.Э. Дзержинского, г. Москва, 19841990 гг.,

• 7-ом Международном научно-техническом семинаре "Проблемы передачи и обработки информации в информационно-вычислительных сетях", г. Москва, 1997 г.

Публикации. Основные положения диссертации опубликованы в 5 научных работах и 1 учебном пособии.

Структура работы. Диссертация состоит из введения, четырех глав, заключения и списка литературы и приложений. Общий объем диссертации -158 страниц, включая 117 стр. основного текста, 12 рисунков, 6 таблиц, приложения на 51 стр.

СОДЕРЖАНИЕ РАБОТЫ

В первой главе диссертации исследована проблема создания мобильного программного обеспечения и методы ее решения.

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

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

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

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

Результаты данной главы позволили определить и обосновать направления дальнейших исследований, проводимых в диссертации.

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

Семантикой программ и практически всех их конструкций являются функции из состояния памяти s¡ до выполнения рассматриваемой конструкции в состояние S2 после ее выполнения.

Возможные состояния памяти составляют множество St - состояний памяти. В свою очередь состояния памяти s¡eSt являются функциями вида Loe —> Val, где Loe - множество адресов, a Val - множество значений, хранящихся по этим адресам.

Таким образом, основным конструкциям языка программирования сопоставлены некоторые функции над функциями (т.е. операторы на языке классического анализа).

После этого рассматриваются вопросы эквивалентности функций, задаваемых разными выражениями языка Лисп.

Описаны домены для данных, модели Лисп-программ, окружения и состояния памяти, интерпретация выражений и Лисп-функций.

Рассмотрены семантика LAMBDA- и PROG-выражений, а также семантика основных функций языка С-Лисп, а затем - семантика программы в целом.

Денотационная семантика языка программирования С-Лисп была использована при доказательстве корректности преобразования программ.

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

Выделены основные препятствия, возникающие при переносе программного обеспечения:

- различие в типах данных;

- наличие машинно-зависимых средств;

- различия в синтаксисе входного представления з-вырэжений;

- несоответствия в семантике функций;

- различия форматов специальных форм.

Еояьшпкстео Лисп-программ оперирует в основном со списками, а структура списковой памяти в большинстве реализаций одинакова. Поэтому естественным основанием для установления смысла переноса является установление изоморфизма списков в исходной и целевой Лисп-средах.

Установлен изоморфизм между атомами, векторами, строками и прочими структурами данных исходного диалекта и их эквивалентами в целевом диалекте Лиспа.

Таким образом, установлен изоморфизм ¥ между данными исходного и

долевого диалектов.

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

Далее, пусть Р-программа на исходном диалекте, ?' - ее образ при переносе ч пелезой диалект.

Теперь программы эквивалентны, если эквивалентны тг: семантики, т.е.'?[?] эквивалентно *Р'[Р'].

Приведена диаграмма, отражающая понятие эквивалентности. На этой диаграмме - объекты-состояния памяти, а стрелки - функции на них.

Ф[Р]

' <р[Р](5)

¥

ф'[Р']

У

Диаграмма должна быть коммутативна, т.е. (4}/V[P])(s)=(9'[P,]0,f)(s).

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

Пусть - функция, отображающая возможное состояние памяти t в

исходной Лисп-среде из множества допустимых состояний Z в состояние s в целевой Лисп-среде из множества X'. Пусть функция % преобразует исходную Лисп-программу в целевую: % : Р -» Р', где Р - множество программ в исходном Лиспе, Р' - в целевом. Пусть %f : ср-кр' - функция, преобразующая определение функции в исходном Лиспе (из ф) в определении функции в целевом Лиспе (из <р').

Также Хехр - функция, преобразующая Лисп-выражение (т.е. s-выражение, вычисляемое функцией EVAL) в исходном Лиспе в эквивалентные ему как программы s-выражения в целевом Лиспе: хгхр;ЕХР1-ч>ЕХР. Здесь ЕХР1 -множество s-выражений в исходном Лиспе, ЕХР - в целевом.

Предложена следующая схема преобразования программы.

Будем считать программу множеством Лисп-функций. Телом Лисп-функции будем называть выражение, описывающее ее вычисление. Обычно это тело X-выражения, описывающего Лисп-функцию. Тело каждой Лисп-функции мы будем рекурсивно преобразовывать к эквивалентному ему выражению в объектном Лиспе. Тем самым вычисление (получение) преобразованной программы с помощью функции х мы сводим к преобразованию тел Лисп-функций функцией

Хехр-

Пусть Evall: ЕХРх£—>2' - семантическая функция в исходной Лисп-среде: каждому s-выражению ехр и состоянию t она ставит в соответствие состояние t!=Evall (exp,t), в которое попадает Лисп-система после выполнения ехр (понятно, что если ехр зацикливается, то ti=_L - "неопределено"). Eval:EXPx£'—- семантическая функция в целевой Лисп-среде.

Тогда Xcx-, - корректна, если для V т е У :

T(Bvalí(exp,t))=Eval(xCXB(exp),4'(t)) . СП

Пусть Apply 1: ФхЕХ1Т'хХ->Х - семантическая функция для обращения к функции в исходном Лиспе ( яз о берется определение функции, из ЕХР1* - п-ка аргументов, ш ^ - состоите памяти; здесь ЕХР1 * - множество п-ок s-выражений

в ¡¡сходном Лиспе).

Аналогично, Apply: ф'хЕХР*х£'-»£' - семантическая функция в целевом

Лиспе.

Уточним структуру состояния памяти. Будем считать t е У, функцией из множества абстрактных ячеек памяти LOCI во множество значений EXPI. Для разных Лиспов эта структура может быть разной, но ее уточнение для нас существенно в одном отношении: среди ячеек (в множестве LOCI) всегда имеется

ячейка, содержащая значение последнего вычисленного выражение: íop! cLGCI. Пусть теперь Z:LOCi—>ЕХР1. Функция (p.Z—-L' делг.сна, счзггазяо. отражать ячей.к\-члаченне исходного Лиспа в ячейку-знгчеиие целевого Лиспа. Для формальной зоплси примем, что X' - множество функций LOC->EXP, fop -ячейка значений в объектном Лиспе, а фе,Р - функция, переводящая s-зыражения исходного Лиспа в s-выражения целевого: г,/гер:ЕХР!->ЕХР. Теперь формально M/(t)(íop)=4/cxp(í(top 1)) (2)

Заметта. что функция )у - корректна, если i|/(Apply 1 )(g[expi,..., expn],s)=

=rApply(XF(g)[Vexp(eXpi),...,\l.'exp(exPn)],V(s)) (3)

Теперь определим функции значения выражений: Val 1 (exp,t)=Eval 1 (exp,t)(top 1)

и

Val(exp',s)=Eval(exp',s)(top)

для исходного и целевого Лиспов соответственно.

С точки зрения Лиспа Val(exp',s) - значение выражения ехр' при вычислении в среде s.

Отметим, что в "чистом" идеальном Лиспе без побочных эффектов эффект "изменения состояния" сводится к вычислению значения, т.е. Eval сводится к Val.

Равенство вида (1) обязательно выполняется не только для Eval и Evall, но и для Val и Vail, т.к. мы принимаем, что у отображает точку возврата значения исходного Лиспа (topi) в точку возврата значения целевого Лиспа (top). yexp(Vall(exp 1 ,t))=Val(XcxP(exp 1), y(t)) Действительно,

Vcxp(Val 1 (exp 1 ,t))=ii/cxp(E val 1 (exp 1 ,t)(top 1 ))= (no 2) =\¡/(Evall (exp 1 ,t))(top)= (no 1) =Eval(x«p(expl),y(t)Xtop)= (по опред. Val) =Val(xEXp(expl),v(t))

Рассмотрим подробно процесс вычисления некоторой двухаргументной функции в исходном Лиспе. Обращение к функции имеет вид (g ei е2). Тогда состояние памяти после его вычисления t=Evall((g et e2),t).

Вычисление в исходном Лиспе в среде te£ выполняется как:

1) вычисление выражения е! с получением среды fy: t,=Evall(ebt)

2) вычисление выражения е2 в среде ti: t2=Evall(e2,ti)

3) вычисление g в среде t2 с аргументами t,(topl)=Val(ei,t) и t2(topl)=Val(e2,t,) t=Applyl (g[t,(topl),t2(topl)],t2)

Аналогично в среде se£' для обращения (f р[ р2) имеем:

s=Eval((fpi p2),s) и

s=Apply(f [s 1(top),s2(top)]s2),

где Si(top)=Eval(p¡,s) и s2(top)=Eval(p2,s).

Опишем схему доказательства утверждения корректности х<*р. Во-первых, доказывается корректность для атомных выражений и QUOTE-выражений. Тогда шаг индукции состоит в том, чтобы доказать корректность для

сложных выражений, т.е. для любых программных конструкций. Сделав этот шаг, мы докажем корректность Хехр Для произвольных з-выражений, допустимых с точки зрения вычисления функцией ЕУ.А1.

Остановимся на случае, когда выражение является обращением к ЕХРЛ -функции Лиспа, т.е. функшш с вычисляемыми аргументами. Эти функции можно разделить на два класса:

1. функции, входящие в реализацию - для каждой их них преобразование следует рассматривать отдельно, для выполнения уравнение? (3);

2. функции, входящие в программу - для них никакое специальное «гжазателъетко не требуется, т.к. их определения преобразуются должным образом. Если функции являются взаиморекурсивными, то корректность перестает казаться очевидной. Доказательство, однако, можно провести индукцией по неподвижной точке. Мы приведем подробно описание шага индукции для обращения к ЕХРК-выраженшо.

Заесь предположение индукции состоит в том, что для обращения вила ехр~( 0 в! ез) функции Хехр(е!) и Хеф(®г)т ХяЗ) - определены и корректны. Шаг индукции состоит в том, что опргделив Х«Р( {& £1 е2) )=(Хр(§) Хехр(е)) '/^(е;))

мы получим, что для Хехр( {а е1 ез)) выполняется уравнение (1). Положим и 1|=Еуа11(е1Д). Тогда в силу предположения о

корректности Хехр Для е- имеем:

^<1Л^:Г(Еуа]1{е;.0)=Еуа1(хеХр(е1}Ж1))=Еуа1(хеХр(е,5))

Обозначим 51=Еуа1(хехр(е1)^)< тогда

Также в силу корректности для е;:

Н/(Е\'а1!{е2,{1))=Еуа1(Хехр(е2)лЧч))=^'а1(хетр(е2).51)

Аналогично, обозначив я:=Е\'а1(хехр(е2),51) и ь=Ьуа11(е2,1]) имеем

Теперь

у(Еуа11((ё е, е2),1))=

=м;(АРР1у 1 (&Шор 1 )Л2(Щ 1 )Ш)=

=Арр1у(Хк^)[УехР01(Юр 1 )),У«р020ор 1 ))],Ч/(12))=

=Арр1у(хр(Е)[з10ор),52(1ор)],з2)=

=Еуа1((хр(Е)хОф(е1)Хехр(е2))Ж0)

что и требовалось доказать.

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

Описана программа преобразования программ - так называемый конвертор, приведены правила преобразования функций при использовании конвертора для переноса программ с одного диалекта языка Лисп в другой, описано использование конвертора кодов.

Конвертор может быть использован двумя способами:

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

- в качестве настроенного инструмента переноса программ на языке Лисп-

ОС.

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

Рассмотрены основные особенности организации внешней памяти типа "виртуальная лента", виртуальная лента представляет собой абстрактную модель внешней памяти для Лисп-системы. Основными понятиями, используемыми при описании виртуальной ленты, являются: ячейка виртуальной ленты, направление виртуальной ленты, внешнее представление з-выражения на виртуальной ленте.

Описана ее вычислительная модель, приведены преимущества внешней памяти типа "виртуальная лента".

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

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

Разработаны средства для реализации базы данных, определена ее структура, методы и средства администрирования.

Разработаны средства и методы проверки целостности данных при загрузке в

базу.

Полученные в главе результаты позволили пропемонстрирсеать на конкретной задаче построения системы управления реляционной базой данных эффективность и практические возможности разработанных методов создания переносимого программного обеспечения средствами Лисп.

В приложении рассмотрены конкретные результаты применения разработанных в диссертации методов и средств для решения реальных

технических задач.

ОБЩИЕ ВЫВОДЫ ПО РАБОТЕ

Работа посвящена исследованию и решению задач создания переносимого программного обеспечения средствами языка Лисп.

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

2. Проведен сравнительный анализ диалектов языка Лисп, что позволило обоснованно выбрать диалект Standard Lisp в качестве языка, на который переносится программное обеспечение.

3. Разработана денотационная семантика языка программирования Standard Lisp. Целью этой разработки является выявление конкретных алгоритмов преобразования программ.

4. Разработаны методы кросс-проектирования программ. Доказана корректность преобразования программного обеспечения. Представлены методы настройки программного обеспечения. Разработана вычислительная модель организации внешней памяти типа "виртуальная лента".

5. Улучшен по сравнению с LISP/R язык реляционной алгебры, включающий классический РА-язык и макросредства и обеспечивающий все функциональные возможности СУБД для определения, загрузки, поиска, модернизации, проверки целостности БД и т.д. В расширенном РА-языке решены типичные задачи логической обработки данных.

6. Разработана методика применения конвертирующего комплекса в различных вариантах, методика применения реляционной СУБД в различных предметных областях.

Конвертирующий комплекс использован для переноса программного обеспечения системы СТАКСЕЛЬ из одной операционной системы в другую.

7. Разработанные методы и созданное на их основе прикладное программное обеспечение (реляционная СУБД ЬКР/СКОЗЗ/Н,

конвертирующий комплекс, система СТАКСЕЛЬ и т.д.) внедрены в ряде организаций и использованы в учебном процессе.

ПУБЛИКАЦИИ ПО ТЕМЕ ДИССЕРТАЦИИ

1. Аксенов К.Е. Конвертирование программного обеспечения'/ Тез. докл. 7-го Международного научно-технического семинара "Проблемы передачи и обработки информации в информационно-вычислительных сетях":- М.,1597. с.123-124.

2. Аксенов К.Е., Саевский А.Ф. Переносимая вычислительная среда на базе ЛИСП-системы //Технология проектирования интеллектуальных систем: Материалы семинара.-М.:МДНТП им. Ф.Э. Дзержинского, 1989.-C.90-93.

3. Аксенов К.Е. Переносимая реляционная СУБД// Математические методы и программные средства в системах моделирования и управления к а ЭВМ: Сб. науч.тр./Под ред. В.ДЛалого.-М.:Энергоатомизцат.!988.-с.52-53.

4. Аксенов К.Е., Саев СКПИ п.. Ф. Обеспечение переносимости реляционных СУБД средствами LlSP-снстемы //Математические методы и программные средсгьа в системах моделирования и управления на ЭВМ: Сб. науч. тр. /Под ред. В.Д.Чалого.-М.:Энергоатомиздаг,J988 с.36.

5. Аксенов К.Е., Саевский А.Ф. О реализации переносимой вычислительной среды на базе ЛИСП-системы//Проблемы системотехники и АСУ: Межвузовский сборник.-Л. :СЗПИ, 1988.-е. 140-143.

6.Лабораторный практикум "Системы искусственного интеллекта" /К.Е. Аксенов, О.Т. Баловнев, В.Э. Вольфенгаген, О.В. Воскресенская, A.B. Ганночка, М.Ю. Чуприков; Под ред. Л.Т. Кузипа./М.:Изд.МИФИ.1985.-91с.