ST package:what4

The strict ST monad. The ST monad allows for destructive updates, but is escapable (unlike IO). A computation of type ST s a returns a value of type a, and execute in "thread" s. The s parameter is either
  • an uninstantiated type variable (inside invocations of runST), or
  • RealWorld (inside invocations of stToIO).
It serves to keep the internal states of different invocations of runST separate from each other and from invocations of stToIO. The >>= and >> operations are strict in the state (though not in values stored in the state). For example,
runST (writeSTRef _|_ v >>= f) = _|_
Theory attributed to structs (equivalent to records in CVC4CVC5Z3, tuples in Yices)
A simple datatype for collecting sequences of strings that are to be concatenated together. We intend to maintain several invariants. First, that no sequence is empty; the empty string literal should instead be the unique representative of empty strings. Second, that string sequences do not contain adjacent literals. In other words, adjacent string literals are coalesced.
Statistics gathered on a running expression builder. See getStatistics.
StoreTerm a i v denotes the SMTLIB expression (store a i v).