Package aima.core.logic.fol.kb.data

Examples of aima.core.logic.fol.kb.data.Literal


          "Only Atomic Queries are supported.");
    }

    FCAskAnswerHandler ansHandler = new FCAskAnswerHandler();

    Literal alpha = new Literal((AtomicSentence) query);

    // local variables: new, the new sentences inferred on each iteration
    List<Literal> newSentences = new ArrayList<Literal>();

    // Ensure query is not already a know fact before
    // attempting forward chaining.
    Set<Map<Variable, Term>> answers = KB.fetch(alpha);
    if (answers.size() > 0) {
      ansHandler.addProofStep(new ProofStepFoChAlreadyAFact(alpha));
      ansHandler.setAnswers(answers);
      return ansHandler;
    }

    // repeat until new is empty
    do {

      // new <- {}
      newSentences.clear();
      // for each rule in KB do
      // (p1 ^ ... ^ pn => q) <-STANDARDIZE-VARIABLES(rule)
      for (Clause impl : KB.getAllDefiniteClauseImplications()) {
        impl = KB.standardizeApart(impl);
        // for each theta such that SUBST(theta, p1 ^ ... ^ pn) =
        // SUBST(theta, p'1 ^ ... ^ p'n)
        // --- for some p'1,...,p'n in KB
        for (Map<Variable, Term> theta : KB.fetch(invert(impl
            .getNegativeLiterals()))) {
          // q' <- SUBST(theta, q)
          Literal qDelta = KB.subst(theta, impl.getPositiveLiterals()
              .get(0));
          // if q' does not unify with some sentence already in KB or
          // new then do
          if (!KB.isRenaming(qDelta)
              && !KB.isRenaming(qDelta, newSentences)) {
            // add q' to new
            newSentences.add(qDelta);
            ansHandler.addProofStep(impl, qDelta, theta);
            // theta <- UNIFY(q', alpha)
            theta = KB.unify(qDelta.getAtomicSentence(),
                alpha.getAtomicSentence());
            // if theta is not fail then return theta
            if (null != theta) {
              for (Literal l : newSentences) {
                Sentence s = null;
View Full Code Here


  // PRIVATE METHODS
  //
  private List<Literal> invert(List<Literal> lits) {
    List<Literal> invLits = new ArrayList<Literal>();
    for (Literal l : lits) {
      invLits.add(new Literal(l.getAtomicSentence(), (l
          .isPositiveLiteral() ? true : false)));
    }
    return invLits;
  }
View Full Code Here

    FOLParser parser = new FOLParser(domain);

    List<Literal> lits = new ArrayList<Literal>();
    AtomicSentence a1 = (AtomicSentence) parser.parse("P(F(x,B),x)");
    AtomicSentence a2 = (AtomicSentence) parser.parse("Q(x)");
    lits.add(new Literal(a1));
    lits.add(new Literal(a2));

    Clause c1 = new Clause(lits);

    lits.clear();
    a1 = (AtomicSentence) parser.parse("F(A,y) = y");
    a2 = (AtomicSentence) parser.parse("R(y)");
    lits.add(new Literal(a1));
    lits.add(new Literal(a2));

    Clause c2 = new Clause(lits);

    Set<Clause> paras = paramodulation.apply(c1, c2);
    Assert.assertEquals(2, paras.size());
View Full Code Here

    AtomicSentence a1 = (AtomicSentence) parser.parse("F(C,x) = D");
    AtomicSentence a2 = (AtomicSentence) parser.parse("A = D");
    AtomicSentence a3 = (AtomicSentence) parser.parse("P(F(x,B),x)");
    AtomicSentence a4 = (AtomicSentence) parser.parse("Q(x)");
    AtomicSentence a5 = (AtomicSentence) parser.parse("R(C)");
    lits.add(new Literal(a1));
    lits.add(new Literal(a2));
    lits.add(new Literal(a3));
    lits.add(new Literal(a4));
    lits.add(new Literal(a5));

    Clause c1 = new Clause(lits);

    lits.clear();
    a1 = (AtomicSentence) parser.parse("F(A,y) = y");
    a2 = (AtomicSentence) parser.parse("F(B,y) = C");
    a3 = (AtomicSentence) parser.parse("R(y)");
    a4 = (AtomicSentence) parser.parse("R(A)");
    lits.add(new Literal(a1));
    lits.add(new Literal(a2));
    lits.add(new Literal(a3));
    lits.add(new Literal(a4));

    Clause c2 = new Clause(lits);

    Set<Clause> paras = paramodulation.apply(c1, c2);
    Assert.assertEquals(5, paras.size());
View Full Code Here

    FOLParser parser = new FOLParser(domain);

    List<Literal> lits = new ArrayList<Literal>();
    AtomicSentence a1 = (AtomicSentence) parser.parse("P(y, F(A,y))");
    lits.add(new Literal(a1));

    Clause c1 = new Clause(lits);

    lits.clear();
    a1 = (AtomicSentence) parser.parse("x = x");
    lits.add(new Literal(a1));

    Clause c2 = new Clause(lits);

    Set<Clause> paras = paramodulation.apply(c1, c2);
    Assert.assertEquals(0, paras.size());
View Full Code Here

    FOLParser parser = new FOLParser(domain);

    List<Literal> lits = new ArrayList<Literal>();
    AtomicSentence a1 = (AtomicSentence) parser.parse("P(y, F(A,y))");
    lits.add(new Literal(a1));

    Clause c1 = new Clause(lits);

    lits.clear();
    a1 = (AtomicSentence) parser.parse("F(x,B) = x");
    lits.add(new Literal(a1, true));

    Clause c2 = new Clause(lits);

    Set<Clause> paras = paramodulation.apply(c1, c2);
    Assert.assertEquals(0, paras.size());
View Full Code Here

    FOLParser parser = new FOLParser(domain);

    List<Literal> lits = new ArrayList<Literal>();
    AtomicSentence a1 = (AtomicSentence) parser.parse("P(F(x,B),x)");
    AtomicSentence a2 = (AtomicSentence) parser.parse("Q(x)");
    lits.add(new Literal(a1));
    lits.add(new Literal(a2));

    Clause c1 = new Clause(lits);

    lits.clear();
    a1 = (AtomicSentence) parser.parse("F(A,y) = y");
    a2 = (AtomicSentence) parser.parse("R(y)");
    lits.add(new Literal(a1));
    lits.add(new Literal(a2));

    Clause c2 = new Clause(lits);

    Paramodulation paramodulation = new Paramodulation();
    Set<Clause> paras = paramodulation.apply(c1, c2);
View Full Code Here

    List<Literal> lits = new ArrayList<Literal>();
    Predicate p1 = (Predicate) parser.parse("Q(z, G(D,B))");
    Predicate p2 = (Predicate) parser.parse("P(x, G(A,C))");
    Predicate p3 = (Predicate) parser.parse("W(z,x,u,w,y)");
    lits.add(new Literal(p1));
    lits.add(new Literal(p2));
    lits.add(new Literal(p3));

    Clause clExpression = new Clause(lits);

    TermEquality assertion = (TermEquality) parser.parse("G(x,y) = x");
View Full Code Here

    FOLParser parser = new FOLParser(domain);

    List<Literal> lits = new ArrayList<Literal>();
    Predicate p1 = (Predicate) parser.parse("P(y, F(A,y))");
    lits.add(new Literal(p1));

    Clause clExpression = new Clause(lits);

    TermEquality assertion = (TermEquality) parser.parse("F(x,B) = C");
View Full Code Here

    FOLParser parser = new FOLParser(domain);

    List<Literal> lits = new ArrayList<Literal>();
    Predicate p1 = (Predicate) parser.parse("P(y, F(A,y))");
    lits.add(new Literal(p1));

    Clause clExpression = new Clause(lits);

    TermEquality assertion = (TermEquality) parser.parse("x = x");
View Full Code Here

TOP

Related Classes of aima.core.logic.fol.kb.data.Literal

Copyright © 2018 www.massapicom. 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.