Является ли класс примитивных рекурсивных функционалов эквивалентным классу функций, которые Фетус заканчивает?

9

Плод, если вы не слышали об этом, можно прочитать здесь . Он использует систему «матриц вызовов» и «графов вызовов» для поиска всех «поведений рекурсии» рекурсивных вызовов в функции. Чтобы показать, что функция завершается, это показывает, что все рекурсивные поведения рекурсивных вызовов, выполняемых к функции, подчиняются определенному «лексикографическому порядку». Это проверка завершения позволяет все примитивные рекурсивные функции и функции, такие как функция Аккермана. В основном это допускает примитивную рекурсию с несколькими аргументами. Это также в основном проверка завершения Агды; Я полагаю, что у Coq также есть некоторые подобные возможности, хотя, возможно, более общие.

Из чтения статьи «Общее функциональное программирование» Д. А. Тернера . Он объясняет, что предложенный им язык сможет выразить все «примитивно-рекурсивные функционалы», как это видно в Системе Т, изученной Годелем. Далее он говорит, что эта система «как известно, включает в себя каждую рекурсивную функцию, совокупность которой можно доказать в логике первого порядка».

Доза Плода разрешает все примитивно-рекурсивные функционалы? Если да, то разрешены ли функции, которые не являются примитивными рекурсивными функционалами? Можно ли привести цитату для ответа на этот вопрос? (это на самом деле не нужно, так как мне просто интересно; просто было бы неплохо немного пообщаться)

Дополнительный вопрос: примитивные рекурсивные функционалы имеют очень краткое определение в терминах комбинаторов: типизированные S и K (которые не могут выразить комбинаторы с фиксированной точкой), ноль, функция-преемник и функция итерации; это оно. Существуют ли другие, более общие, такие языки, которые имеют такое краткое определение и в котором заканчиваются все выражения?

Джейк
источник
На Agda против Coq: я всегда читаю проверку завершения Agda, чтобы быть более продвинутой и принимать больше функций, ваша первая претензия на обратное (это хорошее правило при сравнении Agda с Coq, за исключением отсутствия тактики Agda: Agda является более исследовательским и открытым для расширений, чья стабильность менее установлена). Андреас Абель работал над еще более продвинутыми контроллерами завершения, основанными на типоразмерах, см. Его работу над MiniAgda, а также эту статью .
Blaisorblade
Есть «принять больше определений функций» и «иметь больший класс вычислимых функций». Два несопоставимы. Агда выигрывает по первому счету, но Кок явно выигрывает по второму.
Коди
Я должен уточнить, что я совсем не использовал Coq, а Agda - немного. Казалось, что из того, что я читал, Coq был способен определить более широкий класс вычислимых функций, но я не знал, поэтому я сказал: «Я считаю, что Coq также имеет некоторые аналогичные возможности, хотя, возможно, более общие»; «верить» и «возможно» использовались, чтобы передать то, чего я не знал.
Джейк

Ответы:

7

Да, Fetus Checker может проверять все в T-коде Геделя. Вы можете показать это, используя средство проверки, чтобы показать, что оператор итерации в T завершается. Например, будет работать следующее определение:

яTер:A(AA)NAяTеряе0знак равнояяTеряе(N+1)знак равное(яTеряеN)

Это очень легко для проверки плода (или большинства других проверок завершения), потому что это явно структурно рекурсивное определение.

И Agda, и Coq позволяют доказать завершение функций, выходящих далеко за рамки того, что доказуемо является полным в арифметике первого порядка. Функция, которая делает это возможным, заключается в том, что они позволяют определять типы с помощью рекурсии данных, что называется "большим исключением". (В теории множеств ZF аксиомная схема замещения служит примерно той же цели.)

Легким примером чего-то, что выходит за пределы T, является последовательность самого T Геделя! Мы можем дать синтаксис в виде типа данных:

data T : Set where 
   N : T 
   _⇒_ : T → T → T

data Term : T → Set where 
   zero : Term N
   succ : Term (N ⇒ N)
   k    : {A B : T} → Term (A ⇒ B ⇒ A)
   s    : {A B C : T} → Term ((A ⇒ B ⇒ C) ⇒ (A ⇒ B) ⇒ A ⇒ C)
   r    : {A : T} → Term (A ⇒ (A ⇒ A) ⇒ N ⇒ A)
   _·_  : {A B : T} → Term (A ⇒ B) → Term A → Term B

Обратите внимание, что зависимость типа позволяет нам определить тип данных терминов, содержащих только хорошо типизированные термины T. Затем мы можем дать функцию интерпретации для типов:

interp-T : T → Set 
interp-T N       = Nat 
interp-T (A ⇒ B) = (interp-T A) → (interp-T B)

Это говорит о том, что это Nдолжны быть натуральные числа Агды, а стрелка Т должна интерпретироваться как пространство функций Агды. Это «большое» исключение, потому что мы определяем множество с помощью рекурсии для структуры типа данных T.

Затем мы можем определить функцию интерпретации, показывающую, что каждый член Т Геделя может быть интерпретирован термином Агды:

interp-term : {A : T} → Term A → interp-T A
interp-term zero    = 0 
interp-term succ    = \n → n + 1
interp-term k       = \x y → x
interp-term s       = \x y z → x z (y z)
interp-term r       = Data.Nat.fold 
interp-term (f · t) = (interp-term f) (interp-term t)

(У меня нет Агды на этом компьютере, поэтому, несомненно, есть некоторые пропущенные операции импорта, декларации исправлений и опечатки. Исправление - это упражнение для читателя, который также может быть редактором, если они захотят.)

Я не знаю, какова сила согласованности Агды, но Бенджамин Вернер показал, что Исчисление Индуктивных Конструкций (исчисление ядра Кока) равнозначно ZFC плюс счетное число недоступных кардиналов.

Нил Кришнасвами
источник
Обратите внимание, что вы не использовали большое исключение в вашем примере. Большое исключение на самом деле не добавляет вычислительной мощности. Непредсказуемость делает: система F не имеет первого, но может выражать функции, не выражаемые в системе T.
cody
@cody: Функция interp-T вычисляет набор из термина, который для меня выглядит большим исключением! Это, безусловно, тот случай, когда большие исключения добавляют силу: теория типов Мартина-Лоэфа не может даже получить несогласованность из 0 = 1 без большого исключения. (Чтобы увидеть это, обратите внимание, что без юниверсов / больших исключений вы можете стереть все зависимости и получить просто напечатанный термин: это то, что Харпер и Пфеннинг сделали в своем доказательстве адекватности для LF.)
Нил Кришнасвами
Извините: да, функция interp-T действительно использует большое исключение. Я также согласен, что доказательство 0! = 1 действительно требует этого. Однако определение вычислимых функций - это не то же самое, что доказательство математических утверждений . Мой ответ проясняет это немного. Например, чистое исчисление конструкций не может доказать 0! = 1. Однако оно может относительно легко определить функцию Аккермана.
Коди
Это показывает, что Agda в более общем смысле может написать интерпретатор для системы T, но не показывает ли она погоду или нет, Fetus, язык, который не зависит от типа, является более общим. Может ли плод сделать это? Сможет ли Агда сделать это, если бы не «большая ликвидация»?
Джейк
1
Документация Агды говорит, что ее проверка завершения использует алгоритм Fetus. Если вы взяли T и расширили его с помощью сопоставления с образцом и рекурсивными определениями, проверенными Fetus, вы не сможете написать интерпретатор для T в нем. Фактически, вы не изменили бы функции, вычисляемые с помощью T вообще - все порядки завершения, которые вычисляет Fetus, доказуемо обоснованы в арифметике Пеано. (См. Ответ Коди.) Алгоритм Fetus позволяет вам писать больше определений без изменения набора функций, которые вы можете вычислять. Большие исключения Agda фактически увеличивают набор функций.
Нил Кришнасвами
3

В качестве пояснения я должен отметить, что Fetus разработан Андреасом Абелем , который также разработал оригинальную проверку завершения для Agda и с тех пор работал над более продвинутыми методами завершения .

Ответ на ваш вопрос может быть немного разочаровывающим: класс функций из N в Nэто именно те функции, которые могут быть определены в системеF, Причина этого: вышеупомянутый класс равен доказуемо завершающим функциям в арифметике второго порядка (пA2) который в свою очередь равен функциям, определяемым в системе F(см., например, Доказательства и Типы , глава 11). Кроме того, если вы удаляете полиморфизм, вы переходите к функциям, определяемым впAчто совпадает с определяемым в системе T,

Опять же, резон для этого заключается в том, что уменьшение, охваченное «матрицами вызовов», доказуемо обоснованно , и что доказательство может быть выполнено полностью впA,

Тем не менее, это не означает, что Плод не более полезен, чем системаT! На практике требуется более сложный анализ завершения, чтобы иметь возможность принимать определенные представления вычислимых функций. Вам не нужно делать сложные доказательства в арифметике Пеано каждый раз, когда вы пишете, например, функцию объединения. Таким образом, в этом отношении Fetus является очень мощным и позволяет вам определять функции таким образом, который не будет принят ни Coq, Agda, ни какой-либо другой обычной системой доказательства.

Коди
источник
как может класс функций, которые доказуемо заканчиваются (PA ^ 2), быть эквивалентными классу функций в системе F, которые, насколько я знаю, не доказуемо завершать? Также я не понимаю, как вы отвечаете на мой вопрос. Вы говорите, что система T имеет больший класс вычислимых функций, или вы говорите, что это плод? Я думаю, что в вашей логике произошел скачок, который ожидал, что у меня будет больше опыта, чем на самом деле. Кроме того, указанная вами ссылка, по-видимому, ведет к некорректной странице, которая отображается неправильно.
Джейк
Функции в системе F все заканчиваются. Fetus захватывает больший класс вычислимых функций, чем система T, но «случайно», если вы удаляете полиморфизм, тогда Fetus захватывает только систему T. Можете ли вы сказать мне, какая ссылка не работает для вас? (и какой браузер вы используете :)
Cody
1

Если под примитивно-рекурсивными функционалами вы имеете в виду примитивно-рекурсивные функции и знаете, что Fetus содержит функцию Аккермана, то Fetus не совпадает с классом функций pr, так как функция Ackermann не является примитивно-рекурсивной. Это было показано Аккерманом, а позже упрощенное доказательство было дано Росзой Петер в « Konstruktion nichtrekursiver Funktionen » 1935 года (к сожалению, только на немецком, насколько мне известно).

Если вы ищете более крупные классы рекурсивных функций, которые гарантированно завершатся, что может совпадать с классом функций, захваченных Фетусом, то вам может заинтересовать некоторая другая работа Россы Питера.

Функция Аккермана содержится в классе множественных рекурсивных функций, как это определено Росзой Петер в книге « Uber die mehrfache Rekursion », 1937. Неформально идея множественной рекурсии состоит в том, что вы можете иметь несколько рекурсивных переменных, которые могут измениться после рекурсивного шага. Напримере(a,б) может позвонить е(a,б-1) или е(a-1,б),

Еще более сильный класс дается концепцией трансфинитной рекурсии, описанной в « Zusammenhang der mehrfachen und transfiniten Rekursion » Розой Петер. Для трансфинитной рекурсии у вас есть одна рекурсивная переменная, которая может вызывать предшественников по специальному порядку<

Например, вы можете интерпретировать целое число как пару целых чисел и использовать порядок

(a,б)<(с,d)(a<сбd)(aсб<d)
Это может быть обобщено для троек целых чисел и так далее. Питер называет эти заказыω2,ω3и так далее. Вы можете пойти еще дальше и интерпретировать целое число как произвольное число целых. Позволятьпя быть я-ое простое число. Тогда мы можем рассмотретьZзнак равноп1Nп2Икс1п3Икс2... где N обозначает количество целых чисел, закодированных в Z и Иксясодержат респ. ценность. Она обозначает порядок для такого списка целых чисел, какωωи показывает по диагонали, что этот вид рекурсии сильнее, чем множественная рекурсия. Тем не менее, я не уверен, есть ли синтаксическая характеристика этого класса.

[править] Примитивные рекурсивные функции не совпадают с примитивными рекурсивными функционалами, как отмечено в комментарии ниже. Тем не менее, я думаю, что можно перенести концепцию трансфинитной рекурсии на функционалы. Однако не ясно, является ли он все еще более мощным по сравнению с функциональными настройками.

Джон Д.
источник
2
класс примитивно-рекурсивных функционалов конечного типа является более общим, чем класс примитивно-рекурсивных функций. Например, он может выражать функцию Аккермана и может быть замечен в системе Годеля Т.
Джейк,