Version 1.2.1
[why3.git] / CHANGES.md
blob2889cb2879091d4b27971bbe7704037bc42000ad
1 :x: marks a potential source of incompatibility
3 Version 1.2.1, October 28, 2019
4 -------------------------------
6 Bug fixes
7   * fixed compilation with OCaml 4.09
8   * fixed compilation with Lablgtk3
10 Provers
11   * support for Z3 4.8.6 (released Sep 20, 2019)
12   * support for Z3 4.8.5 (released Jun 3, 2019)
13   * support for CVC4 1.7 (released Apr 9, 2019)
14   * support for Alt-Ergo 2.3.0 (released Feb 11, 2019)
15   * support for Coq 8.9.1 (released May 20, 2019)
17 Version 1.2.0, February 11, 2019
18 --------------------------------
20 Session
21   * file path stored in session files are now represented in a
22     system-independent way
24 Drivers
25   * the clause `syntax converter` has been removed; any former use should
26     be replaced by `syntax literal` and/or `syntax function` :x:
28 Language
29   * the `any` expression is now always ghost :x:
30   * a syntactic sugar called "auto-dereference" is introduced, so as
31     to avoid, on simple programs, the heavy use of `(!)` character on
32     references; see details in Section A.1 of the manual
34 Transformations
35   * `split_vc` and `subst_all` now avoid substituting user symbols by
36     generated ones :x:
37   * `destruct_rec` applies `destruct` recursively on a goal
38   * `destruct` now simplifies away equalities on constructors :x:
39   * `destruct` now simplifies `if .. then .. else ..` and `match .. with ..` :x:
40   * `destruct_alg` renamed to `destruct_term`; it also has a new experimental
41     keyword `using` to name newly destructed elements :x:
43 Tools
44   * added a command `why3 session update` to modify sessions from the
45     command line; so far, only option `-rename-file` exists, for
46     renaming files
47   * `why3 config --add-prover` now takes the shortcut as second
48     argument; option `--list-prover-ids` has been renamed to
49     `--list-prover-families` :x:
51 IDE
52   * clicking on the status of a failed proof attempt in the proof tree
53     now generates counterexamples
54   * added support for GTK3
56 Counterexamples
57   * the trigger for counterexamples has been changed; read Section 5.3.7
58     of the manual for details :x:
59   * various improvements on the generated counterexamples
60   * field names now use ident names instead of smt generated ones, e.g.,
61     `int32qtint` -> `int32'int` :x:
62   * fixed parsing of bitvector values from counterexamples generated by Z3
64 Extraction
65   * fixed extraction of functions passed as arguments
66   * fixed extraction of recursive polymorphic functions for Ocaml
67   * improved extraction of records for C
69 Standard library
70   * `Stack.length` and `Queue.length` now return a `Peano.t`, for
71     improved extraction :x:
73 Provers
74   * support for Z3 4.8.1 (released Oct 16, 2018)
75   * support for Z3 4.8.3 (released Nov 20, 2018)
76   * support for Z3 4.8.4 (released Dec 20, 2018)
77   * support for Coq 8.9.0 (released Jan 17, 2019)
78   * upgraded Coq realizations for floating-point arithmetic to Flocq 3.1
80 Version 1.1.1, December 17, 2018
81 --------------------------------
83 Bug fixes
84   * prevented broken extraction of `any`
85   * fixed evaluation order when extracting nested mutators
86   * fixed extraction of nested recursive polymorphic functions
87   * fixed cloning of expressions raising exceptions
89 Version 1.1.0, October 17, 2018
90 -------------------------------
92 Core
93   * variants can now be inferred on some lemma functions
94   * coercions are now supported for `if` and `match` branches
95   * `interrupt` command should now properly interrupt running provers.
96   * clearer typing error messages thanks to printing qualified names
97   * fixed handling of prover upgrades, resurrected the policy
98     "duplicate" and added a policy "remove"
101   * added `Call_provers.interrupt_call` to interrupt a running prover
102     (contribution by Pierre-Yves Strub)
104 Language
105   * program functions can now be marked `partial` to prevent them from
106     being used in ghost context; the annotation does not have to be
107     explicitly put on their callers
108   * `use` now accepts several module names separated by commas
109   * symbolic operators can be used in identifiers like `(+)_ident` or
110     `([])'ident`
111   * range types have now a default ordering to be used in `variant` clause
113 Standard library
114   * library `ieee_float`: floating-point operations can now be used in
115     programs
117 Transformations
118   * `split_vc` behaves slightly differently :x:
120 Provers
121   * support for Alt-Ergo 2.1.0 (released Mar 14, 2018)
122   * support for Alt-Ergo 2.2.0 (released Apr 26, 2018)
123   * support for Coq 8.8.1 (released Jun 29, 2018)
124   * support for Coq 8.8.2 (released Sep 26, 2018)
125   * support for CVC4 1.6 (released Jun 25, 2018)
126   * support for Z3 4.7.1 (released May 23, 2018)
127   * support for Isabelle 2018 (released Aug 2018)
128     (contribution by Stefan Berghofer)
129   * dropped support for Isabelle 2016 (2017 still supported) :x:
130   * dropped support for Alt-Ergo versions < 2.0.0 :x:
132 Version 1.0.0, June 25, 2018
133 ----------------------------
135 Core
136   * improved support of counter-examples
137   * attribute `[@vc:sp]` on an expression switches from traditional WP
138     to Flanagan-Saxe-like VC generation
139   * type invariants now produce logical axioms;
140     a type with an invariant must be proved to be inhabited :x:
141   * logical symbols can no longer be used in non-ghost code;
142     in particular, there is no polymorphic equality in programs any more,
143     so equality functions must be declared/defined on a per-type basis
144     (already done for type `int` in the standard library) :x:
146 Language
147   * numerous changes to syntax, see documentation appendix :x:
148   * `let function`, `let predicate`, `val function`, and `val predicate`
149     introduce symbols in both logic and programs
150   * added overloading of program symbols
151   * new contract clause `alias { <term> with <term>, ... }` :x:
152   * support for parallel assignment `<term>,... <- <term>,...`
153   * support for local exceptions using `exception ... in ...`
154   * added `break`, `continue`, and `return` statements
155   * support for `exception` branches in `match` constructs
156   * support for `for` loops on range types
157     (including machine integers from the standard library)
158   * support for type coercions in logic using `meta coercion`
159   * keyword `theory` is deprecated; use `module` instead
160   * term on the left of sequence `;` must be of type `unit` :x:
161   * cloned axioms turn into lemmas; use `with axiom my_axiom`
162     or `with axiom .` to keep them as axioms :x:
163   * `any <type> <spec>` produces an existential precondition;
164     use `val f : <type> <spec> in ...` (unsafe!) instead :x:
165   * `use T` and `clone T` now import the generated namespace T;
166     use `use T as T` and `clone T as T` to prevent this :x:
167   * `pure { <term> }` produces a ghost value in program code
168   * `a <-> b <-> c` is now parsed as `(a <-> b) /\ (b <-> c)`;
169     `a <-> b -> c` is now rejected :x:
171 Standard library
172   * machine integers in `mach.int.*` are now range types :x:
173   * added a minimal memory model for the C language in `mach.c`
174   * new modules `witness.Witness` and `witness.Nat`
176 Extraction
177   * improved extraction to OCaml
178   * added partial extraction to C using the memory model of `mach.c`
179   * added extraction to CakeML (using `why3 extract -D cakeml ...`)
181 Transformations
182   * transformations can now have arguments
183   * added transformations `assert`, `apply`, `cut`, `rewrite`, etc., à la Coq
184   * added transformations for reflection-based proofs
186 Drivers
187   * support for `use` in theory drivers
190   * replaced left toolbar by a contextual menu
191   * source is now editable
192   * premises are no longer implicitly introduced
193   * added textual interface to call transformations and provers
195 Tools
196   * deprecated `.why` file extension; use `.mlw` instead
198 Provers
199   * removed the `why3` Coq tactic :x:
200   * dropped support for Coq 8.4 :x:
202 Miscellaneous
203   * moved the opam base package to `why3`; added `why3-ide` and `why3-coq`
205 Version 0.88.3, January 11, 2018
206 --------------------------------
208 Provers
209   * support for Alt-Ergo 2.0.0 (released Nov 14, 2017)
210   * support for Coq 8.7.1 (released Dec 16, 2017)
211   * support for Z3 4.6.0 (released Dec 18, 2017)
213 Standard library
214   * fixed soundness of theory `int.Exponentiation` when multiplication is not
215     commutative :x:
217 Miscellaneous
218   * fixed support for `--enable_relocation=yes`
219   * fixed support for Windows
221 Version 0.88.2, December 7, 2017
222 --------------------------------
224 Miscellaneous
225   * `why3 session html`: improved compliance of generated files
226   * `why3 doc`: fixed missing anchors for operator definitions
227   * improved build process when `coqtop.byte` is missing
229 Version 0.88.1, November 6, 2017
230 --------------------------------
233   * exported function `Call_provers.get_new_results`
235 Provers
236   * improved support for Isabelle 2017
237   * fixed support for Coq 8.7 (released Oct 17, 2017)
239 Miscellaneous
240   * fixed compilation for OCaml 4.06
241   * improved support for nullary `val` declarations with regions
243 Version 0.88.0, October 6, 2017
244 -------------------------------
246 Language
247   * added two new forms of type declarations: integer range types and
248     floating-point types. To denote constants in such types, integer
249     constants and real constants can be cast to such types. This
250     support is exploited in drivers for provers that support bitvector
251     theories (CVC4, Z3) and floating-point theory (Z3).
252     More details in the manual, section 7.2.4 "Theories".
253   * a quote character `'` inside an identifier must either be at the
254     end, or be followed by either a digit, the underscore character
255     `_` or another quote. Identifiers with a quote followed by a
256     letter are reserved. :x:
258 Standard library
259   * new theory `ieee_float` formalizing floating-point arithmetic,
260     compliant to IEEE-754, mapped to SMT-LIB FP theory.
262 User features
263   * proof strategies: `why3 config` now generates default proof strategies
264     using the installed provers. These are available under name "Auto
265     level 0", "Auto level 1" and "Auto level 2" in `why3 ide`.
266     More details in the manual, section 10.6 "Proof Strategies".
267   * counterexamples: better support for array values, support for
268     floating-point values, support for Z3 in addition to CVC4.
269     More details in the manual, section 6.3.5 "Displaying Counterexamples".
271 Plugins
272   * new input format for a small subset of Python
274 Provers
275   * support for Isabelle 2017 (released Oct 2017)
276   * dropped support for Isabelle 2016 (2016-1 still supported) :x:
277   * support for Coq 8.6.1 (released Jul 25, 2017)
278   * tentative support for Coq 8.7
279   * dropped tactic support for Coq 8.4 (proofs still supported) :x:
280   * support for CVC4 1.5 (released Jul 10, 2017)
281   * support for E 2.0 (released Jul 4, 2017)
282   * support for E 1.9.1 (release Aug 31, 2016)
284 Version 0.87.3, January 12, 2017
285 --------------------------------
287 Bug fixes
288   * fixed OCaml extraction with respect to ghost parameters
289   * assorted bug fixes
291 Provers
292   * support for Alt-Ergo 1.30 (released Nov 21, 2016)
293   * support for Coq 8.6 (released Dec 8, 2016)
294   * support for Gappa 1.3 (released Jul 20, 2016)
295   * dropped support for Isabelle 2015 :x:
296   * support for Isabelle 2016-1 (released Dec 2016)
297   * support for Z3 4.5.0 (released Nov 8, 2016)
299 Version 0.87.2, September 1, 2016
300 ---------------------------------
302 Bug fixes
303   * improved well-formedness of extracted OCaml code
304   * assorted bug fixes
306 Version 0.87.1, May 27, 2016
307 ----------------------------
309 Bug fixes
310   * assorted bug fixes
312 Version 0.87.0, March 15, 2016
313 ------------------------------
315 Language
316   * added two new logical connectives `by` and `so` as keywords :x:
318 Tools
319   * added a command-line option `--extra-expl-prefix` to specify
320     additional possible prefixes for VC explanations. Available for
321     `why3` commands `prove` and `ide`.
322   * removed `jstree` style from the `session` command :x:
324 Transformations
325   * all split transformations respect the `"stop_split"` label now.
326     `split_*_wp` is a synonym for `split_*_right` :x:
327   * the `split_*_right` transformations split the left-hand side subformulas
328     when they carry the `"case_split"` label :x:
329   * `split_intro` is now the composition of `split_goal_right` and
330     `introduce_premises` :x:
332 Standard library
333   * improved bitvector theories :x:
336   * renamed functions in module `Split_goal` :x:
337   * `split_intro` moved to Introduction :x:
339 Encoding
340   * if a task has no polymorphic object (except for the special
341     cases of equality and maps), then the translation to SMT-LIB
342     format is direct :x:
344 Provers
345   * dropped support for Alt-Ergo versions older than 0.95.2 :x:
346   * support for Alt-Ergo 1.01 (released Feb 16, 2016) and
347     non-free versions 1.10 and 1.20
348   * support for Coq 8.4pl6 (released Apr 9, 2015)
349   * support for Coq 8.5 (released Jan 21, 2016)
350   * support for Gappa 1.2.0 (released May 19, 2015)
351   * dropped support for Isabelle 2014 :x:
352   * support for Isabelle 2015 (released May 25, 2015) and
353     Isabelle 2016 (released Feb 17, 2016)
354   * support for Z3 4.4.0 (released Apr 29, 2015) and
355     4.4.1 (released Oct 5, 2015)
356   * support for Zenon 0.8.0 (released Oct 21, 2014)
357   * support for Zenon_modulo 0.4.1 (released Jul 2, 2015)
359 Distribution
360   * non-free files have been removed: `boomy` icon set,
361     javascript helpers for `why3 session html --style jstree`
363 Version 0.86.3, February 8, 2016
364 --------------------------------
366 Bug fixes
367   * assorted bug fixes
369 Provers
370   * fix compilation issues with Coq 8.5
371     (the tactic for 8.5 now behaves like `idtac` on successfully proved goals) :x:
373 Version 0.86.2, October 13, 2015
374 --------------------------------
376 Bug fixes
377   * assorted bug fixes
379 Version 0.86.1, May 22, 2015
380 ----------------------------
383   * improved task highlighting for negated premises
384     (contributed by Mikhail Mandrykin, AstraVer project)
386 Provers
387   * support for Gappa 1.2 (released May 19, 2015)
389 Bug fixes
390   * `why3doc`: garbled output
392 Version 0.86, May 11, 2015
393 --------------------------
395 Core
396   * steps limit for reliable replay of proofs, available for Alt-Ergo
397     and CVC4
399 Transformations
400   * new transformations `induction_pr` and `inversion_pr` to reason with
401     inductive predicates
403 Standard library
404   * renamed theory `int.NumOfParam` into `int.NumOf`; the predicate `numof`
405     now takes some higher-order predicate as argument (no more need
406     for cloning). Similar change in modules `array.NumOf`... :x:
407   * improved theory `real.PowerReal` :x:
408   * new theory: sequences
409   * new theories for bitvectors, mapped to BV theories of SMT solvers
410     Z3 and CVC4
412 Provers
413   * support for Coq 8.4pl5 (released Nov 7, 2014)
414   * support for Z3 4.3.2 (released Oct 25, 2014)
415   * support for MetiTarski 2.4 (released Oct 21, 2014)
416   * support for Alt-Ergo 0.99.1 (released Dec 30, 2014)
417   * support for Alt-Ergo 1.00.prv (released Jan 29, 2015)
418   * support for veriT 201410 (released Nov 2014)
419   * support for Psyche (experimental,
420     http://www.lix.polytechnique.fr/~lengrand/Psyche/)
421   * preliminary support for upcoming CVC4 1.5 (steps feature)
424   * config file not automatically saved anymore at exit. Configuration
425     is saved on disk for future sessions if, and only if, preferences
426     window is exited by hitting the "Save&Close" button
427   * right part of main window organized in tabs
428   * better explanations and task highlighting
429     (contributed by Mikhail Mandrykin, AstraVer project)
431 Bug fixes
432   * bug in interpreter in presence of nested mutable fields
433   * IDE: proofs in progress should never be "cleaned"
434   * IDE: display warnings after reload
436 Version 0.85, September 17, 2014
437 --------------------------------
439 Langage
440   * fix a soundness bug in the detection of aliases when calling a
441     WhyML function: some alias could have been forgotten when a type
442     variable was substituted with a mutable type :x:
444 Proof sessions
445   * use the full path of identifiers when the user introduces namespaces
446     (BTS #17181)
448 Transformations
449   * fix a soundness bug in `compute_in_goal` regarding the handling of
450     logical implication. :x:
451   * several improvements to `compute_in_goal`:
452     - left-hand side of rewrite rules can be any symbols, not only
453       non-interpreted ones.
454     - perform beta-reduction when possible
455     - the maximal number of reduction steps can be increased using meta
456       `compute_max_steps`
457     - the transformation is documented in details in the manual
458   * new transformation `compute_specified`:
459     less aggressive variant of `compute_in_goal`.
460     Unfolding of definitions is controlled using meta `rewrite_def`
461   * fixed a bug in `eliminate_if` when applied on inductive definitions
463 Provers
464   * fixed wrong warning when detecting Isabelle2014
466 Version 0.84, September 1, 2014
467 -------------------------------
469 Tools
470   * the file generated by `why3 session html f.mlw` is now
471     `f/why3session.html` and not `f/f.html` :x:
472   * the default behavior of `why3` has been moved to the `prove` subcommand :x:
473   * options `--exec`, `--extract`, and `--realize`, have been moved to
474     subcommands: `execute`, `extract`, and `realize` :x:
475   * `why3replayer` has been moved to the `replay` subcommand :x:
476   * other tools have been moved to `why3` subcommands too: `config`, `doc`, `ide`,
477     `session`, `wc`. For local usage, the old commands are still available. :x:
479 Proof sessions
480   * session files are split in two parts: `why3session.xml` and
481     `why3shapes`. The latter file contains the checksums and the shapes
482     for the goals. That second file is not strictly needed for
483     replaying a proof session, it is only useful when input programs
484     are modified, to track obsolete goals. If Why3 is compiled with
485     compression support (provided by the `ocamlzip` library) then files for
486     shapes are compressed into `why3shapes.gz`.
488 Standard library
489   * renamed `array.ArraySorted` into `array.IntArraySorted`;
490     `array.ArraySorted` is now generic, with type and order relation parameters :x:
491   * reduced amount of `use export` in the standard library: theories
492     now only export the symbols they define. Users may need to insert more
493     `use import` in their theories (typically `int.Int`, `option.Option`,
494     `list.List`, etc.). :x:
496 Provers
497   * fixed Coq printer (former Coq proofs may have to be updated, by removing
498     non-emptiness constraints from polymorphic type applications) :x:
499   * support for Coq8.4pl4
500   * support for Isabelle2014
501   * support for CVC4 1.4
502   * updated support for TPTP TFA syntax (used by provers Beagle and Princess)
504 Transformations
505   * new transformation `compute_in_goal` that simplifies the goal, by
506     computation, as much as possible
508 Version 0.83, March 14, 2014
509 ----------------------------
511 Language
512   * extra semicolons are now allowed at end of blocks
513   * new clause `diverges`; loops and recursive calls not annotated
514     with variants will generate a warning, unless the`"diverges`
515     clause is given
516   * clauses `reads` and `writes` now accept an empty set
517   * modified syntax for `abstract`: `abstract <spec> <expr> end` :x:
518   * types in quantifiers are now optional
519   * formulas and Boolean terms can be used interchangeably
521 Standard library
522   * removed inconsistency in libraries `map.MapPermut` and `array.ArrayPermut`
523     (names, definitions, and meaning of symbols `permut...` have been modified) :x:
525 Provers
526   * new version of prover: Coq 8.4pl3
527   * new version of prover: Gappa 1.1.0
528   * new version of prover: E prover 1.8
529   * dropped support for Coq 8.3 :x:
530   * improved support for Isabelle2013-2
531   * fixed Coq printer (former Coq proofs may have to be updated, with
532     extra qualification of imported symbols) :x:
534 Tools
535   * new option `--exec` to interpret WhyML programs; see doc chapter 8
536   * new option `--extract` to compile WhyML programs to OCaml;
537     see doc chapter 8 and `modules/mach/{int,array}.mlw`
538   * `why3replayer` renamed option `-obsolete-only` to `--obsolete-only`,
539     `-smoke-detector` to `--smoke-detector`, `-force` to `--force` :x:
540   * `why3replayer` now fails replaying if new goals are added :x:
543   * new type-inferring API for logical terms and program expressions
545 Miscellaneous
546   * fixed compilation bug with lablgtk 2.18
548 Version 0.82, December 12, 2013
549 -------------------------------
551 Core
552   * lemma functions
553   * polymorphic recursion permitted
554   * opaque types
557   * more examples of use in `examples/use_api/`
559 Tools
560   * `why3session csv` can create graph with option `--gnuplot [png|svg|pdf|qt]`
561   * shape algorithm modified (see VSTTE'13 paper) but is
562     backward compatible thanks to `shape_version` numbers in
563     `why3session.xml` files
564   * options name and default of `why3session csv` changed :x:
566 Miscellaneous
567   * emacs: `why.el` renamed to `why3.el` :x:
568   * GTK sourceview: `why.lang` renamed to `why3.lang` :x:
569   * `Loc.try[1-7]` functions now take location as an optional parameter :x:
571 Provers
572   * new prover: Metitarski (2.2, contribution by Piotr Trojanek)
573   * new prover: Metis (2.3)
574   * new prover: Beagle (0.4.1)
575   * new prover: Princess (2013-05-13)
576   * new prover: Yices2 (2.0.4)
577   * new prover: Isabelle (2013-2, contribution by Stefan Berghofer)
578   * new version of prover: Alt-Ergo 0.95.2
579   * new version of prover: CVC4 1.1 & 1.2 & 1.3
580   * new version of prover: Coq 8.4pl2
581   * new version of prover: Gappa 1.0.0
582   * new version of prover: SPASS 3.8ds
583   * new version of prover: veriT (201310)
585 Bug fixes
586   * remove extra leading zeros in decimal literals when a prover don't like them
587   * PVS output: types are always non-empty
588   * PVS: fixed configuration and installation process
589   * Coq tactic: now loads dynamic plug-ins
590   * bug #15493: correct Coq output for polymorphic algebraic data types
591   * wish #15053: Remove proof time from "Goals proved by only one prover" section
592     of `why3session info --stats` :x:
593   * bug #13736: `why3ml` was slow when there were many inclusions
594   * bug #16488: decimals in TPTP syntax
595   * bug #16454: do not send arithmetic triggers anymore to alt-Ergo
596   * syntax highlighting bugs should be fixed by removing the old language
597     file `alt-ergo.lang` from Alt-ergo distribution
599 Version 0.81, March 25, 2013
600 ----------------------------
602 Provers
603   * experimental support for SPASS >= 3.8 (with types)
604   * support for Z3 4.3.*
605   * fixed Coq 8.4 support for theory `real.Trigonometry`
606   * support for CVC4
607   * support for mathematica
608   * support for MathSAT5
610 Core
611   * accept type expressions in clone substitutions
613 WhyML
614   * support for relation chains (e.g., `e1 = e2 < e3`)
615   * every exception raised in a function must be listed
616     in as `raises { ... }` clause. A postcondition may be omitted
617     and equals to `true` by default. :x:
618   * if a function definition contains a `writes { ... }`
619     clause, then every write effect must be listed. If a function
620     definition contains a `reads { ... }` clause, then every read
621     _and_ write effect must be listed. :x:
623 Drivers
624   * syntax rules, metas, and preludes are inherited
625     through cloning. Keyword `cloned` becomes unnecessary and
626     is not accepted anymore. :x:
629 Version 0.80, October 31, 2012
630 ------------------------------
632 WhyML
633   * modified syntax for mlw programs; a summary of changes is
634     given in Appendix A of the manual :x:
635   * support for type invariants and ghost code
638   * Ocaml interfaces for constructing program modules
640 Transformations
641   * experimental support for induction on integers and on algebraic types
643 Interface
644   * new system of warnings, that includes:
645      - form `exists x, P -> Q`, likely an error
646      - unused bound logic variables in `forall`, `exists`, and `let`
648 Tools
649   * replayer: new option `-q`, for running quietly
650   * improved output of `why3session latex`; LaTeX macros have
651     more arguments :x:
652   * modifiers in `--extra-config` are now called `[prover_modifier]`
653     instead of just `[prover]` :x:
655 Provers
656   * support for Coq 8.4
657   * dropped support for Coq 8.2 :x:
658   * support for forthcoming PVS 6.0, including realizations
659   * support for iProver and Zenon
660   * new output scheme for Coq using type classes, to ensures
661     types are inhabited
663 Drivers
664   * theory realizations now use meta `realized_theory` instead
665     of `realized` :x:
667 Version 0.73, July 19, 2012
668 ---------------------------
670 Core
671   * co-inductive predicates
673 WhyML
674   * new construct `abstract e { q }` that matches the structure of the goal
676 Proof sessions
677   * small change in the format. Why3 is still able to
678     read session files in the old format.
680 Standard library
681   * fixed a consistency issue with `set.Fset` theory
683 Tools
684   * option `-obsolete-only` for `why3replayer`
685   * new option `-e` for `why3session latex` to specify when to
686     split tables in parts
687   * no more executable `why3ml` (`why3` now handles WhyML files) :x:
689 Provers
690   * support for Z3 4.0
691   * workaround for a bug about modulo operator in Alt-Ergo 0.94
692   * quotes in identifiers remain quotes in Coq
693   * Coq default tactic is now `intros ...` with a pattern
696   * "Clean" was cleaning too much
698 Miscellaneous
699   * completed support for the "Out Of Memory" prover result
701 Version 0.72, May 11, 2012
702 --------------------------
704 Provers
705   * Coq: new tactic `why3` to call external provers as oracles
706   * Coq: new feature: theory realizations (see manual, chapter 9)
708 Tools
709   * new tool `why3session` (see manual, section 6.7)
710   * new tool `why3doc` (see manual, section 6.8)
711   * support for multiple versions of the same prover (see manual, section 5.5)
714   * new features, including prover upgrade, alternate editors
716 Miscellaneous
717   * complete support for limiting provers' memory usage
718   * improved support on Microsoft Windows
719   * new parser for TPTP files with support for the newest
720     TFA1 format (TPTP with polymorphic types and arithmetic)
722 Bug fixes
723   * fixed BTS 14221
724   * fixed BTS 14190
725   * fixed BTS 12457
726   * fixed BTS 13854
727   * fixed BTS 13849
729 Language
730   * new syntax `constant x:ty` and `constant x:ty = e` to
731     introduce constants, as an alternative to `function`
734   * `Dtype` declaration kind is split into two: `Dtype` for
735     declarations of a single abstract type or type alias, and
736     `Ddata` for a list of (mutually recursive) algebraic types.
737     Similarly, `Dlogic` declaration kind is split into `Dparam` for
738     a single abstract function/predicate symbol and `Dlogic` for
739     a list of (mutually recursive) defined symbols.
741 Version 0.71, October 13, 2011
742 ------------------------------
744 Examples
745   * a lot of new program examples in directory examples/programs
747 Tools
748   * `why3replayer`: new option `-latex` to output a proof session in LaTeX format
750 WhyML
751   * significant improvement of the efficiency of the WP calculus
752   * fixed labels and source locations in WPs
755   * better coloring and source positioning including from front-ends
756     such as Krakatoa and Jessie plugin of Frama-C
758 Proof sessions
759   * during reload, new method for pairing old and new subgoals
760     based on goal shapes, stored in database.
761   * prover versions are stored in database. A proof is
762     marked obsolete if it was made by a prover with another version
763     than the current.
765 Version 0.70, July 6, 2011
766 --------------------------
768 WhyML
769   * language and VC generator
771 Language
772   * record types
773     - introduced with syntax `type t = {| a:int; b:bool |}`
774       actually syntactic sugar for `type t = 'mk t' (a:int) (b:bool)`
775       i.e. an algebraic with one constructor and projection functions
776     - a record expression is written `{| a = 1; b = True |}`
777     - access to field `a` with syntax `x.a`
778     - update with syntax `{| x with b = False |}`
779     - record patterns
780   * new syntax for conjunction `/\` and disjunction `\/`
781     (`and` and `or` do not exist anymore) :x:
782   * `logic` is not a keyword anymore, use `function` and `predicate` :x:
784 Tools
785   * new tool `why3replayer`: batch replay of a Why3 session created in IDE
787 Provers
788   * Alt-Ergo, Z3, CVC3, Yices: support for built-in theory of arrays
791   * interactive detection of provers disabled because incompatible
792     with session. Detection must be done with `why3config --detect-provers`
793   * tool "Replay" works
794   * tool "Reload" reloads the file from disk. No need to exit IDE anymore
795   * does not use `Threads` anymore, thanks to `Call_provers.query_call`
796   * displays explanations using labels of the form `"expl:..."`
797   * dropped dependency on `Sqlite3`
800   * functions to create an environment are now exported from `Env` :x:
801   * calls to prover can now be asynchronous.
802     `Driver.prove_task` now returns some intermediate value
803     (of type `prover_call`), which can be queried in two ways:
804     - blocking way with `Call_provers.wait_on_call`
805     - non-blocking way with `Call_provers.query_call`
807     So old code performing `prove_task t () ()` should be translated to
808     `wait_on_call (prove_task t ()) ()`. :x:
810 Bug fixes
811   * IDE: bug 12244 resolved by using `Task.task_equal`
812   * Alt-Ergo: no triggers for `exists` quantifier
813   * Coq: polymorphic inductive predicates
814   * Coq: fixed bug 12934: type def with several type params
816 Version 0.64, February 16, 2011
817 -------------------------------
819 Language
820   * `/\` renamed into `&&` and `\/` into `||` :x:
821   * algebraic types: must be well-founded, non-positive constructors
822     are forbidden, recursive functions and predicates must
823     structurally terminate
824   * accept lowercase names for axioms, lemmas, goals, and cases in
825     inductive predicates
827 Transformations
828   * `split-goal` does not split under disjunction anymore
830 Tools
831   * `why.conf` is no more looked for in the current directory; use `-C` or
832     `WHY3CONFIG` instead
833   * when `why.conf` is changed, a backup copy is made in `why.conf.bak`
834   * `why.conf` now contains a magic number; configuration must be
835     rebuilt with `why3config` if the magic number has changed
836   * `why3config`: `--autodetect-provers` renamed to `--detect-provers`,
837                   `--autodetect-plugins` renamed to `--detect-plugins`;
838     new option `--detect` to perform both detections
839   * `why3config`: `--conf_file` is replaced by `-C` and `--config`
841 Drivers
842   * TPTP: encoding by explicit polymorphism is not anymore the
843     default encoding for TPTP provers. It is now forbidden to use this
844     encoding in presence of finite types.
847   * source file names are stored in database with paths relative
848     to the database, so that databases are now easier to move from a
849     machine to another (e.g when they are stored in source control
850     repositories)
852 Provers
853   * better Gappa output: support for `sqrt`, for negative constants
855 Miscellaneous
856   * `configure`: fixed `--enable-local`
857   * `configure`: if possible, use `ocamlfind` to find `lablgtk2` and `sqlite3`
858   * labels in terms and formulas are not printed by default
860 Version 0.63, December 21, 2010
861 -------------------------------
863   * first public release. See release notes in manual