with Ada.Containers.Functional_Vectors; with Ada.Containers; use Ada.Containers; generic type Element_Type (<>) is private; type Element_Model (<>) is private; with function Model (X : Element_Type) return Element_Model is <>; with function Copy (X : Element_Type) return Element_Type is <>; package Aspect2 with SPARK_Mode is pragma Unevaluated_Use_Of_Old (Allow); type Vector is private; function Length (V : Vector) return Natural; procedure Foo; private type Element_Access is access Element_Type; type Element_Array is array (Positive range <>) of Element_Access with Dynamic_Predicate => Element_Array'First = 1; type Element_Array_Access is access Element_Array; type Vector is record Top : Natural := 0; Content : Element_Array_Access; end record; function Length (V : Vector) return Natural is (V.Top); end Aspect2;