Skolemizzazione

In logica matematica, si dice skolemizzazione l'applicazione dell'algoritmo di Albert Thoralf Skolem che trasforma un enunciato in forma normale in un enunciato universale. L'enunciato in questione, dopo l'applicazione dell'algoritmo di Skolem, perde l'equivalenza semantica con l'enunciato di partenza. È interessante però constatare che rimane invariata la soddisfacibilità[1] (ovvero, preso un qualsiasi enunciato ϕ {\displaystyle \phi } , esiste un modello per ϕ {\displaystyle \phi } se e solo se ne esiste uno per la forma normale di Skolem di ϕ {\displaystyle \phi } ).[2]

Dato un linguaggio L {\displaystyle L} , una frase α L {\displaystyle \alpha \in L} è un enunciato universale se:

  1. α {\displaystyle \alpha } è un enunciato (non ci sono variabili libere)
  2. α {\displaystyle \alpha } è in forma normale e gli unici quantificatori, se esistono, sono di tipo {\displaystyle \forall } .

Esempio di enunciati universali.

  • A ( b ) C ( a ) {\displaystyle A(b)\land C(a)}
  • x y ( A ( y ) ¬ C ( x ) ) {\displaystyle \forall x\forall y(A(y)\land \neg C(x))}

N.B. L'algoritmo di Skolem non mantiene l'equivalenza semantica. La frase risultante dall'applicazione dell'algoritmo di Skolem è soddisfacibile se lo è la frase normale di partenza.

Algoritmo di Skolem

  1. Trasformazione in forma prenessa. I quantificatori {\displaystyle \forall } e {\displaystyle \exists } devono essere raggruppati all'inizio della frase. x 1 , x 2 x 3 ( ) {\displaystyle \forall x_{1},\exists x_{2}\forall x_{3}(\ldots )}
  2. Determinare le variabili libere e vincolate. Nella frase non ci devono essere variabili libere, nel caso ci siano è necessario eseguire una sostituzione.
  3. Se Q 1 {\displaystyle Q_{1}} (primo quantificatore) è {\displaystyle \forall } si passa direttamente al punto successivo.
    Se Q 1 {\displaystyle Q_{1}} è {\displaystyle \exists } allora si cancella x 1 {\displaystyle \exists x_{1}} e si sostituisce ad ogni occorrenza di x 1 {\displaystyle x_{1}} in α {\displaystyle \alpha } una stessa costante (nota come "costante di Skolem")[2][3] che non compaia già in α {\displaystyle \alpha } . Esempio: x y ( A ( a , x ) B ( b , x , y ) {\displaystyle \exists x\forall y(A(a,x)\land B(b,x,y)} diventa y ( A ( a , c ) ) B ( b , c , y ) {\displaystyle \forall y(A(a,c))\land B(b,c,y)}
    Come si può facilmente notare si è tolto il quantificatore {\displaystyle \exists } e si è sostituita la variabile x {\displaystyle x} con la costante c {\displaystyle c} .
    La scelta della costante c {\displaystyle c} non è casuale visto che a {\displaystyle a} e b {\displaystyle b} erano già utilizzate.
  4. Prendo in rassegna Q n {\displaystyle Q_{n}}
    • Se Q n {\displaystyle Q_{n}} è un {\displaystyle \forall } si riparte da questo punto con Q n + 1 {\displaystyle Q_{n+1}} .
    • Se Q n {\displaystyle Q_{n}} è {\displaystyle \exists } allora i casi possono essere i seguenti:
      • Se il quantificatore Q n 1 {\displaystyle Q_{n-1}} era di tipo {\displaystyle \exists } ovvero x n 1 x n {\displaystyle \exists x_{n-1}\exists {x_{n}}} allora si ripete il punto precedente con x n {\displaystyle \exists x_{n}} sostituendo però ad ogni occorrenza della variabile x n {\displaystyle x_{n}} un funtore che prenda in rassegna tutte le variabili precedentemente utilizzate dai quantificatori {\displaystyle \forall } .
        Come si può notare finché non appaiono quantificatori di tipo {\displaystyle \forall } si sostituiscono alle variabili x n {\displaystyle x_{n}} delle semplici costanti.
      • Se il quantificatore Q n 1 {\displaystyle Q_{n-1}} è di tipo {\displaystyle \forall } ovvero x n 1 x n {\displaystyle \forall x_{n-1}\exists x_{n}} si cancella x n {\displaystyle \exists x_{n}} e si sostituisce ogni occorrenza di x n {\displaystyle x_{n}} in α {\displaystyle \alpha } con un funtore f ( ) {\displaystyle f(\cdot )} che prenda in rassegna le variabili utilizzate dai quantificatori {\displaystyle \forall } che lo precedono. Se fosse y z u ( α ) {\displaystyle \forall y\forall z\exists u(\alpha )} dovrei in primis cancellare u {\displaystyle \exists u} poi sostituire nella frase α {\displaystyle \alpha } la variabile u {\displaystyle u} con il funtore f ( y , z ) {\displaystyle f(y,z)} (il funtore non deve esistere già).
    Esempio: x y ( A ( x , f ( x ) , y ) C ( y ) ) {\displaystyle \forall x\exists y(A(x,f(x),y)\land C(y))} diventa x ( A ( x , f ( x ) , g ( x ) ) C ( g ( x ) ) ) {\displaystyle \forall x(A(x,f(x),g(x))\land C(g(x)))}
    Come si può facilmente notare, si è tolto il quantificatore y {\displaystyle \exists y} e si è sostituita la variabile y {\displaystyle y} con il funtore g ( x ) {\displaystyle g(x)} .
    La scelta della variabile x {\displaystyle x} non è casuale, visto che x 1 {\displaystyle x_{1}} in questo caso è proprio x {\displaystyle x} .

Esempio pratico

x y z u t v ( α ) {\displaystyle \exists x\forall y\forall z\exists u\forall t\exists v(\alpha )}

  • Cancello x {\displaystyle \exists x} e dentro α {\displaystyle \alpha } sostituisco le x {\displaystyle x} con delle costanti (che non siano già state utilizzate)

Diventa y z u t v ( α 1 ) {\displaystyle \forall y\forall z\exists u\forall t\exists v(\alpha ^{1})} ( α 1 {\displaystyle \alpha ^{1}} è la nostra frase dopo aver applicato la sostituzione)

  • Salto i due quantificatori {\displaystyle \forall } e cancello il u {\displaystyle \exists u} ricordando di sostituire ogni occorrenza di u {\displaystyle u} in α 1 {\displaystyle \alpha ^{1}} con un funtore (che non sia stato già utilizzato) che prende in rassegna le variabili utilizzate precedentemente dai quantificatori {\displaystyle \forall } . Nel nostro caso sarà h ( z , y ) {\displaystyle h(z,y)} .

Diventa y z t v ( α 2 ) {\displaystyle \forall y\forall z\forall t\exists v(\alpha ^{2})} ( α 2 {\displaystyle \alpha ^{2}} è la nostra frase dopo aver applicato la sostituzione u h ( z , y ) {\displaystyle u\rightarrow h(z,y)} )

  • Rimane solo un ultimo quantificatore esistenziale, lo elimino e sostituisco in α 2 {\displaystyle \alpha ^{2}} a tutte le occorrenze di v {\displaystyle v} un funtore che prenda in rassegna tutte le variabili utilizzate dai quantificatori universali utilizzati in precedenza. La sostituzione sarà v i ( y , z , t ) {\displaystyle v\rightarrow i(y,z,t)} .

L'algoritmo terminerà quando i quantificatori saranno tutti del tipo {\displaystyle \forall } .

Note

  1. ^ Daniele Nardi, Rappresentazione della Conoscenza - Lezione 2 (PDF), su diag.uniroma1.it, Università degli Studi di Roma "La Sapienza" - Dipartimento di Ingegneria informatica automatica e gestionale Antonio Ruberti, 2008, p. 15. URL consultato il 25 marzo 2022 (archiviato il 25 marzo 2022).
  2. ^ a b Marco Piastra, Logica del primo ordine: (semi)decidibilità (PDF), su unipv.it, Università degli Studi di Pavia - Computer Vision and Multimedia Laboratory, p. 8. URL consultato il 25 marzo 2022 (archiviato il 25 marzo 2022).
  3. ^ Paolo Salvaneschi, Inferenza nella logica del primo ordine (PDF), su unibg.it, Università degli Studi di Bergamo - Facoltà di Ingegneria, p. 11. URL consultato il 25 marzo 2022 (archiviato il 23 novembre 2020).
  Portale Matematica: accedi alle voci di Wikipedia che trattano di matematica