Caratterizzazione di termini lambda che hanno tipi di unione


29

Molti libri di testo trattano i tipi di intersezione nel calcolo lambda. Le regole di digitazione per l'intersezione possono essere definite come segue (in cima al calcolo lambda semplicemente digitato con sottotipo):

ΓM:T1ΓM:T2ΓM:T1T2(io)ΓM:(io)

I tipi di intersezione hanno proprietà interessanti rispetto alla normalizzazione:

  • Un termine lambda può essere digitato senza usare la regola io se è fortemente normalizzato.
  • Un termine lambda ammette un tipo che non contiene iff ha una forma normale.

E se invece di aggiungere intersezioni, aggiungessimo i sindacati?

ΓM:T1ΓM:T1T2(io1)ΓM:T2ΓM:T1T2(io2)

Il lambda-calcolo con tipi semplici, sottotipi e unioni ha qualche proprietà simile interessante? Come si possono caratterizzare i termini tipizzabili con unione?


Domanda interessante. Potresti dire che le interfacce di OOP corrispondono a questo?
Raffaello

Forse potresti essere interessato a questo cs.cmu.edu/~rwh/courses/refinements/papers/Barbaneraetal95/…
Fabio F.

Risposte:


11

Nel primo sistema, ciò che chiamate sottotipo sono queste due regole:

Γ,X:T1M:SΓ,X:T1T2M:S(E1)Γ,X:T2M:SΓ,X:T1T2M:S(E2)

Corrispondono alle regole di eliminazione per ; senza di essi il connettivo è più o meno inutile.

Nel secondo sistema (con i connettivi e , a cui potremmo anche aggiungere un ), le regole di sottotipizzazione sopra riportate sono irrilevanti e penso che le regole di accompagnamento che avevi in ​​mente siano le seguenti:

Γ,X:T1M:SΓ,X:T2M:SΓ,X:T1T2M:S(E)Γ,X:M:S(E)

Per quello che vale, questo sistema consente di digitare (usando la regola E ), che non può essere digitato solo con tipi semplici, che ha una forma normale, ma non è fortemente normalizzante.(λX.io)Ω:UNUNE


Pensieri casuali: (forse vale la pena chiedere a TCS)

Questo mi porta a ipotizzare che le proprietà correlate siano simili a:

  • un termine λ ammette un tipo che non contiene iff M N ha una forma normale per tutte le N che ha una forma normale. ( δ fallisce entrambi i test, ma il precedente termine λ li supera)MMNNδ
  • un termine λ può essere digitato senza usare la regola E se M N è fortemente normalizzante per tutti N fortemente normalizzante .MEMNN

Esercizio: dimostrami che mi sbaglio.

Inoltre sembra essere un caso degenerato, forse dovremmo considerare di aggiungere questo ragazzo alla foto. Per quanto mi ricordo, consentirebbe di ottenere ?UN(UN)


Un buon punto sulle regole del sottotipo, mostrano che i tipi di unione non sono così naturali come le intersezioni (che vengono digitate ortogonalmente alle frecce). Per quanto riguarda la seconda parte, devo pensarci ancora.
Gilles 'SO- smetti di essere malvagio' il

Penso che risponda all'esercizio, se si parla di tipi di unione. M=(λX.XX)(λy.y)
jmad

A proposito di call / cc: ha bisogno di qualcosa di più dei semplici termini lambda (come i termini lambda-mu o un altro framework) ma i sistemi di tipo sono sistemi logici più complessi, in cui i tipi di unione possono essere irrilevanti.
jmad

@jmad: In effetti, i tipi di intersezione sono necessari per digitare questo termine :-( Forse considerare i sindacati e le intersezioni insieme sarebbe interessante?
Stéphane Gimenez

Sarei interessato a un termine λ che si possa scrivere con tipi di unione (rs. Con tipi di intersezione) ma non con tipi semplici (rs. Con tipi di intersezione).
jmad

16

Voglio solo spiegare perché i tipi di intersezione sono adatti per caratterizzare le classi di normalizzazione (forte, testa o debole), mentre altri sistemi di tipo non possono. (digitato semplicemente o sistema F).

La differenza fondamentale è che devi dire: "se riesco a digitare e M 1M 2, allora posso digitare M 1 ". Questo non è spesso vero nei tipi non di intersezione perché un termine può essere duplicato:M2M1M2M1

(λX.MXX)NMNN

e quindi digitando significa che è possibile digitare entrambe le occorrenze di N ma non con lo stesso tipo, ad esempio M : T 1T 2T 3MNNN Con i tipi di intersezione è possibile trasformarlo in: M : T 1T 2T 1T 2T 3

M:T1T2T3N:T1N:T2
e quindi il passaggio cruciale ora è davvero semplice: ( λ x . M x x ) : T 1T 2T 3
M:T1T2T1T2T3N:T1T2
così ( λ x . M x x ) N può essere digitato con tipi di intersezione.
(λX.MXX):T1T2T3N:T1T2
(λX.MXX)N

(λX.XX)(λy.y)λX.XXS,T1,...

X:T1T2TnXX:S
ioX:TioXX:SS

Questo è il motivo per cui non penso che ci sia una facile caratterizzazione della normalizzazione per i tipi di unione.

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.