Часть 5. S-FLOGOL-система функционально-логического программирования
.pdf5. S-FLOGOL-СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ
5.S-FLOGOL-СИСТЕМА ФУНКЦИОНАЛЬНО-
ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ
5.1.Архитектура и общие принципы реализации FLOGOL-системы функционально-логического программирования.
На рис. 5.1. представлена структурная схема FLOGOL -системы
функционально-логического программирования, построенной на основе
теории направленных отношений.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Транслятор |
|
|
|
|
Библиотека |
Компилятор |
|
|
Библиотека |
|
|
|
|
|||||||||
|
|
направленных |
запросов |
|
|
объектных |
|
|
1:1 |
|
|
||||||||
|
|
отношений |
|
|
|
модулей |
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Система |
|
|
Библиотека |
|
Графический |
|
|
|
Библиотека |
|
|||||||
|
|
исполнения |
|
|
|
|
|
|
|
||||||||||
|
|
|
|
арифметич. |
|
редактор |
|
|
|
исходных |
|
||||||||
|
|
запросов |
|
|
|
|
|
|
|
||||||||||
|
|
|
|
функций |
|
|
|
|
|
|
|
|
|
|
модулей |
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Система |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Библиотека |
Программ-я |
|
|
|
|
|
|
|
|
|
|
|
Текстовый |
|
|||
|
|
внешних |
общего |
|
|
|
|
|
|
|
|
|
|
|
редактор |
|
|||
|
|
интерпретаций |
назначения |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 5.1. Структура FLOGOL -системы функциональнологического программирования.
Кратко охарактеризуем назначение ее основных компонентов.
Графический редактор – основной инструмент при разработке
FLOGOL -программ. Назначение – создание и редактирование отдельных объектных модулей, хранимых в библиотеке объектных модулей, и фор-
мирование запросов на вычисление отношений. Обеспечивает контроль взаимных ссылок и реализацию сервисных функций по отражению струк-
туры создаваемых модулей, обеспечению безопасной интерактивной раз-
работки объектов описания – доменов и схем отношений, контролю види-
мости уже описанных компонентов и наглядному оперативному отображе-
FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ
5. S-FLOGOL-СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ
нию их характеристик, графической поддержке разработки определений схем отношений, как в композиционной, так и в сетевой форме. Графиче-
ский редактор поддерживает все возможности языка без явного создания исходного текста модулей. При необходимости формируются исходные тексты модулей, которые строятся с помощью транслятора без использо-
вания средств графического редактора (возможно и обратное построение объектных представлений модулей по исходным текстам). Интерфейс с
библиотекой исходных модулей поддерживается стандартным текстовым редактором.
Запрос – замкнутое (не содержащее свободных вхождений оператор-
ных переменных сверток) реляционное выражение в корневом домене не-
которого модуля. Сформированный в объектной форме в рабочем поле графического редактора запрос на вычисление отношения преобразуется в систему сетевых определений (фактически, в сетевую КС-грамматику) с
помощью компилятора запросов. При этом для поиска описаний конкрет-
ных, в общем случае, индексированных отношений по объектному пред-
ставлению модулей осуществляется решение систем арифметических уравнений относительно операторных переменных в свертках, компоновка повторных определений на одном структурном уровне, уточнение и под-
ключение фактических параметров определений. Для решения систем арифметических уравнений используется входящая в FLOGOL -систему программирования подсистема исполнения запросов, реализующая модель вычислений в базисе конструкторов натуральных чисел. На этих этапах учитываются особенности семантики виртуальных определений и насле-
дования при переопределении отношений во вложенных доменах, форми-
руются видимые в точке запроса отношения, задаваемые в программе с описателем EMPTY, для отражения дополнительной информации об ин-
терпретациях терминальных (не определенных в программе) отношений,
FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 2
5. S-FLOGOL-СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ
устанавливаются связи с библиотекой внешних интерпретаций. Интер-
фейс с этой библиотекой и с библиотекой внешних арифметических функ-
ций осуществляется средствами любого языка программирования общего
назначения, реализованного в операционной среде Windows. Результат ра-
боты компилятора запросов помещается в библиотеку отношений. Про-
стейшие функции работы с этой библиотекой поддерживает графический редактор, с помощью которого и осуществляется формирование запросов,
и инициируется работа исполнительной системы, реализующей сетевые модели вычислений. Ниже кратко рассматриваются основные принципы рабочего представления сетей отношений в процессе вычислений. Реали-
зация параллелизма при вычислениях зависит от возможностей конкрет-
ной вычислительной установки.
Внутреннее представление множеств и отдельных сетей в системе ис-
полнения запросов – сложная структура данных с перекрестными ссылка-
ми, в определенной мере избыточная, однако, обеспечивающая быстрое копирование, подстановку и сжатие полученных в результате преобразо-
ваний сетей, эффективный поиск редексов и применение правил редукции,
а также других процедур, реализуемых в поддерживаемых системой моде-
лях вычислений. На рис. 5.2. показаны фрагменты представления сетевой грамматики (аналогично представлено и рабочее множество сетей н ) при реализации data-flow-модели вычислений с внешней интерпретацией тер-
минальных сортов элементов сетей.Для понимания некоторых компонен-
тов этого представления рассмотрим транзитивное замыкание * |
отно- |
|||||
шения |
«подчиненности» на множестве Bн нетерминальных сортов |
|||||
|
|
|
*, если и только если существует правило |
|
B |
|
элементов: , |
|
|
||||
сетевой грамматики, такое, что сеть |
B содержит элемент сорта |
|
. |
|||
|
|
|
|
– аксиома сетевой грамматики. |
||
Пусть |
{ , | , *}, где |
FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 3
5. S-FLOGOL-СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ
список входов сети
|
|
к точкам сети |
|
список выходов сети |
|
Сеть – правая часть правила |
к точкам сети |
|
|
||
|
|
нетерминальный сорт (см. рис. 4.5) |
|
|
к элементам множеств сетей – |
|
|
правых частей правил |
|
«квота» |
|
н |
|
|
|
|
список нетерминалов |
|
|
|
|
|
список входных точек |
|
к точкам сети |
нетерминала |
|
|
|
|
|
список выходных точек |
|
|
нетерминала |
|
«вес» точки |
к точкам сети «вес» точки |
|
|
точки |
|
|
сети |
|
iвх |
iвх |
входы элементов (выходы сети)
|
iвых |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
iвых |
|
|
|||
|
|
|
|
|
выходы элементов (входы сети) |
|||||||||
|
|
|
|
|
|
«готовность» |
|
терминальные |
||||||
|
|
|
т |
|
|
|
|
k |
|
|
|
|||
|
|
|
|
|
|
|
|
|
элементы сети |
|||||
|
|
|
|
|
|
|
|
|
|
|
|
список входных точек терминала
список выходных точек терминала
|
терминальный сорт |
R |
||
список смежных |
'( R ) |
"( R ) |
|
|
точек в dif-графе |
|
|
R |
|
|
|
интерпретация |
|
R |
Рис. 5.2. Представление сетей – правых частей правил грамматики.
FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 4
5. S-FLOGOL-СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ
Построим |
– наибольшее отношение эквивалентности на Bн , такое, что |
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
, а |
– наименьшее отношение на множестве классов эквивалентно- |
||||||||||||||||
сти |
по |
|
отношению |
|
|
(на фактор-множестве |
Bн / ), |
такое, |
что |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/ , |
/ *. |
Представление соответствующего |
|||||||||||||
, |
|
|
|
||||||||||||||
ациклического орграфа с множеством вершин – подмножеством |
Bн / |
и |
|||||||||||||||
множеством дуг |
показано на рис. 5.3. В начальном состоянии множе- |
||||||||||||||||
ство |
н |
|
подлежащих вычислению сетей содержит единственную одно- |
||||||||||||||
элементную сеть |
|
S1 , |
где |
– аксиома сетевой грамматики. Поэтому в |
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
начальном состоянии счетчики ссылок CRu для всех вершин |
u |
орграфа |
|||||||||||||||
отличны от нуля |
|
и имеют следующие значения: |
CR / 1, |
а для всех |
|||||||||||||
остальных |
u |
|
|
|
|
|
|
|
}| . В дальнейшем эти счетчики от- |
||||||||
CRu |{u |
| u , u |
слеживают количества элементов нетерминальных сортов из соответству-
ющего класса эквивалентности во всех сетях множества н . При обнуле-
нии некоторого счетчика CRu ' , во-первых, из грамматики исключаются все правила для нетерминальных сортов из данного класса эквивалентно-
сти |
u , а, во-вторых, уменьшаются на 1 все счетчики CRu для таких u , |
что |
|
u ,u . Исключение «лишних» нетерминальных сортов, которые |
не могут появиться в сетях, выводимых из аксиомы грамматики, и соот-
ветствующих правил сетевой грамматики осуществляется при формирова-
нии рассматриваемого орграфа.
Для того чтобы представление не зависело от используемого при ин-
терпретации носителя, «веса» точек сетей входят в него в форме ссылок.
Для определения «готовых» к выполнению терминальных функциональ-
ных элементов используются счетчики, подсчитывающие количества еще не получивших весов-значений входных точек этих элементов. При обну-
лении этих счетчиков ссылки на соответствующие терминальные элементы
FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 5
5. S-FLOGOL-СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ
передаются для вычислений в специальный список. Ссылки на исполняе-
мые коды программ вычисления функций-интерпретаций терминальных сортов элементов сетей находятся в паспортах элементов терминального базиса. Организация рекурсивных подстановок была достаточно подробно рассмотрена в разделе 4.4. Для управления скоростью раскрытия дерева подстановок используются так называемые «квоты», характеризующие конкретные вхождения элементов нетерминальных сортов в сети – правые
множество сетей – правых частей правил для сорта (см. рис. 5.2)
|
сеть S 1 |
|
сеть S n |
u |
'( ) |
"( ) |
Нетерминальный сорт u |
|
|||
|
|
множество u |
нетерминальных сортов |
CRu |
|
класс эквивалентности u Bн / |
|
u |
|
|
|
|
|
|
отношение |
CRu ' |
|
класс эквивалентности |
u '
Рис. 5.3. Представление нетерминальных сортов сетевой грамматики. части правил сетевой грамматики.
5.2.Язык функционально-логического программирования S-FLOGOL
Язык функционально-логического программирования S-FLOGOL
(Small Function and LOGic Oriented Language) является представительным подмножеством FLOGOL-а – языка программирования высокого уровня чисто декларативного типа [Фальк, 2001], семантика и реализация которо-
го опираются на теорию направленных отношений. Реализация языка S-
FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 6
5. S-FLOGOL-СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ
FLOGOL не только является существенным шагом на пути к полной реа-
лизации языка FLOGOL, но и имеет самостоятельное значение, прежде всего, для решения задач искусственного интеллекта. В первой части до-
клада формулируются основные концепции построения языка S-FLOGOL
и сущность введенных в нем ограничений, во второй части – оригинальная технология и компоненты поддержки самого процесса решения задач в рассматриваемой системе программирования. В отдельном докладе более подробно рассматриваются принципы построения и реализации разрабо-
танных инструментальных средств поддержки разработки и отладки S- FLOGOL-программ.
5.2.1. Особенности языка S-FLOGOL.
S-FLOGOL-система функционально-логического программирования,
как уже указывалось, построена на базе теории направленных отношений
[1]. Напомним определение ее базового понятия: направленным отноше-
нием арности (n',n"),n',n" 0.. , на непустом множестве данных D назы-
вается график соответствия из Dn' в Dn" . Большинство семантических примитивов языков функционального и логического программирования
(объекты, кортежи объектов, множества объектов, функции – частичные и всюду определенные, конструкторы, логические значения, предикаты и т.д.), естественным образом представляется в форме направленных отно-
шений определенной арности, возможно, дополнительно наделенными не-
которыми фундаментальными свойствами, например, тотальностью и функциональностью, относящимися как к самому представляющему от-
ношению, так и к обратному ему отношению.
Важную роль в теории направленных отношений играет сетевое пред-
ставление схем направленных отношений. Сетевое представление обладает многими преимуществами по отношению к заданию схем в виде формул:
простотой, наглядностью и др. Оно является одновременно и естественной
FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 7
5. S-FLOGOL-СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ
формой задания, и основой реализации вычислений направленных отно-
шений. Для основного класса рекурсивных схем направленных отношений их сетевое представление в форме сетевого языка (множества сетей в неко-
тором терминальном базисе элементов) задается с помощью контекстно-
свободных сетевых грамматик [3].
Программа на языке S-FLOGOL имеет форму запроса к информаци-
онной базе системы. Информационная база представляет собой многомо-
дульную структуру; отдельные модули, как правило, содержат описания объектов, относящихся к определенной содержательной области – домену.
Эти описания в компактной схематичной форме задают представляющие эти объекты направленные отношения и, возможно, их взаимные свойства.
Для одних, терминальных, отношений описание объявляет лишь их имена и некоторые характеристики – арность и наличие упомянутых выше свойств отношений, а другие, нетерминальные, могут быть определены в рекурсивной форме с помощью реляционных выражений. Фактически та-
кие описания образуют систему реляционных уравнений, а определяемые направленные отношения – компоненты минимального решения этой си-
стемы уравнений [1]. Чисто логическая связь объектов, представленных в базе направленными отношениями, задается описанием реляционных вы-
ражений, которые в предполагаемых интерпретациях представляют пустые отношения, аналогично тому, как отрицания аксиом в логическом выводе суть формулы, ложные для любой интересующей нас интерпретации [1].
Высокий уровень языка поддерживается, прежде всего, наличием в языке развитых средств схемного описания направленных отношений. Во-
первых, имена отношений могут быть индексированы любыми кортежами натуральных чисел. Во-вторых, в правых частях определений схем могут использоваться отношения-параметры, идентифицируемые произвольны-
ми натуральными числами, а фактические значения параметров задаются в
FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 8
5. S-FLOGOL-СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ
конкретных вызовах этих схем. Наконец, определения схем и конкретные вызовы могут быть специфицированы выражениями, конкретизирующими арности направленных отношений, что обеспечивает полиморфность таких определений. Все эти возможности поддерживаются механизмом операто-
ров свертки, используемых при построении тел модулей. В языке нет яв-
ных средств описания типов данных и отношений. Однако, у пользователя есть возможность описать новую схему как результат применения любой базисной или определенной им в модуле реляционной операции к уже ра-
нее определенной схеме и к отношению, составляющему правую часть но-
вого определения, обеспечивая, таким образом, принцип «наследования».
Описав ранее схемы «универсальных» отношений различных типов, мож-
но воспользоваться этой возможностью, применяя операцию пересечения отношений. В отличие от языка FLOGOL, в S-FLOGOL-е не допускается использование параметров схемы при формировании фактических пара-
метров других схем, вызываемых в правой части определения, что позво-
ляет применить описанную в разделе 2 технологию обработки S-FLOGOL-
программ. С точки зрения выразительных возможностей языка это ограни-
чение не столь существенно. В имени наследуемой схемы и для формиро-
вания рекурсивных определений можно при вызове любой схемы, в том числе и с идентификатором самой определяемой схемы, указать, что спи-
сок индексов и (или) список фактических параметров совпадает со спис-
ком индексов и списком фактических параметров определяемого отноше-
ния. Одной из основных особенностей построения конструкций языка яв-
ляется то, что, за исключением элементов внешнего оформления синтакси-
ческих конструкций, все они представляют собой различного типа выра-
жения общего вида. Так, значения арифметических выражений представ-
ляют отдельные натуральные числа, индексных выражений – кортежи натуральных чисел, параметрических выражений – множества пар <номер
FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 9
5. S-FLOGOL-СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ
параметра, отношение – фактическое значение параметра>, реляционных выражений (правых частей определений схем и фактических значений па-
раметров определений) – направленные отношения, доменных выражений
– множества описаний схем отношений, и т.д. Все типы выражений стро-
ятся по единому шаблону: задаются формы первичных выражений данного типа, определяются связки унарных и бинарных операций (для последних задаются приоритеты), во всех типах выражений могут использоваться конструкции выбора if-then-else и case, а также оператор свертки по лю-
бой из бинарных операций рассматриваемого типа. Помимо операции,
оператор свертки предполагает задание: а) операторной переменной, б)
выражения, определяющего последовательность натуральных чисел – зна-
чений операторной переменной, и в) выражения рассматриваемого типа, в
которое может свободно входить операторная переменная. Если операция является коммутативной, ассоциативной и рефлексивной, то первое из упомянутых выражений в конструкции оператора свертки определяет не последовательность, а множество значений операторной переменной, как,
например, в доменных выражениях, задающих множество описаний схем направленных отношений. Для реляционных выражений в языке преду-
смотрена возможность введения программистом новых бинарных связок как альтернативы синтаксического оформления вызовов схем с двумя па-
раметрами, что существенно расширяет возможности использования опе-
раторов свертки. Полные имена отношений, включающие идентификатор,
список индексов и арность, локализованы внутри модуля. Повторные определения отношений с одинаковыми полными именами внутри одного модуля не являются ошибками – они рассматриваются как альтернативы одного определения, правая часть которого есть объединение отношений – правых частей повторных определений. Тот же принцип используется и для задания семантики параметрических выражений, в которых сочетают-
FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 10