Почему рекурсивные типы необходимы в качестве примитивов для доказательств в системах зависимых типов?

10

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

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

Я предполагаю, что именно поэтому они построили исчисление индуктивных конструкций (CIC). Это правильно? Но почему? Я не смог найти никакого материала, объясняющего, почему такие доказательства не могут быть представлены без использования (со) индуктивных типов в качестве примитивов. Если это не так, то зачем добавлять их как примитивы в CIC?

paulotorrens
источник

Ответы:

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 .()B

Однако, насколько я понимаю, CoC не исключает специальных моделей, в которых параметричность не выполняется. В некоторых из них просто ложно. Надежно, в присутствии контрмодели, мы заключаем, что не заселен в CoC. Следовательно, в CoC также нет термина .()()Bind

чи
источник
Я не уверен, что следую. Например, учитывая выражение как , Есть много способов, которыми я мог бы сделать конструкторы для Nat, но, в конечном счете, разве они не были бы созданы из S или Z ?(λ(Nat:).(...))(Π(N:).Π(S:NN).Π(Z:N).N)SZ
17
@paulotorrens В логике, да, я считаю, что это единственные варианты. Но в модели УПС (модели одноранговой), могут быть значения , которые не могут быть определены через S , Z . Подумайте о натуральном значении n, таком что n ( T ) ( S T ) ( Z T ) = Z T для всех типов T, кроме T = B, где вместо n ( B ) ( S ) ( Z )NatS,Znn(T)(ST)(ZT)=ZTTT=B . Значение n ведет себя как «ноль» в большинстве типов и как «один» для логических значений. Мы не можем написать λ T : . я е Т = В т ч е н ... в УПСчтобы определитьчто значение п , но в одноранговой модели, значение может присутствоватьтем не менее. n(B)(S)(Z)=S(Z)nλT:.if T=B then n
Чи
@paulotorrens Может быть , вы можете понять проблему легче , если вы думаете о . Этот тип населяется только (полиморфной) идентичностью, и в параметрических моделях это действительно единственно возможное значение для терминов этого типа. Но в специальной модели мы можем определить значение v ( T ) ( x ) = x для всех типов T, но для T = N, где v ( N ) ( x ) = x + 1 . ΠT:TTv(T)(x)=xTT=Nv(N)(x)=x+1
чи