public void processNode() { if (propositionType.GetType() == typeof(AndClass)) { sw.WriteLine($"{currentNode}[label = \"^\"]"); sw.WriteLine($"{currentNode} -- {currentNode * 2}"); sw.WriteLine($"{currentNode} -- {currentNode * 2 + 1}"); //create children and set parent for the children List <IProposition> children = propositionType.getChildProposition(); GraphNode left = new GraphNode(currentNode * 2, this, children[1], sw); GraphNode right = new GraphNode(currentNode * 2 + 1, this, children[0], sw); } else if (propositionType.GetType() == typeof(OrClass)) { sw.WriteLine($"{currentNode}[label = \"||\"]"); sw.WriteLine($"{currentNode} -- {currentNode * 2}"); sw.WriteLine($"{currentNode} -- {currentNode * 2 + 1}"); //create children and set parent for the children List <IProposition> children = propositionType.getChildProposition(); GraphNode left = new GraphNode(currentNode * 2, this, children[1], sw); GraphNode right = new GraphNode(currentNode * 2 + 1, this, children[0], sw); } else if (propositionType.GetType() == typeof(ImplicationClass)) { sw.WriteLine($"{currentNode}[label = \"=>\"]"); sw.WriteLine($"{currentNode} -- {currentNode * 2}"); sw.WriteLine($"{currentNode} -- {currentNode * 2 + 1}"); //create children and set parent for the children List <IProposition> children = propositionType.getChildProposition(); GraphNode left = new GraphNode(currentNode * 2, this, children[1], sw); GraphNode right = new GraphNode(currentNode * 2 + 1, this, children[0], sw); } else if (propositionType.GetType() == typeof(BiImplicationClass)) { sw.WriteLine($"{currentNode}[label = \"<=>\"]"); sw.WriteLine($"{currentNode} -- {currentNode * 2}"); sw.WriteLine($"{currentNode} -- {currentNode * 2 + 1}"); //create children and set parent for the children List <IProposition> children = propositionType.getChildProposition(); GraphNode left = new GraphNode(currentNode * 2, this, children[1], sw); GraphNode right = new GraphNode(currentNode * 2 + 1, this, children[0], sw); } else if (propositionType.GetType() == typeof(NotClass)) { sw.WriteLine($"{currentNode}[label = \"~\"]"); sw.WriteLine($"{currentNode} -- {currentNode * 2}"); //create children and set parent for the children List <IProposition> children = propositionType.getChildProposition(); GraphNode left = new GraphNode(currentNode * 2, this, children[0], sw); } else { sw.WriteLine($"{currentNode}[label = \"{propositionType.GetString()}\"]"); } }
public bool isSplitOrNot() { IProposition propositionOfNotClass = toBeProcessedProposition.getChildProposition()[0]; List <IProposition> childPropositionsOfNot = propositionOfNotClass.getChildProposition(); if (toBeProcessedProposition is NotClass) { if (propositionOfNotClass is ImplicationClass || propositionOfNotClass is OrClass) { if (propositionOfNotClass is ImplicationClass) { leftProducts.Add(childPropositionsOfNot[0]); rightProducts.Add(new NotClass(childPropositionsOfNot[1])); } else { leftProducts.Add(new NotClass(childPropositionsOfNot[0])); rightProducts.Add(new NotClass(childPropositionsOfNot[1])); } ruleOfNode = Rule.Alpha; return(false); } else if (propositionOfNotClass is NotClass) { ruleOfNode = Rule.Alpha; leftProducts.Add(childPropositionsOfNot[0]); return(false); } else if (propositionOfNotClass is FinalVar) { return(false); } else //andClass { ruleOfNode = Rule.Beta; leftProducts.Add(new NotClass(childPropositionsOfNot[0])); rightProducts.Add(new NotClass(childPropositionsOfNot[1])); return(true); } } else { if (toBeProcessedProposition is AndClass) { ruleOfNode = Rule.Alpha; leftProducts.Add(childPropositionsOfNot[0]); rightProducts.Add(childPropositionsOfNot[1]); return(false); } else if (propositionOfNotClass is FinalVar) { return(false); } else //Orclass { ruleOfNode = Rule.Beta; leftProducts.Add(childPropositionsOfNot[0]); rightProducts.Add(childPropositionsOfNot[1]); return(true); } } }