diff --git a/.gitignore b/.gitignore index c4b33fc92e226858a5f4fb5a212f2a87ea822bb4..ff672161f7281761784339f0b92fe0e34a043f2a 100644 --- a/.gitignore +++ b/.gitignore @@ -278,14 +278,19 @@ pvsbin/ /modules/mach/int/ # Try Why3 -/src/trywhy3/trywhy3.js /src/trywhy3/trywhy3.byte +/src/trywhy3/trywhy3.js +/src/trywhy3/alt_ergo_worker.byte +/src/trywhy3/alt_ergo_worker.js +/src/trywhy3/why3_worker.byte +/src/trywhy3/why3_worker.js /src/trywhy3/index.en.html /src/trywhy3/index.fr.html /src/trywhy3/index.html -/src/trywhy3/ace-builds +/src/trywhy3/ace-builds/ /src/trywhy3/*.png /src/trywhy3/alt-ergo-1.00-private-2015-01-29 +/src/trywhy3/fontawesome/ # jessie3 /src/jessie/config.log diff --git a/Makefile.in b/Makefile.in index 4b0c11f90df04272774276b9a30e45dc5f4c1c2b..2dc8c552817ae9e351f220035296a69888e4040a 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1504,10 +1504,10 @@ ALTERGOMODS=util/numsNumbers util/numbers \ instances/matching \ sat/sat_solvers \ main/frontend +ALTERGOCMO=$(addprefix $(ALTERGODIR)/src/, $(addsuffix .cmo,$(ALTERGOMODS))) +TRYWHY3CMO=lib/why3/why3.cma -TRYWHY3CMO=lib/why3/why3.cma $(addprefix $(ALTERGODIR)/src/, $(addsuffix .cmo,$(ALTERGOMODS))) - -trywhy3: src/trywhy3/trywhy3.js src/trywhy3/index.en.html src/trywhy3/index.fr.html +trywhy3: src/trywhy3/trywhy3.js src/trywhy3/why3_worker.js src/trywhy3/alt_ergo_worker.js src/trywhy3/index.en.html src/trywhy3/index.fr.html %.fr.html: %.prehtml yamlpp -l fr $< -o $@ @@ -1516,19 +1516,38 @@ trywhy3: src/trywhy3/trywhy3.js src/trywhy3/index.en.html src/trywhy3/index.fr.h yamlpp -l en $< -o $@ src/trywhy3/trywhy3.js: src/trywhy3/trywhy3.byte - js_of_ocaml --extern-fs -I . -I src/trywhy3 --file=trywhy3.conf:/ \ - --file=try_alt_ergo.drv:/ \ + js_of_ocaml --extern-fs -I . -I src/trywhy3 \ --file=drinkers.why:/ \ --file=simplearith.why:/ \ --file=bin_mult.mlw:/ \ --file=fact.mlw:/ \ --file=isqrt.mlw:/ \ - `find theories modules \( -name "*.mlw" -o -name "*.why" \) -printf " --file=%p:/"` \ +weak.js +nat.js $^ -src/trywhy3/trywhy3.byte: $(TRYWHY3CMO) src/trywhy3/trywhy3.cmo +src/trywhy3/trywhy3.byte: src/trywhy3/worker_proto.cmo src/trywhy3/trywhy3.cmo + $(JSOCAMLC) $(BFLAGS) -o $@ -linkpkg $(BLINKFLAGS) $^ + + +src/trywhy3/why3_worker.js: src/trywhy3/why3_worker.byte + js_of_ocaml --extern-fs -I . -I src/trywhy3 --file=trywhy3.conf:/ \ + --file=try_alt_ergo.drv:/ \ + `find theories modules \( -name "*.mlw" -o -name "*.why" \) -printf " --file=%p:/"` \ + +weak.js +nat.js $^ + +src/trywhy3/why3_worker.byte: $(TRYWHY3CMO) src/trywhy3/worker_proto.cmo src/trywhy3/why3_worker.cmo + $(JSOCAMLC) $(BFLAGS) -o $@ -linkpkg $(BLINKFLAGS) $^ + + +src/trywhy3/alt_ergo_worker.js: src/trywhy3/alt_ergo_worker.byte + js_of_ocaml +weak.js +nat.js +dynlink.js +toplevel.js $^ + +src/trywhy3/alt_ergo_worker.byte: $(ALTERGOCMO) src/trywhy3/worker_proto.cmo src/trywhy3/alt_ergo_worker.cmo $(JSOCAMLC) $(BFLAGS) -o $@ -linkpkg $(BLINKFLAGS) $^ +src/trywhy3/alt_ergo_worker.cmo: src/trywhy3/worker_proto.cmo +src/trywhy3/why3_worker.cmo: src/trywhy3/worker_proto.cmo +src/trywhy3/trywhy3.cmo: src/trywhy3/worker_proto.cmo + src/trywhy3/%.cmo: src/trywhy3/%.ml $(JSOCAMLC) $(BFLAGS) -c $< @@ -1536,7 +1555,11 @@ src/trywhy3/%.cmi: src/trywhy3/%.mli $(JSOCAMLC) $(BFLAGS) -c $< clean:: - rm -f src/trywhy3/trywhy3.js src/trywhy3/trywhy3.byte + rm -f src/trywhy3/trywhy3.js src/trywhy3/trywhy3.byte src/trywhy3/trywhy3.cm* \ + src/trywhy3/why3_worker.js src/trywhy3/why3_worker.byte src/trywhy3/why3_worker.cm* \ + src/trywhy3/alt_ergo_worker.js src/trywhy3/alt_ergo_worker.byte src/trywhy3/alt_ergo_worker.cm* \ + src/trywhy3/worker_proto.cm* \ + src/trywhy3/index.en.html src/trywhy3/index.fr.html CLEANDIRS += src/trywhy3 diff --git a/src/trywhy3/README b/src/trywhy3/README index 8770a69088229fb0f9aa0f66df39b05c90790e52..23c4e5578c08993f746e80e41bfbbcf58fa929e4 100644 --- a/src/trywhy3/README +++ b/src/trywhy3/README @@ -7,6 +7,12 @@ Instructions to build TryWhy3 git clone https://github.com/ajaxorg/ace-builds.git + ** copy the fontawesome webfont locally : + mkdir fontawesome + cd fontawesome + wget -nd https://www.lri.fr/~kn/trywhy3/fontawesome/fontawesome.css + wget -nd https://www.lri.fr/~kn/trywhy3/fontawesome/fontawesome-webfont.woff + ** install Alt-Ergo - get sources of Alt-Ergo and put them in directory src/trywhy3/ e.g. in diff --git a/src/trywhy3/alt_ergo_worker.ml b/src/trywhy3/alt_ergo_worker.ml new file mode 100644 index 0000000000000000000000000000000000000000..c947edc03d38af8b1663160df1b746aeb3efc5bd --- /dev/null +++ b/src/trywhy3/alt_ergo_worker.ml @@ -0,0 +1,53 @@ +open Format +open Worker_proto + +module SAT = (val (Sat_solvers.get_current ()) : Sat_solvers.S) +module FE = Frontend.Make (SAT) + +let print_status fmt _d status steps = + match status with + | FE.Unsat _dep -> + fprintf fmt "Proved (%Ld steps)" steps + | FE.Inconsistent -> () + (* fprintf fmt "Inconsistent assumption" *) + | FE.Unknown _t | FE.Sat _t -> + fprintf fmt "Unknown (%Ld steps)@." steps + + +let report_status report _d status _steps = + match status with + | FE.Unsat _dep -> report Valid + | FE.Inconsistent -> () + | FE.Unknown _t | FE.Sat _t -> report (Unknown "unknown") + +let run_alt_ergo_on_task text = + let lb = Lexing.from_string text in +(* from Alt-Ergo, src/main/frontend.ml *) + let a = Why_parser.file Why_lexer.token lb in + Parsing.clear_parser (); + let ltd, _typ_env = Why_typing.file false Why_typing.empty_env a in + match Why_typing.split_goals ltd with + | [d] -> + let d = Cnf.make (List.map (fun (f, _env) -> f, true) d) in + SAT.reset_steps (); + let stat = ref (Invalid "no answer from Alt-Ergo") in + let f s = stat := s in + begin + try + let _x = Queue.fold (FE.process_decl (report_status f)) + (SAT.empty (), true, Explanation.empty) d + in + !stat + with Sat_solvers.StepsLimitReached -> Unknown "steps limit reached" + end + | _ -> Invalid "zero or more than 1 goal to solve" + + + + +let () = + Options.set_steps_bound 100; + Worker.set_onmessage (fun msg -> + let (id, text) = unmarshal msg in + let result = run_alt_ergo_on_task text in + Worker.post_message (marshal (id,result))) diff --git a/src/trywhy3/index.prehtml b/src/trywhy3/index.prehtml index e5e918e9597149d3b0bed52a3b7967fd00c00a8f..c368ca13e38ca517bf31acbd70e2aac7831e0f73 100644 --- a/src/trywhy3/index.prehtml +++ b/src/trywhy3/index.prehtml @@ -40,6 +40,7 @@ +