public TableauxHolder(string Proposition)
        {
            Connective proposition = PropositionReader.ReadPropositionString(Proposition);

            infixString = proposition.GetInfix();

            ConnectiveNot notPorposition = new ConnectiveNot();

            notPorposition.setLeftConnective(proposition);

            TableauxSetElement tse = new TableauxSetElement(notPorposition);

            this.startTableaux = new TableauxSet(new List <TableauxSetElement>()
            {
                tse
            });
            isNormalProposition = notPorposition.IsNormalProposition();
            if (!notPorposition.AreLocalArgumentsMatching(new List <char>(), new List <char>()))
            {
                throw new Exception("Local Arguments are mismatching or there are quantifiers with the same Local Argument");
            }
            calculateFreeArguments(notPorposition);
            Console.WriteLine("Succesfully parsed proposition: " + Proposition);
            Console.WriteLine("Creating tableaux nodes...   (In-Progress Feedback: " + TableauxSet.provideFeedback + ")");
            this.startTableaux.CreateNextSets(new List <char>(), availableArguments, true); //Can be (!isNormalProposition) OR (true)
            this.startTableaux.CalculateIsTautology();
            Console.WriteLine("Succesfully created all teableaux nodes");
        }
        private bool addNewSet(List <Connective> Connectives, TableauxSetElement SourceElement)
        {
            //copy elements except SourceElement
            List <TableauxSetElement> tempElements = new List <TableauxSetElement>();

            foreach (TableauxSetElement tse in elements)
            {
                if (tse != SourceElement)
                {
                    tempElements.Add(tse);
                }
            }

            //add new Elements created from SourceElement if such an element does not exist yet
            bool addedAtLeastOne = false;

            foreach (Connective con in Connectives)
            {
                bool sameFound = false;
                foreach (TableauxSetElement tse in tempElements)
                {
                    if (tse.Element.IsTheSameAs(con))
                    {
                        sameFound = true;
                        break;
                    }
                }
                if (!sameFound)
                {
                    TableauxSetElement newElement = new TableauxSetElement(con);
                    tempElements.Add(newElement);
                    addedAtLeastOne = true;
                }
            }

            //add set
            if (addedAtLeastOne || SourceElement != null) //added one or removed one
            {
                TableauxSet newSet = new TableauxSet(tempElements);
                sets.Add(newSet);
            }
            return(addedAtLeastOne || SourceElement != null);
        }