let call_instantiation specif =

  let main_role = specif#get_main_role in

  (try
    (role_def_list :=
      List.map
        (function
            Basic(y) as x -> (y#get_name,x)
          | Composition(y) as x -> (y#get_name,x))
        specif#get_roles;
     goals := specif#get_goals;
     instances_schema := unfold_instances main_role;
     if !debug_level >= 2 then
       (prerr_endline ("%% Schema of instances: "
                       ^(string_of_instances !instances_schema)));
     if !debug_level >= 5 then
       Utils_debug.dump());
  with x ->
    (handleSemanticError
       (20,"Instantiation.call_instantiation: An error occurred during the computation in the Instantiation module",
        "","","","");
     Utils_debug.dump();
     raise x));

  List.map snd !basic_role_instances;