4 Helper script to convert the log generated by '-debug-only=constraint-system'
5 to a Python script that uses Z3 to verify the decisions using Z3's Python API.
15 > ./convert-constraint-log-to-z3.py path/to/file.log > check.py && python ./check.py
23 s.add(x1 + -1 * x2 <= 0)
24 s.add(x2 + -1 * x3 <= 0)
25 s.add(-1 * x1 + x3 <= -1)
26 assert(s.check() == unsat)
27 print('all checks passed')
36 parser
= argparse
.ArgumentParser(
37 description
="Convert constraint log to script to verify using Z3."
40 "log_file", metavar
="log", type=str, help="constraint-system log file"
42 args
= parser
.parse_args()
45 with
open(args
.log_file
, "rt") as f
:
48 groups
= content
.split("---")
49 var_re
= re
.compile("x\d+")
51 print("from z3 import *")
53 constraints
= [g
.strip() for g
in group
.split("\n") if g
.strip() != ""]
55 for c
in constraints
[:-1]:
56 for m
in var_re
.finditer(c
):
57 variables
.add(m
.group())
58 if len(variables
) == 0:
61 print('{} = Int("{}")'.format(v
, v
))
63 for c
in constraints
[:-1]:
64 print("s.add({})".format(c
))
65 expected
= constraints
[-1].strip()
66 print("assert(s.check() == {})".format(expected
))
67 print('print("all checks passed")')
70 if __name__
== "__main__":