Вначале несколько определений о
связях между понятиями.
Понятие – это модуль (фрагмент), в котором вводятся некоторые определения, имена областей (доменов), элементов этих областей, подобластей, отображений (операций) между областями и соотношения между ними. Для управления вычислениями в понятии могут вводиться правила переписывания. Для формирования пользовательского языка в понятии могут вводиться языковые конструкции пользователя и правила грамматики.
Библиотека понятий или онтология – это база данных связанных между собой понятий. Каждое понятие имеет имя, текст и внутреннее представление.
Имя идентифицирует понятие.
Текст понятия строится на языке системы из шаблонов языка, которые введены в ядре системы или определены пользователями в других понятиях.
Внутреннее представление понятия строится системой по тексту понятия. Оно необходимо для интерпретации предложений текста понятий, проверки правильности построения предложений и для построения ответов на вопросы по теме представленного понятия.
Пользователь
может выбрать и открыть доступные ему онтологии из пункта меню «База
понятий»/«Открыть другую БП (базу понятий)». Пользователь
может также скопировать любую открытую им онтологию (включая ядерную) в любую
папку, отличную от системной (где лежит ядерная онтология), из пункта меню
«База понятий»/ «Сохранить БП как..». Далее пользователь может добавлять в
онтологию новые понятия и удалять старые, формируя собственную онтологию (базу
понятий).
Текущее понятие (активное) – это то понятие, которое открыто пользователем как текущее, формируемое в текущий момент. Только к текущему понятию можно обращаются с вопросом.
Сделать текущим понятие, которое есть в данной базе понятий, можно открыв окно папок понятий из пункта меню «База понятий»/ «Показать папки понятий», выбрав в списке имен нужное понятие и нажав кнопку «Сделать текущим». Работа с текущим понятием осуществляется из пунктов меню «Текущее понятие» и «Команда».
Понятие может быть также загружено в систему в качестве среды, и пользователь может создавать новые понятия в среде загруженного понятия. Соответственно, отношение быть средой является отношением иерархии. Языковые средства (кроме тех, которые были объявлены локальными) и определения, введенные в понятии-среде, являются доступными для всех понятий, разработанных в этой среде.
Кроме того, понятия могут использовать другие понятия. Использование другого понятия может быть определено в текущем понятии специальными командами-шаблонами, например, «Используем понятие @Имя_понятия» или «Используем текст понятия @Имя_понятия». Другой способ загрузки в текущее понятие другого понятия обратиться к нему через его внешний интерфейс понятия, определенный в виде набора шаблонов с внешним типом доступа. Языковые средства (кроме тех, которые были объявлены локальными) и определения, введенные в используемом понятии, становятся доступными в текущем понятии. Отношение использования между понятиями является транзитивным. Отношение быть средой является частным случаем отношения использования.
Шаблоны языка системы – это последовательность слов, спецзнаков и переменных. Шаблон без переменных (последовательность слов и спецзнаков) называется термином. Некоторые шаблоны введены в ядре системы. Они составляют первоначальный язык системы. Кроме того, шаблоны могут вводиться пользователями в понятиях и служат для формирования пользовательского языка системы.
Для просмотра доступных шаблонов и терминов онтологии в системе используется пункт главного меню «Словарь».
Шаблоны–термины могут вводиться пользователем с помощью системных шаблонов с аргументами типа «new». Примерами таких шаблонов являются некоторые шаблоны в папке шаблонов «Команды»/«Создание областей элементов и отображений» или в папке шаблонов «Команды»/«Ввод переменных». Это шаблоны: «@имя - область», «@имя - отображение», «@A_new - подобласть области @B», «@новый_элемент - элемент области @область», «@переменная : @тип_переменной» и т.д.
Выражение типа
«new» - это либо новое слово, либо любой текст в
кавычках или в квадратных скобках.
Использование некоторых из этих шаблон можно найти, например, в базе понятий «Examples» в папке «Папки понятий»/«Особые примеры»/«Простой пример» в понятии «цвет».
Пример из базы понятий «Examples».
Текст понятия из «Папки понятий»/«Особые примеры»/«Простой пример»/ «цвет»
[Цвета] - область.
"теплые цвета"
< цвета.
" холодные цвета"
< цвета.
"Красный", "желтый" -
элементы области теплые цвета.
Пусть зеленый, синий, белый - холодные цвета.
Теплые цвета - подобласть
области цвета.
Холодные цвета < цвета.
/* Примеры вопросов к понятию:
Элементы области цвета?
Желтый -цвета?
Оранжевый -цвета?
Холодные цвета< цвета?
Равны ли желтый и оранжевый?
*/.
Заметим, что в приведенном примере текст, заключенный между знаками «/*» и «*/» - это комментарий, игнорируемый системой, но используемый для пояснений. В ядре системы комментарием является также текст от знака %% до конца строки.
Новые термины могут быть введены и с помощью шаблона равенства «@Новый_термин =@Старый_термин» или «@Старый_термин = @Новый_термин». При этом приравненные термины становятся синонимами.
Пример из базы понятий «Examples».
Текст понятия из «Папки понятий»/«Особые примеры»/«Введение шаблонов»/
«Создание синонимов»/ «Синонимы для цвета»
Используем понятие "цвет".
оранжевый=желтый.
%% Новый термин становится главным
синонимом.
%% Пример вопроса: Чему равно желтый?
.
Новые термины можно вводить с помощью шаблонов введения синонимов:
«"@текст_синонима" - новый синоним @термин»,
«"@текст_синонима" - новый синоним @термина [@комментарий]».
Пример из базы понятий «Examples».
Текст понятия из «Папки понятий»/«Особые примеры»/«Введение шаблонов»/
«Создание синонимов»/ «Синонимы для цвета1»
Используем понятие "цвет".
Апельсиновый - новый синоним желтый [Ярко желтый].
оранжевый - элемент области цвета.
желтый - синоним оранжевый .
оранжевый=желтый.
%% Если желтый
не сделать синонимом оранжевого, но написать равенство,
%% то при построении внутреннего
представления по тексту понятия
%% система спросит: сделать ли термины синонимами,
%% и, в случае утвердительного ответа,
сама добавит предложение о синонимии.
/* Примеры вопросов:
Чему
равно желтый?
Элементы
области цвета?
*/
.
С помощью шаблонов введения синонимии пользователь может изменить системные шаблоны для кавычек и выделения комментариев.
Пример из базы понятий «Examples».
Текст понятия из «Папки понятий»/«Особые примеры»/«Комментарии»/
«Пример определения новых скобок комментария»
/* Это комментарий */
/* Введем новые скобки для комментария: */
" < >" - новый синоним
"[/*] [*/]".
< Это комментарий в новых скобках>.
<*******************************************************************>
%% Это комментарий.
%% Введем новые скобки для комментария этого
типа:
"% [
]" - новый синоним "[/*] [*/]".
% Это комментарий в новых обозначениях
от знака процента до конца строки
.
%********************************************************************
% *
% C помощью шаблона синонимии
можно изменить скобки для кавычек *
%
*
%********************************************************************
["//" "//"]
- новый синоним ["[" "]"]. % Одинарные / будут конфликтовать
%со скобками комментария /* */
//два слова// - область. %
Проверка новых кавычек
.
Для введения нового термина можно также воспользоваться шаблоном:
Заменить термин "@Термин" типа
@Тип
на "@Новый_термин"
[@текст_пояснения],
который находится в «Папки шаблонов»/ «Управление шаблонами». Действие этого шаблона состоит в построении синонима термина и удаление самого термина из текущего понятия (внешние шаблоны не удаляются, а становятся недоступными из текущего понятия).
При вводе шаблона общего вида пользователи указывают вид шаблона, типы переменных в определяемом шаблоне, тип результата действия шаблона и само действие шаблона. При необходимости пользователи могут определить условие применения определяемого шаблона. Для ввода шаблонов пользователями имеется специальный шаблон в системе в паке шаблонов «Управление шаблонами» вида:
Введем шаблон "@текст_шаблона"
с переменными:
"@список_переменных"
и переменной результата " @переменная_:_Тип
" ;
Пояснения: [@текст_пояснения]
Условие применения шаблона:
[@список_условий]
Действие шаблона:
[@действие]
Тип доступа шаблона:[@внешний_наследуемый_локальный]
Тип доступа шаблона служит для управления видимостью шаблона. Локальный тип доступа означает, что вводимый шаблон будет видим только из понятия, в котором этот шаблон вводится.
Приведем
пример ввода нового шаблона Sum(@x1,@x2) для сложения чисел. Это делается с помощью выражения:
Введем шаблон " Sum(@x1, @x2)"
с переменными:
"x1, x2 : real"
и переменной результата " z: real";
Пояснения: [Сумма двух чисел, но не выражений.]
Условие применения шаблона:
[]
Действие шаблона:
[z=x1+x2]
Тип доступа шаблона: [локальный].
Теперь, если вы введете в окне «Команда или вопрос» выражение «Sum(3,5)?» система поймет вас и выдаст в ответе число 8. Однако, если вы зададите выражение «Sum(3,5*2)?» система выдаст сообщение об ошибке, так как выражение 5*2 имеет тип не real, а real_выражение.
Если
вы хотите, чтобы в качестве аргументов нового шаблона можно было бы
использовать не только числа, а произвольные числовые выражения, нужно
отредактировать (в главном меню выбрать пункт «Текущее
понятие»/«Редактировать») предыдущий текст определения шаблона в виде:
Введем шаблон " Sum(@x1,@x2)"
с переменными:
"x1, x2 : real_выражение"
и переменной результата " z: real " ;
Пояснения: [Сумма двух чисел, но не выражений]
Условие применения шаблона:
[]
Действие шаблона:
[z=(x1)+(x2)]
Тип доступа шаблона:[локальный].
/* Пример вопроса: 3+Sum(3*2,
3^2)/3? */.
и запустить в главном меню пункт «Текущее понятие»/«Построить все».
Теперь система сможет производить любые арифметические вычисления с использованием нового шаблона. Например, если в окне «Команда или вопрос» вы введете выражение «3+Sum(3*2, 3^2)/3?», то система правильно вычислит это выражение. Данный пример можно найти в базе понятий «Examples» в папке «Папки понятий»/«Особые примеры»/«Введение шаблонов» в понятии «Пример правильного ввода шаблона для сложения».
Введем пример
шаблона с условием применения. В качестве примера введем новый шаблон для
операции деления чисел в виде:
Пример из базы понятий «Examples».
Текст понятия из «Папки понятий»/«Особые примеры»/«Введение шаблонов»/
«Пример условного шаблона деления »
Введем шаблон " @x1 div @x2"
с переменными:
"x1: слагаемое; x2 : степенное real_выражение "
и переменной результата "z: слагаемое";
Пояснения: [Деление числа на число, неравное 0]
Условие применения шаблона:
[ ~x2==0]
Действие шаблона:
[z=(x1)/(x2)]
Тип доступа шаблона: [локальный].
В этом примере условием применения шаблона является неравенство нулю первого аргумента.
Вводимый шаблон может использоваться в определении действия самого шаблона, т.е. допустимо рекурсивное определение действия шаблона. Пример такого определения используется в понятии «Факториал» (см. онтологию «Examples», папку понятий «Особые примеры»/«Введение шаблонов»/ «Рекурсивные определения»):
/* Определение понятия факториал*/
Введем шаблон "fact(@n,@i,@y)"
с переменными:
"n,i,y :real_выражение"
и переменной результата " z:real_выражение " ;
Пояснения: [Вычисляет факториал]
Условие применения шаблона:
[]
Действие шаблона:
[
if n==i then z=y else
z=fact(n,i+1,(y)*(i+1))
]
Тип доступа шаблона:[локальный].
Введем шаблон "@n!"
с переменными:
"n :real"
и переменной результата " z:real " ;
Пояснения: [Вычисляет факториал]
Условие применения шаблона:
[]
Действие шаблона:
[
z=fact(n,1,1)
]
Тип доступа шаблона:[внешний].
Более короткий вариант определения факториала имеет вид:
Введем шаблон "factorial(@n)"
с переменными:
"n :real_выражение"
и переменной результата " z:real_выражение " ;
Пояснения: [Вычисляет факториал]
Условие применения шаблона:
[]
Действие шаблона:
[
if n==1 then z=1 else
z=(factorial(n-1))*(n)
]
Тип доступа шаблона:[внешний].
Дополнительные скобки в выражении (factorial(n-1))*(n) введены для того, чтобы можно было применить шаблон умножения @*@ к factorial(n-1) и n, которые имеют тип real_выражение.
Удаление шаблонов можно выполнить с помощью шаблона:
Удалить шаблон "@текст_шаблона"
с переменными типа:
"@список_переменных"
и типом результата @Тип.
Например, для удаления шаблона factorial(@) можно ввести командную строку в окне «Команда или вопрос» вида:
Удалить шаблон " factorial(@k)"
с переменными типа:
"k : real"
и типом результата real.
Эта команда на самом деле не удаляет шаблон из системы (если только текущим понятием не является то, в котором это понятие было введено), а делает его невидимым из текущего понятия. После выполнения этой команды она будет отражена в тексте текущего понятия, и этот шаблон будет невидим из текущего понятия при вводе последующих команд.
Тот же результат получается, если в меню «Словари» выбрать словарь, а в словаре выбрать шаблон
factorial(@n) и нажать кнопку удалить.
Для замены (редактирования) шаблона можно воспользоваться шаблоном:
Заменить шаблон "@текст_шаблона"
с переменными:
"@список_переменных"
и типом результата @тип
на [@Новый_шаблон_с_теми_же_переменными]
и пояснением [@текст_пояснения].
При этом в новом шаблоне должны быть те же переменные, но могут быть в другом порядке. Этот шаблон производит удаление старого шаблона (в том же смысле, как было объяснено выше) и вводит новый шаблон с тем же действием. Примеры использования этого шаблона приведены в онтологии «Examples» в папке понятий «Введение шаблонов»/ «Примеры создания среды с измененными шаблонами».
Принципы видимости отражены на рис.1 и могут быть перечислены в следующем виде.
1. Из текущего понятия видны все термины и шаблоны, введенные в этом понятии и не удаленные в последующих предложениях.
2. Из текущего понятия видны все термины и шаблоны (за исключением тех, которые были объявлены как локальные), введенные в понятиях, используемых в текущем понятии, и не удаленные в последующих предложениях.
3. Шаблоны, определенные как внешние, видны из текущего понятия только те, которые введены в понятиях, построенных в средах, используемых в текущем понятии.
4. При удалении шаблонов, не введенных в текущем понятии, шаблоны не удаляются, а становятся невидимыми из текущего понятия.
Системные шаблоны введены в ядре системы, которое является частью среды для любого понятия. Поэтому шаблон ядра системы виден из любого текущего понятия, если только в самом текущем понятии или в его среде (или части среды) не удален (или заменен) этот шаблон.
Для перевода системных шаблонов на английский, французский или немецкий языки можно, например, построить понятия в среде ядра системы с именами «English», «French» или «German», в которых переводятся на соответствующий язык системные шаблоны. Далее, используя построенные понятия в качестве среды, появляется возможность работать с системными шаблонами на разных языках. Если потребуется в некотором понятии работать с системными шаблонами на двух языках, например английском и французском, одновременно, то в это понятие (или его среду) можно подгрузить понятия «English»и «French», и тогда это станет возможным.
Объявление
понятий в качестве сред, может использоваться для организации разделов
онтологий со своими вариантами понятий и шаблонов языка. Так, в среде ядра
системы можно построить понятия «Алгебра», «Механика», «Системные примеры», «Бениаминов», которые будут содержать лишь тексты
комментариев. Если эти понятия использовать в качестве сред для последующих
понятий, то мы получим соответственно разделы понятия алгебры, механики, системных
примеров, Бениаминова, и шаблоны, введенные в одном
разделе, не будут видны из понятий другого раздела. С другой стороны, внешние
шаблоны, введенные в понятиях одного раздела видны из понятий этого же раздела.
Если в текущем понятии требуется открыть доступ к шаблонам некоторого раздела,
например алгебры, то, добавив команду «Используем понятие [Алгебра]», из
текущего понятия открывается доступ к внешним шаблонам, введенным в понятиях
раздела «Алгебра».
В этом разделе описывается, что происходит при выполнении команды сделать некоторое понятие текущим, при сохранении текущего понятия, а также при загрузке другого понятия в текущее при его использовании.
При выполнении команды сделать некоторое понятие текущим, текст этого понятия открывается в специальном окне текущего понятия, и, кроме того, в оперативную память загружается внутреннее представления текста понятия для быстрого построения ответов на вопросы.
Из текущего понятия, как было объяснено в предыдущем разделе, видны не все шаблоны языка, а только те, которые составляют язык контекста текущего понятия. Пользуясь этими шаблонами в специальном окне «Новая команда или вопрос» пользователь системы может сформировать текст команды или вопроса и запустить процесс обработки сформированного текста.
При
обработке текста команды или вопроса запускается программа грамматического
анализа, которая по доступным из текущего понятия шаблонам языка и отношения
между типами во внутреннем представлении понятия строит терм текста. Далее терм
текста обрабатывается программой вычисления терма, которая последовательно
производит вычисления по дереву терма, в вершинах которого стоят идентификаторы
шаблонов.
При вычислении выражения, содержащего внешний шаблон, в текущее понятие загружается (если еще было не загружено) понятие, в котором этот шаблон был введен. При вычислении выражения, содержащего шаблон с загруженным в текущее понятие описанием его действия, выполняется действие шаблона в соответствии с его определением. При этом если тип всего выражения является вопросом, то после получения ответа на вопрос и его отображения в окне «Ответ на вопрос» происходит откат к состоянию текущего понятия до построения ответа на вопрос. Если тип обрабатываемого выражения – предложение, то это предложение вносится в текст текущего понятия и сохраняется новое состояние внутреннего представления текущего понятия в оперативной памяти (но не в базе понятий).
Для сохранения нового состояния (новой версии) текущего понятия в базе понятий пользователь должен выбрать сохранения текущего понятия в главном меню «Текущее понятие»/«Сохранить» или «Сохранить как». Если сохраняется новая версия понятия, то кроме сохранения самого понятия в базе понятий из словаря внешних шаблонов удаляются внешние шаблоны, введенные в прежней версии понятия, и сохраняются внешние шаблоны, введенные в новой версии.
Если
для вычисляемого шаблона действия
шаблона не определено, и вычисляемого терма нет в аппроксимации, то в
результате вычисления внутреннее представление понятия пополняется вычисляемым
термом, и выполняются отождествления на термах внутреннего представления,
связанные с этим шаблоном.