def __call__(self, expr, vars_lst=[], var=False): if expr.is_const(): etype, _ = ty.infer(expr) if self.is_predicate(etype): if expr.name[0] == 'P': return expr.name else: return ("P" + expr.name) else: if var or expr.name in vars_lst: # LADR vars must begin with chars 'u'-'z'. if expr.name[0] in ['u', 'v', 'w', 'x', 'y', 'z']: return expr.name else: return ("x" + expr.name) else: # LADR consts must begin with chars 'a'-'t' if ord(expr.name[0]) < 117: # chr(117) == 'u' return expr.name else: return ("c" + expr.name) elif expr.is_app(): fun, args = root_app_implicit(expr) args = [self.__call__(a, vars_lst=vars_lst) for a in args] return self.handle_function(fun, args) elif expr.is_forall(): vlist, body = open_bound_fresh_consts(expr) ladr_vars = [v.name for v in vlist] # ladr_vars_strs is needed to convert all Boole vars into # a syntactic format supported by LADR. ladr_vars_strs = [self(v, var=True) for v in vlist] ladr_body = self(body, vars_lst = ladr_vars) ladr_sorting = self.ladr_sort_conj(zip(vlist, ladr_vars_strs)) #print ladr_sorting return ("all " + (" all ".join(ladr_vars_strs)) + " " \ + '((' + ladr_sorting + ") -> " + ladr_body + ')') elif expr.is_exists(): vlist, body = open_bound_fresh_consts(expr) ladr_vars = [v.name for v in vlist] ladr_vars_strs = [self(v, var=True) for v in vlist] ladr_body = self(body, vars_lst=ladr_vars) ladr_sorting = self.ladr_sort_conj(zip(vlist, ladr_vars_strs)) return ("exists " + (" exists ".join(ladr_vars_strs)) + " " \ + '((' + ladr_sorting + ') & ' + ladr_body + ')') else: raise LADR_Unexpected_Expression
def __call__(self, expr, vars_lst=[], var=False): if expr.is_const(): etype, _ = ty.infer(expr) if self.is_predicate(etype): if expr.name[0] == 'P': return expr.name else: return ("P" + expr.name) else: if var or expr.name in vars_lst: # LADR vars must begin with chars 'u'-'z'. if expr.name[0] in ['u', 'v', 'w', 'x', 'y', 'z']: return expr.name else: return ("x" + expr.name) else: # LADR consts must begin with chars 'a'-'t' if ord(expr.name[0]) < 117: # chr(117) == 'u' return expr.name else: return ("c" + expr.name) elif expr.is_app(): fun, args = root_app_implicit(expr) args = [self.__call__(a, vars_lst=vars_lst) for a in args] return self.handle_function(fun, args) elif expr.is_forall(): vlist, body = open_bound_fresh_consts(expr) ladr_vars = [v.name for v in vlist] # ladr_vars_strs is needed to convert all Boole vars into # a syntactic format supported by LADR. ladr_vars_strs = [self(v, var=True) for v in vlist] ladr_body = self(body, vars_lst=ladr_vars) ladr_sorting = self.ladr_sort_conj(zip(vlist, ladr_vars_strs)) #print ladr_sorting return ("all " + (" all ".join(ladr_vars_strs)) + " " \ + '((' + ladr_sorting + ") -> " + ladr_body + ')') elif expr.is_exists(): vlist, body = open_bound_fresh_consts(expr) ladr_vars = [v.name for v in vlist] ladr_vars_strs = [self(v, var=True) for v in vlist] ladr_body = self(body, vars_lst=ladr_vars) ladr_sorting = self.ladr_sort_conj(zip(vlist, ladr_vars_strs)) return ("exists " + (" exists ".join(ladr_vars_strs)) + " " \ + '((' + ladr_sorting + ') & ' + ladr_body + ')') else: raise LADR_Unexpected_Expression
def print_bound(expr): b = expr.binder vars, body = e.open_bound_fresh_consts(expr) name = binder_utf_name[b.name] if len(vars) == 1: return "{0!s}({1!s}, {2!s})".format(name, vars[0], body) else: vars_str = ', '.join(map(str, vars)) return "{0!s}([{1!s}], {2!s})".format(name, vars_str, body)
def __call__(self, expr): val = elab(expr) if val.is_const(): return self.get_z3_const(val) elif val.is_app(): fun, args = root_app_implicit(val) args = [self.__call__(a) for a in args] return self.handle_function(fun, args) elif val.is_forall(): vlist, body = open_bound_fresh_consts(val) z3_vars = [self(v) for v in vlist] z3_body = self(body) return z3.ForAll(z3_vars, z3_body) elif val.is_exists(): vlist, body = open_bound_fresh_consts(val) z3_vars = [self(v) for v in vlist] z3_body = self(body) return z3.Exists(z3_vars, z3_body) else: raise Z3_Unexpected_Expression(val)