Esempio n. 1
0
 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
Esempio n. 2
0
 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
Esempio n. 3
0
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)
Esempio n. 4
0
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)
Esempio n. 5
0
 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)
Esempio n. 6
0
 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)