def get_predicates(self,clauses): # print "get_predicates: {}".format(clauses) d = self.parent_state.domain sig = d.sig urs = [x for x in used_unary_relations_clauses(clauses) if not is_skolem(x)] cs = [x for x in used_constants_clauses(clauses) if not is_skolem(x) and not has_enumerated_sort(sig,x) and not x.is_numeral()] ufs = [x for x in used_unary_functions_clauses(clauses) if not is_skolem(x) and has_enumerated_sort(sig,x)] nrs = [x for x,arity in d.relations.iteritems() if arity == 0] union_to_list(urs,[x for x,arity in d.relations.iteritems() if arity == 1]) union_to_list(cs,[x for x,arity in d.functions.iteritems() if arity == 0 and not has_enumerated_sort(sig,x)]) union_to_list(ufs,[x for x,arity in d.functions.iteritems() if arity == 1 and has_enumerated_sort(sig,x)]) # print "ufs: {}".format(ufs) ccs = [Constant(c) for c in cs] # print "sorts: {}".format([(c,c.get_sort()) for c in ccs]) return ([Literal(1,Atom(c,[])) for c in nrs] + [Literal(1,Atom(equals,[Variable("X",c.get_sort()),c])) for c in ccs] + [Literal(1,Atom(r,[Variable("X",r.sort.dom[0])])) for r in urs] + [(App(f,Variable('X',f.sort.dom[0])),[Constant(Symbol(x,f.sort.rng)) for x in f.sort.rng.defines()]) for f in ufs])
def get_predicates(self, clauses): # print "get_predicates: {}".format(clauses) d = self.parent_state.domain sig = d.sig urs = [ x for x in used_unary_relations_clauses(clauses) if not is_skolem(x) ] cs = [ x for x in used_constants_clauses(clauses) if not is_skolem(x) and not has_enumerated_sort(sig, x) and not x.is_numeral() ] ufs = [ x for x in used_unary_functions_clauses(clauses) if not is_skolem(x) and has_enumerated_sort(sig, x) ] nrs = [x for x, arity in d.relations.iteritems() if arity == 0] union_to_list( urs, [x for x, arity in d.relations.iteritems() if arity == 1]) union_to_list(cs, [ x for x, arity in d.functions.iteritems() if arity == 0 and not has_enumerated_sort(sig, x) ]) union_to_list(ufs, [ x for x, arity in d.functions.iteritems() if arity == 1 and has_enumerated_sort(sig, x) ]) # print "ufs: {}".format(ufs) ccs = [Constant(c) for c in cs] # print "sorts: {}".format([(c,c.get_sort()) for c in ccs]) return ([Literal(1, Atom(c, [])) for c in nrs] + [ Literal(1, Atom(equals, [Variable("X", c.get_sort()), c])) for c in ccs ] + [Literal(1, Atom(r, [Variable("X", r.sort.dom[0])])) for r in urs] + [(App(f, Variable('X', f.sort.dom[0])), [ Constant(Symbol(x, f.sort.rng)) for x in f.sort.rng.defines() ]) for f in ufs])
def set_state(self,clauses,recomp=True): self.state = clauses self.solver_clauses = true_clauses() self.predicates = self.get_predicates(clauses) sig = self.parent_state.domain.sig ufs = [x for x,arity in self.parent_state.domain.functions.iteritems() if arity == 1 and not has_enumerated_sort(sig,x)] if not hasattr(self,'brels'): self.brels = ([self.make_rel_lit(r,['X','Y']) for r,arity in self.parent_state.domain.all_relations if arity == 2] + [Literal(1,Atom(equals,[App(f,Variable('X',f.sort.dom[0])),Variable('Y',f.sort.rng)])) for f in ufs]) # brels = list(used_binary_relations_clauses(clauses)) # brels = [r for r in brels if ((r != equals) and not r.startswith('__'))] ## print "brels: %s" % brels self.relations = [GraphRelation(self,rel) for rel in self.brels] self.relations += [GraphRelationUnary(self,rel) for rel in self.predicates if not isinstance(rel,tuple) and used_variables_ast(rel)] self.relations += [GraphFunctionUnary(self,Literal(1,rel[0])) for rel in self.predicates if isinstance(rel,tuple)] self.needs_recompute = True if recomp: self.recompute()
def set_state(self, clauses, recomp=True): self.state = clauses self.solver_clauses = true_clauses() self.predicates = self.get_predicates(clauses) sig = self.parent_state.domain.sig ufs = [ x for x, arity in self.parent_state.domain.functions.iteritems() if arity == 1 and not has_enumerated_sort(sig, x) ] if not hasattr(self, 'brels'): self.brels = ([ self.make_rel_lit(r, ['X', 'Y']) for r, arity in self.parent_state.domain.all_relations if arity == 2 ] + [ Literal( 1, Atom(equals, [ App(f, Variable('X', f.sort.dom[0])), Variable('Y', f.sort.rng) ])) for f in ufs ]) # brels = list(used_binary_relations_clauses(clauses)) # brels = [r for r in brels if ((r != equals) and not r.startswith('__'))] ## print "brels: %s" % brels self.relations = [GraphRelation(self, rel) for rel in self.brels] self.relations += [ GraphRelationUnary(self, rel) for rel in self.predicates if not isinstance(rel, tuple) and used_variables_ast(rel) ] self.relations += [ GraphFunctionUnary(self, Literal(1, rel[0])) for rel in self.predicates if isinstance(rel, tuple) ] self.needs_recompute = True if recomp: self.recompute()