diff --git a/nix/default.nix b/nix/default.nix index bf61a1b3287b163d90aa7329e1d59c082d89c136..8ce82489000bf017f7eb68fcfe10648b9cd72e59 100644 --- a/nix/default.nix +++ b/nix/default.nix @@ -7,10 +7,8 @@ let mk_buildInputs = { opamPackages ? [], nixPackages ? [] } : "ppx_deriving" "ppx_deriving_yojson" { name = "coq"; constraint = "=8.12.0"; } { name = "alt-ergo" ; constraint = "=2.2.0"; } - { name = "why3" ; constraint = "=1.3.3"; } - { name = "why3-coq" ; constraint = "=1.3.3"; } - { name = "menhir"; constraint = "=20200624"; } - { name = "dune"; constraint = "=2.7.1"; } + { name = "why3" ; constraint = "=1.4.0"; } + { name = "why3-coq" ; constraint = "=1.4.0"; } ] ++ opamPackages ); ocamlAttr = ocaml_version; @@ -186,7 +184,7 @@ pkgs.lib.makeExtensible make create_share_link mkdir home HOME=$(pwd)/home - why3 config --detect + why3 config detect make src/plugins/wp/tests/test_config_qualif export FRAMAC_WP_CACHE=replay export FRAMAC_WP_CACHEDIR=${plugins.wp-cache.src} @@ -215,7 +213,7 @@ pkgs.lib.makeExtensible make create_share_link mkdir home HOME=$(pwd)/home - why3 config --detect + why3 config detect make src/plugins/aorai/tests/ptests_config make PTESTS_OPTS="-config prove -error-code" Aorai_TESTS ''; @@ -310,7 +308,7 @@ pkgs.lib.makeExtensible # Setup Why3 mkdir home HOME=$(pwd)/home - why3 config --detect + why3 config detect # Setup WP related export CAVEAT_IMPORTER_NIX_MODE=yes export FRAMAC_WP_CACHE=replay diff --git a/nix/frama-ci.nix b/nix/frama-ci.nix index 0dc2337bb51f28e5e8d99196fc542f26a699e745..65141e9684de9637e600df87397aeb97366afdbf 100644 --- a/nix/frama-ci.nix +++ b/nix/frama-ci.nix @@ -5,8 +5,8 @@ let src = builtins.fetchGit { "url" = "https://bobot:${password}@git.frama-c.com/frama-c/Frama-CI.git"; "name" = "Frama-CI"; - "rev" = "22961f3356c3eb1279d817772b4f19c352d055a7"; - "ref" = "master"; + "rev" = "f86e807d6f440ac4479b78f8419dfd817803419d"; + "ref" = "feature/wp/versions-bump"; }; in { diff --git a/opam/opam b/opam/opam index 2ce4efbb5ddb8ec49da811f7047d633a86568380..b00e5233da31a96c84114079e18496dc9182001e 100644 --- a/opam/opam +++ b/opam/opam @@ -117,7 +117,7 @@ depends: [ "ocaml" { >= "4.08.1" } "ocamlfind" # needed beyond build stage, used by -load-module "ocamlgraph" { >= "1.8.8" } - "why3" { >= "1.3.3" & < "1.4~" } + "why3" { >= "1.4.0" & < "1.5~" } "yojson" "zarith" ] @@ -142,5 +142,5 @@ messages: [ ] post-messages: [ - "Why3 provers setup: rm -f ~/.why3.conf ; why3 config --detect" + "Why3 provers setup: rm -f ~/.why3.conf ; why3 config detect" ] diff --git a/src/plugins/wp/ProverWhy3.ml b/src/plugins/wp/ProverWhy3.ml index adb7fd3e831b90bc20e8cdb0d4acdd56eb84ac60..96090a60d09449d9f4874ff10b7f5b29f9d13540 100644 --- a/src/plugins/wp/ProverWhy3.ml +++ b/src/plugins/wp/ProverWhy3.ml @@ -1122,7 +1122,7 @@ let prover_task env prover task = let config = Why3Provers.config () in let prover_config = Why3.Whyconf.get_prover_config config prover in let drv = Why3.Whyconf.load_driver (Why3.Whyconf.get_main config) - env prover_config.driver prover_config.extra_drivers in + env prover_config in let remove_for_prover = if prover.prover_name = "Alt-Ergo" then Filter_axioms.remove_for_altergo @@ -1204,7 +1204,7 @@ let ping_prover_call p = Wp_parameters.debug ~dkey "@[@[Why3 result for %a:@] @[%a@] and @[%a@]@." Why3.Whyconf.print_prover p.prover - (Why3.Call_provers.print_prover_result ~json_model:false) pr + (Why3.Call_provers.print_prover_result ~json:false) pr VCS.pp_result r; Task.Return (Task.Result r) diff --git a/src/plugins/wp/Why3Provers.ml b/src/plugins/wp/Why3Provers.ml index 8c7ffc09a9b9c47a6ff053e526c4846603782ca9..190b02c4d8ee09511a1b55f6d490a3a0a25b2781 100644 --- a/src/plugins/wp/Why3Provers.ml +++ b/src/plugins/wp/Why3Provers.ml @@ -26,10 +26,7 @@ let cfg = lazy begin - try - let config = Why3.Whyconf.read_config None in - let config = Why3.Whyconf.load_default_config_if_needed config in - config + try Why3.Whyconf.init_config None with exn -> Wp_parameters.abort "%a" Why3.Exn_printer.exn_printer exn end @@ -46,10 +43,10 @@ let configure = begin let args = Array.of_list ("why3"::Wp_parameters.Why3Flags.get ()) in begin try - Arg.parse_argv ~current:(ref 0) args + Why3.Getopt.parse_all (Why3.Debug.Args.[desc_debug;desc_debug_all;desc_debug_list]) (fun opt -> raise (Arg.Bad ("unknown option: " ^ opt))) - "Why3 options" + args with Arg.Bad s | Arg.Help s -> Wp_parameters.abort "%s" s end; ignore (Why3.Debug.Args.option_list ()); diff --git a/src/plugins/wp/configure.ac b/src/plugins/wp/configure.ac index 90dcf3ec7df136174aa18560a6bbaaf099839616..7a16150db15ae19ab1228a7cd66b4b8919e262b4 100644 --- a/src/plugins/wp/configure.ac +++ b/src/plugins/wp/configure.ac @@ -63,15 +63,15 @@ case $WHY3VERSION in AC_MSG_RESULT([not found!]) plugin_disable(wp,[why3 not found]) ;; - 0.* | 1.[[012]].* | 1.3.0 | 1.3.1 | 1.3.2) - AC_MSG_RESULT([found $WHY3VERSION: requires 1.3.3+]) + 0.* | 1.[[0123]].*) + AC_MSG_RESULT([found $WHY3VERSION: requires 1.4.0+]) plugin_disable(wp,[non-supported why3 $WHY3VERSION]) ;; - 1.3.*) + 1.4.*) AC_MSG_RESULT([found $WHY3VERSION: ok]) ;; *) - AC_MSG_RESULT([found $WHY3VERSION: might work (should be 1.3.3+)]) + AC_MSG_RESULT([found $WHY3VERSION: might work (should be 1.4.0+)]) ;; esac fi diff --git a/src/plugins/wp/doc/manual/wp_intro.tex b/src/plugins/wp/doc/manual/wp_intro.tex index 03468d5a7b3d0d04a535f8561b616f213b7c5fc7..0daf729a37f81929f86afc2df5bf8fa3d21ed2a3 100644 --- a/src/plugins/wp/doc/manual/wp_intro.tex +++ b/src/plugins/wp/doc/manual/wp_intro.tex @@ -59,6 +59,14 @@ order to fulfill proof obligations. An easy choice is to install the \textsc{inria} and now by \textsc{OcamlPro}\footnote{\textsf{Alt-Ergo}: \url{https://alt-ergo.ocamlpro.com/}}. When using the \textsf{Opam} package manager, these tools are automatically installed with \textsf{Frama-C}. + +When updating or installing \textsf{Why-3}, the following command should be +run to detect available provers: + +\begin{lstlisting}[basicstyle=\ttfamily] +rm -f ~/.why3.conf ; why3 config detect +\end{lstlisting} + See the documentation of \textsf{Why-3} to install other provers. @@ -170,10 +178,10 @@ weakest precondition $W$; we can then conclude that $P$ precondition of $f$ always entails its postcondition $Q$. This proof can be summarized by the following diagram: -$$ +$$ \frac% {\quad(P \Longrightarrow W) \quad\quad \{W\}\,f\,\{Q\} \quad}% -{\{P\}\,f\,\{Q\}} +{\{P\}\,f\,\{Q\}} $$ This is the main idea of how to prove a property by weakest @@ -247,7 +255,7 @@ plug-in, which makes \textsf{WP} complementary to \textsf{Jessie}. \item[\texttt{Hoare} model.] A very efficient model that generates concise proof obligations. It simply maps each \textsf{C} variable to one pure logical variable.\par - + However, the heap cannot be represented in this model, and expressions such as \texttt{*p} cannot be translated at all. You can still represent pointer values, but you cannot read or write @@ -262,7 +270,7 @@ plug-in, which makes \textsf{WP} complementary to \textsf{Jessie}. In order to generate reasonable proof obligations, the values stored in the global array are not the machine ones, but the logical ones. Hence, all \textsf{C} integer types are represented by - mathematical integers and each pointer type to a given type is represented + mathematical integers and each pointer type to a given type is represented by a specific logical abstract datatype.\par A consequence of having separated arrays is that heterogeneous casts @@ -271,7 +279,7 @@ plug-in, which makes \textsf{WP} complementary to \textsf{Jessie}. pointer to \texttt{char}, and then access the internal representation of the original \texttt{int} value into memory. - However, variants of the \texttt{Typed} model enable limited forms of casts. + However, variants of the \texttt{Typed} model enable limited forms of casts. See chapter~\ref{wp-models} for details. \item[\texttt{Bytes} model. (Not Implemented Yet).] This is a diff --git a/src/plugins/wp/tests/why3/oracle_qualif/spec_memory.res.oracle b/src/plugins/wp/tests/why3/oracle_qualif/spec_memory.res.oracle index 84dd9791cd3af005144c2029d1af4995b496b25b..c4a9e9694ac7bc02afa400d170568b7cfd1db643 100644 --- a/src/plugins/wp/tests/why3/oracle_qualif/spec_memory.res.oracle +++ b/src/plugins/wp/tests/why3/oracle_qualif/spec_memory.res.oracle @@ -1,15 +1,60 @@ -tests/why3/spec_memory.why Spec_memory check_valid_rd: Valid -tests/why3/spec_memory.why Spec_memory check_valid: Valid -tests/why3/spec_memory.why Spec_memory invalid_spec: Valid -tests/why3/spec_memory.why Spec_memory invalid_null_spec: Valid -tests/why3/spec_memory.why Spec_memory invalid_null: Valid -tests/why3/spec_memory.why Spec_memory invalid_empty: Valid -tests/why3/spec_memory.why Spec_memory valid_rd_null: Valid -tests/why3/spec_memory.why Spec_memory valid_rw_null: Valid -tests/why3/spec_memory.why Spec_memory valid_obj_null: Valid -tests/why3/spec_memory.why Spec_memory INC_P: Valid -tests/why3/spec_memory.why Spec_memory INC_A: Valid -tests/why3/spec_memory.why Spec_memory INC_1: Valid -tests/why3/spec_memory.why Spec_memory INC_2: Valid -tests/why3/spec_memory.why Spec_memory INC_3: Valid -tests/why3/spec_memory.why Spec_memory INC_4: Valid +File "tests/why3/spec_memory.why", line 24, characters 4-56: +Verification condition check_valid_rd. +Prover result is: Valid. + +File "tests/why3/spec_memory.why", line 27, characters 4-56: +Verification condition check_valid. +Prover result is: Valid. + +File "tests/why3/spec_memory.why", line 30, characters 4-62: +Verification condition invalid_spec. +Prover result is: Valid. + +File "tests/why3/spec_memory.why", line 34, characters 4-76: +Verification condition invalid_null_spec. +Prover result is: Valid. + +File "tests/why3/spec_memory.why", line 38, characters 4-51: +Verification condition invalid_null. +Prover result is: Valid. + +File "tests/why3/spec_memory.why", line 42, characters 4-79: +Verification condition invalid_empty. +Prover result is: Valid. + +File "tests/why3/spec_memory.why", line 46, characters 4-59: +Verification condition valid_rd_null. +Prover result is: Valid. + +File "tests/why3/spec_memory.why", line 49, characters 4-59: +Verification condition valid_rw_null. +Prover result is: Valid. + +File "tests/why3/spec_memory.why", line 52, characters 4-34: +Verification condition valid_obj_null. +Prover result is: Valid. + +File "tests/why3/spec_memory.why", line 56, characters 4-77: +Verification condition INC_P. +Prover result is: Valid. + +File "tests/why3/spec_memory.why", line 60, characters 4-169: +Verification condition INC_A. +Prover result is: Valid. + +File "tests/why3/spec_memory.why", line 67, characters 4-63: +Verification condition INC_1. +Prover result is: Valid. + +File "tests/why3/spec_memory.why", line 71, characters 4-64: +Verification condition INC_2. +Prover result is: Valid. + +File "tests/why3/spec_memory.why", line 75, characters 4-161: +Verification condition INC_3. +Prover result is: Valid. + +File "tests/why3/spec_memory.why", line 82, characters 4-178: +Verification condition INC_4. +Prover result is: Valid. + diff --git a/src/plugins/wp/tests/wp_plugin/oracle_qualif/config.res.oracle b/src/plugins/wp/tests/wp_plugin/oracle_qualif/config.res.oracle index bb756593da2a38fa0f139b26a820aac8f23aa66f..d1903f4234f1308657d5768f5132525318f1bb6d 100644 --- a/src/plugins/wp/tests/wp_plugin/oracle_qualif/config.res.oracle +++ b/src/plugins/wp/tests/wp_plugin/oracle_qualif/config.res.oracle @@ -2,6 +2,6 @@ WP Requirements for Qualif Tests (3) ---------------------------------------------------------- 1. The Alt-Ergo theorem prover, version 2.2.0 -2. The Why3 platform, version 1.3.3 +2. The Why3 platform, version 1.4.0 3. The Coq Proof Assistant, version 8.12.0 ----------------------------------------------------------