Premessa

Ciao! Se è la prima volta che capiti su questo sito, ti consiglio di consultare la pagina principale di questo Giardino Digitale per scoprire meglio cos’è e come navigarlo.

Lo stato di questa nota è al momento: 🟡 Incompleta.


Quando pensiamo alla parola linguaggio, pensiamo normalmente a qualcosa che serve agli esseri umani per comunicare: l’italiano, l’inglese o la lingua dei segni. Un linguaggio è quindi un sistema che ci permette di costruire espressioni e di attribuire loro un significato.

Una lingua naturale, ossia una di quelle usate nella vita di tutti i giorni (come l’italiano), è estremamente complessa: non comprende soltanto un insieme di parole, ma anche regole grammaticali, eccezioni, ambiguità, contesto, significati impliciti e moltissimi altri fenomeni.

Per esempio, una persona capisce immediatamente che

Il gatto mangia il topo.

è una frase grammaticalmente ben formata, mentre

Gatto il topo mangia il.

non lo è.

Un essere umano può leggere una frase e utilizzare la propria conoscenza linguistica per stabilire se abbia senso. Un computer, invece, non possiede intuitivamente il concetto di “frase corretta”. Se vogliamo che possa elaborare un linguaggio, dobbiamo fornirgli una descrizione precisa e non ambigua delle sue regole, in modo che sia possibile stabilire meccanicamente quali espressioni sono ammesse e quali no.

È proprio da questa idea che nasce la teoria dei linguaggi formali, in cui il termine formale indica qualcosa che è stabilito da regole oggettive e ben chiare, non soggette a possibili interpretazioni come nel caso dei linguaggi naturali.

Definizione: teoria dei linguaggi formali

La teoria dei linguaggi formali è un ramo della matematica applicata che studia i linguaggi formali e le loro proprietà, utili in logica, informatica e linguistica.

1 - Introduzione ai linguaggi formali

Così come per i linguaggi naturali alla base di tutto ci sono le lettere dell’alfabeto con cui costruiamo le parole, anche i linguaggi formali hanno alla propria base i simboli di un alfabeto con cui possiamo costruire stringhe.

Partiamo quindi da questi concetti fondamentali per arrivare pian piano alla definizione di linguaggio formale.

1.1 - Simboli e alfabeti

Definizione: simbolo

Un simbolo (o carattere) è un oggetto matematico considerato come un’unità indivisibile all’interno di un linguaggio formale.

Definizione: alfabeto

Un alfabeto, denotato solitamente con , è un insieme finito e non vuoto di simboli.

1.2 - Stringhe

Gli alfabeti possono essere usati per creare stringhe.

Definizione: stringa

Una stringa (o parola o frase) su un alfabeto è una sequenza finita di simboli in .

Una stringa particolare è quella vuota.

Definizione: stringa vuota

La stringa vuota, solitamente denotata con , è la stringa composta da zero simboli.

1.2.1 - Operazioni e nozioni sulle stringhe

Definizione: stringhe uguali

Due stringhe si dicono uguali se e solo se sono composte dagli stessi simboli nello stesso ordine.

Definizione: lunghezza di una stringa

Data una stringa , la sua lunghezza è il numero di simboli di cui è costituita.

Definizione: concatenazione di due stringhe

Date due stringhe e , la loro concatenazione è la stringa ottenuta giustapponendo i simboli di seguiti dai simboli di .

Proprietà: neutralità della concatenazione rispetto alla stringa vuota

La stringa vuota è l’elemento neutro della concatenazione: infatti, presa una qualsiasi stringa , la loro concatenazione o produce sempre .

Proprietà: associatività della concatenazione

La concatenazione è associativa, cioè date tre stringhe , e vale

Osservazione: non commutatività della concatenazione

La concatenazione non è commutativa, infatti date due stringhe e abbiamo che genericamente

eccetto nel caso in cui almeno una delle due è la stringa vuota (perché è l’elemento neutro della concatenazione) o in cui le due stringhe sono uguali.

Definizione: prefisso di una stringa

Date due stringhe e , diciamo che è un prefisso di se esiste una terza stringa tale che .

Definizione: suffisso di una stringa

Date due stringhe e , diciamo che è un suffisso di se esiste una terza stringa tale che .

Osservazione: una stringa è prefisso e suffisso di se stessa

Data una stringa , essa è contemporaneamente sia prefisso che suffisso di se stessa perché esiste la stringa vuota per cui (nel caso del prefisso) e (nel caso del suffisso).

Definizione: inversa di una stringa

Data una stringa , la sua inversa è la stringa ottenuta invertendo l’ordine dei simboli di :

Definizione: stringa palindroma

Una stringa è palindroma se è uguale alla sua inversa .

Definizione: potenza -esima di una stringa

Data una stringa , la sua potenza -esima (con ) è la stringa ottenuta concatenando per volte:

^definizione-potenza-n-esima-di-una-stringa

1.3 - Linguaggi formali

Ora possiamo finalmente definire cos’è un linguaggio formale.

Definizione: linguaggio formale

Un linguaggio formale (o più semplicemente linguaggio) su un alfabeto è un qualunque insieme di stringhe su .

Notazione: rappresentazione per caratteristica di un linguaggio

Esattamente come avviene per gli insiemi, anche i linguaggi possono essere rappresentati per caratteristica: per esempio,

indica il linguaggio composto dalle stringhe di di lunghezza dispari, oppure

indica il linguaggio delle stringhe composte da un numero arbitrario di seguite da un numero arbitrario di .

Definizione: linguaggio vuoto

Il linguaggio vuoto è un linguaggio contenente zero stringhe ed è quindi un insieme vuoto.

Attenzione: linguaggio vuoto diverso da linguaggio con stringa vuota

Il linguaggio vuoto, corrispondente a un insieme vuoto , e un linguaggio composto dalla sola stringa vuota non sono la stessa cosa, perché mentre il primo non ha elementi, il secondo ha un solo elemento che è :

1.3.1 - Operazioni su linguaggi

Osservazione: operazioni insiemistiche sui linguaggi

Dal momento che i linguaggi sono insiemi, anche su di essi possono essere applicate le operazioni insiemistiche dell’unione , intersezione e differenza .

Definizione: potenza -esima di un alfabeto

Dato un alfabeto , la sua potenza -esima (con ) è il linguaggio costituito da tutte le stringhe su di lunghezza :

In particolare, .

Proposizione: cardinalità della potenza -esima di un alfabeto

Dato un alfabeto finito , con , e dato un , la cardinalità della sua potenza -esima è:

Definizione: chiusura di Kleene su un alfabeto

Dato un alfabeto , la sua chiusura di Kleene è il linguaggio formato da tutte le stringhe su , inclusa quella vuota . Formalmente, è l’unione di tutte le potenze -esime di :

Definizione: chiusura transitiva su un alfabeto

Dato un alfabeto . la sua chiusura transitiva è il linguaggio formato da tutte le stringhe su , eccetto quella vuota . Formalmente, è l’unione di tutte le potenze -esime di eccetto :

o, in alternativa,

Esercizio sulle chiusure sugli alfabeti

Dato l’alfabeto , elenca dieci stringhe del linguaggio

Ora possiamo “ri-definire” l’operazione insiemistica del complemento, applicando questo concetto ai linguaggi formali.

Definizione: complemento di un linguaggio

Dato un linguaggio su un alfabeto , il suo complemento è il linguaggio ottenuto dalla differenza tra la chiusura di Kleene e stesso:

Definizione: concatenazione di due linguaggi

Dati due linguaggi e , la loro concatenazione è il linguaggio ottenuto concatenando ogni stringa con ogni stringa :

Proprietà: associatività della concatenazione di linguaggi

La concatenazione è associativa, cioè dati tre linguaggi , e vale

Osservazione: non commutatività della concatenazione di linguaggi

La concatenazione non è commutativa, infatti dati due linguaggi e abbiamo che genericamente

eccetto in particolari casi, ad esempio quando almeno uno dei due è il linguaggio vuoto, oppure quando i due linguaggi coincidono.

Proprietà: assorbimento della concatenazione rispetto al linguaggio vuoto

Il linguaggio vuoto è un elemento assorbente della concatenazione: infatti, preso un qualsiasi linguaggio , la loro concatenazione o produce sempre il linguaggio vuoto .

Infatti, per la definizione di concatenazione, abbiamo che

ma, poiché il linguaggio vuoto non contiene alcuna stringa, non esiste nessuna stringa tale che . Di conseguenza, non esistono stringhe concatenabili e l’insieme risultante non contiene alcun elemento: da qui l’insieme vuoto. Stesso discorso per .

Proprietà: neutralità della concatenazione rispetto al linguaggio contenente la stringa vuota

Il linguaggio , costituito dalla sola stringa vuota, è l’elemento neutro della concatenazione dei linguaggi: infatti, preso un qualsiasi linguaggio , la sua concatenazione con , sia sia , produce sempre .

Esercizio 1 sulla concatenazione di linguaggi

Dato l’alfabeto , elenca dieci stringhe del linguaggio

Definizione: potenza -esima di un linguaggio

Dato un linguaggio , la sua potenza -esima (con ) è il linguaggio ottenuto concatenando per volte:

2 - Approcci per la descrizione di linguaggi

Come abbiamo visto, possiamo descrivere un linguaggio formale attraverso le stringhe che lo compongono. Solitamente, ai fini dello studio, i linguaggi davvero interessanti sono quelli contenenti un numero infinito di stringhe, ma non è possibile descriverli semplicemente elencandole tutte (come per esempio fanno i vocabolari che elencano tutte le parole di una lingua).

Occorre quindi un approccio finito per descrivere un linguaggio infinito: potremmo per esempio trovare un modo meccanico per dire se una stringa è “accettabile” all’interno di un linguaggio o meno.


Fonti

  • 🏫 Corso di Laurea in Informatica (L-31 R) presso l’Università di Torino:
    • Corso di Linguaggi Formali e Traduttori (INF0344), A.A. 2026-27 (pagina Moodle):