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




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

4.6. Использование Пролога для доказательства теорем

Для получения программы 4.1 вам необходимо загрузить модули Пролог-системы PROLOG, SIMPLE и TOLD. Функции AND, OR и NOT встроены в Пролог. С помощью этих функций и определяемых в программе отношений true, false и Т мы сможем определять истинность сложных высказываний, а также проверять на эквивалентность различные высказывания.

В программе 4.1 отношения b, g и h соответствуют одноименным функциям, приведенным на табл. 4.8. Они могут быть представлены как b = p∨q, g = (р∧q)∨(~p∧~q) и h = р∧q. Для того чтобы предоставить пользователю возможность вводить значение той или иной логической переменной, используется отношение is-told. Запрос может иметь следующую форму "р истинно?" ("р true?",) и, если на него будет получен ответ "да" (yes), то значением р становится истина (true). В случае же, если вводится ответ "нет" (по), значением р считается ложь (false).

Програма 4.1

X true if

(X true) is-told

[X истина если в ответ на вопрос системы (X истина?) пользователь введет "да" ("yes")]

X false if

not X true

[X ложь если НЕ X истина]

b T if

(either p true or q true)

[b T, если ( р истина ИЛИ q истина)]

g T if

(either p true and q true OF p false and q false)

[g T, если ( р истина И q истина ИЛИ р ложь И q ложь)]

h T if

р true and

q true

[h T, если р истина И q истина]

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

is (h T) ; Запрос пользователя

[верно (hT)?]

р true ? yes ; Вопрос Пролог-системы и ответ пользователя

[р истинно? да] ;

q true ? yes ; Вопрос Пролог-системы и ответ пользователя

[q истинно? да] ;

YES ; Ответ Пролог-системы

[ ДА ]

&.

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

is (h T)

[верно (h Т) ? ]

р true ? yes

[р истинно ? да]

q true ? no

[q истинно ? нет]

NO

[НЕТ]

&.

is (h T)

[верно (h T) ? ]

р true ? nо

[р истинно ? нет)

NO

[НЕТ]

&.

Обратите внимание на то, что, обработав третий ответ пользователя, Пролог-система ответила сразу же после получения значения р, не производя в данном случае ненужной проверки значения q. Приведем теперь пример определения истинности высказывания b:

is (b T)

[верно (b T) ?]

р true ? yes

[р истинно ? да ]

YES

[ДА]

&.

is (b T)

[верно (b T) ? ]

р true ? no

[р истинно ? нет]

q true ? yes

[q истинно ? да]

YES

[ДА]

&.

is (b T)

[верно (b T) ?]

р true ? no

[р истинно ? нет]

q true ? no

[q истинно ? нет]

NO

[НЕТ]

&.

Функция OR принимает значение истина, когда это же значение имеет хотя бы одна из двух ее переменных. Поэтому Пролог-система, обнаружив, что значением первой переменной является истина, прекращает проверку. Ниже приведены примеры диалога при проверке высказывания g = ((р ∧ q)∨(~p∧~q)).

Случай 1

is (g T)

[верно (g T) ?]

р true ? yes

[р истинно ? да]

q true ? yes

[q истинно ? да]

YES

[ДА]

Случай 2

& is (g T)

[верно (g T) ? ]

р true ? yes

[р истинно ? да]

q true ? no

[q истинно ? нет]

р true ? yes

[р истинно ? да]

NO

[НЕТ]

Случай 3

& is (g T)

[верно (g T) ? ]

р true ? no

[р истинно ? нет]

р true ? no

[р истинно ? нет]

q true ? yes

[q истинно ? да]

NO

[НЕТ]

Случай 4

& is (g T)

[верно (g T) ? ]

р true ? no

[р истинно ? нет]

р true ? no

[р истинно ? нет]

q true ? no

[q истинно ? нет]

YES

[ДА]

&.

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

Значением первого терма во втором варианте является ложь, поэтому Пролог-система переходит к проверке истинности второго терма. Поскольку мы не обеспечили запоминание ответа на первый вопрос об истинности р (р true ?), он повторяется еще раз, и мы должны еще раз утвердительно на "его ответить. Сразу после этого Пролог-система устанавливает, что значением g является ложь, так как независимо от значения q значение второго терма - ложь.

В третьем и четвертом вариантах, так же как и во втором, Пролог-система повторяет вопрос "р true ?", чтобы определить значение второго терма функции g. Как будет показано в дальнейшем, можно избежать повторений вопросов, но сейчас мы не будем останавливаться на этом.

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

Можно воспользоваться средствами Пролога для проверки правильности альтернативных выражений для этих же функций. Для этого воспользуемся правилом алгебры логики, позволяющим манипулировать знаком отрицания: двойное отрицание переменной равно самой переменной: ~ (~А) = А. Пусть ~А = В, тогда, взяв отрицание от обеих частей этого равенства и применив к левой части правило двойного отрицания, получим А = ~В. Рассмотрим логическую функцию b = р∨q . Согласно правилам алгебры логики, выражение для этой функции может быть преобразовано к следующему виду: ~b = ~ (р∨q). Ранее уже было указано, что символьное выражение для функций можно искать с помощью отрицания функции, являющейся по отношению к исходной альтернативной, т. е. принимающей значение истина при тех значениях переменных, где исходная функция ложна, и наоборот. Функция OR принимает значение ложь только в том случае, когда р и q ложны одновременно, поэтому справедливо следующее равенство ~b = ~р∧~q. С помощью программы 4.1 проверим справедливость последнего равенства, а также сравним его с~b = ~ (р∨q). Если они окажутся идентичными, это будет доказательством того, что ~р∧~q тождественно равно ~ (р∨q).

Добавим к программе 4.1 следующий фрагмент:

b F if

р false and

q false

[b F, если р ложь И q ложь]

Поскольку справедливо "X ложь, если НЕ X истина" (X false if not X true), приведенный выше фрагмент эквивалентен следующему:

b F if

not p true and

not q true

[b F, если НЕ р истина И НЕ q истина]

что в символьной записи соответствует b = ~р∧~q. Проверим это равенство с помощью следующих вопросов:

is (b F)

[верно (b F) ? ]

p true ? yes

[p истинно ? да]

NO

[НЕТ]

& is (b F)

[верно (b F) ?]

p true ? no

[p истинно ? нет]

q true ? yes

[q истинно ? да]

NO

[НЕТ]

& is (b F)

[верно (b F) ? ]

p true ? no

[p истинно ? нет]

q true ? no

[q истинно ? нет]

YES

[ДА]

&.

Теперь удалим из программы отношение F с помощью команды kill F и введем другое его определение:

b F if

not (either p true or q true)

[b F, если НЕ (р истина ИЛИ q истина)]

Ниже приведен диалог, служащий для проверки введенного отношения:

is (b F)

[верно (b F) ? ]

p true ? yes

[p истинно ? да]

NO

[НЕТ]

& is (b F)

[верно (b F) ? ]

p true ? no

[p истинно ? нет]

q true ? yes

[q истинно ? да]

NO

[НЕТ]

is (b F)

[верно (b F) ? ]

p true ? no

[p истинно ? нет]

q true ? no

[q истинно ? нет]

YES

[ДА]

&.

О том, что данное отношение эквивалентно удаленному, свидетельствует совпадение последних двух диалогов.

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








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