Set Constraints, Pattern Match Analysis, and SMT
Set constraints provide a highly general way to formulate program analyses. However, solving arbitrary boolean combinations of set constraints is NEXPTIME-complete. Moreover, while theoretical algorithms to solve arbitrary set constraints exist, they are either too complex to implement, or too slow to ever run. We present a translation that converts a set constraint formula into an SMT problem. Our technique allows for arbitrary boolean combinations of positive or negative set constraints, and leverages the performance of modern solvers such as Z3. To show the usefulness of unrestricted set constraints, we use them to devise a pattern match analysis for functional languages. This analysis ensures that missing cases of pattern matches are always unreachable. We implement our analysis in the Elm compiler and show that the our translation is fast enough to be used in practical verification.
READ FULL TEXT