Распространение единиц ( UP ) или распространение булевых ограничений ( BCP ) или правило одной буквы ( OLR ) — это процедура автоматизированного доказательства теорем , которая может упростить набор (обычно пропозициональных ) предложений .
Процедура основана на единичных предложениях , т.е. предложениях, которые состоят из одного литерала в конъюнктивной нормальной форме . Поскольку каждое предложение должно быть удовлетворено, мы знаем, что этот литерал должен быть истинным. Если набор предложений содержит единичное предложение , другие предложения упрощаются путем применения двух следующих правил:
Применение этих двух правил приводит к новому набору положений, эквивалентному старому.
Например, следующий набор предложений можно упростить путем распространения единиц, поскольку он содержит предложение единицы .
Так как содержит литерал , этот пункт можно полностью удалить. Так как содержит отрицание литерала в предложении единицы, этот литерал можно удалить из предложения. Предложение единицы не удаляется; это сделало бы результирующий набор не эквивалентным исходному; этот пункт можно удалить, если он уже сохранен в какой-то другой форме (см. раздел «Использование частичной модели»). Эффект распространения единицы можно обобщить следующим образом.
(удаленный) | ( удалено) | (без изменений) | (без изменений) | ||
Полученный набор предложений эквивалентен предыдущему. Новое предложение единицы , которое получается в результате распространения единицы, может быть использовано для дальнейшего применения распространения единицы, что преобразуется в .
Второе правило распространения единиц можно рассматривать как ограниченную форму резолюции , в которой один из двух резольвент всегда должен быть предложением единицы. Что касается резолюции, распространение единиц является правильным правилом вывода, поскольку оно никогда не производит новое предложение, которое не было бы выведено из старых. Различия между распространением единиц и разрешением следующие:
Исчисления разрешений, включающие включение, могут моделировать правило один путем включения, а правило два — путем единичного шага разрешения с последующим включением.
Распространение единиц, применяемое повторно по мере генерации новых единичных предложений, является полным алгоритмом выполнимости для наборов пропозициональных предложений Хорна ; он также генерирует минимальную модель для набора, если он выполним: см. Хорновская выполнимость .
Единичные предложения, которые присутствуют в наборе предложений или могут быть выведены из него, могут быть сохранены в форме частичной модели (эта частичная модель может также содержать другие литералы, в зависимости от приложения). В этом случае распространение единиц выполняется на основе литералов частичной модели, и единичные предложения удаляются, если их литерал находится в модели. В приведенном выше примере единичное предложение будет добавлено к частичной модели; упрощение набора предложений затем будет продолжаться, как указано выше, с той разницей, что единичное предложение теперь удалено из набора. Результирующий набор предложений эквивалентен исходному при предположении о действительности литералов в частичной модели.
Прямая реализация распространения единиц занимает время, квадратичное по отношению к общему размеру проверяемого набора, который определяется как сумма размеров всех предложений, где размер каждого предложения равен количеству содержащихся в нем литералов.
Однако распространение единиц может быть выполнено за линейное время путем сохранения для каждой переменной списка предложений, в которых содержится каждый литерал. Например, набор выше может быть представлен путем нумерации каждого предложения следующим образом:
и затем для каждой переменной сохраняется список предложений, содержащих переменную или ее отрицание:
Эта простая структура данных может быть построена за время, линейное по размеру набора, и позволяет очень легко находить все предложения, содержащие переменную. Распространение единиц литерала может быть эффективно выполнено путем сканирования только списка предложений, содержащих переменную литерала. Точнее, общее время выполнения распространения единиц для всех предложений единиц линейно по размеру набора предложений.