Package aima.core.logic.propositional.algorithms

Source Code of aima.core.logic.propositional.algorithms.TTEntails

package aima.core.logic.propositional.algorithms;

import java.util.List;
import java.util.Set;

import aima.core.logic.propositional.parsing.PEParser;
import aima.core.logic.propositional.parsing.ast.Sentence;
import aima.core.logic.propositional.parsing.ast.Symbol;
import aima.core.logic.propositional.visitors.SymbolCollector;
import aima.core.util.Converter;
import aima.core.util.SetOps;
import aima.core.util.Util;

/**
* @author Ravi Mohan
* @author Mike Stampone
*/
public class TTEntails {

  /**
   * Returns the answer to the specified question using the TT-Entails
   * algorithm.
   *
   * @param kb
   *            a knowledge base to ASK
   * @param alpha
   *            a question to ASK the knowledge base
   *
   * @return the answer to the specified question using the TT-Entails
   *         algorithm.
   */
  public boolean ttEntails(KnowledgeBase kb, String alpha) {
    Sentence kbSentence = kb.asSentence();
    Sentence querySentence = (Sentence) new PEParser().parse(alpha);
    SymbolCollector collector = new SymbolCollector();
    Set<Symbol> kbSymbols = collector.getSymbolsIn(kbSentence);
    Set<Symbol> querySymbols = collector.getSymbolsIn(querySentence);
    Set<Symbol> symbols = SetOps.union(kbSymbols, querySymbols);
    List<Symbol> symbolList = new Converter<Symbol>().setToList(symbols);
    return ttCheckAll(kbSentence, querySentence, symbolList, new Model());
  }

  public boolean ttCheckAll(Sentence kbSentence, Sentence querySentence,
      List<Symbol> symbols, Model model) {
    if (symbols.isEmpty()) {
      if (model.isTrue(kbSentence)) {
        // System.out.println("#");
        return model.isTrue(querySentence);
      } else {
        // System.out.println("0");
        return true;
      }
    } else {
      Symbol symbol = Util.first(symbols);
      List<Symbol> rest = Util.rest(symbols);

      Model trueModel = model.extend(new Symbol(symbol.getValue()), true);
      Model falseModel = model.extend(new Symbol(symbol.getValue()),
          false);
      return (ttCheckAll(kbSentence, querySentence, rest, trueModel) && (ttCheckAll(
          kbSentence, querySentence, rest, falseModel)));
    }
  }
}
TOP

Related Classes of aima.core.logic.propositional.algorithms.TTEntails

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.