Чи може хтось вказати мені на посилання на не визначеність модуля безперервності, функціонального в PCF?
Андрій Бауер написав дуже приємну публікацію в блозі, вивчивши деякі питання більш детально, але я підсумую лише трохи його публікації, щоб дати деякий контекст цьому питанню. Беровскій цьому безліч послідовностей натурального числа, або , що еквівалентно безліч функцій від натуралів до Naturals . З цього питання ми обмежимо нашу увагу лише потоками, які обчислюються.N → N
Тепер функція неперервна, якщо для кожного значення залежить лише від кінцевої кількості елементів , і воно обчислено безперервно, якщо ми можемо обчислити верхню пов'язане з тим, скільки елементів xs потрібно. У деяких моделях обчислень фактично можна записати програму \ mathsf {modulus}: (B \ to \ bool) \ to B \ to \ N, яка виконує обчислювальну функцію на просторі Байра та елементі простору Байра, і повертає верхню межу на кількість елементів потоку. x s ∈ B f ( x s ) x s x s m o d u l u s : ( B → b o o l ) → B → N
Одним із фокусів для цього є використання локального сховища для запису максимального індексу у потік, що бачиться:
let modulus f xs =
let r = ref 0 in
let ys = fun i -> (r := max i !r; xs i) in
f ys;
!r
Звичайно, ys
аргумент - це вже не суто функціональна програма. Мій інтерес до цієї програми виходить з того , що він робить тільки використання місцевого магазину, і тому є екстенсіонально чистим. Я працюю над (серед іншого) імперативним програмуванням вищого порядку, і розробляю теорії типів, які могли б класифікувати це як чисту функцію.
Є і більш практичних прикладів, що стосуються таких предметів, як запам'ятовування та об'єднання з'єднань, але я вважаю це особливо гарним прикладом.