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);
        }