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