一.命题公式转CNF:
1.去蕴含->:(将所有形如前式的换成后式,大写字母代表一个命题公式,小写字母表示原子,下同)
P -> Q => ( ~P ) | ( Q );
2.转成NNF:(即将~全部转移到原子前)
~( P | Q ) => (~P) & (~Q);
~( ~P ) => P;
~( P & Q ) => (~P) | (~Q);
3.转化成CNF
(Q&R)|P => (Q|P)&(R|P);
Q|(R&P) => (Q|R)&(Q|P);
4.吸收
此时公式已转化成形如Q&Q1&Q2&...形式;
检查每个Q:
a|a => a;
a|~a => true;
再检查各个Q之间是否包含,形如Qn=Qm|P;则删掉Qn,留Qm;
此时得出的结果就是吸收过的CNF了。
二.CNF转DNF:
CNF形如:
(a11|a12|a13..a1n)&(a21|a22...a2n)...(an1|an2...ann)
则对应的DNF为:
所有(a1,a2,a3...an)的析取(此处ai表示从ai1,ai2..ain中任取一个);
对DNF进行吸收<