Чи еквівалентний клас примітивних функцій рекурсії класу функцій, який виявляється, що Фетус припиняється?


9

Плід, якщо ви про нього не чули, можна прочитати тут . Він використовує систему "матриць викликів" та "графіків викликів", щоб знайти всю "поведінку рекурсії" рекурсивних викликів у функції. Щоб показати, що функція припиняється, це показує, що всі поведінки рекурсії рекурсивних викликів, зроблених до функції, підкоряються певному "лексикографічному впорядкуванню". Його перевірка припинення дозволяє виконувати всі примітивні рекурсивні функції та такі функції, як функція Ackermann. В основному це дозволяє багато аргументацію примітивної рекурсії. Це, в основному, перевірка припинення Agda; Я вважаю, що у Coq є також подібні засоби, хоча, можливо, більш загальні.

З прочитання статті "Загальне функціональне програмування" Д. А. Тернера . Він пояснює, що запропонована мова могла б виразити всі "примітивні рекурсивні функціонали", як це спостерігається в Системі T, вивченій Годелем. Він продовжує говорити, що ця система "відома, що включає кожну рекурсивну функцію, сукупність якої може бути доведена логікою першого порядку".

Доза плоду дозволяє всім примітивним рекурсивним функціоналом? Якщо так, чи дозволяють функції, які не є примітивними рекурсивними функціоналами? Чи можна надати відповідь на це відповідь? (це насправді не потрібно, тому що я просто зацікавлений; це просто, що деякі подружні читання з цього питання були б непогані)

Питання про бонус: Примітивні рекурсивні функціонали мають дуже стисле визначення щодо комбінаторів: введені S і K (які не можуть виразити комбінатори з фіксованою точкою), нуль, функція наступника та ітераційна функція; Це воно. Чи існують інші більш загальні такі мови, які мають таке стисле визначення і в яких усі вирази закінчуються?


Про Agda vs Coq: Я завжди читаю перевірку припинення Agda, щоб бути більш просунутою і приймає більше функцій, ваше перше твердження про протилежне (це хороше правило у порівнянні Agda з Coq, за винятком відсутності тактики Agda: Agda є більш дослідним та відкритим для розширень, стабільність яких менш встановлена). Андреас Абель працював над ще більш вдосконаленими перевіряючими термінами на основі типорозмірів, дивіться його роботу над MiniAgda, а також цей документ .
Blaisorblade

Існує "прийняти більше визначень функцій" та "мати більший клас обчислюваних функцій". Двоє незрівнянні. Агда перемагає на першому рахунку, але Кок явно перемагає на другому.
коді

Я повинен уточнити, що я взагалі не використовував Coq, а Agda лише трохи. Здавалося, що з того, що я мало читав, Coq здатний визначити ширший клас обчислюваних функцій, але я не знав, тому сказав: "Я вважаю, що Coq має деякі подібні засоби, хоча, можливо, і більш загальні"; "вірити" і "можливо" використовувались для того, щоб донести, що я не знаю.
Джейк

Відповіді:


7

Так, перевірка Fetus може встановити прапорець усе в T. Goedel T. Це можна показати, використовуючи перевірку, щоб показати, що оператор ітерації в T закінчується. Наприклад, працює таке визначення:

iтеr:А(АА)NАiтеrif0=iiтеrif(н+1)=f(iтеrifн)

Це перевірити Fetus (або більшість будь-яких інших перевірок завершення) дуже просто, оскільки це очевидно структурно рекурсивне визначення.

І Agda, і Coq дозволяють довести припинення функцій, що виходять далеко за рамки того, що, очевидно, є загальним в арифметиці першого порядку. Особливістю, яка це дозволяє, є те, що вони дозволяють визначати типи шляхом рекурсії даних, що називається "великим усуненням". (У теорії множин ZF аксіомна схема заміни служить приблизно однаковою метою.)

Простий приклад чогось, що виходить за межі Т, - це послідовність самого Т Геделя! Ми можемо дати синтаксис як тип даних:

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повинні бути природні числа Agda, а стрілка T повинна тлумачитися як простір функцій Agda. Це "велике" усунення, оскільки ми визначаємо набір шляхом рекурсії на структурі типу даних Т.

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

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)

(У мене немає Agda на цій машині, тому, безсумнівно, є деякі імпорт, декларації про виправлення та помилки друку. Виправлення - це вправа для читача, який також може бути редактором, якщо їм це подобається.)

Я не знаю, яка сила консистенції Agda, але Бенджамін Вернер показав, що обчислення індуктивних конструкцій (обчислення ядра Coq) є рівносильним з ZFC плюс безліч важкодоступних кардиналів.


Зауважте, що у вашому прикладі ви не використовували великого усунення. Велика елімінація фактично не додає обчислювальної потужності. Імпредактивність має: система F не має колишньої, але може виражати функції, які не можна виразити в системі T.
cody

@cody: Функція interp-T обчислює набір із терміна, який для мене виглядає як велике усунення! Безперечно, великі усунення додають сили: теорія типу Мартіна-Лоефа не може навіть вивести непослідовність від 0 = 1 без великого усунення. (Щоб побачити це, зауважте, що без всесвітів / великих усунень ви можете стерти всі залежності і отримати просто набраний термін: саме це зробили Гарпер і Пфеннінг у своєму доказі адекватності для LF.)
Neel Krishnaswami

Вибачте: так, функція interp-T дійсно використовує велику елімінацію. Я також погоджуюся, що доведення 0! = 1 цього дійсно вимагає. Однак визначення обчислюваних функцій - це не те саме, що доведення математичних тверджень . Моя відповідь це трохи уточнює. Наприклад, чистий розрахунок конструкцій не може довести 0! = 1. Однак він може відносно легко визначити функцію Акермана.
cody

Це свідчить про те, що Агда має більш загальний сенс, вона може написати інтерпретатора для системи T, але чи не показує вона погоду чи не Fetus, мова, яка не вводиться залежно, є більш загальною. Чи може це зробити плод? Чи змогла б Агда це зробити, якби не "велика ліквідація"?
Джейк

1
Документація Agda говорить, що її перевірка припинення використовує алгоритм Fetus. Якби ти взяв T і доповнив його узгодженням шаблонів та рекурсивними визначеннями, перевіреними Фетусом, ти не зможеш написати інтерпретатора для T у ньому. Насправді ви б взагалі не змінили функції, які можна обчислити T - всі порядки припинення обчислень Fetus, очевидно, добре обгрунтовані в арифметиці Peano. (Див. Відповідь Коді.) Алгоритм Fetus дозволяє писати більше визначень , не змінюючи набір функцій, які можна обчислити. Великі усунення Агди фактично збільшують набір функцій.
Неель Крішнасвамі

3

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

Відповідь на ваше запитання може бути трохи невтішною: клас функцій від N до Nце саме ті функції, які можна визначити в системіЖ. Причина цього: вищезазначений клас дорівнює переривно закінчуваним функціям в арифметиці другого порядку (ПА2) що, у свою чергу, дорівнює функціям, визначеним у системі Ж(див., наприклад, Докази та типи , глава 11). Крім того, якщо ви знімете поліморфізм, то ви перейдете до визначених функційПА, що трапляється збігається з тими, що визначені в системі Т.

Знову ж таки, причиною цього є те, що зменшення, спричинене "матрицями викликів", є очевидно обґрунтованим , і це доведення може бути здійснено цілком уПА.

Однак це не означає, що Фетус не корисніший за системуТ! На практиці потрібні більш складні аналізи припинення, щоб мати можливість приймати певні презентації обчислюваних функцій. Наприклад, вам не потрібно робити складні докази в арифметиці Peano кожен раз, коли ви пишете функцію об'єднання, наприклад. Тож у цьому відношенні Фетус є дуже потужним і дозволяє визначати функції таким чином, який би не прийняли ні Кок, ні Агда, ні будь-яка інша загальна система доказів.


як клас функцій, які доказово закінчуються (PA ^ 2), може бути еквівалентним класу функцій у системі F, які, наскільки я знаю, не можна припинити? Також я не розумію, як ти відповідаєш мені на питання. Ви говорите про те, що система T має більший клас обчислюваних функцій чи ви говорите, що це плід? Я думаю, що у вашій логіці стався стрибок, який очікував, що у мене більше досвіду, ніж я насправді. Також надане посилання, здається, призводить до поганої сторінки, яка відображається неправильно.
Джейк

Функції в системі F всі припиняються. Плід захоплює більш високий клас обчислюваних функцій, ніж система T, але "випадково", якщо ви видалите поліморфізм, тоді плод захоплює саме систему T. Чи можете ви сказати мені, яке посилання не працює для вас? (і який браузер ви використовуєте :)
cody

1

Якщо під примітивними рекурсивними функціоналами ви маєте на увазі примітивні рекурсивні функції, і ви знаєте, що Fetus містить функцію Ackermann, то Fetus не збігається з класом pr функцій, оскільки функція Ackermann не є примітивною рекурсивною. Це показав Акерманн, а пізніше спрощений доказ дала Роза Петро у " Konstruktion nichtrekursiver Funktionen " 1935 (на жаль, лише на німецькій мові, наскільки я знаю).

Якщо ви шукаєте більші класи рекурсивних функцій, які гарантовано припиняються, що може збігатися з класом функцій, захоплених Фетом, то якась інша робота Рози Петра може вас зацікавити.

Функція Ackermann міститься в класі декількох рекурсивних функцій, визначених Роза Петром у " Uber die mehrfache Rekursion " 1937. Неофіційно ідея багаторазової рекурсії полягає в тому, що ви можете мати кілька рекурсивних змінних, які можуть змінюватися після рекурсивного кроку. Наприкладf(а,б) може зателефонувати f(а,б-1) або f(а-1,б).

І все ж сильніший клас дає концепція трансфінітних рекурсій, описана у " Zusammenhang der mehrfachen und transfiniten Rekursion " від Рози Петра. Для безстрокової рекурсії у вас є одна рекурсивна змінна, яка може викликати попередників wrt до спеціального впорядкування<

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

(а,б)<(c,г)(а<cбг)(аcб<г)
Це можна узагальнити для потрійних цілих чисел тощо. Петро називає ці впорядкуванняω2,ω3і так далі. Ви можете піти на крок далі і інтерпретувати ціле число як довільне число цілих чисел. Дозволяєpi бути i-е просте число. Тоді ми можемо розглянутиz=p1нp2х1p3х2 де н позначає кількість цілих чисел, закодованих у z і хiмістять респ. значення. Вона позначає впорядкування для такого списку цілих чисел, якωωі за допомогою діагоналізації показує, що такий вид рекурсії сильніший за багаторазову рекурсію. Однак я не впевнений, чи є синтаксична характеристика цього класу.

[редагувати] Примітивні рекурсивні функції не є такими ж, як примітивні рекурсивні функціонали, як зазначено в коментарі нижче. Але я думаю, що можна перенести концепцію безмежної рекурсії у функціонали. Однак не зрозуміло, чи є все-таки більш потужним wrt функціональна настройка.


2
клас примітивних рекурсивних функціоналів кінцевого типу є більш загальним, ніж клас примітивних рекурсивних функцій. Наприклад, він може виражати функцію Акермана і його можна побачити в системі Годеля Т.
Джейк
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.