Примеры алгебр
В этом разделе описаваются примеры онтологий, описывающие алгебры. Каждая алгебра представляетя в виде набора множеств и набора операций, действующих на них.
Рассмотрим пример онтологии "Булева алгебра":
*************************************************************
bool -область.
f,t -элементы области bool.
AND: bool x bool ->bool.
OR : bool x bool -> bool.
NOT : bool ->bool.
/* Таблица действия логических операций */
NOT(f)=t. NOT(t)=f.
AND(f; f)=f. AND(f; t)=f. AND(t; f)=f. AND(t; t)=t.
OR(f; f)=f. OR(f; t)=t. OR(t; f)=t. OR(t; t)=t.
Введем шаблон "@u & @v"
с переменными:
"u : bool; v : bool"
и переменной результата " w:bool " ;
Пояснения: [операция конъюнкции]
Условие применения шаблона:
[]
Действие шаблона:
[w=AND(u;v)]
Тип доступа шаблона: [внешний].
Введем шаблон "@u V @v"
с переменными:
"u : bool; v : bool"
и переменной результата " w:bool " ;
Пояснения: [операция дизъюнкции]
Условие применения шаблона:
[]
Действие шаблона:
[w=OR(u;v)]
Тип доступа шаблона: [внешний].
Введем шаблон " ~@u "
с переменными:
"u : bool"
и переменной результата " w:bool " ;
Пояснения: [операция отрицания]
Условие применения шаблона:
[]
Действие шаблона:
[w=NOT(u)]
Тип доступа шаблона: [внешний].
***************************************************************
В данном примере вводятся булевы операции в префикном виде, как имена функций. В инфиксном виде операции задаются в виде шаблонов:
"~@u", "@u v @v", "@u & @v".
Заметим, что для инфиксных операций в этом примере не заданы приоритеты и все операции выполняются слева-направо. Чтобы в запросе задать нужную последовательность выполнения операций нужно использовать скобки.
Примерами запросов к этой онтологии являются выражения:
"Чему равно t v t&f?",
"Чему равно t v (t&f)?".
Если вы хотите, чтобы в выражениях сначала выполнялась операция ~, затем &, а затем v, то в онтологии нужно ввести дополнительные грамматические типы булевыж выражений и использовать их при определении шаблонов операций. Это реализовано в следующем примере онтологии "boolean".
**************************************************************************
/********************************************************************/
/* Определения встроенного типа даных boolean */
/********************************************************************/
False,True -элементы области boolean.
AND: boolean x boolean ->boolean.
OR : boolean x boolean -> boolean.
NOT : boolean ->boolean.
/* Таблица действия логических операций */
NOT(False)=True. NOT(True)=False.
AND(False; False)=False. AND(False; True)=False.
AND(True; False)=False. AND(True; True)=True.
OR(False; False)=False. OR(False; True)=True.
OR(True; False)=True. OR(True; True)=True.
/*синтаксические типы*/
bool_expr-область.
diz_expr < bool_expr.
con_expr < diz_expr.
not_expr < con_expr.
s_bool_expr < not_expr.
boolean < s_bool_expr.
/******************************************************************/
/* Шаблоны инфиксной записи логических операций */
/******************************************************************/
Введем шаблон "@u & @v"
с переменными:
"u : con_expr; v : not_expr"
и переменной результата " w : con_expr " ;
Пояснения: [операция конъюнкции]
Условие применения шаблона:[]
Действие шаблона:
[w=AND(u;v)]
Тип доступа шаблона: [наследуемый].
Введем шаблон "@u V @v"
с переменными:
"u : diz_expr; v : con_expr"
и переменной результата " w : diz_expr " ;
Пояснения: [операция дизъюнкции]
Условие применения шаблона:[]
Действие шаблона:
[w=OR(u;v)]
Тип доступа шаблона: [наследуемый].
Введем шаблон " ~@u "
с переменными:
"u : not_expr"
и переменной результата " w:not_expr " ;
Пояснения: [операция отрицания]
Условие применения шаблона:[]
Действие шаблона:
[w=NOT(u)]
Тип доступа шаблона: [наследуемый].
Введем шаблон "( @u ) "
с переменными:
"u : bool_expr"
и переменной результата " w:s_bool_expr " ;
Пояснения: [операция отрицания]
Условие применения шаблона:[]
Действие шаблона:
[w=u]
Тип доступа шаблона: [наследуемый].
**************************************************************************
Примером вопроса к данной онтологии является выражение:
"True v ~False&False == True?".
(Ответ: "Да".)