diff --git a/Makefile.in b/Makefile.in index af92aec5f28b6b0efe1675734b2c61558ae9dffe..6fe109bbeec33ba6df4804cc6a61c79967037fd1 100644 --- a/Makefile.in +++ b/Makefile.in @@ -822,9 +822,10 @@ install_local:: bin/why3webserver ############### SESSION_FILES = why3session_lib why3session_info \ + why3session_html \ why3session_main # TODO: why3session_copy why3session_rm why3session_csv why3session_run -# why3session_latex why3session_html why3session_output +# why3session_latex why3session_output SESSIONMODULES = $(addprefix src/why3session/, $(SESSION_FILES)) diff --git a/examples/dijkstra/why3session.xml b/examples/dijkstra/why3session.xml index e824d7cd7e53d47ee53df7dd5093ee4c1632b67f..e9054b7f20c9be16119955e4ed5ac4e9f2ec317e 100644 --- a/examples/dijkstra/why3session.xml +++ b/examples/dijkstra/why3session.xml @@ -3,69 +3,69 @@ "http://why3.lri.fr/why3session.dtd"> <why3session shape_version="4"> <prover id="0" name="CVC4" version="1.4" timelimit="1" steplimit="0" memlimit="1000"/> -<prover id="1" name="CVC4" version="1.5-prerelease" timelimit="5" steplimit="0" memlimit="0"/> +<prover id="1" name="CVC4" version="1.5-prerelease" timelimit="2" steplimit="0" memlimit="0"/> <prover id="2" name="Alt-Ergo" version="1.30" timelimit="2" steplimit="0" memlimit="1000"/> -<prover id="3" name="Z3" version="4.5.0" timelimit="10" steplimit="0" memlimit="4000"/> -<prover id="4" name="Z3" version="3.2" timelimit="5" steplimit="0" memlimit="1000"/> -<prover id="5" name="Z3" version="4.4.1" timelimit="10" steplimit="0" memlimit="4000"/> -<file name="../dijkstra.mlw"> -<theory name="DijkstraShortestPath" sum="6f8a056406b11e82a41224586d40a6e4"> - <goal name="WP_parameter relax"> +<prover id="3" name="Z3" version="3.2" timelimit="5" steplimit="0" memlimit="1000"/> +<prover id="4" name="Z3" version="4.5.0" timelimit="10" steplimit="0" memlimit="4000"/> +<prover id="5" name="Z3" version="4.4.1" timelimit="1" steplimit="0" memlimit="1000"/> +<file name="../dijkstra.mlw" proved="true"> +<theory name="DijkstraShortestPath" proved="true" sum="97357c5fd333273c2b5e098cc1dbad40"> + <goal name="WP_parameter relax" expl="VC for relax" proved="true"> <proof prover="2"><result status="valid" time="0.01" steps="11"/></proof> </goal> - <goal name="Length_nonneg"> - <transf name="induction_pr" > - <goal name="Length_nonneg.0"> + <goal name="Length_nonneg" proved="true"> + <transf name="induction_pr" proved="true"> + <goal name="Length_nonneg.0" proved="true"> <proof prover="2"><result status="valid" time="0.00" steps="4"/></proof> </goal> - <goal name="Length_nonneg.1"> + <goal name="Length_nonneg.1" proved="true"> <proof prover="0"><result status="valid" time="0.02"/></proof> </goal> </transf> </goal> - <goal name="Path_inversion"> + <goal name="Path_inversion" proved="true"> <proof prover="2"><result status="valid" time="0.01" steps="9"/></proof> </goal> - <goal name="Path_shortest_path"> - <transf name="introduce_premises" > - <goal name="Path_shortest_path.0"> - <transf name="induction" arg1="d" arg2="0"> - <goal name="Path_shortest_path.0.0"> - <proof prover="5" timelimit="1" memlimit="1000"><result status="valid" time="0.04"/></proof> + <goal name="Path_shortest_path" proved="true"> + <transf name="introduce_premises" proved="true"> + <goal name="Path_shortest_path.0" proved="true"> + <transf name="induction" proved="true"arg1="d" arg2="0"> + <goal name="Path_shortest_path.0.0" proved="true"> + <proof prover="5"><result status="valid" time="0.04"/></proof> </goal> - <goal name="Path_shortest_path.0.1"> + <goal name="Path_shortest_path.0.1" proved="true"> <proof prover="2"><result status="valid" time="0.01" steps="6"/></proof> </goal> </transf> </goal> </transf> </goal> - <goal name="Main_lemma"> + <goal name="Main_lemma" proved="true"> <proof prover="2"><result status="valid" time="0.04" steps="173"/></proof> </goal> - <goal name="Completeness_lemma"> - <transf name="induction_pr" > - <goal name="Completeness_lemma.0"> + <goal name="Completeness_lemma" proved="true"> + <transf name="induction_pr" proved="true"> + <goal name="Completeness_lemma.0" proved="true"> <proof prover="2"><result status="valid" time="0.00" steps="5"/></proof> </goal> - <goal name="Completeness_lemma.1"> + <goal name="Completeness_lemma.1" proved="true"> <proof prover="0"><result status="valid" time="0.04"/></proof> </goal> </transf> </goal> - <goal name="inside_or_exit"> - <transf name="induction_pr" > - <goal name="inside_or_exit.0"> + <goal name="inside_or_exit" proved="true"> + <transf name="induction_pr" proved="true"> + <goal name="inside_or_exit.0" proved="true"> <proof prover="2"><result status="valid" time="0.01" steps="5"/></proof> </goal> - <goal name="inside_or_exit.1"> - <transf name="introduce_premises" > - <goal name="inside_or_exit.1.0"> - <transf name="case" arg1="(mem z s)"> - <goal name="inside_or_exit.1.0.0"> + <goal name="inside_or_exit.1" proved="true"> + <transf name="introduce_premises" proved="true"> + <goal name="inside_or_exit.1.0" proved="true"> + <transf name="case" proved="true"arg1="(mem z s)"> + <goal name="inside_or_exit.1.0.0" proved="true"> <proof prover="2"><result status="valid" time="0.01" steps="8"/></proof> </goal> - <goal name="inside_or_exit.1.0.1"> + <goal name="inside_or_exit.1.0.1" proved="true"> <proof prover="0"><result status="valid" time="0.06"/></proof> </goal> </transf> @@ -74,141 +74,129 @@ </goal> </transf> </goal> - <goal name="WP_parameter shortest_path_code"> - <transf name="split_goal_wp" > - <goal name="WP_parameter shortest_path_code.0"> + <goal name="WP_parameter shortest_path_code" expl="VC for shortest_path_code" proved="true"> + <transf name="split_goal_wp" proved="true"> + <goal name="WP_parameter shortest_path_code.0" expl="loop invariant init" proved="true"> <proof prover="2"><result status="valid" time="0.04" steps="164"/></proof> </goal> - <goal name="WP_parameter shortest_path_code.1"> + <goal name="WP_parameter shortest_path_code.1" expl="loop invariant init" proved="true"> <proof prover="2"><result status="valid" time="0.01" steps="11"/></proof> </goal> - <goal name="WP_parameter shortest_path_code.2"> + <goal name="WP_parameter shortest_path_code.2" expl="loop invariant init" proved="true"> <proof prover="2"><result status="valid" time="0.02" steps="35"/></proof> </goal> - <goal name="WP_parameter shortest_path_code.3"> - <proof prover="3" timelimit="1" memlimit="1000"><result status="valid" time="0.03"/></proof> + <goal name="WP_parameter shortest_path_code.3" expl="precondition" proved="true"> + <proof prover="4" timelimit="1" memlimit="1000"><result status="valid" time="0.03"/></proof> </goal> - <goal name="WP_parameter shortest_path_code.4"> + <goal name="WP_parameter shortest_path_code.4" expl="assertion" proved="true"> <proof prover="2"><result status="valid" time="0.02" steps="86"/></proof> </goal> - <goal name="WP_parameter shortest_path_code.5"> + <goal name="WP_parameter shortest_path_code.5" expl="loop invariant init" proved="true"> <proof prover="2"><result status="valid" time="0.01" steps="15"/></proof> </goal> - <goal name="WP_parameter shortest_path_code.6"> - <transf name="inline_goal" > - <goal name="WP_parameter shortest_path_code.6.0"> - <transf name="split_goal_wp" > - <goal name="WP_parameter shortest_path_code.6.0.0"> + <goal name="WP_parameter shortest_path_code.6" expl="loop invariant init" proved="true"> + <transf name="inline_goal" proved="true"> + <goal name="WP_parameter shortest_path_code.6.0" expl="loop invariant init" proved="true"> + <transf name="split_goal_wp" proved="true"> + <goal name="WP_parameter shortest_path_code.6.0.0" expl="VC for shortest_path_code" proved="true"> <proof prover="2"><result status="valid" time="0.01" steps="26"/></proof> </goal> - <goal name="WP_parameter shortest_path_code.6.0.1"> + <goal name="WP_parameter shortest_path_code.6.0.1" expl="VC for shortest_path_code" proved="true"> <proof prover="2"><result status="valid" time="0.01" steps="16"/></proof> </goal> - <goal name="WP_parameter shortest_path_code.6.0.2"> + <goal name="WP_parameter shortest_path_code.6.0.2" expl="VC for shortest_path_code" proved="true"> <proof prover="2"><result status="valid" time="0.00" steps="26"/></proof> </goal> - <goal name="WP_parameter shortest_path_code.6.0.3"> + <goal name="WP_parameter shortest_path_code.6.0.3" expl="VC for shortest_path_code" proved="true"> <proof prover="2"><result status="valid" time="0.01" steps="24"/></proof> </goal> - <goal name="WP_parameter shortest_path_code.6.0.4"> + <goal name="WP_parameter shortest_path_code.6.0.4" expl="VC for shortest_path_code" proved="true"> <proof prover="2"><result status="valid" time="0.02" steps="65"/></proof> </goal> - <goal name="WP_parameter shortest_path_code.6.0.5"> + <goal name="WP_parameter shortest_path_code.6.0.5" expl="VC for shortest_path_code" proved="true"> <proof prover="2"><result status="valid" time="0.05" steps="263"/></proof> </goal> - <goal name="WP_parameter shortest_path_code.6.0.6"> + <goal name="WP_parameter shortest_path_code.6.0.6" expl="VC for shortest_path_code" proved="true"> <proof prover="2"><result status="valid" time="0.02" steps="33"/></proof> </goal> </transf> </goal> </transf> </goal> - <goal name="WP_parameter shortest_path_code.7"> - <transf name="split_goal_wp" > - <goal name="WP_parameter shortest_path_code.7.0"> + <goal name="WP_parameter shortest_path_code.7" expl="loop invariant init" proved="true"> + <transf name="split_goal_wp" proved="true"> + <goal name="WP_parameter shortest_path_code.7.0" expl="loop invariant init" proved="true"> <proof prover="2"><result status="valid" time="0.03" steps="110"/></proof> </goal> </transf> </goal> - <goal name="WP_parameter shortest_path_code.8"> + <goal name="WP_parameter shortest_path_code.8" expl="precondition" proved="true"> <proof prover="2"><result status="valid" time="0.01" steps="19"/></proof> </goal> - <goal name="WP_parameter shortest_path_code.9"> - <proof prover="4"><result status="valid" time="0.18"/></proof> + <goal name="WP_parameter shortest_path_code.9" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.18"/></proof> </goal> - <goal name="WP_parameter shortest_path_code.10"> + <goal name="WP_parameter shortest_path_code.10" expl="loop invariant preservation" proved="true"> <proof prover="2"><result status="valid" time="0.01" steps="40"/></proof> </goal> - <goal name="WP_parameter shortest_path_code.11"> - <transf name="inline_goal" > - <goal name="WP_parameter shortest_path_code.11.0"> - <transf name="split_goal_wp" > - <goal name="WP_parameter shortest_path_code.11.0.0"> + <goal name="WP_parameter shortest_path_code.11" expl="loop invariant preservation" proved="true"> + <transf name="inline_goal" proved="true"> + <goal name="WP_parameter shortest_path_code.11.0" expl="loop invariant preservation" proved="true"> + <transf name="split_goal_wp" proved="true"> + <goal name="WP_parameter shortest_path_code.11.0.0" expl="VC for shortest_path_code" proved="true"> <proof prover="2"><result status="valid" time="0.02" steps="64"/></proof> </goal> - <goal name="WP_parameter shortest_path_code.11.0.1"> + <goal name="WP_parameter shortest_path_code.11.0.1" expl="VC for shortest_path_code" proved="true"> <proof prover="0" timelimit="10" memlimit="4000"><result status="valid" time="2.39"/></proof> </goal> - <goal name="WP_parameter shortest_path_code.11.0.2"> + <goal name="WP_parameter shortest_path_code.11.0.2" expl="VC for shortest_path_code" proved="true"> <proof prover="2"><result status="valid" time="0.01" steps="25"/></proof> </goal> - <goal name="WP_parameter shortest_path_code.11.0.3"> - <proof prover="0"><result status="unknown" time="1.28"/></proof> - <proof prover="2" timelimit="1"><result status="timeout" time="0.99"/></proof> - <proof prover="3"><result status="valid" time="7.45"/></proof> - <proof prover="5"><result status="timeout" time="10.00"/></proof> + <goal name="WP_parameter shortest_path_code.11.0.3" expl="VC for shortest_path_code" proved="true"> + <proof prover="4"><result status="valid" time="7.45"/></proof> </goal> - <goal name="WP_parameter shortest_path_code.11.0.4"> + <goal name="WP_parameter shortest_path_code.11.0.4" expl="VC for shortest_path_code" proved="true"> <proof prover="2"><result status="valid" time="0.05" steps="191"/></proof> </goal> - <goal name="WP_parameter shortest_path_code.11.0.5"> + <goal name="WP_parameter shortest_path_code.11.0.5" expl="VC for shortest_path_code" proved="true"> <proof prover="2"><result status="valid" time="0.17" steps="495"/></proof> </goal> - <goal name="WP_parameter shortest_path_code.11.0.6"> - <transf name="introduce_premises" > - <goal name="WP_parameter shortest_path_code.11.0.6.0"> - <transf name="destruct" arg1="H22"> - <goal name="WP_parameter shortest_path_code.11.0.6.0.0"> + <goal name="WP_parameter shortest_path_code.11.0.6" expl="VC for shortest_path_code" proved="true"> + <transf name="introduce_premises" proved="true"> + <goal name="WP_parameter shortest_path_code.11.0.6.0" expl="VC for shortest_path_code" proved="true"> + <transf name="destruct" proved="true"arg1="H22"> + <goal name="WP_parameter shortest_path_code.11.0.6.0.0" expl="VC for shortest_path_code" proved="true"> <proof prover="2"><result status="valid" time="0.03" steps="57"/></proof> </goal> - <goal name="WP_parameter shortest_path_code.11.0.6.0.1"> - <transf name="destruct" arg1="H"> - <goal name="WP_parameter shortest_path_code.11.0.6.0.1.0"> + <goal name="WP_parameter shortest_path_code.11.0.6.0.1" expl="VC for shortest_path_code" proved="true"> + <transf name="destruct" proved="true"arg1="H"> + <goal name="WP_parameter shortest_path_code.11.0.6.0.1.0" expl="VC for shortest_path_code" proved="true"> <proof prover="2"><result status="valid" time="0.02" steps="58"/></proof> </goal> - <goal name="WP_parameter shortest_path_code.11.0.6.0.1.1"> - <transf name="destruct" arg1="H"> - <goal name="WP_parameter shortest_path_code.11.0.6.0.1.1.0"> - <transf name="destruct" arg1="H23"> - <goal name="WP_parameter shortest_path_code.11.0.6.0.1.1.0.0"> + <goal name="WP_parameter shortest_path_code.11.0.6.0.1.1" expl="VC for shortest_path_code" proved="true"> + <transf name="destruct" proved="true"arg1="H"> + <goal name="WP_parameter shortest_path_code.11.0.6.0.1.1.0" expl="VC for shortest_path_code" proved="true"> + <transf name="destruct" proved="true"arg1="H23"> + <goal name="WP_parameter shortest_path_code.11.0.6.0.1.1.0.0" expl="VC for shortest_path_code" proved="true"> <proof prover="2"><result status="valid" time="0.01" steps="30"/></proof> </goal> - <goal name="WP_parameter shortest_path_code.11.0.6.0.1.1.0.1"> - <transf name="destruct" arg1="H12"> - <goal name="WP_parameter shortest_path_code.11.0.6.0.1.1.0.1.0"> - <transf name="case" arg1="(v = v1)"> - <goal name="WP_parameter shortest_path_code.11.0.6.0.1.1.0.1.0.0"> + <goal name="WP_parameter shortest_path_code.11.0.6.0.1.1.0.1" expl="VC for shortest_path_code" proved="true"> + <transf name="destruct" proved="true"arg1="H12"> + <goal name="WP_parameter shortest_path_code.11.0.6.0.1.1.0.1.0" expl="VC for shortest_path_code" proved="true"> + <transf name="case" proved="true"arg1="(v = v1)"> + <goal name="WP_parameter shortest_path_code.11.0.6.0.1.1.0.1.0.0" expl="VC for shortest_path_code" proved="true"> <proof prover="2"><result status="valid" time="1.03" steps="1298"/></proof> </goal> - <goal name="WP_parameter shortest_path_code.11.0.6.0.1.1.0.1.0.1"> + <goal name="WP_parameter shortest_path_code.11.0.6.0.1.1.0.1.0.1" expl="VC for shortest_path_code" proved="true"> <proof prover="2"><result status="valid" time="0.02" steps="59"/></proof> </goal> </transf> - <transf name="destruct" arg1="H3"> - <goal name="WP_parameter shortest_path_code.11.0.6.0.1.1.0.1.0.0"> - <transf name="destruct" arg1="H"> - <goal name="WP_parameter shortest_path_code.11.0.6.0.1.1.0.1.0.0.0"> - <proof prover="2"><result status="timeout" time="2.00"/></proof> - </goal> - </transf> - </goal> - </transf> </goal> </transf> </goal> </transf> </goal> - <goal name="WP_parameter shortest_path_code.11.0.6.0.1.1.1"> + <goal name="WP_parameter shortest_path_code.11.0.6.0.1.1.1" expl="VC for shortest_path_code" proved="true"> <proof prover="2"><result status="valid" time="0.85" steps="1260"/></proof> </goal> </transf> @@ -223,19 +211,19 @@ </goal> </transf> </goal> - <goal name="WP_parameter shortest_path_code.12"> - <transf name="split_goal_wp" > - <goal name="WP_parameter shortest_path_code.12.0"> - <transf name="inline_goal" > - <goal name="WP_parameter shortest_path_code.12.0.0"> - <transf name="split_goal_wp" > - <goal name="WP_parameter shortest_path_code.12.0.0.0"> + <goal name="WP_parameter shortest_path_code.12" expl="loop invariant preservation" proved="true"> + <transf name="split_goal_wp" proved="true"> + <goal name="WP_parameter shortest_path_code.12.0" expl="loop invariant preservation" proved="true"> + <transf name="inline_goal" proved="true"> + <goal name="WP_parameter shortest_path_code.12.0.0" expl="loop invariant preservation" proved="true"> + <transf name="split_goal_wp" proved="true"> + <goal name="WP_parameter shortest_path_code.12.0.0.0" expl="loop invariant preservation" proved="true"> <proof prover="0"><result status="valid" time="0.10"/></proof> - <proof prover="1"><undone/></proof> + <proof prover="1" memlimit="1000"><undone/></proof> </goal> - <goal name="WP_parameter shortest_path_code.12.0.0.1"> + <goal name="WP_parameter shortest_path_code.12.0.0.1" expl="loop invariant preservation" proved="true"> <proof prover="0"><result status="valid" time="0.46"/></proof> - <proof prover="1"><undone/></proof> + <proof prover="1" timelimit="5"><undone/></proof> </goal> </transf> </goal> @@ -243,50 +231,50 @@ </goal> </transf> </goal> - <goal name="WP_parameter shortest_path_code.13"> + <goal name="WP_parameter shortest_path_code.13" expl="loop variant decrease" proved="true"> <proof prover="2"><result status="valid" time="0.02" steps="59"/></proof> </goal> - <goal name="WP_parameter shortest_path_code.14"> + <goal name="WP_parameter shortest_path_code.14" expl="loop invariant preservation" proved="true"> <proof prover="2"><result status="valid" time="0.01" steps="19"/></proof> </goal> - <goal name="WP_parameter shortest_path_code.15"> + <goal name="WP_parameter shortest_path_code.15" expl="loop invariant preservation" proved="true"> <proof prover="2"><result status="valid" time="0.10" steps="291"/></proof> </goal> - <goal name="WP_parameter shortest_path_code.16"> - <transf name="introduce_premises" > - <goal name="WP_parameter shortest_path_code.16.0"> - <transf name="cut" arg1="(is_empty su)"> - <goal name="WP_parameter shortest_path_code.16.0.0"> - <transf name="cut" arg1="(inv_succ src visited q d)"> - <goal name="WP_parameter shortest_path_code.16.0.0.0"> - <transf name="cut" arg1="(mem src visited)"> - <goal name="WP_parameter shortest_path_code.16.0.0.0.0"> - <transf name="instantiate" arg1="inside_or_exit" arg2="visited"> - <goal name="WP_parameter shortest_path_code.16.0.0.0.0.0"> - <transf name="instantiate" arg1="inside_or_exit" arg2="src"> - <goal name="WP_parameter shortest_path_code.16.0.0.0.0.0.0"> - <transf name="instantiate" arg1="inside_or_exit" arg2="x"> - <goal name="WP_parameter shortest_path_code.16.0.0.0.0.0.0.0"> - <transf name="instantiate" arg1="inside_or_exit" arg2="dx"> - <goal name="WP_parameter shortest_path_code.16.0.0.0.0.0.0.0.0"> - <transf name="cut" arg1="(mem x visited \/ (exists y:vertex. exists z: vertex. exists dy:int. mem y visited /\ not mem z visited /\ mem z (g_succ y) /\ path src y dy /\ ((dy + weight y z) <= dx)))"> - <goal name="WP_parameter shortest_path_code.16.0.0.0.0.0.0.0.0.0"> - <transf name="destruct" arg1="h"> - <goal name="WP_parameter shortest_path_code.16.0.0.0.0.0.0.0.0.0.0"> + <goal name="WP_parameter shortest_path_code.16" expl="loop invariant preservation" proved="true"> + <transf name="introduce_premises" proved="true"> + <goal name="WP_parameter shortest_path_code.16.0" expl="loop invariant preservation" proved="true"> + <transf name="cut" proved="true"arg1="(is_empty su)"> + <goal name="WP_parameter shortest_path_code.16.0.0" expl="loop invariant preservation" proved="true"> + <transf name="cut" proved="true"arg1="(inv_succ src visited q d)"> + <goal name="WP_parameter shortest_path_code.16.0.0.0" expl="loop invariant preservation" proved="true"> + <transf name="cut" proved="true"arg1="(mem src visited)"> + <goal name="WP_parameter shortest_path_code.16.0.0.0.0" expl="loop invariant preservation" proved="true"> + <transf name="instantiate" proved="true"arg1="inside_or_exit" arg2="visited"> + <goal name="WP_parameter shortest_path_code.16.0.0.0.0.0" expl="loop invariant preservation" proved="true"> + <transf name="instantiate" proved="true"arg1="inside_or_exit" arg2="src"> + <goal name="WP_parameter shortest_path_code.16.0.0.0.0.0.0" expl="loop invariant preservation" proved="true"> + <transf name="instantiate" proved="true"arg1="inside_or_exit" arg2="x"> + <goal name="WP_parameter shortest_path_code.16.0.0.0.0.0.0.0" expl="loop invariant preservation" proved="true"> + <transf name="instantiate" proved="true"arg1="inside_or_exit" arg2="dx"> + <goal name="WP_parameter shortest_path_code.16.0.0.0.0.0.0.0.0" expl="loop invariant preservation" proved="true"> + <transf name="cut" proved="true"arg1="(mem x visited \/ (exists y:vertex. exists z: vertex. exists dy:int. mem y visited /\ not mem z visited /\ mem z (g_succ y) /\ path src y dy /\ ((dy + weight y z) <= dx)))"> + <goal name="WP_parameter shortest_path_code.16.0.0.0.0.0.0.0.0.0" expl="loop invariant preservation" proved="true"> + <transf name="destruct" proved="true"arg1="h"> + <goal name="WP_parameter shortest_path_code.16.0.0.0.0.0.0.0.0.0.0" expl="loop invariant preservation" proved="true"> <proof prover="2"><result status="valid" time="0.01" steps="25"/></proof> </goal> - <goal name="WP_parameter shortest_path_code.16.0.0.0.0.0.0.0.0.0.1"> - <transf name="destruct" arg1="h"> - <goal name="WP_parameter shortest_path_code.16.0.0.0.0.0.0.0.0.0.1.0"> - <transf name="destruct" arg1="h"> - <goal name="WP_parameter shortest_path_code.16.0.0.0.0.0.0.0.0.0.1.0.0"> - <transf name="destruct" arg1="h"> - <goal name="WP_parameter shortest_path_code.16.0.0.0.0.0.0.0.0.0.1.0.0.0"> - <transf name="cut" arg1="(mem z q)"> - <goal name="WP_parameter shortest_path_code.16.0.0.0.0.0.0.0.0.0.1.0.0.0.0"> + <goal name="WP_parameter shortest_path_code.16.0.0.0.0.0.0.0.0.0.1" expl="loop invariant preservation" proved="true"> + <transf name="destruct" proved="true"arg1="h"> + <goal name="WP_parameter shortest_path_code.16.0.0.0.0.0.0.0.0.0.1.0" expl="loop invariant preservation" proved="true"> + <transf name="destruct" proved="true"arg1="h"> + <goal name="WP_parameter shortest_path_code.16.0.0.0.0.0.0.0.0.0.1.0.0" expl="loop invariant preservation" proved="true"> + <transf name="destruct" proved="true"arg1="h"> + <goal name="WP_parameter shortest_path_code.16.0.0.0.0.0.0.0.0.0.1.0.0.0" expl="loop invariant preservation" proved="true"> + <transf name="cut" proved="true"arg1="(mem z q)"> + <goal name="WP_parameter shortest_path_code.16.0.0.0.0.0.0.0.0.0.1.0.0.0.0" expl="loop invariant preservation" proved="true"> <proof prover="2"><result status="valid" time="0.48" steps="405"/></proof> </goal> - <goal name="WP_parameter shortest_path_code.16.0.0.0.0.0.0.0.0.0.1.0.0.0.1"> + <goal name="WP_parameter shortest_path_code.16.0.0.0.0.0.0.0.0.0.1.0.0.0.1" proved="true"> <proof prover="2"><result status="valid" time="0.20" steps="355"/></proof> </goal> </transf> @@ -299,7 +287,7 @@ </goal> </transf> </goal> - <goal name="WP_parameter shortest_path_code.16.0.0.0.0.0.0.0.0.1"> + <goal name="WP_parameter shortest_path_code.16.0.0.0.0.0.0.0.0.1" proved="true"> <proof prover="2"><result status="valid" time="0.01" steps="68"/></proof> </goal> </transf> @@ -312,30 +300,30 @@ </goal> </transf> </goal> - <goal name="WP_parameter shortest_path_code.16.0.0.0.1"> + <goal name="WP_parameter shortest_path_code.16.0.0.0.1" proved="true"> <proof prover="2"><result status="valid" time="0.01" steps="54"/></proof> </goal> </transf> </goal> - <goal name="WP_parameter shortest_path_code.16.0.0.1"> + <goal name="WP_parameter shortest_path_code.16.0.0.1" proved="true"> <proof prover="2"><result status="valid" time="0.09" steps="268"/></proof> </goal> </transf> </goal> - <goal name="WP_parameter shortest_path_code.16.0.1"> + <goal name="WP_parameter shortest_path_code.16.0.1" proved="true"> <proof prover="2"><result status="valid" time="0.00" steps="22"/></proof> </goal> </transf> </goal> </transf> </goal> - <goal name="WP_parameter shortest_path_code.17"> + <goal name="WP_parameter shortest_path_code.17" expl="loop variant decrease" proved="true"> <proof prover="2"><result status="valid" time="0.04" steps="122"/></proof> </goal> - <goal name="WP_parameter shortest_path_code.18"> + <goal name="WP_parameter shortest_path_code.18" expl="postcondition" proved="true"> <proof prover="2"><result status="valid" time="0.01" steps="22"/></proof> </goal> - <goal name="WP_parameter shortest_path_code.19"> + <goal name="WP_parameter shortest_path_code.19" expl="postcondition" proved="true"> <proof prover="2"><result status="valid" time="0.18" steps="353"/></proof> </goal> </transf> diff --git a/examples/dijkstra/why3shapes.gz b/examples/dijkstra/why3shapes.gz index 3f0597052e8d7c33a80cba57af6586d85679184f..54d021b579c17c3da590b74563fb0661424c2491 100644 Binary files a/examples/dijkstra/why3shapes.gz and b/examples/dijkstra/why3shapes.gz differ diff --git a/src/why3session/why3session_html.ml b/src/why3session/why3session_html.ml index c444184db1162e5142b140ed79043ee44b734d29..b5bf383c83d75fff6e1111fd18ff8a59c27ebb34 100644 --- a/src/why3session/why3session_html.ml +++ b/src/why3session/why3session_html.ml @@ -65,12 +65,12 @@ open Session_itp type context = (string -> - (formatter -> unit session -> unit) -> unit session + (formatter -> session -> unit) -> session -> unit, formatter, unit) format let run_file (context : context) print_session fname = - let project_dir = S.get_project_dir fname in - let session,_use_shapes = S.read_session project_dir in + let ses,_ = read_session fname in + let project_dir = get_dir ses in let output_dir = if !output_dir = "" then project_dir else !output_dir in @@ -81,8 +81,8 @@ let run_file (context : context) print_session fname = in let fmt = formatter_of_out_channel cout in if !opt_context - then fprintf fmt context basename (print_session basename) session - else print_session basename fmt session; + then fprintf fmt context basename (print_session basename) ses + else print_session basename fmt ses; pp_print_flush fmt (); if output_dir <> "-" then close_out cout @@ -91,21 +91,21 @@ module Table = struct - let rec transf_depth tr = + let rec transf_depth s tr = List.fold_left - (fun depth g -> max depth (goal_depth g)) 0 tr.S.transf_goals - and goal_depth g = - S.PHstr.fold - (fun _st tr depth -> max depth (1 + transf_depth tr)) - (S.goal_transformations g) 1 + (fun depth g -> max depth (goal_depth s g)) 0 (get_sub_tasks s tr) + and goal_depth s g = + List.fold_left + (fun depth tr -> max depth (1 + transf_depth s tr)) + 1 (get_transformations s g) - let theory_depth t = + let theory_depth s t = List.fold_left - (fun depth g -> max depth (goal_depth g)) 0 t.S.theory_goals + (fun depth g -> max depth (goal_depth s g)) 0 (theory_goals t) - let provers_stats provers theory = - S.theory_iter_proof_attempt (fun a -> - Hprover.replace provers a.S.proof_prover a.S.proof_prover) theory + let provers_stats s provers theory = + theory_iter_proof_attempt s (fun a -> + Hprover.replace provers a.prover a.prover) theory let print_prover = Whyconf.print_prover @@ -115,16 +115,16 @@ struct if dark then "008000" else "C0FFC0" else "FF0000") -let print_results fmt provers proofs = +let print_results fmt s provers proofs = List.iter (fun p -> fprintf fmt "<td bgcolor=\"#"; begin try - let pr = S.PHprover.find proofs p in - let s = pr.S.proof_state in + let pr = get_proof_attempt_node s (Hprover.find proofs p) in + let s = pr.proof_state in begin match s with - | S.Done res -> + | Some res -> begin match res.Call_provers.pr_answer with | Call_provers.Valid -> @@ -133,10 +133,10 @@ let print_results fmt provers proofs = fprintf fmt "FF0000\">Invalid" | Call_provers.Timeout -> fprintf fmt "FF8000\">Timeout (%ds)" - pr.S.proof_limit.Call_provers.limit_time + pr.limit.Call_provers.limit_time | Call_provers.OutOfMemory -> fprintf fmt "FF8000\">Out Of Memory (%dM)" - pr.S.proof_limit.Call_provers.limit_mem + pr.limit.Call_provers.limit_mem | Call_provers.StepLimitExceeded -> fprintf fmt "FF8000\">Step limit exceeded" | Call_provers.Unknown _ -> @@ -146,81 +146,78 @@ let print_results fmt provers proofs = | Call_provers.HighFailure -> fprintf fmt "FF8000\">High Failure" end - | S.InternalFailure _ -> fprintf fmt "E0E0E0\">Internal Failure" - | S.Interrupted -> fprintf fmt "E0E0E0\">Not yet run" - | S.Unedited -> fprintf fmt "E0E0E0\">Not yet edited" - | S.Scheduled | S.Running - | S.JustEdited -> assert false + | None -> fprintf fmt "E0E0E0\">result missing" end; if pr.S.proof_obsolete then fprintf fmt " (obsolete)" with Not_found -> fprintf fmt "E0E0E0\">---" end; fprintf fmt "</td>") provers -let rec num_lines acc tr = +let rec num_lines s acc tr = List.fold_left (fun acc g -> 1 + - PHstr.fold (fun _ tr acc -> 1 + num_lines acc tr) - (goal_transformations g) acc) - acc tr.transf_goals + List.fold_left (fun acc tr -> 1 + num_lines s acc tr) + acc (get_transformations s g)) + acc (get_sub_tasks s tr) - let rec print_transf fmt depth max_depth provers tr = + let rec print_transf fmt s depth max_depth provers tr = fprintf fmt "<tr>"; for _i=1 to 0 (* depth-1 *) do fprintf fmt "<td></td>" done; fprintf fmt "<td bgcolor=\"#%a\" colspan=\"%d\">" - (color_of_status ~dark:false) (Opt.inhabited tr.S.transf_verified) + (color_of_status ~dark:false) (tn_proved s tr) (max_depth - depth + 1); (* for i=1 to depth-1 do fprintf fmt " " done; *) - fprintf fmt "%s</td>" tr.transf_name ; + let name = (get_transf_name s tr) ^ + (String.concat "" (get_transf_args s tr)) in + fprintf fmt "%s</td>" name ; for _i=1 (* depth *) to (*max_depth - 1 + *) List.length provers do fprintf fmt "<td bgcolor=\"#E0E0E0\"></td>" done; fprintf fmt "</tr>@\n"; - fprintf fmt "<td rowspan=\"%d\"> </td>" (num_lines 0 tr); + fprintf fmt "<td rowspan=\"%d\"> </td>" (num_lines s 0 tr); let (_:bool) = List.fold_left (fun is_first g -> - print_goal fmt is_first (depth+1) max_depth provers g; + print_goal fmt s is_first (depth+1) max_depth provers g; false) - true tr.transf_goals + true (get_sub_tasks s tr) in () - and print_goal fmt is_first depth max_depth provers g = + and print_goal fmt s is_first depth max_depth provers g = if not is_first then fprintf fmt "<tr>"; (* for i=1 to 0 (\* depth-1 *\) do fprintf fmt "<td></td>" done; *) fprintf fmt "<td bgcolor=\"#%a\" colspan=\"%d\">" - (color_of_status ~dark:false) (Opt.inhabited (S.goal_verified g)) + (color_of_status ~dark:false) (pn_proved s g) (max_depth - depth + 1); (* for i=1 to depth-1 do fprintf fmt " " done; *) - fprintf fmt "%s</td>" (S.goal_user_name g); + fprintf fmt "%s</td>" (get_proof_name s g).Ident.id_string; (* for i=depth to max_depth-1 do fprintf fmt "<td></td>" done; *) - print_results fmt provers (goal_external_proofs g); + print_results fmt s provers (get_proof_attempt_ids s g); fprintf fmt "</tr>@\n"; - PHstr.iter - (fun _ tr -> print_transf fmt depth max_depth provers tr) - (goal_transformations g) + List.iter + (print_transf fmt s depth max_depth provers) + (get_transformations s g) - let print_theory fn fmt th = - let depth = theory_depth th in + let print_theory s fn fmt th = + let depth = theory_depth s th in if depth > 0 then let provers = Hprover.create 9 in - provers_stats provers th; + provers_stats s provers th; let provers = Hprover.fold (fun _ pr acc -> pr :: acc) provers [] in let provers = List.sort Whyconf.Prover.compare provers in let name = try - let (l,t,_) = Theory.restore_path th.theory_name in + let (l,t,_) = Theory.restore_path (theory_name th) in String.concat "." ([fn]@l@[t]) - with Not_found -> fn ^ "." ^ th.theory_name.Ident.id_string + with Not_found -> fn ^ "." ^ (theory_name th).Ident.id_string in fprintf fmt "<h2><font color=\"#%a\">Theory \"%s\": " - (color_of_status ~dark:true) (Opt.inhabited th.S.theory_verified) + (color_of_status ~dark:true) (th_proved s th) name; - begin match th.S.theory_verified with - | Some t -> fprintf fmt "fully verified in %.02f s" t - | None -> fprintf fmt "not fully verified" - end; + if th_proved s th then + fprintf fmt "fully verified in %%.02f s" + else fprintf fmt "not fully verified"; fprintf fmt "</font></h2>@\n"; fprintf fmt "<table border=\"1\"><tr><td colspan=\"%d\">Obligations</td>" depth; @@ -229,21 +226,21 @@ let rec num_lines acc tr = (fun pr -> fprintf fmt "<td text-rotation=\"90\">%a</td>" print_prover pr) provers; fprintf fmt "</td></tr>@\n"; - List.iter (print_goal fmt true 1 depth provers) th.theory_goals; + List.iter (print_goal fmt s true 1 depth provers) (theory_goals th); fprintf fmt "</table>@\n" - let print_file fmt f = + let print_file s fmt f = (* fprintf fmt "<h1>File %s</h1>@\n" f.file_name; *) - let fn = Filename.basename f.file_name in + let fn = Filename.basename (file_name f) in let fn = Filename.chop_extension fn in fprintf fmt "%a" - (Pp.print_list Pp.newline (print_theory fn)) f.file_theories + (Pp.print_list Pp.newline (print_theory s fn)) (file_theories f) let print_session name fmt s = fprintf fmt "<h1>Why3 Proof Results for Project \"%s\"</h1>@\n" name; fprintf fmt "%a" - (Pp.print_iter2 PHstr.iter Pp.newline Pp.nothing Pp.nothing - print_file) s.session_files + (Pp.print_iter2 Stdlib.Hstr.iter Pp.newline Pp.nothing Pp.nothing + (print_file s)) (get_files s) let context : context = "<!DOCTYPE html\ @@ -271,47 +268,45 @@ struct let print_prover = Whyconf.print_prover let print_proof_status fmt = function - | Interrupted -> fprintf fmt "Not yet run" - | Unedited -> fprintf fmt "Not yet edited" - | JustEdited | Scheduled | Running -> assert false - | Done pr -> fprintf fmt "Done: %a" Call_provers.print_prover_result pr - | InternalFailure exn -> - fprintf fmt "Failure: %a"Exn_printer.exn_printer exn - - let print_proof_attempt fmt pa = + | None -> fprintf fmt "No result" + | Some res -> fprintf fmt "Done: %a" Call_provers.print_prover_result res + + let print_proof_attempt s fmt pa = + let pa = get_proof_attempt_node s pa in fprintf fmt "<li>%a : %a</li>" - print_prover pa.proof_prover + print_prover pa.prover print_proof_status pa.proof_state - let rec print_transf fmt tr = + let rec print_transf s fmt tr = + let name = (get_transf_name s tr) ^ + (String.concat "" (get_transf_args s tr)) in fprintf fmt "<li>%s : <ul>%a</ul></li>" - tr.transf_name - (Pp.print_list Pp.newline print_goal) tr.transf_goals + name + (Pp.print_list Pp.newline (print_goal s)) (get_sub_tasks s tr) - and print_goal fmt g = + and print_goal s fmt g = fprintf fmt "<li>%s : <ul>%a%a</ul></li>" - (goal_name g).Ident.id_string - (Pp.print_iter2 PHprover.iter Pp.newline Pp.nothing - Pp.nothing print_proof_attempt) - (goal_external_proofs g) - (Pp.print_iter2 PHstr.iter Pp.newline Pp.nothing - Pp.nothing print_transf) - (goal_transformations g) - - let print_theory fmt th = + (get_proof_name s g).Ident.id_string + (Pp.print_iter2 Hprover.iter Pp.newline Pp.nothing + Pp.nothing (print_proof_attempt s)) + (get_proof_attempt_ids s g) + (Pp.print_iter1 List.iter Pp.newline (print_transf s)) + (get_transformations s g) + + let print_theory s fmt th = fprintf fmt "<li>%s : <ul>%a</ul></li>" - th.theory_name.Ident.id_string - (Pp.print_list Pp.newline print_goal) th.theory_goals + (theory_name th).Ident.id_string + (Pp.print_list Pp.newline (print_goal s)) (theory_goals th) - let print_file fmt f = + let print_file s fmt f = fprintf fmt "<li>%s : <ul>%a</ul></li>" - f.file_name - (Pp.print_list Pp.newline print_theory) f.file_theories + (file_name f) + (Pp.print_list Pp.newline (print_theory s)) (file_theories f) let print_session _name fmt s = fprintf fmt "<ul>%a</ul>" - (Pp.print_iter2 PHstr.iter Pp.newline Pp.nothing Pp.nothing - print_file) s.session_files + (Pp.print_iter2 Stdlib.Hstr.iter Pp.newline Pp.nothing Pp.nothing + (print_file s)) (get_files s) let context : context = "<!DOCTYPE html\ diff --git a/src/why3session/why3session_main.ml b/src/why3session/why3session_main.ml index 5b0f7fe9f36405ac1c119f0d0702504d0fc4b924..92d92ca1d15dfc7277a3533bcb07a2ee8c885d70 100644 --- a/src/why3session/why3session_main.ml +++ b/src/why3session/why3session_main.ml @@ -16,9 +16,9 @@ open Why3session_lib let cmds = [| Why3session_info.cmd; + Why3session_html.cmd; (* Why3session_latex.cmd; - Why3session_html.cmd; Why3session_csv.cmd; Why3session_copy.cmd_mod; Why3session_copy.cmd_copy;