Реальная программа для преобразования формулы в конъюнктивную нормальную форму является значительно более сложной по сравнению с последней программой. При обработке формулы вида (Р # Q), где Р и Q – произвольные формулы, прежде всего, необходимо преобразовать Р и Q в конъюнктивную нормальную
форму, скажем P1 и Q1 . И только после этого можно применять одно из преобразований, дающих эквивалентную формулу. Процесс обработки должен происходить именно в таком порядке, так как может оказаться, что ни Р ни Q не содержат&на верхнем уровне, а Р1 и Q1 содержат. Программа имеет вид:
conjn((P # Q),R):-!, conjn(P,P1), conjn(Q,Q1), conjn1((P1 # Q1),R).
conjn((P& Q),(P1& Q1)):-!, conjn(P,P1), conjn(Q,Q1).
conjn(P,P).
conjn1(((P & Q) # R), (P1 & Q1)):- !, conjn((P # Q), P1), conjn((Q # R), Q1).
conjn1((P # (Q & R)),(P1 & Q1)):-!, conjn((P # Q), P1), conjn((P # R), Q1).
conjn1(P,P).
|