Дело в том, что в каждый модуль, где используется константа, её значение внедряется при компиляции. Иногда уже в неявном, вычисленном виде.

Например:

x := 2* MyMath.pi - компилятор возьмёт значение константы pi из модуля MyMath, умножит на 2 и в ваш модуль запишет прямо в код результат. А ссылка на константу другого модуля вставляется именно затем, чтобы отследить, если она поменялась, и потребовать от программиста перекомпиляции. Вообще, раз введённые константы менять не следует.

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

Делается так:

## Код:
```
MODULE Demo;

  CONST
    _myVal = 10;

  VAR
    myVal-: INTEGER;

BEGIN
  myVal := _myVal
END Demo;
```


Практический пример: есть константы с обозначениями валют. Они неизменны, но могут появляться новые. Удобно иметь величину, которая хранит максимальную существующую константу валюты (для разных переборов).

## Код:
```
CONST
    wmz* = 101; wmr* = 102; wmb* = 103; ...
    _lastWm = 103;
   VAR
     lastWm-: INTEGER
```


Тогда во внешних модулях можно спокойно, устойчиво к любому добавлению констант, перебирать:

## Код:
```
i := Types.wmz;
WHILE i <= Types.lastWm DO
  ...
  INC(i)
END
```
