Чому потрібні рекурсивні типи як примітиви для доказів у системах залежного типу?


10

Я відносно новий в теорії типів і залежному програмуванні. Я вивчав обчислення конструкцій (CoC) та інших систем чистого типу. Мені особливо цікаво використовувати його як захист проміжного представлення для системи компілятора.

Я розумію , що (з) рекурсивні типи представимо , обчислювально , використовуючи в якості єдиного типу конструктора. Я, проте, читав, що їх не можна використовувати для побудови доказів за допомогою індукції (вибачте, я зараз не можу знайти!), Наприклад, що я не міг довести, що у звичайному CoC (навіть якщо вводиться як ).Π01NatΠ(N:).Π(S:NN).Π(Z:N).N

Я припускаю, що саме тому вони побудували обчислення індуктивних конструкцій (CIC). Це правильно? Але чому? Я не зміг знайти жодного матеріалу, який би пояснював, чому подібні докази не можуть бути представлені без використання (спільно) індуктивних типів як примітивів. Якщо це неправда, то навіщо їх додавати як примітиви в CIC?

Відповіді:


7

Я не експерт, але поділюсь тим, що я зрозумів досі, прикладом.

Розглянемо булівський тип у CoC, використовуючи його стандартне кодування: Ми можемо очікувати, що зможемо довести Дійсно, це швидко випливає з залежний принцип усунення / індукції, який ми маємо, наприклад, у CiC

B=Πτ:τττtt=λτ:,x:τ,y:τ. xff=λτ:,x:τ,y:τ. y
Πb:Bb=ttb=ff()
Bind:ΠP:BP(tt)P(ff)Πb:BP(b)

Однак ми не можемо сподіватися, що (*) утримуватимуться у всіх моделях CoC! Інтуїтивно, значення в приблизно має бути сімейством функцій присвоюючи кожному типу значення в інтерпретації . Але це не змушує бути один із значень . Ми могли б, наприклад, (неофіційно) B{fτ}τττττfτtt,ff

fN(n)(m)=n+m

Щоб бути впевненими, що значення - єдино можливі значення, нам потрібно обмежитися параметричними моделями. Дійсно (я думаю) властивість можна довести з вільної теореми, пов'язаної з політипом .tt,ff()B

Однак, наскільки я розумію, CoC не виключає спеціальних моделей, де параметричність не дотримується. У деяких із них просто помилково. По міцності, за наявності контрмоделі, робимо висновок, що не заселений у СС. Отже, немає жодного терміна в CoC.()()Bind


Я не впевнений, що слідкую за цим. Наприклад, задано вираз у вигляді , я можу зробити конструктори для Nat багато способів, але, в кінцевому підсумку, не всі вони будуть побудовані ні з або ? (λ(Nat:).(...))(Π(N:).Π(S:NN).Π(Z:N).N)SZ
paulotorrens

@paulotorrens Всередині логіки, так, я вважаю, що це єдині варіанти. Але в моделі УПС (моделі тимчасової), можуть бути значення , які не можуть бути визначені через . Подумайте про природну величину таку, що для всіх типів крім де замість . Значення поводиться як "нуль" для більшості типів, і як "одне" для булевих. Ми не можемо записати в CoC, щоб визначити це значення , але в спеціальній моделі це значення все ж може бути присутнім. NatS,Znn(T)(ST)(ZT)=ZTTT=Bn(B)(S)(Z)=S(Z)nλT:.if T=B then n
чи

@paulotorrens Може бути , ви можете зрозуміти проблему легше , якщо ви думаєте про . Цей тип населений лише (поліморфною) ідентичністю, а в параметричних моделях це дійсно єдине можливе значення для термінів цього типу. Але в спеціальній моделі ми можемо визначити значення для всіх типів але для де . ΠT:TTv(T)(x)=xTT=Nv(N)(x)=x+1
чи
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.