Элементы ядра системы

1. Введение

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


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

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

Минимальный набор языковых средств системы, действий, связанных с этими средствами и онтологий называется ядром системы.

В ядро системы входят:
• шаблоны языка ядра системы;
• онтология ядра;
• алгоритмы действий, связанных с шаблонами ядра.

Шаблон языка представляет собой последовательность слов, спецзнаков и переменных с заданием типа каждой переменной. При формировании шаблонного выражения с помощью данного шаблона вместо переменных помещаются уже построенные шаблонные выражения соответствующих типов. С каждым шаблоном языка, введенным пользователем, пользователь вводит также:
• условие применения шаблона,
• действие шаблона,
• тип результата.
В словаре системы для каждого шаблона, кроме того,
• определяется уникальный идентификатор шаблона,
• указывается, в какой онтологии этот шаблон введен,
• указывается место в тексте онтологии, где вводится этот шаблон,
• приводится комментарий, описывающий этот шаблон;
• (может быть?) дата и время ввода шаблона.

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

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

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

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

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

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

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

2. Шаблоны ядра системы

2.1. Шаблоны - имена типов и онтология ядра

В этом подразделе описываются шаблоны для указания названий типов, входящих в ядро системы и онтологические отношения между соответствующими им типами. Сами шаблоны в этом документе пишутся в двойных кавычках, а их английские варианты в скобках. При этом, через косую черту ставится «+», если этот вариант реализован в системе ЭЗОП, «-», если пока не реализован или указывается то слово, под которым он реализован в системе. Выражением (А№) в этом тексте будут выделяться аксиомы системы.

(A1) Типы всех выражений языка системы могут рассматриваться как совместимые с типом:
1. «терм» (term/+).
В частности, тип самого выражения «терм» совместим с типом «терм».

Все типы языка системы являются экземплярами типа:
2. «тип» (type/+).
В частности, термы «тип» и «терм» являются выражениями типа «тип».

(А2) Каждый тип является подтипом типа «терм».
(А3) Если a элемент типа T1, и T1 подтип T2, то a элемент T2.

Примерами типов в ядре являются:
3. «тип данных» (datatype/-),
4. «синтаксический тип» (syntactical type/-),
5. семантический тип или «класс/область» (class/ob).

(А4) Эти типы являются подтипами типа «тип».

К типам данных относятся обычные типы данных, используемые в программировании. В ядре системы используется базовые типы данных:
6. «строка» (string/-),
7. «целое число» (integer/-),
8. действительное число (real/+).

(?) Может быть, типы данных string, integer, real следует исключить из ядра и вынести в отдельные онтологии: целые выражения и арифметические выражения.

9. «булевый» (boolean/+).

Элементы булевого типа задаются следующими шаблонами типа булевый:
10. «истина/да» (true/+),
11. «ложь/нет» (false/+).

Сложные булевы выражения относятся к типу:
12. «булево выражение»/- (boolean_phrase/expr_bool).

Булевы выражения задаются следующей грамматикой в форме Бэкуса-Наура:
expr_bool ::= impl_bool.
impl_bool ::= dizj_bool | impl_bool “ =>” dizj_bool.
dizj_bool ::= conj_bool | dizj_bool “v” conj_bool.
conj_bool ::= simple_bool | conj_bool “&” simple_bool.
simple_bool ::= boolean | “(“expr_bool “)” | “~” simple_bool.

Заметим, что язык Бэкуса-Наура может рассматриваться как метаязык для ввода шаблонов языка системы и синтаксических типов.

По первой строке вводятся шаблоны синтаксических типов (если они не были введены ранее) и устанавливается отношение «impl_bool» - подтип типа expr_bool.
По второй строке вводятся шаблоны синтаксических типов, используемые в этой строке и не введенные ранее (здесь только «dizj_bool» типа «синтаксический тип»), которые делаются подтипом типа impl_bool, и вводится шаблон «@impl_bool => @dizj_bool» типа impl_bool, где символом @ обозначены переменные шаблона типов impl_bool и dizj_bool, соответственно.
По остальным строкам делаются аналогичные действия.

Аналогично задается грамматика арифметических выражений.

Синтаксические типы нужны для управления грамматическим разбором входного текста. К синтаксическому типу в ядре относятся типы:
13. «текст» (text/+),
14. «предложение» (sentence/+),
15. «вопрос» (question/+),
16. «текст вопроса» (text_question/+),
17. «команда» (command/+),
18. «новое слово» (new/+),
19. «комментарий» (comment/+),
20. «сообщение системы в тексте» (message/+),
21. «сообщение в журнал» (message log/-)
22. «новая переменная» (insert_var/+).

Эти синтаксические типы используются в следующих грамматических правилах.
text ::= sentence | sentence text.
sentence ::= “.” | command “.”|question | message.
command ::= “Пустая” “команда” | input_var | l_command command.
l_command ::= command “;”.
question ::= text_question “?” | “Чему” “равно” term “?”| “Элементы” “класса” class “?” | “Подклассы” “класса” class “?” “Максимальные” “подклассы” “класса” class “?”| “Какие” “противоречия” “?” | “Какие” “дескрипторы” “?”.
text_question ::= boolean | expr_real | class.

Шаблоны команд и вопросов, а также шаблоны булевого типа, и связанные с ними действия будут описаны в других разделах этого документа.

Особым способом задаются новые слова, комментарии и вложенные комментарии. Они задаются с помощью шаблонов разметки текста.
Новым словом (или текстом в кавычках) является любая последовательность символов в кавычках или в квадратных скобках. Новым словом как параметром внутри шаблона может считаться любое одиночное слово.
Комментарий – текст, заключенный между %% и знаком перехода на другую строку.
Вложенный комментарий это текст, заключенный между открывающей скобкой вида /* и соответствующей ей закрывающей скобкой вида */.
Программа грамматического анализа выделяет комментарии на первых шагах работы и не рассматривает их при дальнейшей работе программы грамматического анализа.

2.2. Грамматический шаблон, управляющий порядком чтения шаблонов в шаблонном выражении

В существующей системе для управления грамматическим разбором используется шаблон скобочного вида:
23. «{@term}»/+ типа term.

В процессе грамматического разбора система должна вычислять тип шаблонного выражения. Для вызова этой функции используется шаблон:
24. «тип(@term)» (type (@term)/+, возвращающий type.

(R1) Вычисление типа выражения производится по следующему правилу:
• Если это выражение есть в существующей аппроксимации онтологии, то тип этого выражения есть наименьший тип, содержащий это выражение в качестве элемента.
• Если выражение имеет вид {t}, то тип({t}) = тип(t).
• В противном случае тип выражения равен типу самого верхнего шаблона этого выражения в дереве грамматического разбора этого выражения.

2.3. Шаблоны для задания вопросов о результатах грамматического анализа введенного шаблонного выражения

Для проверки правильности грамматического разбора шаблонного выражения к системе можно обратиться с вопросом о представлении этого выражения в виде дерева.

Дерево терма можно представить в нескольких видах:
• с использованием синтаксических скобок {};
• в префиксном виде: вначале идет текст шаблона, а затем в скобках термы его аргументов;
• двумерное изображение: слова шаблона по вертикали с одинаковым отступом, а аргументы по вертикали с большим отступом;
• в виде XML текста.
Шаблоны этих вопросов следует иметь в системе. Один их них может иметь вид:
25. «Грамматический разбор @term ?» (grammatical tree of @string ?/-) и быть типа question.

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

2.4. Шаблоны для создания новых индивидов и переменных существующих типов

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

Основной шаблон этого раздела имеет следующий вид:
26. «Создать элемент @New типа @type»/- (Create @type @New /-).
Все элементы, созданные с помощью этого шаблона считаются разными. Поэтому если в результате некоторых действий эти элементы оказываются эквивалентными, то это расценивается системой как противоречие. Если пользователь все-таки хочет такие элементы считать эквивалентными и устранить противоречие, то для этого пользователь должен воспользоваться шаблоном, который объявляет два выражения синонимичными.

С помощью шаблона создания новых элементов можно создать новый класс, например, выражением: «Создать элемент Person типа класс.». А затем ввести новый элемент введенного класса с использованием того же шаблона выражением вида: «Создать элемент Bob типа Person».

Замечание. Некоторые варианты на русском языке приведенных выше шаблонов несколько длинноваты. Поэтому в существующей системе под Windows используется несколько других шаблонов для ввода классов и элементов. Эти шаблоны имеют следующий вид:
«@New - область» для ввода нового класса;
«@List_New – области» для ввода нескольких классов;
"@New - элемент области @область" для создания элементов некоторого класса;
"@List_New - элементы области @область " для создания нескольких элементов некоторого класса;
"@term - @область" для задания принадлежности некоторого терма к некоторому классу.

Шаблоны для ввода переменных имеют тип результата "input_var". К этим шаблонам относится шаблон для ввода одной переменной:
27. "@переменная : @тип_переменной"/+
и шаблон для ввода нескольких переменных одного типа:
28. "@список_переменных : @тип_переменной"/+,
где переменная - это слово или набор слов в кавычках; переменные в списке отделяются запятой.

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

2.5. Шаблоны ввода соотношений (аксиом)

Основной способ ввести соотношение – это объявить равными два выражения, согласованные по типу. Это можно определить шаблоном
29. «@term1 = @term2»/+.
Условием выполнения этого шаблона является то, что тип одного из термов в этом равенстве должен совпадать или быть подтипом типа другого терма в этом равенстве.

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

Если нужно какое-то выражение сделать элементом некоторого типа, то для этого можно воспользоваться шаблоном:
30. «@term – элемент типа @type» (@term is a element of @type/-).
Для успешного выполнения этой команды необходимо выполнение условия согласованности исходного типа выражения и типа, элементом которого хотят сделать это выражение.
При выполнении действия этого шаблона, по сути, выполняется действие element(@term, @type) = True,
приравнивающее терм True терму element(@term, @type), в котором вместо переменных @term и @type подставлены соответствующие термы, определенные пользователем при использовании этого шаблона.

Если нужно сделать несколько выражений элементами некоторого типа, то используется шаблон:
31. «@list_term – элементы типа @type»/+ (@list_term are elements of @type/-).

Для того, чтобы сделать тип Type1 подтипом типа Type2 можно воспользоваться шаблоном:
32. «@Type1 – подобласть @Type2»/+ (@Type1 is subtype of @Type2 /-).
Более короткий шаблон для этого действия имеет вид:
«@Type1 < @Type2»/+.
Действие, связанное с этим шаблоном, имеет вид:
subtype(@Type1 , @Type2)= True,
которое в аппроксимации онтологии делает равными термы subtype(@Type1 , @Type2) и True, где вместо переменных @Type1 и @Type2, подставляются термы, которые были подставлены вместо переменных при употреблении этого шаблона.

2.6. Шаблоны формирования вопросов к миру текущей онтологии

Как упоминалось в подразделе, где описывались синтаксические типы, шаблон вопроса (типа question) может иметь вид: "@text_question ?" и "Чему равно @выражение?". Другие полезные шаблоны, действие которых отображает текущее состояние онтологии, имеют вид:

33. "Элементы области @Области?"/+ (elements of type @type ?/-) – действие этого шаблона выдает все известные в аппроксимации элементы требуемой области.
34. "Подобласти области @Область?"/+ (subtypes of type @type ?|/-) – действие этого шаблона выдает все известные в аппроксимации подобласти (подтипы) требуемой области.
35. "Максимальные подобласти @Области?"/+ (Maximal subtypes of type @type ?/-) – действие этого шаблона выдает все известные в аппроксимации максимальные подобласти (подтипы) требуемой области.

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

В общем случае нужны шаблоны вопросов для просмотра всех частей аппроксимации: "Противоречия?", "Дескрипторы?", "Правила переписывания?", "Введенные шаблоны?", "Используемые онтологии?" …
В качестве дополнительного сервиса можно использовать вывод внутреннего представления онтологии в виде файлов в определенном стандарте (XML, OWL) и отображения содержания этих файлов в некоторых графических представлениях.

2.7. Шаблоны для выражения формул и проверки их истинности во внутреннем представлении онтологии

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

36. "@termA = = @termB"/+ для проверки равенства выражений в онтологии;
37. "@term<>@term"/+ известно, что не равно в онтологии;
38. "@Область2 < @Область1 "/+ для проверки является ли Область2 подобластью Область1;
39. "@Выр принадлежит @Обл"/+ (@term is a @type)/-) для проверки является ли терм элементом данного типа.

Действия, связанные с этими шаблонами, вычисляют входящие в них выражения, при этом может измениться аппроксимация онтологии, а затем производится проверка выполнения условия.
В некоторых случаях требуется проверка условий в существующей аппроксимации. Для этого нужно ввести аналогичные шаблоны с указанием их выполнения в существующей аппроксимации.
40. "@termA = = @termB in the approx"/- для проверки равенства выражений в существующей аппроксимации онтологии;
41. "@term<>@term in the approx "/- известно, что не равно в существующей аппроксимации онтологии;
42. "@Область2 < @Область1 in the approx"/- для проверки является ли Область2 подобластью Область1 в аппроксимации;
43. "@Выр принадлежит @Обл in the approx"/- (@term is a @type in the approx /-) для проверки является ли терм элементом данного типа в аппроксимации.

2.8.Шаблоны использования других онтологий в текущей онтологии

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

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

(?) Сейчас название онтологии и название среды онтологии отражается в базе данных онтологии, но не отражается в тексте онтологии. Может быть, это неправильно: название онтологии и название среды нужно поместить и в текст, для цельности текста. При этом текст должен иметь XML-разметку.

Простейший способ использования онтологии аналогичен операции include файла текста программы в программировании. В этом случае, в тексте текущей онтологии помещается шаблон типа команда вида:
44. "Используем текст онтологии [@Имя_онтологии]"/+ (Include ontology text [@Name]/-) для ссылки на текст другой онтологии ( с учетом версии).
Действием этого шаблона является получение текста онтологии по ее названию и выполнение этого текста в текущей онтологии. В результате изменится состояние аппроксимации текущей онтологии. В ней будут сформированы все объекты, соотношения и правила, определенные в тексте онтологии с указанным названием.

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

Другой способ использования онтологий – это использовать не текст онтологии, а уже построенную по тексту аппроксимацию онтологии. В этом случае происходит объединение аппроксимаций текущей онтологии и используемой онтологии. Это объединение становится новым состоянием текущей онтологии. Заметим, что алгоритм объединения аппроксимаций онтологий – это не просто объединение соответствующих множеств фактов, но и объединение множеств соотношений. А это может вызвать процесс факторизации на множестве объединения фактов при построении аппроксимации текущей онтологии с использованием аппроксимации другой онтологии. Шаблон такого использования онтологий может иметь вид:
45. "Используем онтологию [@Имя_онтологии]"/+ (Load ontology [@Name]/-).

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

Действие следующего шаблона:
46. "@Имя - объект понятия [@Имя_онтологии]"/+
приводит к созданию объекта с введенным именем и со структурой, описанной в другой онтологии. При этом в текущей онтологии можно создавать несколько объектов одного типа, но с разными именами.

(R3) Действие шаблона, строящего объект, состоит в следующем:
• создается в текущей онтологии тип с именем онтологии, подставленным в шаблон вместо переменной Имя_онтологии (если он еще не был создан), и создается элемент этого типа с именем, подставленным в шаблон вместо переменной Имя;
• внутри текущей онтологии создаются все элементы, созданные в онтологии, соответствующей онтологии Имя_онтологии (или используемые в ней, как унаследованные), с префиксом «имя_объекта's»¬ и вводятся все соотношения между ними, которые определены в используемой онтологии (это действие лучше реализовать вливанием аппроксимации используемой онтологии в аппроксимацию текущей онтологии).
Пример использования этого шаблона можно найти в онтологии «Равномерное движение» и задачах на равномерное движение.

Для создания отношения наследования между онтологиями используется следующий шаблон:
47. "Наследуем понятие [@Имя_онтологии]"/-.
Текущая онтология, в которой используется этот шаблон, делается наследником онтологии с именем, которое подставляется вместо переменной Имя_понятия.

Другой вариант этого шаблона: «Это [@Имя_онтологии]»/-.
Этот шаблон означает не только использование в текущей онтологии другой онтологии, указанной в имени, но и наследование ее определений. Наследуемые конструкции используются при создании объектов онтологии (см. шаблон 46).
Замечание. Этот шаблон не реализован и не опробован. Требуется дополнительное продумывание для множественного наследования и управления наследованием (например, выделение среди свойств существенных: «дом-лодка», «лодка-дом»).

2.9. Шаблоны для настройки языка текущей онтологии и его расширения

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

При вводе шаблона общего вида пользователи должны указать вид шаблона, типы переменных в определяемом шаблоне, тип результата действия шаблона и само действие шаблона. При необходимости пользователи могут определить условие применения определяемого шаблона. Для ввода шаблонов пользователями в ядре системы имеется специальный шаблон:
,b>48. "Введем шаблон [@текст_шаблона]
с переменными: [@список_переменных]
и переменной результата [@переменная : Tип ] ;
Пояснения: [@текст_пояснения]
Условие применения шаблона: [@список_условий]
Действие шаблона: [@действие]
Тип доступа шаблона: [@внешний_наследуемый_локальный]"/+.

Эта подробная конструкция применяется для введения нового шаблона. При этом действие этого шаблона описывается на языке шаблонных выражений с использованием шаблонов, видимых из текущей онтологии. Тип доступа определяет видимость введенного шаблона. Локальный шаблон видим только в текущей онтологии. Наследуемый шаблон видим из онтологий, использующих онтологию, где этот шаблон был введен. Внешний шаблон видим из других онтологий в соответствии с принципами видимости шаблонов.

Для удаления шаблонов из списка видимых для данной онтологии используется шаблон:
49. "Удалить шаблон [@текст_шаблона]
с переменными типа: [@список_переменных]
и типом результата @Тип"/+.

Этот шаблон не удаляет шаблон, а делает его невидимым из текущей онтологии.

Для замены одного шаблона на другой используется шаблон:
50. "Заменить шаблон [@текст_шаблона]
с переменными: [@список_переменных]
и типом результата @тип
на [@Новый_шаблон_с_теми_же_переменными]"/+.

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

Чтобы сделать синонимами два уже ранее введенных термина используется шаблон:
51. "@термин1 - синоним @термин2"/+.
Заметим, что приравнивание этих терминов привело бы к противоречию, так как различные термины по определению считаются неравными.

Для того, чтобы ввести новый термин синонимичный старому можно ипользовать шаблон:
52. "[@текст_синонима] - новый синоним @термин"/+.
С помощью этого шаблона можно вводить новые синонимы для терминов ядра системы. Например, введя выражение:
" [<] [>]" - новый синоним "[/*] [*/]",
получим новые открывающую и закрывающую скобки для вложенных комментариев. А введя выражение:
["“" "”"] - новый синоним ["[" "]"],
в системе построится синоним кавычек в виде “”.

Введения синонимичного шаблона для какого-либо шаблона с переменными делается с использованием шаблона:
53. "Ввести синоним шаблона [@текст_шаблона]
с переменными: [@список_переменных]
и типом результата @тип
на [@Новый_шаблон_с_теми_же_переменными]
и пояснением [@текст_пояснения] "/+.

2.10. Шаблоны для определения новых действий шаблонов и привязки к ним программ, написанных на языке шаблонных выражений или на других языках

В этом разделе должны быть шаблоны для ввода шаблонов, действие которых вызывает выполнение внешних программ (dll, exe, com, java) для работы с текущей онтологией, словарями и отображения результатов. Для этого онтологии и словари должны быть оформлены как объекты со стандартизованным интерфейсом.

Это направление работы требует более тщательного продумывания.

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

В настоящее время вычисление по внутреннему представлению онтологии
производится в двух видах: по уже построенной аппроксимации для проверки условий, например, в задачах грамматического анализа, и с расширением аппроксимации при редактировании онтологий и построения ответов на вопросы.

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

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

Для определения правил переписывания в онтологиях в ядре системы имеются шаблоны:
54. "Для всех [@Список_переменных ]
[ @Term ] => [ @Term ] ("@Название правила")"/+.

55. "Для всех[ @Список_переменных ],
если[ @условие ], то
[ @Term ] => [ @Term ] ("@Название правила"),
если, кроме того,[@Post_condition] "/+.

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

3. Онтология ядра

Как было отмечено ранее, все элементы онтологии задаются термами – правильно построенными выражениями из имен операций (операндов) и констант. Внутри системы термы могут представляться уникальными идентификаторами или ссылками. Внешнее представление терма в префиксной форме имеет вид: F(t1, …, tn), где F – имя операции (операнд), а t1, …, tn - термы аргументы, перечисленные через запятую. Константы (операнды без аргументов) также являются термами.
Все термы делятся по типам. Типы термов могут строиться рекурсивно (например, как элементы в XML) для этого в языке ядра должны быть предусмотрены особые шаблоны (например такие, как в Visual Prolog). Каждый операнд имеет типы аргументов и тип результата. В частности, для любого типа можно построить тип список элементов этого типа с операциями выделения головы и хвоста списка, а также построения пустого списка.

В ядре имеются следующие термы:
Теrм, Туре, NewName, Boolean, True, False, Descriptor, ListDescriptor SimpleTerm, Class, Element, Sub, IdTemlate, Relation
Каждый дескриптор представляется некоторым термом.

Это раздел нужно дописать и отредактировать.