RecycleUnits
В математической логике сжатие доказательств с помощью RecycleUnits [1] метод сжатия пропозициональной логики доказательств разрешения . Его основная идея состоит в том, чтобы использовать промежуточные (например, невходящие) результаты доказательства, представляющие собой единичные предложения , то есть предложения, содержащие только один литерал. Определенные узлы доказательства можно заменить узлами, представляющими эти единичные предложения. После этой операции полученный граф преобразуется в валидное доказательство. Выходное доказательство короче оригинала, но при этом эквивалентно или сильнее.
Алгоритмы
[ редактировать ]Алгоритмы рассматривают доказательства разрешения как ориентированные ациклические графы , где каждый узел помечен предложением и каждый узел имеет одного или двух предшественников, называемых родительскими. Если у узла есть два родителя, он также помечается пропозициональной переменной, называемой опорной точкой, которая использовалась для вычисления предложения узлов с использованием разрешения.
Следующий алгоритм описывает замену узлов.
Предполагается, что при доказательстве разрешения для всех нелистовых узлов с двумя родительскими узлами левый родительский узел содержит положительную, а правый родительский узел — отрицательную переменную поворота.
Алгоритм сначала перебирает все нелистовые элементы доказательства, а затем все непредшественные узлы доказательства. Если опорным элементом узла является переменная литерала текущего предложения unit, один из родительских узлов может быть заменен узлом, соответствующим этому предложению unit. Из-за вышеизложенного предположения, если литерал равен опорной точке, левый родительский элемент содержит литерал и может быть заменен узлом предложения единицы. Если литерал равен отрицанию опорной точки, правый родительский элемент заменяется.
1 function RecycleUnits(Proof ): 2 Let be the set of non leaf nodes representing unit clauses 3 for each do 4 Mark the ancestors of u 5 for each unmarked do 6 let be the pivot variable of 7 let be the literal contained in the clause of 8 if then 9 replace the left parent of with 10 else if then 11 replace the right parent of with
В общем, после выполнения этой функции доказательство перестанет быть юридическим доказательством. Следующий алгоритм берет корневой узел доказательства и строит из него законное доказательство. Вычисления начинаются с рекурсивного вызова дочерних узлов. Чтобы минимизировать количество вызовов алгоритма, отслеживается, какие узлы уже были посещены. Обратите внимание, что доказательство разрешения можно рассматривать как общий ориентированный ациклический граф, а не как дерево. После рекурсивного вызова предложение текущего узла обновляется. При этом могут произойти четыре различных случая. Текущая переменная поворота может встречаться в обоих, левом, правом или ни в одном из родительских узлов. Если это происходит в обоих родительских узлах, предложение рассчитывается как резольвент родительских предложений. Если его нет ни в одном из родительских узлов, предложение этого родителя можно скопировать. Если он отсутствует у обоих родителей, приходится выбирать эвристически.
1 function ReconstructProof(Node ): 3 if is visited return 4 mark as visited 5 if has no parents return 6 else if has only one parent then 7 ReconstructProof() 8 .Clause = .Clause 9 else 10 let be the left and the right parent node 11 let be the pivot variable used to compute 12 ReconstructProof() 13 ReconstructProof() 14 if and 15 .Clause = Resolve(,,) 16 else if and 17 .Clause = .Clause 18 delete reference to 19 else if and 20 .Clause = .Clause 21 delete reference to 22 else 23 let and //choose x heuristically 24 .Clause = .Clause 25 delete reference to
Пример
[ редактировать ]Рассмотрим следующее доказательство резолюции.
Один промежуточный результат который представляет собой предложение единицы измерения (-1).
Существует один узел, не являющийся предком, использующий переменную 1 в качестве ведущего элемента: .
Литерал -1 содержится в правом родительском элементе этого узла, поэтому этот родительский элемент заменяется на . Строка обозначает ссылку на пункт (структура теперь представляет собой ориентированный ациклический граф, а не дерево).
Эта структура больше не является юридическим доказательством, поскольку не является резольвентой и . Поэтому его необходимо снова превратить в одно.
Первый шаг — обновить . Поскольку сводная переменная 1 появляется в обоих родительских узлах, вычисляется как их резольвента.
Левый родительский узел не содержит сводную переменную, поэтому предложение этого родителя копируется в предложение . Связь между и удален, и поскольку других ссылок на этот узел можно удалить.
Опять левый родитель не содержит сводной переменной, и выполняется та же операция, что и раньше.
Примечание: ссылка был заменен фактическим узлом доказательства .
Результатом этого доказательства является пункт (3), который является более сильным результатом, чем пункты (3,5) исходного доказательства.
Примечания
[ редактировать ]- ^ Бар-Илан, О.; Фурманн, О.; Хори, С.; Шахам, О.; Стричман, О. Редукция доказательств разрешения за линейное время . Аппаратное и программное обеспечение: проверка и тестирование, стр. 114–128, Спрингер, 2011.