Текущие знания о задаче заносятся во временную структуру, внешнее представление которой имеет вид, аналогичный нижеприведенному фрагменту. В броузере знаний можно выполнять просмотр структуры (рис. 1.). Априорные знания организованы аналогично.
(
"REL_6" "отрезки перпендикулярны_1" "?" "?" "FRG_1" "?"
"segment_1=FRG_12"
"segment_2=FRG_14"
"comm=высота C_C1 перпендикулярна стороне A_B"
)
(
"OBJ_15" "треугольник_2" "?" "?" "FRG_1" "?"
"point_1=OBJ_3" "point_2=OBJ_7" "point_3=OBJ_5"
"comm=треугольник A_A1_C" "tip=прямоугольный"
"why=REL_2"
"reason=сгенерирован"
)
(
"OBJ_16" "треугольник_3" "?" "?" "FRG_1" "?"
"point_1=OBJ_4" "point_2=OBJ_5"
"point_3=OBJ_10"
"comm=треугольник B_C_B1" "tip=прямоугольный"
"why=REL_2"
"reason=сгенерирован"
)
Фрагмент текста на ЯПЗ и его представление в редакторе знаний (полный текст см. ниже).
Рис. 1. Броузер текущих знаний.
Полный текст на ЯПЗ для задачи типа “треугольник”.
(
"FRG_0" "иерархия" "?" "?" "?" "?"
)
(
"FRG_1" "фрагмент_0" "?" "?" "0" "?"
)
(
"OBJ_2"
"треугольник_1"
"?" "?" "FRG_1" "?"
"point_1=OBJ_3" "point_2=OBJ_4"
"point_3=OBJ_5"
"side_1=OBJ_8" "side_2=FRG_11" "side_3=FRG_14"
"comm=треугольник A_B_C"
)
(
"OBJ_3" "точка_1" "?" "?" "FRG_1" "?"
"name=A" "part_of=OBJ_2"
"comm=вершина A треугольника A_B_C"
)
(
"OBJ_4" "точка_2" "?" "?" "FRG_1" "?"
"name=B" "part_of=OBJ_2"
"comm=вершина B треугольника A_B_C"
)
(
"OBJ_5" "точка_3" "?" "?" "FRG_1" "?"
"name=C" "part_of=OBJ_2"
"comm=вершина C треугольника A_B_C"
)
(
"OBJ_6" "отрезок_1"
"?"
"?" "FRG_1" "?"
"point_1=OBJ_3" "point_2=OBJ_7"
"comm=высота A_A1 треугольника A_B_C""
)
(
"OBJ_7" "точка_4" "?" "?" "FRG_1" "?"
"name=A1"
"comm=основание высоты A_A1 треугольника A_B_C"
)
(
"REL_1" "точка принадлежит отрезку_1"
"?" "?"
"FRG_1"
"?"
"point=OBJ_7"
"segment=OBJ_8"
"comm=основание высоты A_A1 принадлежит стороне B_C"
)
(
"OBJ_8" "отрезок_2"
"?"
"?" "FRG_1" "?"
"point_1=OBJ_4" "point_2=OBJ_5"
"comm=сторона B_C треугольника A_B_C"
)
(
"REL_2" "отрезки перпендикулярны_1" "?" "?" "FRG_1" "?"
"segment_1=OBJ_6"
"segment_2=OBJ_8"
"comm=высота A_A1 перпендикулярна стороне B_C"
)
(
"OBJ_9" "отрезок_3"
"?"
"?" "FRG_1" "?"
"point_1=OBJ_4" "point_2=FRG_10"
"comm=высота B_B1 треугольника A_B_C""
)
(
"OBJ_10" "точка_4" "?" "?" "FRG_1" "?"
"name=B1"
"comm=основание высоты B_B1 треугольника A_B_C"
)
(
"REL_3" "точка принадлежит отрезку_1" "?" "?" "FRG_1" "?"
"point=FRG_10"
"segment=FRG_11"
"comm=основание высоты B_B1 принадлежит стороне A_C"
)
(
"OBJ_11" "отрезок_4"
"?"
"?" "FRG_1" "?"
"point_1=OBJ_3" "point_2=OBJ_5"
"comm=сторона A_C треугольника A_B_C"
)
(
"REL_4" "отрезки перпендикулярны_1" "?" "?" "FRG_1" "?"
"segment_1=OBJ_9"
"segment_2=FRG_11"
"comm=высота B_B1 перпендикулярна стороне A_C"
)
(
"OBJ_12" "отрезок_5"
"?"
"?" "FRG_1" "?"
"point_1=OBJ_5" "point_2=FRG_13"
"comm=высота C_C1 треугольника A_B_C""
)
(
"OBJ_13" "точка_4" "?" "?" "FRG_1" "?"
"name=C1"
"comm=основание высоты C_C1 треугольника A_B_C"
)
(
"REL_5" "точка принадлежит отрезку_1" "?" "?" "FRG_1" "?"
"point=FRG_13"
"segment=FRG_14"
"comm=основание высоты C_C1 принадлежит стороне A_B"
)
(
"OBJ_14" "отрезок_6"
"?"
"?" "FRG_1" "?"
"point_1=OBJ_3" "point_2=OBJ_4"
"comm=сторона A_B треугольника A_B_C"
)
(
"REL_6" "отрезки перпендикулярны_1" "?" "?" "FRG_1" "?"
"segment_1=FRG_12"
"segment_2=FRG_14"
"comm=высота C_C1 перпендикулярна стороне A_B"
)
(
"OBJ_15" "треугольник_2"
"?"
"?" "FRG_1" "?"
"point_1=OBJ_3" "point_2=OBJ_7"
"point_3=OBJ_5"
"comm=треугольник A_A1_C" "tip=прямоугольный"
"why=REL_2"
"reason=сгенерирован"
)
(
"OBJ_16"
"треугольник_3"
"?" "?"
"FRG_1"
"?"
"point_1=OBJ_4" "point_2=OBJ_5"
"point_3=OBJ_10"
"comm=треугольник B_C_B1" "tip=прямоугольный"
"why=REL_2"
"reason=сгенерирован"
)
(
"OBJ_17" "отрезок_7"
"?"
"?" "FRG_1" "?"
"point_1=FRG_10" "point_2=OBJ_5"
"comm=сторона B1_C треугольника B_C_B1"
)
(
"OBJ_18" "угол_1" "?" "?" "FRG_1" "?"
"point_1=OBJ_3" "point_2=OBJ_5"
"point_3=OBJ_7"
"comm=угол треугольника A_A1_C между сторонами A1_C и C_A"
"reason=сгенерирован"
)
(
"OBJ_19" "угол_2" "?" "?" "FRG_1" "?"
"point_1=OBJ_4" "point_2=OBJ_5"
"point_3=OBJ_10"
"comm=угол треугольника B_C_B1 между сторонами B_C и C_B1"
"reason=сгенерирован"
)
(
"OBJ_20" "отрезок_7" "?" "?" "FRG_1" "?"
"point_1=OBJ_10" "point_2=OBJ_5"
"comm=сторона B1_C треугольника B_C_B1"
)
(
"REL_7" "углы равны_1" "?"
"?" "FRG_1" "?"
"src=RULE_1"
"status=верно"
"comm=общий угол треугольников"
)
(
"RULE_1" "равенство углов_1" "?"
"?" "FRG_1" "?"
"corner_1=OBJ_18"
"corner_2=OBJ_19"
"comm=углы равны, если составляющие их отрезки находятся в отношении <часть-целое>"
)
(
"REL_8" "треугольники подобны_1" "?" "?" "FRG_1" "?"
"src=RULE_2"
"status=верно"
"comm=прямоугольные треугольники с равным острым углом подобны"
)
(
"RULE_2" "подобие треугольников_1" "?" "?" "FRG_1" "?"
"triangle_1=OBJ_15"
"triangle_2=OBJ_16"
"comm=прямоугольные треугольники подобны, если у них есть одинаковый острый угол"
)
(
"REL_9" "пропорция отрезков_1" "?" "?" "FRG_1" "?"
"src=RULE_3"
"proportion=OBJ_
/ OBJ_ = OBJ_ / OBJ_ "
"status=верно"
"comm=пропорциональность сторон, содержащих равный угол (у подобных треугольников)"
"formula=A1_C /
A_C = B1_C / B_C"
)
(
"RULE_3" "пропорция сторон подобных
треугольников_1" "?" "?" "FRG_1" "?"
"side_1=OBJ_"
"side_2=OBJ_"
"side_3=OBJ_"
"side_4=OBJ_"
"direct=пропорциональность следует из подобия"
"comm=отношения сторон, содержащих равный угол, равны"
)
(
"REL_10" "пропорция отрезков_1" "?" "?" "FRG_1" "?"
"src=REL_9"
"proportion=OBJ_
/ OBJ_ = OBJ_ / OBJ_ "
"status=верно"
"comm=следствие свойства пропорции"
"formula=A1_C /
B1_C = A_C / B_C"
)
(
"REL_11" "треугольники подобны_1" "?" "?" "FRG_1" "?"
"src=RULE_4"
"status=верно"
"conform=REL_13"
"comm=треугольники с равным острым углом и пропорциональными сторонами подобны"
)
(
"REL_13" "соответствие_1" "?" "?" "FRG_1" "?"
"src=RULE_4"
"status=верно"
"assoc=REL_11"
"conform_1=OBJ_ соответствует OBJ_"
"conform_2=OBJ_ соответствует OBJ_"
"conform_3=OBJ_ соответствует OBJ_"
"conform_4=OBJ_ соответствует OBJ_"
"conform_5=OBJ_ соответствует OBJ_"
"conform_6=OBJ_ соответствует OBJ_"
"comm=соответствие сторон и углов подобных треугольников"
)
(
"RULE_4" "подобие треугольников с пропорциональными сторонами_1" "?" "?" "FRG_1" "?"
"side_1=OBJ_"
"side_2=OBJ_"
"side_3=OBJ_"
"side_4=OBJ_"
"direct=подобие следует из пропорциональности"
"comm="
)
(
"OBJ_21" "угол_3" "?" "?" "FRG_1" "?"
"point_1=OBJ_7" "point_2=OBJ_10"
"point_3=OBJ_5"
"comm=угол треугольника B1_A1_C между сторонами A1_B1 и C_B1"
"reason=сгенерирован"
)
(
"OBJ_22" "угол_4" "?" "?" "FRG_1" "?"
"point_1=OBJ_3" "point_2=OBJ_5"
"point_3=OBJ_4"
"comm=угол треугольника A_B_C между сторонами A_C и B_C"
"reason=сгенерирован"
)
(
"REL_12" "углы равны_1" "?" "?" "FRG_1" "?"
"src=RULE_5"
"status=верно"
"comm=равенство углов подобных треугольников"
)
(
"RULE_5" "равенство углов в подобных
треугольниках_1" "?" "?" "FRG_1" "?"
"src=REL_11"
"corner_1=OBJ_20"
"corner_2=OBJ_21"
"comm=углы равны, если есть соответствие в утверждении о подобии"
)
Примерный текст на ЯПЗ для задачи типа “вложенные фрагменты”.
(
"FRG_0" "иерархия" "?" "?" "?" "?"
)
(
"FRG_1" "фрагмент_0" "?" "?" "0" "?"
)
(
"FRG_2" "фрагмент_1" "?" "?" "0" "?"
)
(
"FRG_4" "фрагмент_3" "?" "?" "FRG_7" "?"
)
(
"OBJ_1" "фраза_1" "а, первая буква алфавитов на русской и латинской основе."
"set фраза_1" "FRG_7" "0" "src
= <БСЭ 1> "
)
(
"OBJ_19" "слово_1" "а" "set слово_1" "FRG_7" "0"
"src
= OBJ_1" "poz_beg = 1"
"poz_end = 1"
)
(
"FRG_5" "фрагмент_4"
"?"
"?" "FRG_7" "?"
)
(
"FRG_6" "фрагмент_5"
"?"
"?" "FRG_7" "?"
)
(
"FRG_7" "фрагмент_6"
"?"
"?" "FRG_9" "?"
)
(
"FRG_8" "фрагмент_7"
"?"
"?" "FRG_9" "?"
)
(
"FRG_9" "фрагмент_8"
"?" "?" "FRG_15" "?"
)
(
"FRG_10" "фрагмент_9"
"?"
"?" "FRG_15" "?"
)
(
"FRG_11" "фрагмент_10"
"?"
"?" "FRG_15" "?"
)
(
"FRG_12" "фрагмент_11"
"?"
"?" "FRG_14" "?"
)
(
"FRG_13" "фрагмент_12"
"?"
"?" "FRG_14" "?"
)
(
"FRG_14" "фрагмент_13"
"?"
"?" "FRG_15" "?"
)
(
"FRG_15" "фрагмент_14"
"?"
"?" "FRG_1" "?"
)
(
"FRG_16" "фрагмент_15"
"?"
"?" "FRG_8" "?"
)
(
"FRG_17" "фрагмент_16"
"?"
"?" "FRG_16" "?"
)
(
"FRG_18" "фрагмент_17" "?" "?" "FRG_16" "?"
)
Рис. 2. Часть дерева для задачи “вложенные фрагменты”
/****
фрагменты, задающие структуру в "чистом" виде! (типа чистых множеств)
( ( ( f3 f4 f5) f7 ) f9 f10 ( f11 f12 ) )
| | |____f6___| | |__f13____| |
| |____f8___________| |
|_____________________f14___________________|
Наполнение фрагментов объектами м.б. произвольным.
Резерв может задавать тип фрагмента, определяющий операции над принадлежащими
фрагменту объектами (множество, упорядоченное множество и т.п.).
Отношение вхождения фрагмента во фрагмент неявно (по умолчанию)
Другие отношения зависят от наполнения, например, эквиваленты для формул!
***/
Примерный текст на ЯПЗ для задачи типа “фраза на естественном языке”.
(
"OBJ_0" "иерархия" "?" "?" "?" "?"
)
(
"OBJ_1" "фраза_1" "а, первая буква алфавитов на русской и латинской основе."
"set фраза_1" "OBJ_21" "0" "src
= <БСЭ 1> "
)
(
"OBJ_2" "слово_1" "а" "set слово_1" "OBJ_21" "0"
"src
= OBJ_1" "poz_beg = 1"
"poz_end = 1"
)
(
"OBJ_3" "знак препинания_1" "," "set слово_1" "OBJ_21" "0"
"src
= OBJ_1" "poz_beg = 2"
"poz_end = 2"
)
(
"OBJ_4" "разделитель_1" " " "set слово_1" "OBJ_21" "0"
"src
= OBJ_1" "poz_beg = 3"
"poz_end =
3"
)
(
"OBJ_5" "слово_2" "первая" "set слово_1" "OBJ_21" "0"
"src
= OBJ_1" "poz_beg = 4"
"poz_end = 9"
)
(
"OBJ_6" "разделитель_2" " " "set слово_1" "OBJ_21" "0"
"src
= OBJ_1" "poz_beg = 10"
"poz_end = 10"
)
(
"OBJ_7" "слово_3" "буква" "set слово_1" "OBJ_21" "0"
"src
= OBJ_1" "poz_beg = 11"
"poz_end = 15"
)
(
"OBJ_8" "разделитель_3" " " "set слово_1" "OBJ_21" "0"
"src
= OBJ_1" "poz_beg = 16"
"poz_end = 16"
)
(
"OBJ_9" "слово_4"
"алфавитов" "set слово_1"
"OBJ_21" "0"
"src = OBJ_1"
"poz_beg = 17" "poz_end =
25"
)
(
"OBJ_10" "разделитель_4" " " "set слово_1" "OBJ_21" "0"
"src
= OBJ_1" "poz_beg = 26"
"poz_end = 26"
)
(
"OBJ_11" "слово_5" "на" "set слово_1" "OBJ_21" "0"
"src =
OBJ_1" "poz_beg
= 27" "poz_end
= 28"
)
(
"OBJ_12" "разделитель_5" " " "set слово_1" "OBJ_21" "0"
"src
= OBJ_1" "poz_beg = 29"
"poz_end = 29"
)
(
"OBJ_13" "слово_6" "русской" "set слово_1" "OBJ_21" "0"
"src
= OBJ_1" "poz_beg = 30"
"poz_end = 36"
)
(
"OBJ_14" "разделитель_6" " " "set слово_1" "OBJ_21" "0"
"src
= OBJ_1" "poz_beg = 37"
"poz_end = 37"
)
(
"OBJ_15" "слово_7" "и" "set слово_1" "OBJ_21" "0"
"src
= OBJ_1" "poz_beg = 38"
"poz_end = 38"
)
(
"OBJ_16" "разделитель_7" " " "set слово_1" "OBJ_21" "0"
"src
= OBJ_1" "poz_beg
= 39" "poz_end
= 39"
)
(
"OBJ_17" "слово_8" "латинской" "set слово_1" "OBJ_21" "0"
"src
= OBJ_1" "poz_beg = 40"
"poz_end = 48"
)
(
"OBJ_18" "разделитель_8" " " "set слово_1" "OBJ_21" "0"
"src
= OBJ_1" "poz_beg = 49"
"poz_end = 49"
)
(
"OBJ_19" "слово_8" "основе" "set слово_1" "OBJ_21" "0"
"src
= OBJ_1" "poz_beg = 50"
"poz_end = 50"
)
(
"OBJ_20" "разделитель_9" "." "set слово_1" "OBJ_21" "0"
"src
= OBJ_1" "poz_beg = 51"
"poz_end = 51"
)
(
"OBJ_21" "фрагмент_1" "?" "?" "0" "?"
)
(
"OBJ_22" "фрагмент_2" "?" "?" "0" "?"
)
(
"OBJ_100" "последовательность_1" "алфавитов" "OBJ_101" "OBJ_22" "0"
"src =OBJ_9"
"reason src={сопоставление <алфавитов> и Ея-описания последоват.}"
)
(
"OBJ_101" "string_1" "?" "aбвгдежзийклмнопростуфхцчшщъыьэюя"
"OBJ_21" "0"
"src =(наследование OBJ_100)"
)
(
"ACT_1" "действие_1" "элемент последовательности по номеру" "???" "OBJ_22" "0"
"src=OBJ_100"
"reason src={сопоставление <первая буква алфавитов> и Ея-описания <n-ый элемент последовательности> }"
"arg1=1"
"reason arg1={сопоставление <первая> и Ея-описания 1}"
"arg2=<абвгдЕ>"
"reason arg2={наследование val последовательность_1}"
"rezult=<а>"
"fun=<entry(1,
<абвгдЕ>)>"
)