let print_section_types (() : unit) : unit =
  (* Computation of the list of ids of basic roles *)
  let role_ids = 0::(List.map snd !Globals.player_to_role) in
  (*
     The key  in the [identifiers_type_table] is a string representing 
     a type of an identifier as it will be printed. The [int] is the [string_id]
     corresponding to the identifier.
   *)

  let identifiers_type_table = (Hashtbl.create 15 : (string,int) Hashtbl.t) in
  let identifiers_type_table_key_list = ref ([]: string list) in
  Hashtbl.iter
    (fun x y ->
      (* If x is a variable, it has to be declared in a basic role *)
        if (not_excluded_type y)
           && (List.mem (Globals.string_id#get_role_id x) role_ids) then
          (let y_string = (atoms_type_to_string false y) in
           Hashtbl.add identifiers_type_table y_string x;
           identifiers_type_table_key_list := 
             Utils.insert_with_no_copy y_string !identifiers_type_table_key_list))
    Globals.type_table#get_tab;

  List.iter
    (fun a ->
      let list_of_identifiers_of_type_a = 
        Utils.remove_duplicate
          (List.map 
             (Globals.string_id#get_name; ) 
             (Hashtbl.find_all identifiers_type_table a))
      in
      List.iter (fun t -> (add_type (replace "dummy_" "" t) [a])) list_of_identifiers_of_type_a;)
    !identifiers_type_table_key_list