Россия |
Моделирование дедуктивного и индуктивного мышления с помощью языка логического вывода ПРОЛОГ
Дедуктивное мышление
Для проверки корректности формулировки, решим задачу логического вывода методом дедуктивного мышления. Процедуры этого вывода встроены в язык ПРОЛОГ. Сформулируем цель, т.е. определим ту конкретную задачу, для решения которой достаточно (или не достаточно) имеющихся знаний.
Например, поставим целью выявление всех пар (X, Y), для которых справедливо отношение сестра(Х, Y). Для этого используется метод прямого, пошагового перебора вариантов связывания переменных, с возвратом к предыдущему шагу в случае образующегося противоречия. Этот метод называется backtracking. Он воспроизводит стратегию "ветвей и границ", где "границы" определяются логически противоречивыми действиями, не допускающими развитие варианта связывания переменных. Про противоречивую попытку связывания переменного говорят: не проходит унификация. Установление факта унификации не всегда возможно "внутри" языка ПРОЛОГ. Часто должны быть привлечены другие знания "физического смысла задачи".
Расшифруем правило:
сестра(Х, Y) :- женщина (Х), родитель(Р, Х); родитель(Р, Y), X<>Y.
Первый шаг связывания переменных – Х = Марья. Для сокращения анализируемых при переборе записей, высказывания со всеми связанными переменными исключаются. Преобразуемая далее запись принимает вид
родитель(Р, Марья), родитель(Р, Y), Марья<>Y
В процедуре "родитель" находим высказывание родитель(Елена, Марья) и полагаем Р = Елена. Преобразуемая далее запись принимает вид
родитель(Елена, Y), Марья<>Y.
Первое по порядку значение Y = Марья приводит к противоречию. Находим другое высказывание - родитель(Елена, Фёдор). Преобразуем запись:
Марья<>Фёдор. Унификация проходит – одна пара "сестра – брат" найдена.
Продолжим поиск других пар. На предыдущем шаге ищем другое подходящее значение Р, но его нет. Возвращаемся ещё на шаг назад и полагаем Х = Елена. Преобразуемая запись принимает вид
родитель(Р, Елена), родитель(Р, Y), Елена<>Y.
Получаем противоречие (не проходит унификация), так как в процедуре "родитель" нет информации о родителе Елены.
Пробуем значение Х = Ольга. Запись принимает вид
родитель(Р, Ольга), родитель(Р, Y), Ольга<>Y.
Вновь не проходит унификация, так как родители Ольги неизвестны.
Пробуем последнее значение Х = Ирина. Запись принимает вид
Родитель(Р, Ирина), родитель(Р, Y), Ирина<>Y.
Варианты связывания переменной Р на данном шаге backtracking’а проходят унификацию лишь при Р = Ольга. Запись принимает вид
родитель(Ольга, Y), Ирина<>Y.
В процедуре "родитель" находим не исследованное ранее высказывание родитель(Ольга, Пётр) и полагаем Y = Пётр. Запись вырождается: Ирина<>Пётр, что вполне справедливо, то есть, унификация проходит.
Продолжив перебор, убеждаемся, что с данным отношением родства существуют только две пары: (Марья, Фёдор) и (Ирина, Пётр).
На основе сделанных выводов развивается фактографическая нейронная сеть, что частично представлено на рис. 2.