1 глава 1. структурные вычислительные модели

advertisement
ИНСТИТУТ ТЕОРИТИЧЕСКОЙ АСТРОНОМИИ
АКАДЕМИИ НАУК СССР
На правах рукописи
В.Б.НОВОСЕЛЬЦЕВ
СИНТЕЗ РЕКУРСИВНЫХ ПРОГРАММ В СИСТЕМАХ УПРАВЛЕНИЯ
ПАКЕТАМИ ПРИКЛАДНЫХ ПРОГРАММ
Специальность 05.13.11
Математическое и программное обеспечение
вычислительных машин и систем
Диссертация на соискание ученой степени
кандидата физико-математических наук
Научный руководитель
член-корреспондент АН СССР
доктор технических наук
С.С.Лавров
Ленинград
1985
2
РЕФЕРАТ
В предлагаемой работе рассматриваются вопросы автоматического синтеза
программ. Исследования в этом направлении представляются весьма актуальными
вследствие постоянно растущего проникновения средств вычислительной техники
во многие сферы человеческой деятельности. Предоставление пользователям
средств, которые максимально облегчают диалог с вычислительной системой,
приближая его к общению на профессиональном арго того или иного специалиста,
является одной из важнейших задач системного программирования. Возможным
решением этой задачи является разработка систем программирования, способных
принимать непроцедурную формулировку задачи пользователя и автоматически
строить программу ее решения. Исследования в этом направлении ведутся в Институте теоретической астрономии АН СССР под руководством член.-корр. АН
СССР С.С.Лаврова (проект СПОРА). В диссертации содержатся результаты, полученные в рамках работ по выполнению этого проекта.
Диссертация состоит из введения, теоретической части, описания реализованной
системы синтеза программ, заключения и приложения. Во введении приводится
обзор работ в области синтеза программ, рассматриваются наиболее разработанные направления. Теоретическая часть, занимающая две первых главы диссертации, посвящена описанию и исследованию формальной теории, которая используется при автоматическом построении программ, а также обсуждению алгоритмов
синтеза. В третьей главе содержатся материалы по реализации системы синтеза
рекурсивных программ. В заключении резюмируются основные результаты диссертационной работы и намечаются возможные пути дальнейших исследований.
Приложение содержит описание некоторой модели предметной области на языке
Декарт и примеры программ, синтезированных на основании этой информации и
постановки задачи в непроцедурной форме.
Общий объем диссертационной работы -97 страниц. Список литературы содержит 40 работ.
3
ВВЕДЕНИЕ
Характерной чертой современного периода является широкое проникновение
средств вычислительной техники во многие области человеческой деятельности.
Как следствие этого, постоянно растёт число пользователей ЭВМ, большинство из
которых не обладает надлежащей профессиональной подготовкой. Одной из важнейших проблем системного программирования в связи с этим является разработка
инструментальных средств, которые максимально сокращают объём специальных
знаний, необходимых при использовании средств вычислительной техники.
Наиболее перспективным подходом здесь является автоматизация программирования, в частности, создание так называемых «интеллектуальных» пакетов прикладных программ (ППП), способные воспринимать непроцедурные формулировки
заданий пользователя и автоматически строить программы, которые выполняют
необходимые вычисления. Реализация систем программирования с автоматическим
синтезом программ должна облегчить пользование ЭВМ специалистам самого широкого круга областей знания.
Основной целью работы является исследование методов автоматического построения программ и практическая реализация системы синтеза, базирующейся на
разработанных алгоритмах. В данной работе предложен формализм, позволяющий
полно и компактно представлять необходимую для целей автоматического синтеза
информацию о предметной области ППП. Разработаны и исследованы эффективные алгоритмы синтеза линейных и ветвящихся программ, а также программ с рекурсивными конструкциями. Алгоритмы реализованы в подсистеме синтеза программ, которая является составной частью системы СПОРА [1], разработанной в
институте теоретической астрономии АН СССР под руководством чл. - корр. АН
СССР С. С. Лаврова.
Направление автоматического синтеза программ начало формироваться в области искусственного интеллекта. В шестидесятых годах появились такие системы
как PROW [2], в которых программа, удовлетворяющая некоторому отношению на
вход/выход, извлекалась из доказательства соответствующей теоремы. При доказательстве теоремы существования решения в первых системах применялся принцип
резолюции.
Важным этапом в развитии направления автоматического синтеза программ
явилась статья З. Манны и Р. Волдингера [3]. В этой работе впервые была поставлена задача синтеза циклических и рекурсивных программ и исследованы возможности её решения. Следует отметить, что статья носит сугубо теоретический характер, её результаты не могут быть прямо использованы при разработке действующих систем синтеза.
Серьёзный теоретический результат содержится в работе Р. Констэбла [4], в
ней показано, что если для теоремы существования решения задачи удаётся построить интуиционистское доказательство, из последнего может быть извлечена
программа решения этой задачи.
В работах по автоматическому синтезу программ можно различить три подхода: дедуктивный, индуктивный и трансформационный. Работы [3-4] характеризуют
4
дедуктивный подход к автоматическому синтезу программ. Задача синтеза здесь
трактуется следующим образом: по заданному значению x, удовлетворяющему
условию P(x), вычислить значение y, удовлетворяющему условию Q(x,y). Здесь x и y
-конечные множества соответственно входных и выходных величин. Считается, что
спецификация R=(P(x),Q(x,y)) содержит достаточно информации для построения
программы, которая реализует вычисление значений выходных величин по значениям входных. Задача однозначно представляется тройкой (x,y,R). Теорема существования решения задачи имеет вид: x  Px  y Q x , y . Построение интуиционистского доказательства теоремы существования решения обеспечивает получения требуемой программы. Из такой постановки исходят и в [5].
Теоретические результаты, связанные с построением на основании дедуктивного подхода правильной программы из правильных подпрограмм, приведены в
работах Н. Н. Непейводы. Так в [6] выделен класс интуиционистских теорий, для
которых существует прямая связь между предложениями доказательств теорем в
этих теориях и конструкциями языков программирования (Алгол-68, Лисп), в [7]
предложен алгоритм извлечения программы из доказательства соответствующей
теоремы.
В работе С. С. Лаврова [8] отмечаются трудности, которые возникают при дедуктивном подходе к синтезу программ. Успех возможен в том случае, когда спецификация «достаточно хорошо» описывает условие задачи. Это означает, что автоматическое построение программ осуществимо для формализуемых предметных
областей в тех случаях, когда разработка спецификации программы по тем или
иным соображениям проще разработки самой программы.
Традиционным и наиболее исследованным аппаратом дедуктивного синтеза
является метод резолюций [9], работающий в исчислении предикатов первого порядка.
В начале семидесятых появился аппарат вычислительных моделей, предложенный Э.Х.Тыугу [10]. Глубокое обоснование использования этого аппарата для
синтеза ветвящихся программ и программ с параметрами-процедурами приводится
в работах Г.Е.Минца и Э.Х.Тыугу [11,12]. А.Я.Диковский в [13] вводит понятие детерминированных вычислительных моделей и исследует возможности синтеза программ с рекурсиями. Для построения рекурсивных конструкций используется специальная внешняя относительно модели управляющая память.
Индуктивный подход к автоматическому синтезу программ характеризуется
поиском общих закономерностей на основании анализа свойств некоторого ряда
объектов и в определённом смысле является моделированием метода обобщений,
применяемого человеком.
В рамках этого подхода может осуществляться синтез программ по предъявленным примерам её работы [14], синтез общего доказательства по образцам, по
частным случаям и т. д. Обобщение строится как с учётом семантики анализируемых объектов, так и на чисто внешнем, синтаксическом уровне. Последний метод
детально исследуется Я.М.Барздинем. В [15] рассматриваются правила индуктивного вывода для случая, когда исходными данными являются деревья специального
5
вида, там же доказывается теорема о полноте приведённых правил. Теорема гарантирует построение общей закономерности (программы) при условии, что исходных
объектов (примеров работы) достаточно много. В [16] предлагается осуществлять
синтез в языке многоточечных термов, которые являются формализацией понятия
многоточия при перечислении.
Индуктивный подход допускает использование в качестве объектов анализа
пар «вход-выход» требуемой программы. Примером этого может служить система,
описываемая S.Hardy в [17], которая позволяет строить простые лисповские программы обработки списков.
В противоположность индуктивному подходу, где производится переход от
частного к общему, трансформационный подход предполагает конкретизацию некой исходной спецификации общего вида. При этом, как правило, преследуется
цель упрощения и/или повышения эффективности работы результирующей программы. Осуществляется это как за счёт знаний о предметной области, для которой
строится программа, так и на основании традиционной техники оптимизации.
В работах Р.Берстэла и Дж.Дарлингтона [18,19] предлагается характерный метод преобразования программ путём развёртки - свёртки (fold-unfold). При этом
выполняются следующие действия:
1) производится развёртка исходного текста - вызов некоторой процедуры заменяется телом;
2) развёрнутый текст преобразуется с использованием специальных правил;
3) тело процедуры свёртывается.
Система, описанная В.Н.Касьяновым и И.В.Поттосиным в [20], позволяет получить эффективные конкретизации исходной универсальной программы за счёт
сужения классов входных данных и оптимизации, которая проводится на основе
анализа текста программы.
Необходимо отметить, что в большинстве реализованных систем программирования [1,21,22] используется дедуктивный подход или его модификация. Так в
[23] М.Ф.Харфом описан синтезатор программ, работающий в классе линейных и
ветвящихся программ. Синтезатор является одной из основных частей практической системы программирования ПРИЗ ЕС [24].
6
1 ГЛАВА 1. СТРУКТУРНЫЕ ВЫЧИСЛИТЕЛЬНЫЕ МОДЕЛИ
Вычислительные модели, впервые введённые Э.Х.Тыугу в [10], находят широкое применение при создании систем управления базами данных, в системах построения пакетов прикладных программ с автоматическим синтезом программ и в
других аналогичных разработках. Традиционным является подход [12, 13, 25], когда под вычислительной моделью понимается конечный набор предложений вычислимости (связей, функциональных зависимостей, уравнений и т. д.), возможно, с
указанием некоторой дополнительной информации. Даже в достаточно простых ситуациях, когда требуется построить программу, которая не содержит циклических и
рекурсивных конструкций, длинна вычислительной модели может оказаться чрезмерной. Синтез рекурсивных программ в рамках традиционного подхода нередко
оказывается существенно неполным либо просто невозможным [26, 27]. В то же
время теория вычислительных моделей обладает хорошо разработанным аппаратом
для решения ряда алгоритмических проблем [28]. В связи с этим весьма важным
представляется разработка методов, которые, опираясь на традиционный подход,
позволяют создавать практические системы синтеза рекурсивных программ с минимальными ограничениями.
1.1 Язык теории. Основные определения
С самого начала зададимся целью построить язык, допускающий рекурсивное
определение объектов теории и, в то же время, поддерживающий определённую
дисциплину построения этих объектов.
Дадим основные определения. Говоря о структурных вычислительных моделях, зафиксируем сигнатуру.
Определение 1.1. Четвёрку    A, F , P, D , где A, F, P и D – это счётные множества
(элементарных) имён величин, функциональных символов, предикатных символов,
и имён схем, соответственно, будем называть сигнатурой. Будем также считать, что
зафиксировано непустое конечное подмножество E  D имён схем.
Как и при традиционном подходе, понятие функциональной связи играет в
теории существенную роль. Задание интерпретации вычислительной модели ставит
в соответствие функциональным связям программные модули. Функциональные
связи используются при построении терма-решения поставленной в данной модели
задачи. Построенному терму в результате задания интерпретации сопоставляется
программа, которая содержит вызовы исходных модулей. Степень сложности синтезированной программы определяется мощностью языка теории.
Определение 1.2. Выражение вида
f : a 1 ,..., a n  a 0 ,
(1.1)
где a i , i=0,...,n – имена величин вычислительной модели, будем называть функциональной связью (ФС). В записи (1.1) f - это имя ФС, a i - аргументы, a 0 – результат
ФС.
7
Неформально ФС трактуется как возможность вычисления значения величины
a 0 по набору значений величин a1 , , a n применением отображения f. Имена величин формируются из элементов множества A и удовлетворяют следующему рекурсивному определению:
Определение 1.3. Пусть , - имя величины, тогда a , a. и  .a также являются именами величин вычислительной модели. В записи вида  .a  называется
префиксом. Длина имени  определяется количеством элементов множества A (с
учетом возможных повторных вхождений), из которых сформировано имя  .
ФС объединяются в специальные структуры, называемые схемами отношений
или просто схемами, из схем строятся вычислительные модели (отсюда – структурные вычислительные модели).
Определение 1.4. Схемой T называется выражение вида
T  (a 00 : T00 ,, a0 N : T0 N ,
0
if
0
p1  a10 : T10 ,, a1 N : T1 N ...
pk  a k 0 : Tk 0 ,, a kN : TkN
fi | set ),
1
k
1
(1.2)
k
где T  D \ E – имя схемы,
a ij  A - собственные атрибуты схемы,
Tij  D - собственные подсхемы схемы T,
p i  P - выбирающие предикаты,
set – набор ФС.
Заголовком схемы называется участок записи (1.2) до символа «»; фрагмент
заголовка if  fi называется альтернативой, а всё прочее – постоянной частью заголовка. В альтернативной части выделяются pi - альтернативные ветви. Если a – некоторое имя величины, T – имя схемы и рассматривается a: T , то a называется связанным со схемой T.
Можно отметить некоторую аналогию между введённым здесь понятием схемы и схемой отношения в реляционных базах данных [29]. Используя это, мы иногда будем употреблять термины реляционного подхода, такие как «атрибут», «подсхема схемы», «кортеж» и т. д.
Укажем теперь требования, которым удовлетворяет набор set схемы T. Для
этого прежде всего определим, какие имена величин порождаются заголовком схемы.
Определение 1.5. Пусть T  aqr : Tqr  | set  – схема. Если Tqr  E , то a qr - имя величины схемы T. Если Tqr  D \ E и  - имя величины схемы Tqr , то a qr . - имя величины схемы T. В дальнейшем имена величин схемы T будем называть её атрибутами.
Для обозначения атрибутов мы будем использовать строчные буквы начала латинского алфавита либо буквы греческого алфавита – если надо подчеркнуть сложную природу атрибута.
Определение 1.6. Рассмотрим схему T. ФС f : a1 , , a n  a 0 называется допустимой
(для схемы T), если и только если a 0 , , a n – атрибуты схемы T.
8
Определение 1.7. Схема называется синтаксически правильной, если set содержит
только допустимые ФС.
В дальнейшем будем использовать только синтаксически правильные схемы.
Кроме того будем считать, что ФС, содержащиеся в наборе set схемы T отвечают
следующим требованиям:
А) каждая ФС содержит по крайней мере один собственный атрибут схемы;
Б) в наборе set нет ФС, в которые вовлечены атрибуты из разных альтернативных ветвей схемы T или атрибуты из альтернативных частей её подсхемы;
В) длинна любого атрибута, связанного ФС, не превышает двух.
Иногда величины предметной области, для которой строится вычислительная
модель, имеют смысл только при выполнении некоторого условия. Так, о гипотенузе и катетах можно говорить лишь в том случае, если речь идёт о прямоугольном
треугольнике. Для отражения подобных фактов и служит альтернативная часть заголовка схемы – она указывает, при выполнении каких условий определены те или
иные атрибуты. В ряде случаев информацию об осмысленности атрибутов схемы
бывает важно иметь в наборе set. Для этого вводится понятие атрибута с условием
или у-атрибута
Определение 1.8. Факт наличия некоторого условия P у атрибута a будем отмечать
записью a P , а выражение a P называется у-атрибутом.
Будем считать, что с атрибутами, определёнными в общей части заголовка,
связывается условие «истина» (выделенный предикатный символ, которому сопоставляется тождественно истинное значение). Если в записи у-атрибута a P
P=«истина», то условие P может быть опущено.
В качестве примера схемы приведём описание понятия «член-ряда», определяющего n-й член натурального ряда либо ряда Фибоначчи в зависимости от значения скаляра s. Символом «I» будем обозначать тождественное отображение.
член_ряда = ( s : скаляр, x : целый, n : целый,
if равно (s, «натуральный»)  xn : целый 
равно(s, «фибоначчи»)  xf : число_фиб fi 
I : n  xn ;
I : xn  x ;
I : n  xf.n ;
I : xf.a  x ).
В этом примере неэлементарной является схема «число_фиб», которая определяет член ряда Фибоначчи. Описание этой схемы будет приведено позднее, когда
мы коснёмся рекурсивных конструкций. Собственными атрибутами схемы
«член_ряда» являются s, x, n, xn и xf. В схеме «число_фиб», связанной с атрибутом
xf, определены атрибуты n и a, т. о. в схеме «число_фиб» появляются атрибуты xf.n
и xf.a. Для натурального ряда значение n-го члена совпадает с его номером n – этот
факт отражается двумя первыми ФС схемы. Число Фибоначчи вычисляется по более сложным законам, определяемым схемой «число_фиб». Вход в подсхему «число_фиб» схемы «член_ряда» и выход из неё осуществляется посредством двух последних ФС набора set схемы «член_ряда».
Определим теперь понятие структурной вычислительной модели.
Определение 1.9. Конечная совокупность схем M  (T1 , , Ts ) структурной вычислительной моделью или С-моделью. С-модель M является (синтаксически) замкну-
9
той, если и только если для каждого её элемента Ti  M схемы, встречающиеся в
определении Ti являются элементарными либо определены в С-модели M.
Описывая С-модель для выбранной предметной области, мы строим специальную формальную теорию, в которой можно решать различные алгоритмические
проблемы. В этой работе, главным образом, рассматривается проблема синтеза.
Постановка задачи в С-модели носит непроцедурный характер – в ней указываются лишь исходные и искомые атрибуты некоторой схемы. Содержательно постановка задачи есть задание на построение схемы алгоритма, реализующего требуемые вычисления. Схема алгоритма становится алгоритмом (программой) в результате задания интерпретации для С-модели.
Определение 1.10. Задачей в С-модели M называется тройка S  ( A0 , X 0 , T ) , где A0
и X 0 - наборы имён соответственно исходных и искомых величин, а T – схема Смодели M, в которой определены эти имена.
Замечание 1.1. В определении задачи не все имена из наборов A0 и X 0 обязаны явно
присутствовать в заголовке схемы T – это могут быть и произвольные атрибуты
схемы.
При исследовании свойств С-моделей и алгоритмов синтеза программ в них
нам потребуется понятие развёртки схемы T. Оно определяется через развёртку
схемы на атрибуте.
Определение 1.11. Пусть T  ( , aij : Tij , | set ) - схема, и Tij  E . Развёрткой схемы T на атрибуте a ij будем называть выражение, получающееся в результате
А) подстановки в заголовок исходной схемы на место a ij : Tij заголовка схемы Tij и
Б) присоединения к набору set схемы T набора ФС схемы Tij .
Все добавленные в схему T в результате такого действия атрибуты, имена предикатов и имена отображений модифицируются префиксом a ij .
Процесс построения развёртки на атрибуте может повторяться многократно –
пока имеются атрибуты, связанные с неэлементарными схемами.
Определение 1.12. Под полной развёрткой T С-модели понимается объект, полученный из схемы T, у которой в результате последовательности развёрток на атрибутах в заголовке остаются только атрибуты, связанные с элементарными схемами.
Полная развёртка, вообще говоря, не является схемой в смысле определения
1.4, однако понятие схемы нетрудно переопределить с тем, чтобы оно оставалось
корректным для развёртки на атрибуте и полной развёртки. Для этого необходимо в
выражении (1.2) разрешить появление нескольких if  fi – участков и потребовать,
чтобы единственным видом их пересечения было строгое вложение (как оно трактуется в языках программирования).
При построении С-модели мы будем допускать возможность рекурсивных
определений схем. В общем случае рекурсивные конструкции имеют вид:
T1  ( , a 2 : T2 , ), T2  ( , a 3 : T3 , ),  , Tr 1  ( , a r : Tk  ), Tk  ( , a: T11 ). Схе
мы Ti , i=1,...,k будем называть рекурсивными. Ясно, что полная развёртка рекурсивной схемы не определена – процесс её построения не заканчивается. Ниже будет
10
показано, что некоторые естественные ограничения позволяют выделить класс Смоделей, допускающий рекурсивные схемы, в котором проблема синтеза решается
с полиномиальными оценками, несмотря на трудности, связанные с анализом рекурсивных определений схем.
Приведём пример рекурсивной конструкции – опишем схему, которая определяет член ряда Фибоначчи:
число_фиб = ( n : целое, a : целое,
if E(n,”0”)  fa: целое 
E(n,”1”)  sa: целое 
G(n,”1”)  p: число_фиб,
pp : число_фиб fi |
I: “1”  fa; I: fa  a;
I: “1”  sa; I: sa  a;
вычесть : n,”1”  p.n;
вычесть: n,”2”  pp.n;
сложить : p.a, pp.a  a).
Описываемый здесь язык вкладывается в язык Декарт [1], если потребовать,
чтобы при задании интерпретации I предикаты альтернативной части одной схемы
образовывали полную систему, т. е. для выражения (1.2) p1  pk I = истина и
= ложь, если i  j . В работе не преследовалась цель создания нового языка
спецификаций – приведённый формализм представляется удобным для исследования проблемы синтеза ветвящихся и рекурсивных программ из некоторого класса.
pi & p j
I
1.2 Нерекурсивные детерминированные С-модели.
В этом параграфе мы выделим некоторый класс С-моделей. Для этого нам понадобится понятие детерминированной схемы. Чтобы подчеркнуть факт детерминируемости (отвлекаясь пока от вопроса задания интерпретации С-модели) мы будем использовать двухальтернативную форму записи if . . .fi – участка:
if P  S1; S 2 fi – подразумевая, что реализация S1 осмыслена при истинности
реализации P, а S2 – в противном случае.
Определение 1.13. Схему T вида (1.2) будем называть детерминированной, если она
не имеет альтернативной части либо её альтернативная часть имеет форму
if P ; fi .
Здесь и ниже, если это не оговаривается специально, будем полагать, что совокупность схем, составляющих С-модель, является упорядоченной.
Определение 1. 14. С-модель M = ( T1 ,  , Ts ) называется не рекурсивной детерминированной (НДС-) моделью, если выполнены следующие условия:
1) M – синтаксически замкнута;
2) T1 ,  , Ts - детерминированные схемы;
3) любая схема Ti модели определяется только через элементарные схемы либо через схемы, которые предшествуют Ti в модели M.
11
Ясно, что в НДС-модели полная развёртка любой схемы является конечной.
Различные задачи в НДС-модели приводят к различным в смысле [13] вычислительным моделям. Это может происходить, в частности, если задачи ставятся на
разных схемах НДС-модели.
Рассмотрим подробнее вопрос о соотношении НДС-моделей и детерминированных вычислительных моделей, которые вводит А. Я. Диковский. Для этого введём понятие строго детерминированной схемы.
Определение 1.15. Строго детерминированной схемой будем называть детерминированную схему, у которой для любых двух ФС, совпадающих по правой части (результату), аргументы принадлежат разным альтернативным ветвям.
Напомним ключевые определения из [13]. Под детерминированной (Д-) вычислительной моделью понимается конечная система  детерминированных уравнений. Детерминированное уравнение для величины (атрибута) a – это выражение
 a  вида
a  if p1   1  . . .  pn   n fi
в котором n>0, p1 , , p n - попарно различные предикатные символы и  1 ,  ,  n
- функциональные связи, у которых результатом является атрибут a.
Покажем, что полная развёртка схемы НДС-модели является Двычислительной моделью (моделью Диковского) в смысле работы [13].
Теорема 1. 1. Полная развёртка любой схемы T НДС-модели M определяет некоторую модель Диковского, если M составлена только из строго детерминированных
схем.
Доказательство. Рассмотрим схему
T  (a 00 : T00 ,, a 0 N ,: T0 N ,
if p  a10 : T10 ,, a1 N : T1 N ;
0
0
1
1
a 20 : T20 , , a 2 N : T2 N
2
2
fi
set ).
Напомним, что атрибутам схемы T естественным образом приписываются условия
«истина», p или –p в зависимости от местоположения в заголовке. В развёртке исходной схемы T может появиться фрагмент
if p if a st . q a st .bqr : Tqr , fi  fi ,
в этом случае атрибуту a st . bqr приписывается условие p& a st . q . Поскольку полная
развёртка схемы в НДС-модели является конечной, мы можем произвести переименование и заменить сложные имена объектов простыми. Требование счётности сигнатуры при этом не нарушается. Для завершения доказательства достаточно сделать последний шаг. Набор set развёртки содержит теперь различные ФС вида f :
c1 / p 1 , . . . , c k / pk  c0 / p 0 . Припишем каждой ФС условие Pf  p0 & & pk . Соберём все ФС, правые части которых (результаты) совпадают и сформируем для каждого результата детерминированное уравнение  ( c 0 ) вида
c0  if Pf 1  f 1  . . .  Pfn  fn fi
Очевидно по построению, что
А) n>0;
12
Б) Pf 1 , , Pfn - попарно-различны;
В) для каждого атрибута c имеется не более одного  (c) ;
Г) детерминированных уравнений конечное число.
Замечание 1.2. А. Я. Диковским показано, что при выборе семантики, в которой не
используется внешняя управляющая память для задания условий в детерминированных уравнениях, проблема синтеза в Д-вычислительных моделях является NPполной. В НДС-моделях алгоритмы, решающие проблему синтеза, обладают полиномиальными характеристиками, даже если используются не строго детерминированные схемы. Теорема 1.1 позволяет выделить в классе моделей Диковского «хороший» в алгоритмическом плане автоматического синтеза подкласс моделей.
Для иллюстрации наших рассуждений мы будем использовать аппарат теории
графов [30]. Функциональная связь f : a 1 ,  , a n  a 0 представляется двудольным
графом, изображённым на рис. 1.1.
a1
a2
. . . an
f
a0
Рис. 1.1. Изображение ФС
При этом у-атрибуты (аргументы и результаты ФС) определяют множество вершин
первого сорта (на рисунке – точки), а функциональному символу сопоставляется
вершина второго сорта (кружок). Схему мы будем изображать графом, являющимся
объединением графов, которые соответствуют ФС этой схемы. Выделяя схему, будем заключать её в прямоугольник, в левом верхнем углу которого будет указываться имя схемы. Схеме «член_ряда», которая описана в разделе 1.1, в этих соглашениях соответствует орграф, приведённый на рис. 1.2.
13
член_ряда
n
число_фиб
s
I
xf.n/P
I
xn/Q
xf.a/P
I
I
X
Рис. 1.2. Изображение схемы член_ряда
1.3 Рекурсивные детерминированные С-модели.
При описании класса рекурсивных детерминированных С-моделей мы будем
существенно использовать понятие детерминированной схемы и развёртки схемы,
введённые в предыдущих разделах [31].
Определение 1.16. С-модель M  (T1 ,  , Ts ) называется рекурсивной детерминированной (РДС-) моделью, если выполнены следующие требования:
1) M – синтаксически замкнута;
2) T1 ,  , Ts - детерминированные схемы;
3)
при построении развёртки любой схемы Ti модели M выражения вида  : Ti ,
где  - (составные) имена величин модели, появляются только в одной из двух альтернативных ветвей схемы Ti . При этом Ti в выражениях вида  : Ti являются рекурсивными вхождениями исходной схемы, ветвь, в которой имеется рекурсивное
вхождение, называется рекурсивной ветвью, а сама схема Ti - рекурсивной схемой.
Конструктивность определения 1.16 обеспечивается следующей теоремой.
Теорема 1.2. Принадлежность С-модели M  (T1 ,  , Ts ) классу РДС-моделей проверяется за конечное время, пропорциональное M 4  Cs 4 .
Доказательство. Построим конструктивную процедуру проверки выполнения требований определения 1.16.
1) Требование синтаксической замкнутости проверяется со временем, не превышающим O M 3  . Для этого мы последовательно рассматриваем схемы Ti модели M. Для каждой подсхемы из заголовка этого Ti со временем O E  выясняем,
является ли она элементарной; в случае отрицательного результата со временем
O M  ищем её среди схем модели M, если она там не обнаруживается, заключаем, что M не относится к классу РДС-моделей. Грубая оценка этого этапа
14

M  O M  E    O M   O E    O  M  E 
3

может быть улучшена за счёт исполь-
зования различных технических приёмов, таких как аппарат предописаний, традиционный для языков программирования типа Паскаль [32]. Количество элементарных схем E считается фиксированным.
2) Требование детерминированности схем модели состоит в проверке удовлетворения схем Ti определению 1.13 – отсутствие альтернативной части заголовка, либо альтернативная часть в форме if P  S1; S 2 fi . Время оценки O M  .
3) Третий эта проверки – наиболее трудоёмкий. При этом мы также последовательно рассматриваем схемы Ti модели. Производя развёртку Ti , останавливаемся,
когда доходим до элементарной подсхемы либо до рекурсивного вхождения
схемы  : Ti . Если при этом не использовать дополнительные соображения,
напрашивается очевидная оценка O M L M  , где L – максимальное количество
атрибутов в заголовке схемы. Однако, затраты на этом этапе можно существенно
уменьшить, заметив, что для анализа характера схемы Ti каждую подсхему в её
развёртке достаточно рассмотреть один раз. Развёртка, полученная с использованием такой стратегии, схематически изображена на рисунке рис. 1.3. В этой
развёртке выделены уровни:
- нулевой – совпадает с заголовком исходной схемы, в котором каждая группа атрибутов с совпадающими именами схем (символами из множества D) для дальнейшей развёртки имеет по одному представителю;
- первый уровень – в развёртках на оставшихся атрибутах также оставлено по одному представителю для групп, а, кроме того, вычеркнуты атрибуты, имена схем
которых совпадают с именами схем – непосредственных предшественников;
- последующие – строятся аналогично.
Ясно, что глубина такой развёртки не превышает M  1 . Таким образом, затраты
третьего
этапа
могут
быть
оценены
величиной
4
O M   M   M  1 2   M  1  O M  .


Суммарные затраты на выполнение всех трёх этапов определяются оценкой
для третьего этапа, т. е. O M 4  . 
Замечание 1.3. Полученная оценка является достаточно грубой. Самый трудоёмкий
(третий этап) можно существенно улучшить, например, используя при построении
развёртки левый обход с запоминанием имён схем достигнутых атрибутов и вычёркиванием их при возвратах на верхние уровни.
15
| M | 1
1:
2:
Ti :
| M | 2
Ti1 ... Ti1 ... Ti
Ti1 ... Ti2 Ti1 Ti
...
...
.
. .
.
| M | 1 :
...
...
...
... ...
1
Рис. 1.3. Развёртка рекурсивной схемы
Класс РДС-моделей включает в себя класс НДС-моделей. Задача для РДСмоделей удовлетворяет определению 1.10. Единственное дополнение, которое
необходимо сделать, заключается в том, что множества имён исходных и искомых
величин в формулировке задачи состоят из у-атрибутов (атрибутов с указанием
условий, при которых имеют смысл соответствующие величины ПО). Решение задачи S  ( A0 , X 0 , T ) в РДС-модели M неформально можно трактовать как построение
программного терма F, который обеспечивает получение значений искомых величин ПО по заданным значениям исходных величин при выполнении условий, содержащихся в S. Эта же проблема естественным образом представляется как
нахождение пути в графе, соответствующем схеме T. Программный терм F строится с использованием ФС, которые явно или не явно присутствуют в схеме T. Исчисление, используемое при этом, будет строго описано и исследовано в последующих
разделах, здесь проблема синтеза рассматривается на содержательном уровне. Подтерм G терма F отражает факт достижимости одних атрибутов схемы через другие,
Простейшими подтермами являются имена ФС схемы T. Условие, при котором в
процессе построения F обеспечивается достижимость некоторого атрибута, может
не совпадать с условием, при котором этот атрибут встречается в исходной схеме (в
развёртке исходной схемы). В дальнейшем эти условия мы будем называть условиями достижимости и допустимости атрибута соответственно. Достижимость атрибута определяется наличием в развёртке ФС, результатом которой является этот атрибут, достижимостью аргументов такой ФС и непротиворечивостью условий достижимости аргументов и условия допустимости результата. Последнее требование
является естественным отражением того, что величину ПО, имеющую в ней смысл
16
при некотором условии P, нельзя вычислить через другую величину, определённую
в ПО при дополнительном условии –P. Мы будем считать, что при использовании
ФС f : a 1 ,  , a n  a 0 для построения терма F, условие достижимости a 0 определяется
конъюнкцией условий достижимости аргументов и условия допустимости результата.
Процесс полной развёртки некоторой схемы T задаёт иерархию условий – на
условиях может быть определено отношение частичного порядка. Имена условий,
также как и атрибуты, формируются с использованием префикса, который определяется развёрткой схемы T. Это соглашение гарантирует уникальность имён (в
частности, имён условий) в развёртке. Мы определим отношение порядка следующим образом:
Определение 1.17. Если в развёртке схемы T имеется фрагмент
if  .. p if  .  . q  fi fi , то  .  .q и дополнительное к нему условие
 .  .q будем называть более сильными условиями по сравнению с  . p и отмечать
этот факт записью вида  .  . q   . p (символ «-» здесь используется как принадлежность имени доплняющего предиката, а не знак операции). Если   A , то
 .  .q и  .  .q будем называть непосредственно более сильными условиями, чем
 . p и записывать это в форме  .  . q   . p .
Определение 1.18. Пусть имеется рекурсивная схема T. Рассмотрим фрагмент её
развёртки:
, aij : Tij ,, if ,  . aij : Tiij , fi  .


Атрибут  .a ij будем называть следующим за a ij и обозначать его nk  a ij  , где k –
длина префикса  .
Введённые отношения будем использовать при обсуждении исчисления, в котором ищется решение задачи S, и алгоритмов поиска этого решения.
Выделенный здесь класс РДС-моделей обладает следующими привлекательными свойствами:
1. Поиск решения задачи S  ( A0 , X 0 , T ) может осуществляться поэтапно на схеме T
и её подсхемах, причём на каждом этапе – работе с одной подсхемой – используется информация, которая касается только данной подсхемы. Это снимает
многие сложности, в частности, существенно упрощает работу с условиями.
2. Информация о работе на каждом этапе может использоваться в дальнейшем –
обеспечивается бесповторность поиска решения, т. е. программный терм может
содержать процедуры (их вызовы).
3. Ограничения на использование рекурсивных конструкций позволяет синтезировать программы, в которых на синтаксическом уровне предусмотрен выход из
возможной рекурсии. Завершаемость таких программ зависит только от задания
семантики РДС-модели. Подробнее этот вопрос рассматривается во второй главе.
1.1. Интерпретация С-модели. Предложения вычислимости.
Интерпретация (или семантика) С-модели задаётся традиционно.
17
Определение 1.19. Интерпретация I С-модели M задаёт
- для каждой элементарной схемы T  E непустое множество (первичный тип) TI ;
- для каждого функционального символа f  F - некоторое отображение
f I : T1I TnI  T0 I ;
- для
каждого
предикатного
pI : T1I  TkI  Л , И.
символа
p P
-
булевское
отображение
В результате задания интерпретации I для С-модели M каждой схеме T этой
модели сопоставляется отношение. Отношение трактуется как множество наборов,
которые удовлетворяют некоторым условиям. Наборы принадлежат декартову произведению множеств, сопоставленных подсхемам схемы T. Элементы наборов поименованы атрибутами заголовка. Если в заголовке схемы присутствует альтернативная часть, то наборы отношения выбираются из размеченного декартова произведения [33]. Разметку определяют предикаты альтернативной части. Считается,
что эти предикаты определены на типах атрибутов из общей части заголовка схемы. Термин «тип атрибута» служит сокращением для выражения «множество, сопоставленное схеме, с которым связан атрибут». В отличие от первичного типа такой тип мы будем называть (не первичным) типом, наборы типа – кортежами, а их
именованные элементы – компонентами.
Схемам с альтернативными частями соответствуют типы, наборы которых могут различаться как количеством, так и природой компонент. Конкретный вариант
набора определяется значениями определяющих предикатов. Напомним, что мы
рассматриваем детерминированные схемы, для которых вариант кортежа всегда
существует и определён единственным образом.
Отображения, которые сопоставляются ФС схемы в результате задания семантики С-модели, определяют соотношения между компонентами кортежей. Выполнение этих соотношений указывает принадлежность кортежа типу. С компонентами
кортежей связываются реализации условий, которые приписаны соответствующим
этим компонентам у-атрибутам. Напомним, что с компонентами, которые постоянно присутствуют в наборе, связывается тождественно истинное условие. По аналогии с [1] определим формально критерий принадлежности кортежа типу.
Определение 1.20. Рассмотрим M   T . Пусть a 0 / P0 , , a n / Pn - атрибуты развёртки T,   f : a 1 , , a n  a 0 - функциональная связь этой же развёртки, а r – кортеж, определяемый заголовком. Будем говорить, что  I имеет смысл для кортежа r,
если PiI  И , i  0, , n. Кортеж r принадлежит типу TI , если на r выполнены все
функциональные соотношения, которых имеют смысл для него.
Для класса РДС-моделей кортежи, вообще говоря, сколь угодно длинны. Алгоритмы синтеза, предлагаемые в данной работе, позволяют эффективно устанавливать принадлежность кортежа типу независимо от того, является ли соответствующая схема рекурсивной или нет. Важная роль при этом отводится умению устанавливать новые – явно не указанные в описании С-модели – соотношения между величинами моделируемой ПО. Для этого используется понятие предложения вычислимости, традиционное для теории вычислительных моделей [10,26]. Мы будем использовать это понятие в следующей форме:
18
Определение 1.21. Выражение вида F: A  X , где F – (программный) терм в сигнатуре  , построенный по специальным правилам, A и X – непустые наборы уатрибутов некоторой С-модели, называется предложением вычислимости (ПВ).
Наборы A и X называются аргументами и результатами ПВ соответственно.
Неформально ПВ означает, что программа, являющаяся её реализацией FI , по
заданным значениям аргументов A вычисляет значения результатов X.
19
ГЛАВА 2. ПРОБЛЕМА СИНТЕЗА В РДС-МОДЕЛИ.
В этой главе определяется теория, в рамках которой осуществляется попытка
построения программного терма-решения для задачи S   A0 , X 0 , T , когда T является
схемой РДС-модели. Показывается полнота и непротиворечивость теории относительно понятия выводимости предложения вычислимости. Формулируется алгоритм решения задачи S и исследуется вопрос его корректности. В заключение рассматриваются некоторые соображения по реализации.
2.1. Выводимость ПВ. Правила вывода.
Проблему синтеза [34] будем трактовать следующим образом: исходя из задачи S   A0 , X 0 , T  построить программный терм-решение F, такой, что для произвольной интерпретации I принадлежность кортежа r типу TI гарантирует выполнение на r функционального соотношения, которое задаётся реализацией FI . Термрешение F извлекается из доказательства теоремы существования вида
T | F | F: A0  X 0 ,
(2.1)
формулируемой на основании задачи S. Доказательство теоремы (2.1) проводится в
рамках некоторой формальной теории. Содержательно это означает, что, используя
информацию о структуре схемы T и соотношения между её атрибутами, мы пытаемся вывести ПВ, которое связывает атрибуты множеств A0 и X 0 и удовлетворяет
схеме T.
Дадим строгое определение последнего понятия.
Определение
2.1.
Рассмотрим
РДС-модель
Пусть
M   , T ,.
a 1 / P1 ,  , a n / Pn , x1 / Q1 ,  , x m / Qm
у-атрибуты
развёртки
T,
  F: a 1 / P1 ,  , a n / Pn  x1 / Q1 ,  , x m / Qm - предложение вычислимости, а r – кортеж,
определяемый заголовком развёртки при некоторой интерпретации I. Будем говорить, что  I имеет смысл для кортежа r, если PiI  И , i  1, n, и Q jI  И , j  1, m.
Определение 2.2. Будем говорить, что ПВ   F: A  X удовлетворяет схеме T, если
при любой интерпретации I тип TI не содержит двух кортежей, для которых  I
имеет смысл, таких что их компоненты совпадают для всех атрибутов множества A,
но не совпадают по крайней мере для одного атрибута множества X. При этом для
произвольного кортежа r, который принадлежит отношению TI , результатом применения FI к компонентам r, именованным атрибутами множества A, является
набор компонент, именованных атрибутами множества X.
Элементарными ПВ являются функциональные связи схемы T. Поскольку
именно ФС служат для установления принадлежности кортежа r типу TI , ясно, что
все ФС схемы T удовлетворяют ей.
Прежде чем переходить к обсуждению теории, в которой ищется вывод теоремы существования, приведём абстрактный пример рекурсивной схемы и поясним
трактовку типа, порождённого такой схемой. В простейшем случае рекурсивная
схема имеет вид:
T  A, X , if p ; n: T , fi | set ,
(2.2)


где A  a 1 : T1 , , a m : Tm , a i  A, Ti  D, i  1, , m,
20
X  x1 : Q1 ,, xk : Qk , x j  X ,Q j  D, j  1,, k ,
n – атрибут, связанный с рекурсивным вхождением схемы T. На рис. 2.1 изображён
граф, который соответствует описанию (2.2) с точностью до ФС из набора set. В левой части рисунка сосредоточены ФС, связывающие, атрибуты p-ветви, в правой –
атрибуты –p-ветви, такому соглашению мы будем следовать и в дальнейшем.
T
A
п. Т
/p
n.A
G1
n.X
/-p
G2
X
Рис. 2.1. Пример абстрактной рекурсивной схемы
Значения X могут быть определены поA независимо от условия p в том случае,
когда в A есть набор A 0 , который обеспечивает
- достижимость X / p и
- достижимость n. A 0 /  p в рекурсивном вхождении;
при этом должна быть обеспечена достижимость X / p по n. X /  p . В этом случае
задание семантики может привести к тому, что T будет содержать сколь угодно
длинные кортежи (когда не обеспечивается выход на –p-ветвь). Нам важно то, что
анализируя рекурсивную схему T при поиске решения поставленной задачи, мы
можем находить «регулярности» и посредством этого конструктивно сворачивать
потенциально бесконечные объекты, строя при этом рекурсивные программные
термы.
В данном примере можно сразу отметить, что схема n.T является «копией»
схемы T «на более низком уровне» (здесь мы рассуждаем неформально). Если
предположить существование терма F, который обеспечивает достижимость n.X по
n.A, то можно заключить, что вид терма, доставляющего X по A будет следующим:
F= if p then G1 else G2[F] fi,
21
где F, выступающий в качестве подтерма терма G2, применяется к n.A и доставляет
n.X. Для рассматриваемой «хорошей» схемы, чтобы получить возможность сформулировать предложение (существование терма F), нам даже нет необходимости
производить развёртку на n.T – необходимые требования – перевычисления аргументов и результатов – выполняются. В реальных случаях при попытке построения
доказательства теоремы существования вида (2.1) ситуация может оказаться значительно более сложной.
Опишем теперь теорию, в которой производится поиск доказательства теоремы существования вида (2.1). В теории имеется три сорта термов, которые строятся
в сигнатуре  .
Термы первого сорта (а-термы) представляют собой упорядоченные списки (nки) атрибутов (атрибуты понимают в смысле первой главы). Они порождаются элементами множества A.
Термы второго сорта (термы условий или у-термы) строятся из термов первого
сорта и предикатных символов, принадлежащих множеству P.
Пусть
p – n-местный предикатный символ, p  P ,
A – n-элементный терм первого сорта, такой, что его i-й атрибут связан с той же
схемой, что и i-й аргумент p,
P,Q – термы второго сорта,
 - некоторый атрибут,
«-» и «&» - операции отрицания и конъюнкции соответственно,
тогда
1)  . p A - терм второго сорта;
2) –P - терм второго сорта;
3) P&Q - терм второго сорта.
Наконец, программные (п-) термы третьего сорта строятся из термов всех сортов по следующим правилам.
Пусть
P - терм второго сорта,
f, g, h – функциональные символы (элементы F),
F1, F2, F3 термы третьего сорта и имеются вхождения символа g в F3,
 - некоторый атрибут,
F3[h/g] – обозначение замены вхождения g на h в терме F3,
Тогда
1)  . f :  - терм третьего сорта;
2) F1; F2 – терм, построенный с применением оператора композиции;
3) if P then F1 else F2 fi – терм (оператор ветвления);
4) h=if P then F3[h/g] else F2 fi - терм (оператор рекурсии).
Термы первого сорта присутствуют здесь неявно.
Мы будем рассматривать одну схему аксиом и четыре правила вывода.
0. Схема аксиом теории : skip : A  A.
Правила вывода:
22
F: A  X , Y
F: A  X
F: A  X , I f : I  x / p
2.
,
F; f : A  X , I , x / P& p
1.
где P – конъюнкция условий достижимости атрибутов из I, а p – условие допустимости x (напомним, что условие достижимости – это условие, при котором в процессе построения доказательства обеспечивается достижимость некоторого атрибута, а условие допустимости – это условие, при котором атрибут имеет смысл в РДСмодели).
F1: A  X , x / Q& p F 2: A  X , x / Q& p
3.
,
if p then F1 else F 2 fii : A  X , x / Q
4. F1: A  X / Q& p
g1: nk  A  nk  X , , gs: nk  A  nk  X   F 2: A  X / Q&  p
,
h  if p then F1 else F 2[h / g1][h / gs] fi: A  X / Q
где запись вида X/P служит сокращением для x1 / P,  , x m / P ,
а nk - символ введённого в разделе 1.3 отношения порядка на атрибутах модели.
Схема аксиом позволяет формировать «начальные» для вывода ПВ предложения вычислимости, отталкиваясь от заданных атрибутов. Правило сужения I применяется в тех случаях, когда необходимо исключить из рассмотрения часть атрибутов, достижимость которых доказана, например, при использовании правила 4
или в конце доказательства.
Правило композиции (или транзитивности) 2 понимается как обычно: если показана достижимость I и известно, что по I вычислим x, то можно считать, что показана достижимость x с учётом условий, при которых достижимы атрибуты из I.
Правило ветвления 3 позволяет ослабить условие при атрибутах: если показана
достижимость x при условии Q&p (термF1) и одновременно при условии Q&-p
(терм F2), то ПВ, у которого программный терм построен с помощью оператора
ветвления, обеспечивает достижимость x, элиминируя условия p и-p.
Наконец, правило введения рекурсии 4. Оно применимо только для случая рекурсивной схемы. Установить рекурсивные схемы модели позволяет процедура,
описанная в теореме 1.2. Правило означает, что если
1) показана достижимость X/Q&p по A посредством терма F1 и
2) из предположения о достижимости nk  X , , nk  X  следует достижимость X/Q&p.
Построенную теорию будем называть исчислением SM.
2.2. Корректность и полнота правил исчисления SM.
Покажем, что правила исчисления SM для некоторой схемы T РДС-модели M
позволяют получить все ПВ, которые удовлетворяют этой схеме T (свойство полноты исчисления SM) и что, используя правила SM, можно построить только ПВ, удовлетворяющие схеме T (свойство корректности SM).
1
1
s
s
1
1
s
s
1
s
1
s
23
Теорема 2.1. Исчисление SM является корректным относительно понятия ПВ, удовлетворяющего схеме T.
Доказательство. Утверждение теоремы означает следующее: если ПВ   F: A  X
выведено с помощью правил SM на основании информации об исходной схеме T
РДС-моделей M, то для любых двух кортежей типа TI независимо от интерпретации
I, таких что  I имеет для них смысл, компоненты, которые соответствуют атрибутам A и X, в этих кортежах совпадают и связаны соотношением, задаваемым FI .
Для доказательства рассмотрим все правила поочерёдно и покажем, что они позволяют выводить из ПВ, удовлетворяющих исходной схеме T, только те ПВ, которые
также удовлетворяют схеме T.
0. Очевидно. Независимо от интерпретации I, в TI не может быть двух кортежей,
таких что
А) в них присутствуют компоненты AI и
Б) кортежи одновременно совпадают и не совпадают по этим компонентам.
1. ПВ   F: A  X , Y (посылка правила) удовлетворяет исходной схеме. Это означает, что любые два кортежа, для которых  I имеет смысл, и совпадающие по
AI , совпадают также по всему набору X I , YI . Следовательно, эти кортежи совпадают и по набору X I . Поскольку X I , YI является результатом применения отображения FI к AI , то X I получается применением того же FI к AI с последующей
проекцией на X.
2. Правило композиции. Пусть опять посылками правила являются ПВ, удовлетворяющие схеме T. Рассмотрим два кортежа s и t, для которых реализации посылок
имеют смысл, причём s и t совпадают по AI . Предположим, что правила не удовлетворяет T, это означает, что s и t не совпадают по какой-либо компоненте из
набора X I , I I , x I . Несовпадение по компоненте из X I , I I противоречит тому, что
F: A  X , Y удовлетворяет схеме T, т. е. s и t совпадают, в частности, по I I , которые вычисляя применением FI (при выполнении некоторого условия PI ) к AI .
Последнее означает, что s и t должны совпадать и по x I , поскольку f : I  x / p
удовлетворяет схеме T. Отметим, что в качестве второй посылки правила композиции всегда берётся ФС из (развёртки) исходной схемы, именно поэтому p – это
условие допустимости x. Условие, при котором f I обеспечивает возможность
вычисления x I по I I не может быть более слабым, чем условие, при котором вычислены I I , и условие, при котором в TI допускается присутствие x I , т. о. оно
определяется конъюнкцией P&p. Набор X I , I I , x I вычисляется последовательным
применением FI к AI и затем f I к соответствующим результатам предыдущего
отображения, т. е. композицией отображений в общепринятом смысле. Мы показали, что правило 2 исчисления SM корректно.
3. Правило ветвления. Предположим, что ПВ из заключения правила не удовлетворяет исходной схеме, в то время как посылками правила являются ПВ, удовлетворяющие этой схеме. Введём обозначения для ПВ, из формулировки правила
1  F 1: A  X , x / Q& p;
2  F 2: A  X , x / Q&  p,
24
  if p then F1 else F 2 fii: A  X , x / Q.
Пусть задана интерпретация I. Рассмотрим два кортежа s и t, таких, что для них
обоих имеет смысл либо 1I , либо 2 I . Очевидно, что в каждом из этих случаев
для s и t имеет смысл и  I . Пусть s и t совпадают по компонентам AI и пусть для s
и t имеет смысл 1I . Если наше предположение о том, что ПВ из заключения правила не удовлетворяет схеме, является верным, то s и t должны не совпадать по какой-либо компоненте из X I , x I , а это противоречит первой посылке правила. В рассматриваемом случае программный терм из заключения правила вырождается до
F1, т. о. кортежи s и t, совпадая по AI , совпадают и по компонентам X I , x I , а соотношение между AI и X I , x I определяется реализацией терма if p then F1 else F 2 fi .
Второй случай (для s и t имеет смысл 2 I ) рассматривается аналогично. – Корректность правила ветвления исчисления SM показана.
4. Наконец, исследуем вопрос корректности правила введения рекурсии. Будем
обозначать
1  F1: A  X / Q& p,
k
k
k
1  g1: n  A  n  X ,  , s  gs: n  A  n  X ,
k1
1
s
s
1
1
s
s
2  F 2: A  X / Q&  p,
  h  if p then F1 else F 2h g1,,h gs fi i: A  X / Q.
Отметим, что, хотя в правиле 4 это явно и не указано, в антецеденте предполагается
наличие ПВ, обеспечивающих достижимость nk  A по A и X по nk  X  , (i=1,...,s) и
эти ПВ удовлетворяют исходной схеме T наряду с прочими посылками правила.
Как и прежде предположим, что заключение правила (  ) не удовлетворяет схеме T.
Рассмотрим два кортежа s и t из типа TI , которые совпадают по компонентам AI . В
силу предположения s и t должны различаться хотя бы по одной компоненте множества X I . Пусть для s и t одновременно имеет смысл и 1I , тогда для s и t имеет
смысл и  I , сделанное предположение входит в противоречие с первой посылкой
правила, а программный терм в заключении правила вырождается в F1. Пусть теперь для s и t одновременно имеют смысл i I (i=,...,s) и 2 I . Кортежи типа Ti могут
иметь вид:
1)
i
i
i
i
T


 , AI ,  , X I , 

F1
2) +
Мы сейчас находимся в ситуации, когда кортежи s и t имеют вторую форму и совпадают по AI , следовательно, они совпадают по nk  A I (в силу наличия в антецеденте неявных ПВ «перевычисления аргументов» A), совпадают по nk  X  I (по правилу композиции, в силу i ) и, наконец, кортежи s и t обязаны совпадать по компонентам X I (снова по правилу композиции с учётом неявных ПВ «выхода из рекурсии» вида G: nk  A, , nk  X   X ). – Т. о. мы пришли к противоречию с нашим
i
i
i
i
1
s
1
s
предположением. Остановимся теперь на форме программного терма из ПВ в за-
25
ключении правила. Вернёмся к изображению вида кортежа для типа TI . Термы gi,
которые определяют ПВ, связывающие nk  A I и nk  X  I , построены в рамках рекурсивных вхождений схемы T. Во второй форме кортежа фрагменты, соответствующие рекурсивным вхождениям исходной схемы, также могут иметь первый или
второй вид. В первом случае вхождения gi в терм F2 заменяется термом F1, во втором – самим термом F2, при этом подставленные термы связывают nk  A I и
k
n  X  I . Этот процесс может быть продолжен сколь угодно долго. Оператор рекурсии, с помощью которого строится программный терм из заключения правила, является просто средством сокращения развёрнутой записи терма F2. – Правило 4 исчисления SM также является корректным.
Перейдём теперь к вопросу исследования полноты правил исчисления SM. Для
этого нам надо показать, что если некоторое ПВ не может быть выведено из информации о схеме T по правилам SM, то это ПВ не удовлетворяет схеме T. Введём
понятие замыкания набора атрибутов относительно схемы T, которое понадобится
нам при доказательстве теоремы о полноте исчисления.
Определние 2.3. Пусть T
и пусть A – некоторый набор атрибутов схемы T. Замыканием A  для A относительно T будем называть объединение всех таких атрибутов X, что ПВ F: A  X может
быть получено с использованием правил SM из информации о схеме T.
Важное свойство замыкания A  определяется следующей леммой.
Лемма 2.1. ПВ F: A  X выводимо по правилам SM, если и только если X  A  .
Доказательство. Пусть X  x1 ,  , x n и пусть X  A  . Из определения A  следует, что
для каждого i, i=1,...,n по правилам SM выводимо ПВ Fi : A  , x i ,  , из которого по
правилу сужения может быть получено ПВ Fi : A  xi . Используя схему аксиом
skip: A  A и правило композиции, получаем Fi : A  A, x i . Повторяя эти рассуждения
для каждого i, а конце концов выводим ПВ F: A  X . Обратное очевидно следует из
определения A  .
Сформулируем и докажем теперь теорему о полноте приведённого исчисления.
Теорема 2.2. Исчисление SM является полным относительно понятия ПВ удовлетворяющего схеме.
Доказательство. Пусть T – исходная схема и пусть ПВ   F: A  X не может быть
выведено на основании информации о схеме T с помощью правил SM. Для доказательства теоремы мы должны построить интерпретацию I такую, что в TI имеются
кортежи s и t, для которых  I имеет смысл и которые, совпадая по компонентам
AI , различаются хотя бы по одной компоненте из X I . Рассмотрим интерпретацию
I, такую что в TI содержаться два кортежа s и t, компоненты которых совпадают для
атрибутов из A  и различаются для всех прочих атрибутов схемы T. Предположим
противное, что ПВ 1  F1: B  Y , будучи выводимым, не удовлетворяет T и определяется это на выделенных кортежах. Из предположения следует, что 1I имеет
смысл для s и t и что B  A (в противном случае кортежи не совпали бы по некоторому атрибуту из B). Кроме того, s и t должны различаться по компонентам из Y, т.
е. Y  A  . Пусть у-атрибут, y Y \ A  . Поскольку B  A , ПВ G: A  B выводимо по
i
i
i
i
i
i
i
i
26
лемме 2.1. Отсюда с учётом 1 по правилу композиции имеем G; F1: A  Y , значит
Y  A  и рассматриваемая интерпретация I является корректной – она подтверждает
то, что ПВ, выведенные с помощью правил SM, удовлетворяют исходной схеме.
Покажем теперь, что  не удовлетворяет T, в частности, при интерпретации I.
Предположим обратное. Поскольку A  A , заключаем, что должно выполняться
X  A  , так как иначе s и t, совпадая по компонентам AI , не совпадали бы по компонентам X I . Отсюда опять по лемме 2.1 заключаем, что ПВ F: A  X может быть
выведено по правилам SM. Это противоречит сделанному предположению, а значит
 не удовлетворяет схеме T, в частности, на кортежах s и t построенной интерпретации I. Таким образом мы показали полноту правил SM.
2.3. Алгоритм синтеза программ в классе РДС-моделей.
Основные трудности, с которыми мы сталкиваемся, решая проблему синтеза в
классе РДС-моделей, заключается в том, что
А) приходится работать с условиями, когда синтез осуществляется на схеме с альтернативной частью и
Б) применение правила рекурсии сопряжено с необходимостью строить предложения о вычислимости одних объектов через другие, находясь при этом в достаточно
неопределённой ситуации.
Предлагаемый алгоритм использует некоторую ограниченную стратегию поиска решения задачи S   A0 , X 0 , T  , что позволяет ему работать с полиномиальными
затратами ресурсов по отношению к длине описания РДС- модели M [35].
Входной информацией для алгоритма является описание модели M и формулировка задачи S. Доказательство теоремы существования решения (2.1) заключается в последовательном применении правил SM к аксиомам и ранее полученным
утверждениям. Аксиомами являются ФС из описания схемы модели M. Поиск доказательства ведётся от данных к целям методом «прямой волны» [36], при этом всё
время преследуется цель расширить множество достижимых из данных атрибутов и
ослабить условия, при которых показана достижимость.
В процессе построения доказательства (планирования) всегда фиксируется текущая схема. Это означает, что проблемно-ориентированные аксиомы выбираются
из числа явно присутствующих в наборе set данной схемы. Сначала текущей объявляется схема, на которой поставлена задача S. Если планирование на текущей схеме
невозможно, текущей становиться какая-либо её подсхема, для которой определён
вход (спуск в подсхему). Последнее означает, что показана достижимость атрибутов, определённых в подсхеме, причём условия достижимости совпадают с теми,
при которых эти атрибуты имеют смысл в описании. Если текущая схема не имеет
необработанных подсхем, то после окончания работы с ней текущей становиться
схема, для которой данная является подсхемой (подъём из подсхемы). Если осуществлён подъём из подсхемы, повторных спусков в неё не производится, а во
множество достижимых атрибутов включается только те условия при которых совпадают с условием общей части подсхемы. Этим достигается то, что производя поиск доказательства на текущей схеме, мы анализируем только её собственные усло-
27
вия. Попытка применения правила рекурсии осуществляется для рекурсивной схеме перед подъёмом из неё.
Предлагаемый алгоритм по сути своей является алгоритмом построения замыкания A0 для заданного в S набора атрибутов A0 . Информация о планировании на
текущей схеме запоминается в форме ПВ, таким образом планирование на подсхемах с совпадающими именами из D проводиться с учётом полученной ранее информации. В случае успешного завершения доказательства из последнего удаляется
ненужная информация (использование проблемно-ориентированных аксиом, которые не являются существенными для решения задачи S), после чего извлекается
схема программы. Подробнее эти вопросы, а также определение класса, которому
принадлежат синтезированные программы, обсуждаются в третьей главе.
Мы дали неформальное описание алгоритма синтеза. Более строго алгоритм
может быть описан с использованием некоторого псевдокода, структуры управления которого традиционны для языков программирования высокого уровня. При
описании алгоритма мы будем использовать следующие обозначения и соглашения:
Ck - множество у-атрибутов исходной схемы, достижимость которых установлена в данный момент;
по-аксиома – проблемно-ориентированная аксиома – ФС из (развёртки) исходной схемы;
вход в подсхему – наличие в Ck у-атрибутов, которые принадлежат подсхеме
текущей схемы;
A0 и T берутся из формулировки задачи S.
Описание алгоритма:
«установить i=0, C0  A0 »;
«поднять флаг “продолжать доказательство”»;
«текущей схемой объявить T»;
while
«поднять флаг “продолжать доказательство”» do
if «имеется по-аксиома текущей схемы, аргументы которой входят в C i »
then «применить правило композиции, и,
если возможно, правило ветвления»;
«определить Ci1 : к C i добавить новые у-атрибуты либо
изменить условия достижимости имеющихся»;
«установить i=i+1»;
«если определился вход в подсхему, запомнить её»
else
if «имеется подсхема, в которую определён вход»
then «объявить её текущей схемой»
else
if «текущая – рекурсивная схема»
then «применить правило введения рекурсии;
установить i=i+1; определить Ci1 »
else «объявить текущей внешнюю схему»
fi
28
fi
fi;
if «текущая – исходная схема T, и больше нет по-аксиом,
аргументы которых входят в C i »
then «опустить флаг “продолжать доказательство”»
fi
od.
Использование специальных структур данных, различные тактики выбора очередной по-аксиомы для использования её в доказательстве позволяют получать
весьма эффективные реализации приведённого алгоритма. Подробнее этот вопрос
освещён в третьей главе. Здесь нас интересует проблема корректности алгоритма.
Покажем, что каждый у-атрибут, попавший в некоторое C i , содержится в A0 и обратное: каждый элемент A0 попадает в некоторое C i .
Теорема 2. 3. Приведённый здесь алгоритм корректно вычисляет A0 .
Доказательство.
1. Индукцией по i покажем, что если некоторый у-атрибут e помещается в C i , то
e  A0 .
База индукции i=0. Тогда e  A0 , и по схеме аксиом и правилу сужения получаем
A0  e .
Индукция. Пусть i>0 и C i состоит из атрибутов, которые принадлежат A0 . Пусть
также на i+1-ом шаге используется ПВ F: B  Y , и e Y . B  A0 , т. к. B  Ci , следовательно, по лемме 2.1 имеется G: A0  B . Используя правило композиции и
сужения, получаем G; F: A0  e , т. е. e  A0 .
2. Покажем теперь, что если у-атрибут e входит в A0 , то e попадает в некоторое C i .
Точнее, докажем более общее утверждение: если на основании информации о
схеме T по правилам SM выведено ПВ F: A0  B , то множество у-атрибутов B содержится в некотором C i .
Вывод ПВ представляет собой последовательность применений правил SM к поаксиомам и ранее полученным предложениям вычислимости (начальное ПВ
skip: A0  A0 получается в результате использования схемы аксиом). Доказательство проводим индукцией по длине вывода.
База индукции (минимальная длинна вывода).
А). Вывод заканчивается применением схемы аксиом - A0 состоит в точности из
B, очевидно, B  C0 .
Б) Длинна вывода – два – схема аксиом и правило сужения.
Здесь также B  C0
Индукция. Предположим, сделанное утверждение истинно для выводов, длина
которых не превосходит k, и пусть вывод ПВ   F: A  B имеет длину k+1. Если
 получается по правилу сужения, то B принадлежит Ck , которое найдётся по
предположению для вывода, предшествующего получению  .Пусть B получено
применением правила композиции, например, из полученных ранее
 1  F1: A  I и  2  f : I  b (B=I,b). Вывод каждого из двух последних ПВ име-
29
ет длину меньше k+1. Следовательно по предположению, найдётся такое C i , что
I  Ci . По способу введения правила композиции  2 является по-аксиомой –
функциональной связью из набора set исходной схемы T. Отсюда заключаем,
что b(а следовательно, и B=I,b) попадает в Ci  j , где j – число применений правил
SM между получением в выводе ПВ  1 до использования по-аксиомы  2
(включительно).
Правила ветвления и введения рекурсии в контексте доказываемой теоремы
можно не различать – здесь нам не важен способ подтверждения предположения, появляющегося в последнем правиле, достаточно просто знать, что мы это
делать умеем. Итак, пусть ПВ   F: A  B получено по правилу ветвления, и
длина вывода равна k+1. Пусть  получено из  1  F1: A  B1 , b Q& p и
 2  F 2: A  B1 , b Q&  p . Длина вывода как  1 , так и  2 меньше k+1, следовательно найдутся C i и C j , которые содержат B1 b Q & p и B1 b Q& p соответственно, причём при построении C i и C j обсуждаемый алгоритм работает от одних и
тех же исходных данных A0 . Отсюда видно, что атрибуты множества B и, в
частности, b Q будет включён в Cmax(i , j )1 , т. к. Правило ветвления применяется
сразу же, если показана достижимость атрибута при альтернативных условиях.
Поскольку по лемме 2.1 принадлежность атрибута e замыканию A0 означает
выводимость ПВ F: A0  e , можно считать, что обсуждаемый алгоритм корректно
строит A0 .
На самом деле нам нет необходимости строить полностью A0 - достаточно получить (если это возможно, разумеется) такое его приближение C i , которое содержит целевые атрибуты. – Такое ограничение, зачастую, существенно уменьшает
время работы алгоритма. Даже без дополнительных ограничений алгоритм всегда
заканчивает свою работу, т. к. рассматривается только конечное число по-аксиом.
При исследовании рекурсивных схем используются специальные методы, которые
позволяют однозначно установить вид предположения в правиле введения рекурсии и достаточно эффективно выяснить, справедливо ли оно.
2.4. Особенности использования правила введения рекурсии.
Известны эффективные стратегии поиска доказательства теоремы существования решения задачи S в классе линейных программ (когда используются только
правила 1 и 2 исчисления SM) и в классе ветвящихся программ (добавлением к
двум первым правилам исчисления правила ветвления). При использовании правила введения рекурсии основная трудность заключается в умении определить множества A и X – аргументов и результатов ПВ из заключения правила (в синтезированной программе применению этого ПВ будет соответствовать вызов построенной
рекурсивной процедуры). При попытке определения множеств A и X могут быть
произведены довольно большие затраты по времени работы алгоритма – в остальном применение правила введения рекурсии не ухудшает общей оценки сложности
преложенного алгоритма, т. к. вывод для подзадачи, сформулированной во второй
строке правила, проводится теми же средствами, что и основной вывод теоремы
существования, и полностью включается в последний.
30
Представим некоторые соображения по определению множествA и X. Рассмотрим рекурсивную детерминированную схему
T (
a 00 : T00 ,  , a 0 N0 : T0 N0 ,
p  a10 : T10 ,, a1 N : T1 N ;
a 20 : T20 ,, a 2 N : T2 N
fi | set ),
Для простоты предположим, что все подсхемы схемы T являются элементарными,
кроме подсхемы Tsq , причём s принимает значения 1 или 2 и Tsq  T . Пусть также
a sq  r . Предположим, мы производим планирование, зафиксировав схему T в качестве текущей, и располагаем информацией о том, что «вход» в схему T определяется множеством A (множеством у-атрибутов, для которых показана достижимость).
Опишем на содержательном уровне процесс, который позволяет определить
множества аргументов и результатов рекурсивного ПВ из заключения правила введения рекурсии. Сначала, не применяя правила 4 исчисления SM для схемы T, выводим из атрибутов A всё, что возможно. Во множество аргументов Arg включаем
все входные атрибуты A. Для этих атрибутов показана достижимость при условии,
которое приписано постоянной части схемы T. После этого вычисляем замыкание
A  и объявляем его окончательным множеством аргументов Arg (см. Рис. 2.2)
if
1
2
1
2
Рис. 2.2. Определение A и X для рекурсивного ПВ.
Во множество результатов Res помешаем у-атрибуты из постоянной части схемы T,
для которых показана достижимость при условии нерекурсивной ветви, и такие, что
вовлечены в левые части ФС вида f : r . b c - «выводящие» из рекурсивного
вхождения схемы T. Наконец, транзитивное замыкание полученного множества атрибутов объявляем окончательным множеством результатов рекурсивного ПВ.
Замечание 2.1. Если любое из транзитивных замыканий окажется пустым, применение правила введения рекурсии оказывается невозможным.
Замечание 2.2. Если транзитивное замыкание строить «в лоб», затраты времени могут стать экспоненциальными от числа атрибутов в исходном множестве. Этих затрат можно избежать, анализируя циклы в графе, который соответствует рекурсивной схеме. При этом атрибуты вида a и r.a отождествляются.
Рассмотрим подробнее соображение из замечания 2.2. Предположим, в качестве входных атрибутов схемы T выступают a 1 и r . a отождествляются.
Рассмотрим подробнее соображение из замечания 2.2. Предположим, в качестве входных атрибутов схемы T выступают a 1 и a 2 (множество A) и в наборе set
содержаться ФС (запишем их сокращённо):
a1  r . a 2 ,
a 2  r . a1 ,
a 3  r. a 4 ,
a 4  r. a5 ,
a5  r. a 3 ,
a1 , a 3  a 6 .
Рассмотрим фрагмент информационной структуры, в которую в процессе доказательства заносятся сведения о достижимых атрибутах (рис. 2.3.). Двойными линия-
31
ми выделены фрагменты структуры, в которые помещаются все атрибуты, достижимые из атрибутов с предыдущих уровней. На шестом шаге устанавливается достижимость a1  A - выявляется цикл длины 2 a1  a 2  a1 . Аналогично, на восьмом шаге обнаруживается цикл длины 3 a 3  a 4  a 5  a 3 для a 3  A . Можно
сделать вывод, что a 1 и a 3 одновременно перевычисляются в результате трёхкратного выполнения первого и двукратного выполнения второго циклов. Эти неформальные соображения, обобщённые для случая произвольной рекурсивной схемы,
позволяют строить транзитивное замыкание с затратами, пропорциональными
O N  , где N – число атрибутов, явно упомянутых в описании схемы.
уровни
i+0
шаги
k+1
атрибуты
a1
Получен из
- задан
2
a3
- задан
1
3
4
5
a2
a4
a6
1
2
1,2
2
6
7
a1
a5
3
2
3
8
a3
7
Рис. 2.3. Фрагмент информационной структуры
Многие технические трудности, возникающие при решении проблемы синтеза
в классе РДС-моделей, удаётся преодолеть за счёт правильного подбора информационных структур применяемых алгоритмов и знания природы РДС-моделей.
32
ГЛАВА 3. РЕАЛИЗАЦИЯ СИСТЕМЫ СИНТЕЗА.
В этой главе описана реализация подсистемы, предназначенной для автоматического синтеза программы пользователя по спецификации задачи [37]. Подсистема
работает в рамках системы СПОРА [1]. Спецификация, задаваемая оператором постановки задачи (ПЗ), носит непроцедурный характер. Схема вычислений (алгоритм) для решения поставленной задачи определяется автоматически, а не указывается пользователем в спецификации [8]. Терминология главы во многом заимствована из работы [1], это обусловлено тем, что реализация подсистемы проведена в
рамках проекта СПОРА. Различия в терминах, большей частью, касаются языка
описания модели ПО и практически исчезают, когда обсуждается используемая в
реализации формальная теория. Так, схеме С-модели соответствует отношение
языка Декарт, постоянной части схемы – общая часть отношения, функциональным
связям – функциональные зависимости.
Задача пользователя ставится на отношении модели предметной области. Неформально спецификация задачи имеет вид
на отношении T по A вычислить X при условии P
(3.1)
Оператор ПЗ рассматривается системой как задание на синтез программы решения поставленной задачи. Синтез программы осуществляется следующим образом:
1. В рамках некоторой формальной теории [31] формулируется теорема существования решения.
2. Из описания модели ПО извлекается набор проблемно-ориентированных
аксиом формальной теории.
3. В этой теории делается попытка доказать теорему существования, которая
соответствует спецификации (3.1). Доказательство представляет собой
определённую последовательность применений правил вывода к аксиомам
и ранее полученным утверждениям. После построения доказательства из
него удаляются применения правил, несущественных для вывода теоремы.
4. На заключительном этапе синтеза из доказательства извлекается требуемая
программа. Неформально при этом каждой проблемно-ориентированной
аксиоме ставится в соответствие вызов процедуры.
Синтезируемые программы относятся к классу так называемых рекурсивных
хорошо структурированных программ (см. далее).
3.1. Язык описания модели предметной области.
Центральным понятием языка Декарт при описании модели ПО является понятие отношения. Отношения служат для определения новых типов на базе уже имеющихся в модели. Базу составляют так называемые первичные типы. Отношение
содержит заголовок и, возможно, набор функциональных зависимостей. Заголовок
определяет имена и типы компонент отношения, причём наряду с общей частью
может включать и вариантную. Компоненты общей части постоянно присутствуют
в наборе в зависимости от выполнения некоторого условия. Совокупность функциональных зависимостей определяет условие принадлежности набора данному отношению. Имена компонент вариантной части, связанные с некоторым одним
условием, определяют вариантную ветвь. В функциональных зависимостях отно-
33
шения могут встречаться сложные имена вида A.B – это означает, что имя B определено в описателе непервичного типа, который приписан имени A. Имена компонент (подкомпонент) отношения первичного типа будем называть величинами.
В данной работе для описания модели предметной области используется следующий фрагмент языка Декарт [1]:
- отношения (непервичные типы модели) могут иметь вариантные части;
- разрешается использование явной рекурсии при определении непервичного типа
модели ПО;
- величины, вовлечённые в функциональную зависимость, должны быть определены в общей части отношения либо иметь смысл при одном и том же условии,
если они принадлежат вариантной части отношения;
- функциональные зависимости имеют вид разрешённых уравнений.
В качестве примера приведём фрагмент описания модели ПО на «почти строгом» языке Декарт. Комментарием языка является строка, начинающая с символа
«%».
область численные_методы; ...
отношение ньютон
% имя рекурсивного отношения,
% которое описывает итерационный
% метод Ньютона вычисления корней
% уравнений.
(X0,
% текущее значение корня.
X1,
% следующее значение.
рез,
% результат.
погр:
% погрешность.
п_тип;
% тип значения – первичный.
% закончена общая часть заголовка – начата вариантная.
случ меньше_чем (X0, X1, погр) из % |X0-X1|<погр
да
: (T:п_тип);
% да-ветвь
нет : (след:ньютон) % нет-ветвь – рекурсивная
всеслуч;
% конец заголовка.
связи
% набор функциональных зависимостей:
X1=M(X0);
% шаг итерации
T=X1; рез=T;
% выход по да-ветви
след.X0=X1; след.погр=погр;
% вход в рекурсивную нет-ветвь
рез=след.рез
% выход по нет-ветви
всё_отношение;...
все обл.
3.2. Формальная теория.
Язык теории, в которой доказываются теоремы, несколько отличается от описанного во второй главе – он уже и ориентирован на конкретную реализацию.
В языке имеется три сорта символов, из которых порождаются термы языка:
1) символы, соответствующие величинам отношения;
2) символы условия;
34
3) программные символы, среди которых зарезервирован специальный символ
skip, обозначающий пустое вычисление.
Символы второго сорта по существу являются предикатными символами, а третьего
сорта – функциональными.
Термы языка так же делятся на три сорта. Термы первого сорта строятся из
символов соответствующего сорта с использованием операции теоретикомножественного объединения традиционным способом.
Термы второго сорта образуются из символов первого и второго сорта следующим образом:
1.3.1.1.1.1 Пусть
p j - символ второго сорта,
P терм второго сорта,
«-» и «&» - операции отрицания и конъюнкции соответственно,
тогда
1) p j - терм второго сорта;
2) –P – терм второго сорта;
3) P& p j - терм второго сорта.
Программные термы (третьего сорта) строятся с помощью оператора композиции, разветвления и рекурсии по следующим правилам.
1.3.1.1.1.2 Пусть
P – терм второго сорта,
f, g, h – символы третьего сорта,
F1, F2, F3 – термы третьего сорта и имеется вхождение символа g в F3,
F3[h/g] – обозначение замены вхождения g на h в терме F3,
Тогда
1) f – терм третьего сорта;
2) F1; F2 – терм, построенный с применением оператора композиции;
3) If P then F3[h/g] else F2 fi – терм (оператор рекурсии).
Предложением вычислимости здесь мы будем называть выражение вида
F: A  X if P D . Содержательно оно означает, что программа F по значениям величин множества A вычисляет значения величин множества A вычисляет значения
величин множества X и попутно множества D, если выполнено условие P, определённое на множестве компонент D. В теории имеется одна логическая схема аксиом
и четыре правила вывода.
0. Логическая схема аксиом теории: skip: A  D  A if P D .
Правила теории:
F: A  X  Y if P D
1.
F: A  X if P D
F1: A  Y  I if P1 D1
F 2: I  X if P2 D2
2.
F1; F 2: A  Y  I  X if P1 D1& P2 D2
35
3.
4.
F 1: A  D  X if Q E & P D F 2: A  D  X if Q E &  P D
if P D then F 1 else F 2 fi : A  D  X if Q E 
F1: A  D  E  X if Q E &  P D
g: r . A  r . D  D  E  r . X if Q E & P D| F 2: A  D  E  X if Q E & P D
h  if  P D then F1 else F 2h g  fi : A  D  E  X if Q E 
По сути своей определённая здесь теория не отличается от построенного во второй
главе исчисления SM, остаются справедливыми и для данной теории. Оторванность
условий в записи предложения вычислимости от компонент представляется удобной в том случае, когда каждая компонента отношения получается (т. е. показывается достижимость этой компоненты) в точности при том условии, при котором она
имеет смысл в описании отношения. Именно такому требованию удовлетворяли
первые реализованные в системе СПОРА подсистемы синтеза программ [38], которые работали в довольно узком классе линейных и ветвящихся программ.
Наиболее явно сужение теории, которая положена в основу описываемой здесь
реализации, проявляется в четвёртом правиле – правиле введения рекурсии. Оно
применимо для случая рекурсивного отношения, т. е. отношения, в котором тип некоторой компоненты с именем r, определённой при условии P, задаётся этим же
самым отношением. Таким образом, если в наборе отношения присутствует компонента с именем A, то в нём же при выполнении соответствующего условия имеется
компонента с именем r.A. Следует отметить, что в отличие от общего правила введения рекурсии, определённого в предыдущей главе, это правило предполагает
наличие в рекурсивной ветви лишь одной компоненты рекурсивного типа. Кроме
того перевычислимость аргументов F: A  r. A и выход из рекурсии G: r. X  X
должны обеспечиваться на однократной развёртке отношения. Последнее требование обусловлено тем, что в первой версии системы СПОРА планирование (построение доказательства теоремы существования) проводилось на статической развёртке исходного отношения, т. к. только в этом случае обеспечивался эффективный
доступ к информации, поставляемой транслятором с языка описания модели ПО.
Теорема существования, формулируемая по спецификации (3.1) имеет вид
T r | Pr Pr: r . A  r . X if P r . D
(3.2)
Считается, что связь отношения модели ПО имеет место только тогда, когда
выполнены условия существования в наборе всех участвующих в ней величин.
Связь вида z  f  x , определённая при условии p y  , порождает предложение вычислимости
f : x  y  z if p y.
(3.3)
При доказательстве теоремы существования используется некоторая ограниченная стратегия по применению правила композиции. Доказательство проводится
на полной развёртке отношения T r  , на котором ставится задача. Для отношения
T:
отнош T ( xi 0 : Ti 0 ; случ P , xi 0 , из
.
36
 Pj :xij : Tij 
всеслуч);
связи , x pq ,  f k , xst , всеотнош
формула T r  представляет собой конъюнкцию



T r   & Ti 0  r. xi 0  & P. p j  & Tij r. xij & Ck
i
j
i
k
(3.4)
где Tij  r. xij   true, если Tij - первичный тип,
C k - предложение вычислимости, соответствующее функциональным зависимостям
отношения T.
Если Tij - непервичный тип, то в (3.4) подставляется развёртка отношения Tij . В
случае необходимости применяется преобразование:
(3.5)
Pj  Dj   f : A if PD  f : A  Dj  if PD& Pj Во 
и традиционные логические правила. В результате подстановок в (3.4) для всех непервичных Tij их развёрток и выполнения соответствующих преобразований в (3.4)
остаются только предложения вычислимости вида (3.3).
Рекурсивное отношение приводит, вообще говоря, к сколь угодно длинной
развёртке. В этом случае во множестве проблемно-ориентированных аксиом теории
– предложений вычислимости, порождённых связями отношения – включаются
лишь те, которые содержат величины общей части рекурсивного вхождения отношения. Это ограничение на глубину развёртки, естественно, влечёт неполноту алгоритма (для рекурсивных программ).
1.3.1.1.1.3 В процессе развёртывания выполняются следующие действия/
1. Для каждого указателя семейства вводится своя уникальная величина z и во
множество аксиом включается предложение вычислимости:
(3.6)
Cf : z,
где Cf – процедура, синтезированная по описанию указателя семейства.
2. Если связь имеет место при некотором условии s, которое определяется каким-либо указателем семейства Cf, например,  m s , то предложение вычислимости, добавляемое во множество аксиом, имеет вид:
m:z  if  & s,
(3.7)
где z величина, соответствующая указателю семейства Cf. Включение псевдокомпоненты z во множество аргументов обеспечивает проверку условия применимости предложения вычислимости, т. к. перед использованием любого
(3.7) в доказательстве гарантировано использование (3.6), что соответствует
вычислению (всех) условий, определённых указателем семейства Cf.
3.2. Входные и внутренние структуры данных.
Входными данными для процедуры поиска доказательства являются:
- количество различных величин отношения, на котором строится задача (с учётом введённых при развёртке) – ELIMNMB;
- количество различных вариантов, определяющих множество условий –
VARNMB;
37
описание указателей семейств;
описание предложений вычислимости;
описание данных с указанием условий, при которых они имеют смысл;
описание целей с указанием условий, при которых они имеют смысл.
Модули подсистемы имеют префикс “SPO” и располагаются в файлах с префиксом “P12”. Ссылки на программы (подпрограммы) подсистемы осуществляются
в форме
программа
содержащий файл .
Входные данные доставляются процедурой SPOAXIOM/P12EXT. Информация
располагается в памяти SPYMEMOR: ARRAY[1..MAXMEML] OF INTEGER следующим образом:
- описание
указателей
семейств
занимает
участок
памяти
с
SPYMEMOR[FAMDESCB] по SPYMEMOR[FAMDESCE];
- описание предложений вычислимости располагается в памяти с
SPYMEMOR[MAPDESCB] по SPYMEMOR[MAPDESCE];
- описание данных – с SPYMEMOR[KNOWNELB] длиной KNOWNELL, условия
данных – с SPYMEMOR[KCONDB];
- описание целей – с SPYMEMOR[TARGETB] длиной TARGETL, условия целей –
с SPYMEMOR[TCONDB].
Здесь везде элементы – это внутренние (уникальные) имена величин из развёртки исходного отношения. Внутренние имена представляют собой номера в порядке их появления в развёртке.
Как уже отмечалось, развёртка отношения, на котором ставится задача пользователя, производится статически (до начала планирования). Информация о рекурсивных типах содержится в таблицах транслятора модели ПО. Эта информация поставляется планировщику в описании указателя семейства, соответствующего рекурсивному отношению. Структура описания указателя семейства приведена на
рис.3.1, где
- FREF – ссылка используемая подсистемой для внутренних целей;
- FCOND – номер варианта (условия), при котором указатель определён;
- FVARNB – количество вариантов, определяемых указателем;
- FVARNM – номер первого из этих вариантов;
- RBNMB – количество рекурсивных ветвей вариантной части соответствующего
отношения (=0, если отношение нерекурсивное);
- RBASE I - количество элементов из отношения, включённых в развёртку до появления этого отношения в качестве описателя типа;
- RCOND I - условие, определяющее компоненту рекурсивного типа (условие рекурсивной ветви);
- FNAME-:-LNAME – диапазон имён элементов рекурсивного отношения, включённых в развёртку.
-
FAMNM  FREF
FCOND
38
FVARNMB
FVARNM
RBNMB
RBASE 1
RCOND 1

RBASE K
RCOND K
FNAME
LNAME
Рис. 3.1. Структура указателя семейства.
Вид описания предложения вычислимости приведён на рис. 3.2. Обозначения
рис.3.2:
- MREF – ссылка на остальную информацию о предложении вычислимости;
- MCOND – условие, при котором предложение вычислимости определено;
- ARGNMB – количество аргументов предложения вычислимости;
- ARGS – имена аргументов;
- RESNMB – количество результатов;
- RESS – имена результатов.
В описаниях данных и целей перевычисляются имена (и условия) известных и
искомых элементов.
MAPNM  MREF
MCOND
ARGNMB
ARGS
RESNMB
RESS
Рис. 3.2. Структура предложения вычислимости.
По входным данным для каждого элемента строится информационная структура в памяти SPYLINKM : ARRAY [1..MAXLMEML] OF RECORD INF, NEXT :
INTEGER END, вид которой приводится на рис. 3.3.
2*ELEMNUM  PRFREF SCALE
ELNMAP OFFRLIST
Рис. 3.3. Информационная структура.
На этом рисунке
- PRFREF – ссылка на шаг доказательства, если достижимость элемента ELEMNM
доказана, в противном случае – константа UNKNOWN=0. Если элемент является
узлом склейки (т. е. достижим в результате применения правила ветвления), то
PRFREF<0 и –PRFREF указывает на голову списка склейки;
39
- SCALE – условие, при котором элемент достигнут в доказательстве, это условие
хранится в виде
1.4 RECORD CASE INTEGER OF
1: (PACKED RECORD
INT : 0 .. 77777777B;
CELL : SET OF 0 .. 23
END);
2: (I : INTEGER)
END;
- ELNMAP –список ссылок на ПВ через счётчики ещё не достигнутых аргументов;
- OFFRLST – список ссылок на потомков элемента, потомки – это элементы, достижимые из данного.
Структуры перечисленных списков показаны на рис. 3.4.
список ссылок на ПВ:
ELMAP
MAPREF1
MAPREF K
счетчик для ПВ:
MAPREF1
ARGNMB
MAPNM i
счетчик для целей:
TARGETREF
OFFLIST
TARGETL
MAPNM 1
MAPNM K
Рис. 3.4. Внутренние структуры алгоритма.
Счётчик для ПВ в поле NEXT содержит ссылку на описание ПВ; поле INF вначале содержит число аргументов этого ПВ, а в процессе доказательства – количество ещё не достигнутых аргументов ПВ.
В списке ссылок на ПВ для всех целей добавляются ссылки на выделенный
счётчик – счётчик целей.
Список потомков создаётся для элемента – узла склейки, если условие его достижимости в доказательстве не совпадает с условием, при котором соответствующая величина имеет смысл в описании модели ПО. Список формируется от конца
памяти SPYLINKM. Перед началом поиска вывода этот участок содержит информацию о заданных элементах: в поле INF находится имя элемента, в поле NEXT –
40
ссылка на ПВ без аргументов, доставляющее элемент, либо константа INIL=0, если
такого ПВ нет.
Для очередного полученного шага доказательства (рис.3.5)
PRFREF  INF
NEXT
Рис. 3.5. Шаг доказательства.
- INF<0 – шаг удалён из доказательства, либо элемент является узлом склейки (тогда значение NEXT указывает элемент списка склейки);
- INF>0 – шаг необходим в доказательстве, INF содержит имя достигнутого элемента, причём ABS(NEXT) даёт ссылку на ПВ, доставляющее элемент (NEXT<0,
если элемент является результатом рекурсивной процедуры).
PRFREF
PRFREF 1
SCALE 1
MAPNM 1
PRFREF
K
SCALE K
MAPNM K
Рис. 3.6. Список склейки.
Список склейки (рис. 3.6) порождается и пополняется в результате применения
правила ветвления. Эти списки занимают участок памяти SPYLINKM от конца. На
рис.3.6:
- PRFREF I - ссылка на шаг доказательства ;
- MAPNM I - ссылка на доставляющее предложение вычислимости;
- SCALE I - условие, при котором доказана достижимость элемента.
3.3. Алгоритм синтеза программ.
Используя входную информацию, подсистема осуществляет попытку построения доказательства теоремы (3.2). Тактика выбора очередного предложения вычислимости (ПВ) для попытки применения основана на идее алгоритма А. Я. Диковского [39]. Аналогичные принципы используются в алгоритме, описанном Дж.
Ульманом в [40].
Для каждого элемента создаётся список ссылок на ПВ, у которых этот элемент
является аргументом (ELNMAP на рис. 3.3). В ссылке на ПВ содержится счётчик
ещё не достигнутых аргументов, достижимость которых доказана (в него входят и
данные). Выбирается очередной. Просматривается список ссылок на ПВ для этого
элемента – уменьшается на единицу список аргументов. Если какой-либо счётчик
становится равным нулю, то считается, что ПВ выбрано. Такое ПВ может быть
применено или отложено в зависимости от выполнения некоторого критерия. Применение ПВ означает включение его результатов во множество достижимых элементов с указанием условия их достижимости. Это условие определяется конъюнкцией условий аргументов и условий ПВ. Такая дисциплина обеспечивает получение
41
элемента при условии его существования в развёртке либо при дизъюнкции условий вариантной части подотношения, в котором он определён.
Прежде чем перейти к описанию алгоритма построения доказательства теоремы (3.2) необходимо сделать ряд замечаний.
Замечание 3.1. В каждый момент поиска вывода некоторым образом фиксируется
текущее подотношение. В начале доказательства текущим объявляется отношение,
на котором поставлена задача. В процессе доказательства подотношения без вариантных частей не выделяются. Это объясняется тем, что, произведя развёртку статически, мы теряем некоторую часть знаний о структуре модели (точнее, о структуре отношения, на котором поставлена задача). Ориентироваться приходится только
по описаниям указателей семейств, т. е. мы выделяем даже не отношения с вариантными частями, а собственно вариантные части. Это не всегда хорошо – в частности, такой подход лишает нас возможности избежать повторных выводов на
фрагментах развёртки, которые порождаются одним и тем же подотношением.
Замечание 3.2. Текущее подотношение определяет набор допустимых условий
(НДУ), инициируемый указателем семейства этого подотношения. НДУ=(FCOND,
FVARNM-:-FVARNM+FVARNMB-1) – см. рис.3.1, а НДУ’=НДУ\(FCOND).
Замечание 3.3. Процесс развёртки задаёт иерархию подотношений (точнее, указателей семейств), таким образом можно говорить о внутренних и внешних подотношениях.
Замечание 3.4. (Условие применимости ПВ): Предложение вычислимости, для которого доказана достижимость аргументов из данных, будем называть готовым к
применению ПВ (ГППВ). ГППВ может быть применено, если MCOND НДУ (см.
рис. 3.2) и для каждого аргумента ГППВ его условие также входит в НДУ.
Теперь неформально опишем реализованный алгоритм построения доказательства теоремы существования решения (3.2).
1. Из числа проблемно-ориентированных аксиом выбирается ГППВ.
2. Если ГППВ удовлетворяет условию применимости, то оно применяется, в
противном случае оно помещается в СОП, помеченный условием MCOND.
3. Применение ГППВ запрещается (ПВ удаляется из набора аксиом), если
условие достижимости хотя бы одного аргумента принадлежит НДУ’ внутреннего по отношению к текущему подотношения.
4. Если в результате применения ГППВ выясняется, что ослаблено условие
достижимости некоторого аргумента, то модифицируются условия достижимости его потомков, т. е. элементов, которые получены при его участии
(возможно, опосредованном).
5. Если больше нет ГППВ, которые отвечают условию применимости, то делается попытка сменить текущее подотношение (переопределить НДУ). В качестве текущего берётся внутреннее для данного подотношение такое, что
хотя бы одно ПВ, порождённое его связью, попало в СОП. Если не удаётся
выбрать внутреннее подотношение, текущим становится внешнее.
Повторение пунктов 1-5 заканчивается тогда, когда
- либо получены цели – доказательство существует;
42
- либо цели не получены, но исчерпаны все ПВ – доказательство не может быть
найдено.
Без дополнений этот алгоритм позволяет синтезировать линейные и ветвящиеся программы [38], для построения рекурсивных программ он должен быть несколько изменён.
Ясно, что стратегия работы алгоритма не является в чистом виде стратегией
«прямой волны». Это своеобразная стратегия «вширь - вглубь»: получение всего,
что возможно, в текущем подотношении, затем «спуск» во внутреннее, «прямая
волна» в нём (с возможными, в свою очередь, «спусками»), затем «подъём» и продолжение работы в текущем подотношении.
Для любого элемента из доказательства, имеющего смысл в описании отношения при некотором условии P, конъюнкция условий при аргументах доставляющего
его ПВ и условия самого предложения вычислимости совпадает с P либо удовлетворяет требованию S  P . Программа, извлекаемая из доказательства, имеет строго вложенную структуру операторов разветвления. Такие программы образуют
класс хорошо структурированных программ.
Для построения рекурсивных программ пункт 4 алгоритма дополняется следующим образом:
... если не удаётся сменить текущее подотношение на внутреннее, то перед переходом к внешнему отношению применяется правило рекурсии.
Записанный на языке некоторой абстрактной машины алгоритм выглядит следующим образом:
«начальные установки»;
while
«доказательство имеет смысл продолжать –
рассмотрены не все достигнутые элементы»
do
begin
«выбирать зависимость»;
if «зависимость удалось выбрать»
then
«попытаться применить зависимость»
else
«применить отложенные зависимости,
сменив при этом НДУ,
либо применить правило рекурсии»; (*end_if*)
«перевычислить условие продолжения доказательства»
end (*while*)
При использовании правила введения рекурсии (правило 4, раздел 3.2) основные трудности связаны с определением множеств A и X – аргументов и результатов
рекурсивной процедуры. Попытка применения правила 4 делается только в том
случае, если текущим является рекурсивное отношение, т. е. RBNMB  0 (см. рис.
3.1). Для компонент общей части рекурсивного отношения вводится понятие двой-
43
ников следующим образом. Пусть имеется рекурсивное по компоненте next отношение T
Отношение T a  next : T   всеотн
и a - имя компоненты общей части, то n+RBASE I - двойник этого элемента из i-го
рекурсивного подотношения. В описании указателя семейства (для рекурсивного
случая) содержится также другая вспомогательная информация, которая используется для определения множеств A и X. Неформально способ определения этих множеств заключается в следующем:
1. Первоначально в A включаются все компоненты общей части отношения, для
которых доказана достижимость при условии существования этих компонент,
кроме того двойники этих компонент также должны быть достижимы – этим
обеспечивается перевычисление аргументов рекурсивной процедуры.
2. Из A удаляются компоненты, которые достижимы из других элементов множества A (A минимизируется).
3. X сначала содержит все компоненты общей части отношения, достижимые при
условии их существования, либо при условии вариантной ветви, не содержащего
рекурсивного вхождения отношения. Из множества X удаляются все компоненты, попавшие в A, кроме того элементы X должны быть вовлечены в ПВ, которые выводят из рекурсивного вхождения отношения.
4. Окончательно X вычисляется по рекурсивным соотношениям (строится рекурсивное замыкание):
X 0  X;
X i 1   r  X i r достижимы при условии существования,
если предположено, что достижим двойник
для r в рекурсивном вхождении .
3.4. Оценки трудоёмкости. Схема программы.
Особенности алгоритма построения доказательства таковы, что основные затраты производятся на этапе применения ПВ. ПВ может применяться либо для получения новых достижимых элементов, либо для модификации условий уже имеющихся в доказательстве элементов, участвующих в ПВ в качестве аргументов.
Фрагмент доказательства, на котором производится модификация условий полученных элементов, ограничен общей частью некоторого подотношения развёртки
(3.4). Таким образом сложность поиска на полной развёртке является линейной
комбинацией затрат на подотношениях развёртки.
Пусть отношение содержит исходные ПВ и пусть вариантная часть отношения
состоит из K альтернативных ветвей. Структура описания такого отношения:
отнош ...(... случ... из
P1:(...); ... PK:(...) всеслуч);
связи ...= M1...; ...=MN... всёотнош.
1.4.1.1.1.1.1 Затраты при планировании на таком отношении выражаются формулой
T N   L0   L1   LK   KL,
(3.8)
44
где L0 - длина (количество ПВ) участка доказательства с однократным применением ПВ;
Li - длина участка, соответствующего i-той ветви вариантной части;
L - длина участка с повторным применением ПВ, причём L0   L1    LK   L  N .
При максимальной длине L, когда L0  0 , а длина вариантной ветви – два ПВ,
формула (3.8) принимает вид
(3.9)
T  N   2 K  K N  2 K 
Выражение (3.9) достигает максимума при K N    N  2 4 , в этом случае
(3.10)
N  N   O N 2 
В реальных задачах K не является функцией от N, а мажорируется некоторой
константой. Отсюда можно заключить, что алгоритм имеет линейную по длине
(3.4) сложность. Затраты памяти оцениваются аналогичным образом и, следовательно, также являются линейными по длине (3.4).
Схема решения поставленной задачи извлекается из построенного доказательства (в случае успешного завершения вывода). Попутно из доказательства удаляется информация об элементах, которые не используются для получения целей. Алгоритм построения доказательства, приведённый в разделе 3.4, имеет ту особенность,
что доказательство содержит все аксиомы (ПВ), применение которых было возможным. Чистка доказательства осуществляется для того, чтобы синтезированная
программа не содержала лишних вычислений. Чистка осуществляется за один просмотр доказательства от конца к началу. Попутно выделяются фрагменты доказательства, соответствующие описаниям синтезированных процедур. Если в доказательстве элемент получен с помощью ПВ, то в схему программы включается оператор присваивания, если элемент является узлом склейки, то в схеме программы появляется оператор разветвления.
45
PROGREF
IPLREF
SPYMEMOR
DESCREF
PRCOND
ARGS
RESS
SPYLINKM
IPLREF
SQREF
HEADREF 1
HEADREFK
схема оператора присваивания:
PRFREF
NEXTSTM
схема оператора выбора:
VCASE
FVARNM
FVARNMB
NEXTSTM
SQLREF1
SQLREF 2
SQLREF 3
. . SQLREF
.
m
Схема программы – для краткости программа – содержит схемы описания синтезированных процедур.
С использованием аппарата граф-схем программа определяется следующим
образом:
46
программа:
тело
описание процедуры
описание процедуры:
тело
описание процедуры
тело:
оператор
оператор:
оператор присваивания
оператор набора
Рис. 3.7. Структуры программы.
Программа представляется некоторым деревом. Структуры программы приводятся на рис. 3.7. На этом рисунке
- PROGREF – возвращаемая ссылка на голову программы;
- PRCOND – условие, при котором возможно вычисление результатов по аргументам;
- ARGS – перечисление имён аргументов с указанием их количества;
- RESS – перечисление имён результатов с указанием их количества (для
PROGREF ARGS и RESS содержат описания заданных и искомых величин соответственно);
- IPLREF – ссылка на голову списка внутренних процедур;
- SQREF – ссылка на схему последовательности операторов;
- HEADREF – ссылка на заголовок описания синтезированной процедуры в
SPYMEMOR (аналогичная PROGREF);
- NEXTSTM ссылка на следующий оператор последовательности;
- VCASE – имя, введённое для указателя семейства, определяющего оператор разветвления;
- FVARNM – имя первой альтернативы;
- FVARNMB – количество альтернатив.
47
Алгоритм извлечения программы из доказательства с чисткой последнего выглядит следующим образом:
«начальные установки»;
«генерировать пустой заголовок схемы программы, запомнить ссылку на него»;
«отметить в информационной структуре (рис. 3.3) цели как необходимые в доказательстве»;
(scheme)
repeat
«получить очередной невыкинутый из доказательства элемент»;
«получить первое применение доставляющего ПВ,
отметить его элементы как необходимые»;
(setblock)
if «элемент – результат рекурсивной процедуры»
then «обработать рекурсивную процедуру»
else «обработать общее присваивание»;
until «доказательство просмотрено до заданных элементов»;
«обработать заданные элементы».
Закончив работу, подсистема передаёт ссылку на схему программы PROGREF.
Память SPYMEMOR и SPYLINKM считается общей. Структуры доказательства сохраняются и могут быть использованы при отладке синтеза.
48
ЗАКЛЮЧЕНИЕ.
В данной работе предложена формальная теория, определяющая класс вычислительных моделей, в котором проблема синтеза программ эффективно разрешима.
Исследованы вопросы корректности и полноты предложенной теории. Приведён
алгоритм синтеза рекурсивных программ, для которого также показана корректность. Описана система синтеза рекурсивных программ, реализованная на основе
предложенного формализма, показана эффективность реализации и определён
класс, к которому относятся синтезированные программы.
В этой работе мы придерживаемся принципа, что синтез должен быть эффективным, а построенные программы должны подчиняться достаточно строгим требованиям на виды управляющих структур и формы их использования. В поддержку
такой точки зрения можно привести несколько соображений.
Во-первых, синтез осуществляется на основе информации об используемой
предметной области (модели ПО). Описание модели ПО точно так же необходимо
отлаживать, как и программы на традиционных языках программирования. Одним
из основных средств отладки модели ПО служит анализ информации, полученной в
ходе выполнения задания на синтез программы. Это вызывает необходимость
стремиться к тому, чтобы получение этой информации было не слишком оторвано
по времени от самого задания на синтез. Желательно, чтобы схема синтезированной программы (программы в терминах абстрактных типов и отображений, использованных при описании модели ПО) могла быть получена и проанализирована через несколько секунд или, в крайнем случае, десятков секунд с момента подачи
приказа на синтез. Подход, используемый в данной работе, обеспечивает такую реакцию – в тестовых примерах (см. Приложение) время синтеза программы, содержащей до трёх рекурсивных процедур, не превосходит нескольких десятых долей
секунды.
Во-вторых, простота отладки модели ПО накладывает также требование удобства работы с информацией по синтезу. Схема программы и содержание внутренних структур системы синтеза должны быть понятны человеку, который производит отладку. Этого можно достичь, ограничив класс синтезируемых программ –
например, потребовать, чтобы они подчинялись ограничениям структурного подхода. Нам кажется, что моменты заслуживает самого пристального внимания.
Результаты данной работы могут быть использованы при реализации систем
управления пакетами прикладных программ, в системах управления базами данных
и в других аналогичных разработках.
Основные результаты диссертации:
1. Разработан теоретический аппарат, позволяющий описывать и исследовать
вычислительные модели, допускающие автоматическое построение рекурсивных программ по непроцедурным постановкам задач.
2. Показана полнота и корректность предложенной теории.
3. Разработаны эффективные алгоритмы синтеза рекурсивных программ, исследована их корректность.
4. Разработана и реализована подсистема синтеза рекурсивных программ,
функционирующая в рамках системы СПОРА.
49
Литература:
1. Бабаев И. О., Новиков Ф. А., Петрушина Т. И. Язык Декарт - входной язык
системы СПОРА. - В кн.: Прикладная информатика, вып. 1. «Финансы и статистика». М.: 1981, с. 35 -73.
2. Waldinger R. J., Lee R. C. T. A step toward automatic program writing. - In: Proc.
of the 1st International Joint Conference on Artificial Intelligence, Bedford, 1969,
pp. 241 - 253.
3. Manna Z., Waldinger R. The automatic synthesis of recursive programs.
SIGPLAN Notice, 1977, 12, № 8, pp. 29 - 36.
4. Constable R. L. Constructive mathematics and automatic program writers. - In:
Proc. IFIP 1971, North-Holland, 1972, pp. 733 - 738.
5. Tyugu E. H. Towards practical synthesis of programs. - In: Information Processing-80, Amsterdam: North- Holland Publ. Co., 1980, pp. 207 - 220.
6. Непейвода Н. Н. Соотношение между правилами естественного вывода и
операторами алгоритмических языков высокого уровня. Докл. АН СССР,
1978, № 3, с. 526 - 529.
7. Непейвода Н. Н. Об одном методе построения правильной программы из
правильных подпрограмм. Программирование, 1979, № 1, с. 15 - 25.
8. Лавров С. С. Синтез программ. Кибернетика, 1982, № 6, с. 11- -16.
9. Робинсон Дж. Машинно-ориентированная логика, основанная на принципе
резолюции. - В кн.: Кибернетический сборник, Новая серия, М.: Мир, 1970,
вып. 7, с. 194 - 218.
10. Тыугу Э. Х. Решение задач на вычислительных моделях. ЖВМ и МФ, 1970,
10, № 3, с. 716 - 733.
11. Минц Г. Е., Тыугу Э. Х. Полнота правил структурного синтеза. Докл. АН
СССР, 1982, Т.265, № 6, с 41-50.
12. Минц Г. Е., Тыугу Э. Х. Структурный синтез и неклассические логики. - В
кн.: Применение методов математической логики. Таллин: 1983, с. 52 - 60.
13. Диковский А. Я. Детерминированные вычислительные модели. Изв. АН
СССР. Техническая кибернетика, 1984, № 5, с. 84 - 105.
14. Bierman A. W., Krishnaswamy R. Constructing programs from example computations. - IEEE Trans. On Software Engineering, 1976, vol. SE-2, № 2, pp. 141
- 153.
15. Барздинь Я. М. Об индуктивных правилах вывода для синтеза программ. В кн.: Синтез, тестирование, верификация и отладка программ. Тезисы докл.
всесоюзной научной конференции, Рига, 1981, с. 25 - 26.
16. Барздинь Я. М. Один подход к проблеме индуктивного вывода. - В кн.:
Применение методов математической логики. Тезисы докл. всесоюзной
научной конференции, Таллин: 1983, с. 16 - 28.
17. Hardy S. Synthesis of LISP functions from examples. - In: Proc. 4th IJCAI, Tbilisi, 1975, pp. 240 - 245.
18. Burstall R. M., Darlington J. A system which automatically improves programs. In: Acta Informatica, 1976, vol. 6, pp. 41 - 60.
50
19. Burstall R. M., Darlington J. A Transformation system for developing Recursive
Programs. - In: Journal of the ACM, 1977, vol. 24, pp. 44 - 67.
20. Касьянов В. Н., Поттосин И. В. Системы конкретизации: подход и основные понятия. - Препринт ВЦ СО АН СССР, № 349, Новосибирск, 1982.- 22 с.
21. Кахро М. И., Каля А. П., Ты угу Э. Х. Инструментальная система программирования ЕС ЭВМ (ПРИЗ). - М.: Финансы и статистика, 1981, 157 с.
22. Опарин Г. А. К теории планирования вычислительного процесса в пакетах
прикладных программ. - В кн.: Пакеты прикладных программ. Новосибирск:
Наука, 1981, с. 5 - 20.
23. Харф М. Я. Исследование и реализация методов структурного синтеза программ. - Дисс. канд. техн. Наук. ИК АН ЭССР, Таллин, 1984.
24. Харф М. Я. Реализация синтезатора программ в системе программирования
ПРИЗ. - В кн.: Автоматический синтез программ. Таллин, 1983, с. 110 - 141.
25. Карзанов А.В., Фараджев И.А. Планирование вычислений при решении задач на вычислительных моделях. Программирование, 1975, № 4, с. 19 - 24.
26. Минц Г. Е. и др. Структурный синтез рекурсивных программ. - В кн.: Автоматический синтез программ. Таллин, 1983, с. 58 - 70.
27. Нейман В. С. Синтез программ по описаниям рекурсивных отношений. - В
кн.: Синтез программ. Тезисы докладов Всесоюзной школы - семинара.
Устинов, 1985, с. 25 - 27.
28. Диковский А. Я. Оценки алгоритмов, связанных с вычислительными моделями. - В кн.: Применение методов математической логики. Тезисы докладов Всесоюзной конференции. Таллин, 1983, с. 42 - 51.
29. Мартин Дж. Организация баз данных в вычислительных системах. М.:
Мир, 1980, 662.
30 Оре О. Теория графов. М.: Наука, 1980, 336 с.
31 Новосельцев В.Б. Структурные вычислительные модели – формальный базис корректного построения программ с рекурсиями. – В кн.: Синтез программ. Тезисы докл. Всес. школы – семинара. Устинов, 1985, с.74-76.
32. Wirth N. The programming language Pascal. Acta Informatica, 1971, vol.1, p3563.
33. Хоор К. О структурной организации данных. – В кн.: Структурное программирование. М.: Мир, 1975, с.98-197.
34. Новосельцев В.Б. Системы программирования с интеллектуальными возможностями. – В кн.: методология системных исследований. Тезисы докл.
Всес. симпозиума. М., 1985, с. 161-162.
35. Бабаев И.О. ,Новосельцев В.Б. синтез рекурсивной программы по описанию рекурсивного отношения в языке Декарт. -В кн.: Применение методов
математической логики. Тезисы докл. Всес. конф. Таллин, 1983, с.119-122.
36. Бухштаб Ю.А.,Горлин А.И. и др. Об одном методе планирования расчетных цепочек. - Программирование, 1982, № 3,С.49-55.
37. Новосельцев В.Б. Синтез рекурсивных программ в системе СПОРА.
Препр. ИТА АН СССР № 43, Ленинград, 1985, 24с.
51
38. Новосельцев В.Б. Алгоритм синтеза ветвящихся программ с квадратичной временной оценкой. - В кн.: Синтез, тестирование, верификация и отладка программ. Тезисы докл. Всес. конференции. Рига, 1981,
с.168.
39. Диковский А.Я. Анализ и синтез алгоритмов над базисом функциональных зависимостей. - В кн.: Оптимизация и преобразование программ, ч.1. ВЦ СОАН СССР, Новосибирск, 1983, с.140-152.
40. Ульман Дж. Основы систем баз данных. М.: Финансы и статистика,
1983, 334 с.
Download