Exemple #1
0
 def to_constraint(self):
     if isinstance(self.args[1],Some):
         if self.args[1].if_value() != None:
             return And(Implies(self.args[1].args[1],
                                lg.Exists([self.args[1].args[0]],
                                          And(self.args[1].args[1],Equals(self.args[0],self.args[1].if_value())))),
                        Or(lg.Exists([self.args[1].args[0]],self.args[1].args[1]),
                           Equals(self.args[0],self.args[1].else_value())))
         return lg.ForAll([self.args[1].args[0]],
                          Implies(self.args[1].args[1],
                                  lu.substitute(self.args[1].args[1],{self.args[1].args[0]:self.args[0]})))
     if is_individual(self.args[0]):
         return Equals(*self.args)
     return Iff(*self.args)
Exemple #2
0
    def standardize_action(self, f, nexvars, name):
        nexSet = set()
        for n in nexvars:
            nexSet.add(n)
            self.updated.add(n)

        cons = lgu.used_constants(f)
        subs = dict()
        evars = []
        for c in cons:
            if c in self.nex:
                if c not in nexSet:
                    subs[c] = self.nex2pre[c]
#             elif False and (c not in self.pre):
            elif c not in self.pre:
                if (not c.sort.dom) and (c.sort != lg.Boolean):
                    vname = "Vtmp" + c.name
                    #                     vname = vname.replace(":", "")
                    qv = lg.Var(vname, c.sort)
                    subs[c] = qv
                    evars.append(qv)
        action = f
        if len(subs) != 0:
            #            for k, v in subs.iteritems():
            #                print("\treplacing %s -> %s in %s" % (k, v, name))
            action = lgu.substitute(f, subs)
        if len(evars) != 0:
            action = lg.Exists(evars, action)
        return action