Merge branch 'extensional' into 'master'
[why3.git] / CHANGES.md
blobf66f584713df077edbae32bbba3d9bf76b95d797
1 :x: marks a potential source of incompatibility
3 Standard library
4   * new library `ufloat`: unbounded floating-point numbers
5   * new library `coma`: standard library of the plugin Coma
6   * additional operators in finite domain maps
7   * added a bunch of meta annotations for "unused dependencies" that
8     most of the time improve proof automation but very rarely may lose some
9     proofs :x:
11 Core
12   * extended notion of strategies: task-oriented strategies
13   * coma purposes
14     + parser_common: some non terminals `public`
15     + typing: added functions to type `term` in `denv`
16     + extmap: added `fold_right`
17     + extset: added `fold_right`
18     + wstdlib: added strongly connected component computation module
20 Plugins
21   * new task-oriented strategy `forward_propagation` to automatically
22     propagate rounding errors in formulas involving unbounded
23     floats. See examples in `examples/numeric`
24   * new Coma plugin
26 Provers
27   * Alt-Ergo FPA requires Alt-Ergo version at least 2.5.4
28   * support for Coq 8.19 (released Jan 24, 2024)
29   * drop support for versions of Coq < 8.16
30   * support for Z3 up to 4.13.x
31   * support for cvc5 up to 1.2.x
32   * support for Alt-Ergo 2.6.x
34 Tools
35   * `why3 prove`: drop the option `--json-model-values` :x:
36   * `why3 execute`: added option `--rac-memlimit`.
37   * `why3 execute`: the `--rac-prover` option does not anymore support
38     specification of a time limit and memory limit :x:
39   * `why3 pp`: in LaTeX output, now also prints algebraic type
40     definitions and logic definition
41   * `why3 pp`: the ``--kind`` option does not exist anymore :x:
43 API
44   * a few changes about how to specify resource limits in particular
45     some renaming of `limit` into `limits` where appropriate. See also
46     issue #877, and the changes in the examples of the documentation
47     in Section "The Why3 API" :x:
49 Version 1.7.2, April 18, 2024
50 -----------------------------
52 Bug fixes
53   * restored the legacy shortcut for Alt-Ergo 2.5
54   * fixed various bugs in the lexer of `why3 doc`
55   * made prover detection more reliable when paths need escaping
58 Version 1.7.1, January 20, 2024
59 -------------------------------
61 Bug fixes
62   * restored syntax highlighting in IDE
63   * improved detection of Isabelle 2022 and Alt-Ergo 2.5
65 Version 1.7.0, November 24, 2023
66 --------------------------------
68 WhyML language
69   * syntax `module Impl: Intf ... end` can be used to hide the
70     details of an implementation during proofs
72 MLCFG language
73   * `variant` clauses are supported with the `stackify` backend
74   * `invariant` names are now optional and deprecated
76 Input formats
77   * a new input format `.sexp` is supported for programs written as
78     S-expressions; this input format, intended as an intermediate language,
79     is compatible with the output of `why3 pp --output=sexp` and
80     the S-expressions generated by the API function `Ptree.sexp_of_mlw_file`
82 Standard library
83   * library `ieee_float`: added conversions between floating-point numbers
84     and signed bitvectors, with appropriate mappings to SMT-LIB
86 IDE
87   * strategies can now execute a group of provers concurrently in a single
88     `call` step, by separating provers by a `|`; default strategies now
89     make use of this parallelism for time limits larger than 1 second
91 Tools
92   * option `--warn-off=...` can now be used to disable individual warnings;
93     available warnings can be listed using `--list-warning-flags`
94   * driver files appearing in a configuration file loaded using option
95     `--extra-config` are now also searched in the sub-directory of that
96     configuration file
97   * `why3 session info` now produces separate statistics per session
98     and overall statistics; see Section 5.5.1 of the manual :x:
99   * `why3 session update` now supports options `--mark-obsolete`,
100     `--remove-proofs`, and `--add-provers`, together with selection of proof
101     nodes via filters; see Section 5.5.4 of the manual
102   * `why3 session create` now generates a new session for the specified files;
103     see Section 5.5.5 of the manual
104   * `why3 session info` now has an option `--graph=[all|hist|scatter]`;
105     `all` corresponds to the old behavior, while `hist` and `scatter` provide
106     finer graphs for pairwise comparison of provers
107   * `why3 bench` now provides a way to run all the proof attempts that
108     have not been run before; see Section 5.13 of the manual
109   * `why3 replay` now supports option `--ignore-shapes`, which disables the use
110     of shapes when merging sessions
111   * time taken by solvers is now uniformly reported with the precision
112     of a microsecond, in particular in session files; cumulative times,
113     e.g., reported by `why3 session info --provers-stats`, are more precise;
114     the `time` regexp in driver files is deprecated and the time taken by
115     solvers is now measured by Why3 directly
117 Provers
118   * support for Coq 8.17.0 (released Mar 23, 2023)
119   * support for Coq 8.18.0 (released Sep 7, 2023)
120   * drop support for versions of Coq < 8.11
121   * support for Alt-Ergo 2.4.3
122   * support for Alt-Ergo 2.5.x with SMT syntax and counterexamples
123   * support for Z3 4.12.x
124   * support for CVC5 1.0.5
126 Miscellaneous
127   * configuration option `--disable-pp-sexp` has been renamed into `--disable-sexp` :x:
128   * debug flag `ignore_missing_diverges` has been renamed into `missing_diverges` :x:
129   * debug flag `ignore_unused_vars` has been renamed into `unused_variable` :x:
130   * debug flag `stats` now also records the time taken by transformations
132 Version 1.6.0, March 7, 2023
133 ----------------------------
135 Core
136   * added meta `vc:proved_wf` for annotating well-founded relations, to make
137     them easier to use in variants; see Section 8.2.3 of the manual
139 Standard library
140   * relations `ult`, `ugt`, `slt`, and `sgt` from `bv` modules are now
141     recognized as well-founded
143 Tools
144   * `libdir` and `datadir` are not stored anymore in the configuration file,
145     but they can still be manually set there if needed;
146     see also the environment variables `WHY3LIB` and `WHY3DATA`
147   * several debug flags have been renamed;
148     use `why3 --list-debug-flags` to obtain the new names :x:
149   * global directives in extra drivers are now taken into account
150   * time limits now have a sub-second accuracy, e.g., `--timelimit=0.5`
153   * pressing Tab now auto-completes commands
154   * added menu item "File/Export as Zip" to export a zip archive of the
155     current session and all the related files
157 Web interface TryWhy3
158   * proof obligations are now displayed as a sequent rather than a full task
160 Python language
161   * added `by` and `so` connectives in predicates
162   * fixed overloading of `+` in Python code
163   * added `add_list` for list concatenation in logic
165 MLCFG language
166   * attributes on function bodies are now supported
167   * attributes `[@cfg:stackify]` and `[@cfg:subregion_analysis]` can
168     be used to improve the VC structure and generate extra invariants;
169     see Sections 7.3.5 and 7.3.6 of the manual
172   * source locations now use both a starting line and an ending line;
173     the fourth number is thus the column on the last line :x:
174   * several functions from `Call_prover` and `Driver` now take as input a
175     `Whyconf.main` configuration type instead of directly taking `libdir`
176     and `datadir` :x:
177   * `Whyconf.load_driver` has been replaced by `Driver.load_driver_for_prover` :x:
178   * `Warning.emit` has been replaced by `Loc.warning` :x:
179   * representation of counterexamples has been modified;
180     see Sections 5.3.7.1, 11.10.3, and 12.11 of the manual
182 Provers
183   * support for CVC5 1.0.0 to 1.0.4 (released Jan 31, 2023)
184   * support for Alt-Ergo 2.4.2 (released Aug 1, 2022)
185   * support for Z3 4.12.0 and 4.12.1 (released Jan 18, 2023)
186   * support for Isabelle 2022 (released Oct 2022)
188 Miscellaneous
189   * fixed soundness bug with existential quantifiers in `introduce_premises`
190   * configuration option `--enable-profiling` has been removed
191   * configuration now fails for explicit yet unsuccessful `--enable-foo` options
192   * OCaml >= 4.08 is now required
193   * LablGtk2 is no longer supported
195 Version 1.5.1, September 12, 2022
196 ---------------------------------
198 Documentation
199   * documented most options of `why3 prove` and `why3 execute`
201 Python language
202   * added construct `e1 if e2 else e3`
203   * added support for tuples and multiple assignments
204   * added `#@ axiom` and `#@ lemma`
205   * global variables annotated with `#@ constant` are available in the logic
206   * pure functions (i.e., limited to `return e`) annotated with `#@ function`
207     are available in the logic
208   * logical functions can be given a variant with `variant {term}`
209   (contribution by Jean-Paul Bodeveix)
211 Provers
212   * support for Z3 4.9.0 and 4.9.1 (released Jul 6, 2022)
213   * support for Z3 4.10.0, 4.10.1, and 4.10.2 (released Jul 30, 2022)
214   * support for Z3 4.11.0 (released Aug 18, 2022)
215   * support for Coq 8.16.0 (released Sep 5, 2022)
216   * support for Gappa 1.4.0 (released Apr 16, 2022)
218 Version 1.5.0, April 29, 2022
219 -----------------------------
221 Standard library
222   * deeply revised library `mach.bv` for bitvector operations in programs;
223     pre- and post-conditions are now expressed both in terms
224     of mathematical integers and in terms of pure bitvectors,
225     thanks to conversion to 128 bits :x:
227 Core
228   * equality of numeric literals is now semantic, i.e., independent of the radix :x:
230 WhyML language
231   * generalized witness expressions for type invariants
232   * `absurd` is now implicitly inserted on the normal execution path of
233     `match foo with exception Bar -> ...`, which is thus no longer
234     parsed as `try foo with Bar -> ...` :x:
236 Python language
237   * added `break` and `continue`
238   * added range with one, two, or three arguments
239   * added slice, i.e., `list[i1:i2]`
240   * added negative index, i.e., `list[n]` with `-len(list) ≤ n < len(list)`
241   * added list methods:
242       - `list.append(n)`
243       - `list.pop()`
244       - `list.clear()`
245       - `list.sort()`
246       - `list.reverse()`
247   * added `is_permutation(list1, list2)` predicate
248   * added assignment operators `+=`, `-=`, `*=`, `//=`, `%=`
249   * functions can now return `bool` and `list`
250   * logical functions and predicates can now be defined
251   * added support for type annotations
254   * strategies now support step limits, passed as the third integer argument to the `call` command
256 Web interface TryWhy3
257   * step limits are now configurable in the HTML file
258   * "prove" now splits the VCs if they are not proven after "First-attempt limit" steps
259   * added some "split" and "prove" buttons next to each task
260   * moved the example list to `examples/config.json` and made it per-language
261   * added some examples for Python and Micro-C
262   * the Alt-Ergo worker is now the upstream one
264 Tools
265   * options `why3 --list-*` have been moved to a dedicated tool `why3 show`,
266     e.g., `why3 show metas`
267   * added `why3 show attributes` to list all the known attributes
268   * `why3 prove` now supports transformations that require an argument
269   * `why3 execute` now supports `io.StdIO` and `debug.Debug`
270   * `why3 config detect` now also looks for provers with executable names `prover-[0-9].*`
271   * sections `[detected_binary]` and `[manual_binary]` in `why3.conf` have
272     been merged into a common section `[partial_prover]` :x:
274 Coq realizations
275   * floating-point theories are now built on top of Flocq's `BinarySingleNaN`
276     formalization (requires Flocq >= 3.4 and Coq >= 8.11) :x:
278 Provers
279   * support for Z3 versions from 4.8.11 to 4.8.15 (released Mar 20, 2022)
280   * support for Coq 8.14.0 (released Oct 14, 2021) and 8.15.0 (released Jan 13, 2022)
281   * dropped support for Coq 8.6
282   * disabled support for SMTLIB strings in CVC4 1.7; only CVC4 1.8 is supported
284 Miscellaneous
285   * bytecode plugins are now compiled as `.cma` libraries instead of `.cmo` files :x:
287 Version 1.4.1, February 18, 2022
288 --------------------------------
290 Bug fixes
291   * fixed usage of various dependencies: `menhir`, `camlzip`, `ppx_deriving`, `coq-flocq`, `mlmpfr`
293 Provers
294   * support for Alt-Ergo 2.4.1 (released Jul 28, 2021)
296 Version 1.4.0, March 13, 2021
297 -----------------------------
299 WhyML language
300   * sub-namespaces are now allowed in `for each` loops; see Section 7.4.7 of the manual
301   * function literals are now supported; see Sections 7.3.2 and 7.4.9 of the manual
303 Standard library
304   * added lemma `permut_sub_trans` to `array.ArrayPermut`
305   * added function `inter` (intersection) to `bag.Bag`
306   * added a new theory `option.Map`
307   * added a precondition to `string.OCaml.([])`
308   * added functions `set`, `init`, `sub` to `mach.array.ArrayInt63`
309   * moved OCaml exception `Invalid_argument` to `ocaml.Exceptions` :x:
310   * added function `length` in `mach.c.String`
311   * added functions `sdiv` and `srem` to `bv`
312   * added signed operations to `mach.bv`
313   * added missing module for double-precision floats to `mach.floats`
315 Tools
316   * command-line options now follow the getopt standard;
317     in particular, long options start with `--` :x:
318   * binaries `why3config`, `why3prove`, etc, no longer exist;
319     they are now plugins that can be loaded only using the main `why3` binary,
320     e.g., `why3 config` :x:
321   * `why3 config` now uses subcommands instead of options;
322     in particular, prover detection is performed using `why3 config detect`
323     and manual prover addition is performed using `why3 config add-prover`;
324     see Section 6.1 of the manual :x:
325   * `why3 execute` now provides runtime assertion checking; see Section 6.8.1 of the manual
326   * runtime assertion checking is also used to validate counterexamples in `why3 prove`
327   * loop invariants can now be inferred automatically; see Section 8.5 of the manual
328   * JSON output of counterexamples was modified :x:
331   * native keyboard modifiers are now used on macOS
332   * `why3 ide` in the Docker image can now be used through a web browser
333     instead of an X server; see Section 5.1.2 of the manual
335 Input formats
336   * a new front-end named MLCFG was added; it supports unstructured program codes,
337     including `goto` statements; see Section 9.3 of the manual
338   * translation of `<>` and `not` have been fixed for micro-C and Python
340 Extraction
341   * allowed transitive inclusion (`export`) of interfaces and preludes
342   * added `remove module` for drivers to exclude modules
343   * added C extraction of strings
344   * improved handling of C header files
345   * added support of `blacklist` to C extraction
346   * fixed extraction of partially applied functions
347   * fixed OCaml extraction of nested tuples
348   * fixed OCaml extraction of `OneTime` integers
350 Web interface TryWhy3
351   * `?lang=foo` can now be used to select an input format other than WhyML;
352     the input format can also be changed dynamically using a combobox
353   * `?code=foo` can now be used to fill the editor with some code;
354     the encoded string can be retrieved by clicking the "Copy URL" button
355   * examples are no longer embedded; only files mentioned
356     in `examples/index.txt` are considered :x:
357   * Alt-Ergo workers can now be stopped without losing the session
359 Provers
360   * support for PVS 7.1 (released Apr 30, 2020)
361   * support for Z3 4.8.7 (released Nov 19, 2019)
362   * support for Z3 4.8.8 (released May 9, 2020)
363   * support for Z3 4.8.9 (released Sep 11, 2020)
364   * support for Z3 4.8.10 (released Jan 20, 2021)
365   * support for AltErgo 2.3.3 (released Aug 19, 2020)
366   * support for AltErgo 2.4.0 (released Jan 22, 2021)
367   * support for Coq 8.13.0 (released Jan 7, 2021)
368   * support for CVC4 1.8 (released Jun 19, 2020)
370 Documentation
371   * Why3 modes for editors (Section 5.3)
372   * Why3-specific configuration for shells (Section 5.4)
373   * detailed explanations on semantics of various WhyML statements (Section 7.4)
374   * detailed explanations on WhyML module system (Section 7.5)
375   * explanations on how users can customize drivers (Section 12.5)
378   * helpers were added to ease production of parse trees; see Section 4.9 of the manual
379   * generation of counterexamples was changed; see Section 4.10 of the manual :x:
381 Additional bug fixes
382   * fixed `why3 prove` when called on a DIMACS file
383   * improved detection of out-of-range values in `why3 execute`
384   * fixed micro-Python parser when there is no newline at end of file
385   * fixed SMT translation of negative floating-point literals
386   * fixed set of reserved symbols for SMT solvers
387   * restored `hypothesis_selection` transformation
388   * fixed unsoundness of transformations `case` and `destruct` in presence
389     of polymorphic formulas
391 Version 1.3.3, September 11, 2020
392 ---------------------------------
394 Bug fixes
395   * fixed compilation on OpenBSD
397 Provers
398   * support for Coq 8.12.0 (released Jul 27, 2020)
400 Version 1.3.2, September 5, 2020
401 --------------------------------
403 Bug fixes
404   * fixed compilation on FreeBSD and macOS
405   * fixed `use_api` examples
406   * removed support for strings from the default variant of CVC4 1.7
407   * fixed custom editors for provers not being saved
409 Version 1.3.1, March 24, 2020
410 -----------------------------
412 Bug fixes
413   * fixed conflicting symbols for CVC4 1.7
414   * fixed META file
415   * fixed infinite loops in strategies
417 Version 1.3.0, March 17, 2020
418 -----------------------------
420 Standard library
421   * `pqueue.Pqueue` is now modeled using sequences instead of lists :x:
422   * `queue.Queue` is now modeled using sequences instead of lists :x:
423   * the `set` library has been revamped :x:
424       - in `set.Fset`, type `set` becomes `fset`; `choose` becomes `pick`
425       - module `appset.Appset` becomes `set.SetApp`;
426         `impset.Impset` becomes `set.SetImp`
427       - in `set.SetApp` and `set.SetImp`, type `t` becomes `set`;
428         field `contents` becomes `to_fset`; call to `empty` becomes `empty ()`
429   * new library `fmap` for finite maps
430       - `Fmap`: polymorphic, logic finite maps to be used in logic
431       - `MapApp`, `MapAppInt`, `MapImp`, `MapImpInt`: monomorphic finite maps to
432         be used in programs
433   * no more libraries `appmap` and `impmap` :x:
434   * no more library `sum.Sum` (subsumed by `int.Sum`) :x:
435   * new library `string` for character strings
436       - `String`: basic string operations
437       - `OCaml`: additional operations dedicated to extraction to OCaml
438       - `RegExpr`: regular expressions
440 Language
441   * the type `string` is a new built-in type; string literals can be
442     given between double-quotes; see manual, Section 7.1 :x:
443   * it is now possible to give a name to preconditions and assertions;
444     `requires Foo { a = 3 }` sets the attribute `[@hyp_name:Foo]`, which tries
445     to give the name `Foo` to the corresponding hypothesis after introduction
446   * identifiers used for specification (resp. definition) of a function `foo`
447     have been renamed from `foo_spec` (resp. `foo_def`) to `foo'spec` (resp. `foo'def`) :x:
448   * identifiers used for goals `VC foo` have been renamed to `foo'vc`
449   * identifiers used for record constructor `mk foo` have been renamed to `foo'mk` :x:
450   * the `alias` clause can now be used in program functions to force the aliasing
451     of function parameters and/or named returns
453 Tools
454   * counterexamples given by `why3prove` are no longer printed using JSON
455     by default; pass option `--json` to restore the previous behavior
456   * new tool `why3pp` to pretty print Why3 source code (inductive definitions to LaTeX,
457     formatting of mlw files)
459 Documentation
460   * improved Chapter 7 on the WhyML language (record types, various
461     kinds of function declarations, module cloning, etc.)
462   * improved Section 11.4 on drivers, including an automatically generated
463     dependency graph of driver files
464   * improved Section 11.5 on transformations, including transformations
465     with arguments
468   * `Call_provers.print_prover_result` now takes an additional argument
469     `~json_model` to indicate whether counterexamples are printed using JSON :x:
470   * indices of array are now `model_value` for counterexamples :x:
471   * ITP constructor `Task` now contains the location of the goal :x:
472   * ITP constructor `Source_and_ce` has now 3 arguments instead of 2 :x:
473   * ITP constructors `File_contents` and `Source_and_ce` have a new argument
474     for the file format :x:
475   * ITP constructor `File_contents` has a new boolean argument for
476     interpretation of the file in the IDE as `read_only` :x:
477   * new ITP constructor `Ident_notif_loc` :x:
478   * ITP constructor `Get_first_unproven_node` now takes a heuristic name
479     argument :x:
481 Transformations
482   * `apply` and `rewrite` now behave better in presence of `let`;
483     hypotheses with nested let-bindings can now be applied :x:
484   * passing arguments to argument-free transformations is now forbidden
485     (previously ignored) :x:
486   * passing too many arguments to a transformation does not display a popup anymore
487   * `induction_arg_ty_lex` is now equivalent to `induction_ty_lex`
488   * `induction_arg_pr` now takes an optional argument that indicates what to
489     generalize in the induction
490   * `destruct` now destructs `not p` into `p -> false`;
491     `destruct_rec` can further destruct afterwards;
492     `destruct` can also destruct `true` and `false` :x:
493   * decision procedures used for reflection must now be declared explicitly using
494     `meta reflection val foo` :x:
495   * `remove` and `bisect` should not raise unnecessary popups anymore
496   * added `remove_rec`
497   * attribute `inline:trivial` can be put on definitions to force their
498     inlining by the transformation `inline_trivial`
501   * display of counterexamples in the Task view has been improved
502   * auto jumping to next unproved goal can now be disabled in the preferences
503   * added a "reset proofs" command in the Tools menu to remove all the proofs
504     from the session
505   * default proof strategies "Auto level 1" and "Auto level 2"
506     have been respectively renamed "Auto level 2" and "Auto level 3";
507     "Auto level 1" now behaves similarly to "Auto level 0" but with a longer
508     time limit; more details in the manual, Section 10.6 "Proof Strategies" :x:
509   * strategies can now be defined using `%t` (resp. `%m`) to call a prover with
510     the default timelimit (resp. memlimit)
511   * added minimal search menu
512   * a merlin-like feature to find the identifier located under the cursor has been
513     added in the Edit menu.
514   * read-only files can now be displayed and removed by right-clicking on their
515     tab titles
516   * colors for error can now be edited in why3.conf more precisely
517   * most of the preferences can now be changed for the current session
518   * Ctrl-Down/Ctrl-Up are mapped to more straightforward moves; the former
519     movements can be triggered with Ctrl-Left/Ctrl-Right
521 Realizations
522   * added experimental realizations for new Set theories in both Isabelle and Coq
524 Provers
525   * support for Alt-Ergo 2.3.1 (released Feb 19, 2020)
526   * support for Isabelle 2019 (released Jun 2019)
527   * support for Vampire 4.2.2 (released Dec 14, 2017)
528   * support for Coq 8.10.0 (released Oct 8, 2019)
529   * support for Coq 8.10.1 (released Oct 25, 2019)
530   * support for Coq 8.10.2 (released Oct 29, 2019)
531   * support for Coq 8.11.0 (released Jan 30, 2020)
532   * make use of built-in support for strings by Z3 (4.8.6), and CVC4 (1.7)
534 Version 1.2.1, October 28, 2019
535 -------------------------------
537 Bug fixes
538   * fixed compilation with OCaml 4.09
539   * fixed compilation with Lablgtk3
541 Provers
542   * support for Z3 4.8.6 (released Sep 20, 2019)
543   * support for Z3 4.8.5 (released Jun 3, 2019)
544   * support for CVC4 1.7 (released Apr 9, 2019)
545   * support for Alt-Ergo 2.3.0 (released Feb 11, 2019)
546   * support for Coq 8.9.1 (released May 20, 2019)
548 Version 1.2.0, February 11, 2019
549 --------------------------------
551 Session
552   * file paths stored in session files are now represented in a
553     system-independent way
555 Drivers
556   * the clause `syntax converter` has been removed; any former use should
557     be replaced by `syntax literal` and/or `syntax function` :x:
559 Language
560   * a syntactic sugar called "auto-dereference" is introduced, so as
561     to avoid, on simple programs, the heavy use of `(!)` character on
562     references; see details in Section A.1 of the manual
564 Transformations
565   * `split_vc` and `subst_all` now avoid substituting user symbols by
566     generated ones :x:
567   * `destruct_rec` applies `destruct` recursively on a goal
568   * `destruct` now simplifies away equalities on constructors :x:
569   * `destruct` now simplifies `if .. then .. else ..` and `match .. with ..` :x:
570   * `destruct_alg` renamed to `destruct_term`; it also has a new experimental
571     keyword `using` to name newly destructed elements :x:
573 Tools
574   * added a command `why3 session update` to modify sessions from the
575     command line; so far, only option `-rename-file` exists, for
576     renaming files
577   * `why3 config --add-prover` now takes the shortcut as second
578     argument; option `--list-prover-ids` has been renamed to
579     `--list-prover-families` :x:
582   * clicking on the status of a failed proof attempt in the proof tree
583     now generates counterexamples
584   * added support for GTK3
586 Counterexamples
587   * the trigger for counterexamples has been changed; read Section 5.3.7
588     of the manual for details :x:
589   * various improvements on the generated counterexamples
590   * field names now use ident names instead of smt generated ones, e.g.,
591     `int32qtint` -> `int32'int` :x:
592   * fixed parsing of bitvector values from counterexamples generated by Z3
594 Extraction
595   * fixed extraction of functions passed as arguments
596   * fixed extraction of recursive polymorphic functions for Ocaml
597   * improved extraction of records for C
599 Standard library
600   * `Stack.length` and `Queue.length` now return a `Peano.t`, for
601     improved extraction :x:
603 Provers
604   * support for Z3 4.8.1 (released Oct 16, 2018)
605   * support for Z3 4.8.3 (released Nov 20, 2018)
606   * support for Z3 4.8.4 (released Dec 20, 2018)
607   * support for Coq 8.9.0 (released Jan 17, 2019)
608   * upgraded Coq realizations for floating-point arithmetic to Flocq 3.1
609   * dropped support for Coq 8.5
611 Version 1.1.1, December 17, 2018
612 --------------------------------
614 Bug fixes
615   * prevented broken extraction of `any`
616   * fixed evaluation order when extracting nested mutators
617   * fixed extraction of nested recursive polymorphic functions
618   * fixed cloning of expressions raising exceptions
620 Version 1.1.0, October 17, 2018
621 -------------------------------
623 Core
624   * variants can now be inferred on some lemma functions
625   * coercions are now supported for `if` and `match` branches
626   * `interrupt` command should now properly interrupt running provers.
627   * clearer typing error messages thanks to printing qualified names
628   * fixed handling of prover upgrades, resurrected the policy
629     "duplicate" and added a policy "remove"
632   * added `Call_provers.interrupt_call` to interrupt a running prover
633     (contribution by Pierre-Yves Strub)
635 Language
636   * program functions can now be marked `partial` to prevent them from
637     being used in ghost context; the annotation does not have to be
638     explicitly put on their callers
639   * `use` now accepts several module names separated by commas
640   * symbolic operators can be used in identifiers like `(+)_ident` or
641     `([])'ident`
642   * range types have now a default ordering to be used in `variant` clause
644 Standard library
645   * library `ieee_float`: floating-point operations can now be used in
646     programs
648 Transformations
649   * `split_vc` behaves slightly differently :x:
651 Provers
652   * support for Alt-Ergo 2.1.0 (released Mar 14, 2018)
653   * support for Alt-Ergo 2.2.0 (released Apr 26, 2018)
654   * support for Coq 8.8.1 (released Jun 29, 2018)
655   * support for Coq 8.8.2 (released Sep 26, 2018)
656   * support for CVC4 1.6 (released Jun 25, 2018)
657   * support for Z3 4.7.1 (released May 23, 2018)
658   * support for Isabelle 2018 (released Aug 2018)
659     (contribution by Stefan Berghofer)
660   * dropped support for Isabelle 2016 (2017 still supported) :x:
661   * dropped support for Alt-Ergo versions < 2.0.0 :x:
663 Version 1.0.0, June 25, 2018
664 ----------------------------
666 Core
667   * improved support of counter-examples
668   * attribute `[@vc:sp]` on an expression switches from traditional WP
669     to Flanagan-Saxe-like VC generation
670   * type invariants now produce logical axioms;
671     a type with an invariant must be proved to be inhabited :x:
672   * logical symbols can no longer be used in non-ghost code;
673     in particular, there is no polymorphic equality in programs any more,
674     so equality functions must be declared/defined on a per-type basis
675     (already done for type `int` in the standard library) :x:
677 Language
678   * numerous changes to syntax, see documentation appendix :x:
679   * `let function`, `let predicate`, `val function`, and `val predicate`
680     introduce symbols in both logic and programs
681   * added overloading of program symbols
682   * new contract clause `alias { <term> with <term>, ... }` :x:
683   * support for parallel assignment `<term>,... <- <term>,...`
684   * support for local exceptions using `exception ... in ...`
685   * added `break`, `continue`, and `return` statements
686   * support for `exception` branches in `match` constructs
687   * support for `for` loops on range types
688     (including machine integers from the standard library)
689   * support for type coercions in logic using `meta coercion`
690   * keyword `theory` is deprecated; use `module` instead
691   * term on the left of sequence `;` must be of type `unit` :x:
692   * cloned axioms turn into lemmas; use `with axiom my_axiom`
693     or `with axiom .` to keep them as axioms :x:
694   * `any <type> <spec>` produces an existential precondition;
695     use `val f : <type> <spec> in ...` (unsafe!) instead :x:
696   * `use T` and `clone T` now import the generated namespace T;
697     use `use T as T` and `clone T as T` to prevent this :x:
698   * `pure { <term> }` produces a ghost value in program code
699   * `a <-> b <-> c` is now parsed as `(a <-> b) /\ (b <-> c)`;
700     `a <-> b -> c` is now rejected :x:
702 Standard library
703   * machine integers in `mach.int.*` are now range types :x:
704   * added a minimal memory model for the C language in `mach.c`
705   * new modules `witness.Witness` and `witness.Nat`
707 Extraction
708   * improved extraction to OCaml
709   * added partial extraction to C using the memory model of `mach.c`
710   * added extraction to CakeML (using `why3 extract -D cakeml ...`)
712 Transformations
713   * transformations can now have arguments
714   * added transformations `assert`, `apply`, `cut`, `rewrite`, etc., à la Coq
715   * added transformations for reflection-based proofs
717 Drivers
718   * support for `use` in theory drivers
721   * replaced left toolbar by a contextual menu
722   * source is now editable
723   * premises are no longer implicitly introduced
724   * added textual interface to call transformations and provers
726 Tools
727   * deprecated `.why` file extension; use `.mlw` instead
729 Provers
730   * removed the `why3` Coq tactic :x:
731   * dropped support for Coq 8.4 :x:
733 Miscellaneous
734   * moved the opam base package to `why3`; added `why3-ide` and `why3-coq`
736 Version 0.88.3, January 11, 2018
737 --------------------------------
739 Provers
740   * support for Alt-Ergo 2.0.0 (released Nov 14, 2017)
741   * support for Coq 8.7.1 (released Dec 16, 2017)
742   * support for Z3 4.6.0 (released Dec 18, 2017)
744 Standard library
745   * fixed soundness of theory `int.Exponentiation` when multiplication is not
746     commutative :x:
748 Miscellaneous
749   * fixed support for `--enable_relocation=yes`
750   * fixed support for Windows
752 Version 0.88.2, December 7, 2017
753 --------------------------------
755 Miscellaneous
756   * `why3 session html`: improved compliance of generated files
757   * `why3 doc`: fixed missing anchors for operator definitions
758   * improved build process when `coqtop.byte` is missing
760 Version 0.88.1, November 6, 2017
761 --------------------------------
764   * exported function `Call_provers.get_new_results`
766 Provers
767   * improved support for Isabelle 2017
768   * fixed support for Coq 8.7 (released Oct 17, 2017)
770 Miscellaneous
771   * fixed compilation for OCaml 4.06
772   * improved support for nullary `val` declarations with regions
774 Version 0.88.0, October 6, 2017
775 -------------------------------
777 Language
778   * added two new forms of type declarations: integer range types and
779     floating-point types. To denote constants in such types, integer
780     constants and real constants can be cast to such types. This
781     support is exploited in drivers for provers that support bitvector
782     theories (CVC4, Z3) and floating-point theory (Z3).
783     More details in the manual, section 7.2.4 "Theories".
784   * a quote character `'` inside an identifier must either be at the
785     end, or be followed by either a digit, the underscore character
786     `_` or another quote. Identifiers with a quote followed by a
787     letter are reserved. :x:
789 Standard library
790   * new theory `ieee_float` formalizing floating-point arithmetic,
791     compliant to IEEE-754, mapped to SMT-LIB FP theory.
793 User features
794   * proof strategies: `why3 config` now generates default proof strategies
795     using the installed provers. These are available under name "Auto
796     level 0", "Auto level 1" and "Auto level 2" in `why3 ide`.
797     More details in the manual, section 10.6 "Proof Strategies".
798   * counterexamples: better support for array values, support for
799     floating-point values, support for Z3 in addition to CVC4.
800     More details in the manual, section 6.3.5 "Displaying Counterexamples".
802 Plugins
803   * new input format for a small subset of Python
805 Provers
806   * support for Isabelle 2017 (released Oct 2017)
807   * dropped support for Isabelle 2016 (2016-1 still supported) :x:
808   * support for Coq 8.6.1 (released Jul 25, 2017)
809   * tentative support for Coq 8.7
810   * dropped tactic support for Coq 8.4 (proofs still supported) :x:
811   * support for CVC4 1.5 (released Jul 10, 2017)
812   * support for E 2.0 (released Jul 4, 2017)
813   * support for E 1.9.1 (release Aug 31, 2016)
815 Version 0.87.3, January 12, 2017
816 --------------------------------
818 Bug fixes
819   * fixed OCaml extraction with respect to ghost parameters
820   * assorted bug fixes
822 Provers
823   * support for Alt-Ergo 1.30 (released Nov 21, 2016)
824   * support for Coq 8.6 (released Dec 8, 2016)
825   * support for Gappa 1.3 (released Jul 20, 2016)
826   * dropped support for Isabelle 2015 :x:
827   * support for Isabelle 2016-1 (released Dec 2016)
828   * support for Z3 4.5.0 (released Nov 8, 2016)
830 Version 0.87.2, September 1, 2016
831 ---------------------------------
833 Bug fixes
834   * improved well-formedness of extracted OCaml code
835   * assorted bug fixes
837 Version 0.87.1, May 27, 2016
838 ----------------------------
840 Bug fixes
841   * assorted bug fixes
843 Version 0.87.0, March 15, 2016
844 ------------------------------
846 Language
847   * added two new logical connectives `by` and `so` as keywords :x:
849 Tools
850   * added a command-line option `--extra-expl-prefix` to specify
851     additional possible prefixes for VC explanations. Available for
852     `why3` commands `prove` and `ide`.
853   * removed `jstree` style from the `session` command :x:
855 Transformations
856   * all split transformations respect the `"stop_split"` label now.
857     `split_*_wp` is a synonym for `split_*_right` :x:
858   * the `split_*_right` transformations split the left-hand side subformulas
859     when they carry the `"case_split"` label :x:
860   * `split_intro` is now the composition of `split_goal_right` and
861     `introduce_premises` :x:
863 Standard library
864   * improved bitvector theories :x:
867   * renamed functions in module `Split_goal` :x:
868   * `split_intro` moved to Introduction :x:
870 Encoding
871   * if a task has no polymorphic object (except for the special
872     cases of equality and maps), then the translation to SMT-LIB
873     format is direct :x:
875 Provers
876   * dropped support for Alt-Ergo versions older than 0.95.2 :x:
877   * support for Alt-Ergo 1.01 (released Feb 16, 2016) and
878     non-free versions 1.10 and 1.20
879   * support for Coq 8.4pl6 (released Apr 9, 2015)
880   * support for Coq 8.5 (released Jan 21, 2016)
881   * support for Gappa 1.2.0 (released May 19, 2015)
882   * dropped support for Isabelle 2014 :x:
883   * support for Isabelle 2015 (released May 25, 2015) and
884     Isabelle 2016 (released Feb 17, 2016)
885   * support for Z3 4.4.0 (released Apr 29, 2015) and
886     4.4.1 (released Oct 5, 2015)
887   * support for Zenon 0.8.0 (released Oct 21, 2014)
888   * support for Zenon_modulo 0.4.1 (released Jul 2, 2015)
890 Distribution
891   * non-free files have been removed: `boomy` icon set,
892     javascript helpers for `why3 session html --style jstree`
894 Version 0.86.3, February 8, 2016
895 --------------------------------
897 Bug fixes
898   * assorted bug fixes
900 Provers
901   * fix compilation issues with Coq 8.5
902     (the tactic for 8.5 now behaves like `idtac` on successfully proved goals) :x:
904 Version 0.86.2, October 13, 2015
905 --------------------------------
907 Bug fixes
908   * assorted bug fixes
910 Version 0.86.1, May 22, 2015
911 ----------------------------
914   * improved task highlighting for negated premises
915     (contributed by Mikhail Mandrykin, AstraVer project)
917 Provers
918   * support for Gappa 1.2 (released May 19, 2015)
920 Bug fixes
921   * `why3doc`: garbled output
923 Version 0.86, May 11, 2015
924 --------------------------
926 Core
927   * steps limit for reliable replay of proofs, available for Alt-Ergo
928     and CVC4
930 Transformations
931   * new transformations `induction_pr` and `inversion_pr` to reason with
932     inductive predicates
934 Standard library
935   * renamed theory `int.NumOfParam` into `int.NumOf`; the predicate `numof`
936     now takes some higher-order predicate as argument (no more need
937     for cloning). Similar change in modules `array.NumOf`... :x:
938   * improved theory `real.PowerReal` :x:
939   * new theory: sequences
940   * new theories for bitvectors, mapped to BV theories of SMT solvers
941     Z3 and CVC4
943 Provers
944   * support for Coq 8.4pl5 (released Nov 7, 2014)
945   * support for Z3 4.3.2 (released Oct 25, 2014)
946   * support for MetiTarski 2.4 (released Oct 21, 2014)
947   * support for Alt-Ergo 0.99.1 (released Dec 30, 2014)
948   * support for Alt-Ergo 1.00.prv (released Jan 29, 2015)
949   * support for veriT 201410 (released Nov 2014)
950   * support for Psyche (experimental,
951     http://www.lix.polytechnique.fr/~lengrand/Psyche/)
952   * preliminary support for upcoming CVC4 1.5 (steps feature)
955   * config file not automatically saved anymore at exit. Configuration
956     is saved on disk for future sessions if, and only if, preferences
957     window is exited by hitting the "Save&Close" button
958   * right part of main window organized in tabs
959   * better explanations and task highlighting
960     (contributed by Mikhail Mandrykin, AstraVer project)
962 Bug fixes
963   * bug in interpreter in presence of nested mutable fields
964   * IDE: proofs in progress should never be "cleaned"
965   * IDE: display warnings after reload
967 Version 0.85, September 17, 2014
968 --------------------------------
970 Langage
971   * fix a soundness bug in the detection of aliases when calling a
972     WhyML function: some alias could have been forgotten when a type
973     variable was substituted with a mutable type :x:
975 Proof sessions
976   * use the full path of identifiers when the user introduces namespaces
977     (BTS #17181)
979 Transformations
980   * fix a soundness bug in `compute_in_goal` regarding the handling of
981     logical implication. :x:
982   * several improvements to `compute_in_goal`:
983     - left-hand side of rewrite rules can be any symbols, not only
984       non-interpreted ones.
985     - perform beta-reduction when possible
986     - the maximal number of reduction steps can be increased using meta
987       `compute_max_steps`
988     - the transformation is documented in details in the manual
989   * new transformation `compute_specified`:
990     less aggressive variant of `compute_in_goal`.
991     Unfolding of definitions is controlled using meta `rewrite_def`
992   * fixed a bug in `eliminate_if` when applied on inductive definitions
994 Provers
995   * fixed wrong warning when detecting Isabelle2014
997 Version 0.84, September 1, 2014
998 -------------------------------
1000 Tools
1001   * the file generated by `why3 session html f.mlw` is now
1002     `f/why3session.html` and not `f/f.html` :x:
1003   * the default behavior of `why3` has been moved to the `prove` subcommand :x:
1004   * options `--exec`, `--extract`, and `--realize`, have been moved to
1005     subcommands: `execute`, `extract`, and `realize` :x:
1006   * `why3replayer` has been moved to the `replay` subcommand :x:
1007   * other tools have been moved to `why3` subcommands too: `config`, `doc`, `ide`,
1008     `session`, `wc`. For local usage, the old commands are still available. :x:
1010 Proof sessions
1011   * session files are split in two parts: `why3session.xml` and
1012     `why3shapes`. The latter file contains the checksums and the shapes
1013     for the goals. That second file is not strictly needed for
1014     replaying a proof session, it is only useful when input programs
1015     are modified, to track obsolete goals. If Why3 is compiled with
1016     compression support (provided by the `ocamlzip` library) then files for
1017     shapes are compressed into `why3shapes.gz`.
1019 Standard library
1020   * renamed `array.ArraySorted` into `array.IntArraySorted`;
1021     `array.ArraySorted` is now generic, with type and order relation parameters :x:
1022   * reduced amount of `use export` in the standard library: theories
1023     now only export the symbols they define. Users may need to insert more
1024     `use import` in their theories (typically `int.Int`, `option.Option`,
1025     `list.List`, etc.). :x:
1027 Provers
1028   * fixed Coq printer (former Coq proofs may have to be updated, by removing
1029     non-emptiness constraints from polymorphic type applications) :x:
1030   * support for Coq8.4pl4
1031   * support for Isabelle2014
1032   * support for CVC4 1.4
1033   * updated support for TPTP TFA syntax (used by provers Beagle and Princess)
1035 Transformations
1036   * new transformation `compute_in_goal` that simplifies the goal, by
1037     computation, as much as possible
1039 Version 0.83, March 14, 2014
1040 ----------------------------
1042 Language
1043   * extra semicolons are now allowed at end of blocks
1044   * new clause `diverges`; loops and recursive calls not annotated
1045     with variants will generate a warning, unless the`"diverges`
1046     clause is given
1047   * clauses `reads` and `writes` now accept an empty set
1048   * modified syntax for `abstract`: `abstract <spec> <expr> end` :x:
1049   * types in quantifiers are now optional
1050   * formulas and Boolean terms can be used interchangeably
1052 Standard library
1053   * removed inconsistency in libraries `map.MapPermut` and `array.ArrayPermut`
1054     (names, definitions, and meaning of symbols `permut...` have been modified) :x:
1056 Provers
1057   * new version of prover: Coq 8.4pl3
1058   * new version of prover: Gappa 1.1.0
1059   * new version of prover: E prover 1.8
1060   * dropped support for Coq 8.3 :x:
1061   * improved support for Isabelle2013-2
1062   * fixed Coq printer (former Coq proofs may have to be updated, with
1063     extra qualification of imported symbols) :x:
1065 Tools
1066   * new option `--exec` to interpret WhyML programs; see doc chapter 8
1067   * new option `--extract` to compile WhyML programs to OCaml;
1068     see doc chapter 8 and `modules/mach/{int,array}.mlw`
1069   * `why3replayer` renamed option `-obsolete-only` to `--obsolete-only`,
1070     `-smoke-detector` to `--smoke-detector`, `-force` to `--force` :x:
1071   * `why3replayer` now fails replaying if new goals are added :x:
1074   * new type-inferring API for logical terms and program expressions
1076 Miscellaneous
1077   * fixed compilation bug with lablgtk 2.18
1079 Version 0.82, December 12, 2013
1080 -------------------------------
1082 Core
1083   * lemma functions
1084   * polymorphic recursion permitted
1085   * opaque types
1088   * more examples of use in `examples/use_api/`
1090 Tools
1091   * `why3session csv` can create graph with option `--gnuplot [png|svg|pdf|qt]`
1092   * shape algorithm modified (see VSTTE'13 paper) but is
1093     backward compatible thanks to `shape_version` numbers in
1094     `why3session.xml` files
1095   * options name and default of `why3session csv` changed :x:
1097 Miscellaneous
1098   * emacs: `why.el` renamed to `why3.el` :x:
1099   * GTK sourceview: `why.lang` renamed to `why3.lang` :x:
1100   * `Loc.try[1-7]` functions now take location as an optional parameter :x:
1102 Provers
1103   * new prover: Metitarski (2.2, contribution by Piotr Trojanek)
1104   * new prover: Metis (2.3)
1105   * new prover: Beagle (0.4.1)
1106   * new prover: Princess (2013-05-13)
1107   * new prover: Yices2 (2.0.4)
1108   * new prover: Isabelle (2013-2, contribution by Stefan Berghofer)
1109   * new version of prover: Alt-Ergo 0.95.2
1110   * new version of prover: CVC4 1.1 & 1.2 & 1.3
1111   * new version of prover: Coq 8.4pl2
1112   * new version of prover: Gappa 1.0.0
1113   * new version of prover: SPASS 3.8ds
1114   * new version of prover: veriT (201310)
1116 Bug fixes
1117   * remove extra leading zeros in decimal literals when a prover don't like them
1118   * PVS output: types are always non-empty
1119   * PVS: fixed configuration and installation process
1120   * Coq tactic: now loads dynamic plug-ins
1121   * bug #15493: correct Coq output for polymorphic algebraic data types
1122   * wish #15053: Remove proof time from "Goals proved by only one prover" section
1123     of `why3session info --stats` :x:
1124   * bug #13736: `why3ml` was slow when there were many inclusions
1125   * bug #16488: decimals in TPTP syntax
1126   * bug #16454: do not send arithmetic triggers anymore to alt-Ergo
1127   * syntax highlighting bugs should be fixed by removing the old language
1128     file `alt-ergo.lang` from Alt-ergo distribution
1130 Version 0.81, March 25, 2013
1131 ----------------------------
1133 Provers
1134   * experimental support for SPASS >= 3.8 (with types)
1135   * support for Z3 4.3.*
1136   * fixed Coq 8.4 support for theory `real.Trigonometry`
1137   * support for CVC4
1138   * support for mathematica
1139   * support for MathSAT5
1141 Core
1142   * accept type expressions in clone substitutions
1144 WhyML
1145   * support for relation chains (e.g., `e1 = e2 < e3`)
1146   * every exception raised in a function must be listed
1147     in as `raises { ... }` clause. A postcondition may be omitted
1148     and equals to `true` by default. :x:
1149   * if a function definition contains a `writes { ... }`
1150     clause, then every write effect must be listed. If a function
1151     definition contains a `reads { ... }` clause, then every read
1152     _and_ write effect must be listed. :x:
1154 Drivers
1155   * syntax rules, metas, and preludes are inherited
1156     through cloning. Keyword `cloned` becomes unnecessary and
1157     is not accepted anymore. :x:
1160 Version 0.80, October 31, 2012
1161 ------------------------------
1163 WhyML
1164   * modified syntax for mlw programs; a summary of changes is
1165     given in Appendix A of the manual :x:
1166   * support for type invariants and ghost code
1169   * Ocaml interfaces for constructing program modules
1171 Transformations
1172   * experimental support for induction on integers and on algebraic types
1174 Interface
1175   * new system of warnings, that includes:
1176      - form `exists x, P -> Q`, likely an error
1177      - unused bound logic variables in `forall`, `exists`, and `let`
1179 Tools
1180   * replayer: new option `-q`, for running quietly
1181   * improved output of `why3session latex`; LaTeX macros have
1182     more arguments :x:
1183   * modifiers in `--extra-config` are now called `[prover_modifier]`
1184     instead of just `[prover]` :x:
1186 Provers
1187   * support for Coq 8.4
1188   * dropped support for Coq 8.2 :x:
1189   * support for forthcoming PVS 6.0, including realizations
1190   * support for iProver and Zenon
1191   * new output scheme for Coq using type classes, to ensures
1192     types are inhabited
1194 Drivers
1195   * theory realizations now use meta `realized_theory` instead
1196     of `realized` :x:
1198 Version 0.73, July 19, 2012
1199 ---------------------------
1201 Core
1202   * co-inductive predicates
1204 WhyML
1205   * new construct `abstract e { q }` that matches the structure of the goal
1207 Proof sessions
1208   * small change in the format. Why3 is still able to
1209     read session files in the old format.
1211 Standard library
1212   * fixed a consistency issue with `set.Fset` theory
1214 Tools
1215   * option `-obsolete-only` for `why3replayer`
1216   * new option `-e` for `why3session latex` to specify when to
1217     split tables in parts
1218   * no more executable `why3ml` (`why3` now handles WhyML files) :x:
1220 Provers
1221   * support for Z3 4.0
1222   * workaround for a bug about modulo operator in Alt-Ergo 0.94
1223   * quotes in identifiers remain quotes in Coq
1224   * Coq default tactic is now `intros ...` with a pattern
1227   * "Clean" was cleaning too much
1229 Miscellaneous
1230   * completed support for the "Out Of Memory" prover result
1232 Version 0.72, May 11, 2012
1233 --------------------------
1235 Provers
1236   * Coq: new tactic `why3` to call external provers as oracles
1237   * Coq: new feature: theory realizations (see manual, chapter 9)
1239 Tools
1240   * new tool `why3session` (see manual, section 6.7)
1241   * new tool `why3doc` (see manual, section 6.8)
1242   * support for multiple versions of the same prover (see manual, section 5.5)
1245   * new features, including prover upgrade, alternate editors
1247 Miscellaneous
1248   * complete support for limiting provers' memory usage
1249   * improved support on Microsoft Windows
1250   * new parser for TPTP files with support for the newest
1251     TFA1 format (TPTP with polymorphic types and arithmetic)
1253 Bug fixes
1254   * fixed BTS 14221
1255   * fixed BTS 14190
1256   * fixed BTS 12457
1257   * fixed BTS 13854
1258   * fixed BTS 13849
1260 Language
1261   * new syntax `constant x:ty` and `constant x:ty = e` to
1262     introduce constants, as an alternative to `function`
1265   * `Dtype` declaration kind is split into two: `Dtype` for
1266     declarations of a single abstract type or type alias, and
1267     `Ddata` for a list of (mutually recursive) algebraic types.
1268     Similarly, `Dlogic` declaration kind is split into `Dparam` for
1269     a single abstract function/predicate symbol and `Dlogic` for
1270     a list of (mutually recursive) defined symbols.
1272 Version 0.71, October 13, 2011
1273 ------------------------------
1275 Examples
1276   * a lot of new program examples in directory examples/programs
1278 Tools
1279   * `why3replayer`: new option `-latex` to output a proof session in LaTeX format
1281 WhyML
1282   * significant improvement of the efficiency of the WP calculus
1283   * fixed labels and source locations in WPs
1286   * better coloring and source positioning including from front-ends
1287     such as Krakatoa and Jessie plugin of Frama-C
1289 Proof sessions
1290   * during reload, new method for pairing old and new subgoals
1291     based on goal shapes, stored in database.
1292   * prover versions are stored in database. A proof is
1293     marked obsolete if it was made by a prover with another version
1294     than the current.
1296 Version 0.70, July 6, 2011
1297 --------------------------
1299 WhyML
1300   * language and VC generator
1302 Language
1303   * record types
1304     - introduced with syntax `type t = {| a:int; b:bool |}`
1305       actually syntactic sugar for `type t = 'mk t' (a:int) (b:bool)`
1306       i.e. an algebraic with one constructor and projection functions
1307     - a record expression is written `{| a = 1; b = True |}`
1308     - access to field `a` with syntax `x.a`
1309     - update with syntax `{| x with b = False |}`
1310     - record patterns
1311   * new syntax for conjunction `/\` and disjunction `\/`
1312     (`and` and `or` do not exist anymore) :x:
1313   * `logic` is not a keyword anymore, use `function` and `predicate` :x:
1315 Tools
1316   * new tool `why3replayer`: batch replay of a Why3 session created in IDE
1318 Provers
1319   * Alt-Ergo, Z3, CVC3, Yices: support for built-in theory of arrays
1322   * interactive detection of provers disabled because incompatible
1323     with session. Detection must be done with `why3config --detect-provers`
1324   * tool "Replay" works
1325   * tool "Reload" reloads the file from disk. No need to exit IDE anymore
1326   * does not use `Threads` anymore, thanks to `Call_provers.query_call`
1327   * displays explanations using labels of the form `"expl:..."`
1328   * dropped dependency on `Sqlite3`
1331   * functions to create an environment are now exported from `Env` :x:
1332   * calls to prover can now be asynchronous.
1333     `Driver.prove_task` now returns some intermediate value
1334     (of type `prover_call`), which can be queried in two ways:
1335     - blocking way with `Call_provers.wait_on_call`
1336     - non-blocking way with `Call_provers.query_call`
1338     So old code performing `prove_task t () ()` should be translated to
1339     `wait_on_call (prove_task t ()) ()`. :x:
1341 Bug fixes
1342   * IDE: bug 12244 resolved by using `Task.task_equal`
1343   * Alt-Ergo: no triggers for `exists` quantifier
1344   * Coq: polymorphic inductive predicates
1345   * Coq: fixed bug 12934: type def with several type params
1347 Version 0.64, February 16, 2011
1348 -------------------------------
1350 Language
1351   * `/\` renamed into `&&` and `\/` into `||` :x:
1352   * algebraic types: must be well-founded, non-positive constructors
1353     are forbidden, recursive functions and predicates must
1354     structurally terminate
1355   * accept lowercase names for axioms, lemmas, goals, and cases in
1356     inductive predicates
1358 Transformations
1359   * `split-goal` does not split under disjunction anymore
1361 Tools
1362   * `why.conf` is no more looked for in the current directory; use `-C` or
1363     `WHY3CONFIG` instead
1364   * when `why.conf` is changed, a backup copy is made in `why.conf.bak`
1365   * `why.conf` now contains a magic number; configuration must be
1366     rebuilt with `why3config` if the magic number has changed
1367   * `why3config`: `--autodetect-provers` renamed to `--detect-provers`,
1368                   `--autodetect-plugins` renamed to `--detect-plugins`;
1369     new option `--detect` to perform both detections
1370   * `why3config`: `--conf_file` is replaced by `-C` and `--config`
1372 Drivers
1373   * TPTP: encoding by explicit polymorphism is not anymore the
1374     default encoding for TPTP provers. It is now forbidden to use this
1375     encoding in presence of finite types.
1378   * source file names are stored in database with paths relative
1379     to the database, so that databases are now easier to move from a
1380     machine to another (e.g when they are stored in source control
1381     repositories)
1383 Provers
1384   * better Gappa output: support for `sqrt`, for negative constants
1386 Miscellaneous
1387   * `configure`: fixed `--enable-local`
1388   * `configure`: if possible, use `ocamlfind` to find `lablgtk2` and `sqlite3`
1389   * labels in terms and formulas are not printed by default
1391 Version 0.63, December 21, 2010
1392 -------------------------------
1394   * first public release. See release notes in manual