Разрешение SLD ( выборочное линейное разрешение определенного предложения) — это базовое правило вывода , используемое в логическом программировании . Это уточнение разрешения , которое является как обоснованным , так и полным опровержения для предложений Хорна .
Дано целевое предложение, представленное как отрицание проблемы, которую необходимо решить:
с выбранным литералом и введенным определенным предложением :
положительный литерал (атом) которого объединяется с атомом выбранного литерала , разрешение SLD выводит другое целевое предложение, в котором выбранный литерал заменяется отрицательными литералами входного предложения, и применяется объединяющая подстановка:
В простейшем случае, в пропозициональной логике, атомы и идентичны, а унифицирующая подстановка пуста. Однако в более общем случае унифицирующая подстановка необходима, чтобы сделать два литерала идентичными.
Название «резолюция SLD» было дано Маартеном ван Эмденом для неназванного правила вывода, введенного Робертом Ковальски . [1] Его название происходит от резолюции SL, [2] которая является как обоснованной, так и полной для опровержения неограниченной клаузальной формы логики. «SLD» означает «резолюция SL с определенными предложениями».
В обоих языках, SL и SLD, «L» обозначает тот факт, что доказательство резолюции может быть ограничено линейной последовательностью предложений:
где "верхнее предложение" является входным предложением, а каждое второе предложение является резольвентой, одним из родителей которой является предыдущее предложение . Доказательство является опровержением, если последнее предложение является пустым предложением.
В SLD все предложения в последовательности являются целевыми предложениями, а другой родитель — предложением ввода. В разрешении SL другой родитель — это либо предложение ввода, либо предложение предка ранее в последовательности.
В обоих языках SL и SLD «S» означает тот факт, что единственный литерал, разрешенный в любом предложении, — это тот, который однозначно выбран правилом выбора или функцией выбора. В разрешении SL выбранный литерал ограничен тем, который был введен в предложение последним. В простейшем случае такая функция выбора «последним пришел — первым вышел» может быть определена порядком, в котором записаны литералы, как в Prolog . Однако функция выбора в разрешении SLD более общая, чем в разрешении SL и в Prolog. Нет никаких ограничений на литерал, который может быть выбран.
В клаузальной логике опровержение SLD демонстрирует, что входной набор предложений невыполним. Однако в логическом программировании опровержение SLD также имеет вычислительную интерпретацию. Верхнее предложение можно интерпретировать как отрицание конъюнкции подцелей . Вывод предложения из — это вывод с помощью обратного рассуждения нового набора подцелей с использованием входного предложения в качестве процедуры сокращения цели. Унифицирующая подстановка как передает входные данные из выбранной подцели в тело процедуры, так и одновременно передает выходные данные из головы процедуры в оставшиеся невыбранные подцели. Пустое предложение — это просто пустой набор подцелей, который сигнализирует о том, что начальная конъюнкция подцелей в верхнем предложении была решена.
Разрешение SLD неявно определяет дерево поиска альтернативных вычислений, в котором начальное предложение цели связано с корнем дерева. Для каждого узла в дереве и для каждого определенного предложения в программе, положительный литерал которого унифицируется с выбранным литералом в предложении цели, связанном с узлом, существует дочерний узел, связанный с предложением цели, полученным разрешением SLD.
Листовой узел, не имеющий потомков, является узлом успеха, если его ассоциированное предложение цели является пустым предложением. Это узел неудачи, если его ассоциированное предложение цели непустое, но его выбранный литерал не унифицируется ни с одним положительным литералом определенных предложений в программе.
Разрешение SLD является недетерминированным в том смысле, что оно не определяет стратегию поиска для исследования дерева поиска. Prolog ищет в глубину дерева, по одной ветви за раз, используя возврат, когда он сталкивается с узлом отказа. Поиск в глубину очень эффективен в использовании вычислительных ресурсов, но неполный, если пространство поиска содержит бесконечные ветви, и стратегия поиска ищет их в первую очередь, а не конечные ветви: вычисление не заканчивается. Возможны также другие стратегии поиска, включая поиск в ширину , наилучший первый и поиск ветвей и границ . Более того, поиск может выполняться последовательно, по одному узлу за раз, или параллельно, по многим узлам одновременно.
Разрешение SLD также является недетерминированным в том смысле, как упоминалось ранее, что правило выбора не определяется правилом вывода, а определяется отдельной процедурой принятия решения, которая может быть чувствительна к динамике процесса выполнения программы.
Пространство поиска разрешения SLD представляет собой дерево «или», в котором различные ветви представляют альтернативные вычисления. В случае программ пропозициональной логики SLD можно обобщить так, чтобы пространство поиска представляло собой дерево «и-или» , узлы которого помечены одиночными литералами, представляющими подцели, а узлы соединены либо конъюнкцией, либо дизъюнкцией. В общем случае, когда объединенные подцели совместно используют переменные, представление дерева «и-или» более сложное.
Дана логическая программа на языке Пролог :
в :- п .стр .
и цель высшего уровня:
в .
пространство поиска состоит из одной ветви, в которой q
сводится к p
, которая сводится к пустому набору подцелей, сигнализируя об успешном вычислении. В этом случае программа настолько проста, что нет никакой роли для функции выбора и нет необходимости в каком-либо поиске.
В клаузальной логике программа представлена набором предложений:
а цель верхнего уровня представлена предложением цели с одним отрицательным литералом:
Пространство поиска состоит из одного опровержения:
где представляет собой пустое предложение.
Если бы в программу был добавлен следующий пункт:
в :- р .
то в пространстве поиска будет дополнительная ветвь, чей листовой узел r
является узлом отказа. В Прологе, если бы это предложение было добавлено в начало исходной программы, то Пролог использовал бы порядок, в котором предложения написаны, для определения порядка, в котором исследуются ветви пространства поиска. Пролог сначала попробовал бы эту новую ветвь, потерпел бы неудачу, а затем вернулся бы к исследованию единственной ветви исходной программы и преуспел бы.
Если пункт
п :- п .
были теперь добавлены в программу, то дерево поиска будет содержать бесконечную ветвь. Если бы это предложение было опробовано первым, то Prolog вошел бы в бесконечный цикл и не нашел бы успешную ветвь.
SLDNF [3] — это расширение разрешения SLD для работы с отрицанием как неудачей . В SLDNF целевые предложения могут содержать отрицание как литералы неудачи, скажем, в форме , которые могут быть выбраны только в том случае, если они не содержат переменных. Когда выбирается такой литерал без переменных, предпринимается попытка поддоказательства (или подвычисления) определить, существует ли опровержение SLDNF, начинающееся с соответствующего неотрицаемого литерала как верхнего предложения. Выбранная подцель выполняется успешно, если поддоказательство не выполняется, и она не выполняется, если поддоказательство успешно.