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
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)]