All Downloads are FREE. Search and download functionalities are using the official Maven repository.

aima.core.logic.propositional.visitors.BiconditionalElimination Maven / Gradle / Ivy

Go to download

AIMA-Java Core Algorithms from the book Artificial Intelligence a Modern Approach 3rd Ed.

The newest version!
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.
*
* Eliminate <=>, replacing α <=> β
* with (α => β) & (β => α) * * @author Ciaran O'Reilly * */ public class BiconditionalElimination extends AbstractPLVisitor { /** * Eliminate the biconditionals from a sentence. * * @param sentence * a propositional logic sentence. * @return an equivalent Sentence to the input with all biconditionals * eliminated. */ public static Sentence eliminate(Sentence sentence) { BiconditionalElimination eliminator = new BiconditionalElimination(); Sentence result = sentence.accept(eliminator, null); return result; } @Override public Sentence visitBinarySentence(ComplexSentence s, Object arg) { Sentence result = null; if (s.isBiconditionalSentence()) { // Eliminate <=>, replace α <=> β // with (α => β) & (β => α) Sentence alpha = s.getSimplerSentence(0).accept(this, arg); Sentence beta = s.getSimplerSentence(1).accept(this, arg); Sentence alphaImpliesBeta = new ComplexSentence( Connective.IMPLICATION, alpha, beta); Sentence betaImpliesAlpha = new ComplexSentence( Connective.IMPLICATION, beta, alpha); result = new ComplexSentence(Connective.AND, alphaImpliesBeta, betaImpliesAlpha); } else { result = super.visitBinarySentence(s, arg); } return result; } }