Perché i tipi ricorsivi sono necessari come primitive per le prove nei sistemi di tipo dipendente?


10

Sono relativamente nuovo alla teoria dei tipi e alla programmazione dipendente. Ho studiato il calcolo delle costruzioni (CoC) e altri sistemi di tipo puro. Sono particolarmente interessato a usarlo come rappresentazione intermedia di conservazione delle prove per un sistema di compilazione.

Comprendo che i tipi (co) ricorsivi sono rappresentabili , dal punto di vista computazionale , usando come unico costruttore di tipi. Ho letto, tuttavia, che non possono essere utilizzati per costruire prove per induzione (perdonami, non riesco a trovare dove adesso!), Ad esempio, che non sono riuscito a dimostrare che 0 ≠ 1 in CoC semplice (anche se Nat è digitabile come Π ( N : ∗ ) . Π ( S : N → N ) . Π ( Z : N ) . N ).Π0≠1NatΠ(N:∗).Π(S:N→N).Π(Z:N).N

Suppongo che sia per questo che hanno costruito il calcolo delle costruzioni induttive (CIC). È corretto? Ma perché? Non sono riuscito a trovare alcun materiale che spieghi perché tali prove non possano essere rappresentate senza usare tipi (co) induttivi come primitivi. Se questo non è vero, allora perché aggiungerli come primitivi in ​​CIC?

Risposte:


7

Non sono un esperto, ma condividerò ciò che ho capito finora con un esempio.

Consideriamo il tipo booleano in CoC, usando la sua codifica standard: Potremmo aspettarci di essere in grado di dimostrare Π b : B b = t

B=Πτ:∗τ→τ→τtt=λτ:∗,x:τ,y:τ. xff=λτ:∗,x:τ,y:τ. y
In effetti, ciò deriva rapidamente dal principio di eliminazione / induzione dipendente che abbiamo ad es. In CiC B i n d : Π P : B → ∗ P ( t t ) → P ( f f ) → Π b : B P ( b )
Πb:Bb=tt∨b=ff(∗)
Bind:ΠP:B→∗P(tt)→P(ff)→Πb:BP(b)

Tuttavia, non possiamo davvero aspettarci che (*) rimanga in tutti i modelli di CoC! Intuitivamente, un valore in dovrebbe essere approssimativamente una famiglia di funzioni { f τ } τ che assegna a ciascun tipo τ un valore nell'interpretazione di τ → τ → τ . Ma questo non obbliga f τ ad essere uno tra i valori di t t , f f . Potremmo avere ad es. (Informalmente) f N ( n ) ( m ) = n + mB{fτ}τττ→τ→τfτtt,ff

fN(n)(m)=n+m

tt,ff(∗)B

(∗)(∗)Bind


(λ(Nat:∗).(...))(Π(N:∗).Π(S:N→N).Π(Z:N).N)SZ
— paulotorrens,

NatS,Znn(T)(ST)(ZT)=ZTTT=Bn(B)(S)(Z)=S(Z)nλT:∗.if T=B then …n

ΠT:∗T→Tv(T)(x)=xTT=Nv(N)(x)=x+1
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.