1 :x: marks a potential source of incompatibility
3 Version 1.3.3, September 11, 2020
4 ---------------------------------
7 * fixed compilation on OpenBSD
10 * support for Coq 8.12.0 (released Jul 27, 2020)
12 Version 1.3.2, September 5, 2020
13 --------------------------------
16 * fixed compilation on FreeBSD and macOS
17 * fixed `use_api` examples
18 * removed support for strings from the default variant of CVC4 1.7
19 * fixed custom editors for provers not being saved
21 Version 1.3.1, March 24, 2020
22 -----------------------------
25 * fixed conflicting symbols for CVC4 1.7
27 * fixed infinite loops in strategies
29 Version 1.3.0, March 17, 2020
30 -----------------------------
33 * `pqueue.Pqueue` is now modeled using sequences instead of lists :x:
34 * `queue.Queue` is now modeled using sequences instead of lists :x:
35 * the `set` library has been revamped :x:
36 - in `set.Fset`, type `set` becomes `fset`; `choose` becomes `pick`
37 - module `appset.Appset` becomes `set.SetApp`;
38 `impset.Impset` becomes `set.SetImp`
39 - in `set.SetApp` and `set.SetImp`, type `t` becomes `set`;
40 field `contents` becomes `to_fset`; call to `empty` becomes `empty ()`
41 * new library `fmap` for finite maps
42 - `Fmap`: polymorphic, logic finite maps to be used in logic
43 - `MapApp`, `MapAppInt`, `MapImp`, `MapImpInt`: monomorphic finite maps to
45 * no more libraries `appmap` and `impmap` :x:
46 * no more library `sum.Sum` (subsumed by `int.Sum`) :x:
47 * new library `string` for character strings
48 - `String`: basic string operations
49 - `OCaml`: additional operations dedicated to extraction to OCaml
50 - `RegExpr`: regular expressions
53 * the type `string` is a new built-in type; string literals can be
54 given between double-quotes; see manual, Section 7.1 :x:
55 * it is now possible to give a name to preconditions and assertions;
56 `requires Foo { a = 3 }` sets the attribute `[@hyp_name:Foo]`, which tries
57 to give the name `Foo` to the corresponding hypothesis after introduction
58 * identifiers used for specification (resp. definition) of a function `foo`
59 have been renamed from `foo_spec` (resp. `foo_def`) to `foo'spec` (resp. `foo'def`) :x:
60 * identifiers used for goals `VC foo` have been renamed to `foo'vc`
61 * identifiers used for record constructor `mk foo` have been renamed to `foo'mk` :x:
62 * the `alias` clause can now be used in program functions to force the aliasing
63 of function parameters and/or named returns
66 * counterexamples given by `why3prove` are no longer printed using JSON
67 by default; pass option `--json` to restore the previous behavior
68 * new tool `why3pp` to pretty print Why3 source code (inductive definitions to LaTeX,
69 formatting of mlw files)
72 * improved Chapter 7 on the WhyML language (record types, various
73 kinds of function declarations, module cloning, etc.)
74 * improved Section 11.4 on drivers, including an automatically generated
75 dependency graph of driver files
76 * improved Section 11.5 on transformations, including transformations
80 * `Call_provers.print_prover_result` now takes an additional argument
81 `~json_model` to indicate whether counterexamples are printed using JSON :x:
82 * indices of array are now `model_value` for counterexamples :x:
83 * ITP constructor `Task` now contains the location of the goal :x:
84 * ITP constructor `Source_and_ce` has now 3 arguments instead of 2 :x:
85 * ITP constructors `File_contents` and `Source_and_ce` has a new argument for
87 * ITP constructor `File_contents` has a new boolean argument for
88 interpretation of the file in the IDE as `read_only` :x:
89 * new ITP constructor `Ident_notif_loc` :x:
90 * ITP constructor `Get_first_unproven_node` now takes a heuristic name
94 * `apply` and `rewrite` now behave better in presence of `let`;
95 hypotheses with nested let-bindings can now be applied :x:
96 * passing arguments to argument-free transformations is now forbidden
97 (previously ignored) :x:
98 * passing too many arguments to a transformation does not display a popup anymore
99 * `induction_arg_ty_lex` is now equivalent to `induction_ty_lex`
100 * `induction_arg_pr` now takes an optional argument that indicates what to
101 generalize in the induction
102 * `destruct` now destructs `not p` into `p -> false`;
103 `destruct_rec` can further destruct afterwards;
104 `destruct` can also destruct `true` and `false` :x:
105 * decision procedures used for reflection must now be declared explicitly using
106 `meta reflection val foo` :x:
107 * `remove` and `bisect` should not raise unnecessary popups anymore
109 * attribute `inline:trivial` can be put on definitions to force their
110 inlining by the transformation `inline_trivial`
113 * display of counterexamples in the Task view has been improved
114 * auto jumping to next unproved goal can now be disabled in the preferences
115 * added a "reset proofs" command in the Tools menu to remove all the proofs
117 * default proof strategies "Auto level 1" and "Auto level 2"
118 have been respectively renamed "Auto level 2" and "Auto level 3";
119 "Auto level 1" now behaves similarly to "Auto level 0" but with a longer
120 time limit; more details in the manual, Section 10.6 "Proof Strategies" :x:
121 * strategies can now be defined using `%t` (resp. `%m`) to call a prover with
122 the default timelimit (resp. memlimit)
123 * added minimal search menu
124 * a merlin-like feature to find the identifier located under the cursor has been
125 added in the Edit menu.
126 * read-only files can now be displayed and removed by right-clicking on their
128 * colors for error can now be edited in why3.conf more precisely
129 * most of the preferences can now be changed for the current session
130 * Ctrl-Down/Ctrl-Up are mapped to more straightforward moves; the former
131 movements can be triggered with Ctrl-Left/Ctrl-Right
134 * added experimental realizations for new Set theories in both Isabelle and Coq
137 * support for Alt-Ergo 2.3.1 (released Feb 19, 2020)
138 * support for Isabelle 2019 (released June 2019)
139 * support for Vampire 4.2.2 (released Dec 14, 2017)
140 * support for Coq 8.10.0 (released Oct 8, 2019)
141 * support for Coq 8.10.1 (released Oct 25, 2019)
142 * support for Coq 8.10.2 (released Oct 29, 2019)
143 * support for Coq 8.11.0 (released Jan 30, 2020)
144 * make use of built-in support for strings by Z3 (4.8.6), and CVC4 (1.7)
146 Version 1.2.1, October 28, 2019
147 -------------------------------
150 * fixed compilation with OCaml 4.09
151 * fixed compilation with Lablgtk3
154 * support for Z3 4.8.6 (released Sep 20, 2019)
155 * support for Z3 4.8.5 (released Jun 3, 2019)
156 * support for CVC4 1.7 (released Apr 9, 2019)
157 * support for Alt-Ergo 2.3.0 (released Feb 11, 2019)
158 * support for Coq 8.9.1 (released May 20, 2019)
160 Version 1.2.0, February 11, 2019
161 --------------------------------
164 * file path stored in session files are now represented in a
165 system-independent way
168 * the clause `syntax converter` has been removed; any former use should
169 be replaced by `syntax literal` and/or `syntax function` :x:
172 * a syntactic sugar called "auto-dereference" is introduced, so as
173 to avoid, on simple programs, the heavy use of `(!)` character on
174 references; see details in Section A.1 of the manual
177 * `split_vc` and `subst_all` now avoid substituting user symbols by
179 * `destruct_rec` applies `destruct` recursively on a goal
180 * `destruct` now simplifies away equalities on constructors :x:
181 * `destruct` now simplifies `if .. then .. else ..` and `match .. with ..` :x:
182 * `destruct_alg` renamed to `destruct_term`; it also has a new experimental
183 keyword `using` to name newly destructed elements :x:
186 * added a command `why3 session update` to modify sessions from the
187 command line; so far, only option `-rename-file` exists, for
189 * `why3 config --add-prover` now takes the shortcut as second
190 argument; option `--list-prover-ids` has been renamed to
191 `--list-prover-families` :x:
194 * clicking on the status of a failed proof attempt in the proof tree
195 now generates counterexamples
196 * added support for GTK3
199 * the trigger for counterexamples has been changed; read Section 5.3.7
200 of the manual for details :x:
201 * various improvements on the generated counterexamples
202 * field names now use ident names instead of smt generated ones, e.g.,
203 `int32qtint` -> `int32'int` :x:
204 * fixed parsing of bitvector values from counterexamples generated by Z3
207 * fixed extraction of functions passed as arguments
208 * fixed extraction of recursive polymorphic functions for Ocaml
209 * improved extraction of records for C
212 * `Stack.length` and `Queue.length` now return a `Peano.t`, for
213 improved extraction :x:
216 * support for Z3 4.8.1 (released Oct 16, 2018)
217 * support for Z3 4.8.3 (released Nov 20, 2018)
218 * support for Z3 4.8.4 (released Dec 20, 2018)
219 * support for Coq 8.9.0 (released Jan 17, 2019)
220 * upgraded Coq realizations for floating-point arithmetic to Flocq 3.1
221 * dropped support for Coq 8.5
223 Version 1.1.1, December 17, 2018
224 --------------------------------
227 * prevented broken extraction of `any`
228 * fixed evaluation order when extracting nested mutators
229 * fixed extraction of nested recursive polymorphic functions
230 * fixed cloning of expressions raising exceptions
232 Version 1.1.0, October 17, 2018
233 -------------------------------
236 * variants can now be inferred on some lemma functions
237 * coercions are now supported for `if` and `match` branches
238 * `interrupt` command should now properly interrupt running provers.
239 * clearer typing error messages thanks to printing qualified names
240 * fixed handling of prover upgrades, resurrected the policy
241 "duplicate" and added a policy "remove"
244 * added `Call_provers.interrupt_call` to interrupt a running prover
245 (contribution by Pierre-Yves Strub)
248 * program functions can now be marked `partial` to prevent them from
249 being used in ghost context; the annotation does not have to be
250 explicitly put on their callers
251 * `use` now accepts several module names separated by commas
252 * symbolic operators can be used in identifiers like `(+)_ident` or
254 * range types have now a default ordering to be used in `variant` clause
257 * library `ieee_float`: floating-point operations can now be used in
261 * `split_vc` behaves slightly differently :x:
264 * support for Alt-Ergo 2.1.0 (released Mar 14, 2018)
265 * support for Alt-Ergo 2.2.0 (released Apr 26, 2018)
266 * support for Coq 8.8.1 (released Jun 29, 2018)
267 * support for Coq 8.8.2 (released Sep 26, 2018)
268 * support for CVC4 1.6 (released Jun 25, 2018)
269 * support for Z3 4.7.1 (released May 23, 2018)
270 * support for Isabelle 2018 (released Aug 2018)
271 (contribution by Stefan Berghofer)
272 * dropped support for Isabelle 2016 (2017 still supported) :x:
273 * dropped support for Alt-Ergo versions < 2.0.0 :x:
275 Version 1.0.0, June 25, 2018
276 ----------------------------
279 * improved support of counter-examples
280 * attribute `[@vc:sp]` on an expression switches from traditional WP
281 to Flanagan-Saxe-like VC generation
282 * type invariants now produce logical axioms;
283 a type with an invariant must be proved to be inhabited :x:
284 * logical symbols can no longer be used in non-ghost code;
285 in particular, there is no polymorphic equality in programs any more,
286 so equality functions must be declared/defined on a per-type basis
287 (already done for type `int` in the standard library) :x:
290 * numerous changes to syntax, see documentation appendix :x:
291 * `let function`, `let predicate`, `val function`, and `val predicate`
292 introduce symbols in both logic and programs
293 * added overloading of program symbols
294 * new contract clause `alias { <term> with <term>, ... }` :x:
295 * support for parallel assignment `<term>,... <- <term>,...`
296 * support for local exceptions using `exception ... in ...`
297 * added `break`, `continue`, and `return` statements
298 * support for `exception` branches in `match` constructs
299 * support for `for` loops on range types
300 (including machine integers from the standard library)
301 * support for type coercions in logic using `meta coercion`
302 * keyword `theory` is deprecated; use `module` instead
303 * term on the left of sequence `;` must be of type `unit` :x:
304 * cloned axioms turn into lemmas; use `with axiom my_axiom`
305 or `with axiom .` to keep them as axioms :x:
306 * `any <type> <spec>` produces an existential precondition;
307 use `val f : <type> <spec> in ...` (unsafe!) instead :x:
308 * `use T` and `clone T` now import the generated namespace T;
309 use `use T as T` and `clone T as T` to prevent this :x:
310 * `pure { <term> }` produces a ghost value in program code
311 * `a <-> b <-> c` is now parsed as `(a <-> b) /\ (b <-> c)`;
312 `a <-> b -> c` is now rejected :x:
315 * machine integers in `mach.int.*` are now range types :x:
316 * added a minimal memory model for the C language in `mach.c`
317 * new modules `witness.Witness` and `witness.Nat`
320 * improved extraction to OCaml
321 * added partial extraction to C using the memory model of `mach.c`
322 * added extraction to CakeML (using `why3 extract -D cakeml ...`)
325 * transformations can now have arguments
326 * added transformations `assert`, `apply`, `cut`, `rewrite`, etc., Ã la Coq
327 * added transformations for reflection-based proofs
330 * support for `use` in theory drivers
333 * replaced left toolbar by a contextual menu
334 * source is now editable
335 * premises are no longer implicitly introduced
336 * added textual interface to call transformations and provers
339 * deprecated `.why` file extension; use `.mlw` instead
342 * removed the `why3` Coq tactic :x:
343 * dropped support for Coq 8.4 :x:
346 * moved the opam base package to `why3`; added `why3-ide` and `why3-coq`
348 Version 0.88.3, January 11, 2018
349 --------------------------------
352 * support for Alt-Ergo 2.0.0 (released Nov 14, 2017)
353 * support for Coq 8.7.1 (released Dec 16, 2017)
354 * support for Z3 4.6.0 (released Dec 18, 2017)
357 * fixed soundness of theory `int.Exponentiation` when multiplication is not
361 * fixed support for `--enable_relocation=yes`
362 * fixed support for Windows
364 Version 0.88.2, December 7, 2017
365 --------------------------------
368 * `why3 session html`: improved compliance of generated files
369 * `why3 doc`: fixed missing anchors for operator definitions
370 * improved build process when `coqtop.byte` is missing
372 Version 0.88.1, November 6, 2017
373 --------------------------------
376 * exported function `Call_provers.get_new_results`
379 * improved support for Isabelle 2017
380 * fixed support for Coq 8.7 (released Oct 17, 2017)
383 * fixed compilation for OCaml 4.06
384 * improved support for nullary `val` declarations with regions
386 Version 0.88.0, October 6, 2017
387 -------------------------------
390 * added two new forms of type declarations: integer range types and
391 floating-point types. To denote constants in such types, integer
392 constants and real constants can be cast to such types. This
393 support is exploited in drivers for provers that support bitvector
394 theories (CVC4, Z3) and floating-point theory (Z3).
395 More details in the manual, section 7.2.4 "Theories".
396 * a quote character `'` inside an identifier must either be at the
397 end, or be followed by either a digit, the underscore character
398 `_` or another quote. Identifiers with a quote followed by a
399 letter are reserved. :x:
402 * new theory `ieee_float` formalizing floating-point arithmetic,
403 compliant to IEEE-754, mapped to SMT-LIB FP theory.
406 * proof strategies: `why3 config` now generates default proof strategies
407 using the installed provers. These are available under name "Auto
408 level 0", "Auto level 1" and "Auto level 2" in `why3 ide`.
409 More details in the manual, section 10.6 "Proof Strategies".
410 * counterexamples: better support for array values, support for
411 floating-point values, support for Z3 in addition to CVC4.
412 More details in the manual, section 6.3.5 "Displaying Counterexamples".
415 * new input format for a small subset of Python
418 * support for Isabelle 2017 (released Oct 2017)
419 * dropped support for Isabelle 2016 (2016-1 still supported) :x:
420 * support for Coq 8.6.1 (released Jul 25, 2017)
421 * tentative support for Coq 8.7
422 * dropped tactic support for Coq 8.4 (proofs still supported) :x:
423 * support for CVC4 1.5 (released Jul 10, 2017)
424 * support for E 2.0 (released Jul 4, 2017)
425 * support for E 1.9.1 (release Aug 31, 2016)
427 Version 0.87.3, January 12, 2017
428 --------------------------------
431 * fixed OCaml extraction with respect to ghost parameters
435 * support for Alt-Ergo 1.30 (released Nov 21, 2016)
436 * support for Coq 8.6 (released Dec 8, 2016)
437 * support for Gappa 1.3 (released Jul 20, 2016)
438 * dropped support for Isabelle 2015 :x:
439 * support for Isabelle 2016-1 (released Dec 2016)
440 * support for Z3 4.5.0 (released Nov 8, 2016)
442 Version 0.87.2, September 1, 2016
443 ---------------------------------
446 * improved well-formedness of extracted OCaml code
449 Version 0.87.1, May 27, 2016
450 ----------------------------
455 Version 0.87.0, March 15, 2016
456 ------------------------------
459 * added two new logical connectives `by` and `so` as keywords :x:
462 * added a command-line option `--extra-expl-prefix` to specify
463 additional possible prefixes for VC explanations. Available for
464 `why3` commands `prove` and `ide`.
465 * removed `jstree` style from the `session` command :x:
468 * all split transformations respect the `"stop_split"` label now.
469 `split_*_wp` is a synonym for `split_*_right` :x:
470 * the `split_*_right` transformations split the left-hand side subformulas
471 when they carry the `"case_split"` label :x:
472 * `split_intro` is now the composition of `split_goal_right` and
473 `introduce_premises` :x:
476 * improved bitvector theories :x:
479 * renamed functions in module `Split_goal` :x:
480 * `split_intro` moved to Introduction :x:
483 * if a task has no polymorphic object (except for the special
484 cases of equality and maps), then the translation to SMT-LIB
488 * dropped support for Alt-Ergo versions older than 0.95.2 :x:
489 * support for Alt-Ergo 1.01 (released Feb 16, 2016) and
490 non-free versions 1.10 and 1.20
491 * support for Coq 8.4pl6 (released Apr 9, 2015)
492 * support for Coq 8.5 (released Jan 21, 2016)
493 * support for Gappa 1.2.0 (released May 19, 2015)
494 * dropped support for Isabelle 2014 :x:
495 * support for Isabelle 2015 (released May 25, 2015) and
496 Isabelle 2016 (released Feb 17, 2016)
497 * support for Z3 4.4.0 (released Apr 29, 2015) and
498 4.4.1 (released Oct 5, 2015)
499 * support for Zenon 0.8.0 (released Oct 21, 2014)
500 * support for Zenon_modulo 0.4.1 (released Jul 2, 2015)
503 * non-free files have been removed: `boomy` icon set,
504 javascript helpers for `why3 session html --style jstree`
506 Version 0.86.3, February 8, 2016
507 --------------------------------
513 * fix compilation issues with Coq 8.5
514 (the tactic for 8.5 now behaves like `idtac` on successfully proved goals) :x:
516 Version 0.86.2, October 13, 2015
517 --------------------------------
522 Version 0.86.1, May 22, 2015
523 ----------------------------
526 * improved task highlighting for negated premises
527 (contributed by Mikhail Mandrykin, AstraVer project)
530 * support for Gappa 1.2 (released May 19, 2015)
533 * `why3doc`: garbled output
535 Version 0.86, May 11, 2015
536 --------------------------
539 * steps limit for reliable replay of proofs, available for Alt-Ergo
543 * new transformations `induction_pr` and `inversion_pr` to reason with
547 * renamed theory `int.NumOfParam` into `int.NumOf`; the predicate `numof`
548 now takes some higher-order predicate as argument (no more need
549 for cloning). Similar change in modules `array.NumOf`... :x:
550 * improved theory `real.PowerReal` :x:
551 * new theory: sequences
552 * new theories for bitvectors, mapped to BV theories of SMT solvers
556 * support for Coq 8.4pl5 (released Nov 7, 2014)
557 * support for Z3 4.3.2 (released Oct 25, 2014)
558 * support for MetiTarski 2.4 (released Oct 21, 2014)
559 * support for Alt-Ergo 0.99.1 (released Dec 30, 2014)
560 * support for Alt-Ergo 1.00.prv (released Jan 29, 2015)
561 * support for veriT 201410 (released Nov 2014)
562 * support for Psyche (experimental,
563 http://www.lix.polytechnique.fr/~lengrand/Psyche/)
564 * preliminary support for upcoming CVC4 1.5 (steps feature)
567 * config file not automatically saved anymore at exit. Configuration
568 is saved on disk for future sessions if, and only if, preferences
569 window is exited by hitting the "Save&Close" button
570 * right part of main window organized in tabs
571 * better explanations and task highlighting
572 (contributed by Mikhail Mandrykin, AstraVer project)
575 * bug in interpreter in presence of nested mutable fields
576 * IDE: proofs in progress should never be "cleaned"
577 * IDE: display warnings after reload
579 Version 0.85, September 17, 2014
580 --------------------------------
583 * fix a soundness bug in the detection of aliases when calling a
584 WhyML function: some alias could have been forgotten when a type
585 variable was substituted with a mutable type :x:
588 * use the full path of identifiers when the user introduces namespaces
592 * fix a soundness bug in `compute_in_goal` regarding the handling of
593 logical implication. :x:
594 * several improvements to `compute_in_goal`:
595 - left-hand side of rewrite rules can be any symbols, not only
596 non-interpreted ones.
597 - perform beta-reduction when possible
598 - the maximal number of reduction steps can be increased using meta
600 - the transformation is documented in details in the manual
601 * new transformation `compute_specified`:
602 less aggressive variant of `compute_in_goal`.
603 Unfolding of definitions is controlled using meta `rewrite_def`
604 * fixed a bug in `eliminate_if` when applied on inductive definitions
607 * fixed wrong warning when detecting Isabelle2014
609 Version 0.84, September 1, 2014
610 -------------------------------
613 * the file generated by `why3 session html f.mlw` is now
614 `f/why3session.html` and not `f/f.html` :x:
615 * the default behavior of `why3` has been moved to the `prove` subcommand :x:
616 * options `--exec`, `--extract`, and `--realize`, have been moved to
617 subcommands: `execute`, `extract`, and `realize` :x:
618 * `why3replayer` has been moved to the `replay` subcommand :x:
619 * other tools have been moved to `why3` subcommands too: `config`, `doc`, `ide`,
620 `session`, `wc`. For local usage, the old commands are still available. :x:
623 * session files are split in two parts: `why3session.xml` and
624 `why3shapes`. The latter file contains the checksums and the shapes
625 for the goals. That second file is not strictly needed for
626 replaying a proof session, it is only useful when input programs
627 are modified, to track obsolete goals. If Why3 is compiled with
628 compression support (provided by the `ocamlzip` library) then files for
629 shapes are compressed into `why3shapes.gz`.
632 * renamed `array.ArraySorted` into `array.IntArraySorted`;
633 `array.ArraySorted` is now generic, with type and order relation parameters :x:
634 * reduced amount of `use export` in the standard library: theories
635 now only export the symbols they define. Users may need to insert more
636 `use import` in their theories (typically `int.Int`, `option.Option`,
637 `list.List`, etc.). :x:
640 * fixed Coq printer (former Coq proofs may have to be updated, by removing
641 non-emptiness constraints from polymorphic type applications) :x:
642 * support for Coq8.4pl4
643 * support for Isabelle2014
644 * support for CVC4 1.4
645 * updated support for TPTP TFA syntax (used by provers Beagle and Princess)
648 * new transformation `compute_in_goal` that simplifies the goal, by
649 computation, as much as possible
651 Version 0.83, March 14, 2014
652 ----------------------------
655 * extra semicolons are now allowed at end of blocks
656 * new clause `diverges`; loops and recursive calls not annotated
657 with variants will generate a warning, unless the`"diverges`
659 * clauses `reads` and `writes` now accept an empty set
660 * modified syntax for `abstract`: `abstract <spec> <expr> end` :x:
661 * types in quantifiers are now optional
662 * formulas and Boolean terms can be used interchangeably
665 * removed inconsistency in libraries `map.MapPermut` and `array.ArrayPermut`
666 (names, definitions, and meaning of symbols `permut...` have been modified) :x:
669 * new version of prover: Coq 8.4pl3
670 * new version of prover: Gappa 1.1.0
671 * new version of prover: E prover 1.8
672 * dropped support for Coq 8.3 :x:
673 * improved support for Isabelle2013-2
674 * fixed Coq printer (former Coq proofs may have to be updated, with
675 extra qualification of imported symbols) :x:
678 * new option `--exec` to interpret WhyML programs; see doc chapter 8
679 * new option `--extract` to compile WhyML programs to OCaml;
680 see doc chapter 8 and `modules/mach/{int,array}.mlw`
681 * `why3replayer` renamed option `-obsolete-only` to `--obsolete-only`,
682 `-smoke-detector` to `--smoke-detector`, `-force` to `--force` :x:
683 * `why3replayer` now fails replaying if new goals are added :x:
686 * new type-inferring API for logical terms and program expressions
689 * fixed compilation bug with lablgtk 2.18
691 Version 0.82, December 12, 2013
692 -------------------------------
696 * polymorphic recursion permitted
700 * more examples of use in `examples/use_api/`
703 * `why3session csv` can create graph with option `--gnuplot [png|svg|pdf|qt]`
704 * shape algorithm modified (see VSTTE'13 paper) but is
705 backward compatible thanks to `shape_version` numbers in
706 `why3session.xml` files
707 * options name and default of `why3session csv` changed :x:
710 * emacs: `why.el` renamed to `why3.el` :x:
711 * GTK sourceview: `why.lang` renamed to `why3.lang` :x:
712 * `Loc.try[1-7]` functions now take location as an optional parameter :x:
715 * new prover: Metitarski (2.2, contribution by Piotr Trojanek)
716 * new prover: Metis (2.3)
717 * new prover: Beagle (0.4.1)
718 * new prover: Princess (2013-05-13)
719 * new prover: Yices2 (2.0.4)
720 * new prover: Isabelle (2013-2, contribution by Stefan Berghofer)
721 * new version of prover: Alt-Ergo 0.95.2
722 * new version of prover: CVC4 1.1 & 1.2 & 1.3
723 * new version of prover: Coq 8.4pl2
724 * new version of prover: Gappa 1.0.0
725 * new version of prover: SPASS 3.8ds
726 * new version of prover: veriT (201310)
729 * remove extra leading zeros in decimal literals when a prover don't like them
730 * PVS output: types are always non-empty
731 * PVS: fixed configuration and installation process
732 * Coq tactic: now loads dynamic plug-ins
733 * bug #15493: correct Coq output for polymorphic algebraic data types
734 * wish #15053: Remove proof time from "Goals proved by only one prover" section
735 of `why3session info --stats` :x:
736 * bug #13736: `why3ml` was slow when there were many inclusions
737 * bug #16488: decimals in TPTP syntax
738 * bug #16454: do not send arithmetic triggers anymore to alt-Ergo
739 * syntax highlighting bugs should be fixed by removing the old language
740 file `alt-ergo.lang` from Alt-ergo distribution
742 Version 0.81, March 25, 2013
743 ----------------------------
746 * experimental support for SPASS >= 3.8 (with types)
747 * support for Z3 4.3.*
748 * fixed Coq 8.4 support for theory `real.Trigonometry`
750 * support for mathematica
751 * support for MathSAT5
754 * accept type expressions in clone substitutions
757 * support for relation chains (e.g., `e1 = e2 < e3`)
758 * every exception raised in a function must be listed
759 in as `raises { ... }` clause. A postcondition may be omitted
760 and equals to `true` by default. :x:
761 * if a function definition contains a `writes { ... }`
762 clause, then every write effect must be listed. If a function
763 definition contains a `reads { ... }` clause, then every read
764 _and_ write effect must be listed. :x:
767 * syntax rules, metas, and preludes are inherited
768 through cloning. Keyword `cloned` becomes unnecessary and
769 is not accepted anymore. :x:
772 Version 0.80, October 31, 2012
773 ------------------------------
776 * modified syntax for mlw programs; a summary of changes is
777 given in Appendix A of the manual :x:
778 * support for type invariants and ghost code
781 * Ocaml interfaces for constructing program modules
784 * experimental support for induction on integers and on algebraic types
787 * new system of warnings, that includes:
788 - form `exists x, P -> Q`, likely an error
789 - unused bound logic variables in `forall`, `exists`, and `let`
792 * replayer: new option `-q`, for running quietly
793 * improved output of `why3session latex`; LaTeX macros have
795 * modifiers in `--extra-config` are now called `[prover_modifier]`
796 instead of just `[prover]` :x:
799 * support for Coq 8.4
800 * dropped support for Coq 8.2 :x:
801 * support for forthcoming PVS 6.0, including realizations
802 * support for iProver and Zenon
803 * new output scheme for Coq using type classes, to ensures
807 * theory realizations now use meta `realized_theory` instead
810 Version 0.73, July 19, 2012
811 ---------------------------
814 * co-inductive predicates
817 * new construct `abstract e { q }` that matches the structure of the goal
820 * small change in the format. Why3 is still able to
821 read session files in the old format.
824 * fixed a consistency issue with `set.Fset` theory
827 * option `-obsolete-only` for `why3replayer`
828 * new option `-e` for `why3session latex` to specify when to
829 split tables in parts
830 * no more executable `why3ml` (`why3` now handles WhyML files) :x:
834 * workaround for a bug about modulo operator in Alt-Ergo 0.94
835 * quotes in identifiers remain quotes in Coq
836 * Coq default tactic is now `intros ...` with a pattern
839 * "Clean" was cleaning too much
842 * completed support for the "Out Of Memory" prover result
844 Version 0.72, May 11, 2012
845 --------------------------
848 * Coq: new tactic `why3` to call external provers as oracles
849 * Coq: new feature: theory realizations (see manual, chapter 9)
852 * new tool `why3session` (see manual, section 6.7)
853 * new tool `why3doc` (see manual, section 6.8)
854 * support for multiple versions of the same prover (see manual, section 5.5)
857 * new features, including prover upgrade, alternate editors
860 * complete support for limiting provers' memory usage
861 * improved support on Microsoft Windows
862 * new parser for TPTP files with support for the newest
863 TFA1 format (TPTP with polymorphic types and arithmetic)
873 * new syntax `constant x:ty` and `constant x:ty = e` to
874 introduce constants, as an alternative to `function`
877 * `Dtype` declaration kind is split into two: `Dtype` for
878 declarations of a single abstract type or type alias, and
879 `Ddata` for a list of (mutually recursive) algebraic types.
880 Similarly, `Dlogic` declaration kind is split into `Dparam` for
881 a single abstract function/predicate symbol and `Dlogic` for
882 a list of (mutually recursive) defined symbols.
884 Version 0.71, October 13, 2011
885 ------------------------------
888 * a lot of new program examples in directory examples/programs
891 * `why3replayer`: new option `-latex` to output a proof session in LaTeX format
894 * significant improvement of the efficiency of the WP calculus
895 * fixed labels and source locations in WPs
898 * better coloring and source positioning including from front-ends
899 such as Krakatoa and Jessie plugin of Frama-C
902 * during reload, new method for pairing old and new subgoals
903 based on goal shapes, stored in database.
904 * prover versions are stored in database. A proof is
905 marked obsolete if it was made by a prover with another version
908 Version 0.70, July 6, 2011
909 --------------------------
912 * language and VC generator
916 - introduced with syntax `type t = {| a:int; b:bool |}`
917 actually syntactic sugar for `type t = 'mk t' (a:int) (b:bool)`
918 i.e. an algebraic with one constructor and projection functions
919 - a record expression is written `{| a = 1; b = True |}`
920 - access to field `a` with syntax `x.a`
921 - update with syntax `{| x with b = False |}`
923 * new syntax for conjunction `/\` and disjunction `\/`
924 (`and` and `or` do not exist anymore) :x:
925 * `logic` is not a keyword anymore, use `function` and `predicate` :x:
928 * new tool `why3replayer`: batch replay of a Why3 session created in IDE
931 * Alt-Ergo, Z3, CVC3, Yices: support for built-in theory of arrays
934 * interactive detection of provers disabled because incompatible
935 with session. Detection must be done with `why3config --detect-provers`
936 * tool "Replay" works
937 * tool "Reload" reloads the file from disk. No need to exit IDE anymore
938 * does not use `Threads` anymore, thanks to `Call_provers.query_call`
939 * displays explanations using labels of the form `"expl:..."`
940 * dropped dependency on `Sqlite3`
943 * functions to create an environment are now exported from `Env` :x:
944 * calls to prover can now be asynchronous.
945 `Driver.prove_task` now returns some intermediate value
946 (of type `prover_call`), which can be queried in two ways:
947 - blocking way with `Call_provers.wait_on_call`
948 - non-blocking way with `Call_provers.query_call`
950 So old code performing `prove_task t () ()` should be translated to
951 `wait_on_call (prove_task t ()) ()`. :x:
954 * IDE: bug 12244 resolved by using `Task.task_equal`
955 * Alt-Ergo: no triggers for `exists` quantifier
956 * Coq: polymorphic inductive predicates
957 * Coq: fixed bug 12934: type def with several type params
959 Version 0.64, February 16, 2011
960 -------------------------------
963 * `/\` renamed into `&&` and `\/` into `||` :x:
964 * algebraic types: must be well-founded, non-positive constructors
965 are forbidden, recursive functions and predicates must
966 structurally terminate
967 * accept lowercase names for axioms, lemmas, goals, and cases in
971 * `split-goal` does not split under disjunction anymore
974 * `why.conf` is no more looked for in the current directory; use `-C` or
976 * when `why.conf` is changed, a backup copy is made in `why.conf.bak`
977 * `why.conf` now contains a magic number; configuration must be
978 rebuilt with `why3config` if the magic number has changed
979 * `why3config`: `--autodetect-provers` renamed to `--detect-provers`,
980 `--autodetect-plugins` renamed to `--detect-plugins`;
981 new option `--detect` to perform both detections
982 * `why3config`: `--conf_file` is replaced by `-C` and `--config`
985 * TPTP: encoding by explicit polymorphism is not anymore the
986 default encoding for TPTP provers. It is now forbidden to use this
987 encoding in presence of finite types.
990 * source file names are stored in database with paths relative
991 to the database, so that databases are now easier to move from a
992 machine to another (e.g when they are stored in source control
996 * better Gappa output: support for `sqrt`, for negative constants
999 * `configure`: fixed `--enable-local`
1000 * `configure`: if possible, use `ocamlfind` to find `lablgtk2` and `sqlite3`
1001 * labels in terms and formulas are not printed by default
1003 Version 0.63, December 21, 2010
1004 -------------------------------
1006 * first public release. See release notes in manual