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