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 : NN ) . Π ( Z : N ) . N ).Π01NatΠ(N:).Π(S:NN).Π(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=ttb=ff()
Bind:ΠP:BP(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:NN).Π(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:TTv(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.