Adesso non venite a lamentarvi che questa non è matematica, ma informatica. Lo so benissimo, anche se dal mio punto di vista le differenze sono relativamente minori (ho dato esami di informatica a matematica, e viceversa). Però sono notoriamente pigro, la parte principale di questo testo l’ho buttata giù al volo perché mi è stata chiesta, e non vedo perché non riciclarmela in altro modo… senza contare che può anche servire per chi non è interessato né alla matematica né all’informatica. E poi, se dobbiamo dirla tutta, sintassi e semantica si usano anche in logica matematica, quindi non è che io sia così fuori tema!
Si sente spesso parlare di sintassi, semantica e grammatica di un linguaggio di programmazione. Se uno si ricorda ancora cosa faceva a scuola, i nomi – almeno grammatica, su… – non sono nuovi; e in effetti il loro significato deriva più o meno direttamente proprio da quello che usano i linguisti. Vediamo qual è il loro significato, partendo proprio da quello che hanno nelle lingue reali.
Partiamo dalla semantica. In linguistica, la semantica è lo studio del significato delle parole e delle frasi in una lingua; detto in parole povere, “che cosa vuol dire quello che c’è scritto?” Nei linguaggi di programmazione, capita esattamente lo stesso: la semantica di un algoritmo è quello che l’algoritmo fa… ammesso naturalmente che non ci siano dei bachi. Similmente, nella logica matematica la semantica è l’interpretazione di una formula. Per fare un esempio, se scrivo ∀x (∃y: y=x+1) la sua semantica è “per tutti gli x possiamo trovare un y che vale x+1”. Se vogliamo rimanere più terra terra, se scrivo 2+2=4 la sua semantica è “due più due è uguale a 4”.
La sintassi indica come bisogna scrivere la frase perché sia corretta; ad esempio scrivere “qual’è” è sintatticamente scorretto, mentre “qual è” è corretto. In un linguaggio di programmazione come il perl, una regola sintattica è ad esempio che le variabili devono iniziare con $, gli array con @ e gli hash con %, o che una componente di un array è $a[x] mentre una di un hash è $a{x}. La parte più importante da tenere a mente è che la sintassi è una convenzione: non c’è nessuna ragione teorica perché gli elementi degli array stanno tra quadre e quelli di un hash tra graffe, esattamente come non c’è nessuna ragione teorica perché in italiano si accentino solo le parole tronche e non anche le sdrucciole come ad esempio in spagnolo. Notate che la sintassi è facilmente riconoscibile anche da uno stupido com’è un calcolatore: se uno scrive un programma, può capitargli che gli compaia il messaggio di errore “syntax error”, ma non certo “semantic error”! Anche nella logica matematica, le formule sintatticamente corrette sono quelle che hanno un senso, anche se magari non sono vere. Ad esempio, tra i numeri interi la formula ∀x∈N (∃y∈N: y=x/2), che dice “per ogni numero intero ce n’è un altro pari alla sua metà”, è sintatticamente corretta ma falsa, visto che ad esempio 1/2 non è un intero. La formula ∀=x/N (y∈N: y∃x∈2) non vuol dire nulla, e quindi non è sintatticamente corretta.
La grammatica, infine, è l’insieme delle regole per comporre le frasi (soggetto – verbo – complementi…) , a partire dalle varie parti che la compongono e che hanno dei ruoli diversi (verbo, nome, preposizione…). Nei linguaggi di programmazione il concetto di grammatica è molto più specializzato, perché esiste un insieme di regole formali che permettono di generare tutti i programmi sintatticamente corretti, applicando man mano delle trasformazioni. Anche nella logica matematica ci sono queste regole formali, però stranamente non viene dato loro un nome specifico, almeno per quanto ne so.
Ricapitolando, la semantica dà il significato, la sintassi il modo corretto di scrivere, e la grammatica dà le regole per scrivere correttamente. Vista così, la cosa non è nemmeno troppo complicata; ma basta relativamente poco e arriva uno come Gödel a mischiare le cose (perché il Numero di Gödel usato nel suo teorema di incompletezza non è poi altro che un modo di trovare una formula il cui signficato semantico riprende la formula stessa, invece che essere al di fuori del sistema). Ma credo di avervi già perso, stavolta…
Ultimo aggiornamento: 2007-03-11 22:24
Palo.
Gli hash in perl si indicano col percentuale %hash
il # è il simbolo per i commenti.
E’ vero, “la cosa non e’ nemmeno troppo complicata”, se si tralascia la semantica.
Il punto dolente, dannatamente difficile da imbrigliale, e’ sempre lui, il significato (ad esempio, ti affretti di annotare “ammesso che non ci siano dei bachi”).
Anche (soprattutto) nel caso del teorema di Gödel.
Il cortocircuito di cui parli, generato dalla formula “il cui significato” riprende la formula stessa, perde parte del suo potenziale distruttivo (quello della contraddizione di Russell) proprio perche’ si basa sul significato. Anzi, proprio per questo riesce a trasformare il suo potenziale distruttivo in forza creativa: basta cambiare il significato di “numero naturale” (la chiave sintattica del cortocircuito di Gödel) per svicolarsi (puntualmente, contingentemente) dalla “contraddizione” (tra virgolette!) di Goedel, quella che vorrebbe proclamare un “vero ma non dimostrabile” (come succede, ad esempio, chiamando numero naturale anche l’inverso dei famosi infinitesimi dx dell’Analisi Non-Standard…).
La Biblioteca di Babele e’ solo sintatticamente finita. Semanticamente e’ transfinita.
Ciao! (e scusate l’intrusione, ho l’attenuante della notte fonda…)
PS
Hofstadter intitolava un capitoletto del suo GEB “Gli isomorfismi inducono il significato”, ma, se ricordo bene, non e’ che chiarisse molto il senso di quella frase, in quel capitoletto. Ma forse il senso di quella frase va spremuto da tutte le pagine del suo libro.
Non hai idea di quanto mi hai aiutato, con questo post. Grazie. :*
Michele: ehm… si vede che stavo pensando a tutt’altro quando ho aggiunto quel pezzetto :-(
Hronir: ovvio che la semantica incasina tutto (dal punto di vista del computer). Meno ovvio che la biblioteca di Babele sia infinita semanticamente: per quello bisogna accettare il punto di vista penrosiano sulla mente, ma di questo ne avevamo già parlato (senza essere d’accordo…) Per Hofstadter, a fine mese uscirà I am a strange loop che dovrebbe ritornare sui temi di GEB. Però qui siamo davvero fuori dalla matematica, light o no :-)
rdm: allora sono un uomo più felice :-)
Hai letto “Infinito” di Lucio Lombardo Radice? (edizione introvabile dei “libri di base” di Editori Riuniti…!!!)
Mi pareva di ricordare che la questione dei significati che sono piu’ dei significanti fosse piuttosto pacifica e non coinvolgesse (necessariamente) la mente…
Ma non è affatto detto che ci sia un significante per cui i significati siano in numero infinito :-)
touche’… :)
Cito l’introvabile Lucio Lombardo Radice:
“il numero dei significati dei quali sono via via suscettibili le parole-scritture di una data lingua, con alfabeto finito, che sono un insieme infinito numerabile, ha una potenza piu’ che numerabile, anzi arbitrariamente grande, quindi, nella scala dei metalinguaggi”
ovviamente purche’ si distinguano i libri in funzione del linguaggio oggetto: LLR si immagina che il linguaggio sia specificato negli ex-libris, L0, L1 (metalinguaggio di L0), L2 (metalinguaggio di L1)… Beh, mi pare che questo sia incidentalmente anche il significato del famoso articolo di Tarski in cui le antinomie sono ricondotte alla possibilita’ di formulare metaenunciati nel linguaggio oggetto…