В математической логике сжатие доказательств с помощью RecycleUnits [1] — это метод сжатия доказательств пропозициональной логики . Его основная идея заключается в использовании промежуточных (например, не входных) результатов доказательств, являющихся единичными предложениями , т. е. предложениями, содержащими только один литерал. Некоторые узлы доказательств могут быть заменены узлами, представляющими эти единичные предложения. После этой операции полученный граф преобразуется в допустимое доказательство. Выходное доказательство короче исходного, при этом являясь эквивалентным или более сильным.
Алгоритмы рассматривают доказательства разрешения как направленные ациклические графы , где каждый узел помечен предложением, и каждый узел имеет одного или двух предшественников, называемых родителями. Если у узла два родителя, он также помечен пропозициональной переменной, называемой точкой опоры, которая использовалась для вычисления предложения узлов с использованием резолюции.
Следующий алгоритм описывает замену узлов.
Предполагается, что в доказательстве разрешения для всех нелистовых узлов с двумя родительскими узлами левый родительский узел содержит положительную, а правый родительский узел — отрицательную переменную опоры. Алгоритм сначала выполняет итерацию по всем нелистовым предложениям единиц, а затем по всем непредковым узлам доказательства. Если элемент опоры узла является переменной литерала текущего предложения единицы, один из родительских узлов может быть заменен узлом, соответствующим предложению единицы. Из-за вышеуказанного предположения, если литерал равен точке опоры, левый родительский узел содержит литерал и может быть заменен узлом предложения единицы. Если литерал равен отрицанию точки опоры, заменяется правый родительский узел.
1 функция RecycleUnits(Доказательство ):2 Пусть будет множеством нелистовых узлов, представляющих единичные предложения3 за каждое действие 4 Отметьте предков u5 для каждого неотмеченного do 6 пусть будет опорной переменной 7 пусть будет литералом, содержащимся в предложении 8 если то 9 замените левого родителя на 10 иначе если то 11 замените правого родителя на
В общем случае после выполнения этой функции доказательство больше не будет законным доказательством. Следующий алгоритм берет корневой узел доказательства и конструирует из него законное доказательство. Вычисление начинается с рекурсивных вызовов дочерних узлов. Чтобы минимизировать вызовы алгоритма, отслеживается, какие узлы уже были посещены. Обратите внимание, что доказательство разрешения можно рассматривать как общий направленный ациклический граф, а не как дерево. После рекурсивного вызова предложение текущего узла обновляется. При этом могут возникнуть четыре различных случая. Текущая опорная переменная может встречаться в обоих, левом, правом или ни в одном из родительских узлов. Если она встречается в обоих родительских узлах, предложение вычисляется как резольвента родительских предложений. Если она отсутствует в одном из родительских узлов, предложение этого родителя может быть скопировано. Если оно отсутствует в обоих родительских узлах, необходимо выбрать эвристически.
1 функция ReconstructProof(Node ):3 если посещено вернуть 4 отметить как посещенное5 если нет родителей вернуть 6 иначе если есть только один родитель , то 7 ReconstructProof( ) 8 .Пункт = .Пункт9 else 10 пусть будет левым и правым родительским узлом11 пусть будет опорной переменной, используемой для вычисления 12 ReconstructProof( )13 РеконструкцияДоказательство( )14 если и 15 .Предложение = Resolve( , , )16 иначе если и 17 .Предложение = .Предложение18 удалить ссылку на 19 else if и 20 .Clause = .Clause 21 удалить ссылку на 22 иначе 23 пусть и //выбрать x эвристически24 .Пункт = .Пункт25 удалить ссылку на
Рассмотрим следующее доказательство резолюции.
Один промежуточный результат — это , который представляет единичное предложение (-1).
Имеется один непредковый узел, использующий переменную 1 в качестве опорного элемента: .
Литерал -1 содержится в правом родителе этого узла, и поэтому этот родитель заменяется на . Строка обозначает ссылку на предложение (структура теперь представляет собой направленный ациклический граф, а не дерево).
Эта структура больше не является законным доказательством, поскольку не является резольвентой и . Поэтому ее нужно снова преобразовать в одну.
Первым шагом является обновление . Поскольку опорная переменная 1 появляется в обоих родительских узлах, вычисляется как их резольвента.
Левый родительский узел не содержит опорную переменную, поэтому предложение этого родителя копируется в предложение . Связь между и удаляется, и поскольку других ссылок на этот узел нет, его можно удалить.
Снова левый родительский элемент не содержит опорную переменную, и выполняется та же операция, что и раньше.
Примечание: ссылка была заменена фактическим узлом доказательства .
Результатом этого доказательства является единичное предложение (3), которое является более сильным результатом, чем предложение (3,5) исходного доказательства.