440 likes | 808 Views
ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ. ТРОИЧНАЯ ЛОГИКА. БИНАРНАЯ ЛОГИКА: ВЫВОД НА ОСНОВЕ ИМПЛИКАЦИЙ. rain → use_umbrella Если идет дождь, надо открыть зонтик Это не значит, что если нет дождя, зонтик использовать нельзя. Это значит только , что если зонтик закрыт, дождя нет В данном случае проблемы
E N D
ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ ТРОИЧНАЯ ЛОГИКА
БИНАРНАЯ ЛОГИКА: ВЫВОД НА ОСНОВЕ ИМПЛИКАЦИЙ rain → use_umbrella Если идет дождь, надо открыть зонтик • Это не значит, что если нет дождя, зонтик использовать нельзя. • Это значиттолько , что если зонтик закрыт, дождя нет В данном случае проблемы незнания не существует use_umbrella rain
БИНАРНАЯ ЛОГИКА: NEGATION AS FAILURE possible rain → take_umbrella Если возможен дождь, надо прихватить зонтик • Это не значит, что если дождь невозможен, зонтик брать нельзя. • Это значиттолько, что если зонтик оставлен дома, дождя не будет. НО если неизвестно, будет ли дождь, то take_umbrella – ложь (negation as failure)
БИНАРНАЯ ЛОГИКА: АСИММЕТРИЯ ИСТИНА БИНАРНАЯ ЛОГИКА ЛОЖЬ 0% 100% ДОСТОВЕРНОСТЬ
БИНАРНАЯ ЛОГИКА: АСИММЕТРИЯ ИСТИНА Любая неопределенность трактуется как ложь БИНАРНАЯ ЛОГИКА ЛОЖЬ 0% 100% ДОСТОВЕРНОСТЬ
БИНАРНАЯ ЛОГИКА: NEGATION AS FAILURE has_child(andrey,egor). % Андрей – родитель Егора spouse(andrey, julia). % Юлия – супруга Андрея Допущение замкнутого мира: julia– мачеха Егора , если spouse(andrey,julia) и not(has_child(julia,egor). Отсутствие факта = отрицание факта Допущение открытого мира: julia – мачеха Егора, если существуетXтакое, чтоhas_child(X,egor) и X \= julia. Факт отрицается если есть явный отрицающий факт
НЕЧЕТКАЯ ЛОГИКА: СИММЕТРИЯ ИСТИНА НЕЧЕТКАЯ ЛОГИКА БИНАРНАЯ ЛОГИКА ЛОЖЬ 0% 100% ДОСТОВЕРНОСТЬ
НЕЧЕТКАЯ ЛОГИКА: ОГРАНИЧЕНИЯ • Требуется оценка достоверности всех событий (не всегда возможна) • Зависимость событий (условные вероятности) • Фаззификация / дефаззификация • Вычислительная сложность
ТРОИЧНАЯ ЛОГИКА: ЗАЧЕМ? Существует класс задач, где • степень достоверности фактов не имеет значения; • главное – возможно ли достичь цели в принципе; • если цель недостижима при известных предпосылках, важно знать, что этому мешает
ТРОИЧНАЯ ЛОГИКА ИСТИНА Устраняется асимметрия, но при этом мы остаемся в дискретном пространстве ТРОИЧНАЯ ЛОГИКА ЛОЖЬ 0% 100% ДОСТОВЕРНОСТЬ
ПРЕОБРАЗОВАНИЕ БИНАРНЫХ ФАКТОВ В ТРОИЧНЫЕ
ПРЕОБРАЗОВАНИЕ БИНАРНЫХ ФАКТОВ В ТРОИЧНЫЕ Истинность факта: ternary(Subj,Pred,Obj,1) :- binary(Subj,Pred,Obj). Четвертый аргумент – признак достоверности +1 – истина -1 – ложь 0 – неопределенность (возможность)
ПРЕОБРАЗОВАНИЕ БИНАРНЫХ ФАКТОВ В ТРОИЧНЫЕ Ложность факта: ternary(Subj,hasSex,male,-1):- binary(Subj,hasSex, female). ternary(Subj,hasSex,female,-1):- binary(Subj, hasSex, male).
ПРЕОБРАЗОВАНИЕ БИНАРНЫХ ФАКТОВ В ТРОИЧНЫЕ Возможность факта: ternary(Subj,Pred,Obj,0):- not(binary(Subj,Pred,Obj)),not(ternary(Subj,Pred,Obj,-1)). Проблема: Асиома создается только при обработке запроса
ПРАВИЛА В ТРОИЧНОЙ ЛОГИКЕ Достоверность консеквента = минимум достоверностей антецедентов ternary(X,oppositeSex,Y,Cty) :- ternary(X,hasSex,male,Cty1), ternary(Y,hasSex,female,Cty2), Cty is min(Cty1,Cty2).
ДОКАЗАТЕЛЬСТВО В ТРОИЧНОЙ ЛОГИКЕ windy :- volkhov. windy :- kronstadt. petersburg :- kronstadt. rainy :- petersburg. umbrella_useless :- windy, rainy. kronstadt. ?- umbrella_useless.
[umbrella_useless] [windy, rainy] [volkhov, rainy] [kronstadt, rainy] [rainy] [petersburg] [ kronstadt] [ ] ДЕРЕВО РЕШЕНИЙ В БИНАРНОЙ ЛОГИКЕ
([umbrella_useless], 1) ([windy, rainy], 1) ([volkhov, rainy], 1) ([kronstadt, rainy], 1) ([rainy], 0) ([rainy], 1) ([petersburg], 0) ([petersburg], 1) ([kronstadt], 0) ([kronstadt], 1) ([ ], 0) ([ ], 1) ДЕРЕВО РЕШЕНИЙ В ТРОИЧНОЙ ЛОГИКЕ
МОДИФИЦИРОВАННАЯ ПРОГРАММА windy :- volkhov. windy :- kronstadt. petersburg :- kronstadt. rainy :- petersburg. umbrella_useless :- windy, rainy. volkhov :- fail. % нельзя находиться kronstadt.% в 2-х местах сразу ?- umbrella_useless.
([umbrella_useless], 1) ([windy, rainy], 1) ([volkhov, rainy], 1) ([kronstadt, rainy], 1) ([rainy], -1) ([rainy], 1) ([petersburg], 1) ([kronstadt], 1) ([ ], 1) ДЕРЕВО РЕШЕНИЙ (2)
ОБЪЯСНЕНИЕ РЕЗУЛЬТАТОВ Пусть решение имеет достоверность 0. Польза от такого решения → 0. Каких фактов не хватает для доказательства? [<консеквент>, [<факт1>],…, [<фактN>]]. <консеквент> был бы истинным, если бы истинными были <факт1>,…, <фактN>
МОДИФИЦИРОВАННОЕ ПРАВИЛО ДЛЯ Certainty=0 ternary(Subj,Pred,Obj,0,[Subj,Pred,Obj]) :- not(fact(Subj,Pred,Obj)), not(ternary(Subj, Pred, Obj, -1)). Для решений с достоверностью 0 возвращается список триплетов <субъект, предикат, объект> - фактов, истинность которых возможна, и в этом случае решение было бы истинным.
ОБЩИЙ ВИД ПРАВИЛА ДЛЯ ИСЧИСЛЕНИЯ ПРЕДИКАТОВ ternary(Subj,Pred,Obj, Cty, [Subj,Pred,Obj, [Cond1,Cond2,…]]) :- ternary(S1,P1,O1,Cty1,Cond1), Cty1>=0, … ternary(SN,PN,ON,CtyN,CondN), CtyN>=0, Cty is min(Cty1,…, CtyN).
ПРИМЕР ternary(X, canMarry, Y, Cty, [Cond1,Cond2)) :- ternary(X, hasOppositeSex,Y,Cty1,Cond1)), Cty1>=0, not(ternary(X,closeRelative,Y,Cty2,[‘NOT’|Cond2]),Cty2<=0, Ctyis max(Cty1, -Cty2). ternary(X,oppositeSex,Y,Cty, [X,oppositeSex,Y,[Cond1,Cond2]]) :- ternary(X,hasSex,male,Cty1,Cond1), Cty1>=0, ternary(Y,hasSex,female,Cty2,Cond2),Сty2>=0, Cty is min(Cty1, Cty2). binary(andrew, hasSex, male). [andrew, canMarry, julia, [andrew, oppositeSex, julia, [julia,hasSex,female]], [NOT,andrew, closeRelative, julia]]]
[andrew, canMarry, julia] NOT [andrew, oppositeSex, julia] [andrew, bloodRelative, julia] [Julia, hasSex, female] ВИЗУАЛИЗАЦИЯ РЕЗУЛЬТАТОВ
[clyde, avoid, jail] NOT [bonnie, witnessAgainst, clyde] NOT [bonnie, closeRelative, clyde] [bonnie, canMarry, clyde] NOT [bonnie, oppositeSex, clyde] [bonnie, bloodRelative, clyde] [bonnie, hasSex, female] ВИЗУАЛИЗАЦИЯ РЕЗУЛЬТАТОВ
ОСНОВНЫЕ ПОНЯТИЯ НА СЕГОДНЯ • Бинарная и нечеткая логика • Троичная логика • Объяснение результатов • Визуализация знаний
ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ ЛОГИКА ВЫСШЕГО ПОРЯДКА
УРОВНИ ЛОГИКИ • Пропозициональная логика (логика атомарных утверждений) • Логика первого порядка (логика предикатов, квантификация атомов) - Пролог • Логика второго порядка – квантификация предикатов
ЛЯМБДА-ИСЧИСЛЕНИЕ • Аппликация f a – вызовфункции f к значению a. • Абстракция. λx.t[x] – лямбда-функция от аргумента x, которая имеет вид t[x], обозначает функцию x |→ t[x]. Пример: (λx. x+4) 3 Результат 3+4 = 7
ЛЯМБДА-ПРОЛОГ ?- (x\ (x + 4)) = (y\ (y + 4)). solved ?- (x\ (x + 4)) 3 = 3 + 4 solved ?- F 3 = 3 + 4. F = x\ 3 + 4; F = x1\ x1 + 4 no more solutions
КВАНТИФИКАЦИЯ Для будем использовать лямбда-выражения для связывания переменных и константу pi для кванторов. Таким образом, цель приобретает вид pi ( X\ (X=X) ) и записывается pi ( p\ ( (p 0) => (p 0) )) Оба эти выражения завершаются успехом в качестве целей.
КВАНТИФИКАЦИЯ Примеры: ?- pix\ (x = x). solved ?- pi x\ ( pi y\ ( x = y)). no ?- pi x\ (x = (Y x)). Y = x\ x ; no more solutions
ВЫВОД С ИМПЛИКАЦИЯМИ Цель с использованием импликаций ?- P => Q решается добавлением P в программу и попыткой показать Q. Стандартные утверждения Пролога допускают только одну импликацию: a :- b. b :- c. ?- c => a Solved Заметим, что утверждение с в базе знаний отсутствует и добавлено только локально в контексте запроса.
БОЛЕЕ СЛОЖНЫЙ ПРИМЕР Более сложный пример добавления утверждения: a :- b. c. ?- (c => b) => a Solved Здесь c => b добавлено, что эквивалентно запросу ?- a. в программе a :- b. c. b :- c. ?- a. Solved
ВЫВОД С ИМПЛИКАЦИЯМИ (продолжение) Символ импликации => ассоциируется вправо. Это означает, что A => B => C эквивалентно A => ( B => C ). Таким образом, запрос на λProlog ?- (a =>(b =>c)) => (b=>(a=>c)) может быть записан с меньшим числом скобок ?- (a => b => c) => b => a => c Поиск для этого запроса сначала добавляет a => b => c в базу знаний, и это транслируется в утверждение Пролога c:-a,b и затем добавляет b и a. На этом обработка запроса завершается.
ПРИМЕР (от Дж. МкКарти) • Предмет является стерильным, если все организмы на нем мертвы. • Если организм находится на горячем объекте, организм мертв. • Эта банка горячая. • Следовательно, банка стерильна.
РЕАЛИЗАЦИЯ на λ-Прологе % Объявление типов type sterile (i -> o). type in (i -> i -> o). type heated (i -> o). type bug (i -> o). type dead (i -> o). type j i. % Программа sterile Jar :- pi x\ ( (bug x) => (in x Jar) => (dead x) ). dead X :- heated Y, in X Y, bug X. heated j. % Запрос ?- sterile j. solved
ПРЕИМУЩЕСТВА λ-Пролога Обычный Пролог: ancestor(X,Y) :- parent(X,Y). ancestor(X,Z) :- parent(X,Y), ancestor(Y,Z). λ -Пролог: type trans (A -> A -> o) -> (A -> A -> o). trans Pred X Y :- Pred X Y. trans Pred X Z :- Pred X Y, trans Pred Y Z. • это универсальное правило, в котором тип отношения – аргумент Мы можем использовать его, чтобы определить ancestor: ancestor X Y :- trans parent X Y.
ОСНОВНЫЕ ПОНЯТИЯ НА СЕГОДНЯ • Пропозициональная логика • Логика первого порядка • Исчисление предикатов • Логика высшего порядка • Лямбда-исчисление • Лямбда-Пролог