generic type T_Element is digits <>; nb_rows: Positive; nb_cols: Positive; package Google_Naive is type T_Google is limited private; function "*"(left, right: T_Google) return T_Google with Pre => left'Length(2) = right'Length(1), Post => "*"'Result'Length(1) = left'Length(1) and "*"'Result'Length(2) = right'Length(2); function "+"(left, right: T_Google) return T_Google with Pre => left'Length(1) = right'Length(1) and left'Length(2) = right'Length(2); function "*"(left: in T_Google; right: T_Element) return T_Google; function "/"(left: in T_Google; right: T_Element) return T_Google with Pre => right /= 0.0; procedure initialize(mat: in out T_Google); function ones(rows, cols: Positive) return T_Google; procedure insert(mat: in out T_Google; i, j: Natural; elm: T_Element); --function transpose(mat: in T_Google) return T_Google; private type T_Google is array (0..nb_rows-1, 0..nb_cols-1) of T_Element; end Google_Naive;