private static Formula ReduceTuringMachineToSat(TuringMachineInfo pTmInfo)
        {
            Operator and = new Operator(Operator.Types.And);

            Formula formula = new Formula
            {
                HeadExactlyInOnePlace(pTmInfo),
                and,
                HeadInTheBeginningAtTheStart(),
                and,
                InTheBeginningStartState(),
                and,
                InitialiseTape(pTmInfo),
                and,
                NotMoreThanOneSymbolPerCell(pTmInfo),
                and,
                AtLeastOneSymbolPerCell(pTmInfo),
                and,
                AlwaysOnlyOneState(pTmInfo),
                and,
                SomeTimeAcceptance(pTmInfo),
                and,
                TransitionFunction(pTmInfo)
            };


            return(formula);
        }
        private static Bracket SomeTimeAcceptance(TuringMachineInfo pTmInfo)
        {
            Bracket formula = new Bracket();



            return(formula);
        }
        private static Bracket TransitionFunction(TuringMachineInfo pTmInfo)
        {
            Bracket formula = new Bracket();



            return(formula);
        }
        private static Bracket AlwaysOnlyOneState(TuringMachineInfo pTmInfo)
        {
            Bracket formula = new Bracket();



            return(formula);
        }
        private static Bracket AtLeastOneSymbolPerCell(TuringMachineInfo pTmInfo)
        {
            Bracket formula = new Bracket();



            return(formula);
        }
        private static Bracket NotMoreThanOneSymbolPerCell(TuringMachineInfo pTmInfo)
        {
            Bracket formula = new Bracket();



            return(formula);
        }
        private static Bracket InitialiseTape(TuringMachineInfo pTmInfo)
        {
            Bracket formula = new Bracket();



            return(formula);
        }
        private static Bracket HeadExactlyInOnePlace(TuringMachineInfo pTmInfo)
        {
            Operator not = new Operator(Operator.Types.Not);
            Operator or  = new Operator(Operator.Types.Or);

            Bracket formula = new Bracket();

            new Bracket()
            {
                not,
                new Variable("Hi,k"),
                or,
                not,
                new Variable("Hi,k")
            };

            return(formula);
        }