Come già menzionato sulla nostra pagina inerente al corso di logica classica, che ha come scopo quello di trasmettere le competenze di logica formale atte a descrivere in modo formale i metodi di ragionamento specifici della logica classica, esistono anche logiche complementarie o alternative alla logica classica, con il vantaggio che l’apparato deduttivo della logica classicha viene naturalmente esteso anche ai formalismi di altri sistemi di logica. Una di queste logiche alternative è la logica per l’intelligenza artificiale.
L’intelligenza artificiale è un campo molto ampio, con uno sviluppo vertiginoso negli ultimi anni e, ed è questa la parte che potrabbe lasciare perplesse alcune persone che si approcciano al settore, con realizzazioni apparentemente divergenti se osservate nell’ottica di diversi linguaggi di programmazione e delle diverse librerie di sviluppo che sono state create per quei linguaggi. In realtà, i concetti base sono abbastanza semplici, e l’essenza delle logica per l’intelligenza artificiale può essere benissimo spiegata con il minimo (dunque, neanche il massimo) comun denominatore.
Vedremo durante i corsi, comunque, che non è oro tutto quello che luccica, e che i problemi ci sono eccome, ma quelli delle apparenti divergenze di implementazioni non sono i problemi principali, anzi quelli sono abbastanza al margine. Vedremo anche come il termine “intelligenza artificiale” in se non è del tutto appropriato (ma, ahimé, i settori “marchettari” delle grandi aziende spingono con quella terminologia, e noi non possiamo che adeguarci, se non per altro, per motivi dei nomi per i quali i più hanno già qualche idea di cosa si tratta (quanto quell’idea effettivamente corrisponda alla realtà, e come già accennato, tutto da vedere). Una delle cose più problematiche per l’intelligenza artificiale, per esempio, se non LA cosa più problematica è quella di istruire il nostro programma a prendere decisioni nelle condizioni di incertezza, quanto per mancanza di dati che servono per prendere una decisione, tanto per gli stessi criteri - a volte non ben definiti - per una decisione o valutazione. Questo, in verità, non è un problema solo dei computer e della loro “intelligenza artificiale”. E’ un problema anche per noi umani a volte definire le cose. Per esempio: Nella maggior parte dei film Yul Brynner era calvo, no? Sean Connery per una buona parte della sua vita, nei suoi film, aveva i capelli. Nei film dove Sean Connery appariva durante la parte “diversamente giovane” della sua vita i capelli non li aveva. Non è difficile reperire le foto su Internet di Sean Connery con età diversa della sua vita. Sareste in grado di fare una valutazione certa e inconfutabile quando Sean Connery è diventato calvo? Quali sono i vostri criteri? perché a quell’età e no, per esempio sei mesi prima? O due mesi dopo? Qualcun altro potrebbe dare un’altra valutazione diversa dalla vostra? E come mai? Ecco, speriamo che l’esempio renda l’idea. E se gli umani fanno a volte fatica a prendere delle decisioni o di fare delle valutazioni, apparentemente semplici, figuriamoci come potrebbe essere problematico farlo ai computer. Che sono programmati, ricordiamoci, da questi umani, così imperfetti che sono.
Durante il corso vedremo anche alcune cose interessanti, tipo programmi che sono in grado di sviluppare (megli dire: estendere) se stessi. Sarà sicuramente illuminante come concetto. Ma, per parafrasare la frase di un noto fumetto “con i grandi poteri arrivano anche grandi repsonsabilità”. Siamo davvero sicuri di essere così perfetti da poter sviluppare programmi perfetti? E come fare per mitigare i rischi? Sicuramente, dei potenziali problemi tecnici in agguato ce ne sono molti, e si aprono anche molti problemi di natura etica. Qui ne menzioneremo anche alcuni di questi.
Come già accennato, nelle pagine correlate e indicate sopra, il presente corso è strettamente correlato ai corsi di programmazione logica, linguaggio di programmazione Prolog, aggiungiamo anche Lisp, un qualsiasi dialetto di Lisp, per esempio Scheme o Racket, che sono i linguaggi migliori, in quanto più semplici e con meno distrazioni sintattiche e semantiche, per iniziare ad approcciarsi all’intelligenza artificiale. Poi, i concetti imparati con questi linguaggi si possono riutilizzare facilmente anche nei contesti di tutti i linguaggi che vogliamo. Ma non è detto (non è neanche escluso, a dire il vero, ma non dobiamo partire con nessun tipo di preconcetto) che i linguaggi più “avanzati” (quelli più spinti da colossi nel settore, per intenderci) producano risultati migliori. A volte è l’esatto contrario. Giusto come esempio, l’autore di questa pagina ha fatto i primi esperimenti con programmi che sviluppavano se stessi all’inizio degli anni ‘80 (si, quattro decenni fa), su Sinclair ZX Spectrum con il linguaggio Beta Basic. Spectrum aveva ben (!) 48k di RAM, dei quali alcuni erano continuamente utilizzati da programmi di sistema, e anche Beta Basic prendeva la sua fetta. Al programmatorte rimaneva a disposizione, si e no, una trentina di kilobyte (si, non gigabyte, non megabyte, ma kilobyte) della memnoria RAM. Chiaramente, all’epoca era poco più di un gioco, ma speriamo che l’esempio renda l’idea. E nel caso vi fosse difficile farvi un idea di questo, basta dire che i circuiti programmabili, moderni, non di quattro decenni fa, con potenza di calcolo e la memoria RAM paragonabili allo Spectrum di allora, hanno delle librerie di codice per l’intelligenza artificiale e per l’apprendimento automatico. Potete utilizzare il vostro motore di ricerca preferito per trovare queste informazioni e per farvi qualche idea.
C’è un importante prerequisiti per questo corso, però: I partecipanti devono già avere competenze avanzate di programmazione e competenze dei sistemi di logica formale. Non è neccessario che uno conosca Prolog o Lisp (anche se aiuta), ma almeno 2-3 linguaggi di programmazione, che implementano diversi paradigmi di programmazione, li dovrebbe conoscere. In mancanza di queste competenze, frequestare questo corso è tempo perso. Conviene prima dedicare del tempo per acquisire le competenze propedeutiche menzionate.