let print () =
  begin
    let hmap = Hip.create 131 in
    let forest = Consolidation_tree.get_all () in
    let globals = ref [] in
    let reports = ref Kernel_function.Map.empty in
    Self.feedback "Computing properties status..." ;
    List.iter
      (fun t ->
         let ip = t.Consolidation_tree.property in
         let proofs = get_proofs hmap ip in
         if (if OnlyValid.get () then proofs <> [] else truethen
           match Property.get_kf ip with
           | None -> globals := ip :: !globals
           | Some kf ->
             let ipfs =
               try Kernel_function.Map.find kf !reports with Not_found -> []
             in
             reports := Kernel_function.Map.add kf (ip::ipfs) !reports)
      forest;
    Log.print_on_output "%t"
      (fun fmt ->
         if !globals = [] && Kernel_function.Map.is_empty !reports then
           Format.fprintf fmt "No properties status@." ;
         let partials = ref 0 in
         let completes = ref 0 in
         let untried = ref 0 in
         report ~partials ~completes ~untried hmap fmt "Global Properties" !globals ;
         Kernel_function.Map.iter
           (fun kf ips ->
              let title =
                Printf.sprintf "Properties for Function '%s'"
                  (Kernel_function.get_name kf)
              in report ~partials ~completes ~untried hmap fmt title ips
           ) !reports ;
         let s = !untried + !partials + !completes in
         Format.fprintf fmt "%s@\n" bar ;
         Format.fprintf fmt "  No proofs       : %4d@\n" !untried ;
         Format.fprintf fmt "  Partial proofs  : %4d@\n" !partials ;
         Format.fprintf fmt "  Complete proofs : %4d@\n" !completes ;
         Format.fprintf fmt "  Total           : %4d@\n" s ;
         Format.fprintf fmt "%s@." bar ;
      ) ;
  end