Лекция 17. Отрицание в логическом программировании. Оператор not ... (1161888), страница 3
Текст из файла (страница 3)
д.Каждый тип данных определяется множеством констант,обозначающих элементы этого типа данных. Например,boolean = {true, false}.Тогда в каждом типе данных вводятся необходимыеотношения, присущие элементам этого типа. Например, в типеданных integer можно ввести отношения сравнения<, <=, >=, >, и др.ВСТРОЕННЫЕ ФУНКЦИИ И ПРЕДИКАТЫТипы данныхПример? 2 t< 3εt?ВСТРОЕННЫЕ ФУНКЦИИ И ПРЕДИКАТЫТипы данныхПример? 2 t< 3εt?? 1 + 1t < 5 − 2failureВСТРОЕННЫЕ ФУНКЦИИ И ПРЕДИКАТЫТипы данныхДля введенных типов данных можно ввести встроенныефункции (операции), присущие элементам этих типовНапример, в типе данных integer можно ввести двухместныефункции (операции) +, −, ×, div, и др.Однако чтобы вычисленные значения можно было передаватьпеременным, необходимо специальное средство. Предикатравенства = для этой цели не годится, поскольку онзанимается лишь унификацией термов.? X =t 2 + 3θ = {X /2 + 3}t?ПРЕДИКАТ ВЫЧИСЛЕНИЯ ЗНАЧЕНИЙПредикат вычисления значений is — это встроенный предикат,предназначенный для вычисления значений встроенныхфункций.
Операционная семантика этого предиката задаетсяследующими правилами.Условимся использовать запись val(t) для обозначениязначение терма t, составленного из встроенных функций иконстант. Тогда...? tt1 is t2θ⇔t1 ∈ Var ,определено val(t2 )t?θ = {t1 /val(t2 )}ПРЕДИКАТ ВЫЧИСЛЕНИЯ ЗНАЧЕНИЙПредикат вычисления значений is — это встроенный предикат,предназначенный для вычисления значений встроенныхфункций. Операционная семантика этого предиката задаетсяследующими правилами.Условимся использовать запись val(t) для обозначениязначение терма t, составленного из встроенных функций иконстант.
Тогда...? tt1 is t2θ⇔t1 ∈ Var ,определено val(t2 )t?θ = {t1 /val(t2 )}ПРЕДИКАТ ВЫЧИСЛЕНИЯ ЗНАЧЕНИЙПредикат вычисления значений is — это встроенный предикат,предназначенный для вычисления значений встроенныхфункций. Операционная семантика этого предиката задаетсяследующими правилами.Условимся использовать запись val(t) для обозначениязначение терма t, составленного из встроенных функций иконстант. Тогда...? tt1 is t2θt?⇔? t1 tis t2t1 ∈ Var ,определено val(t2 ) failureθ = {t1 /val(t2 )}⇔в остальныхслучаяхПРЕДИКАТ ВЫЧИСЛЕНИЯ ЗНАЧЕНИЙПример? X is 3t+ 2{X /5}t?ПРЕДИКАТ ВЫЧИСЛЕНИЯ ЗНАЧЕНИЙПример? X is 3t+ 2{X /5}t?? X is Yt + 1failureПРЕДИКАТ ВЫЧИСЛЕНИЯ ЗНАЧЕНИЙПример? X is 3t+ 2{X /5}t?3 + 1 ist 4failureМОДИФИКАЦИЯ БАЗ ДАННЫХОбычно логическая программа P разделяется на две части —систему правил Pclauses и базу данных Pdatabase .
База данныхсостоит из всех основных фактов программы.Система правил Pclauses представляет, по сути дела, алгоритмрешения задачи, и его неразумно изменять по ходу решениязадачи.А вот базу данных Pdatabase по ходу вычисления можномодиифцировать. И для этой цели в системах логическогопрограммирования есть специальные встроенные операторыпополнения и сокращения базы данных.МОДИФИКАЦИЯ БАЗ ДАННЫХОператор пополнения базы данных assert(A), где A — атом,добавляет к базе данных факт A ←;? X is 2 + 2, tassert(Oценка(X ))PX /4?? assert(A)tP? assert(Oценка(4))tεεt??tP ∪ {A ←; }PP ∪ {Oценка(4) ←; }МОДИФИКАЦИЯ БАЗ ДАННЫХОператор пополнения базы данных assert(A), где A — атом,добавляет к базе данных факт A ←;? X is 2 + 2, tassert(Oценка(X ))PX /4?? assert(A)tP? assert(Oценка(4))tεεt??tP ∪ {A ←; }PP ∪ {Oценка(4) ←; }Поскольку в логических программах правила и фактыупорядочены, нужны два варианта оператора пополнения базданных: asserta(A) и assertz(A).МОДИФИКАЦИЯ БАЗ ДАННЫХОператор сокращения базы данных retract(A), где A — атом,удаляет из базы данных факт A ←;? Есть(X ), retract(Xt ), not(Есть())X /ЯP = {Есть(Я) ←; }?? retract(Я),tnot(Есть(Я))εP = {Есть(Я) ←; }?? retract(A)tP? not(Есть(Я))tεεt??tP \ {A ←; }P=∅P=∅МОДИФИКАЦИЯ БАЗ ДАННЫХТворческая задачаА что если разрешить в теле правила использовать наряду сатомами также и программные утверждения? Как то,например,A0 ← A1 , .
. . , Ai , (B0 ← B1 , . . . , Bm ), Ai+1 , . . . , An ;илиA0 ← A1 , . . . , Ai , (B0 ←), Ai+1 , . . . , An ;1. Как определить разумную декларативную семантику таких«составных» правил?2. Как определить адекватную операционную семантикутаких правил?3. Можно ли определить адекватную операционнуюсемантику «составных» правил на основе резолютивноговывода?КОНЕЦ ЛЕКЦИИ 17..