Пример #1
0
 def baseoperationVisit(self, baseop):
     #TODO should go deeper.
     if issubclass(baseop.op, Lazy):
         return z3.Bool("bool!" + str(baseop.dimacs_var))
     else:
         #print(baseop.args)
         res = []
         blasted = baseop.op.apply(self.solver, *baseop.args)
         return retvisit(self,blasted)
         #TODO CLEAN
         #print(blasted)
         subargs = []
         for i in blasted:
             subargs.append(retvisit(self, i))
         return z3.And(subargs)
         sys.exit()
         flag = False
         for arg in blasted:
             subres = []
             for subarg in arg:
                 if isinstance(subarg, BoolConst):
                     if subarg.val:
                         flag = True
                         break
                     else:
                         continue
                 if subarg < 0:
                     subres.append(z3.Not(z3.Bool(str(-subarg))))
                 else:
                     subres.append(z3.Bool(str(subarg)))
             if flag:
                 flag = False
                 continue
             res.append(z3.Or(subres))
         return z3.And(res)
Пример #2
0
 def programVisit(self, program):
     res = [retvisit(self, i) for i in self.solver.instantiate_graph_constraints]
     for i in program.ast:
         val = retvisit(self, i)
         if val:
             res.append(val)
     expr = z3.And(res)
     goal = z3.Goal()
     goal.add(expr)
     tactic = z3.Tactic("tseitin-cnf")
     prog = tactic(goal)[0]
     return self.parse_Z3_tseitin(prog)
Пример #3
0
 def opVisit(self, op):
     name = op.ID.ID
     res = []
     for i in op.args:
         res.append(retvisit(self, i))
     if name == "and":
         return z3.And(res)
     elif name == "or":
         return z3.Or(res)
     elif name == "not":
         return z3.Not(res[0])
Пример #4
0
 def assertVisit(self, a):
     return retvisit(self, a.expr)