Может ли кто-нибудь указать мне на ссылку на неопределяемость модуля функционала непрерывности в PCF?
Андрей Бауэр написал очень хороший пост в блоге, в котором более подробно рассматриваются некоторые вопросы, но я кратко изложу его пост, чтобы дать некоторый контекст этому вопросу. Бэровский этом множество последовательностей натурального числа, или , что эквивалентно множество функций от натуралий к Naturals N → N . В этом вопросе мы ограничимся только потоками, которые можно вычислить.
Теперь функция непрерывна, если для каждого x s ∈ B значение f ( x s ) зависит только от конечного числа элементов x s , и оно вычислимо непрерывно, если мы действительно можем вычислить верхнюю границу на сколько элементов х годов необходимы. В некоторых моделях вычислений, это на самом деле можно написать программу т о д у л у ев : ( B → B O который принимает вычислимую функцию на пространстве Бэра и элемент пространства Бэра и возвращает верхнюю границу для числа элементов потока.
Один из способов реализовать это - использовать локальное хранилище для записи максимального индекса в видимый поток:
let modulus f xs =
let r = ref 0 in
let ys = fun i -> (r := max i !r; xs i) in
f ys;
!r
Конечно, ys
аргумент больше не является чисто функциональной программой. Мой интерес к этой программе исходит из того , что он делает только использование местного магазина, и поэтому является экстенсионально чистым. Я работаю (помимо прочего) с императивным программированием высшего порядка и разрабатываю теории типов, которые могли бы классифицировать это как чистую функцию.
Есть и более практичные примеры, такие как запоминание и пул соединений, но я считаю это особенно красивым примером.