def transform_Implies(self, node): new_a = self.transform(node.a) new_b = self.transform(node.b) return ir.Disjunction(ir.Complement(new_a), new_b)
def transform_Forall(self, node: Forall): var_refs, conds = unzip( map(extract_var_cond, map(self.transform, node.var_preds))) return ir.Complement( ir.Exists(var_refs, conds, ir.Complement(self.transform(node.pred))))
def transform_Complement(self, node): return ir.Complement(self.transform(node.a))
def transform_NotEquals(self, node): return ir.Complement(self.transform(Equals(node.a, node.b)))