let set_po_result g r =
  try
    let pi = ( g.po_model , WpPropId.property_of_id g.po_pid ) in
    let proof =
      try Hproof.find system.proofs pi
      with Not_found ->
        let proof = WpAnnot.create_proof g.po_pid in
        Hproof.add system.proofs pi proof ; proof
    in
    if r = Valid then WpAnnot.add_proof proof g.po_pid g.po_dep ;
    let status = 
      if WpAnnot.is_proved proof then Property_status.True 
      else Property_status.Dont_know
    in
    let target = WpAnnot.target proof in
    let depends = WpAnnot.dependencies proof in
    Property_status.emit g.po_updater ~hyps:depends target status ;
  with
    (* [JS 2011/01/28] Please do not catch Log.* exception. Let the kernel do
       the job *)

    | Log.AbortFatal plugin as err ->
        Wp_parameters.failure
          "Update-status failed (problem in %s)" plugin ;
        raise err
    | err ->
        Wp_parameters.failure
          "Update-status failed (%s)" (Printexc.to_string err);
        raise err