Читаем Программирование на языке Пролог для искусственного интеллекта полностью

~((а  =>  b) & (b  =>  с) => (а  =>  с))

Для преобразования этой формулы в конъюнктивную нормальную форму можно использовать следующие известные правила:

(1) x => у  эквивалентно  ~x v у

(2) ~(x v y)  эквивалентно ~x & 

(3) ~(x & у)  эквивалентно  ~x v 

(4) ~(~x)  эквивалентно  x

Применяя правило 1, получаем

~(~((a  =>  b)  &  (b  =>  с))  v  (а  =>  с))

Далее, правила 2 и 4 дают

(а  =>  b)  &  (b  =>  с)  &  ~(а  =>  с)

Трижды применив правило 1, получаем

(  v  b)  &  (~b  v  с)  &  ~(  v  с)

И наконец, после применения правила 2 получаем искомую конъюнктивную нормальную форму

(  v  b)  &  (~b  v  с)  &  а  & 

состоящую из четырех дизъюнктов. Теперь можно приступить к резолюционному процессу.

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

p v Y  и  ~p v Z

Шаг резолюции порождает третий дизъюнкт:

Y  v  Z

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

x  и  ~x

которые явно противоречат друг другу.

Рис. 16.6. Доказательство теоремы (а=>b)&(b=>с)=>(a=>с) методом резолюции. Верхняя строка — отрицание теоремы в конъюнктивной нормальной форме. Пустой дизъюнкт внизу сигнализирует, что отрицание теоремы противоречиво.

На рис. 16.6 показан процесс применения резолюций, начинающийся с отрицания нашей предполагаемой теоремы и заканчивающийся пустым дизъюнктом.

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

если

 существуют два таких дизъюнкта C1 и C2, что P является (дизъюнктивным) подвыражением C1, а ~P — подвыражением C2

то

 удалить P из C1 (результат — CA), удалить ~P из C2 (результат — CB) и добавить в базу данных новый дизъюнкт CA v CB.

На нашем формальном языке это можно записать так:

[ дизъюнкт( C1), удалить( P, C1, CA),

  дизъюнкт( C2), удалить( ~P, C2, CB) ] --->

 [ assert( дизъюнкт( СА v СВ) ) ].

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

сделано( C1, C2, P)

В условных частях правил производится распознавание подобных утверждений и обход соответствующих повторных действий.

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

a  v  b  v  a

в более простое выражение a v b. Другое правило распознает те дизъюнкты, которые всегда истинны, например,

a  v  b  v  

и удаляет их из базы данных, поскольку они бесполезны при поиске противоречия.

% Продукционные правила для задачи автоматического

% доказательства теорем

% Противоречие

[ дизъюнкт( X), дизъзюнкт( ~X) ] --->

 [ write( 'Обнаружено противоречие'), стоп].

% Удалить тривиально истинный дизъюнкт

[ дизъюнкт( С), внутри( P, С), внутри( ~P, С) ] --->

 [ retract( С) ].

% Упростить дизъюнкт

[ дизъюнкт( С), удалить( P, С, C1), внутри( P, C1) ] --->

 [ заменить( дизъюнкт( С), дизъюнкт( C1) ) ].

% Шаг резолюции, специальный случай

[ дизъюнкт( P), дизъюнкт( С), удалить( ~P, С, C1),

  not сделано( P, С, P) ] --->

 [ аssеrt( дизъюнкт( C1)), аssert( сделано( P, С, P))].

% Шаг резолюции, специальный случай

[ дизъюнкт( ~P), дизъюнкт( С), удалить( P, С, C1),

  not сделано( ~P, С, P) ] --->

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных