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


10

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

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

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

Відповіді:


7

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

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

B=Πτ:∗τ→τ→τtt=λτ:∗,x:τ,y:τ. xff=λτ:∗,x:τ,y:τ. y
Πb:Bb=tt∨b=ff(∗)
Bind:ΠP:B→∗P(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:N→N).Π(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:∗T→Tv(T)(x)=xTT=Nv(N)(x)=x+1
— чи
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.