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