Как спроектировать файл CNF из заданной модели объектов? - PullRequest
0 голосов
/ 28 сентября 2018

Я столкнулся с проблемой при разработке файла CNF (конъюнктивная нормальная форма) из заданной модели объектов.Например, в SPL есть общая модель объектов.

   A
 / | \
B  C  D
  • A, B, C и D - это 4 функции.
  • B является обязательной подфункцией A
  • C и D являются двумя дополнительными подфункциями A .

Как я могу записать файл CNF с вышеуказанными ограничениями?Любая помощь приветствуется!

Возможно, файл CNF выглядит следующим образом:

c 1 A
c 2 B
c 3 C
c 4 D
p cnf 4 X
...

1 Ответ

0 голосов
/ 24 октября 2018

Предложенный вами формат уже похож на формат DIMACS.В этом формате файл содержит строку для каждого предложения CNF.

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

... // your lines go here
-1 2 0 // A implies B
-2 1 0 // B implies A
-3 1 0 // C implies A
-4 1 0 // D implies A

Трейлинг 0 служит концом строки или концом предложения.Первые две строки переводятся с A ↔ B.Поскольку это то же самое, что и A → B ^ B → A Вы можете проверить Википедию о том, как семантика модели объектов преобразуется в логические формулы.

Также есть несколько инструментов для создания cnf изданная модель объекта.Например, FeatureIDE позволяет создавать модель объектов с помощью графического интерфейса, а затем вы можете экспортировать ее в формате dimacs.Этот формат позволяет вам использовать несколько других инструментов, таких как SAT4J, для работы с вашей моделью.

РЕДАКТИРОВАТЬ: Интересно, что именно вы подразумеваете под SPL?

...