Example #1
0
        public object visitConnectedSentence(ConnectedSentence sentence, object arg)
        {
            Sentence alpha = (Sentence)sentence.getFirst().accept(this, arg);
            Sentence beta  = (Sentence)sentence.getSecond().accept(this, arg);

            // Eliminate <=>, bi-conditional elimination,
            // replace (alpha <=> beta) with (~alpha V beta) ^ (alpha V ~beta).
            if (Connectors.isBICOND(sentence.getConnector()))
            {
                Sentence first  = new ConnectedSentence(Connectors.OR, new NotSentence(alpha), beta);
                Sentence second = new ConnectedSentence(Connectors.OR, alpha, new NotSentence(beta));

                return(new ConnectedSentence(Connectors.AND, first, second));
            }

            // Eliminate =>, implication elimination,
            // replacing (alpha => beta) with (~alpha V beta)
            if (Connectors.isIMPLIES(sentence.getConnector()))
            {
                return(new ConnectedSentence(Connectors.OR, new NotSentence(alpha), beta));
            }

            return(new ConnectedSentence(sentence.getConnector(), alpha, beta));
        }