Version 1.4.1
[why3.git] / CHANGES.md
blob3dff14d4f1511687b40f61c0f31f2969e7706684
1 :x: marks a potential source of incompatibility
3 Version 1.4.1, February 18, 2022
4 --------------------------------
6 Bug fixes
7   * fixed usage of various dependencies: `menhir`, `camlzip`, `ppx_deriving`, `coq-flocq`, `mlmpfr`
9 Provers
10   * support for Alt-Ergo 2.4.1 (released July 28, 2021)
12 Version 1.4.0, March 13, 2021
13 -----------------------------
15 WhyML
16   * sub-namespaces are now allowed in `for each` loops; see Section 7.4.7 of the manual
17   * function literals are now supported; see Sections 7.3.2 and 7.4.9 of the manual
19 Standard library
20   * added lemma `permut_sub_trans` to `array.ArrayPermut`
21   * added function `inter` (intersection) to `bag.Bag`
22   * added a new theory `option.Map`
23   * added a precondition to `string.OCaml.([])`
24   * added functions `set`, `init`, `sub` to `mach.array.ArrayInt63`
25   * moved OCaml exception `Invalid_argument` to `ocaml.Exceptions` :x:
26   * added function `length` in `mach.c.String`
27   * added functions `sdiv` and `srem` to `bv`
28   * added signed operations to `mach.bv`
29   * added missing module for double-precision floats to `mach.floats`
31 Tools
32   * command-line options now follow the getopt standard;
33     in particular, long options start with `--` :x:
34   * binaries `why3config`, `why3prove`, etc, no longer exist;
35     they are now plugins that can be loaded only using the main `why3` binary,
36     e.g., `why3 config` :x:
37   * `why3 config` now uses subcommands instead of options;
38     in particular, prover detection is performed using `why3 config detect`
39     and manual prover addition is performed using `why3 config add-prover`;
40     see Section 6.1 of the manual :x:
41   * `why3 execute` now provides runtime assertion checking; see Section 6.8.1 of the manual
42   * runtime assertion checking is also used to validate counterexamples in `why3 prove`
43   * loop invariants can now be inferred automatically; see Section 8.5 of the manual
44   * JSON output of counterexamples was modified :x:
46 IDE
47   * native keyboard modifiers are now used on macOS
48   * `why3 ide` in the Docker image can now be used through a web browser
49     instead of an X server; see Section 5.1.2 of the manual
51 Input Formats
52   * a new front-end named MLCFG was added; it supports unstructured program codes,
53     including `goto` statements; see Section 9.3 of the manual
54   * translation of `<>` and `not` have been fixed for micro-C and Python
56 Extraction
57   * allowed transitive inclusion (`export`) of interfaces and preludes
58   * added `remove module` for drivers to exclude modules
59   * added C extraction of strings
60   * improved handling of C header files
61   * added support of `blacklist` to C extraction
62   * fixed extraction of partially applied functions
63   * fixed OCaml extraction of nested tuples
64   * fixed OCaml extraction of `OneTime` integers
66 Web interface TryWhy3
67   * `?lang=foo` can now be used to select an input format other than WhyML;
68     the input format can also be changed dynamically using a combobox
69   * `?code=foo` can now be used to fill the editor with some code;
70     the encoded string can be retrieved by clicking the "Copy URL" button
71   * examples are no longer embedded; only files mentioned
72     in `examples/index.txt` are considered :x:
73   * Alt-Ergo workers can now be stopped without losing the session
75 Provers
76   * support for PVS 7.1 (released Apr 30, 2020)
77   * support for Z3 4.8.7 (released Nov 19, 2019)
78   * support for Z3 4.8.8 (released May 9, 2020)
79   * support for Z3 4.8.9 (released Sep 11, 2020)
80   * support for Z3 4.8.10 (released Jan 20, 2021)
81   * support for AltErgo 2.3.3 (released Aug 19, 2020)
82   * support for AltErgo 2.4.0 (released Jan 22, 2021)
83   * support for Coq 8.13.0 (released Jan 7, 2021)
84   * support for CVC4 1.8 (released Jun 19, 2020)
86 Documentation
87   * Why3 modes for editors (Section 5.3)
88   * Why3-specific configuration for shells (Section 5.4)
89   * detailed explanations on semantics of various WhyML statements (Section 7.4)
90   * detailed explanations on WhyML module system (Section 7.5)
91   * explanations on how users can customize drivers (Section 12.5)
93 API
94   * helpers were added to ease production of parse trees; see Section 4.9 of the manual
95   * generation of counterexamples was changed; see Section 4.10 of the manual :x:
97 Additional bug fixes
98   * fixed `why3 prove` when called on a DIMACS file
99   * improved detection of out-of-range values in `why3 execute`
100   * fixed micro-Python parser when there is no newline at end of file
101   * fixed SMT translation of negative floating-point literals
102   * fixed set of reserved symbols for SMT solvers
103   * restored `hypothesis_selection` transformation
104   * fixed unsoundness of transformations `case` and `destruct` in presence
105     of polymorphic formulas
107 Version 1.3.3, September 11, 2020
108 ---------------------------------
110 Bug fixes
111   * fixed compilation on OpenBSD
113 Provers
114   * support for Coq 8.12.0 (released Jul 27, 2020)
116 Version 1.3.2, September 5, 2020
117 --------------------------------
119 Bug fixes
120   * fixed compilation on FreeBSD and macOS
121   * fixed `use_api` examples
122   * removed support for strings from the default variant of CVC4 1.7
123   * fixed custom editors for provers not being saved
125 Version 1.3.1, March 24, 2020
126 -----------------------------
128 Bug fixes
129   * fixed conflicting symbols for CVC4 1.7
130   * fixed META file
131   * fixed infinite loops in strategies
133 Version 1.3.0, March 17, 2020
134 -----------------------------
136 Standard library
137   * `pqueue.Pqueue` is now modeled using sequences instead of lists :x:
138   * `queue.Queue` is now modeled using sequences instead of lists :x:
139   * the `set` library has been revamped :x:
140       - in `set.Fset`, type `set` becomes `fset`; `choose` becomes `pick`
141       - module `appset.Appset` becomes `set.SetApp`;
142         `impset.Impset` becomes `set.SetImp`
143       - in `set.SetApp` and `set.SetImp`, type `t` becomes `set`;
144         field `contents` becomes `to_fset`; call to `empty` becomes `empty ()`
145   * new library `fmap` for finite maps
146       - `Fmap`: polymorphic, logic finite maps to be used in logic
147       - `MapApp`, `MapAppInt`, `MapImp`, `MapImpInt`: monomorphic finite maps to
148         be used in programs
149   * no more libraries `appmap` and `impmap` :x:
150   * no more library `sum.Sum` (subsumed by `int.Sum`) :x:
151   * new library `string` for character strings
152       - `String`: basic string operations
153       - `OCaml`: additional operations dedicated to extraction to OCaml
154       - `RegExpr`: regular expressions
156 Language
157   * the type `string` is a new built-in type; string literals can be
158     given between double-quotes; see manual, Section 7.1 :x:
159   * it is now possible to give a name to preconditions and assertions;
160     `requires Foo { a = 3 }` sets the attribute `[@hyp_name:Foo]`, which tries
161     to give the name `Foo` to the corresponding hypothesis after introduction
162   * identifiers used for specification (resp. definition) of a function `foo`
163     have been renamed from `foo_spec` (resp. `foo_def`) to `foo'spec` (resp. `foo'def`) :x:
164   * identifiers used for goals `VC foo` have been renamed to `foo'vc`
165   * identifiers used for record constructor `mk foo` have been renamed to `foo'mk` :x:
166   * the `alias` clause can now be used in program functions to force the aliasing
167     of function parameters and/or named returns
169 Tools
170   * counterexamples given by `why3prove` are no longer printed using JSON
171     by default; pass option `--json` to restore the previous behavior
172   * new tool `why3pp` to pretty print Why3 source code (inductive definitions to LaTeX,
173     formatting of mlw files)
175 Documentation
176   * improved Chapter 7 on the WhyML language (record types, various
177     kinds of function declarations, module cloning, etc.)
178   * improved Section 11.4 on drivers, including an automatically generated
179     dependency graph of driver files
180   * improved Section 11.5 on transformations, including transformations
181     with arguments
184   * `Call_provers.print_prover_result` now takes an additional argument
185     `~json_model` to indicate whether counterexamples are printed using JSON :x:
186   * indices of array are now `model_value` for counterexamples :x:
187   * ITP constructor `Task` now contains the location of the goal :x:
188   * ITP constructor `Source_and_ce` has now 3 arguments instead of 2 :x:
189   * ITP constructors `File_contents` and `Source_and_ce` have a new argument
190     for the file format :x:
191   * ITP constructor `File_contents` has a new boolean argument for
192     interpretation of the file in the IDE as `read_only` :x:
193   * new ITP constructor `Ident_notif_loc` :x:
194   * ITP constructor `Get_first_unproven_node` now takes a heuristic name
195     argument :x:
197 Transformations
198   * `apply` and `rewrite` now behave better in presence of `let`;
199     hypotheses with nested let-bindings can now be applied :x:
200   * passing arguments to argument-free transformations is now forbidden
201     (previously ignored) :x:
202   * passing too many arguments to a transformation does not display a popup anymore
203   * `induction_arg_ty_lex` is now equivalent to `induction_ty_lex`
204   * `induction_arg_pr` now takes an optional argument that indicates what to
205     generalize in the induction
206   * `destruct` now destructs `not p` into `p -> false`;
207     `destruct_rec` can further destruct afterwards;
208     `destruct` can also destruct `true` and `false` :x:
209   * decision procedures used for reflection must now be declared explicitly using
210     `meta reflection val foo` :x:
211   * `remove` and `bisect` should not raise unnecessary popups anymore
212   * added `remove_rec`
213   * attribute `inline:trivial` can be put on definitions to force their
214     inlining by the transformation `inline_trivial`
217   * display of counterexamples in the Task view has been improved
218   * auto jumping to next unproved goal can now be disabled in the preferences
219   * added a "reset proofs" command in the Tools menu to remove all the proofs
220     from the session
221   * default proof strategies "Auto level 1" and "Auto level 2"
222     have been respectively renamed "Auto level 2" and "Auto level 3";
223     "Auto level 1" now behaves similarly to "Auto level 0" but with a longer
224     time limit; more details in the manual, Section 10.6 "Proof Strategies" :x:
225   * strategies can now be defined using `%t` (resp. `%m`) to call a prover with
226     the default timelimit (resp. memlimit)
227   * added minimal search menu
228   * a merlin-like feature to find the identifier located under the cursor has been
229     added in the Edit menu.
230   * read-only files can now be displayed and removed by right-clicking on their
231     tab titles
232   * colors for error can now be edited in why3.conf more precisely
233   * most of the preferences can now be changed for the current session
234   * Ctrl-Down/Ctrl-Up are mapped to more straightforward moves; the former
235     movements can be triggered with Ctrl-Left/Ctrl-Right
237 Realizations
238   * added experimental realizations for new Set theories in both Isabelle and Coq
240 Provers
241   * support for Alt-Ergo 2.3.1 (released Feb 19, 2020)
242   * support for Isabelle 2019 (released June 2019)
243   * support for Vampire 4.2.2 (released Dec 14, 2017)
244   * support for Coq 8.10.0 (released Oct 8, 2019)
245   * support for Coq 8.10.1 (released Oct 25, 2019)
246   * support for Coq 8.10.2 (released Oct 29, 2019)
247   * support for Coq 8.11.0 (released Jan 30, 2020)
248   * make use of built-in support for strings by Z3 (4.8.6), and CVC4 (1.7)
250 Version 1.2.1, October 28, 2019
251 -------------------------------
253 Bug fixes
254   * fixed compilation with OCaml 4.09
255   * fixed compilation with Lablgtk3
257 Provers
258   * support for Z3 4.8.6 (released Sep 20, 2019)
259   * support for Z3 4.8.5 (released Jun 3, 2019)
260   * support for CVC4 1.7 (released Apr 9, 2019)
261   * support for Alt-Ergo 2.3.0 (released Feb 11, 2019)
262   * support for Coq 8.9.1 (released May 20, 2019)
264 Version 1.2.0, February 11, 2019
265 --------------------------------
267 Session
268   * file path stored in session files are now represented in a
269     system-independent way
271 Drivers
272   * the clause `syntax converter` has been removed; any former use should
273     be replaced by `syntax literal` and/or `syntax function` :x:
275 Language
276   * a syntactic sugar called "auto-dereference" is introduced, so as
277     to avoid, on simple programs, the heavy use of `(!)` character on
278     references; see details in Section A.1 of the manual
280 Transformations
281   * `split_vc` and `subst_all` now avoid substituting user symbols by
282     generated ones :x:
283   * `destruct_rec` applies `destruct` recursively on a goal
284   * `destruct` now simplifies away equalities on constructors :x:
285   * `destruct` now simplifies `if .. then .. else ..` and `match .. with ..` :x:
286   * `destruct_alg` renamed to `destruct_term`; it also has a new experimental
287     keyword `using` to name newly destructed elements :x:
289 Tools
290   * added a command `why3 session update` to modify sessions from the
291     command line; so far, only option `-rename-file` exists, for
292     renaming files
293   * `why3 config --add-prover` now takes the shortcut as second
294     argument; option `--list-prover-ids` has been renamed to
295     `--list-prover-families` :x:
298   * clicking on the status of a failed proof attempt in the proof tree
299     now generates counterexamples
300   * added support for GTK3
302 Counterexamples
303   * the trigger for counterexamples has been changed; read Section 5.3.7
304     of the manual for details :x:
305   * various improvements on the generated counterexamples
306   * field names now use ident names instead of smt generated ones, e.g.,
307     `int32qtint` -> `int32'int` :x:
308   * fixed parsing of bitvector values from counterexamples generated by Z3
310 Extraction
311   * fixed extraction of functions passed as arguments
312   * fixed extraction of recursive polymorphic functions for Ocaml
313   * improved extraction of records for C
315 Standard library
316   * `Stack.length` and `Queue.length` now return a `Peano.t`, for
317     improved extraction :x:
319 Provers
320   * support for Z3 4.8.1 (released Oct 16, 2018)
321   * support for Z3 4.8.3 (released Nov 20, 2018)
322   * support for Z3 4.8.4 (released Dec 20, 2018)
323   * support for Coq 8.9.0 (released Jan 17, 2019)
324   * upgraded Coq realizations for floating-point arithmetic to Flocq 3.1
325   * dropped support for Coq 8.5
327 Version 1.1.1, December 17, 2018
328 --------------------------------
330 Bug fixes
331   * prevented broken extraction of `any`
332   * fixed evaluation order when extracting nested mutators
333   * fixed extraction of nested recursive polymorphic functions
334   * fixed cloning of expressions raising exceptions
336 Version 1.1.0, October 17, 2018
337 -------------------------------
339 Core
340   * variants can now be inferred on some lemma functions
341   * coercions are now supported for `if` and `match` branches
342   * `interrupt` command should now properly interrupt running provers.
343   * clearer typing error messages thanks to printing qualified names
344   * fixed handling of prover upgrades, resurrected the policy
345     "duplicate" and added a policy "remove"
348   * added `Call_provers.interrupt_call` to interrupt a running prover
349     (contribution by Pierre-Yves Strub)
351 Language
352   * program functions can now be marked `partial` to prevent them from
353     being used in ghost context; the annotation does not have to be
354     explicitly put on their callers
355   * `use` now accepts several module names separated by commas
356   * symbolic operators can be used in identifiers like `(+)_ident` or
357     `([])'ident`
358   * range types have now a default ordering to be used in `variant` clause
360 Standard library
361   * library `ieee_float`: floating-point operations can now be used in
362     programs
364 Transformations
365   * `split_vc` behaves slightly differently :x:
367 Provers
368   * support for Alt-Ergo 2.1.0 (released Mar 14, 2018)
369   * support for Alt-Ergo 2.2.0 (released Apr 26, 2018)
370   * support for Coq 8.8.1 (released Jun 29, 2018)
371   * support for Coq 8.8.2 (released Sep 26, 2018)
372   * support for CVC4 1.6 (released Jun 25, 2018)
373   * support for Z3 4.7.1 (released May 23, 2018)
374   * support for Isabelle 2018 (released Aug 2018)
375     (contribution by Stefan Berghofer)
376   * dropped support for Isabelle 2016 (2017 still supported) :x:
377   * dropped support for Alt-Ergo versions < 2.0.0 :x:
379 Version 1.0.0, June 25, 2018
380 ----------------------------
382 Core
383   * improved support of counter-examples
384   * attribute `[@vc:sp]` on an expression switches from traditional WP
385     to Flanagan-Saxe-like VC generation
386   * type invariants now produce logical axioms;
387     a type with an invariant must be proved to be inhabited :x:
388   * logical symbols can no longer be used in non-ghost code;
389     in particular, there is no polymorphic equality in programs any more,
390     so equality functions must be declared/defined on a per-type basis
391     (already done for type `int` in the standard library) :x:
393 Language
394   * numerous changes to syntax, see documentation appendix :x:
395   * `let function`, `let predicate`, `val function`, and `val predicate`
396     introduce symbols in both logic and programs
397   * added overloading of program symbols
398   * new contract clause `alias { <term> with <term>, ... }` :x:
399   * support for parallel assignment `<term>,... <- <term>,...`
400   * support for local exceptions using `exception ... in ...`
401   * added `break`, `continue`, and `return` statements
402   * support for `exception` branches in `match` constructs
403   * support for `for` loops on range types
404     (including machine integers from the standard library)
405   * support for type coercions in logic using `meta coercion`
406   * keyword `theory` is deprecated; use `module` instead
407   * term on the left of sequence `;` must be of type `unit` :x:
408   * cloned axioms turn into lemmas; use `with axiom my_axiom`
409     or `with axiom .` to keep them as axioms :x:
410   * `any <type> <spec>` produces an existential precondition;
411     use `val f : <type> <spec> in ...` (unsafe!) instead :x:
412   * `use T` and `clone T` now import the generated namespace T;
413     use `use T as T` and `clone T as T` to prevent this :x:
414   * `pure { <term> }` produces a ghost value in program code
415   * `a <-> b <-> c` is now parsed as `(a <-> b) /\ (b <-> c)`;
416     `a <-> b -> c` is now rejected :x:
418 Standard library
419   * machine integers in `mach.int.*` are now range types :x:
420   * added a minimal memory model for the C language in `mach.c`
421   * new modules `witness.Witness` and `witness.Nat`
423 Extraction
424   * improved extraction to OCaml
425   * added partial extraction to C using the memory model of `mach.c`
426   * added extraction to CakeML (using `why3 extract -D cakeml ...`)
428 Transformations
429   * transformations can now have arguments
430   * added transformations `assert`, `apply`, `cut`, `rewrite`, etc., Ã  la Coq
431   * added transformations for reflection-based proofs
433 Drivers
434   * support for `use` in theory drivers
437   * replaced left toolbar by a contextual menu
438   * source is now editable
439   * premises are no longer implicitly introduced
440   * added textual interface to call transformations and provers
442 Tools
443   * deprecated `.why` file extension; use `.mlw` instead
445 Provers
446   * removed the `why3` Coq tactic :x:
447   * dropped support for Coq 8.4 :x:
449 Miscellaneous
450   * moved the opam base package to `why3`; added `why3-ide` and `why3-coq`
452 Version 0.88.3, January 11, 2018
453 --------------------------------
455 Provers
456   * support for Alt-Ergo 2.0.0 (released Nov 14, 2017)
457   * support for Coq 8.7.1 (released Dec 16, 2017)
458   * support for Z3 4.6.0 (released Dec 18, 2017)
460 Standard library
461   * fixed soundness of theory `int.Exponentiation` when multiplication is not
462     commutative :x:
464 Miscellaneous
465   * fixed support for `--enable_relocation=yes`
466   * fixed support for Windows
468 Version 0.88.2, December 7, 2017
469 --------------------------------
471 Miscellaneous
472   * `why3 session html`: improved compliance of generated files
473   * `why3 doc`: fixed missing anchors for operator definitions
474   * improved build process when `coqtop.byte` is missing
476 Version 0.88.1, November 6, 2017
477 --------------------------------
480   * exported function `Call_provers.get_new_results`
482 Provers
483   * improved support for Isabelle 2017
484   * fixed support for Coq 8.7 (released Oct 17, 2017)
486 Miscellaneous
487   * fixed compilation for OCaml 4.06
488   * improved support for nullary `val` declarations with regions
490 Version 0.88.0, October 6, 2017
491 -------------------------------
493 Language
494   * added two new forms of type declarations: integer range types and
495     floating-point types. To denote constants in such types, integer
496     constants and real constants can be cast to such types. This
497     support is exploited in drivers for provers that support bitvector
498     theories (CVC4, Z3) and floating-point theory (Z3).
499     More details in the manual, section 7.2.4 "Theories".
500   * a quote character `'` inside an identifier must either be at the
501     end, or be followed by either a digit, the underscore character
502     `_` or another quote. Identifiers with a quote followed by a
503     letter are reserved. :x:
505 Standard library
506   * new theory `ieee_float` formalizing floating-point arithmetic,
507     compliant to IEEE-754, mapped to SMT-LIB FP theory.
509 User features
510   * proof strategies: `why3 config` now generates default proof strategies
511     using the installed provers. These are available under name "Auto
512     level 0", "Auto level 1" and "Auto level 2" in `why3 ide`.
513     More details in the manual, section 10.6 "Proof Strategies".
514   * counterexamples: better support for array values, support for
515     floating-point values, support for Z3 in addition to CVC4.
516     More details in the manual, section 6.3.5 "Displaying Counterexamples".
518 Plugins
519   * new input format for a small subset of Python
521 Provers
522   * support for Isabelle 2017 (released Oct 2017)
523   * dropped support for Isabelle 2016 (2016-1 still supported) :x:
524   * support for Coq 8.6.1 (released Jul 25, 2017)
525   * tentative support for Coq 8.7
526   * dropped tactic support for Coq 8.4 (proofs still supported) :x:
527   * support for CVC4 1.5 (released Jul 10, 2017)
528   * support for E 2.0 (released Jul 4, 2017)
529   * support for E 1.9.1 (release Aug 31, 2016)
531 Version 0.87.3, January 12, 2017
532 --------------------------------
534 Bug fixes
535   * fixed OCaml extraction with respect to ghost parameters
536   * assorted bug fixes
538 Provers
539   * support for Alt-Ergo 1.30 (released Nov 21, 2016)
540   * support for Coq 8.6 (released Dec 8, 2016)
541   * support for Gappa 1.3 (released Jul 20, 2016)
542   * dropped support for Isabelle 2015 :x:
543   * support for Isabelle 2016-1 (released Dec 2016)
544   * support for Z3 4.5.0 (released Nov 8, 2016)
546 Version 0.87.2, September 1, 2016
547 ---------------------------------
549 Bug fixes
550   * improved well-formedness of extracted OCaml code
551   * assorted bug fixes
553 Version 0.87.1, May 27, 2016
554 ----------------------------
556 Bug fixes
557   * assorted bug fixes
559 Version 0.87.0, March 15, 2016
560 ------------------------------
562 Language
563   * added two new logical connectives `by` and `so` as keywords :x:
565 Tools
566   * added a command-line option `--extra-expl-prefix` to specify
567     additional possible prefixes for VC explanations. Available for
568     `why3` commands `prove` and `ide`.
569   * removed `jstree` style from the `session` command :x:
571 Transformations
572   * all split transformations respect the `"stop_split"` label now.
573     `split_*_wp` is a synonym for `split_*_right` :x:
574   * the `split_*_right` transformations split the left-hand side subformulas
575     when they carry the `"case_split"` label :x:
576   * `split_intro` is now the composition of `split_goal_right` and
577     `introduce_premises` :x:
579 Standard library
580   * improved bitvector theories :x:
583   * renamed functions in module `Split_goal` :x:
584   * `split_intro` moved to Introduction :x:
586 Encoding
587   * if a task has no polymorphic object (except for the special
588     cases of equality and maps), then the translation to SMT-LIB
589     format is direct :x:
591 Provers
592   * dropped support for Alt-Ergo versions older than 0.95.2 :x:
593   * support for Alt-Ergo 1.01 (released Feb 16, 2016) and
594     non-free versions 1.10 and 1.20
595   * support for Coq 8.4pl6 (released Apr 9, 2015)
596   * support for Coq 8.5 (released Jan 21, 2016)
597   * support for Gappa 1.2.0 (released May 19, 2015)
598   * dropped support for Isabelle 2014 :x:
599   * support for Isabelle 2015 (released May 25, 2015) and
600     Isabelle 2016 (released Feb 17, 2016)
601   * support for Z3 4.4.0 (released Apr 29, 2015) and
602     4.4.1 (released Oct 5, 2015)
603   * support for Zenon 0.8.0 (released Oct 21, 2014)
604   * support for Zenon_modulo 0.4.1 (released Jul 2, 2015)
606 Distribution
607   * non-free files have been removed: `boomy` icon set,
608     javascript helpers for `why3 session html --style jstree`
610 Version 0.86.3, February 8, 2016
611 --------------------------------
613 Bug fixes
614   * assorted bug fixes
616 Provers
617   * fix compilation issues with Coq 8.5
618     (the tactic for 8.5 now behaves like `idtac` on successfully proved goals) :x:
620 Version 0.86.2, October 13, 2015
621 --------------------------------
623 Bug fixes
624   * assorted bug fixes
626 Version 0.86.1, May 22, 2015
627 ----------------------------
630   * improved task highlighting for negated premises
631     (contributed by Mikhail Mandrykin, AstraVer project)
633 Provers
634   * support for Gappa 1.2 (released May 19, 2015)
636 Bug fixes
637   * `why3doc`: garbled output
639 Version 0.86, May 11, 2015
640 --------------------------
642 Core
643   * steps limit for reliable replay of proofs, available for Alt-Ergo
644     and CVC4
646 Transformations
647   * new transformations `induction_pr` and `inversion_pr` to reason with
648     inductive predicates
650 Standard library
651   * renamed theory `int.NumOfParam` into `int.NumOf`; the predicate `numof`
652     now takes some higher-order predicate as argument (no more need
653     for cloning). Similar change in modules `array.NumOf`... :x:
654   * improved theory `real.PowerReal` :x:
655   * new theory: sequences
656   * new theories for bitvectors, mapped to BV theories of SMT solvers
657     Z3 and CVC4
659 Provers
660   * support for Coq 8.4pl5 (released Nov 7, 2014)
661   * support for Z3 4.3.2 (released Oct 25, 2014)
662   * support for MetiTarski 2.4 (released Oct 21, 2014)
663   * support for Alt-Ergo 0.99.1 (released Dec 30, 2014)
664   * support for Alt-Ergo 1.00.prv (released Jan 29, 2015)
665   * support for veriT 201410 (released Nov 2014)
666   * support for Psyche (experimental,
667     http://www.lix.polytechnique.fr/~lengrand/Psyche/)
668   * preliminary support for upcoming CVC4 1.5 (steps feature)
671   * config file not automatically saved anymore at exit. Configuration
672     is saved on disk for future sessions if, and only if, preferences
673     window is exited by hitting the "Save&Close" button
674   * right part of main window organized in tabs
675   * better explanations and task highlighting
676     (contributed by Mikhail Mandrykin, AstraVer project)
678 Bug fixes
679   * bug in interpreter in presence of nested mutable fields
680   * IDE: proofs in progress should never be "cleaned"
681   * IDE: display warnings after reload
683 Version 0.85, September 17, 2014
684 --------------------------------
686 Langage
687   * fix a soundness bug in the detection of aliases when calling a
688     WhyML function: some alias could have been forgotten when a type
689     variable was substituted with a mutable type :x:
691 Proof sessions
692   * use the full path of identifiers when the user introduces namespaces
693     (BTS #17181)
695 Transformations
696   * fix a soundness bug in `compute_in_goal` regarding the handling of
697     logical implication. :x:
698   * several improvements to `compute_in_goal`:
699     - left-hand side of rewrite rules can be any symbols, not only
700       non-interpreted ones.
701     - perform beta-reduction when possible
702     - the maximal number of reduction steps can be increased using meta
703       `compute_max_steps`
704     - the transformation is documented in details in the manual
705   * new transformation `compute_specified`:
706     less aggressive variant of `compute_in_goal`.
707     Unfolding of definitions is controlled using meta `rewrite_def`
708   * fixed a bug in `eliminate_if` when applied on inductive definitions
710 Provers
711   * fixed wrong warning when detecting Isabelle2014
713 Version 0.84, September 1, 2014
714 -------------------------------
716 Tools
717   * the file generated by `why3 session html f.mlw` is now
718     `f/why3session.html` and not `f/f.html` :x:
719   * the default behavior of `why3` has been moved to the `prove` subcommand :x:
720   * options `--exec`, `--extract`, and `--realize`, have been moved to
721     subcommands: `execute`, `extract`, and `realize` :x:
722   * `why3replayer` has been moved to the `replay` subcommand :x:
723   * other tools have been moved to `why3` subcommands too: `config`, `doc`, `ide`,
724     `session`, `wc`. For local usage, the old commands are still available. :x:
726 Proof sessions
727   * session files are split in two parts: `why3session.xml` and
728     `why3shapes`. The latter file contains the checksums and the shapes
729     for the goals. That second file is not strictly needed for
730     replaying a proof session, it is only useful when input programs
731     are modified, to track obsolete goals. If Why3 is compiled with
732     compression support (provided by the `ocamlzip` library) then files for
733     shapes are compressed into `why3shapes.gz`.
735 Standard library
736   * renamed `array.ArraySorted` into `array.IntArraySorted`;
737     `array.ArraySorted` is now generic, with type and order relation parameters :x:
738   * reduced amount of `use export` in the standard library: theories
739     now only export the symbols they define. Users may need to insert more
740     `use import` in their theories (typically `int.Int`, `option.Option`,
741     `list.List`, etc.). :x:
743 Provers
744   * fixed Coq printer (former Coq proofs may have to be updated, by removing
745     non-emptiness constraints from polymorphic type applications) :x:
746   * support for Coq8.4pl4
747   * support for Isabelle2014
748   * support for CVC4 1.4
749   * updated support for TPTP TFA syntax (used by provers Beagle and Princess)
751 Transformations
752   * new transformation `compute_in_goal` that simplifies the goal, by
753     computation, as much as possible
755 Version 0.83, March 14, 2014
756 ----------------------------
758 Language
759   * extra semicolons are now allowed at end of blocks
760   * new clause `diverges`; loops and recursive calls not annotated
761     with variants will generate a warning, unless the`"diverges`
762     clause is given
763   * clauses `reads` and `writes` now accept an empty set
764   * modified syntax for `abstract`: `abstract <spec> <expr> end` :x:
765   * types in quantifiers are now optional
766   * formulas and Boolean terms can be used interchangeably
768 Standard library
769   * removed inconsistency in libraries `map.MapPermut` and `array.ArrayPermut`
770     (names, definitions, and meaning of symbols `permut...` have been modified) :x:
772 Provers
773   * new version of prover: Coq 8.4pl3
774   * new version of prover: Gappa 1.1.0
775   * new version of prover: E prover 1.8
776   * dropped support for Coq 8.3 :x:
777   * improved support for Isabelle2013-2
778   * fixed Coq printer (former Coq proofs may have to be updated, with
779     extra qualification of imported symbols) :x:
781 Tools
782   * new option `--exec` to interpret WhyML programs; see doc chapter 8
783   * new option `--extract` to compile WhyML programs to OCaml;
784     see doc chapter 8 and `modules/mach/{int,array}.mlw`
785   * `why3replayer` renamed option `-obsolete-only` to `--obsolete-only`,
786     `-smoke-detector` to `--smoke-detector`, `-force` to `--force` :x:
787   * `why3replayer` now fails replaying if new goals are added :x:
790   * new type-inferring API for logical terms and program expressions
792 Miscellaneous
793   * fixed compilation bug with lablgtk 2.18
795 Version 0.82, December 12, 2013
796 -------------------------------
798 Core
799   * lemma functions
800   * polymorphic recursion permitted
801   * opaque types
804   * more examples of use in `examples/use_api/`
806 Tools
807   * `why3session csv` can create graph with option `--gnuplot [png|svg|pdf|qt]`
808   * shape algorithm modified (see VSTTE'13 paper) but is
809     backward compatible thanks to `shape_version` numbers in
810     `why3session.xml` files
811   * options name and default of `why3session csv` changed :x:
813 Miscellaneous
814   * emacs: `why.el` renamed to `why3.el` :x:
815   * GTK sourceview: `why.lang` renamed to `why3.lang` :x:
816   * `Loc.try[1-7]` functions now take location as an optional parameter :x:
818 Provers
819   * new prover: Metitarski (2.2, contribution by Piotr Trojanek)
820   * new prover: Metis (2.3)
821   * new prover: Beagle (0.4.1)
822   * new prover: Princess (2013-05-13)
823   * new prover: Yices2 (2.0.4)
824   * new prover: Isabelle (2013-2, contribution by Stefan Berghofer)
825   * new version of prover: Alt-Ergo 0.95.2
826   * new version of prover: CVC4 1.1 & 1.2 & 1.3
827   * new version of prover: Coq 8.4pl2
828   * new version of prover: Gappa 1.0.0
829   * new version of prover: SPASS 3.8ds
830   * new version of prover: veriT (201310)
832 Bug fixes
833   * remove extra leading zeros in decimal literals when a prover don't like them
834   * PVS output: types are always non-empty
835   * PVS: fixed configuration and installation process
836   * Coq tactic: now loads dynamic plug-ins
837   * bug #15493: correct Coq output for polymorphic algebraic data types
838   * wish #15053: Remove proof time from "Goals proved by only one prover" section
839     of `why3session info --stats` :x:
840   * bug #13736: `why3ml` was slow when there were many inclusions
841   * bug #16488: decimals in TPTP syntax
842   * bug #16454: do not send arithmetic triggers anymore to alt-Ergo
843   * syntax highlighting bugs should be fixed by removing the old language
844     file `alt-ergo.lang` from Alt-ergo distribution
846 Version 0.81, March 25, 2013
847 ----------------------------
849 Provers
850   * experimental support for SPASS >= 3.8 (with types)
851   * support for Z3 4.3.*
852   * fixed Coq 8.4 support for theory `real.Trigonometry`
853   * support for CVC4
854   * support for mathematica
855   * support for MathSAT5
857 Core
858   * accept type expressions in clone substitutions
860 WhyML
861   * support for relation chains (e.g., `e1 = e2 < e3`)
862   * every exception raised in a function must be listed
863     in as `raises { ... }` clause. A postcondition may be omitted
864     and equals to `true` by default. :x:
865   * if a function definition contains a `writes { ... }`
866     clause, then every write effect must be listed. If a function
867     definition contains a `reads { ... }` clause, then every read
868     _and_ write effect must be listed. :x:
870 Drivers
871   * syntax rules, metas, and preludes are inherited
872     through cloning. Keyword `cloned` becomes unnecessary and
873     is not accepted anymore. :x:
876 Version 0.80, October 31, 2012
877 ------------------------------
879 WhyML
880   * modified syntax for mlw programs; a summary of changes is
881     given in Appendix A of the manual :x:
882   * support for type invariants and ghost code
885   * Ocaml interfaces for constructing program modules
887 Transformations
888   * experimental support for induction on integers and on algebraic types
890 Interface
891   * new system of warnings, that includes:
892      - form `exists x, P -> Q`, likely an error
893      - unused bound logic variables in `forall`, `exists`, and `let`
895 Tools
896   * replayer: new option `-q`, for running quietly
897   * improved output of `why3session latex`; LaTeX macros have
898     more arguments :x:
899   * modifiers in `--extra-config` are now called `[prover_modifier]`
900     instead of just `[prover]` :x:
902 Provers
903   * support for Coq 8.4
904   * dropped support for Coq 8.2 :x:
905   * support for forthcoming PVS 6.0, including realizations
906   * support for iProver and Zenon
907   * new output scheme for Coq using type classes, to ensures
908     types are inhabited
910 Drivers
911   * theory realizations now use meta `realized_theory` instead
912     of `realized` :x:
914 Version 0.73, July 19, 2012
915 ---------------------------
917 Core
918   * co-inductive predicates
920 WhyML
921   * new construct `abstract e { q }` that matches the structure of the goal
923 Proof sessions
924   * small change in the format. Why3 is still able to
925     read session files in the old format.
927 Standard library
928   * fixed a consistency issue with `set.Fset` theory
930 Tools
931   * option `-obsolete-only` for `why3replayer`
932   * new option `-e` for `why3session latex` to specify when to
933     split tables in parts
934   * no more executable `why3ml` (`why3` now handles WhyML files) :x:
936 Provers
937   * support for Z3 4.0
938   * workaround for a bug about modulo operator in Alt-Ergo 0.94
939   * quotes in identifiers remain quotes in Coq
940   * Coq default tactic is now `intros ...` with a pattern
943   * "Clean" was cleaning too much
945 Miscellaneous
946   * completed support for the "Out Of Memory" prover result
948 Version 0.72, May 11, 2012
949 --------------------------
951 Provers
952   * Coq: new tactic `why3` to call external provers as oracles
953   * Coq: new feature: theory realizations (see manual, chapter 9)
955 Tools
956   * new tool `why3session` (see manual, section 6.7)
957   * new tool `why3doc` (see manual, section 6.8)
958   * support for multiple versions of the same prover (see manual, section 5.5)
961   * new features, including prover upgrade, alternate editors
963 Miscellaneous
964   * complete support for limiting provers' memory usage
965   * improved support on Microsoft Windows
966   * new parser for TPTP files with support for the newest
967     TFA1 format (TPTP with polymorphic types and arithmetic)
969 Bug fixes
970   * fixed BTS 14221
971   * fixed BTS 14190
972   * fixed BTS 12457
973   * fixed BTS 13854
974   * fixed BTS 13849
976 Language
977   * new syntax `constant x:ty` and `constant x:ty = e` to
978     introduce constants, as an alternative to `function`
981   * `Dtype` declaration kind is split into two: `Dtype` for
982     declarations of a single abstract type or type alias, and
983     `Ddata` for a list of (mutually recursive) algebraic types.
984     Similarly, `Dlogic` declaration kind is split into `Dparam` for
985     a single abstract function/predicate symbol and `Dlogic` for
986     a list of (mutually recursive) defined symbols.
988 Version 0.71, October 13, 2011
989 ------------------------------
991 Examples
992   * a lot of new program examples in directory examples/programs
994 Tools
995   * `why3replayer`: new option `-latex` to output a proof session in LaTeX format
997 WhyML
998   * significant improvement of the efficiency of the WP calculus
999   * fixed labels and source locations in WPs
1002   * better coloring and source positioning including from front-ends
1003     such as Krakatoa and Jessie plugin of Frama-C
1005 Proof sessions
1006   * during reload, new method for pairing old and new subgoals
1007     based on goal shapes, stored in database.
1008   * prover versions are stored in database. A proof is
1009     marked obsolete if it was made by a prover with another version
1010     than the current.
1012 Version 0.70, July 6, 2011
1013 --------------------------
1015 WhyML
1016   * language and VC generator
1018 Language
1019   * record types
1020     - introduced with syntax `type t = {| a:int; b:bool |}`
1021       actually syntactic sugar for `type t = 'mk t' (a:int) (b:bool)`
1022       i.e. an algebraic with one constructor and projection functions
1023     - a record expression is written `{| a = 1; b = True |}`
1024     - access to field `a` with syntax `x.a`
1025     - update with syntax `{| x with b = False |}`
1026     - record patterns
1027   * new syntax for conjunction `/\` and disjunction `\/`
1028     (`and` and `or` do not exist anymore) :x:
1029   * `logic` is not a keyword anymore, use `function` and `predicate` :x:
1031 Tools
1032   * new tool `why3replayer`: batch replay of a Why3 session created in IDE
1034 Provers
1035   * Alt-Ergo, Z3, CVC3, Yices: support for built-in theory of arrays
1038   * interactive detection of provers disabled because incompatible
1039     with session. Detection must be done with `why3config --detect-provers`
1040   * tool "Replay" works
1041   * tool "Reload" reloads the file from disk. No need to exit IDE anymore
1042   * does not use `Threads` anymore, thanks to `Call_provers.query_call`
1043   * displays explanations using labels of the form `"expl:..."`
1044   * dropped dependency on `Sqlite3`
1047   * functions to create an environment are now exported from `Env` :x:
1048   * calls to prover can now be asynchronous.
1049     `Driver.prove_task` now returns some intermediate value
1050     (of type `prover_call`), which can be queried in two ways:
1051     - blocking way with `Call_provers.wait_on_call`
1052     - non-blocking way with `Call_provers.query_call`
1054     So old code performing `prove_task t () ()` should be translated to
1055     `wait_on_call (prove_task t ()) ()`. :x:
1057 Bug fixes
1058   * IDE: bug 12244 resolved by using `Task.task_equal`
1059   * Alt-Ergo: no triggers for `exists` quantifier
1060   * Coq: polymorphic inductive predicates
1061   * Coq: fixed bug 12934: type def with several type params
1063 Version 0.64, February 16, 2011
1064 -------------------------------
1066 Language
1067   * `/\` renamed into `&&` and `\/` into `||` :x:
1068   * algebraic types: must be well-founded, non-positive constructors
1069     are forbidden, recursive functions and predicates must
1070     structurally terminate
1071   * accept lowercase names for axioms, lemmas, goals, and cases in
1072     inductive predicates
1074 Transformations
1075   * `split-goal` does not split under disjunction anymore
1077 Tools
1078   * `why.conf` is no more looked for in the current directory; use `-C` or
1079     `WHY3CONFIG` instead
1080   * when `why.conf` is changed, a backup copy is made in `why.conf.bak`
1081   * `why.conf` now contains a magic number; configuration must be
1082     rebuilt with `why3config` if the magic number has changed
1083   * `why3config`: `--autodetect-provers` renamed to `--detect-provers`,
1084                   `--autodetect-plugins` renamed to `--detect-plugins`;
1085     new option `--detect` to perform both detections
1086   * `why3config`: `--conf_file` is replaced by `-C` and `--config`
1088 Drivers
1089   * TPTP: encoding by explicit polymorphism is not anymore the
1090     default encoding for TPTP provers. It is now forbidden to use this
1091     encoding in presence of finite types.
1094   * source file names are stored in database with paths relative
1095     to the database, so that databases are now easier to move from a
1096     machine to another (e.g when they are stored in source control
1097     repositories)
1099 Provers
1100   * better Gappa output: support for `sqrt`, for negative constants
1102 Miscellaneous
1103   * `configure`: fixed `--enable-local`
1104   * `configure`: if possible, use `ocamlfind` to find `lablgtk2` and `sqlite3`
1105   * labels in terms and formulas are not printed by default
1107 Version 0.63, December 21, 2010
1108 -------------------------------
1110   * first public release. See release notes in manual