let prove
    ?(callin=fun _ _ -> ())
    ?(callout=fun _ _ _ -> ())
    wpo ~interactive prover
    =
  Task.todo
    begin
      fun () ->
        let logf = Wpo.file_for_log_proof ~gid:wpo.po_gid prover in
        let logs = Logs.create wpo logf in
        (callin wpo prover ;
         task_for interactive prover logs wpo)
          >>! fun s ->
            let r = result s in
            Logs.close logs ;
            Wpo.set_result wpo prover r ;
            callout wpo prover r
    end