Exemple #1
0
    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)
Exemple #2
0
    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
Exemple #3
0
 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)
Exemple #4
0
    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)
Exemple #5
0
 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)
Exemple #6
0
    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
Exemple #8
0
 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)
Exemple #9
0
 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
Exemple #10
0
 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)
Exemple #11
0
 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