let whydp logs smt file =
    let timeout = Wp_parameters.Timeout.get () in
    let stdout = Buffer.create 80 in
    let stderr = Buffer.create 80 in
    let my_args =
      if Wp_parameters.ProofTrace.get () then
        [| "-batch""-debug"; file |]
      else
        [| "-batch"; file |]
    in
    let args = Array.append smt.wdp my_args in
    Logs.command logs "why-dp" args ;
    Task.command ~timeout ~stdout ~stderr "why-dp" args
    >>? Logs.output logs ~status:[0;1;2;3;4] stdout
    >>? Logs.output logs stderr
    (* why-dp returns the output of the prover on stderr *)
    >>= fun res ->
      if res = 0 then Task.return Valid
      else
        if (1<= res && res <= 4) then Task.return Unknown
        else Task.failed "Why-dp exit %d" res