def int_update(self,domain,pvars): # update = self.args[1].int_update(domain,pvars) # return condition_update_on_fmla(update,self.args[0],domain.relations) if_part = Sequence(AssumeAction(self.args[0]),self.args[1]).int_update(domain,pvars) else_action = self.args[2] if len(self.args) >= 3 else Sequence() else_part = Sequence(AssumeAction(dual_formula(self.args[0])),else_action).int_update(domain,pvars) return join_action(if_part,else_part,domain.relations)
def subactions(self) : if isinstance(self.args[0],ivy_ast.Some): ps = list(self.args[0].params()) fmla = self.args[0].fmla() vs = [Variable('V{}'.format(idx),x.sort) for idx,x in enumerate(ps)] subst = dict((c,v) for c,v in zip(ps,vs)) sfmla = substitute_constants_ast(fmla,subst) if isinstance(self.args[0],ivy_ast.SomeMinMax): idx = self.args[0].index() if idx not in ps: ltsym = Symbol('<',RelationSort([idx.sort,idx.sort])) operator = lambda x,y: Not(ltsym(x,y)) ivar = substitute_constants_ast(idx,subst) comp = operator(ivar,idx) if isinstance(self.args[0],ivy_ast.SomeMin) else operator(idx,ivar) fmla = And(fmla,Implies(sfmla,comp)) else : leqsym = Symbol('<=',RelationSort([idx.sort,idx.sort])) operator = lambda x,y: And(leqsym(x,y),Not(Equals(x,y))) ivar = next(v for p,v in zip(ps,vs) if p == idx) comp = operator(ivar,idx) if isinstance(self.args[0],ivy_ast.SomeMin) else operator(idx,ivar) fmla = And(fmla,Not(And(sfmla,comp))) if_part = LocalAction(*(ps+[Sequence(AssumeAction(fmla),self.args[1])])) else_action = self.args[2] if len(self.args) >= 3 else Sequence() else_part = Sequence(AssumeAction(Not(sfmla)),else_action) # iu.dbg('if_part') # iu.dbg('else_part') else: if not is_boolean(self.args[0]): raise IvyError(self,'condition must be boolean') if_part = Sequence(AssumeAction(self.args[0]),self.args[1]) else_action = self.args[2] if len(self.args) >= 3 else Sequence() else_part = Sequence(AssumeAction(dual_formula(self.args[0])),else_action) return if_part,else_part
def int_update(self, domain, pvars): # update = self.args[1].int_update(domain,pvars) # return condition_update_on_fmla(update,self.args[0],domain.relations) if_part = Sequence(AssumeAction(self.args[0]), self.args[1]).int_update(domain, pvars) else_action = self.args[2] if len(self.args) >= 3 else Sequence() else_part = Sequence(AssumeAction(dual_formula(self.args[0])), else_action).int_update(domain, pvars) return join_action(if_part, else_part, domain.relations)
def action_update(self,domain,pvars): type_check(domain,self.args[0]) check_can_assert(self.args[0],self) # print type(self.args[0]) if iu.new_assert_impl.get(): return assert_action(self.args[0]) else: cl = formula_to_clauses(dual_formula(self.args[0])) return SemActionValue([],true_clauses(),cl)
def action_update(self, domain, pvars): type_check(domain, self.args[0]) check_can_assert(self.args[0], self) # print type(self.args[0]) if iu.new_assert_impl.get(): return assert_action(self.args[0]) else: cl = formula_to_clauses(dual_formula(self.args[0])) return SemActionValue([], true_clauses(), cl)
def action_update(self,domain,pvars): type_check(domain,self.args[0]) # print type(self.args[0]) ca = checked_assert.get() if ca: if ca != self.lineno: return ([],formula_to_clauses(self.args[0]),false_clauses()) cl = formula_to_clauses(dual_formula(self.args[0])) # return ([],formula_to_clauses_tseitin(self.args[0]),cl) return ([],true_clauses(),cl)
def add_err_flag(action,erf,errconds): if isinstance(action,ia.AssertAction): errcond = ilu.dual_formula(il.drop_universals(action.args[0])) res = ia.AssignAction(erf,il.Or(erf,errcond)) errconds.append(errcond) res.lineno = action.lineno return res if isinstance(action,ia.AssumeAction): res = ia.AssumeAction(il.Or(erf,action.args[0])) res.lineno = action.lineno return res if isinstance(action,(ia.Sequence,ia.ChoiceAction,ia.EnvAction,ia.BindOldsAction)): return action.clone([add_err_flag(a,erf,errconds) for a in action.args]) if isinstance(action,ia.IfAction): return action.clone([action.args[0]] + [add_err_flag(a,erf,errconds) for a in action.args[1:]]) if isinstance(action,ia.LocalAction): return action.clone(action.args[:-1] + [add_err_flag(action.args[-1],erf,errconds)]) return action
def action_update(self, domain, pvars): type_check(domain, self.args[0]) # print type(self.args[0]) cl = formula_to_clauses(dual_formula(self.args[0])) return ([], true_clauses(), cl)
def subactions(self): if_part = Sequence(AssumeAction(self.args[0]), self.args[1]) else_action = self.args[2] if len(self.args) >= 3 else Sequence() else_part = Sequence(AssumeAction(dual_formula(self.args[0])), else_action) return if_part, else_part