public bool ExistentialQuantifierRule(ref DerivationStep s) { List <Node> temp = s.GetFormulas().ToList(); foreach (var n in s.GetFormulas()) { int index = s.GetFormulas().IndexOf(n); if (n is Existential e) { Existential newExist = FunctionHelper.DeepClone <Existential>(e); temp.RemoveAt(index); DerivationStep newStep = new DerivationStep(s.GetActiveVariables()); newStep.AddActiveVariable(); string checkVar = newExist.GetVariable().ToString(); this.ChangeVarHelperExist(newExist.RightNode, newStep.GetLastVar(), checkVar); newStep.AddFormulas(newExist.RightNode); newStep.Merge(temp); s.RightNode = newStep; this._branchingPoint.Push(s.RightNode); return(true); } else if (n is Negation && n.RightNode is Universal u) { Universal newUni = FunctionHelper.DeepClone <Universal>(u); temp.RemoveAt(index); DerivationStep newStep = new DerivationStep(s.GetActiveVariables()); newStep.AddActiveVariable(); string checkVar = newUni.GetVariable().ToString(); this.ChangeVarHelperExist(newUni.RightNode, newStep.GetLastVar(), checkVar); newStep.AddFormulas(new Negation("~", newUni.RightNode)); newStep.Merge(temp); s.RightNode = newStep; this._branchingPoint.Push(s.RightNode); return(true); } } return(false); }