package Loop_Optimization1 is
   type Number is range 0 .. 127;
   type Group_List is array (Positive range <>) of Number;
   subtype Index is Natural range 1 .. 5;
   function Groups (T : Integer) return Group_List;
   pragma Import (Ada, Groups);
 
   type Group_Chain (Length : Index := 1) is record
      Groups : Group_List(1 .. Length);
   end record;
   type Group_Chain_List is array (Positive range <>) of Group_Chain;
   function Group_Chains (T : Integer) return Group_Chain_List;
   pragma Import (Ada, Group_Chains);
   type R (I : Boolean) is null record;
 
   type R_Access is access R;
   type R_List is array (Positive range <>) of R_Access;
   type R_List_Access is access R_List;
   type D is record
      L : R_List_Access;
   end record;
   procedure Create (A : in out D; Val : Integer);
end Loop_Optimization1;