Я хочу иметь логические связки, такие как
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
таким образом .