4.9. Использование Пролога для реализации правил де Моргана
В программе 4.4 функции а, Ь, с, d, q и h представлены в трех различных вариантах, иллюстрирующих применение правил де Моргана. Различным вариантам соответствуют отношения, обозначенные разным числом букв. Например, отношение а - первый вариант функции а из табл. 4.8, аа - второй вариант той же функции и ааа - третий. Теперь, если три варианта представляют одну и ту же функцию, реакция Пролог-системы в случае одних и тех же переменных будет одинаковой.
Программа 4.4
а Т if
(either p true or p false)
аа Т if
not (p true and p false)
ааа Т if
not not (either p true or p false)
b T if
(either p true or q true)
bb T if
not (p false and q false)
bbb T if
not not (either p true or q true)
с Т if
(either p true or q false)
cc T if
not (p false and q true)
ссс Т if
not not (either p true or q false)
d T if
p true
dd T if
not (p false and p false)
ddd T if
not not (either p true or p true)
g T if
(either p true or q true or p false and q false))
gg T if
not not (p true or q true) and not (p false and q false)
ggg T if
not not (either not (either p false or q false) or not (either p true or q true))
h T if
p true and
q true
hh T if
not not (p true and q true)
hhh T if
not (either p false or q false)
X true if
(X true) is-told
X false if
not X true
X F if
not X T
В данной программе енова используется модуль TOLD, позволяющий организовать диалог пользоваться с Пролог-системой. Ниже приводится пример такого диалога:
is (h T)
[верно (h Т)]
р true ? yes
[р истинно? да]
a true ? yes
[q истинно? да]
YES
[ДА]
& is (hh T)
[верно (hh T)]
р true ? yes
[р истинно? да]
q true ? yes
[q истинно? да]
YES
[ДА]
& is (hhh T)
[верно (hhh T)]
p true ? yes
[р истинно? да]
q true ? yes
[q истинно? да]
YES
[ДА]
Указанный диалог показывает, что первая строка таблицы истинности для высказываний h, hh и hhh одна и та же. Аналогичным образом могут быть проверены и остальные строки и таблицы.
Ниже приводится программа 4.5, полученная в результате модификации программы 4.3. Эта программа позволяет проверять таблицы истинности для различных вариантов представления функций алгебры логики.
Программа 4.5
Т true
X true (Y Z x) if
X true (Y Z) and
x true
b true (X Y) if
(either X true or Y true)
bb true (X Y) if
X val and
Y val and
not (X false and Y false)
bbb true (X Y) if
X val and
Y val and
not not (either X true or Y true)
с true (X Y) if
(either X true or Y false)
cc true (X Y) if
X val and
Y val and
not (X false and Y true)
ccc true (X, Y) if
X val and
Y val and
not not (either X true or Y false)
h true (X Y) if
X true and
Y true
hh true (X Y) if
X val and
Y val and
not not (X true and Y true)
hhh true (X Y) if
X val and
Y val and
not (either X false or Y false)
X val if
(either X true or X false)
X tab (Y Z x) if
(either X true (Y Z x) or X false (Y Z x))
F false
X false (Y Z) if
Y val and
Z val and
not (X true (Y Z))
X false (Y Z x) if
X false (Y Z) and
x false
Для получения с помощью программы 4.5 таблицы истинности для функции b необходимо ввести запрос типа all (x y z : b tab (x y z)). Затем после ввода аналогичных запросов для функций bb и bbb получаем соответствующие им таблицы.
Ниже приводится диалог, возникающий после ввода трех указанных запросов.
& all (х у z : b tab (xyz))
TXT
XTT
FFF
& all (x у z : bb tab (x у z))
TTT
TFT
FTT
FFF
& all (x у z : bbb tab (x у z))
TFT
FTT
FFF
No (more) answers
По полученным таблицам можно убедиться в идентичности функций b, bb и bbb.