Пример #1
0
 def decompose(self, pre, post, fail=False):
     v = self.get_callee()
     if not isinstance(v, Action):
         return []
     actual_params = self.args[0].args
     actual_returns = self.args[1:]
     vocab = list(symbols_asts(actual_params + actual_returns))
     formals = v.formal_params + v.formal_returns
     premap, pre = hide_state_map(formals, pre)
     postmap, post = hide_state_map(formals, post)
     actual_params = [rename_ast(p, premap) for p in actual_params]
     actual_returns = [rename_ast(p, postmap) for p in actual_returns]
     pre = constrain_state(
         pre,
         And(*
             [Equals(x, y)
              for x, y in zip(actual_params, v.formal_params)]))
     if not fail:
         post = constrain_state(
             post,
             And(*[
                 Equals(x, y)
                 for x, y in zip(actual_returns, v.formal_returns)
             ]))
     ren = dict((x, x.prefix('__hide:')) for x in actual_returns)
     post = (post[0], rename_clauses(post[1], ren), post[2])
     callee = v.clone(v.args)  # drop the formals
     res = [(pre, [callee], post)]
     print "decompose call:"
     print "pre = {}".format(pre)
     print "callee = {}".format(callee)
     print "post = {}".format(post)
     return res
Пример #2
0
 def decompose(self, pre, post):
     v = self.get_callee()
     if not isinstance(v, Action):
         return []
     actual_params = self.args[0].args
     actual_returns = self.args[1:]
     vocab = list(symbols_asts(actual_params + actual_returns))
     formals = v.formal_params + v.formal_returns
     premap, pre = hide_state_map(formals, pre)
     postmap, post = hide_state_map(formals, post)
     actual_params = [rename_ast(p, premap) for p in actual_params]
     actual_returns = [rename_ast(p, postmap) for p in actual_returns]
     pre = constrain_state(pre, And(*[Equals(x, y) for x, y in zip(actual_params, v.formal_params)]))
     post = constrain_state(post, And(*[Equals(x, y) for x, y in zip(actual_returns, v.formal_returns)]))
     ren = dict((x, x.prefix("__hide:")) for x in actual_returns)
     post = (post[0], rename_clauses(post[1], ren), post[2])
     callee = v.clone(v.args)  # drop the formals
     return [(pre, [callee], post)]