OK, давайте возьмём FRP функцию const
, которая игнорирует любой "внешний" недетерминизи и всегда возвращает одно и то же значение. Теперь у нас и внешний недетерминизм исчез, если измерять его степенью детерминированности итогового значения? Или как? В чём разница с недетерминированностью порядка вычисления?
Про детерминизм, подумавши ) FP тут не является чем-то особенным.
Ведь, никакая модель в Тьюринг-эквивалентной системе не позволяет выразить или породить недетерминированность. Источники любой наблюдаемой недетерминированности всегда внешние по отношению к этой модели.
Эти источники, наверное, можно разделить на два типа, по способу прихода в систему (условно): прямой канал, или косвенный канал.
Косвенные каналы не являются самодостаточными, и привносят свою часть только при наличии прямого канала.
Так, в FP системе, порядок вычисления аргументов — это косвенный канал, который сам по себе не вносит нетедерменированности. Но, при наличии прямого канала ввода-вывода, даже обернутого в чистые функции, — этот косвенный канал тоже начинает влиять. Т.е., демон, сидящий "снаружи" и каждый раз указывающий, с какого конца вычисляются аргументы — может теперь повлиять на результат в некоторых случаях.
А в обычной процедурной системе, при наличии прямого канала, несущего текущее время, побочным каналом может быть долгота выполнения операций, или ее зависимость от температуры, работы кэша, или еще чего-то. Похоже на side-channel attack в криптографии )