Ogni crociera viene effettuata utilizzando una nave
utilizza come simbolo di predicato
P = {
Crociera/1 // Crociera(x) <-> "x è una crociera"
Nave/1 // Nave(x) <-> "X è una nave"
utilizza/2 // utilizza(x, y) <-> "x utilizza y"
}
A parole, se è una crociera allora se è una nave e utilizza allora due navi utilizzate da sono la stessa nave (iniettività, usa una sola nave).
Interpretazione modello della formula
D = {c1, c2, n1, n2, n3}
I(Crociera) = {c1, c2}
I(Nave) = {n1, n2}
I(Utilizza) = {(c1, n2), (c2, n2)}
utilizza come simbolo di funzione
P = {
Crociera/1 // Crociera(x) <-> "x è una crociera"
Nave/1 // Nave(x) <-> "X è una nave"
}
F = {
utilizza/1 // utilizza(x) <-> "restituisce la nave utilizzata da x"
}
Ogni crociera segue un itinerario
Gli itinerari hanno un nome univoco
P = {
Crociera/1 // Crociera(x) <-> "x è una crociera"
Nave/1 // Nave(x) <-> "X è una nave"
utilizza/2 // utilizza(x, y) <-> "x utilizza y"
Itinerario/1 // ...
nome/1 // nome(x) <-> "x è un nome"
ha_nome/2 // nome(x, y) <-> "x ha il nome y"
}
NOT EXISTS i
Itinerario(i) AND NOT EXISTS n ha_nome(i, n)
AND
NOT EXISTS i, n1, n2
n1 != n2 AND ha_nome(i, n1) AND ha_nome(i, n2)
AND
not EXISTS i1, i2, n
i1 != i2 AND Itinerario(i1) AND Itinerario(i2) AND nome(n)
AND ha_nome(i1, n) AND ha_nome(i2, n)