Несовместимость типов отчего получается? Оттого, что два открытых массива типа ARRAY OF ARRAY OF INTEGER могут иметь совершенно различное количество элементов по обеим размерностям. Они ведь сформированы (объявлены) извне нашей процедуры. И то, что мы передаём их оба
как бы одного типа внутрь процедуры, совсем не гарантирует, что они оба имеют одну размерность. Могут иметь, а могут и нет. Поэтому код их присвоения друг другу, строго говоря, некорректен.
Но если внутри нашей процедуры сформировать динамический массив той же мерности, что и входной массив-параметр, такое копирование должно сработать.
COPY только для строк (ARRAY OF CHAR), т.к. она только для копирования нуль-строковых данных. И если строка больше, чем принимающий её массив, она будет урезана до его размера + символ с кодом 0X в конце, который обозначает конец строки. Впрочем, это касается только Оберона-1, 2, AO и КП, в O7 со строками дело обстоит несколько иначе.
С помощью SYSTEM.MOVE можно такого накопировать, что ой

Лучше не пользоваться, это только для системных нужд.
Так что я предлагаю? Динамические массивы. Видимо, только они подойдут. Если нет других предложений
