package aima.core.logic.propositional.visitors; import aima.core.logic.propositional.parsing.AbstractPLVisitor; import aima.core.logic.propositional.parsing.ast.ComplexSentence; import aima.core.logic.propositional.parsing.ast.Connective; import aima.core.logic.propositional.parsing.ast.Sentence; /** * Artificial Intelligence A Modern Approach (3rd Edition): page 253.<br> * <br> * Eliminate =>, replacing α => β<br> * with ~α | β * * @author Ciaran O'Reilly * */ public class ImplicationElimination extends AbstractPLVisitor<Object> { /** * Eliminate the implications from a sentence. * * @param sentence * a propositional logic sentence. * @return an equivalent Sentence to the input with all implications * eliminated. */ public static Sentence eliminate(Sentence sentence) { ImplicationElimination eliminator = new ImplicationElimination(); Sentence result = sentence.accept(eliminator, null); return result; } @Override public Sentence visitBinarySentence(ComplexSentence s, Object arg) { Sentence result = null; if (s.isImplicationSentence()) { // Eliminate =>, replacing α => β // with ~α | β Sentence alpha = s.getSimplerSentence(0).accept(this, arg); Sentence beta = s.getSimplerSentence(1).accept(this, arg); Sentence notAlpha = new ComplexSentence(Connective.NOT, alpha); result = new ComplexSentence(Connective.OR, notAlpha, beta); } else { result = super.visitBinarySentence(s, arg); } return result; } }