<div dir="ltr">I'm pleased to announce v7.7 release of SBV, a library integrating modern SMT solvers into Haskell.<div><br></div><div>The main feature in this version is support for symbolic characters, strings, and regular-expressions; initially contributed by Joel Burget. SBV can now deal with proofs of programs that work on strings, taking advantage of modern SMT solving techniques. This is the first time SBV is venturing out of the realm of "number" like types (bit-vectors, reals, integers, floats etc.), so I am excited about the new problem domains we can now model symbolically. </div><div><br></div><div>A symbolic string is not a mere list of symbolic characters, but rather is a type on its own. While this departure seems not in the spirit of Haskell, this change of view brings a lot of expressive/proof power. Joel contributed two simple examples to illustrate:</div><div><ul><li>A regular-expression crossword solver: <a href="https://hackage.haskell.org/package/sbv-7.7/docs/Documentation-SBV-Examples-Strings-RegexCrossword.html">https://hackage.haskell.org/package/sbv-7.7/docs/Documentation-SBV-Examples-Strings-RegexCrossword.html</a><br></li><li>A simple SQL-injection analyzer: <a href="https://hackage.haskell.org/package/sbv-7.7/docs/Documentation-SBV-Examples-Strings-SQLInjection.html">https://hackage.haskell.org/package/sbv-7.7/docs/Documentation-SBV-Examples-Strings-SQLInjection.html</a></li></ul><div>Support for strings/regular-expressions is rather new in the SMT solving arena. Furthermore, the logic is not known to be decidable, and thus the solvers might struggle with difficult queries. Currently, only Z3 and CVC4 support this logic. If you do play with it, you're likely to find issues in both SBV itself and possibly with the underlying solver as well. Please report if you run into anything that looks fishy. In any case, implementations are solid enough that you should be able to model and reason about non-trivial string-processing programs with relative ease.</div></div><div><br></div><div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><ul><li> Hackage: <a href="https://hackage.haskell.org/package/sbv" target="_blank">https://hackage.haskell.org/<wbr>package/<span class="gmail-il">sbv</span></a><br></li><li> Homepage: <a href="http://leventerkok.github.io/sbv/" target="_blank">http://leventerkok.<wbr>github.io/<span class="gmail-il">sbv</span>/</a><br></li><li> Release notes: <a href="https://github.com/LeventErkok/sbv/blob/master/CHANGES.md" target="_blank">https://github.com/<wbr>LeventErkok/<span class="gmail-il">sbv</span>/blob/master/<wbr>CHANGES.md</a><br></li><li> SMTLib initiative: <a href="http://smtlib.cs.uiowa.edu/" target="_blank">http://smtlib.cs.<wbr>uiowa.edu/</a><br></li></ul></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><br></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">Thanks to Joel Burget for doing the initial work for adding support for symbolic strings.</div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><br></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">Feedback and bug reports are most welcome!</div></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><br></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">Happy reasoning!</div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><br></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">-Levent.</div></div>