public ImplicationRule(List <StatementCombination> ifStatement, StatementCombination thenStatement)
 {
     IfStatement   = ifStatement ?? throw new ArgumentNullException(nameof(ifStatement));
     ThenStatement = thenStatement ?? throw new ArgumentNullException(nameof(thenStatement));
 }
        public override string ToString()
        {
            StringBuilder resultingStringBuilder = new StringBuilder();

            resultingStringBuilder.Append("IF ");
            resultingStringBuilder.Append("(");

            StringBuilder ifStatementStringBuilder = new StringBuilder();

            StatementCombination lastStatementCombination = IfStatement.Last();

            foreach (StatementCombination statementCombination in IfStatement)
            {
                if (statementCombination.UnaryStatements.Count > 1 && IfStatement.Count > 1)
                {
                    ifStatementStringBuilder.Append("(");
                }

                UnaryStatement lastIfUnaryStatement = statementCombination.UnaryStatements.Last();
                foreach (UnaryStatement unaryStatement in statementCombination.UnaryStatements)
                {
                    ifStatementStringBuilder.Append(unaryStatement);
                    if (unaryStatement != lastIfUnaryStatement)
                    {
                        ifStatementStringBuilder.Append(" & ");
                    }
                }

                if (statementCombination.UnaryStatements.Count > 1 && IfStatement.Count > 1)
                {
                    ifStatementStringBuilder.Append(")");
                }

                if (statementCombination != lastStatementCombination)
                {
                    ifStatementStringBuilder.Append(" | ");
                }
            }
            string ifStatementString = ifStatementStringBuilder.ToString();

            resultingStringBuilder.Append(ifStatementString);
            resultingStringBuilder.Append(")");

            resultingStringBuilder.Append(" THEN ");
            resultingStringBuilder.Append("(");

            StringBuilder  thenStatementStringBuilder = new StringBuilder();
            UnaryStatement lastThenUnaryStatement     = ThenStatement.UnaryStatements.Last();

            foreach (UnaryStatement unaryStatement in ThenStatement.UnaryStatements)
            {
                thenStatementStringBuilder.Append(unaryStatement);
                if (unaryStatement != lastThenUnaryStatement)
                {
                    thenStatementStringBuilder.Append(" & ");
                }
            }
            string thenStatementString = thenStatementStringBuilder.ToString();

            resultingStringBuilder.Append(thenStatementString);
            resultingStringBuilder.Append(")");

            return(resultingStringBuilder.ToString());
        }