Пример #1
0
    def new_literals(self, clause):
        """Generates new literals based on known predicate symbols.
        Generated literal must share atleast one variable with clause"""
        share_vars = variables(clause[0])
        for l in clause[1]:
            share_vars.update(variables(l))

        for pred, arity in self.pred_syms:
            new_vars = {standardize_variables(expr('x')) for _ in range(arity - 1)}
            for args in product(share_vars.union(new_vars), repeat=arity):
                if any(var in share_vars for var in args):
                    yield Expr(pred, *[var for var in args])
Пример #2
0
 def new_literals(self, clause):
     """Generate new literals based on known predicate symbols.
     Generated literal must share at least one variable with clause"""
     share_vars = variables(clause[0])
     for l in clause[1]:
         share_vars.update(variables(l))
     for pred, arity in self.pred_syms:
         new_vars = {standardize_variables(expr('x')) for _ in range(arity - 1)}
         for args in product(share_vars.union(new_vars), repeat=arity):
             if any(var in share_vars for var in args):
                 # make sure we don't return an existing rule
                 if not Expr(pred, args) in clause[1]:
                     yield Expr(pred, *[var for var in args])
Пример #3
0
 def fol_bc_or(KB, goal, theta):
     for rule in KB.fetch_rules_for_goal(goal):
         lhs, rhs = parse_definite_clause(standardize_variables(rule))
         for theta1 in fol_bc_and(KB, lhs, unify(rhs, goal, theta)):
             yield ([(goal, theta1[0])], theta1[1])
Пример #4
0
 def fol_bc_or(KB, goal, theta):
     for rule in KB.fetch_rules_for_goal(goal):
         lhs, rhs = parse_definite_clause(standardize_variables(rule))
         for theta1 in fol_bc_and(KB, lhs, unify(rhs, goal, theta)):
             yield ([(goal, theta1[0])], theta1[1])