let set_po_result g r =
  try
    let pi = ( g.po_model , WpAnnot.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
    let hids = List.map (fun d -> d.dep_pid) g.po_dep in
    if r = Valid then WpAnnot.add_proof proof g.po_pid hids ;
    let valid = if WpAnnot.is_proved proof then True else Maybe in
    let updater = 
      try Hashtbl.find updaters g.po_updater 
      with Not_found ->
        Wp_parameters.fatal
          "No status-updater found for model '%s'" g.po_model
    in
    let status = Checked{emitter=g.po_updater;valid=valid} in
    let target = WpAnnot.target proof in
    let depends = WpAnnot.dependencies proof in
    ignore (updater target depends status) ;
    if valid=True then WpAnnot.consolidate_loop proof ;
  with
    | Log.AbortFatal plugin ->
        Wp_parameters.failure
          "Update-status failed (problem in %s)" plugin
    | err ->
        Wp_parameters.failure
          "Update-status failed (%s)" (Printexc.to_string err);
        raise err