Writing correct programs is hard because it requires understanding and analyzing complex interactions between basic components, which are inherently intractable to fully reason about mathematically. To overcome this limitation, empirical study and ad-hoc techniques can be used to identify useful local properties and simplify assumptions for specific cases, but there is no single solution or ...