Представление знаний в функциональных грамматиках

4. Palaniappan S. Ling C. Clinical Decision Support Using OLAP With Data Mining // Intern. J. of Computer Science and Network Security. 2008. Vol. 8. № 9. P. 290-296.

5. Коробко А. В., Пенькова Т. Г. Метод концептуального OLAP-моделирования на основе формального концептуального анализа // Вестник СибГАУ. 2010. № 4 (30). C. 74-79.

6. Krajca P., Outrata J., Vychodil V. Parallel Recursive Algorithm for FCA // Proc. of the Sixth Intern. Conf. on Concept Lattice and their Applicatons. Olomouc, 2008. P. 71-82.

7. Lindig C. Fast concept analysis // Proc. of the Intern. Conf. on Conceptual Structures (ICCS). Aachen : Shaker Verlag, 2000.

8. Concept Lattices : Second Intern. Conf. on Formal Concept Analysis / P. Eklund. Sydney, 2004. P. 23-26.

9. Kuznetsov S. O., Obiedkov S. A. Comparing Performance of Algorithms for Generating Concept Lattices // J. of Experimental and Theoretical Intelligence. 2002. Vol. 14. P. 189-216.

10. Korobko A., Penkova T. On-line analytical processing based on Formal concept analysis // Procedia Computer Science. 2010. Vol. 1. № 1. P. 2305-2311.

11. Penkova T.G., Korobko A.V. Constructing the integral OLAP-model based on Formal Concept Analysis // Proc. of the 34th Intern. Convention. Opatija, 2011. P. 225-229.

12. Wille R. Restructuring Lattice Theory: an approach based on hierarchies of concept. Dordrecht ; Boston : Reidel, 1982. P. 445-70.

A. V. Korobko, T. G. Penkova

ALGORITHMS OF COMPOSITION OF THE INTEGRAL OLAP-MODEL IN OBJECT DOMAIN

The algorithms of composition of an integral OLAP-model based on the search of cube-concepts and composition of concept lattice of OLAP- cubes are described. Suggested algorithms are supplemented for integral OLAP- model of scientific activity of an organization.

Keywords: integral OLAP-model, on-line analytical data processing, formal conceptual analysis.

© Коробко А. В., Пенькова Т. Г., 2011

УДК 681.142.2

В. А. Кравченко, П. Б. Могнонов, Д. Н. Чимитов ПРЕДСТАВЛЕНИЕ ЗНАНИЙ В ФУНКЦИОНАЛЬНЫХ ГРАММАТИКАХ

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

Ключевые слова: контекстно-ориентированное программирование, объектно-ориентированное программирование, структура данных.

Рассмотрим вопрос о формализации языка с точки зрения формирования понятий на основе анализа отношений между различными объектами.

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

Согласно данному подходу, любое предложение естественного языка, а также любая программа на

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

При этом оба представления являются эквивалентными и выражают одни и те же зависимости элементов текста.

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

? = /іЖзШзШ,0МШЛ)ШтМС)))

Рис. 1. Дерево синтаксического анализа и суперпозиция функций для программы

? = /1

Рис. 2. Дерево синтаксического анализа и суперпозиция функций для предложения русского языка

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

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

которые до настоящего времени были ориентированы на решение только математических задач. Однако в связи с развитием информатики все более актуальной становится относительно недавно возникшая инженерия знаний.

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

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

\V = V0 + a-t; S = V0-t +

a -12

S =

V2 - V02 2 - a

>.

Из предиката (1) порождаются 12 функциональ-

ных зависимостей:

V = V0 + a -1,

V = yj2 - a - S + V02, V0 = V - a -1,

V = S a -1 0 = t 2 ,

= V V2 - 2 - a - S,

V0

a -12

S = V • t +--и т. д.

2

Дадим обычно принятые в функциональных грамматиках определения объектов (типов, понятий):

- <Speed> ^ <SpeedInKM/H> | <SpeedInM/S> | <SpeedInKM/S>;

- <Start> ^ <StartInKM/H> | <StartInM/S> | <StartInKM/S>;

- <Dist> ^ <DistInKM> | <DistInM> | <DistInSM>;

- <Time> ^ <TimeInH> | <TimeInMIN> | <TimeInS>;

- <Acc> ^ <AccInKM/HH> | <AcctInM/SS>;

- <SpeedInKM/H> ^ (R: real; км/ч);

- <SpeedInM/S> ^ (R: real; м/с);

- <SpeedInKM/S> ^ (R: real; км/с);

- <StartInKM/H> ^ (R: real; км/ч);

- <StartInM/S> ^ (R: real; м/с);

- <StartInKM/S> ^ (R: real; км/с);

- <DistInKM> ^ (R: real; км);

- <DistInM> ^ (R: real; м);

- <DistInSM> ^ (R: real; cм);

- <TimeInH> ^ (R: real; ч);

- <TimeInMIN> ^ (R: real; мин);

- <TimeInS> ^ (R: real; с);

- <AccInKM/HH> ^ (R: real; км/ч2);

- <AccInM/SS> ^ (R: real; м/с2).

Условно обозначим приведенные выше продукции через GT(0).

Для заданной грамматики между нетерминальными понятиями имеются следующие соотношения (<Предикаты>):

- <Speed> = <Start> + <Acc>*<Time>;

- <Dist> = <Start>*<Time> + <Acc>*<Time>*<Time>/2;

- <Dist> = [<Speed>*<Speed> - <Start>*<Start>] / (2*<Acc>).

Программная оболочка по известным алгоритмам должна автоматически порождать из указанного предиката следующие функции (<Автоматически порожденные функции>):

- <Speed> ^ <Start> + <Acc>*<Time> {/1};

- <Speed> ^ КОРЕНЬ [2*<Acc>*<Dict> + <Start>*<Start>] {/2};

- <Start> ^ <Speed> - <Acc>*<Time> {/3};

- <Start> ^ <Dist>/<Time> - <Acc>*<Time>/2 {/4};

- <Start> ^ КОРЕНЬ [<Speed>*<Speed> -2*<Acc>*<Dict>] {/5};

- <Dist> ^ <Start>*<Time> + <Acc>*<Time>*<Time>/2 {/6};

- <Dist> ^ [<Speed>*<Speed> - <Start>*<Start>] / [2*<Acc>] {/7};

- <Time> ^ [<Speed> - <Start>] / <Acc> {/8};

- <Time> ^ [ КОРЕНЬ [<Start>*<Start> + 2*<Acc>*<Dist>] - <Start> ] / <Acc> {/9};

- <Acc> ^ [<Speed> - <Start>] / <Time> {/10};

- <Acc> ^ 2* [<Dist> - <Start>*<Time>] / [<Time>*<Time>] {/1i};

- <Acc> ^ [<Speed>*<Speed> - <Start>*<Start>] / [2*<Dict>] {/12}.

Также имеются следующие функции преобразования единиц измерения объектов:

- g1 = (<SpeedInKM/H>) <SpeedInM/S>:

(0.278*R.<SpeedInKM/H>; м/с);

g2

(<TimeInH>) <TimeInS>:

(3600*R.<TimeInH>; с) и т.д.

Рассмотренный выше процесс образования функциональной грамматики теории ОТ можно представить в виде следующей обобщенной схемы:

От(0) + <Предикаты> = = > От(Г) + <Автоматически порожденные функции> = = > От.

В заданной функциональной грамматике рассмотрим интерпретацию конкретной задачи. Дано: А: <Асс> = (5.0; м/с2); £: <Dist> = (6; км); ¥0: <81ай> = (0.0; м/с). Необходимо найти: Т: <Пте> = (?.?; с).

Сформулируем процесс решения задачи программной оболочкой, которая загружена функциональной грамматикой ОТ.

Шаг 1. Примем за аксиому величину, которую нужно найти, а за терминальные символы - заданные величины (в смысле грамматики).

Шаг 2. Выберем из грамматики 0Т продукции, содержащие аксиому в левой части.

Шаг 3. Может существовать три ситуации: первая -в правых частях полученных продукций отсутствуют нетерминалы и тогда решением задачи будет путь в дереве от аксиомы к заданному данными продукциями узлу; вторая - в правых частях есть нетерминалы, тогда выбираем продукции для самого левого нетерминала; третья - в правых частях присутствует аксиома и такие ветви будем отбрасывать.

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

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

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

Процесс образования функциональной грамматики теории ОТ можно представить в виде следующей обобщенной схемы:

От(0) + <Предикаты> = = > ОТ(Г) + <Автоматически порожденные функции> = = > От,

где От(0) - начальная грамматика, в которой приводятся определения понятий в термах: <Предикаты> описывают соотношения и связи между понятиями теории.

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

Пример 2. Покажем, как, используя функциональную грамматику, можно создать модель состояние памяти для следующего программного фрагмента:

начало цел А, В, С, вещ Б, Е, ... конец.

Цель этого примера состоит в том, чтобы продемонстрировать, как описания переменных X, У, 2, Т, Ь могут быть формально представлены в виде процесса управления памятью. Для этого введем формальные определения модели памяти, модели типов переменных и синтаксис описания переменных в языке.

Грамматика ОМ-1 - это грамматика описания общей памяти:

Е ^ М ю Е; М ^ вид X #, М ^ е;

Е ^ В # В; В ^ е.

Здесь Е - память; М - вспомогательная модель памяти для суперпозиции функций; Е - внешняя память; В - файл ввода; е - пустое множество.

РЕШЕНИЕ

<Тте>=Ш<Асс>, <8Ш>),<8Ш>, <Асс>)

Рис. 3. Решение задачи в виде дерева разбора и суперпозиции функций

Начальное состояние памяти:

Е = ю В #.

Грамматика Ом - это грамматика описания видов:

ВИД ^ цел, ВИД ^ вещ, ВИД ^ имя ВИД.

Упорядоченность

£1 = (имя ВИД) ВИД.

Грамматика О0 - это грамматика синтаксиса:

<программа> ^ начало <описания>, <операторы> конец {/1};

<описания> ^ <описание> {/2}; <описания> ^ <описания>, <описание> {/3};

<описание> ^ <описание>, <идент> {/5}; <описание> ^ ВИД, <идент> {/6};

<идент> ^ X {/18}; X ^ <буква>; X ^ X <буква>.

Функции/:

-/2 = (конт ґ, знач х) конт: (Е, М)/3(Е, є, М);

- /з = (конт ґ, знач х, у) конт: ((М ВИД X # Е, є, ВИД(1) X # М) ± | (Е, є, ВИД X # М /3(имя ВИД X # Е, є, М) | (Е, є, є) знач (є));

- /5 = (знач х, текст у) знач: (ВИД X # М, X*-1-1) ВИД X # М ВИД X(1) #;

-/6 = (текст х, у) знач: (ВИД, X) имя ВИД X #;

- /18 = (конт ґ, текст х) знач: (М ВИД X # Е, X) ВИД.

Согласно введенной для заданного фрагмента программы грамматике можно построить дерево синтаксического разбора (рис. 4).

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

/6 = (текст х, у) знач: (ВИД, X) имя ВИД X #.

Эта функция состоит из двух частей. Часть функции до двоеточия называется заголовком функции, после двоеточия - телом функции. Заголовок функции /6 сообщает о том, что она имеет два аргумента: х и у, причем тип этих аргументов - текстовый. Результатом функции является тип знач.

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

Рис. 4. Дерево синтаксического разбора заданного фрагмента программы

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

Рассмотрим тело функции / (см. рис. 4). Внутри скобок находятся два нетерминала: ВИД - от грамматики 0М1 - и X - от грамматики 00, которые являются формальными параметрами функции. Фактическими параметрами функции /6 в начале программного фрагмента (это самая левая часть дерева разбора) являются цел и X, при этом цел сворачивается в ВИД по одному правилу, а А как буква сворачивается сначала в нетерминал X, а потом - в нетерминал <идент> {/18}. Далее ВИД и <идент> сворачиваются в <описание> {/6}. Поскольку в заголовке /6, как уже было указано, аргументы х и у имеют тип текст, то нетерминалы ВИД и X рассматриваются функцией как текстовые значения цел и А. Функция /18, соответствующая нетерминалу <идент>, игнорируется, так как ее результат имел тип знач, а вовсе не тип текст. Отсюда можно сделать вывод, что заголовок функции управляет процессом вычислений в теле функции, а также процессом вычислений в суперпозиции функций, что еще раз подтверждает значимость заголовка функции.

Результат функции /6 в терминах формальных параметров имеет вид

имя ВИД Х #,

где имя, # - термы; ВИД имеет текстовое значение цел, X - текстовое значение А. Значение функции определяется при помощи операции отождествления. Для вычисления /6, с одной стороны, имеются формальные параметры ВИД и X, с другой стороны -фактические параметры цел и А (рис. 5). Операция отождествления основывается на сопоставлении формальных и фактических аргументов:

ВИД : = цел иX : = А.

Тогда результат функции/6 равен имя цел А #.

отождествление

/6 = (текст х, у) знач: (ВИД, X) имя ВИД X #

Т Т имя цел А #

результат

А

фактические

параметры

Рис. 5. Вычисление значения функции /6

Теперь рассмотрим функцию

/5 =

ВИД X # М ВИД Xю #.

Она также имеет два аргумента х и у, но первый

аргумент имеет тип знач. Именно поэтому в качестве

первого фактического параметра будет выступать результат выполнения функции /6

имя цел А #.

Отметим, что формальный параметр X имеет в своем составе нетерминал М, который в данном случае равен є (пустоте). Вторым параметром/ является текстовое значение нетерма X, которое равно В. Результатом функции /5 (рис. 6) будет являться значение

имя ВИД А # имя ВИД В #.

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

имя ВИД В #.

В этом случае результатом функции является значение

имя ВИД А # имя ВИД В # имя ВИД С #.

отождествление

/5 = (знач х, текст у) знач: (ВИД X # М, X«) ВИД X # М ВИД X« #

^ а і к

г

имя ВИД

имя ВИД А # имя ВИД В #

результат

^ _ параметр у

Фактический параметр х

Рис. 6. Вычисление значения функции /5

Таким образом, фрагмент программы

цел А, В, С

сворачивается в нетерминал <описание>, которому соответствует результат функции /¡(1):

имя ВИД А # имя ВИД В # имя ВИД С #.

Другой фрагмент

вещ О, Е

также сворачивается в <описание> с функцией /5(2), значение которой, по аналогии с /¡(1), равно

имя ВИД О # имя ВИД Е #.

Далее символ <описание>, находящийся в левой части дерева, сворачивается в символ <описания> посредством функции

/2 = (конт ґ, знач х) конт: (Е, М)/3(Е, є, М).

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

/з = (конт ґ, знач х, у) конт: ((М ВИД X # Е, є, ВИД(1) X # М) ± | (Е, є, ВИД X # М) /3 (имя ВИД X # Е, є, М) | (Е, є, є) знач (є)).

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

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

говорит о том, что каждый новый вызов функции будет изымать значение

имя ВИД X

из нетерминала М и добавлять его в память Е, проставляя каждый раз впереди дополнительно терм имя. Это будет происходить до тех пор, пока согласно выражению

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

Е = имя имя цел С # имя имя цел В # имя имя цел А #,

а результатом на исходящей ветви дерева - пустое значение

е = знач (е).

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

Полученный результат е и результат функции /5(2) подаются (теперь уже непосредственно) на вход функции /3. Возникающая при этом рекурсия будет аналогична рассмотренной ранее. Ошибка ± описываемая альтернативой

(М ВИД X # Е, е, ВИД(1) X # М),

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

В результате значение функции /5(2) пополнит общую память Е до состояния

Е = имя имя вещ Е # имя имя вещ Б # имя имя цел С # имя имя цел В # имя имя цел А #.

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

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

Библиографические ссылки

1. Тузов В. А. Математическая модель языка. Л. : Изд-во Ленингр. ун-та, 1984.

2. Тузов В. А. Языки представления знаний : учеб. пособие. Л.,1990.

V. A. Kravchenko, P. B. Mognonov, D. N. Chimitov

KNOWLEDGE REPRESENTATION IN FUNCTIONAL GRAMMARS

One of the ways of representation of knowledge (theories) by means of functional grammars is considered in the article. The authors make an attempt to give the uniform scheme of the decision of the problem, by its downsinking in functional grammar of the theory.

Keywords: context-oriented programming, object-oriented programming, data structures.

© Кравченко В. А., Могнонов П. Б., Чимитов Д. Н., 2011