Итак, некоторое время назад я сначала попросил кого-то сказать мне, что call / cc может разрешить объекты доказательства для классических доказательств путем реализации закона Пирса. Недавно я немного подумал над этой темой и не могу найти в ней недостаток. Однако я не могу видеть, чтобы кто-то еще говорил об этом. Это кажется пустым обсуждением. Что дает?
Мне кажется, что если в каком-то контексте у вас есть конструкция типа то 1 из двух вещей верен. Либо у Вас есть доступ к экземпляру ⊥ как - то в текущем контексте , в котором управление потоком случае никогда бы не достичь здесь , и мы с уверенностью предположить , что бы ни ИЛИ , учитывая , что е : ¬ ( ¬ P ) означает F : ( P → ⊥ ) → ⊥ Единственный способ, которым f может вернуть ⊥ - это создать экземпляр Pи применяя два аргумента (пример . В таком случае уже был какой-то способ построения экземпляра P ; кажется разумным для call / cc вытащить эту конструкцию для меня. Мои рассуждения здесь кажутся мне несколько подозрительными, но мое замешательство сохраняется. Если call / cc не просто создает экземпляр P из воздуха (я не понимаю, как это), то в чем проблема?
У некоторых хорошо типизированных терминов, не содержащих call / cc, нет нормальных форм? Есть ли какое-либо другое свойство таких выражений, которое вызывает у них подозрение? Есть ли причина, по которой конструктивисту не нравится call / cc?
Ответы:
Конструктивная математика - это не просто формальная система, а понимание того, что такое математика. Иными словами, не каждый вид семантики принимается конструктивным математиком.
Для конструктивного математикар ∨ ¬ р
call/cc
выглядит как измена. Рассмотрим, как мы видим используя :call/cc
call/cc
Конструктивное понимание дизъюнкции - это алгоритмическая разрешимость , но вышесказанное вряд ли принимает какие-либо решения. В качестве теста конструктивный математик может спросить вас, как
call/cc
помогает доказать, что каждая машина Тьюринга останавливается или расходится. И какая программа свидетельствует об этом? (Это должен быть Остановочный Оракул.)источник
Как вы заметили, в этом смысле возможна конструктивная интерпретация классической логики. Тот факт, что классическая логика эквивалентна интуиционистской логике (скажем, арифметике Хейтинга), был известен довольно давно (уже в 1933 году, например, Годель ) с использованием перевода с двойным отрицанием.
К более сложному аргументу, можно показать , что арифметика Пеано является консервативной над HA для заявления. Суть результата состоит в том, что классические доказательства Π 0 2 с использованием c a l l / c c имеют то же вычислительное содержание, что и утверждение без этой конструкции (с помощью преобразования CPS ).Π02 Π02 c a l l / c c
Однако это не верно для операторов выше : заявления в Й 0 3 , доказуемы в PA, не могут иметь нормальную форму поддающегося извлечению свидетеля! Компьютерные ученые могут не заботиться о вычислениях с доказательствами на этом уровне, но это несколько неудобно для философских соображений: доказали ли мы что-то существование или нет?Π02 Σ03
Я считаю , что это подводит итог , почему «фиксация» неконструктивные логик добавления может быть неудовлетворительными.c a l l / c c
Тем не менее, существует много работы, посвященной вычислительным аспектам вычислений в рамках "классической структуры Карри-Ховарда", например, машина Кривина, исчисление Париго ( ) и многие другие. Смотрите здесь для обзора.λ μ¯¯¯μ~
Изменить: очень актуальный вопрос о mathoverflow появляется здесь: /mathpro/29577/solved-fter-calculus-as-programming-language
источник
inr (fun x -> callcc(...))
Я согласен с ответом Андрея и Коди. Тем не менее, я думаю, что стоит также упомянуть, почему конструктивисты должны заботиться об управляющих операторах (call / cc).
Еще одно преимущество, о котором должен заботиться конструктивист, заключается в том, что управляющие операторы показывают способ построения расширения интуиционистской логики Карри-Ховарда, которое все еще конструктивно. Например, ограничениеп Σ01
источник