Intorno al Lemma d`Iterazione per Linguaggi Liberi dal Contesto

Transcript

Intorno al Lemma d`Iterazione per Linguaggi Liberi dal Contesto
Intorno al Lemma d’Iterazione per
Linguaggi Liberi dal Contesto
Gabriele Gullà
Introduzione
Nelle pagine che seguono tratterò, in forma sintetica e il più possibile autocontenuta, le principali proprietà dei linguaggi liberi dal contesto o non
contestuali (cfr. [4] e [5] tra i primi lavori in proposito), con particolare attenzione al Lemma d’Iterazione.
Per citare tale risultato userò l’acronimo PL (dall’inglese Pumping Lemma).
Quello che in letteratura anglosassone è chiamato Iteration Lemma sarà da
me riportato (per evitare qualsiasi confusione) come Lemma di Ogden (in
modo del tutto legittimo, cfr [3] e [7]).
Mi riferirò ai suddetti linguaggi e alle grammatiche che li generano usando
rispettivamente gli acronimi anglofoni CFL (context-free language/s) e CFG
(context-free grammar/s).
Verranno omesse tutte le definizioni di carattere generale che non siano strettamente legate alla proprietà di libertà dal contesto (ovvero le definizioni di
grammatica, derivazione, linguaggio, parola, produzione etc). Per esse si rimanda a [6], [7], e [8].
Nella prima sezione saranno fornite le definizioni di CFG e CFL, nella seconda verrà data una utile rappresentazione della relazione di derivazione nelle
CFG, mentre nella terza sezione mostreremo come ogni CFG sia equivalente
ad una grammatica di forma particolare.
Nella quarta sezione, con le definizioni e i risultati delle tre precedenti, verrà
dimostrato il PL.
Infine, nell’ultima sezione, sarà usato il PL per mostrare alcune proprietà di
chiusura dell’insieme dei CFL, e per discutere di alcuni problemi di decidibilità legati a tali linguaggi.
La simbologia usata è sostanzialmente quella di [8], quindi:
1
1) le prime lettere latine maiuscole (e S) per le variabili;
2) le lettere latine minuscole per i simboli terminali;
3) le ultime lettere latine maiuscole per simboli terminali o non;
4) le ultime lettere latine minuscole per stringhe di terminali;
5) le lettere greche minuscole per stringhe di terminali e non.
Mi discosterò dalla letteratura classica per quel che riguarda il simbolo di
derivazione: per tale relazione e per la sua chiusura transitiva e riflessiva
∗
ho deciso infatti di usare i simboli “*” e “*”. Questo per non creare confusione (quantomeno estetica) con i simboli “⇒”, usato nelle implicazioni
logiche, e “`”, usato nella sua variante “a” per designare il completamento
della dimostrazione di una proposizione.
2
1
Linguaggi e Grammatiche Liberi dal Contesto
In questa sezione fornirò le definizioni di base necessarie all’intera trattazione,
più alcuni esempi utili ad una maggiore comprensione.
Definizione 1.1
Sia G una grammatica; indichiamo con:
1) V l’insieme dei suoi simboli non terminali (o variabili );
2) T l’insieme dei simboli terminali ;
3) P l’insieme (finito) delle produzioni ;
4) S ∈ V l’assioma della grammatica;
5) Σ = V ∪ T ;
Allora G è una CFG se e solo se vale
p∈P ⇔p=A→α
dove A ∈ V e α ∈ Σ∗ .
Come è noto dalla Gerarchia di Chomsky, CFG⊃ {Grammatiche Regolari}.
6=
Osservazione 1.1
La locuzione “non contestuale” deriva dal fatto che il primo termine delle
produzioni di una CFG non è mai giustapposto a un qualche β ∈ Σ∗ .
A tal proposito si consideri il seguente Esempio 1.1:
sia L = {an bn cn |n ≥ 1}; tale linguaggio può essere generato dalla grammatica in cui
1) T = {a, b, c}
2) V = {S, B}
3) P = {S → aBSc, S → abc, Ba → aB, Bb → bb}
allora, nell’ultima produzione, B può essere rimpiazzato da b solo se alla sua
destra compare il “contesto” b. Dunque L è un linguaggio contestuale. Vedremo in seguito che L è strettamente contestuale, ovvero
CFG⊂ {Grammatiche Contestuali}.
6=
Naturalmente L è un CFL se e solo se è generato da una CFG, ovvero i
∗
suoi elementi sono parole di T ∗ derivate (*) da S in una CFG.
∗
Un elemento β ∈ Σ∗ è detto forma sentenziale se S * β.
3
Esempio 1.2
Sia G una grammatica tale che:
1) V = {S};
2) T = {a, b};
3) P = {(I)S → aSb, (II)S → ab}
Poichè il termine sinistro di ogni produzione contiene solo una variabile, essa
è una CFG.
Il linguaggio che essa genera contiene certamente la parola an bn ∀ n ≥ 1,
in quanto applicando n − 1 volte la (I) produzione e poi la seconda si ottiene
S → aSb → · · · · · → an−1 Sbn−1 → an bn
Inoltre non contiene parole di altra forma, infatti solo la produzione (II)
può essere usata isolatamente (e produce ab), mentre la (I) può essere usata
un numero arbitrario di volte (generando stringhe al cui interno è sempre
presente il simbolo S), ma tale derivazione deve essere sempre completata da
un (unico) uso della (II).
Dunque il CFL generato è L = {an bn |n ≥ 1}.
a
4
2
Alberi di Derivazione
In questa sezione verrà fornita una diversa rappresentazione della relazione
di derivazione.
Definizione 2.1
Un albero (finito) è un grafo minimalmente connesso, ovvero tale che, se si
elimina un arco tra due nodi, si ottengono due grafi indipendenti.
Designando un nodo come iniziale si ottiene un albero radicato. In questo
caso gli archi assumono un’orientazione ideale uscente dal nodo-radice.
I nodi di una albero radicato possono essere ordinati (dunque enumerati) a
partire dalla radice verso il basso e da sinistra verso destra. Dato un nodo
n, i nodi ad esso direttamente connessi e contraddistinti da un ordinale
maggiore, sono detti figli del nodo.
Ogni nodo di un albero è caratterizzato da un altro numero naturale, il grado
del nodo, che indica il numero di archi uscenti piú quelli entranti (dal e nel
nodo).
Allora diciamo che un nodo è interno se il suo grado è ≥ 2, mentre se il grado
è 1 il nodo è detto foglia (o nodo esterno o terminale).
In un albero un cammino è una concatenazione di archi e la sua lunghezza è
il numero di questi ultimi.
Definizione 2.2
Data una CFG, un albero radicato è di derivazione se:
1) ad ogni nodo è assegnato un simbolo (etichetta) in Σ ∪ {};
2) l’etichetta della radice è l’assioma S della CFG;
3) i nodi interni sono etichettati da elementi di V ;
4) se il nodo n è etichettato da A e i nodi figli di n sono n1 , n2 , ...., nk con
etichette X1 , X2 , ....., Xk , allora A → X1 X2 .....Xk è una produzione della
grammatica.
5) se un nodo n ha come etichetta il simbolo vuoto , allora tale nodo è una
foglia ed è l’unico figlio di n.
Sia T un albero radicato; allora T 0 è un sottoalbero di T se T 0 è un albero
radicato, T 0 ⊂ T ma la sua radice può non essere S.
Infine chiamiamo raccolto di un albero T la parola ottenuta leggendo le
etichette delle foglie di T secondo l’ordine sopra stabilito: hanno precedenza
le foglie più alte, e tra due foglie di uguale altezza ha la precedenza quella
5
più a sinistra.
Tutto ciò al fine del seguente
Teorema 2.1
Data una CFG, β è una forma sentenziale se e solo se esiste un albero di
derivazione con raccolto β.
a
Ometto la dimostrazione (reperibile in [8], cap. 4 sez. 3) perchè esula dai
miei scopi. Ho però riportato il teorema per sottolineare il rapporto strettissimo tra derivazioni e alberi di derivazione che ci consentirà di dimostrare il
PL.
Remark 2.1
Per come è definito, un albero di derivazione non determina univocamente
l’ordine con cui le produzioni devono essere applicate.
6
3
CFG in Forma Normale
In questa sezione esporrò un particolare procedimento di trasformazione di
una qualsiasi CFG in un’altra equivalente alla prima dal punto di vista del
potere generativo, ma le cui produzioni assumono solo due precise forme.
In queste pagine non fornirò dimostrazioni (se non qualche cenno) per non
appesantire troppo la trattazione. Per i particolari si rimanda a [7] e [8].
Definizione 3.1
Diciamo che un simbolo X ∈ Σ è utile se esiste una derivazione
∗
∗
S * αXβ * u, con α, β ∈ Σ∗ e u ∈ T ∗ .
Simboli per i quali non esistono tali derivazioni sono inutili.
Una produzione del tipo A → è detta -produzione.
Le produzioni del tipo A → B, B ∈ V sono dette produzioni unitarie.
Allora:
Lemma 3.1
Ogni CFL non vuoto e senza è generato da una CFG senza simboli inutili,
-produzioni o produzioni unitarie.
Dimostrazione (cenni)
Quest lemma è il “collage” di diversi risultati, quindi darò solo un’idea di
come eliminare i simboli inutili. Per le -produzioni e produzioni unitarie rimandiamo (per motivi di spazio e di pertinenza) a qualsiasi testo sulle CFG.
Sia G = (V, T, P, S) una CFG; allora esiste una procedura effettiva (basata su
un algoritmo iterativo e completata da un’induzione) che permette di costruire una CFG G 0 = (V 0 , T, P 0 , S) tale che per ogni A ∈ V 0 esiste un qualche
∗
u ∈ T ∗ tale che A * u.
Ora, da G 0 possiamo ottenere (sempre in modo effettivo) una CFG
G 00 = (V 00 , T̃ , P 00 , S) tale che per ogni X ∈ (Σ00 ) esistono α, β ∈ (Σ00 )∗ tali che
∗
S * αXβ.
a
Dal lemma precedente si ricava il seguente
Teorema 3.1
Ogni CGL senza è generato da una CFG le cui produzioni sono tutte della
forma
7
(I) A → BC oppure
(II) A → a
con B, C ∈ V e a ∈ T .
Questa particolare forma per le CFG è detta Forma Normale di Chomsky
(CNF).
a
Remark 3.1
Per ottenere la CFG senza simboli inutili, gli algoritmi G 7−→ G 0 e G 0 7−→ G 00
presenti nella dimostrazione del lemma 3.1 vanno eseguiti esattamente in
quell’ordine.
Vediamo il perchè con il seguente
Esempio 3.1
Consideriamo la CFG con produzioni
1) S → AB
2) S → a
3) A → a
ed eliminiamo i simboli inutili:
passo (I)- poichè da B non è derivabile alcun simbolo terminale, possiamo
eliminarlo insieme alle produzioni che lo coinvolgono. Dunque ci riduciamo
a
1’) S → a
2’) A → a
∗
passo (II)- ora l’unica produzione tale che esiste una derivazione S * γ è la
(1’), quindi possiamo eliminare la (2’) e con lei il simbolo inutile A ottenendo
una CFG equivalente a quella data.
Se avessimo applicato prima il passo (II) avremmo concluso che solo B era
inutile, in quanto A compare nella produzione della forma sentenziale a
(S → AB → a).
Applicando ora il passo (I) avremmo dovuto lasciare la produzione A → a e
con essa il simbolo inutile A.
a
Ora voglio fornire un semplice esempio su come trasformare una CFG in
un’altra in CNF:
8
Esempio 3.2
Si consideri la CFG definita dalle produzioni
1) S → bA
2) S → aB
3) A → bAA
4) A → aS
5) A → a
6) B → aBB
7) B → bS
8) B → b
Le produzioni (5) e (8) non le tocchiamo (sono già della forma cercata).
Nelle altre produzioni rimpiazziamo, a destra, i terminali con variabili:
1) S → bA diventa S → CA e C → b
2) S → aB diventa S → DB e D → a
3) A → bAA diventa A → CAA
4) A → aS diventa A → DS
6) B → aBB diventa B → DBB
7) B → bS diventa B → CS
ora trasformiamo le produzioni che a destra hanno più di due variabili:
A → CAA diventa A → CE e E → AA
B → DBB diventa B → DH e H → BB
Dunque la nuova CFG (ripetiamo: equivalente a quella data) è definita dalle
nuove produzioni:
1)S → CA
2)C → b
3)S → DB
4)D → a
5)A → DS
6)B → CS
7)A → CE
8)E → AA
9)B → DH
10)H → BB
11)A → a
12)B → b
a
9
Remark 3.2
La CNF non è l’unica forma normale per CFG. Un’altra, estremamente importante ma inutile ai fini di questa trattazione, è la Forma Normale di
Greibach per la quale esiste un teorema analogo al 3.1.
L’interesse per questa forma sta, per il sottoscritto, in alcune sue applicazioni che forniscono delle rappresentazioni algebrico-insiemistiche per CFG:
si vedano in [1] i teoremi di Shamir, Chomsky-Schützenberger, Greibach e
Wechler.
10
4
Il Pumping Lemma per CFL
In questa sezione mi occuperò del Pumping Lemma, la cui prima dimostrazione
apparve in [2]. Tale risultato è un corollario pressochè diretto del Lemma di
Ogden (per quest’ultimo cfr [7] e [8]) dimostrato nel 1968; qua però il PL sarà
dimostrato direttamente, senza passare attraverso la sua generalizzazione.
Partiamo da un lemma che aiuterà nella dimostrazione del PL.
Lemma 4.1
Si consideri una CFG in CNF e l’albero di derivazione ad essa associato, sia u
il raccolto di tale albero e sia n la lunghezza del cammino più lungo presente
nell’albero. Allora |u| ≤ 2n−1 .
Dimostrazione
Per induzione su n:
1) se n = 1 allora l’albero è composto da 2 nodi, la radice S e il terminale
u, connessi da un arco. Dunque |u| = 1 = 21−1 e la base dell’induzione è
provata.
2) Se n > 1 allora l’albero comincia con una produzione del tipo A → BC e
non con una che produce un simbolo terminale. Consideriamo i sottoalberi
radicati in B e C: in essi il cammino più lungo sarà certamente più corto di
n, dunque per ipotesi induttiva i loro raccolti hanno lunghezza non superiore
a 2n−2 .
Il raccolto dell’intero albero è la concatenazione di questi ultimi due raccolti,
dunque la sua lunghezza è non superiore a 2n−2 + 2n−2 = 2n−1 .
a
Pumping Lemma per CFL (Bar Hillel-Perles-Shamir, 1961)
Sia L un CGL. Allora esiste una costante NL tale che se z ∈ L e |z| ≥ NL ,
allora si ha che z = uvwxy in modo che
1) |uwx| ≤ NL
2) |vx| ≥ 1
3) ∀ i ≥ 0 uv i wxi y ∈ L
Dimostrazione
Sia L un CFL; possiamo supporre {} =
6 L=
6 ∅ altrimenti la tesi del teorema
è banalmente verificata.
Sia dunque ora G una CFG in CNF che genera L \ {}, e sia m il numero di
11
variabili di G.
Scegliamo NL = 2m . Sappiamo dal lemma 4.1 che un albero il cui cammino
più lungo misura m deve avere un raccolto non superiore a 2m−1 = N2L . Ora,
z è troppo lungo per essere il raccolto di un siffatto albero, quindi l’albero
relativo al raccolto z (sia esso T ) deve avere il cammino più lungo di misura
almeno m + 1.
Un tale cammino conterrà almeno m+1 variabili A0 , A1 , ....., Am , tra le quali,
quindi, ve ne saranno almeno due uguali, diciamo Ai = Aj con i < j. Allora
il sottoalbero Tj radicato in Aj sarà strettamente contenuto nel sottoalbero
Ti radicato in Ai (perchè quest’ultimo precede Aj ) e possiamo prendere come
w il raccolto di Tj , come v e x le stringhe rispettivamente alla sinistra e alla
destra di w nell’albero Ti e come u e y le stringhe rispettivamente a sinistra di
v e a destra di x in T . Notiamo che, poichè in una CFG in CNF non ci sono
produzioni unitarie, v e x non possono essere entrambe quindi |vx| ≥ 1.
Abbiamo dunque mostrato (2) e (3), ma quest’ultima solo per i = 1. Per
i = 0 basta eliminare Ti e radicare in Ai l’albero Tj : lo possiamo fare perchè
la due radici sono etichettate dallo stesso simbolo. Dunque in questo caso v
e x spariscono e otteniamo che uv 0 wx0 y ∈ L.
Per i > 1 basta eliminare Tj e radicare in Aj l’albero Ti (cosa lecita per il
motivo già indicato): in questo modo otteniamo uv 2 wx2 y; iterando questo
rimpiazzamento di alberi si ottengono tutte le altre uv i wxi y.
Resta da provare (1):
è ovvio che, poichè Ti ⊆ T , il suo cammino più lungo non supera m + 1,
dunque, ancora per il lemma 4.1, il suo raccolto, che è vwx, avrà lunghezza
non superiore a 2m = NL ,
a
Come per il caso regolare, anche in ambito non contestuale il PL può essere
usato per stabilire se un linguaggio non è un CFL. Di seguito un esempio
scarsamente (se non per nulla) reperibile nella letteratura classica:
Esempio 4.1
n
Proviamo che L = a2 |n ≥ 1 non è un CFL.
Supponiamo per assurdo che lo sia, e siano N la costante del PL.
Notiamo subito che tutte le parole di L hanno come lunghezza una potenza di
N
2. Sia quindi z = a2 = uvwxy una parola tale che certamente |z| = 2N > N
e con |vx| ≥ 1 e |vwx| ≤ N .
12
Allora
|vx| = 2a B, 0 ≤ a ≤ (N − 1) ∧ B ∈ {2m + 1|∀ m ∈ N}
cioè, o è una potenza di 2, o è un altro numero pari o è dispari.
Ma allora, in ogni caso
|uwy| = 2N − 2a B = 2a (2N −a − B) 6= 2k
∀ k∈N
Dunque uwy ∈
/ L: assurdo.
a
L’esempio classico, che invece riportano tutti i testi, sull’uso del PL (cfr
ad es. [8]) è
L = {an bn cn |n ≥ 1}
già visto nella prima sezione.
Se v e x contengono almeno due simboli diversi allora uv 2 wx2 y contiene
simboli mescolati, dunque non sta in L: assurdo.
Se invece v e x contengono un solo simbolo, allora uv 2 wx2 y non contiene lo
stesso numero di a, b e c, e di nuovo non sta in L. Di nuovo assurdo.
a
Useremo tale linguaggio nella prossima sezione.
13
5
Alcune Proprietà di Chiusura e di Decidibilità
In questa sezione presento altre proprietà dei CFL legate al PL.
Per la natura stessa del PL vi sono casi in cui questo risultato non è d’aiuto,
ovvero quando un linguaggio rispetta la tesi del PL pur non essendo un CFL.
Allora si può mostrare che un dato linguaggio non è CFL o usando il Lemma
di Ogden, o generando a partire dal linguaggio un altro linguaggio non CFL
usando solo operazioni che preservano i CFL.
Teorema 5.1
L’insieme dei CFL è chiuso sotto le operazioni di:
1) Unione
2) Concatenazione
S
i
3) Chiusura di Kleene (L∗ = ∞
i=0 L )
4) Sostituzione
Dimostrazione (cenni)
Siano L1 e L2 due CFL generati da G1 = (V1 , T1 , P1 , S1 ) e G2 = (V2 , T2 , P2 , S2 ).
Allora (1) la grammatica
G3 = (V1 ∪ V2 ∪ {S3 } , T1 ∪ T2 , P1 ∪ P2 ∪ {S3 → S1 |S2 } , S3 )
genera L3 = L1 ∪ L2 .
(2) La grammatica
G4 = (V1 ∪ V2 ∪ {S4 } , T1 ∪ T2 , P1 ∪ P2 ∪ {S4 → S1 S2 } , S4 )
genera L4 = L1 L2 .
(3) La grammatica
G5 = (V1 ∪ {S5 } , T1 , P1 ∪ {S5 → S1 S5 |} , S5 )
genera L5 = L∗1 .
Prima di completare la dimostrazione diamo la seguente
Definizione 5.1
Siano A e B due alfabeti. Una sostituzione è una mappa f : A −→ P(B ∗ )
che associa ad ogni simbolo di A un linguaggio in B ∗ . Tale mappa si estende
14
alle parole ponendo:
∗) f () = ;
∗) f (ua) = f (u)f (a)
S
La mappa si estende poi ad interi linguaggi ponendo f (L) = x∈L f (x).
Allora (4):
siano G e Ga le CFG che generano i CFL L e La , con a ∈ Σ. Il linguaggio
f (L) è generato dalla grammatica G̃ cosı̀ fatta:
•
•
•
•
Ṽ
T̃
S̃
P̃
= V ∪ {Ga }a∈Σ
= {Ta }a∈Σ
=S
= {Pa }a∈Σ ∪ {P 0 }
dove P 0 contiene le produzioni di G della forma A → α, in cui ad ogni
istanza di a ∈ α viene sostituito l’assioma Sa .
Poichè un omomorfismo è una particolare sostituzione in cui f (a) contiene
una sola parola, segue che i CFL sono chiusi anche per omomorfismi. In realtà
lo sono anche per omomorfismi inversi, ma la dimostrazione di questo risultato fa uso degli automi a pila, la controparte non contestuale degli automi
a stati finiti, che però io non tratterò.
a
Teorema 5.2
L’insieme dei CFL non è chiuso rispetto alle operazioni di intersezione e
complementazione.
Dimostrazione
Siano L1 = ai bi ck |i ≥ 1, k ≥ 1 e L2 = ai bk ck |i ≥ 1, k ≥ 1 ; essi sono
generati rispettivamente dalle grammatiche di produzioni:
(1) S → AB,
(2) S → CD,
A → aAB|ab,
B → cB|c
C → ac|a,
D → bDc|bc
quindi L1 e L1 sono CFL, ma L1 ∩ L2 = {ai bi ci |i ≥ 1}, che sappiamo non
essere un CFL (cfr sez. precedente).
15
Se poi fossero chiusi per complementazione lo sarebbero anche per intersezione perchè, dalle leggi di De Morgan,
L1 ∩ L2 = (Lc1 ∪ Lc2 )c
a
Termino ora questo breve survey con un classico risultato di decidibilità per
CFL, derivante dal PL.
Teorema 5.2
Dato un CFL è decidibile stabilire se esso sia (1) vuoto o (2) infinito, e quindi
anche se esso sia (3) finito e se (4) una data parola, essa vi appartenga o no.
Dimostrazione
Sia G = (V, T, P, S) una CFG in CNF, e sia L il CFL da essa generato; sia
poi N = |V |.
Per il PL se z = uvwxy ∈ L con |z| > 2N allora uwy ∈ L e |uwy| ≤ 2N .
Quindi se L =
6 ∅ vi si può trovare una qualche stringa di lunghezza al più 2N .
Ora, in una CFG in CNF le produzioni o trasformano una variabile nella
concatenazione di due variabili, o sostituiscono un terminale a una variabile,
quindi una stringa di lunghezza k è generata da una derivazione di lunghezza
non superiore a 2k − 1.
Questo perchè, nella peggiore delle ipotesi, ci si trova di fronte una situazione
del tipo
S → A1 A2 → A11 A12 A2 → A11 A12 A21 A22 → .... → a1 a2 ....ak
quindi, salvo per la prima coppia di variabili generate dall’assioma della CFG,
ad ogni variabile segue una produzione che ne genera altre due fino a che per
ogni variabile non si genera un unico terminale: 2k − 1 produzioni.
Dunque per verificare che in L vi sia una stringa di lunghezza al più 2N basta
analizzare le derivazioni di lunghezza al più 2N +1 − 1 che sono non più di
|P | · 2N +1 . Abbiamo quindi mostrato (1) e (4).
Se poi 2N < z ≤ 22N , sempre per il PL, il linguaggio è infinito (perchè
contiene infinite stringhe uv i wxi y), quindi, come in precedenza, basta considerare le derivazioni di lunghezza non superiore a 22(N +1) − 1, il cui numero
è superiormente limitato dal valore |P | · (22N +1 ), e verificare che qualcuna di
esse produca una stringa di terminali. Questo mostra (2) e (3) (perchè se
L=
6 ∅ e non è infinito allora è finito).
a
16
References
[1] Autebert,J-M. - Berstel,J - Boasson,L. :“Context-Free Languages and
Pushdown Automata”, cap. 3, vol. 1 del “Handbook of Formal Languages”, Rozemberg-Salomaa Ed. per Springer, 1997;
[2] Bar Hillel,Y - Perles,M - Shamir,E :“On Formal Properties of Simple Phrase Structure Grammars”, Zeitschrift für Phonetik, Sprachwissenschaft und Kommunikationsforschung, 1961;
[3] Berstel,J - Boasson,L. :“Context-Free Languages, cap. 2 del “Handbook
of Theoretical Computer Science”, J. van Leeuwen Ed., 1990;
[4] Chomsky,N. :“On Certain Formal Properties of Grammars”,
Information and Control 2, 1959;
[5] Chomsky,N. - Schützenberger,M.P. :“The Algebraic Theory of ContextFree Languages”, in “Computer Programming and Formal Languages”,
Braffort-Hirschberg Ed. per North Holland, 1963;
[6] De Luca,A - D’Alessandro,F. :“Teoria degli Automi Finiti”,
Springer Ed., 2013;
[7] Harrison,M :“Introduction to Formal Language Theory”,
Addison-Wesley Ed., 1978;
[8] Hopcroft,J.E. - Ullman,J.D. :“Introduction To Automata Theory”,
Addison-Wesley Ed., 1979;
17