НОВОСТИ   БИБЛИОТЕКА   ЮМОР   КАРТА САЙТА   ССЫЛКИ   О САЙТЕ  




предыдущая главасодержаниеследующая глава

2.3. Отношения

Интуитивно, отношение понимается как правило, связывающее два объекта. Наиболее часто в нашем обиходе фигурируют отношения между людьми, например, высказывание "Том является-братом Джеймса" определяет отношение между Томом и Джеймсом. Слова "является-братом" связаны дефисом, поскольку в Прологе в качестве имени отношения может использоваться только одно слово. Отношения между двумя объектами, аналогичные приведенному выше, называются бинарными. Ниже даны примеры еще нескольких бинарных отношений.

  1. Алекс владеет книгами.
  2. Джо любит Кейт.
  3. 25 больше 24.

Не все реально существующие отношения являются бинарными. Например, отношения типа "возраст Джеймса" использует только один объект. Такие отношения называются унарными. Существуют отношения и большей арности. Например, в отношении "Алан дает деньги Брайану" фигурируют три объекта. Но на первом этапе такие сложные отношения нами не будут использоваться. Объекты отношения в литературе известны как аргументы.

В связи с этим мы можем сказать, что бинарное отношение характеризуется двумя аргументами, а унарное - одним. В более общей форме бинарное отношение можно представить в виде XRY, где R - имя отношения, а X и Y - его аргументы. Унарное отношение тогда имеет вид XR, где X - аргумент отношения R.

Заметим, что отношения не являются единственным способом представления знаний. Для этой цели также можно использовать любые типы кодов и хранить их, например, в виде числовых массивов или массивов строк в ЭВМ. Но поскольку данные предназначены для людей, необходимо уметь преобразовывать их в форму предложений достаточно простого языка. Средство, с помощью которого такое преобразование выполняется, называется функцией отображения. Важно, что способ, использующий отношения, позволяет очень просто перейти к обычному человеческому языку. Кроме того, если названия отношений выбраны достаточно продуманно, можно написать программу так, что она будет напоминать текст на естественном языке и необходимость в преобразовании отпадает. В этом случае программисты имеют возможность самостоятельно выбирать те слова, которые будут впоследствии входить в тексты их программ, и не связаны жестко ограниченным набором слов и символов, допускаемых ЭВМ.

Следующая короткая программа, служащая для иллюстрации только что изложенных положений, без сомнения будет понятнее всем, вне зависимости от того, есть у них в распоряжении транслятор с Пролога или нет:

Rover isa dog ; Ровер это собака

Tom isa man ; Том это человек

X has-a-tail if X isa dog ; X имеет-хвост, если X это собака

Эта программа состоит из двух утверждений, представляющих собой факты, и одного правила, с помощью которого она может генерировать другие факты. Программа написана на обычном разговорном языке. Исключением является лишь то, что слова, определяющие отношения, соединены дефисами. Ниже показано, как может протекать процесс работы такой программы:

is (Rover isa dog) Запрос вводится пользователем

[верно (Ровер это собака)]

YES Ответ системы

[ДА]

all (х: х isa man) -- Еще один запрос

[определить все (X: X это человек)]

Тоm Ответ системы

[Том]

No (more) answers Это сообщение свидетельствует о том, что все ответы найдены

[Ответов (больше) нет]

is (Rover has-a-tail) Запрос

[верно (Ровер имеет-хвост)]

YES Ответ

[ДА]

is (Tom has-a-tail) Запрос

[верно (Том имеет хвост)]

NO Ответ

[НЕТ]

Эта программа служит для демонстрации возможностей Пролога и практической ценности не имеет. Анализируя работу программы, можно прийти к следующим выводам. Во-первых, программа, обрабатывая факты, может генерировать сообщения YES/NO (или TRUE/FALSE) в зависимости от того, являются ли заданные объекты аргументами отношения. Во-вторых, она может осуществлять поиск значений всех тех аргументов, которые вместе с заданными образуют указанные отношения. Для этого используются так называемые несвязанные переменные, которые не имеют постоянных значений в программе. Конкретные значения связываются с этими переменными только при поиске ответа на запрос.

Два последних запроса дают возможность понять, как в Прологе производится логический вывод, позволяющий генерировать новые факты. Логический вывод в Прологе основан на использовании как фактов из базы данных, так и логических правил. В Прологе реализован классический механизм умозаключений. Например, из двух посылок

"Все собаки имеют хвосты";

"Ровер - это собака"

следует заключение

"Ровер имеет хвост".

Этот пример может кому-то показаться довольно простым, но именно он позволяет понять, какие возможности открывает использование Пролога в таких областях, как создание и эксплуатация реляционных баз данных, доказательство теорем, принятие решений и анализ естественных языков.

Второй тип умозаключений, осуществляемых программами, написанными на Прологе, является наиболее спорным. Например, в программе может использоваться следующая цепочка рассуждений.

Из посылок

"Все собаки имеют хвосты";

"Том - это человек".

делается вывод, что

"Том не имеет хвоста".

Последнее высказывание естественно не является истинным. Сделанное заключение логически не следует из посылок. Даже если доказать, что высказывание

"Том - это человек"

позволяет заключить, что

"Том не является собакой",

то из этого не еледует

"Том не имеет хвоста".

Правда, в соответствии с внутренней логикой программы такого рода умозаключения могут быть разрешены. Например, будем считать, что в программу включены все возможные знания об объектах. Тогда, поскольку нет никакой информации о том, что Том - это собака и известно, что только собаки имеют хвосты, можно сделать вывод

"Том не имеет хвоста"

На практике это не должно привести к сложностям, но знать об этом необходимо, поскольку правило "неудача при доказательстве утверждения ведет к тому, что истинным считается отрицание этого утверждения" используется для реализации логического оператора "not"*.

* (Кратко этот принцип называется "Отрицание по неудаче".- Прим. пер.)

К более детальному разговору о логических принципах мы еще вернемся, но все же еще несколько слов об этом стоит сказать сейчас. Для нас очевидно, что если Бен - человек, то он не собака, но в программе нет утверждений, на основе которых это заключение может быть получено. Утверждение "Том - не собака" было бы справедливым в том случае, если бы в программе имелось правило

"Нет человека, который был бы собакой".

Аналогично утверждение

"X не имеет хвоста"

не следует из двух следующих утверждений:

"Все собаки имеют хвосты";

"X не является собакой".

Это можно легко понять, взяв в качестве значения X лошадь или кошку.

В заключение отметим, что такого рода ошибочные логические выводы надо уметь предвидеть и в случае необходимости не допускать.

предыдущая главасодержаниеследующая глава








© Злыгостев А.С., 2001-2019
При использовании материалов сайта активная ссылка обязательна:
http://informaticslib.ru/ 'Библиотека по информатике'
Рейтинг@Mail.ru
Поможем с курсовой, контрольной, дипломной
1500+ квалифицированных специалистов готовы вам помочь