L’informatica nella scuola usando il PROLOG (terza puntata)

L’informatica nella scuola  usando il  PROLOG (terza puntata)

 L’informatica nella scuola

usando il  PROLOG
(terza puntata)

(“Scuola e Didattica”, Editrice La Scuola,
Brescia, Anno XXXIV,  n.10 (15 febbraio 1989)

  

        Parte Terza: IL SOGNO (O LA PROFEZIA) DI LEIBNIZ

Presentiamo su
questo numero la parte conclusiva del lavoro dedicato all’informatica con il
linguaggio PROLOG (v. nn. 5 e 8 della Rivista).

In questa parte vengono presentate regole e basi di
conoscenza del linguaggio in questione
(La redazione).

 

Abbiamo già visto che è possibile dialogare col computer.
Descritto l’AMBIENTE si possono porre interrogazioni ed il computer risponde a
tono. In pratica disponiamo di una macchi­na che sembra in grado di risolvere
questioni del tipo: date delle affermazioni, verificare se una certa altra
affermazione è “logicamente deducibile” dalle precedenti. Questioni di questa
natura sono e sono state oggetto di vivo interesse fin dall’antichità. Già
Aristotele aveva individuato un certo numero di forme di ragionamento corrette,
dette sillogismi. Consideriamo due esempi di sillogismo aristoteli­co del tipo
più noto:

             Tutti gli uomini sono mortali

             Socrate è un uomo

             _____________________________

             Socrate è mortale

 

             Tutti gli ateniesi sono democratici

             Lisippo è ateniese

             _____________________________

             Lisippo è democratico

Se si prende in esame solo la forma delle proposizioni (esulando
dal significato), ci si accorge che, nell’un caso e nell’altro, il ragionamento
si svolge secondo un identico schema:

             Tutti gli  A  sono  P 

             B è un A

             _____________________

             B è un P

In pratica dalle forme delle due ipotesi (proposizioni sopra la
riga) si ricava automaticamente la forma della conclusione (proposizione sotto
la riga), con un procedimento indipendente dal significato delle proposizioni.
Quindi il sillogismo costituisce una regola sintattica per la con­nessione
dimostrativa delle proposizioni, senza riguardo del loro significato: è  una
regola di deduzione o inferenza.

Ebbene anche in PROLOG, come nel sillogismo, abbiamo:

  *le premesse: sono le frasi  PROLOG che costituiscono
l’AMBIENTE cioè il programma;

  * la conclusione: è la domanda;

  *la regola di deduzione: è una  regola già  presente nel
computer (che parla PROLOG), detta REGOLA DI
RISO­                                                   LUZIONE.

 

D’altra parte in PROLOG le proposizioni, rispetto a quelle del
sillo­gismo, presentano una maggiore varietà di forme; il numero delle premesse
è (teoricamente) illimitato; le premesse possono essere o affermazioni di base
(FATTI) o affermazioni sotto condi­zione (REGOLE). Quindi il computer si
presenta come una macchina in grado di verifi­care se una certa proposizione è
“logicamente deducibile” da un gruppo iniziale di proposizioni: esso utilizza,
come nel sillogismo, una regola di deduzione di natura sintattica ma è in grado
di  operare anche in ambiti più articolati e complessi di quello del sillogismo.

Può essere interessante vedere come si è arrivati a tanto!

Le forme corrette del ragionamento, fin dall’antichità, sono
state oggetto di una materia specifica: la logica. Essa rimase a lungo (per
quasi due millenni) e si sviluppò all’interno della filosofia, come studio delle
argomentazioni valide nello svolgimento di un discorso “convincente”. Verso la
metà del 1800 si fa preponderante l’apporto della matematica: viene introdotto
il “calcolo simbolico” in analogia appunto con quello matema­tico, per garantire
alla logica la precisione ed il rigore propri della matematica.

Già nel 1600 Leibniz “sognava” in questi termini: “Io ritengo di
poter escogitare una certa scrittura universale, me­diante la quale possiamo
eseguire calcoli su ogni genere di argomenti e trovare dimostrazioni come
nell’algebra e nell’arit­metica”…”Quo facto quando orientur controversiae, non
magis di­sputatione opus erit inter duos philo­sophos, quam inter duos
computistas. Suffi­ciet enim calamos in manus sumere sedere­que ad abbacos et
sibi mutuo (accito si placet amico) dicere, cal­culemus”.

Stupefacente, quel “calculemus”!

In pratica si afferma che un ragionamento dimostrativo potrebbe
essere trattato alla stregua di un problema matematico: le pre­messe
corrispondono ai dati iniziali, la conclusione alla so­luzione. Come per
risolvere un problema si applicano, a partire dai dati iniziali, un certo numero
di regole di calcolo per ricavare l’elemento incognito, così nel ragionamento da
un gruppo di premesse attra­verso  regole di deduzione si giunge alla
conclusione. In entrambi i casi si ha una catena: si passa da un anello 
all’altro o con regole di calcolo o con regole logiche: da ciò che si sa e si
conosce come vero, si produce “un nuovo” vero. In entrambi i casi occorre
disporre prioritariamente di un opportuno linguaggio preciso e rigoroso in cui
formalizzare la que­stione, cioè tradurla in nudi simboli, da trattare con
regole di manipolazione che non facciano riferimento al contenuto di
significa­to.

Accogliendo il suggerimento di Leibniz, ripensiamo al modo di
trattare una questione di tipo matematico. Ad esempio, supponiamo che Giorgio ed
Anto­nio possiedano rispettivamente trecentottantaquattro e centoquarantatre
modellini di automobile  e che abbiamo deciso di mettersi assieme. Anzitutto
tradurremo la questione in linguaggio aritme­tico. Tale lin­guag­gio, come è ben
noto, nella forma più comune, poggia su un alfa­beto di dieci segni detti cifre

      0  1  2  3  4  5  6  7  8  9

coi quali si possono scrivere tutti i numeri: ogni numero è
rappresen­ta­to da una successione finita di questi segni (una “parola” del
linguag­gio), costruita secondo le regole del “siste­ma di numerazione
posizio­nale”. Nel nostro caso: 384 e 143. 

Questo che a noi sembra il “sistema naturale” per scrivere i
numeri è in realtà un modo che si è affermato fra altri modi, lentamente ed
assai tardi in Europa, a partire dal 1200.

Il sistema di numerazione usato dai romani e in genere da tutti
i popoli antichi (India esclusa) è senz’altro meno conveniente, in quanto  non
ha le qualità di agilità e snellezza di un sistema posizionale: con l’aumentare
della grandezza del numero rappresentato occorre introdurre nuovi simboli, non
si possono eseguire i calcoli in colonna ecc.

Invece, nel nostro sistema, il procedimento di calcolo relativo
alle opera­zioni elementari è semplicissimo. Nel nostro caso:

           384 +

           143 =

           ______

           527

Il calcolo, anche con numeri molto grandi, può essere eseguito
facilmente e velocemente perfino da chi sa contare solo sulla punta delle dita.
E’ sufficiente infatti rispettare alcune semplici regole: cominciare dall’ultima
colonna a destra, trasformare la cifra della prima riga, cioè 4, nella
successiva (secondo l’ordine alfabetico) e questa a sua volta nella successiva e
così via ripe­ten­do il procedimento tante volte quanto indicato dalla cifra
della seconda riga (stessa colonna), cioè 3 volte nel nostro caso:    

          4 —–> 5 —–> 6 —–>7

Così si comincia a formare il numero-risultato: abbiamo trovato
l’ultima cifra. Si riprende quindi dalla penultima colonna:

          8 —-> 9 —–> 0 —–> 1 —–> 2

e così si ottiene la penultima cifra. Poichè, questa volta, nel
pro­cesso di trasformazione, si è dovuto ricominciare la successione delle
cifre, il processo  per la terzultima colonna parte non con la cifra 3, ma già
con la successiva cioè 4 (si è effettuato il riporto).

          4 —-> 5

E così abbiamo ottenuto: 527, che per noi (ce ne eravamo quasi
dimen­ticati!) ha un significato ben preciso.

Nell’eseguire il calcolo non è intervenuto in alcun momento un
“atto creativo della mente”: si sono effettuate manipolazioni, trasformazioni di
simboli con “procedimenti di tipo meccanicistico”. Così l’arte del calcolo,
riservata nei tempi antichi a pochi specialisti, può essere, nel nostro sistema
di numerazione, insegnata anche ai bambini. Anzi il “far calcolo” è ormai così
semplice che può “impararlo” anche una macchina, essendo divenuto appunto una
mera trasforma­zione di simboli. Il procedimento è completamente  staccato dal
significato dei simboli stessi: esi­stono le condizioni per la sua
automatizzazione.

 

Se ne avvide Pascal, verso la metà del 1600. Egli progettò e
costruì la prima macchina in grado di eseguire l’addizione (e la sottrazione):
un comples­so sistema di ruote, ingranaggi e fine­strelle attraverso le quali si
possono leggere le cifre. C’è una ruota per ogni colonna ed ogni  ruota ha dieci
denti numerati: quando una ruota effettua un giro com­pleto (nel passaggio dal
dente 9 al dente 0), viene agganciata attraverso un ingranaggio e fatta avanzare
di un dente anche la ruota precedente, rendendo così automatico il riporto. La
macchina di Pascal, detta “pascalina”, viene anche chiamata “macchina a
riporto”.    

E’ l’inizio del processo di automatizzazione che segnerà il
progresso tecnico e scientifico dei secoli successivi. A questa prima macchina
si accompagnerà poco dopo quella di Leibniz che esegue anche moltipli­ca­zioni e
divisioni.

 

Ebbene Leibniz sogna di poter fare altrettanto in altro ambito:
si propone di costruire “un linguaggio” cioè un sistema di simboli che permetta
di rappresentare qualsiasi tipo di proposizioni (con cui esprimiamo i nostri
pensieri) e di trattare le relative rappresenta­zioni simboliche con regole di
manipolazione svincolate dal significato, in modo da assicurare alla conclusione
la oggettività propria del risultato di un calcolo aritmetico.

Già Raimondo di Lullo (1235-1315) aveva tentato di costruire un
proce­dimento meccanico che consentisse di ricavare, a partire da alcune
affermazioni di base, una conclusione coerente. Ma è certamente merito di
Leibniz l’aver proposto, in campo logico, il superamento dei vecchi schemi
aristotelici e medioevali e indica­to con chiarezza una nuova prospettiva di
sviluppo.

Secondo questa nuova visione  della logica, diventa fondamentale
la ricerca di un opportuno, appropriato linguaggio che risponda allo scopo.

La scelta del linguaggio è molto importante. Basta pensare a
quanto è avvenuto in aritmetica. L’utilizzazione del sistema numerico
posizio­nale, invece, ad esempio, dei sistemi dell’antichità classica, non solo
ha consentito una grande semplificazione nella rappresentazione dei numeri e
nelle procedure di calcolo, ma ha creato anche le condizioni per la
meccanizzazione del calcolo stesso.

Dunque Leibniz propone di cercare un linguaggio che permetta di
rap­presentare simbolicamente tutte le questioni e permetta di ana­lizzare i
ragio­namenti con il rigore e l’auto­matismo che vigono in aritme­tica e in
algebra.

Queste idee furono riprese successivamente da altri pensatori.
Ma si può dire che il messaggio è stato pienamente capito solo a distanza di
secoli. Bisogna infatti aspettare il 1800, perché maturino le condizioni
opportune, quando cioè si incomincia a riorganizzare funzionalmente i vari campi
scientifici e si ripen­sa ai loro fondamenti. In questo ambito, due millenni
dopo Aristotele, si colgono e vengono messi  in luce i limiti della logica
tradizionale e se ne intravede il superamento nella formulazione di metodi nuovi
e rigorosi, in analogia a quelli comunemente usati in matematica. Con Boole
(1815-1864) si incomincia a costruire un “calcolo logico” che prescinde dal
significato dei simboli e dipende esclusivamente dalle leggi che ne regolano
l’uso, proprio come avviene in algebra: sorge la “logica formale”.  La logica,
armai trapiantata nel campo matema­tico, acquista un vi­gore del tutto nuovo,
che sembra voler compensare il precedente lunghissimo periodo di ristagno. Vi
contribuiscono studiosi di diversa nazio­nalità: Russel (inglese come Boole),
Peano (italiano), Gottlob Frege (tedesco) ecc.

Gottlob Frege (1848-1925) introduce la “logica dei predicati”,
il nucleo fondamentale della logica moderna. Essa costituisce un linguaggio
formale di strutture simboliche che si presta ad essere utilizzata per
descrivere conoscenze e può essere vista come una teoria generale del
ragionamento corretto (ingloba ad esempio il sillogismo aristotelico).

E’ possibile in tale linguaggio rappresentare le proposi­zioni:
si possono descrivere gli oggetti (termini) che ne sono coinvolti e si possono
descrivere proprietà degli oggetti e  relazioni fra oggetti (predicati). Così
una proposizione elementare diven­ta un simbolo di predicato unito ad un
insieme ordinato di termini come argomenti.

Abbiamo ritrovato una terminologia che ci è familiare!

Infatti il PROLOG è un sottoinsieme della logica dei predicati:
i FATTI (proposizioni) e le REGOLE (relazioni fra proposizioni) e la stessa
domanda  sono espressi nella formalizzazione propria di tale logica.

Ad esempio la proposizione “il topo mangia il formaggio” può
tradursi in tale linguaggio:

            mangia(topo, formaggio)

Cioè è possibile mantenere i segni (i caratteri) della lingua
italiana scritta, tenendo però presente che ad esempio “mangia” ora   è
nient’altro che  il nome simbolico della relazione che lega i nomi simbolici
“topo” e “formaggio”: tanto è vero che potremmo (ma ovviamente risulterebbe meno
immediata la interpre­tazione) tra­durre la frase di partenza in tanti altri
modi:

             m(t,p)  oppure  m112(t0,p) ecc.

E’ certamente opportuno non cadere in un puro meccanismo
formale, in modo da poter continuare a tener presente il significato, per
“continuare a pensare”.

Nella logica dei predicati esiste un in­sieme di regole che
consente di verificare se una data proposizione è conseguenza impli­cita delle
proposizioni iniziali. Ebbene il PROLOG contiene un “motore inferen­ziale” cioè
una regola di deduzione di tipo generale, applicabile su qualsiasi BASE DI
CONOSCENZA, descritta nell’AMBIENTE. Il motore inferenziale è già presente nel
computer (che parla PROLOG) e può essere considerato dall’utilizzatore, “una
parte del computer stesso”: tale regola si fonda su un metodo di deduzione,
detto “principio di risoluzione”, dovuto al matematico J.A. Robinson (1965).
Mentre la BASE DI CONO­SCENZA va costrui­ta, ovviamente, di volta in volta, la
regola di de­duzione è sempre la stessa.

L’effetto di tale regola di deduzione è equivalente a quello che
si avrebbe se si procedesse con regole deduttive che tenessero conto anche del
significato delle proposizioni. Cioè, in altre parole, la regola di deduzione,
pur manipolando rappresentazioni sim­boliche delle proposizioni ed
esclusivamente sul piano sintat­tico, arriva alla stessa conclusione cui si
perverrebbe procedendo in modo ordinario, cioè tenendo conto e del piano
sintattico e del piano semantico.

Consideriamo una situazione molto semplice relativa alla
consueta base di FATTI

                abita_a(marco,roma).

                abita_a(giovanni,milano).

                abita_a(louis,parigi).

                abita_a(tiziana,roma).

                è_capitale_di(roma,italia).

                è_capitale_di(parigi,francia).

 

in cui si chiede di verificare che

                è_capitale_di(parigi,francia).               

Il computer mette a confronto il simbolo di predicato contenuto
nella domanda, cioè è_capitale_di con i simboli di predicato che figurano nella
lista dei FATTI: il confronto viene eseguito, scorrendo la lista dei FATTI
dall’alto verso il basso, “meccani­camente”, in ordine, carattere per carattere.
Perciò sono immediatamente esclusi,  i primi quattro FATTI. Quando i simboli di
predicato coincidono, come nel caso del quinto FATTO, allora vengono confrontati
nell’ordine gli argomen­ti: nel nostro caso, si ha ancora un fallimento in
quanto non coincidono i primi argomenti cioè “parigi” e “roma”. Finalmente il
confronto con il sesto FATTO si risolve positivamente ed il computer può
rispon­dere: VERO.

Ovviamente in genere la ricerca è più lunga e complessa perchè
la domanda può essere di tipo GENERATE,  può comportare confronti con la TESTA
di REGOLE  ecc., tuttavia non cambia la natura del procedimento di ricerca. 

In conclusione, il computer può sviluppare deduzioni corrette,
alla stregua della macchina di Pascal che sa trovare la somma di due numeri: in
entrambi i casi si hanno regole di manipolazione simbolica precise e rigorose
che garantiscono la correttezza del procedimento.

Di fronte alle prime macchine calcolatrici, il filosofo Thomas
Hobbes (1588-1679) esclamava: “Ottone e ferro sono stati investiti della
funzione del cervello ed istruiti a compiere una delle più difficili operazioni
della mente”. Ci si avviava verso la liberazione dalla fatica di far calcoli. A
questo proposito Leibniz aveva detto: “Non è ammis­sibile che studiosi e
scien­ziati, anzichè elaborare e confrontare nuove teorie, perdano le proprie
ore come schiavi nelle fatiche del calcolo, che potrebbe essere affidato a
chiunque se si potessero usare le macchine…”.

Oggi le macchine, come abbiamo visto, sono diventate anche un
importante strumento per la rappresentazione, la raccolta e la gestione delle
conoscenze. Trattare conoscenze costituisce una attività sempre più rilevante
nella società moderna. La tecnologia stessa non si identifica più solo con le
macchine che trasformano materiali, ma, anche nell’opinione comune,  sta
diventando sempre più  rilevante il peso dei sistemi per la raccolta e la
gestione delle conoscenze.

Il computer può
aiutare a prendere decisioni, ad impostare razio­nalmente una strategia, può
aiutare non solo a fare, ma anche a decidere: la logica assume il ruolo di perno
nel progetto informatico giapponese detto “della Quinta Generazione”, per il
quale il linguaggio standard è il PROLOG.

Condividi


Per rimanere aggiornato su tutte le novità iscriviti alla newsletter

Quando invii il modulo, controlla la tua inbox per confermare l'iscrizione

Privacy Policy