Привет!
У меня интересная курсовая, думаю, есть что обсудить. На самом деле, пишу с целью именно поразмышлять, а не получить помощь.
Необходимо избавиться от
внешнего квантора существования в формулах вида

В качестве условий могут быть только
линейные уравнения
Например, для формулы

программа должна выводить

Более сложная:


Если необходимо, могу привести еще несколько примеров. Понятно, что для больших формул на выходе будут получатся страшнейшие
ДНФ.
Выполнить программу необходимо на одном из диалектов Пролога.
Здесь предлагаю обсуждать алгоритм в целом, не зацикливаясь на конкретных технических средствах. С другой стороны, пролог - мощное средство для решения такого рода задач, так что целиком абстрагироваться не получится.
Мои размышления:
Необходимо хранить некую базу знаний про переменные и константы, уметь объединять базы знаний (or, and), уметь
умно добавлять значения в базу. Например: в БЗ хранится информация, что

. Тогда, при попытке добавить факт

, эта ветка должна обрываться. Еще, видимо, надо постоянно поддерживать ДНФ.
Необходимо обрабатывать такие ситуации:
БЗ:

при добавлении

, ветка должна обрываться. Как это делать не совсем понятно, первое что приходит в голову - при добавлении

просматривать уже известные факты про а и дописывать избыточное условие

. Но это едва ли хороший тон.
Для начала предлагаю обсудить алгоритм работы описанного аппарата БЗ, или предложить что-нибудь взамен.
Кто-нибудь сталкивался с подобными задачами? Есть какие-нибудь классические алгоритмы?
Заранее спасибо, надеюсь на конструктивный диалог.
-- Сб апр 09, 2011 12:40:36 --
Это, очевидно, программа тоже должна уметь делать...