We are happy to announce a new release of Why3, version 1.3.0, available
from the Web page http://why3.lri.fr/

There have been numerous changes since the last release (see below for a
list). Here are some of the most important ones.

- Module cloning now has much stricter requirements; this fixes the last
  remaining causes of unsoundness of Why3, as far as we know.

- Finite sets and maps have been reworked in the standard library.

- Preliminary support has been added for strings in WhyML and in the
  standard library.

- Performances have been considerably improved; this should be especially
  noticeable on huge proof sessions.


Changes between 1.2.1 and 1.3.0 are as follows:
(:x: marks a potential source of incompatibility)

Standard library
  * `pqueue.Pqueue` is now modeled using sequences instead of lists :x:
  * `queue.Queue` is now modeled using sequences instead of lists :x:
  * the `set` library has been revamped :x:
      - in `set.Fset`, type `set` becomes `fset`; `choose` becomes `pick`
      - module `appset.Appset` becomes `set.SetApp`;
        `impset.Impset` becomes `set.SetImp`
      - in `set.SetApp` and `set.SetImp`, type `t` becomes `set`;
        field `contents` becomes `to_fset`; call to `empty` becomes `empty ()`
  * new library `fmap` for finite maps
      - `Fmap`: polymorphic, logic finite maps to be used in logic
      - `MapApp`, `MapAppInt`, `MapImp`, `MapImpInt`: monomorphic finite maps to
        be used in programs
  * no more libraries `appmap` and `impmap` :x:
  * no more library `sum.Sum` (subsumed by `int.Sum`) :x:
  * new library `string` for character strings
      - `String`: basic string operations
      - `OCaml`: additional operations dedicated to extraction to OCaml
      - `RegExpr`: regular expressions

Language
  * the type `string` is a new built-in type; string literals can be
    given between double-quotes; see manual, Section 7.1 :x:
  * it is now possible to give a name to preconditions and assertions;
    `requires Foo { a = 3 }` sets the attribute `[@hyp_name:Foo]`, which tries
    to give the name `Foo` to the corresponding hypothesis after introduction
  * identifiers used for specification (resp. definition) of a function `foo`
    have been renamed from `foo_spec` (resp. `foo_def`) to `foo'spec` (resp. 
`foo'def`) :x:
  * identifiers used for goals `VC foo` have been renamed to `foo'vc`
  * identifiers used for record constructor `mk foo` have been renamed to 
`foo'mk` :x:
  * the `alias` clause can now be used in program functions to force the 
aliasing
    of function parameters and/or named returns

Tools
  * counterexamples given by `why3prove` are no longer printed using JSON
    by default; pass option `--json` to restore the previous behavior
  * new tool `why3pp` to pretty print Why3 source code (inductive definitions 
to LaTeX,
    formatting of mlw files)

Documentation
  * improved Chapter 7 on the WhyML language (record types, various
    kinds of function declarations, module cloning, etc.)
  * improved Section 11.4 on drivers, including an automatically generated
    dependency graph of driver files
  * improved Section 11.5 on transformations, including transformations
    with arguments

API
  * `Call_provers.print_prover_result` now takes an additional argument
    `~json_model` to indicate whether counterexamples are printed using JSON :x:
  * indices of array are now `model_value` for counterexamples :x:
  * ITP constructor `Task` now contains the location of the goal :x:
  * ITP constructor `Source_and_ce` has now 3 arguments instead of 2 :x:
  * ITP constructors `File_contents` and `Source_and_ce` has a new argument for
    the file format :x:
  * ITP constructor `File_contents` has a new boolean argument for
    interpretation of the file in the IDE as `read_only` :x:
  * new ITP constructor `Ident_notif_loc` :x:
  * ITP constructor `Get_first_unproven_node` now takes a heuristic name
    argument :x:

Transformations
  * `apply` and `rewrite` now behave better in presence of `let`;
    hypotheses with nested let-bindings can now be applied :x:
  * passing arguments to argument-free transformations is now forbidden
    (previously ignored) :x:
  * passing too many arguments to a transformation does not display a popup 
anymore
  * `induction_arg_ty_lex` is now equivalent to `induction_ty_lex`
  * `induction_arg_pr` now takes an optional argument that indicates what to
    generalize in the induction
  * `destruct` now destructs `not p` into `p -> false`;
    `destruct_rec` can further destruct afterwards;
    `destruct` can also destruct `true` and `false` :x:
  * decision procedures used for reflection must now be declared explicitly 
using
    `meta reflection val foo` :x:
  * `remove` and `bisect` should not raise unnecessary popups anymore
  * added `remove_rec`
  * attribute `inline:trivial` can be put on definitions to force their
    inlining by the transformation `inline_trivial`

IDE
  * display of counterexamples in the Task view has been improved
  * auto jumping to next unproved goal can now be disabled in the preferences
  * added a "reset proofs" command in the Tools menu to remove all the proofs
    from the session
  * default proof strategies "Auto level 1" and "Auto level 2"
    have been respectively renamed "Auto level 2" and "Auto level 3";
    "Auto level 1" now behaves similarly to "Auto level 0" but with a longer
    time limit; more details in the manual, Section 10.6 "Proof Strategies" :x:
  * strategies can now be defined using `%t` (resp. `%m`) to call a prover with
    the default timelimit (resp. memlimit)
  * added minimal search menu
  * a merlin-like feature to find the identifier located under the cursor has 
been
    added in the Edit menu.
  * read-only files can now be displayed and removed by right-clicking on their
    tab titles
  * colors for error can now be edited in why3.conf more precisely
  * most of the preferences can now be changed for the current session
  * Ctrl-Down/Ctrl-Up are mapped to more straightforward moves; the former
    movements can be triggered with Ctrl-Left/Ctrl-Right

Realizations
  * added experimental realizations for new Set theories in both Isabelle and 
Coq

Provers
  * support for Alt-Ergo 2.3.1 (released Feb 19, 2020)
  * support for Vampire 4.2.2 (released Dec 14, 2017)
  * support for Coq 8.10.0 (released Oct 8, 2019)
  * support for Coq 8.10.1 (released Oct 25, 2019)
  * support for Coq 8.10.2 (released Oct 29, 2019)
  * support for Coq 8.11.0 (released Jan 30, 2020)
  * make use of built-in support for strings by Z3 (4.8.6), and CVC4 (1.7)
_______________________________________________
Why3-club mailing list
Why3-club@lists.gforge.inria.fr
https://lists.gforge.inria.fr/mailman/listinfo/why3-club

Reply via email to