In logica (e informatica, specificamente nel ragionamento automatico), l'unificazione è l'applicazione di un algoritmo di soluzione di equazioni fra espressioni simboliche, ognuna della forma: parte-sinistra = parte-destra.
Per esempio, usando le variabili , e considerando il simbolo di funzione , l'equazione costituisce un problema di unificazione sintattica del primo ordine che ha la sostituzione come unica soluzione.
Ci sono convenzioni diverse su cosa si può sostituire alle variabili e su quali espressioni siano considerate equivalenti. Nell'unificazione sintattica del primo ordine, le variabili possono assumere come valori i termini e l'equivalenza è puramente sintattica. Tale versione dell’unificazione ha un'unica risposta "ottima" e viene usata in programmazione logica e nell'implementazione dei sistemi di tipi dei linguaggi programmazione, specialmente negli algoritmi Hindley–Milner di inferenza dei tipi.
Nell'unificazione di ordine superiore, eventualmente limitata all'unificazione di pattern di ordine superiore, i termini possono includere le lambda espressioni e l'equivalenza è al livello della beta-riduzione. Questa versione viene utilizzata nei proof assistant e nella programmazione logica di ordine superiore, come Isabelle, Twelf, e lambdaProlog. Infine, nell'unificazione semantica o E-unificazione, l'uguaglianza è soggetta alla conoscenza di fondo e le variabili assumono valori su vari domini. Tale versione è usata nei risolutori SMT, negli algoritmi di riscrittura dei termini e nell'analisi dei protocolli crittografici.
Definizione
modificaUn problema di unificazione è un insieme finito di equazioni da risolvere , dove appartengono all'insieme dei termini o espressioni.
A seconda delle espressioni o termini ammessi in un insieme di equazioni (o problema di unificazione) e di quali espressioni siano considerate uguali, si distinguono diversi contesti di unificazione. Se si ammettono nelle espressioni variabili di ordine superiore, ovvero variabili che rappresentano funzioni, allora il processo prende il nome di unificazione di ordine superiore, altrimenti si parla di unificazione del primo ordine. Se si richiede che una soluzione renda letteralmente uguali le due parti di un'equazione, il processo si chiama unificazione sintattica o libera, altrimenti si dirà unificazione semantica o equazionale, detta anche E-unificazione.
Se la parte destra di ogni equazione è chiusa (senza variabili libere), il problema si dice di pattern matching. La parte sinistra (con variabili) di ogni equazione viene infatti detta pattern (schema).
Sostituzioni
modificaUna sostituzione è una funzione dalle variabili ai termini; la notazione indica una sostituzione che associa ogni variabile a un termine (indicata anche con ), per , e ogni altra variabile a se stessa; le devono essere distinte a coppie. L'applicazione di una sostituzione a un termine viene scritta in notazione postfissa come ad esempio ; ciò comporta il rimpiazzo (simultaneo) nel termine di ogni occorrenza di ciascuna variabile con . Il risultato dell'applicazione della sostituzione a un termine si chiama istanza del termine .
A titolo di esempio, nel caso del primo ordine, applicando la sostituzione al termine si ottiene: .
Generalità
modificaSe un termine ha un'istanza equivalente a un termine , ossia se per qualche sostituzione , allora viene detto più generale di e più specifico di, o sussunto da, . Una sostituzione è più specifica di, o sussunta da, una sostituzione se è sussunto da per ogni termine . Si dice anche che è più generale di . Più formalmente, si consideri un insieme infinito non vuoto di variabili ausiliarie tali che nessuna equazione del problema di unificazione contenga variabili di . Allora una sostituzione è sussunta da un'altra sostituzione se esiste una sostituzione tale che per tutti i termini , .[1] Per esempio è sussunta da , tramite , ma non è sussunta da , dato che non è un'istanza di .[2]
Soluzioni
modificaUna sostituzione è una soluzione del problema di unificazione se per . Tale sostituzione verrà detta unificatore di .
Per un dato problema di unificazione , un insieme di unificatori si dice completo se ogni sostituzione che ne sia soluzione è sussunta da una sostituzione in .
Algoritmi di Unificazione
modificaSebbene Herbrand abbia introdotto i concetti-base dell'unificazione abbozzando un algoritmo già nel 1930, si attribuisce a Robinson il primo algoritmo, di complessità esponenziale in spazio e tempo nel caso pessimo. Molti altri algoritmi più efficienti sono stati proposti, lineari in tempo nel caso pessimo sono stati scoperti in modo indipendente da Martelli e Montanari (1976) e da Paterson e Wegman (1976). Algoritmi più recenti hanno cercato di rimanere competitivi con quello di Robinson nel caso di input di ridotte dimensioni; si prendano in considerazione quello di Baader & Snyder del 2001 e quello di de Champeaux del 2022.
L'algoritmo seguente origina da un lavoro di Martelli e Montanari (1982). Dato un insieme finito di equazioni, l'algoritmo applica regole di trasformazione per ottenere un insieme equivalente della forma , dove sono variabili distinte e sono termini che non contengono alcuna delle . Un insieme siffatto può essere considerato una sostituzione. In caso non vi siano soluzioni l'algoritmo termina restituendo , caso indicato anche con "", o "fail" da altri autori. L'operazione di sostituzione di tutte le occorrenze della variabile nel problema con il termine viene denotata con . Per semplicità, i simboli di costante sono trattati come funzioni di arietà nulla.
| cancellazione | ||
| decomposizione | ||
| conflitto | ||
| scambio | ||
| eliminazione | ||
| verifica |
L'unificazione nella Programmazione Logica
modificaIl concetto di unificazione costituisce una delle principali idee a supporto della programmazione logica. Specificamente, l’unificazione è alla base della risoluzione, una regola d'inferenza utile a determinare la soddisfacibilità di una formula logica. In Prolog, il simbolo di uguaglianza = denota l'unificazione sintattica del primo ordine che rappresenta il meccanismo per associare il contenuto delle variabili e può essere visto come un tipo di assegnazione non ripetibile.
In Prolog:
- Una variabile può essere unificata con una constante, un termine, o con un'altra variabile, divenendone a tutti gli effetti un suo alias. In molti dialetti moderni del Prolog e nella logica del primo ordine, una variabile non può essere unificata con un termine che la contiene; la relativa verifica si chiama occurs check.
- Due costanti possono essere unificate solo se identiche.
- Analogamente un termine può essere unificato con un altro termine se i simboli di funzione e le arietà dei termini sono identici e se anche gli argomenti sono unificabili contemporaneamente. Ciò vale in modo ricorsivo.
- La maggior parte delle operazioni, fra cui
+,-,*,/, non sono valutate usando=. Infatti, per esempio,4+5 = 9non è soddisfacibile poiché i due termini non si unificano in quanto sintatticamente diversi. L'uso di vincoli dell'aritmetica degli interi#=introduce una forma di unificazione per la quale tali operazioni sono interpretate e valutate.[3]
Note
modifica- ^ Petar Vukmirović, Alexander Bentkamp, Visa Nummelin, Efficient Full Higher-Order Unification, in Logical Methods in Computer Science, vol. 17, n. 4, 14 dicembre 2021, pp. 6919, DOI:10.46298/lmcs-17(4:18)2021, arXiv:2011.09507.
- ^ K. R. Apt, From logic programming to Prolog (ps), Prentice Hall, 1997, p. 24, ISBN 013230368X.
- ^ Declarative integer arithmetic, su SWI-Prolog. URL consultato il 18 febbraio 2024.
Bibliografia
modifica- A. Martelli, e U. Montanari (1982). "An Efficient Unification Algorithm". ACM Trans. Program. Lang. Syst. 4 (2): 258–282. doi:10.1145/357162.357169. S2CID 10921306.
- F. Baader and J.H. Siekmann (1993). "Unification Theory". In Handbook of Logic in Artificial Intelligence and Logic Programming.
- F. Baader e Wayne Snyder (2001). "Unification Theory" Archived 2015-06-08 at the Wayback Machine. In J.A. Robinson & A. Voronkov, eds, Handbook of Automated Reasoning, volume I, p.p. 447–533. Elsevier.
Altri progetti
modifica
Wikimedia Commons contiene immagini o altri file su unificazione
Collegamenti esterni
modifica- (EN) Eric W. Weisstein, Unification, su MathWorld, Wolfram Research.