Я хочу иметь логические связки, такие как
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))
, я хочу получить обратно некоторое (а, а не (b)), но я не знаю, как заставить Пролог обрабатывать not/1
и all/2
таким образом.