Работа с логическими функторами в Прологе - PullRequest
4 голосов
/ 25 ноября 2011

Я хочу иметь логические связки, такие как

not(X), conj(X, Y), some(Y, K). и я хочу иметь возможность перебирать их.

Так, например, я хочу иметь возможность конвертировать не (некоторые (Y, K)) во все (Y, а не (K)).

Я не хочу, чтобы они имели какое-то конкретное значение, я просто хочу работать с логическими формулами таким образом.

Какой лучший способ сделать это?

Вот фактическая строка в моем коде:

nnf(not(all(X, Y)) ,some(Z, W))     :- nnf(X, Z), nnf(not(Y), W).

Так что, если я дам его not(all(a,b)) Я хочу вернуть некоторые (а, а не (б)), но, я не знаю, как заставить Пролога обработать not/1 и all/2 таким образом .

Ответы [ 2 ]

2 голосов
/ 25 ноября 2011

Здесь нет единственного лучшего способа.Это немного зависит от вашего конкретного использования.

Ваш вопрос существенно сводится к тому, как переменные должны быть представлены в ваших настройках.К наземному сроку?Это (Пролог) свободное представление переменной.Или непосредственно по переменным Пролога.

Я бы лучше сначала попробовал основательное представление.Может быть, попробуйте v(Nr) с Nr целым числом.Относительно частым является '$VAR'(Nr), который также распознается writeq/1.Но я бы придерживался v/1 в начале.

1 голос
/ 26 ноября 2011

Взгляните на проект Thea . Он разрабатывает библиотеку Prolog для управления онтологиями OWL2. Может быть, они уже реализовали нормальное преобразование формы отрицания.

...