From 5251da75285e1a53587c7ac2ed850e29003e93d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Loi=CC=88c=20Correnson?= <loic.correnson@cea.fr> Date: Fri, 12 May 2023 17:17:54 +0200 Subject: [PATCH] [wp] script mode --- src/plugins/wp/ProverScript.ml | 18 ++++++++++-------- src/plugins/wp/ProverScript.mli | 2 ++ src/plugins/wp/register.ml | 19 +++++++++++++++---- src/plugins/wp/wp_parameters.ml | 15 +++++++++++++++ src/plugins/wp/wp_parameters.mli | 1 + 5 files changed, 43 insertions(+), 12 deletions(-) diff --git a/src/plugins/wp/ProverScript.ml b/src/plugins/wp/ProverScript.ml index bb8daa671f0..e74b8f423fe 100644 --- a/src/plugins/wp/ProverScript.ml +++ b/src/plugins/wp/ProverScript.ml @@ -504,7 +504,7 @@ let rec process env node = let task ~valid ~failed ~provers - ~depth ~width ~backtrack ~auto + ~depth ~width ~backtrack ~auto ~scratch ~start ~progress ~result ~success wpo = begin fun () -> Wp_parameters.debug ~dkey:dkey_pp_allgoals "%a" Wpo.pp_goal_flow wpo ; @@ -513,8 +513,10 @@ let task then ( success wpo (Some VCS.Qed) ; Task.return ()) else - let json = ProofSession.load wpo in - let script = Priority.sort (ProofScript.decode json) in + let script = + if scratch then [] else + Priority.sort @@ ProofScript.decode @@ ProofSession.load wpo + in let tree = ProofEngine.proof ~main:wpo in let env = Env.make tree ~valid ~failed ~provers @@ -529,7 +531,7 @@ let task (* -------------------------------------------------------------------------- *) type 'a process = - ?valid:bool -> ?failed:bool -> ?provers:VCS.prover list -> + ?valid:bool -> ?failed:bool -> ?scratch:bool -> ?provers:VCS.prover list -> ?depth:int -> ?width:int -> ?backtrack:int -> ?auto:Strategy.heuristic list -> ?start:(Wpo.t -> unit) -> @@ -543,23 +545,23 @@ let skip2 _ _ = () let skip3 _ _ _ = () let prove - ?(valid = true) ?(failed = true) ?(provers = []) + ?(valid = true) ?(failed = true) ?(scratch = false) ?(provers = []) ?(depth = 0) ?(width = 0) ?(backtrack = 0) ?(auto = []) ?(start = skip1) ?(progress = skip2) ?(result = skip3) ?(success = skip2) wpo = Task.todo (task ~valid ~failed ~provers - ~depth ~width ~backtrack ~auto + ~depth ~width ~backtrack ~auto ~scratch ~start ~progress ~result ~success wpo) let spawn - ?(valid = true) ?(failed = true) ?(provers = []) + ?(valid = true) ?(failed = true) ?(scratch = false) ?(provers = []) ?(depth = 0) ?(width = 0) ?(backtrack = 0) ?(auto = []) ?(start = skip1) ?(progress = skip2) ?(result = skip3) ?(success = skip2) wpo = schedule (task ~valid ~failed ~provers - ~depth ~width ~backtrack ~auto + ~depth ~width ~backtrack ~auto ~scratch ~start ~progress ~result ~success wpo) let search diff --git a/src/plugins/wp/ProverScript.mli b/src/plugins/wp/ProverScript.mli index c93e5b7e867..e83c5e83dc8 100644 --- a/src/plugins/wp/ProverScript.mli +++ b/src/plugins/wp/ProverScript.mli @@ -24,6 +24,7 @@ open VCS (** - [valid]: Play provers with valid result (default: true) - [failed]: Play provers with invalid result (default: true) + - [scratch]: Discard existing script (default: false) - [provers]: Additional list of provers to {i try} when stuck - [depth]: Strategy search depth (default: 0) - [width]: Strategy search width (default: 0) @@ -33,6 +34,7 @@ open VCS type 'a process = ?valid:bool -> ?failed:bool -> + ?scratch:bool -> ?provers:prover list -> ?depth:int -> ?width:int -> diff --git a/src/plugins/wp/register.ml b/src/plugins/wp/register.ml index 306a38d81d3..4bfafe892e9 100644 --- a/src/plugins/wp/register.ml +++ b/src/plugins/wp/register.ml @@ -482,8 +482,9 @@ let do_list_scheduled_result () = type script = { mutable tactical : bool ; + mutable scratch : bool ; mutable update : bool ; - mutable on_stdout : bool ; + mutable stdout : bool ; mutable depth : int ; mutable width : int ; mutable backtrack : int ; @@ -509,6 +510,7 @@ let spawn_wp_proofs ~script goals = then ProverScript.spawn ~failed:false + ~scratch:script.scratch ~auto:script.auto ~depth:script.depth ~width:script.width @@ -566,7 +568,8 @@ let dump_strategies = ))) let default_script_mode () = { - tactical = false ; update=false ; on_stdout = false ; provers = [] ; + provers = [] ; + tactical = false ; update = false ; scratch = false ; stdout = false ; depth=0 ; width = 0 ; auto=[] ; backtrack = 0 ; } @@ -649,7 +652,7 @@ let do_collect_session goals = removed = !removed ; } let do_update_session script session = - let stdout = script.on_stdout in + let stdout = script.stdout in List.iter begin fun (g, _, s) -> (* we always mark existing scripts *) @@ -733,8 +736,16 @@ let do_wp_proofs ?provers ?tip (goals : Wpo.t Bag.t) = script.tactical <- tip ; script.update <- tip ; end ; + begin match Wp_parameters.ScriptMode.get () with + | "default" -> () + | "batch" -> script.update <- false + | "update" -> script.update <- true + | "init" -> script.scratch <- true + | "dry" -> script.scratch <- true ; script.update <- false + | opt -> Wp_parameters.error "Invalid -wp-script '%s' option" opt + end ; begin - script.on_stdout <- Wp_parameters.ScriptOnStdout.get (); + script.stdout <- Wp_parameters.ScriptOnStdout.get (); end ; let spawned = script.tactical || script.provers <> [] in begin diff --git a/src/plugins/wp/wp_parameters.ml b/src/plugins/wp/wp_parameters.ml index 1d10e803ef8..4d6a6a21edc 100644 --- a/src/plugins/wp/wp_parameters.ml +++ b/src/plugins/wp/wp_parameters.ml @@ -715,6 +715,21 @@ module Interactive = String " end) +let () = Parameter_customize.set_group wp_prover +module ScriptMode = String + (struct + let option_name = "-wp-script" + let arg_name = "mode" + let default = "default" + let help = + "WP mode for managing scripts and proof strategies:\n\ + - 'batch': replay from existing scripts (default for script prover)\n\ + - 'update': replay and update scripts (default for tip prover)\n\ + - 'init': replay from scratch and save scripts\n\ + - 'dry': replay from scratch, no script update\n\ + " + end) + let () = Parameter_customize.set_group wp_prover module StrategyEngine = True (struct diff --git a/src/plugins/wp/wp_parameters.mli b/src/plugins/wp/wp_parameters.mli index 7134a77ea95..53d15e5b023 100644 --- a/src/plugins/wp/wp_parameters.mli +++ b/src/plugins/wp/wp_parameters.mli @@ -121,6 +121,7 @@ module DryFinalizeScripts: Parameter_sig.Bool module Provers: Parameter_sig.String_list module Interactive: Parameter_sig.String module StrategyEngine: Parameter_sig.Bool +module ScriptMode: Parameter_sig.String module DefaultStrategies: Parameter_sig.String_list module RunAllProvers: Parameter_sig.Bool module Cache: Parameter_sig.String -- GitLab