Changelog for crucible-0.7

0.7 -- 2024-02-05

0.6

We changed this structure so that the sym value is now only responsible for the What4 expression creation tasks. Now, there is a new "symbolic backend" bak value (that contains a sym) which is used to handle path conditions and assertions. These two values are connected by the IsSymBackend sym bak type class. To prevent even more code churn than is already occurring, the exact type of bak is wrapped up into an existential datatype and stored in the SimContext. This makes accessing the symbolic backend a little less convenient, but prevents the new type from leaking into every type signature that currently mentions sym. The withBackend and ovrWithBackend operations (written in a CPS style) are the easiest way to get access to the backend, but it can also be accessed via directly pattern matching on the existential SomeBackend type.

For many purposes the old sym value is still sufficient, and the bak value is not necessary. A good rule is that any operation that adds assumptions or assertions to the context will need the full symbolic backend bak, but any operation that just builds terms will only need the sym.