/// <summary>Convert to NNF proposition</summary> /// <exception cref="InvaildPropositionException"></exception> /// <returns>NNF proposition</returns> public static Proposition ToNNF(this Proposition expr) { if (expr.IsNNF()) { return(expr); } return(logEngine.ConvertToNNF(expr)); }
public void RunMain() { Proposition expr; string result; //string s = "( p -> ( q & r ) ) <-> y"; //string s = "(A ->( B -> C )) <-> ( C -> D ) & ( D -> E) "; //string s = "p<->p"; //string s = "p <-> a & b"; //string s = "((p | q) & (~p | r)) -> (q | r)"; //string s = "(P|(S&T))|R"; //string s = "(A&B)|(~A)|(~B)"; //string s = "(~p)<->(p->F)"; //string s = "(~((a&b)|c)&d)|(((a&b)|c)&(~d))"; string s = "(a&b)|(c&d)|(e&f)"; ParseEngine parseEngine = new ParseEngine(); parseEngine.TryParse(out expr, out result, s); LogicEngine logicEng = new LogicEngine(); Proposition nnfExpr = logicEng.ConvertToNNF(expr); Proposition cnfExpr = logicEng.ConvertToCNF(nnfExpr); bool b = logicEng.IsTautology(cnfExpr); WriteFile(cnfExpr.ToString()); }