You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

31 lines
585 B

  1. from z3 import *
  2. s = Solver()
  3. a, b = BitVecs('a b', 4)
  4. x = BitVec('x', 4)
  5. s.push()
  6. s.add(ForAll(x, ((x+a)^b)-a == ((x-a)^b)+a ))
  7. # enumerate all possible solutions:
  8. results=[]
  9. while True:
  10. if s.check() == sat:
  11. m = s.model()
  12. print (m)
  13. results.append(m)
  14. block = []
  15. block = [a != m[a].as_long(), b != m[b].as_long()]
  16. s.add(Or(block))
  17. else:
  18. print ("results total=", len(results))
  19. break
  20. #print(s.sexpr())
  21. s.pop()
  22. s.add(Exists(x, ((x+a)^b)-a != ((x-a)^b)+a ))
  23. result = s.check()
  24. print(result)
  25. print(s.sexpr())
  26. if result == sat:
  27. print(s.model())