Se si osservano esempi reali in cui l'unificazione è utilizzata e utile, dare un'occhiata alle grammatiche basate sull'unificazione utilizzate nella linguistica computazionale, ad esempio HPSG e LFG. In apparenza, questo assomiglia ad un altro sapore di unificazione, ma sono davvero gli stessi.
La grammatica basata sull'unificazione può essere pensata come una CFG (grammatica context-free) in cui le produzioni vengono estese con l'unificazione. Ogni termine nel CGF ottiene un AVM (matrice del valore dell'attributo), che è un grafico aciclico diretto di caratteristiche e valori. L'idea qui è in qualche modo simile a attribuire grammatiche usate nei compilatori.
Immaginate questo giocattolo grammatica:
S -> NP VP
NP -> Kim
NP -> The cats
VP -> V NP
V -> see
V -> sees
Abbiamo qualche lieve overgeneration qui nel contratto:
* I gatti vede Kim [S [NP I gatti] [VP [V vede] [ NP Kim]]]
al fine di risolvere questo problema abbiamo potuto affinare la CFG per includere la nozione di accordo:
S -> NP_sg VP_sg
S -> NP_sg VP_pl
NP_sg -> Kim
NP_pl -> The cats
VP_sg -> V_sg NP_sg
VP_sg -> V_sg NP_pl
V_sg -> sees
V_pl -> see
VP_pl -> V_pl NP_pl
VP_pl -> V_pl NP_sg
Qui respingeremo l'overgeneration di prima. Ma questo porta all'esplosione combinatoria molto rapidamente. tuttavia abbiamo potuto aumentare ogni termine con un AVM e unificare questi insieme quando analizziamo:
S -> NP VP , C = A unified with B.
NP -> kim /[ AGR sg ]. We mark Kim as being singular
NP -> The cats/[ AGR pl ]
VP[ AGR #1 ] -> V [ AGR #1 ] NP
Il # 1-annotazione sono reentrancies, che significa che il valore di questa funzione deve essere la stessa, infatti indicheranno allo stesso nodo nel grafico dopo l'unificazione, se succede. Qui in pratica diciamo che la caratteristica dell'accordo di una frase verbale è la stessa dell'accordo del verbo nella frase.
V -> See/[ AGR pl ]
V -> Sees/[ AGR sg ]
Con la nostra grammatica giocattolo aumentata "Kim vedere i gatti" è respinto perché il NP e VP non unificare, avendo un valore diverso per la sua caratteristica AGR. Durante l'analisi, uniamo gli AVM insieme, e quindi acquisiamo molto in espressività, rendendo facile per gli ingegneri di grammatica scrivere grammatiche. In genere un UBG a copertura ampia ha nell'ordine di un centinaio di regole, mentre il CFG equivalente, che potrebbe non esistere, CFG con unificazione è completo di Turing, avrà regole nel numero di migliaia o più.
Per ulteriori dettagli, vedere HPSG e LFG.
Prova qui? http://stackoverflow.com/questions/1133289/simplest-example-of-need-for-unification-in-type-inference –
grazie ma in qualche modo penso che questo sia qualcosa di completamente diverso per il quale sto parlando. Sono più interessato alla parte logica di unificazione che alla parte di programmazione. –