Нижние единицы
Эта статья в значительной степени или полностью опирается на один источник . ( апрель 2014 г. ) |
Эта статья может быть слишком технической для понимания большинства читателей . ( Апрель 2014 г. ) |
При сжатии доказательств LowerUnits ( LU ) — это алгоритм, используемый для сжатия доказательств разрешения логики высказываний . Основная идея LowerUnits заключается в использовании следующего факта: [1]
Theorem: Let be a potentially redundant proof, and be the redundant proof | redundant node. If ’s clause is a unit clause, then is redundant.
Алгоритм нацелен именно на класс глобальной избыточности , возникающий из-за множественных разрешений с единичными предложениями. Алгоритм получил свое название от того факта, что, когда эта перезапись выполняется и полученное доказательство отображается в виде DAG ( ориентированного ациклического графа ), единичный узел оказывается ниже (т. е. ближе к корню), чем это было в исходном доказательстве.
Теорема, использующая наивную реализацию, потребует прохождения и фиксации доказательства после опускания каждого единичного узла. Однако можно добиться большего, сначала собрав и удалив все единичные узлы за один обход, а затем исправив все доказательство за один второй обход. Наконец, собранные и фиксированные единичные узлы необходимо снова вставить в конец доказательства.
Необходимо соблюдать осторожность в случаях, когда узел узла встречается выше в дополнительном доказательстве, которое выводит еще один единичный узел . В таких случаях зависит от . Позволять быть единственным литералом единичного предложения . Тогда любое появление в поддоказательстве выше не будут отменены резолюцией выводов с больше. Следовательно, будет распространяться вниз, когда доказательство будет зафиксировано, и появится в пункте . Трудностей с такими зависимостями можно легко избежать, если повторно вставить верхний единичный узел. после повторной вставки единичного узла (т.е. после повторной установки, должен появиться ниже , чтобы отменить дополнительный литерал от пункт). Этого можно добиться, собирая единичные узлы в очередь во время обхода доказательства снизу вверх и повторно вставляя их в том порядке, в котором они были поставлены в очередь.
Алгоритм исправления доказательства, содержащего множество корней, выполняет обход доказательства сверху вниз, пересчитывает резольвенты и заменяет сломанные узлы (например, узлы, у которых удален NodeMarker в качестве одного из своих родителей) их выжившими родителями (например, другим родителем, в случае, если один из них удален). родительский элемент был удаленNodeMarker).
Когда единичные узлы собираются и удаляются из доказательства утверждения и доказательство зафиксировано, пункт в корневом узле нового доказательства не равно больше, но содержит (некоторые) двойственные литералы единичных предложений, которые были удалены из доказательства. Повторная вставка единичных узлов внизу доказательства решает проблему. с положениями (некоторых) собранных единичных узлов, чтобы получить доказательство снова.
Алгоритм
[ редактировать ]Общая структура алгоритма
Algorithm LowerUnits Input: A proof Output: A proof with no global redundancy with unit redundant node
(unitsQueue, ) ← collectUnits(); ← fix(); fixedUnitsQueue ← fix(unitsQueue); ← reinsertUnits(, fixedUnitsQueue); return ;
- « ←» означает присвоение . Например, « самый большой ← элемент » означает, что значение самого большого изменяется на значение элемента .
- « return » завершает алгоритм и выводит следующее значение.
Мы собираем пункты блока следующим образом.
Algorithm CollectUnits Input: A proof Output: A pair containing a queue of all unit nodes (unitsQueue) that are used more than once in and a broken proof
← ; traverse bottom-up and foreach node in do if is unit and has more than one child then add to unitsQueue; remove from ; end end return (unitsQueue, );
- « ←» означает присвоение . Например, « самый большой ← элемент » означает, что значение самого большого изменяется на значение элемента .
- « return » завершает алгоритм и выводит следующее значение.
Затем снова вставляем единицы
Algorithm ReinsertUnits Input: A proof (with a single root) and a queue of root nodes Output: A proof
← ; while do ← first element of ; ← tail of ; if is resolvable with root of then ← resolvent of with the root of ; end end return ;
- « ←» означает присвоение . Например, « самый большой ← элемент » означает, что значение самого большого изменяется на значение элемента .
- « return » завершает алгоритм и выводит следующее значение.
Примечания
[ редактировать ]- ^ Фонтейн, Паскаль; Мерц, Стефан; Вольценлогель Палео, Бруно. Сжатие доказательств разрешения высказываний посредством частичной регуляризации . 23-я Международная конференция по автоматизированному дедукции, 2011 г.