Sudoku: ancora un esercizio Silvio Ranise LORIA & INRIA-Lorraine Nancy (France) 17 Gennaio 2007
Un esempio (sempre lo stesso) 5 3 7 6 1 9 5 9 8 6 8 6 3 4 8 3 1 7 2 6 6 2 8 4 1 9 5 8 7 9
Regole (sempre le stesse!) 1. in ogni cella (i, j), un solo valore da 1 a 9 2. per ogni valore k (da 1 a 9): 2.1 per ogni linea i, il valore k appare in una sola cella 2.2 per ogni colonna j, il valore k appare in una sola cella 2.3 per ogni quadrato, il valore k appare in una sola cella
Regole (sempre le stesse!) 1. in ogni cella (i, j), un solo valore da 1 a 9 2. per ogni valore k (da 1 a 9): 2.1 per ogni linea i, il valore k appare in una sola cella 2.2 per ogni colonna j, il valore k appare in una sola cella 2.3 per ogni quadrato, il valore k appare in una sola cella
Regole (sempre le stesse!) 1. in ogni cella (i, j), un solo valore da 1 a 9 2. per ogni valore k (da 1 a 9): 2.1 per ogni linea i, il valore k appare in una sola cella 2.2 per ogni colonna j, il valore k appare in una sola cella 2.3 per ogni quadrato, il valore k appare in una sola cella
Regole (sempre le stesse!) 1. in ogni cella (i, j), un solo valore da 1 a 9 2. per ogni valore k (da 1 a 9): 2.1 per ogni linea i, il valore k appare in una sola cella 2.2 per ogni colonna j, il valore k appare in una sola cella 2.3 per ogni quadrato, il valore k appare in una sola cella
Regole (sempre le stesse!) 1. in ogni cella (i, j), un solo valore da 1 a 9 2. per ogni valore k (da 1 a 9): 2.1 per ogni linea i, il valore k appare in una sola cella 2.2 per ogni colonna j, il valore k appare in una sola cella 2.3 per ogni quadrato, il valore k appare in una sola cella
Esercizio Trasformare il problema di risolvere il sudoku in un problema di soddisfacibilitá nella logica dei predicati del primo ordine con eguaglianza
Suggerimento 1 (lo stesso) Come possiamo rappresentare la tavola del gioco? Utilizzate un predicato ternario p: p(i, j, k) dove (i, j) identifica la cella della tavola e k il valore in questa memorizzato Domanda: non potremmo usare una funzione che prende la cella ovvero la coppia (i, j) e ritorna il valore k? In questo caso, il dominio di Hebrand è finito oppure no? Nel caso in cui utilizziamo il predicato ternario p, il dominio di Herbrand è finito oppure no?
Suggerimento 1 (lo stesso) Come possiamo rappresentare la tavola del gioco? Utilizzate un predicato ternario p: p(i, j, k) dove (i, j) identifica la cella della tavola e k il valore in questa memorizzato Domanda: non potremmo usare una funzione che prende la cella ovvero la coppia (i, j) e ritorna il valore k? In questo caso, il dominio di Hebrand è finito oppure no? Nel caso in cui utilizziamo il predicato ternario p, il dominio di Herbrand è finito oppure no?
Suggerimento 1 (lo stesso) Come possiamo rappresentare la tavola del gioco? Utilizzate un predicato ternario p: p(i, j, k) dove (i, j) identifica la cella della tavola e k il valore in questa memorizzato Domanda: non potremmo usare una funzione che prende la cella ovvero la coppia (i, j) e ritorna il valore k? In questo caso, il dominio di Hebrand è finito oppure no? Nel caso in cui utilizziamo il predicato ternario p, il dominio di Herbrand è finito oppure no?
Suggerimento 2 (variante) Come possiamo imporre la regola 1? Ovvero: in ogni cella (i, j), un solo valore da 1 a 9 Utilizzare una sola formula della logica dei predicati del primo ordine con eguaglianza: x.(x = 1 x = 2 x = 9) La formula sopra scritta fissa la cardinalità del dominio di qualsiasi struttura che la soddisfi ad essere pari a 9? Indizio: Le costanti 1, 2,..., 9 sono distinte oppure no? Bisogna aggiungere delle formule per imporre che, ad esempio, 1 sia distinto da 2?
Suggerimento 2 (variante) Come possiamo imporre la regola 1? Ovvero: in ogni cella (i, j), un solo valore da 1 a 9 Utilizzare una sola formula della logica dei predicati del primo ordine con eguaglianza: x.(x = 1 x = 2 x = 9) La formula sopra scritta fissa la cardinalità del dominio di qualsiasi struttura che la soddisfi ad essere pari a 9? Indizio: Le costanti 1, 2,..., 9 sono distinte oppure no? Bisogna aggiungere delle formule per imporre che, ad esempio, 1 sia distinto da 2?
Suggerimento 2 (variante) Come possiamo imporre la regola 1? Ovvero: in ogni cella (i, j), un solo valore da 1 a 9 Utilizzare una sola formula della logica dei predicati del primo ordine con eguaglianza: x.(x = 1 x = 2 x = 9) La formula sopra scritta fissa la cardinalità del dominio di qualsiasi struttura che la soddisfi ad essere pari a 9? Indizio: Le costanti 1, 2,..., 9 sono distinte oppure no? Bisogna aggiungere delle formule per imporre che, ad esempio, 1 sia distinto da 2?
Suggerimento 3 (variante) Come possiamo imporre la regola 2.1? Ovvero: per ogni valore v (da 1 a 9), per ogni linea k, il valore v appare in una sola cella Utilizzate la seguente formula (dove l ed m identificano due righe della tabella): p(k, l, v 1 ) k, l, m, v 1, v 2. p(k, m, v 2 ) = v 1 v 2 l m Nota: v 1 v 2 abbrevia (v 1 = v 2 ) Domanda: è corretto quantificare universalmente su k, l, m, v 1, v 2 senza alcuna precisazione che tale variabili devono assumere valori appartenenti all insieme {1, 2,..., 9} oppure bisognerebbe imporre delle restrizioni?
Suggerimento 3 (variante) Come possiamo imporre la regola 2.1? Ovvero: per ogni valore v (da 1 a 9), per ogni linea k, il valore v appare in una sola cella Utilizzate la seguente formula (dove l ed m identificano due righe della tabella): p(k, l, v 1 ) k, l, m, v 1, v 2. p(k, m, v 2 ) = v 1 v 2 l m Nota: v 1 v 2 abbrevia (v 1 = v 2 ) Domanda: è corretto quantificare universalmente su k, l, m, v 1, v 2 senza alcuna precisazione che tale variabili devono assumere valori appartenenti all insieme {1, 2,..., 9} oppure bisognerebbe imporre delle restrizioni?
Suggerimento 3 (variante) Come possiamo imporre la regola 2.1? Ovvero: per ogni valore v (da 1 a 9), per ogni linea k, il valore v appare in una sola cella Utilizzate la seguente formula (dove l ed m identificano due righe della tabella): p(k, l, v 1 ) k, l, m, v 1, v 2. p(k, m, v 2 ) = v 1 v 2 l m Nota: v 1 v 2 abbrevia (v 1 = v 2 ) Domanda: è corretto quantificare universalmente su k, l, m, v 1, v 2 senza alcuna precisazione che tale variabili devono assumere valori appartenenti all insieme {1, 2,..., 9} oppure bisognerebbe imporre delle restrizioni?
Suggerimento 4 (variante) Come possiamo imporre la regola 2.2? Ovvero: per ogni valore v (da 1 a 9), per ogni colonna k, il valore v appare in una sola cella Utilizzate la seguente formula (dove l ed m rappresentano due colonne della tabella): p(l, k, v 1 ) k, l, m, v 1, v 2. p(m, k, v 2 ) = v 1 v 2 l m
Suggerimento 4 (variante) Come possiamo imporre la regola 2.2? Ovvero: per ogni valore v (da 1 a 9), per ogni colonna k, il valore v appare in una sola cella Utilizzate la seguente formula (dove l ed m rappresentano due colonne della tabella): p(l, k, v 1 ) k, l, m, v 1, v 2. p(m, k, v 2 ) = v 1 v 2 l m
Suggerimento 5 Come possiamo imporre la regola 2.3? Ovvero: per ogni valore k (da 1 a 9), per ogni quadrato 3 3, il valore k appare in una sola cella Pensateci su un po...
Suggerimento 5 Come possiamo imporre la regola 2.3? Ovvero: per ogni valore k (da 1 a 9), per ogni quadrato 3 3, il valore k appare in una sola cella Pensateci su un po...
Suggerimento 6 (lo stesso) Come possiamo imporre che una certa cella abbia un certo valore? Per esempio per imporre che nella cella (1, 1) ci sia il valore 5, scriviamo semplicemente: p(1, 1, 5)
Suggerimento 6 (lo stesso) Come possiamo imporre che una certa cella abbia un certo valore? Per esempio per imporre che nella cella (1, 1) ci sia il valore 5, scriviamo semplicemente: p(1, 1, 5)
Suggerimento 7 (nuovo) Bisogna aggiungere qualcosa alla specifica di p? Ad esempio, vorremmo che ad ogni cella corrispondesse uno ed un solo valore e non molteplici, ovvero che il predicato p fosse funzionale nei suoi due primi argomenti. Come possiamo ottenere questo? Aggiungendo la seguente formula: ( ) p(x, y, z) x, y, z, w. = z = w p(x, y, w)
Suggerimento 7 (nuovo) Bisogna aggiungere qualcosa alla specifica di p? Ad esempio, vorremmo che ad ogni cella corrispondesse uno ed un solo valore e non molteplici, ovvero che il predicato p fosse funzionale nei suoi due primi argomenti. Come possiamo ottenere questo? Aggiungendo la seguente formula: ( ) p(x, y, z) x, y, z, w. = z = w p(x, y, w)
Suggerimento 7 (nuovo) Bisogna aggiungere qualcosa alla specifica di p? Ad esempio, vorremmo che ad ogni cella corrispondesse uno ed un solo valore e non molteplici, ovvero che il predicato p fosse funzionale nei suoi due primi argomenti. Come possiamo ottenere questo? Aggiungendo la seguente formula: ( ) p(x, y, z) x, y, z, w. = z = w p(x, y, w)
Suggerimento 7 (nuovo) Bisogna aggiungere altre formule a quelle scritte fino ad ora? Considerate il simbolo =...
Suggerimento 7 (nuovo) Bisogna aggiungere altre formule a quelle scritte fino ad ora? Considerate il simbolo =...
Domande 1. Qual é il problema di soddisfacibilitá nella logica dei predicati del primo ordine che corrisponde alla soluzione di un certo problema di sudoku? 2. Utilizzate il metodo di Herbrand per risolvere il problema. Ci sono delle differenze con le formule ottenute con la rappresentazione proposizionale diretta suggerita nelle trasparenze del 29/11/2006?
Domande 1. Qual é il problema di soddisfacibilitá nella logica dei predicati del primo ordine che corrisponde alla soluzione di un certo problema di sudoku? 2. Utilizzate il metodo di Herbrand per risolvere il problema. Ci sono delle differenze con le formule ottenute con la rappresentazione proposizionale diretta suggerita nelle trasparenze del 29/11/2006?