Плод, если вы не слышали об этом, можно прочитать здесь . Он использует систему «матриц вызовов» и «графов вызовов» для поиска всех «поведений рекурсии» рекурсивных вызовов в функции. Чтобы показать, что функция завершается, это показывает, что все рекурсивные поведения рекурсивных вызовов, выполняемых к функции, подчиняются определенному «лексикографическому порядку». Это проверка завершения позволяет все примитивные рекурсивные функции и функции, такие как функция Аккермана. В основном это допускает примитивную рекурсию с несколькими аргументами. Это также в основном проверка завершения Агды; Я полагаю, что у Coq также есть некоторые подобные возможности, хотя, возможно, более общие.
Из чтения статьи «Общее функциональное программирование» Д. А. Тернера . Он объясняет, что предложенный им язык сможет выразить все «примитивно-рекурсивные функционалы», как это видно в Системе Т, изученной Годелем. Далее он говорит, что эта система «как известно, включает в себя каждую рекурсивную функцию, совокупность которой можно доказать в логике первого порядка».
Доза Плода разрешает все примитивно-рекурсивные функционалы? Если да, то разрешены ли функции, которые не являются примитивными рекурсивными функционалами? Можно ли привести цитату для ответа на этот вопрос? (это на самом деле не нужно, так как мне просто интересно; просто было бы неплохо немного пообщаться)
Дополнительный вопрос: примитивные рекурсивные функционалы имеют очень краткое определение в терминах комбинаторов: типизированные S и K (которые не могут выразить комбинаторы с фиксированной точкой), ноль, функция-преемник и функция итерации; это оно. Существуют ли другие, более общие, такие языки, которые имеют такое краткое определение и в котором заканчиваются все выражения?
Ответы:
Да, Fetus Checker может проверять все в T-коде Геделя. Вы можете показать это, используя средство проверки, чтобы показать, что оператор итерации в T завершается. Например, будет работать следующее определение:
Это очень легко для проверки плода (или большинства других проверок завершения), потому что это явно структурно рекурсивное определение.
И Agda, и Coq позволяют доказать завершение функций, выходящих далеко за рамки того, что доказуемо является полным в арифметике первого порядка. Функция, которая делает это возможным, заключается в том, что они позволяют определять типы с помощью рекурсии данных, что называется "большим исключением". (В теории множеств ZF аксиомная схема замещения служит примерно той же цели.)
Легким примером чего-то, что выходит за пределы T, является последовательность самого T Геделя! Мы можем дать синтаксис в виде типа данных:
Обратите внимание, что зависимость типа позволяет нам определить тип данных терминов, содержащих только хорошо типизированные термины T. Затем мы можем дать функцию интерпретации для типов:
Это говорит о том, что это
N
должны быть натуральные числа Агды, а стрелка Т должна интерпретироваться как пространство функций Агды. Это «большое» исключение, потому что мы определяем множество с помощью рекурсии для структуры типа данных T.Затем мы можем определить функцию интерпретации, показывающую, что каждый член Т Геделя может быть интерпретирован термином Агды:
(У меня нет Агды на этом компьютере, поэтому, несомненно, есть некоторые пропущенные операции импорта, декларации исправлений и опечатки. Исправление - это упражнение для читателя, который также может быть редактором, если они захотят.)
Я не знаю, какова сила согласованности Агды, но Бенджамин Вернер показал, что Исчисление Индуктивных Конструкций (исчисление ядра Кока) равнозначно ZFC плюс счетное число недоступных кардиналов.
источник
В качестве пояснения я должен отметить, что Fetus разработан Андреасом Абелем , который также разработал оригинальную проверку завершения для Agda и с тех пор работал над более продвинутыми методами завершения .
Ответ на ваш вопрос может быть немного разочаровывающим: класс функций изN в N это именно те функции, которые могут быть определены в системеF , Причина этого: вышеупомянутый класс равен доказуемо завершающим функциям в арифметике второго порядка (P A2 ) который в свою очередь равен функциям, определяемым в системе F (см., например, Доказательства и Типы , глава 11). Кроме того, если вы удаляете полиморфизм, вы переходите к функциям, определяемым вP A что совпадает с определяемым в системе T ,
Опять же, резон для этого заключается в том, что уменьшение, охваченное «матрицами вызовов», доказуемо обоснованно , и что доказательство может быть выполнено полностью вP A ,
Тем не менее, это не означает, что Плод не более полезен, чем системаT ! На практике требуется более сложный анализ завершения, чтобы иметь возможность принимать определенные представления вычислимых функций. Вам не нужно делать сложные доказательства в арифметике Пеано каждый раз, когда вы пишете, например, функцию объединения. Таким образом, в этом отношении Fetus является очень мощным и позволяет вам определять функции таким образом, который не будет принят ни Coq, Agda, ни какой-либо другой обычной системой доказательства.
источник
Если под примитивно-рекурсивными функционалами вы имеете в виду примитивно-рекурсивные функции и знаете, что Fetus содержит функцию Аккермана, то Fetus не совпадает с классом функций pr, так как функция Ackermann не является примитивно-рекурсивной. Это было показано Аккерманом, а позже упрощенное доказательство было дано Росзой Петер в « Konstruktion nichtrekursiver Funktionen » 1935 года (к сожалению, только на немецком, насколько мне известно).
Если вы ищете более крупные классы рекурсивных функций, которые гарантированно завершатся, что может совпадать с классом функций, захваченных Фетусом, то вам может заинтересовать некоторая другая работа Россы Питера.
Функция Аккермана содержится в классе множественных рекурсивных функций, как это определено Росзой Петер в книге « Uber die mehrfache Rekursion », 1937. Неформально идея множественной рекурсии состоит в том, что вы можете иметь несколько рекурсивных переменных, которые могут измениться после рекурсивного шага. Напримере( а , б ) может позвонить е( а , б - 1 ) или е( а - 1 , б ) ,
Еще более сильный класс дается концепцией трансфинитной рекурсии, описанной в « Zusammenhang der mehrfachen und transfiniten Rekursion » Розой Петер. Для трансфинитной рекурсии у вас есть одна рекурсивная переменная, которая может вызывать предшественников по специальному порядку<
Например, вы можете интерпретировать целое число как пару целых чисел и использовать порядок
[править] Примитивные рекурсивные функции не совпадают с примитивными рекурсивными функционалами, как отмечено в комментарии ниже. Тем не менее, я думаю, что можно перенести концепцию трансфинитной рекурсии на функционалы. Однако не ясно, является ли он все еще более мощным по сравнению с функциональными настройками.
источник