принадлежит( X, [гепард, тигр, пингвин, альбатрос]).
можно_спросить( _ 'кормит детенышей'_,
'Животное' 'кормит детенышей' 'Чем').
можно_спросить( _ летает, 'Животное' летает).
можно_спросить( _ откладывает яйца,
'Животное' откладывает яйца).
можно_спросить( _ ест _, 'Животное' ест 'Что').
можно_спросить( _ имеет _,'Животное' имеет 'Нечто').
можно_спросить( _ 'не может' _,
'Животное' 'не может' 'Что делать').
можно_спросить( _ плавает, 'Животное' плавает).
можно_спросить( _ летает хорошо,
'Животное' летает хорошо).
Рис. 14. 5. Простая база знаний для идентификации животных.
Заимствовано из Winston (1984). Отношение "можно_спросить"
определяет вопросы, которые можно задавать пользователю.
Операторы если, то, и, или определены на рис. 14.10.
Рассмотрим еще одну небольшую базу знаний, которая может помочь локализовать неисправности в простой электрической схеме, состоящей из электрических приборов и предохранителей. Электрическая схема показана на рис. 14.6. Вот одно из возможных правил:
лампа1 включена
лампа1 не работает
предохранитель1 заведомо цел
лампа1 заведомо неисправна.
Вот другой пример правила:
радиатор работает
предохранитель1 заведомо цел.
Эти два правила опираются на некоторые факты
(относящиеся к нашей
Рис. 14. 6. Соединения между предохранителями и приборами в
простой электрической схеме.
формальный язык это транслируется так:
правило_поломки:
если
Прибор включен и
не (Прибор работает) и
Прибор соединен с Предохранитель и
Предохранитель заведомо цел
то
Прибор заведомо неисправен.
База знаний такого рода показана на рис. 14. 7.
Упражнения
14. 1. Рассмотрите "если-то"-правила рис. 14.2-14.4 и транслируйте их в нашу систему обозначений для правил. Предложите расширение нотации, чтобы, при необходимости, можно было работать с оценками уверенности.
% Небольшая база знаний для локализации неисправностей в
% электрической схеме
% Если прибор включен, но не работает, и предохранитель цел,
% то прибор неисправен.
правило_поломки:
если
вкл( Прибор) и
прибор( Прибор) и
не работает( Прибор) и
соед( Прибор, Предохр) и
доказано( цел( Предохр) )
то
доказано( неиспр( Прибор) ).
% Если устройство работает, то его предохранитель цел
правило_цел_предохр:
если
соед( Прибор, Предохр)
и работает( Прибор)
то
доказано( цел( Предохр) ).
% Если два различных прибора подключены к одному и тому же
% предохранителю, оба включены и не работают, то предохранитель
% сгорел.
% ЗАМЕЧАНИЕ: предполагается, что из двух приборов неисправных -
% не более одного!
правило_предохр:
если
соед( Прибор1, Предохр) и
вкл( Прибор1) и
не работает( Прибор1) и
общ_предохр( Прибор2, Прибор1) и
вкл( Прибор2) и
не работает( Прибор2)
то
доказано( сгорел( Предохр) ).
правило_общ_предохр:
если
соед( Прибор1, Предохр) и
соед( Прибор2, Предохр) и
различны( Прибор1, Прибор2)
то
общ_предохр( Прибор1, Прибор2).
факт: различны( X, Y) :- not (X=Y).
факт: прибор( радиатор).
факт: прибор( лампа1).
факт: прибор( лампа2).
факт: прибор( лампа3).
факт: прибор( лампа4).
факт: соед( лампа1, предохр1).