Dafny 1.9.9
Dafny version 1.9.9 includes the following changes over version 1.9.8:
Language
-
Allow TLA+ style conjunctions and disjunctions.
-
Allow the first datatype constructor to be preceded by a
|. -
Destructor names can now be shared among datatype constructors.
-
Added two-state functions and two-state predicates.
-
Two-state lemmas no longer support
readsclauses. Instead, use the newunchangedpredicate. -
Added
unchangedpredicate, which takes a frame argument and says those things are the same in the pre- and post-states. -
freshapplied to a collection now says that all elements of the collection arefresh. This is a change in semantics from before. -
allocatedpredicate (re-)introduced. It says that its argument is available in the state. -
Inside an
old, disallowunchanged,fresh, two-state functions, two-state lemmas, and nestedold. -
Added
constdeclarations. -
Added conversions between
charan integral types. -
Function results can now be named, for use in the function's postcondition.
-
Added operations that rotate bits in bitvectors.
-
mapandimapnow have.Keys,.Values, and.Itemsmembers. -
Language support for revealing
{:opaque}functions. Usereveal F()instead of the previousreveal_F(). -
Support for tuples in
matchconstructs. -
Expand the repertoire of constructs where co-recursive function calls are recognized.
-
Proper support for type parameters in inductive and co-inductive predicates.
-
Allow
readsclauses on inductive and co-inductive predicates. -
Disallow parameters marked with
ghostin signatures that are already ghost.
Modules
-
Class members can be individually exported.
-
Datatypes can now be exported as provided or revealed.
-
All datatypes can be revealed by
reveal *. -
Opened imports are not exported.
-
exclusively refinesis no longer supported. -
Module facades may now only be refined by explicit refinements. The previous structural checks are no longer supported.
Verification
-
Improved string support
-
More quantifier rewriting to help avoid matching loops, in particular address quantifiers like
forall i :: 1 <= i < a.Length ==> a[i-1] <= a[i]
Pipeline
-
Speed-ups in resolution and translation (and added
/optimizeResolutionflag). -
Set appropriate exit value for Dafny errors.
-
Use .NET Framework 4.5.
IDEs
-
Syntax highlight bitvectors in Visual Studio.
-
Show some Boogie resolution errors in lieu of many a "Verification process error" in Visual Studio.
-
Improved caching.
Advanced settings
-
Improvement in manual fuel settings.
-
/allocatedoption, which encodes allocatedness in alternate ways. -
/printIncludesoption. -
/disableScopesoption. -
Handle
:warnShadowingattribute on methods and lemmas. -
As an optimization, Boogie implementations with no proof obligations are no longer emitted.
-
Don't verify modules that came from an include.
Miscellaneous
-
Bug fixes in subset types.
-
Various bug fixes, including many Issues reported on github.