Извлекать информацию из программы можно с помощью различных по форме запросов. Некоторые из них будут показаны ниже и адресованы следующей короткой программе:
Flash isa dog ; Флэш это собака
Rover isa dog ; Ровер это собака
Bootsie isa cat ; Бутси это кошка
Star isa horse ; Стар это лошадь
Flash black ; Флэш черная
Bootsie brown ; Бутси коричневая
Rover red ; Ревер рыжая
Star white ; Стар белая
X house-trained if ; X домашнее-животное, если
(either X isa dog ; (либо X это собака или X это кошка)
or X isa cat)
X isa animal if ; X это животное, если
(either X isa horse ; (либо X это лошадь или X домашнее-животное)
or X house-trained) ;
Torn owns X if ; Том владеет X, если
X isa dog and ; X это собака и
not X black ; X не черного-цвета
Kate owns X if ; Кейт владеет X, если
(either X black ; (либо X черного-цвета или X это лошадь)
or X isa horse) ;
Во-первых, можно проверить, имеется ли в программе тот или иной факт. Например, на запросе
is (Rover red)
[верно (Ровер рыжая)]
должен быть получен ответ
YES [ДА]
В более общем елучае можно проверить, еущевтвуют ли значения аргументов, делающих отношение истинным!
is (x isa dog)
is (Star isa x)
is (Spot isa x)
На первый запрос будет получен ответ YES, поскольку X может принять значение, делающее отношение истинным. Второй и третий запросы позволяют установить, существуют ли в программе отношения "isa", в которых Star и Spot являются первыми аргументами". Результатами обработки этих запросов являются YES и N0 соответственно.
Приведем еще несколько примеров запросов
all (x: x isa dog)*
all (x: Kate owns x)
all (x: x owns y)
all (x y: x owns y)
all (x у z: x owns у and у isa z)
* (Определить все (x:x это собака).- Прим. пер.)
С их помощью можно определить клички всех собак; клички всех животных, которыми владеет Кейт; имена всех тех людей, которые кем-нибудь владеют; то же самое, что и в предыдущем запросе, и, кроме того, клички всех животных, которыми кто-нибудь владеет; то же самое, что и в предыдущем запросе, но еще и виды животных.
Найти только одно значение аргумента можно, например, так:
one (x: х house-trained) х
[определить одно (х:х домашнее животное)]
Flash
[Флэш]
more? (y/n) у
[еще? (да/нет) да]
Rover
[Ровер]
more? (y/n) n
[еще? (да/нет) нет]
&.
Если требуется дополнительно найти другое значение аргумента, пользователь должен ответить у (да).
Заметим, что особенно внимательным надо быть при использовании в предложениях и запросах оператора "not". В предложении
Tom owns х if х isa dog and not x black
условие состоит из двух частей, причем обратите внимание на то, что оператор "not" содержится во второй. Можно попробовать сформулировать предложение так:
Tom owns х if not x black
стараясь определить то, что Том является владельцем всех животных нечерного цвета. Но таким путем это делать нельзя. Если такое предложение все же есть, то Том не будет считаться владельцем кого бы то ни было. Аналогично обстоит дело с запросами.
Рассмотрим запрос
all (x: not x isa dog)
На него система всегда будет отвечать NO. Но, например, на запрос
all (x: x isa animal and not x isa dog)
будут получены два ответа: Star (Стар) и Bootsie (Бутси).
Упражнение 2.1
Составьте запросы, позволяющие определить:
а) всех, кто владеет животными;
б) всех, кто владеет животными небелого цветг;
в) того, кто владеет Бутси;
г) клички тех животных, которыми кто-то владеет, и имена владельцев.
Упражнение 2.2
Что будет получено в ответ на следующие запросы:
а) is not Rover red?
б) all (x: owns x and not x black);
в) all (x: x owns у and not у black).
Упражнение 2.3
Напишите предложение, описывающее животных светлого (нечерного) цвета, а затем составьте запрос, позволяющий определить всех тех нечерных животных, которые не являются лошадьми.
Логическая дедукция используется во многих областях искусственного интеллекта. Рассмотрим запрос: определить, какие животные не являются домашними. Поскольку этот запрос не очень сложен, человек способен ответить на него, просто просмотрев текст программы. При решении реальных задач возникают ситуации, когда человеческих возможностей может не хватить. Тогда приходится прибегать либо к помощи карандаша и бумаги, либо к помощи ЭВМ. Отметим те факторы, которые делают извлечение необходимой информации затруднительным:
огромное число рассматриваемых данных;
большое число не относящихся к решаемой задаче данных;
такое большое число различных путей, возникающих в процессе решения задачи, что обычных человеческих способностей недостаточно, чтобы ориентироваться в них.
Попробуйте, не пользуясь никакими дополнительными инструментами, кроме своей головы, решить следующую задачу. Бутси - коричневая кошка, Корни - черная кошка и Мактэвити - рыжая кошка. Флэш, Ровер и Слот - собаки; Ровер - рыжая, а Спот - белая. Все животные, которыми владеют Том и Кейт, имеют родословные. Том владеет всеми черными и коричневыми животными, а Кейт владеет всеми собаками небелого цвета, которые не являются собственностью Тома. Алан владеет Мактэвити, если Кейт не владеет Бутси и если Спот не имеет родословной. Флэш - пятнистая собака. Определить, какие животные не имеют хозяев?
Использование программы, листинг которой приведен ниже, позволяет немедленно получить ответ на запрос all (x: x isa animal and not y owns x):
Flash brindled
Flash isa dog
Rover isa dog
Spot isa dog
Korky isa cat
Bootsie isa cat
McTavity isa cat
X isa animal if
(either X isa dog or X isa cat)
Spot white
Rover red
Korky black
Bootsie brown
McTavity ginger
Tom owns X if
X isa animal and
(either X black or X brown)
Kate owns X if
X isa dog and
not X white and
not Tom owns X
Alan owns McTavity if
McTavity isa cat and
not Kate owns Bootsie and
not Spot has-pedigree
X has-pedigree if
(either Tom owns X or Kate owns X)
Если читатель все же справился с этой работой сам, он должен получить ответ "Спот". Методы принятия решений, используемые даже в такой простой задаче, как эта, распространяются на такие области искусственного интеллекта, как игры, решение задач, доказательство теорем, а также проектирование и эксплуатацию баз данных.