1) Scrivere un programma Prolog che definisca due relazioni "pratica_sport(X,Y)" (X pratica lo sport Y) e "abita(X,Y)" (X abita a Y). In particolare il programma dovra' contenere istanze delle due relazioni per le asserzioni: - mario pratica il calcio; - giovanni pratica il calcio; - alberto pratica il calcio; - marco pratica il basket; - mario abita a torino; - giovanni abita a genova; - alberto abita a genova; - marco abita a torino; Dopo aver definito il database prolog contenente le informazioni precedenti, si provino le query corrispondenti alle seguenti domande: - Esiste qualcuno che pratica il calcio? (Si noti la possibilita` di ottenere tutte le risposte digitando ";" dopo ciascuna di esse.) - Esiste qualcuno che pratica il basket? - Esiste uno sport praticato da giovanni? - Esiste qualcuno che pratica il calcio e abita a torino? - Esiste uno sport praticato da alberto? - Esiste qualcuno che abita a genova? 2) Si aggiunga al programma precedente la specifica della relazione "amico(X,Y)" cosi' definita: X e' amico di Y se X e Y abitano nella stessa citta` e praticano lo stesso sport. Si sottopongano quindi al programma risultante le query corrispondenti alle seguenti domande: - Esistono X e Y tali che X e Y sono amici? - Esiste qualcuno che e' amico di mario? - Esiste qualcuno che e' amico di giovanni? - Esiste qualcuno che e' amico di qualcun altro che abita a torino? 3) Si considerino le seguenti relazioni di base: "genitore(X,Y)" : X e' un genitore di Y; "maschio(X)" : X e' un maschio; "femmina(X)" : X e' una femmina; Sulla base delle seguenti relazioni si definisca un programma Prolog per le relazioni: "madre(X,Y)" : X e' la madre di Y; "padre(X,Y)" : X e' il padre di Y; "sorella(X,Y)" : X e` sorella di Y; "nonno(X,Y)" : X e` nonno di Y; "zia(X,Y)" : X e` zia di Y; "antenato(X,Y)" : X e` antenato di Y. Si introducano poi nel database prolog le informazioni corrispondenti alle affermazioni: - mario e` padre di giuseppe - mario e` padre di anna - anna e` madre di marco - carla e` madre di giuseppe - marco e` il padre di giulio - marco e` il padre di serena - giuseppe e` il padre di andrea - giuseppe e` il padre di sara - andrea e` il padre di sergio - anna e` la madre di paola - paola e' la madre di lino Si sottopongano quindi al programma risultante le query corrispondenti alle seguenti domande: - Esiste qualcuno che e` sorella di sara? - Esistono degli antenati di serena? - Esiste qualcuno di cui mario e` nonno? - Esiste qualcuno di cui anna e` zia? - Esiste qualcuno che e` sorella di giulio? - Esiste qualcuno di cui giuseppe e` antenato? Cosa risponde il sistema alla query - Esistono delle sorelle di giuseppe? Come potrebbe essere modificato il programma per eliminare le incongruenze? 5) Si consideri la rappresentazione dei numeri naturali con la costante 0 e la funzione s/1 (successore) vista a lezione. Si scrivano e testino con opportune query i seguenti predicati: - eq(X,Y) vero sse X ed Y sono lo stesso naturale - pari(X) vero se X un numero pari - dispari(X) vero sse X un numero dispari - min(X,Y,Z) vero sse Z il minimo tra X e Y - mod(X,Y,Z) vero sse Z il resto della divisione intera di X per Y - nonprimo(X) vero sse X non un numero primo - primo(X) vero sse X un numero primo