Сжатие положительной ДНФ

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

На данный момент я предполагаю только простой 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.

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

Пока


person Mostowski Collapse    schedule 05.09.2012    source источник
comment
Эта проблема известна как многоуровневая логическая оптимизация. . Это форма факторизации.   -  person Ioannis Filippidis    schedule 09.01.2018


Ответы (1)


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

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

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

person gusbro    schedule 05.09.2012
comment
Звучит интересно. Что вы имеете в виду под двумя уровнями? Я не ограничиваю результат простым чередованием & и v, он также может быть более глубоким. - person Mostowski Collapse; 05.09.2012
comment
Также не уверен, решит ли Куайн – МакКласки мою проблему, поскольку он использует обозначение A ', которое обозначает отрицательный литерал. Но у меня не будет никаких отрицательных литералов, поэтому основная проблема заключается в том, чтобы не применять A v A '= 1 или что-то в этом направлении. - person Mostowski Collapse; 05.09.2012
comment
Что касается вопроса, вы уже можете принять минимальный DNF в качестве входных данных! Затем найдите в качестве вывода что-то, что не является DNF или CNF, но меньше. Это поставленная проблема. - person Mostowski Collapse; 05.09.2012
comment
Да, это то, что дадут Карно или Куайн-МакКласки. Если ваш ввод не имеет отрицательной логики, на выходе тоже не будет. - person gusbro; 05.09.2012
comment
Но мне нужен алгоритм, который дополнительно массирует DNF. Вопрос не в том, чтобы минимизировать ДНФ. Но превратить это в меньшую не-DNF. - person Mostowski Collapse; 05.09.2012
comment
Извините, в моем комментарии (удален) я заявил, что эти алгоритмы будут давать DNF / CNF, но я действительно имел в виду, что они дают минимальные выражения, которые являются объединением дизъюнкций или дизъюнкций союзов, и это было то, что вы показали как ожидаемый результат в вашем примере . - person gusbro; 05.09.2012
comment
Также без отрицания возможны некоторые упрощения, например A v (A & B) = A. Но главное упрощение, которое меня интересует, - это обратное правилу перезаписи декомпрессии: (A & B) v (A & C) - ›A & (B v C), (A & C) v (B & C) -› (A v B) & C. Не уверен, с чего начать это реализовать. - person Mostowski Collapse; 05.09.2012
comment
Пример теперь дизъюнкция конъюнктуры дизъюнкции. Но я предполагаю, что результат может быть сколь угодно глубоким, подобно тому, как диаграммы двоичных решений (BDD) могут быть произвольно глубокими в чередовании конъюнкции и дизъюнкции. Но Куайн-МакКласки - интересный пример, поскольку я уже думал о работе с длиной входных соединений. - person Mostowski Collapse; 05.09.2012
comment
Этот ответ касается минимизации двухуровневой логики. - person Ioannis Filippidis; 09.01.2018