А, все, разобрался, вот пример, почему нельзя:

## Код:
```
PROCEDURE P (a: POINTER TO ARRAY OF A);
  VAR c: POINTER TO RECORD (A) END;
BEGIN a[0] := c                                            (*)
END P;
```


После P(b) фактический массив а^ имеет тип элемента B, что несовместимо по присваиванию в (*) и не может быть выявлено при компиляции.

Но что если сделать
PROCEDURE Q (IN a: ARRAY OF A);

При Q(b) фактический массив a^ по-прежнему имеет тип элемента В, что  опять несовместимо по присваиванию; однако присваивание запрещено, поскольку исп режим IN. И дальше передать a[i] в качестве VAR и OUT параметра нельзя - получается, а[i] защищено и неизменно; изменяться могут только его поля, что не нарушает целостности, поскольку в любом фактическом a[i] есть все поля A.

Или все-таки есть контрпример или опровергающее рассуждение?