def variables_ast(ast): if isinstance(ast, Variable): yield ast elif ast != None and not isinstance(ast, str): # if not hasattr(ast,'args'): # print ast # print type(ast) # if any(isinstance(c,list) for c in ast.args): # print "foo: " + repr(ast) for arg in ast.args: for x in variables_ast(arg): yield x used_variables_ast = gen_to_set(variables_ast) def compose_atoms(pr, atom): if atom == None: return pr hname = pr.rep if isinstance(atom.rep, This) else compose_names( pr.rep, atom.rep) args = pr.args + atom.args res = type(atom)(hname, args) copy_attributes_ast(atom, res) return res def is_true(ast): return isinstance(ast, And) and len(ast.args) == 0
def distinct_variable_renaming(vars1,vars2): rn = UniqueRenamer('',(v.rep for v in vars2)) return dict((v.rep,rename_variable(v,rn(v.rep))) for v in vars1) def rename_variable(v,name): return type(v)(name,v.sort) def variables_ast(ast): if isinstance(ast,Variable): yield ast elif not isinstance(ast,str): for arg in ast.args: for x in variables_ast(arg): yield x used_variables_ast = gen_to_set(variables_ast) def compose_atoms(pr,atom): hname = compose_names(pr.rep,atom.rep) args = pr.args + atom.args res = type(atom)(hname,args) copy_attributes_ast(atom,res) return res def is_true(ast): return isinstance(ast,And) and len(ast.args) == 0 def is_false(ast): return isinstance(ast,Or) and len(ast.args) == 0