Научная статья на тему 'ОСОБЕННОСТИ ЛОГИЧЕСКОГО ВЫВОДА В ПРОЛОГ-ПРОГРАММАХ'

ОСОБЕННОСТИ ЛОГИЧЕСКОГО ВЫВОДА В ПРОЛОГ-ПРОГРАММАХ Текст научной статьи по специальности «Математика»

CC BY
301
33
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ЛОГИЧЕСКИЙ ВЫВОД / РЕЗОЛЬВЕНТА / ДИЗЪЮНКТ / ПРОГРАММА / INFERENCE / RESOLVENT / DISJUNCT / PROGRAM

Аннотация научной статьи по математике, автор научной работы — Тюрин С.Ф., Городилов А.Ю.

Логический вывод может быть основан на методе резолюций, который предполагает доказательство от противного путем получения резольвент из исходного множества дизъюнктов. Если выводится пустой дизъюнкт (пустое множество), вывод считается правильным. Язык ПРОЛОГ, как язык логического программирования, базируется на первопорядковой логике предикатов. Однако имеются существенные отличия в процедурах вывода. В статье на конкретном примере рассматриваются особенности логического вывода, основанного на логике предикатов и логического вывода в программе на языке ПРОЛОГ.

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

FEATURES OF LOGICAL INFERENCE IN PROLOG-PROGRAMS

The logical conclusion is based on the resolution method, which assumes proof by contradiction by obtaining resolvents from the original set of clauses. If an empty clause is deduced (empty set), the conclusion is considered correct. The PROLOG language, as a logic programming language, is based on the first-order logic of predicates. However, there are significant differences in the withdrawal procedures. The article on a specific example discusses the features of logical inference, based on the logic of predicates and logical inference in a program in the language of PROLOG.

Текст научной работы на тему «ОСОБЕННОСТИ ЛОГИЧЕСКОГО ВЫВОДА В ПРОЛОГ-ПРОГРАММАХ»

2019

ВЕСТНИК ПЕРМСКОГО УНИВЕРСИТЕТА

Математика. Механика. Информатика

Вып. 3 (46)

УДК 51:33(075.8)

Особенности логического вывода в ПРОЛОГ-программах

С. Ф. Тюрин

Пермский национальный исследовательский политехнический университет Россия, 614990, г. Пермь, ул. Комсомольский пр., 29 tyurinsergfeo@yandex.ru; +7-952-32-02-510

Пермский государственный национальный исследовательский университет Россия, 614990, г. Пермь, ул. Букирева, 15

А. Ю. Городилов

Пермский государственный национальный исследовательский университет Россия, 614990, г. Пермь, ул. Букирева, 15 gora830@yandex.ru; +7-902-83-07-328

Логический вывод может быть основан на методе резолюций, который предполагает доказательство от противного путем получения резольвент из исходного множества дизъюнктов. Если выводится пустой дизъюнкт (пустое множество), вывод считается правильным. Язык ПРОЛОГ, как язык логического программирования, базируется на первопорядковой логике предикатов. Однако имеются существенные отличия в процедурах вывода. В статье на конкретном примере рассматриваются особенности логического вывода, основанного на логике предикатов и логического вывода в программе на языке ПРОЛОГ.

Ключевые слова: логический вывод; резольвента; дизъюнкт; программа. DOI: 10.17072/1993-0550-2019-3-91-97

Введение

Логический вывод, проверка правильности логических выводов является одной из основных процедур математической логики [1-4]. При этом вывод считается правильным, если из конъюнкции посылок следует заключение [1-4]. В логике высказываний, предикатов первого порядка используется метод резолюций. Доказательство ведется от противного до получения пустой резольвенты, обозначаемой пустым множеством, когда получают следствие из двух взаимно противоположных предложений (дизъюнктов) с использованием подстановок. В частном случае это могут быть атомарные предложения (формулы).

Необходимо предварительно получить формулы логики предикатов в стандартной бескванторной форме, кванторы существования исключаются с помощью введения функции Сколема. Получают конъюнктивную нормальную форму (КНФ) конъюнкции посылок и отрицания заключения.

© Тюрин С. Ф., Городилов А. Ю., 2019

Элементы КНФ это есть дизъюнкты или предложения, или клаузы (так и называют -клаузальная форма). Вывод иногда представляют в форме дерева опровержения. Язык логического программирования ПРОЛОГ [5] использует метод резолюций, однако имеются особенности по сравнению с языком логики предикатов. Рассмотрим эти особенности на примере.

1. Вывод в логике предикатов

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

Формализуем задачу в логике предикатов (рис. 1).

№ Формулировка Формул» логики предикатов Примечание

1 спортсмен ( мнима ) S(m) йдл »местный предикат (свойство)

2 спортсмен ( тонн ) S(t) о дн »местный предикат (свойство)

3 спортсмен ( дима ) ад о дн »местный предикат (свойство)

4 Каждый член этого клуба горнолыжником, либо скалолазом нлн и теш н другим Vx{S(x) ->-[P(i,£}vP(i,c)v J>0.£)P(j-.f)]} = »V^SW-KPCr.rfvPCr.cffi. Правило Р(х,у) бытт (кто ИМ) g горнолыжник с-сжалолаз

5 Все скалолазы не любят ДОЖДЬ. Ч4Н*. r)->Z(i, r)]. Правило любить (кто что)

б В« гормо шумихи люЬгг Правило

! лтобнт (днма, снег) L(d,s) двухместный предикат (бинарное

8 Ut,s) предикат

9 любит ( тонн, дождь) L(t,r) двухместный предикат (бинарное

10 лю£кт ( мнша, X ) :—: поЦлибит (тонн, Х)> L(t,x) -> Um. x), L(t,x) -> L(m,x). Правило

11 есть (2, скалол).11оЦесть (У.. горнел))? P(x,c)P(x,g) Вопрос (цель)

3x[P(x, c)P(x, g)].

(3)

Рис. 1. Формализация задачи о спортсменах

Построим аргумент [6]: 5(m),S(t), S(d), Vx{S(x) ^ [P(x,g) v P(x, c)], Vx[P(x,c) ^ L(x,r)],yx[P(x,g) ^ L(x,c)], Vx[L(t, x) ^ L(m, x)],L(d, s),L(t, s),L(t,r)

3x[ P( x, c)P(x, g)] Получим множество дизъюнктов:

S (m), S (t), S (d), S (x) v P( x, g) v P( x, c), P( z, c) v L( z, r), P( y, g) v L( y, s), L(t, w) v L(m, w), L(t, w) v L(m, w), L(d, s), L(t, s), L(t, r), P(v, c) v P(v, g).

(1)

(2)

Построим дерево опровержения [6], используя метод резолюций (рис. 2):

Рис. 2. Дерево опровержения задачи о спортсменах

То есть, вывод правильный:

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

Р(у, с) V Р(у, g) V Р(у, с)Р(у, g). (4) и получаем модифицированное дерево (рис. 3):

Рис. 3. Модифицированное дерево

опровержения задачи о спортсменах

В корне модифицированного дерева получили ответ

Р(т, срт g). (5)

То есть ответ - Миша, (т), он скалолаз (с), но не горнолыжник (§;). Так и есть. Миша не любит снег, Миша не любит дождь, поскольку согласно заданию "Миша...не любит все, что любит Тоня". Все отлично, все логично!

2. Вывод в языке ПРОЛОГ

Напишем программу, решающую задачу из приведенного выше примера, на языке ПРОЛОГ-Д [5]. Модель 1 (1) не может быть использована полностью, поскольку выражение

Ух^(х) ^ [Р(х, g) V Р(х, с)] (6)

не является хорновским дизъюнктом, а только таким, каким он (имеющие не более одного неинверсного литерала), ПРОЛОГ, допускает. Здесь два литерала, или говоря по-простому, два предиката без инверсии:

S (x) v P(x, g) v P(x, c).

(7)

Рассмотрим другую модель, модель2, приведенную в [7] (рис. 4).

(8)

Получим множество дизъюнктов (стандартную бескванторную форму в КНФ), отрицая заключение:

(9)

Рис. 4. Модель2 работает

В этой модели использована только одна импликация, характеризующая пристрастия Миши (Миша любит все, что не любит Тоня, и не любит все, что любит Тоня):

(любит(миша,х): НЕ(любит(тоня,х)).)

Кроме того, вместо "каждый член этого клуба является либо горнолыжником, либо скалолазом или и тем, и другим. Все скалолазы не любят дождь. Все горнолыжники любят снег" приведено два правила:

есть(х,горнолыжник):

-спортсмен(х),любит(х,снег). есть(х,скалолаз): -спортсмен(х),НЕ(любит(х,дождь)).

В результате получаем ответ: "Миша". Проверим эту модель (рис. 5) в логике предикатов.

3. Вывод в логике предикатов по модели, работающей в языке ПРОЛОГ

Построим новый аргумент по программе (рис. 4):

S (m), S (t), S (d), L(d, s),

L(t, s), L(t, r), Vx[L(t, x) ^ L(m, x)], Vy[S(y)L(y, s) ^ P(y,g)], Vz[S(z)L(z,r) ^ P(z,c)] 3v[P(v, c) P(v, g)] .

S (m), S (t), S (d), L(d, s), L(t, s), L(t, r), L(t, x) v L(m, x)], S (y) v L( y, s) v P( y, g)], S (z) v L( z, r) v P( z, c)], P(v, c) v P(v, g )] Однако для (9) все попытки получения опровержения не приводят к успеху.

Например, первый дизъюнкт может дать резольвенту только с восьмым:

S (y) v L( y, s) v P( y, g)], S (m)

L(m, s) v P(m, g)

или с девятым:

S (z) v L( z, r) v P(z, c)], S (m)

(10)

(11)

L(m, r ) v P(m, c) Получить резольвенту из результатов (10), (11) невозможно - эти предложения не унифицируются - константы разные, в одной - дождь (г), в другой скалолаз (с). Аналогично можно получить и некоторые другие резольвенты, но опровержение вывода не достигается. Тем более что при ближайшем рассмотрении дизъюнкт

S(z) v L(z, r) v P(z, c)] (12)

так же, как и (6), (7) оказывается не хорнов-ским.

Тогда, вместо формулировки № 4 на рис. 1, попробуем, используя контрапозицию для изменения направления импликации, получить такой же, как (12) дизъюнкт с двумя положительными литералами:

Vx{S(x) ^ [P(x,g)P(x,c)]}. (13) Однако для такой модели 1 ПРОЛОГ выдает результат "НЕТ" (рис. 5).

Рис. 5. Модель1 с измененной формулировкой № 4 не работает

То есть, таких спортсменов нет.

4. Вывод в логике предикатов с использованием эквиваленции

Вернемся к модели 2. В статье [7] приведен, например, такой вывод для программы, изображенной на рис. 4:

есть(з, скалолаз), НЕ (есть(з, горнолыжник)), есть(х, скалолаз):-спортсмен(х), НЕ (любит(х, дождь))

спортсмен(х), НЕ (любит(х, дождь)), НЕ (есть(х, горнолыжник)),

То есть заменяется "есть(з, скалолаз) " на "спортсмен(х), НЕ (любит(х, дождь))" с заменой переменной. Другими словами, фиксируется эквивалентность обеих частей импликации! Значит, вместо импликации выполняется эквиваленция. Таким образом, вместо (8) имеем:

S (m'), S (t), S (d ), L(d, s), L(t, s), L(t, r),

Vx[L(t,x) O L(m,x)], Vy[S(y)L(y,s) O P(y,g)], Vz[S(z)L(z, r) O P(z, c)] 3V[P(v, c)P(v, g)]

Таким образом, с эквиваленцией все работает!

Аналогично можно построить и модифицированное дерево опровержения. То есть такая модель удовлетворяет требованиям и логике предикатов и ПРОЛОГу.

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

5. Дальнейшие модификации программы на языке ПРОЛОГ

Попробуем модифицировать программу. Удалим "Миша любит все, что не любит Тоня, и не любит все, что любит Тоня" (рис. 7). Получаем Мишу! Как говорится, скрипач (в нашем случае - скрипачка) не нужен!

(14)

Раскрываем импликацию, отрицая заключение и получая бескванторную форму:

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

S (m), S (t), S (d), L(d, s), L(t, s), L(t, r), L(t, x) v L(m, x), L(t, x) v L(m, x),

S(y) v L(y, s) v P(y, g I (15)

S (y) L( y, s) v P( y, g), S (z) v L( z, r) v P( z, c), S (z)L( z, r) v P( z, c), P(v, c) v P(v, g).

Получим множество дизъюнктов и по нему построим дерево опровержения (рис. 6):

Рис.7. МодельЗ работает!

Таким образом, программа считает, что, если Миша не упомянут в "любящих", значит он "не любящий", что конечно, в общем случае опять не есть верно. Безусловно, такая модель № 3 тем более не корректна в логике предикатов (рис. 8).

Рис. 6. Вывод в логике предикатов по модели 2 с эквиваленцией

Рис. 8. Попытка вывода в модели 3

Добавим факты о Мише, которые "домысливает" ПРОЛОГ (рис. 9).

Рис. 9. Попытка вывода в модифицированной модели 3 с дополнительными фактами, выделенными цветом

Получаем резольвенту Р(т, с), действительно, Миша-то скалолаз... Это следует из посылок. Но как вывести тот факт, что Миша не горнолыжник? Ясно, что из посылок нельзя вывести Р(т, g) аналогично, поскольку другое правило. Поэтому программа формирует НЕТ, то есть: Р(т,g). Тогда и получаем (рис. 10).

Рис. 10. Вывод в модифицированной модели 3 с дополнительными фактами, выделенными цветом

Аналогично строится и модифицированное дерево, в корне которого будет ожидаемое выражение (5). Но для корректности рассуждений о Мише необходимо оставить в посылках дизъюнкт

L(t, w) v L(m, w), (16)

при этом дизъюнкт

L(t, w) v L(m, w) (17)

точно не нужен, поскольку Тоня любит и дождь, и снег.

Тогда корректно получаются Мишины факты.

6. Программа на языке ПРОЛОГ с учетом корректной базы знаний

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

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

Получаем следующий аргумент:

S (m), S (t), S (d), L(d, s), L(t, s), L(t, r), Vx[L(t, x) ^ L(m, x)], Vy[S(y)L(y,s) ^ P(y, g)], Vy[S(y)L(y, s) ^ P(y, g)] Vz[S(z)L(z, r) ^ P(z, c)] Vz[S(z)L(z, r)_^ P(z, c)] 3v[ P(v, c)P(v, g)] '

Из выражения (18) получаем множество дизъюнктов:

S (m), S (t), S (d), L(d, s), L(t, s), L(t, r), L(t, x) v L(m, x), S(y) v L(y, s) v P(y, g), S(y) v L(y, s) v P(y, g), (19)

S(z) v L(z, r) v P(z, c), S(z) v L(z, r) v P(z, c), P(v, c) v P(v, g).

Видим, что (19) так же, как и (2) содержит как предикаты "есть", так и предикаты "не есть". Получим по (19) дерево опровержения (рис. 11):

(18)

Рис. 11. Дерево опровержения по модели 3

Опровержение достигается. Легко видеть, что модифицированное дерево опровержения, подобное приведенному на рис. 3, даст ответ "Миша". Таким образом, новая программа, дающая верный результат, будет выглядеть следующим образом (рис. 12):

Рис. 12. Программа по корректной модели 3

В этом случае и модель в логике предикатов и программа на языке ПРОЛОГ наконец-то дают одинаковый результат.

Заметим, что следствием дизъюнктов первой модели (2)

5 (х) V Р( х, g) V Р( х, с),

Р( 2 с) V Ь(2, г), Р(у, g) V Ь(у, s) являются дизъюнкты

(21)

S(x) v P(x, g) v P(x, c),

P( z, c) v L( z, r ) S(x) v P(x, g) v L(z, r) S(x) v P(x, g) v P(x, c), _ P(y, g) v L(y, s) S(x) v P(x,c) v L(y, s) из второй модели (9).

(22)

(23)

Однако в ней не хватает важных дизъюнктов P(z, c) v L(z, r), (23)

P(y, g) v L(y, s) , (24)

фиксирующих "не есть". В то же время в третьей модели (19) дизъюнкты

S(y) v L(y, s) v P(y, g), (25)

S (z) v L(z, r) v P(z, c) (26) следуют из дизъюнктов (24), (23).

Выводы

Модель, задаваемая на языке ПРОЛОГ, должна быть корректной, иначе получаются неверные следствия, выводы. При наличии встроенного предиката НЕ, если вывод не завершается, ПРОЛОГ ответ НЕТ инвертирует и формируется ответ ДА. Нехорновский дизъюнкт (13) с тремя НЕ не работает в ПРОЛОГЕ, хотя сообщения об ошибке не формируется. Однако нехорновский дизъюнкт "есть(х,скалолаз):спортсмен(х),НЕ(любит(х,до ждь))" работает в ПРОЛОГЕ.

Список литературы

1. Судоплатов С.В., Овчинникова Е.В. Математическая логика и теория алгоритмов: учебник. М.: ИНФРА-М4Новосибирск: Изд-во НГТУ, 2008. 224 с.

2. Морозенко В.В. Дискретная математика: учеб. пособие. Пермь, 2006. ISBN 5-79440608-9. 226. Библиогр. С. 223-224.

3. Лавров И.А. Математическая логика: учеб. пособие для вузов / под ред. Л.Л. Максимовой. М.: Академия, 2006. ISBN 5-76952735-8. 240. Библиогр.: 230 с.

4. Алябьева В.Г. Математическая логика. Пермь, 2017. ISBN 978-5-7944-2904-66. Библиогр.: с. 19-21, 110.

5. Основы программирования на языке Пролог. Курс лекций: учеб. пособие / П.А Шрайнер. URL:

http://www.stepanoff.info/lisp/materials/prol og. pdf (дата обращения: 13.04.2019).

6. Аляев Ю.А., Тюрин С.Ф. Дискретная математика и математическая логика. М.: Финансы и статистика, 2006. 357 с.

7. Залогова Л.А. Формальное описание логического вывода в ПРОЛОГЕ // Вестник Пермского университета. Математика. Механика. Информатика. 2014. № 4(27). С. 84-91.

Features of logical inference in PROLOG-programs

S. F. Tyurin

Perm National Research Polytechnic University; 29, Komsomolsky Av., Perm, 614990, Russia Perm State University; 15, Bukireva st., Perm, 614990, Russia tyurinsergfeo@yandex.ru; +7 952-320-02-510

A. Yu. Gorodilov

Perm State University; 15, Bukireva st., Perm, 614990, Russia gora830@yandex.ru; +7-902-83-07-328

The logical conclusion is based on the resolution method, which assumes proof by contradiction by obtaining resolvents from the original set of clauses. If an empty clause is deduced (empty set), the conclusion is considered correct. The PROLOG language, as a logic programming language, is based on the first-order logic of predicates. However, there are significant differences in the withdrawal procedures. The article on a specific example discusses the features of logical inference, based on the logic of predicates and logical inference in a program in the language of PROLOG.

Keywords: inference; resolvent; disjunct; program.

i Надоели баннеры? Вы всегда можете отключить рекламу.