Сжатие положительного DNF

Я хотел бы сжать позитивные пропозициональные формулы в дизъюнктивной нормальной форме (DNF).

Я только предполагаю простой DNF на данный момент без отрицательных литералов. Обратный процесс, декомпрессия может быть легко определена. Для формулы, построенной только из конъюнкции и дизъюнкции, следующие правила перезаписи будут генерировать DNF:

A & (B v C) --> (A & B) v (A & C)
(A v B) & C --> (A & C) v (B & C)

Вот пример декомпрессии:

Example: Decompression
Input:
  (p & (q v r) & s & (t v u)) v
  w.

Output:
  (p & q & s & t) v
  (p & r & s & t) v
  (p & q & s & u) v
  (p & r & s & u) v
  w.

Теперь мне интересно, существуют ли какие-нибудь алгоритмы, которые могут генерировать одну формулу обратно из DNF. Я уже изучил бинарные диаграммы решений. Проблема, с которой я столкнулся, заключается в том, что они не могут объединить все различия на пути.

Например, алгоритмы для бинарных диаграмм решений, которые используют совместное использование, будут по-прежнему показывать похожие ветви во время печати и / или вводить новые предложные переменные, обе вещи нежелательны:

Example: Compression (Bad)
Input:
  (p & q & s & t) v
  (p & r & s & t) v
  (p & q & s & u) v
  (p & r & s & u) v 
  w.

Output:
  (p & ((q & s & (t v u)) v (r & s & (t v u)))) v
  w.

- or -

Output:
  (p & ((q & h) v (r & h))) & (h <-> s & (t v u))) v
  w.

Результатом должна быть одна формула, а не DNF, которая является более компактной, чем алгоритмы двоичной диаграммы решений, в которой используются только дизъюнкция и конъюнкция, а также переменные предложения, уже найденные в исходном DNF. Вот пример желаемого сжатия:

Example: Compression (Good)
Input:
  (p & q & s & t) v
  (p & r & s & t) v
  (p & q & s & u) v
  (p & r & s & u) v
  w.

Output:
  (p & (q v r) & s & (t v u)) v
  w.

Что бы вы взяли? Пролог реализации предпочтительнее.

до свидания

1 ответ

Я думаю, что вам нужен систематический алгоритм для вычисления минимума логического выражения в двух слоях (либо дизъюнкция конъюнкций входных переменных, либо конъюнкция дизъюнкций входных переменных).

Обычные алгоритмы, используемые для этого, - карты Карно и алгоритмы Куайна-МакКласки.

Эти алгоритмы работают с отрицательными переменными. В любом случае, по крайней мере, если ваши входные данные имеют дизъюнктивную нормальную форму (DNF) и не отображаются отрицательные переменные, выходные данные, выраженные как дизъюнкция соединения входных переменных, также не будут иметь отрицательные переменные).

Другие вопросы по тегам