Может мы по-разному понимаем слово "декларативность". Но я считаю, что дело не только в декларативности, а случайность, то есть недетерминированность играет очень важную роль. Например, на двух процессорах одновременно запускаются две одинаковые задачи. Какая из них раньше закончится, это не известно, на это может влиять много факторов: есть данные в кэше или нет, все данные всегда правильно считываются или когда-то произошла ошибка четности, которую процессор автоматически исправлял. То есть хотя задачи и одинаковые, но результат может быть недетерминирован. Также если, допустим, два процессора одновременно начинают работать, один должен x := 1, а другой x := 2, то какой будет в конце результат не определено, то есть недетерминировано, может быть 1 или 2.
Настоящий недетерминированный цикл Дейкстры должен выдать ответ 1 или 2. А детерминированный цикл Дейкстры, который реализован в Oberon-07, всегда будет выдавать 1.
Код:
{TRUE}
p := TRUE;
WHILE p DO
x := 1;
p := FALSE;
ELSIF p DO
x := 2;
p := FALSE;
END;
{ (x = 1) OR (x = 2) }