ЛОГИЧЕСКИЙ ВЫВОД С ОБОБЩЕНИЕМ ФУНКЦИОНАЛЬНЫХ СИМВОЛОВ В ФОРМУЛАХ ПОСЫЛОК И ЗАКЛЮЧЕНИЙ Д.А. Страбыкин, Р.С. Петров, М.М. Шихов В современном мире все большую роль играют интеллектуальные системы. Основная цель создания подобных систем заключается в оказании помощи человеку при решении сложных задач. Очень важным остается вопрос представления знаний в интеллектуальных системах. То, насколько точно избранное представление будет соответствовать решаемым задачам, во многом определяет эффективность применения интеллектуальной системы. Разработано множество формальных систем для представления знаний и выполнения рассуждений на основе этих знаний. Если предположить, что некоторая формальная система это всего лишь способ представления и обработки знаний более удобный для реализации машиной, но равный по возможностям естественному языку, то задача извлечения смысла из естественного языка – это задача перевода знания из одного представления в другое. Часто эту трудную задачу решает человек, который совершает переход от естественно-языкового представления к формализованному, более четкому и однозначному. И, конечно, в таком случае требуется и обратный переход от формального описания к пониманию скрытого за ним смысла и представлению на естественном языке (если это требуется). Чем легче осуществить этот переход, чем он очевиднее, или чем быстрее этому переходу можно научить человека – тем лучше. Исчисление предикатов первого порядка – одна из популярных формальных систем представления знаний, благодаря своей простоте, она положена в основу многих других формальных систем. В докладе рассматривается возможность обобщения на множестве отображений, которое выступает в роли дополнительного выразительного средства, вносимого в исчисление предикатов (как в основу языка декларативного программирования) и позволяющего в некоторых случаях упростить переход к формальному описанию задачи и обратно. Предлагаемый подход иллюстрируется примерами обобщения функциональных символов в формулах посылок и заключений. Функциональные символы в исчислении предикатов составляют отдельное множество символов-имен возможных отображений между элементами области интерпретации D [1]. В некоторых прикладных задачах возникает необходимость в обобщении элементов множества отображений или создании отображений на этом множестве. Средствами классического исчисления предикатов данная возможность может быть реализована, если рассматривать множество символов-отображений как новый сорт значений области D и ввести дополнительное множество переменных и отображений на полученном множестве. Например: «для всех допустимых кодов операции процессора, определена функция дешифрации DC, результат вычисления которой определяет корректный алгоритм P выполнения закодированной операции на множестве входных сигналов Y и внутреннего состояния процессора S». коп, DC , Y , S PDC Y , S . Данное выражение не является выражением исчисления предикатов первого порядка, так как под знаком квантора существования находится функциональный символ (DC). Тем не менее, данное выражение может коп, DC , Y , S P f DC ,Y , S , быть где f(x, преобразовано y, z) можно к выражению определить как вида: функцию, выполняющую некоторое преобразование x на множестве аргументов y, z. Данное выражение является выражением исчисления предикатов первого порядка, и после исключения кванторов существования алгоритмом Сколема (см. [2], [3]) будет приведено к виду коп,Y , S P f DC коп ,Y , S . Обобщение функциональных символов в формулах посылок Наиболее распространенным является случай, когда требуется обобщение множества отображений, а не определения отображений на нем. В качестве примера рассмотрим описание базы знаний для нахождения производных некоторых функций одного аргумента: x 1, x x, sin x cosx , cosx sin x , exp x exp x . (1) Введем обозначения для данного примера. Функциям предметной области поставим в соответствие одноименные функциональные символы. Операцию умножения “*” обозначим символом mul (A*B эквивалентно mul(A,B)). Константа “x” будет обозначать переменную, по которой происходит дифференцирование. Отрицание обозначим одноместной функциональной буквой neg. Единица обозначена константой “1”. Также известно правило нахождения производных суперпозиции функций одного аргумента: dF dF S . dx dS dx (2) С учетом сказанного можно записать правила поиска производных в классическом исчислении предикатов первого порядка следующим образом: dFdx(“x”, “1”); x dFdx(x, xx) –> dFdx(neg(x), neg(xx)); x dFdx(x, xx) –> dFdx(sin(x), mul(cos(x), xx)); x dFdx(x, xx) –> dFdx(cos(x), mul(neg(sin(x)), xx)); x dFdx(x, xx) –> dFdx(exp(x), mul(exp(x), xx)); где запись dFdx(A,B) обозначает, что B является производной A по “x”. Правило нахождения производной суперпозиции функций «вносится» в правило для каждой функции. Другой вариант (требующий внесения множества символов-отношений во множество D) может выглядеть следующим образом: dFdx(“x”, “1”); S dFdS(f(“neg”, S dFdS(f(“sin”, S dFdS(f(“cos”, S dFdS(f(“exp”, S,func S), S), S), S), f(“neg”, f(“cos”, f(“neg”, f(“exp”, S)); S)); f(“sin”, S))); S)). dFdS(f(F, S), dfds) & dFdx(S, dsdx) -> dFdx(f(F, S), mul(dfds, dsdx)); где запись dFdS(A,B) обозначает, что B является производной по выражению S выражения A. В данном случае именам функций предметной области соответствуют символы дополнительного множества констант, полученного из множества функциональных символов. А функции соответствует введенное отображение f. Данное представление позволяет получить результат, но формула заключения теряет в наглядности из-за того, что утрачивается соответствие между именем функции и обозначающим её функциональным символом: dFdx(f(“exp”, f(“sin”, “x”)), Rez). В данном случае переменная func будет принимать значения только из нового множества дополнительных констант (“neg”, “sin”, “cos”, “exp”). Отображений на данном множестве не вводится. Поэтому можно упростить запись правил, определив лишь переменные принимающие значения из множества констант-отображений: dFdx(“x”, “1”); S dFdS(neg(S), S dFdS(sin(S), S dFdS(cos(S), S dFdS(exp(S), x, _F neg(S)); cos(S)); neg(sin(S))); exp(S)); dFdS(_F(S), dfds) & dFdx(S, dsdx) -> dFdx(_F(S), mul(dfds, dsdx)); где _F – обозначение переменной, обобщающей все функциональные символы одного аргумента. Таким образом, классическое исчисление предикатов дополняется возможностью вносить под квантор всеобщности функциональный символ. Это не влияет на алгоритм перехода к бескванторной форме (см. [2], [3]). Можно выделить следующие достоинства предлагаемого расширения классического исчисления предикатов для представления баз знаний. 1. Описание предметной области обладает большей наглядностью и понятностью. 2. Сокращаются объемы баз знаний по сравнению с их представлением в классическом исчислении. 3. Возрастает количество фактов (что в некоторых методах позволяет многократно ускорить процесс вывода, см., например, [3]). 4. Не требуется дополнительных преобразований, когда необходимо обобщение функциональных символов. Обобщение функциональных символов в формулах заключений В качестве примера использования вводимых обобщений в формуле заключения рассмотрим классический пример родства (см. [4]). Заключение здесь рассматривается как запрос к базе данных, которую разделяют на интенсиональную (факты-данные) и экстенсиональную (правила-знания). Person("Abraham", Person("Burt", Person("Mardge", Person("Maggy", "male"); Person("Homer", "male"); "male"); Person("Mona", "female"); "female"); Person("Lisa", "female"); "female"); Parent("Abraham", Parent("Homer", Parent("Mardge", Parent("Homer", "Homer"); "Burt"); "Burt"); "Maggy"); Parent("Mona", Parent("Homer", Parent("Mardge", Parent("Mardge", "Mardge"); "Lisa"); "Lisa"); "Maggy"); x, y Person(x,"male")&Parent(x,y)->ParentType(father(x,y)); x, y Person(x,"female")&Parent(x,y)->ParentType(mother(x,y)). В [4] последние два правила выглядят так: x, y Person(x,"male")&Parent(x,y)->Father(x,y); x, y Person(x,"female")&Parent(x,y)->Mother(x,y). Если необходимо узнать всех дедушек и бабушек, например, для "Burt", то запрос (заключение) будет иметь следующий вид: BParent, BGrand, _BParentIs, _BGrandIs ParentType(_BParentIs(BParent, "Burt")) & ParentType(_BGrandIs(BGrand, BParent)). В результате доказательства переменные получат следующие значения: {"Homer"/BParent, "Abraham"/BGrand, father/_BParentIs, father/_BGrandIs} и {"Mardge"/BParent, "Mona"/BGrand, mother/_BParentIs, mother/_BGrandIs}. Таким образом, появляется искусственная возможность манипулировать уже не отображениями, а отношениями. В классическом варианте запрос бы имел следующий вид: BParent, BGrand Father(BParent,"Burt")&Father(BGrand,BParent) | Father(BParent,"Burt")&Mother(BGrand,BParent) | Mother(BParent,"Burt")&Father(BGrand,BParent) | Mother(BParent,"Burt")&Mother(BGrand,BParent). Можно выделить следующие достоинства обобщения функциональных символов в формулах заключений. 1. Упрощается структура запроса к базе данных (согласно определению базы данных в [4]). 2. Появляется возможность извлекать информацию об определенных в базе данных функциональных зависимостях. 3. Появляется возможность оперировать не только отображениями, но и отношениями. Сочетание обобщений функциональных символов в формулах посылок и заключений Используя возможности обобщения функциональных символов, можно организовать гибкую работу с суперпозицией функциональных зависимостей, как в посылках базы знаний, так и в заключении. Предположим, что необходимо для проверки некоторого условия внести некоторое значение (например, зависимость f("x")) вместо некоторого значения аргумента (например, "y") в выражении, состоящем из суперпозиций функций одного аргумента (например, f1(f2(f3(…fN("y")…)))). Это можно сделать при наличии в базе знаний следующих правил (см. пример реверсирования списка в [3]): P(_fun(value),last,_fun(last),value); P(arg,last,modarg,value)-> P(_fun(arg),last,_f(modarg),value). При вводе заключения: P(f1(f2(f3(f4("y")))), f5("x"), answer, "y"), получим решение: {f1(f2(f3(f4(f5("x")))))/answer}. Если использовать возможности обобщения функциональных символов в заключении, то становится возможным производить более сложные преобразования. Например, требуется выполнить замену аргумента суперпозиции, который представляет собой любую функцию, содержащую в аргументе функцию g (заключения): от произвольного аргумента. Для следующего запроса P(f1(f2(g(f4("y")))),"x",answer,_anyf(g(anyg))) получим решение: {f1("x")/answer, f2/_anyf, f4("y")/anyg}. Заключение Рассмотренная модификация классического исчисления предикатов предоставляет возможность создания более гибких правил для описания предметной области и повышения удобства перехода к формальному описанию прикладных задач в логике предикатов первого порядка. Обобщение функциональных символов в формулах посылок и заключений было реализовано в программе логического вывода [5]. Она позволяет вводить исходные данные в виде логической программы, синтаксис которой представляет собой исчисление предикатов первого порядка с представленной в данной работе модификацией. Следует отметить, что наряду с отмеченными выше достоинствами предлагаемый подход имеет и недостатки: вводимыми символами обобщаются только функциональные символы; усложняется контроль над согласованностью значений таких символов в случае параллельных методов логического вывода. Иными словами, за счет возможности построения более общих правил может сокращаться объем базы знаний, но возрастает объем вычислений и увеличиваются затраты памяти в процессе логического вывода. Список литературы 1. Вагин, В.Н. Достоверный и правдоподобный вывод в интеллектуальных системах [Текст] / В. Н. Вагин, Е. Ю. Головина, А. А. Загорянская, М. В. Фомина; под ред. В. Н. Вагина, Д. А. Поспелова. – М. : Физматлит, 2004. – 704 с. – ISBN 5-9221-0474-8. 2. Люгер, Джордж, Ф. Искусственный интеллект: стратегии и методы решения сложных проблем, 4-е издание [Текст] / Люгер, Джордж, Ф. – Пер. с англ. – М. : Издательский дом 'Вильямс', 2003. – 864 с. – С.5-217. 3. Страбыкин, Д.А. Логический вывод в системах обработки знаний [Текст] / Д. А. Страбыкин ; под ред. Д. В. Пузанкова ; СПбГЭТУ. СПб., 1998. – 164 с. 4. Чери, С. Логическое программирование и базы данных [Текст] / С. Чери, Г. Готлоб, Л. Танка; Пер. с англ. – М.: Мир, 1992. – 352 с., ил. – ISBN 5-03-002472-7 5. Программа дедуктивного логического вывода в исчислении предикатов первого порядка с унификацией функторов : заявка №2007614050 Рос. Федерация : Федеральная служба по интеллектуальной собственности, патентам и товарным знакам; заявитель и правообладатель ГОУ ВПО ВятГУ ; авторы Д.А. Страбыкин, М.М. Шихов №2008610031 ; заявл. 15.10.2007 ; регистр. 9.01.2008.