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:T1∧T2(∧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:T1∨T2(∨io1)Γ⊢M:T2Γ⊢M:T1∨T2(∨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:T1⊢M:SΓ,X:T1∧T2⊢M:S(∧E1)Γ,X:T2⊢M:SΓ,X:T1∧T2⊢M: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:T1⊢M:SΓ,X:T2⊢M:SΓ,X:T1∨T2⊢M: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)Ω:UN→UN⊥E


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)M⊥MNNδ
  • un termine λ può essere digitato senza usare la regola ⊥ E se M N è fortemente normalizzante per tutti N fortemente normalizzante .M⊥EMNN

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 1 → M 2, allora posso digitare M 1 ". Questo non è spesso vero nei tipi non di intersezione perché un termine può essere duplicato:M2M1→M2M1

(λX.MXX)N→MNN

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

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

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

X:T1∨T2∨⋯∨Tn⊢XX:S
ioX:Tio⊢XX: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.