/** * 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; } }