Example #1
0
 /**
  * Syllogistic rules whose first premise is on an asymmetric relation, and the second on a
  * symmetric relation
  *
  * @param asym The asymmetric premise
  * @param sym The symmetric premise
  * @param figure The location of the shared term
  * @param memory Reference to the memory
  */
 private static void asymmetricSymmetric(Sentence asym, Sentence sym, int figure, Memory memory) {
   Statement asymSt = (Statement) asym.cloneContent();
   Statement symSt = (Statement) sym.cloneContent();
   Term t1, t2;
   switch (figure) {
     case 11:
       if (Variable.unify(
           Symbols.VAR_INDEPENDENT, asymSt.getSubject(), symSt.getSubject(), asymSt, symSt)) {
         t1 = asymSt.getPredicate();
         t2 = symSt.getPredicate();
         if (Variable.unify(Symbols.VAR_QUERY, t1, t2, asymSt, symSt)) {
           LocalRules.matchAsymSym(asym, sym, figure, memory);
         } else {
           SyllogisticRules.analogy(t2, t1, asym, sym, figure, memory);
         }
       }
       break;
     case 12:
       if (Variable.unify(
           Symbols.VAR_INDEPENDENT, asymSt.getSubject(), symSt.getPredicate(), asymSt, symSt)) {
         t1 = asymSt.getPredicate();
         t2 = symSt.getSubject();
         if (Variable.unify(Symbols.VAR_QUERY, t1, t2, asymSt, symSt)) {
           LocalRules.matchAsymSym(asym, sym, figure, memory);
         } else {
           SyllogisticRules.analogy(t2, t1, asym, sym, figure, memory);
         }
       }
       break;
     case 21:
       if (Variable.unify(
           Symbols.VAR_INDEPENDENT, asymSt.getPredicate(), symSt.getSubject(), asymSt, symSt)) {
         t1 = asymSt.getSubject();
         t2 = symSt.getPredicate();
         if (Variable.unify(Symbols.VAR_QUERY, t1, t2, asymSt, symSt)) {
           LocalRules.matchAsymSym(asym, sym, figure, memory);
         } else {
           SyllogisticRules.analogy(t1, t2, asym, sym, figure, memory);
         }
       }
       break;
     case 22:
       if (Variable.unify(
           Symbols.VAR_INDEPENDENT, asymSt.getPredicate(), symSt.getPredicate(), asymSt, symSt)) {
         t1 = asymSt.getSubject();
         t2 = symSt.getSubject();
         if (Variable.unify(Symbols.VAR_QUERY, t1, t2, asymSt, symSt)) {
           LocalRules.matchAsymSym(asym, sym, figure, memory);
         } else {
           SyllogisticRules.analogy(t1, t2, asym, sym, figure, memory);
         }
       }
       break;
   }
 }