Это дополнительный вопрос к
В чем разница между доказательствами и программами (или между предложениями и типами)?
Какая программа будет соответствовать неконструктивному (классическому) доказательству вида ? (Предположим, что является интересным разрешимым отношением, например, тая TM не останавливается за шагов.)e k
(ps: я публикую этот вопрос отчасти потому, что мне интересно узнать больше о том, что Нил подразумевает под « переводом Годеля-Генцена - трансформация продолжения» в его комментарии .)
Ответы:
Это интересный вопрос. Очевидно, нельзя ожидать наличия программы, которая решает для каждого , выполняется ли или нет, так как это решило бы проблему остановки. Как уже упоминалось, существует несколько способов вычислительной интерпретации доказательств: расширения Карри-Ховарда, реализуемость, диалектика и так далее. Но все они вычислили бы теорему, которую вы упомянули, более или менее следующим образом.∀ k T ( e , k )е ∀ к Т( е , к )
Для простоты рассмотрим эквивалентную классическую теорему
(1)∃ я ∀ j ( ¬ T( e , j ) → ¬ T( е , я ) )
Это (конструктивно) эквивалентно упомянутому, потому что, учитывая мы можем решить, выполняется ли или нет, просто проверив значение . Если выполнено, то и, следовательно, . Если, с другой стороны, не выполняется, то в силу (1) имеем что влечет .∀ K T ( е , K ) ¬ T ( е , я ) ¬ Т ( е , я ) ∃ я ¬ Т ( е , я ) ¬ ∀ я Т ( е , я ) ¬ Т ( е , я ) ∀ J ( ¬ T ( e , j ) → ⊥ )я ∀ к Т( е , к ) ¬ T( е , я ) ¬ T( е , я ) ∃ я ¬ T( е , я ) ¬ ∀ я T( е , я ) ¬ T( е , я ) ∀ j ( ¬ T( e , j ) → ⊥ ) ∀ j T( e , j )
Теперь снова мы не можем вычислить в (1) для каждого заданного потому что мы снова решили бы проблему остановки. То, что сделали бы все упомянутые выше интерпретации, это посмотреть на эквивалентную теоремуея е
(2)∀ ф∃ я'( ¬ T( е , е( я') ) → ¬ T( е , я') )
Функция называется функцией Хербранда. Он пытается вычислить контрпример для каждого данного потенциального свидетеля . Ясно, что (1) и (2) эквивалентны. Слева направо это конструктивно, просто возьмите в (2), где - предполагаемое свидетельство (1). Справа налево нужно рассуждать классически. Предположим, (1) не было правдой. Затем,j i i ′ = i iе J я i′=i i
(3)∀i∃j¬(¬T(e,j)→¬T(e,i))
Пусть будет функцией, свидетельствующей об этом, т.е.f′
(4)∀i¬(¬T(e,f′(i))→¬T(e,i))
Теперь возьмем в (2) и получим для некоторого . Но, взяв в (4), мы получим отрицание этого противоречия. Отсюда (2) влечет (1). ( ¬ T ( e , f ′ ( i ′ ) ) → ¬ T ( e , i ′ ) ) i ′ i = i ′f=f′ (¬T(e,f′(i′))→¬T(e,i′)) i′ i=i′
Итак, мы имеем, что (1) и (2) классически эквивалентны. Но интересно то, что (2) теперь имеет очень простое конструктивное свидетельство. Просто возьмите если не выполняется, потому что тогда вывод (2) верен; или же возьмите если выполняется , потому что тогда не выполняется, и предпосылка (2) ложна, что делает его снова верным.T ( e , f ( 0 ) ) i ′ = 0 T ( e , f ( 0 ) ) ¬ T ( e , f ( 0 ) )i′=f(0) T(e,f(0)) i′=0 T(e,f(0)) ¬T(e,f(0))
Следовательно, способ вычислительной интерпретации классической теоремы, подобной (1), состоит в том, чтобы посмотреть на (классически) эквивалентную формулировку, которая может быть конструктивно доказана в нашем случае (2).
Упомянутые выше различные интерпретации расходятся только в том, как всплывает функция . В случае реализуемости и интерпретации диалектики это явно дается интерпретацией в сочетании с некоторой формой отрицательного перевода (например, Геделя-Генцена). В случае расширений Curry-Howard с операторами call-cc и продолжением функция возникает из-за того, что программе разрешено «знать», как будет использоваться определенное значение (в нашем случае ), поэтому является продолжением программы около точки, где вычисляется.е I е If f i f i
Другим важным моментом является то, что вы хотите, чтобы переход от (1) к (2) был «модульным», т. Е. Если (1) используется для доказательства (1 '), то его интерпретация (2) должна использоваться аналогичным образом. чтобы доказать толкование (1 '), скажите (2'). Все упомянутые выше интерпретации делают это, включая отрицательный перевод Геделя-Генцена.
источник
Хорошо известно, что классическая и интуиционистская арифметика равнозначны.
Одним из способов показать это является «негативное вложение» классической логики в интуиционистскую логику. Итак, пусть - формулы классической арифметики первого порядка. Теперь мы можем определить формулу интуиционистской логики следующим образом:ϕ
Заметьте, что - это, в основном, гомоморфизм, который вставляется в дополнительные не-не-везде, за исключением того, что при дизъюнкциях и экзистенциалах он использует дуальность де Моргана, чтобы превратить их в союзы и универсалии. (Я совершенно уверен, что это не точный перевод Геделя-Генцена, поскольку я подготовил его для этого ответа - в основном все, что вы пишете с использованием двойного отрицания + двойственности де Моргана, будет работать. Это разнообразие на самом деле оказывается важным для вычислительные интерпретации классической логики; см. ниже.)G(ϕ)
Во-первых: очевидно, что этот перевод сохраняет классическую истину, так что истинно тогда и только тогда, когда - классически.G(ϕ) ϕ
Во-вторых, это менее очевидно, но все же имеет место, что для формул в фрагмент, доказуемость в интуиционистской и классической логике совпадает. Способ доказать это - сначала взглянуть на формулы, взятые из этой грамматики:∀,⟹,∧,¬
И тогда мы можем доказать в качестве леммы (индукцией по ), что выводимо интуитивистски. Итак, теперь мы можем показать эквивалентность отрицательных формул, выполнив индукцию по структуре доказательства (скажем, в последовательном исчислении) и использовать предыдущую лемму для моделирования закона исключенной середины.A G(A)⟹A
Итак, как вы должны думать об этом интуитивно?
Во-первых, теоретико-доказательственный взгляд. Если вы посмотрите на правила последовательного исчисления, вы увидите, что единственное место, где классическая и интуиционистская логика серьезно отличаются, - это правила дизъюнкции и экзистенциалов. Таким образом, мы используем этот факт, чтобы показать, что доказательства в одной логике этих формул могут быть переведены в доказательства в другой. Это показывает, как думать о конструктивной логике как о расширении классической логики с двумя новыми связями: « и . То, что мы называем «классическим существованием» и «классическим дизъюнкцией», были просто аббревиатурами, включающими , конъюнкт и отрицание, и поэтому, чтобы говорить о реальном существовании, нам нужно было ввести новые связки.∃ ∨ ∀
Во-вторых, есть топологический вид. Теперь модель классической логики (как семейства множеств) представляет собой булеву алгебру (т. Е. Семейство подмножеств, замкнутых относительно произвольных объединений, пересечений и дополнений). Оказывается, что модель интуиционистской логики представляет собой топологическое пространство , а предложения интерпретируются как открытые множества. Их интерпретация отрицания является внутренней частью дополнения, и тогда легко показать, что , что означает, что двойное отрицание отправляет нас в наименьший колпан, покрывающий каждое открытое --- и Clopens образуют булеву алгебру.¬¬¬P=¬P
Теперь, благодаря Карри-Говарду, мы знаем, как интерпретировать доказательства в интуиционистской логике как функциональные программы. Итак, один возможный ответ (но не единственный) на вопрос «каково конструктивное содержание классического доказательства?» является следующим:
Итак, давайте посмотрим на перевод . Таким образом, это говорит о том, что конструктивное содержание исключенной середины - это то же самое, что сказать, что дело не в том, что и выполняются, то есть не противоречат. Так что в этом смысле на самом деле не так много вычислительного содержания для закона исключенной середины.G(A∨¬A)=¬(¬G(A)∧¬¬G(A)) ¬P ¬¬P
Чтобы увидеть, что это конкретно, вспомним, что конструктивно отрицание определяется как . Таким образом, эта формула . Следующий фрагмент кода Ocaml будет иллюстрировать:( ( G ( A )¬A==A⟹⊥ ((G(A)⟹⊥)∧((G(A)⟹⊥)⟹⊥))⟹⊥
То есть, если вы получаете не-А и не-не-А, вы можете просто передать первое отрицание второму, чтобы получить противоречие, которое вы хотите.
Теперь, что является продолжением преобразования в стиле передачи?
В настоящее время,
Я видел «a» преобразование CPS, поскольку, как я упоминал ранее, существует много отрицательных переводов, которые позволяют вам доказать эту теорему, и каждый из них соответствует разной трансформации CPS. В операционном плане каждое преобразование соответствует другому порядку оценки . Таким образом, не существует уникальной вычислительной интерпретации классической логики, поскольку у вас есть выбор, и выбор различий имеет очень разные эксплуатационные характеристики.
источник
Есть целые конференции на тему неконструктивных доказательств как программ , и я не специалист по этому вопросу. Выше Нил Кришнасвами сослался на более длинный ответ, который он готовит, что, судя по его работе здесь, будет превосходным. Это просто вкус ответа.
Оказывается, тип продолжения звонка с током соответствует предложению, известному как закон Пирса , который можно использовать для доказательства закона исключенного среднего ( ). Программа LEM может быть написана с использованием callcc. В Coq:∀P,P∨¬P
дает код O'Caml:
Самое чистое введение в это я видел в книге Тима Гриффина «Формула понятия контроля» .
источник
callcc
в Схемуcallcc
. Тогда вы действительно можете попробовать.