Teoria das Linguagens
Lic. em Ciˆencias da Computa¸c˜aoLinguagens Formais e Aut´omatos
(Linguagens)
Carla Mendes
Dep. Matem´atica e Aplica¸c˜oes Universidade do Minho
“The fundamental aim in linguistic analysis of language L is to
separate the grammatical sequences which are sentences of L from the ungrammatical sentences which are not sentences of L and to study the structure of grammatical sequence.”
Avram Noam Chomsky (1928) O estudo de linguagens formais e da teoria de aut´omatos emergiu na d´ecada de 1950, altura em que Noam Chomsky introduziu a formaliza¸c˜ao matem´atica da no¸c˜ao de linguagem.
Neste cap´ıtulo estudamos algumas classes importantes de linguagens formais assim como os modelos abstractos de computa¸c˜ao que permitem fazer o reconhecimento sint´actico destas linguagens. Mais precisamente, iremos estudar linguagens regulares e aut´omatos finitos, linguagens independentes de contexto e aut´omatos de pilha.
Nesta sec¸c˜ao come¸camos por introduzir alguns conceitos b´asicos sobre linguagens que s˜ao fundamentais neste cap´ıtulo.
Nos dicion´arios encontramos o termo “linguagem” definido
informalmente como sendo um sistema adequado para expressar ideias, factos ou conceitos, incluindo um conjunto de s´ımbolos e regras para a sua manipula¸c˜ao. Embora isto nos dˆe uma ideia intuitiva do que ´e uma linguagem n˜ao ´e suficiente para o estudo de linguagens formais.
Defini¸c˜ao 1.1
Um alfabeto A ´e um conjunto finito n˜ao vazio cujos elementos s˜ao designados por letras. Uma palavra sobre A ´e uma sequˆencia finita de elementos de A; a sequˆencia vazia de s´ımbolos designa-se por palavra
vazia, e representa-se por ǫ. O comprimento de uma palavra w ,
Exemplo 1.2
Seja A = {a, b, c}. Ent˜ao w1 = acb, w1 = bbaca e ǫ s˜ao palavras sobre A e tem-se |w1| = 3, |w2| = 5 e |ǫ| = 0.
Defini¸c˜ao 1.3
Duas palavras a1a2. . .an e b1b2. . .bm sobre um alfabeto A dizem-se iguais se n = m e, para cada i ∈ {1, . . . , n}, ai = bi.
O conjunto de todas as palavras sobre A ´e representado por A∗ e o
conjunto de todas as palavras n˜ao vazias de A ´e representado por A+. Exemplo 1.4
Sendo A = {a, b}, tem-se A∗
= {ǫ, a, b, aa, bb.ab.ba.aaa.bbb, abb, aba, . . .}
Defini¸c˜ao 1.5
Dado um alfabeto A, seja · : A∗
× A∗
→ A∗
a opera¸c˜ao que a duas palavras u, v de A∗ associa a palavra representada por u · v (ou apenas por uv ) e que ´e definida por
u · v = v , se u = ǫ; u · v = u, se v = ǫ;
u · v = a1a2. . .anb1b2. . .bm, se u = a1a2. . .an e v = b1b2. . .bm
s˜ao palavras n˜ao vazias.
A esta opera¸c˜ao d´a-se a designa¸c˜ao de concatena¸c˜ao (produto) de
duas palavras de A∗.
Se u ´e uma palavra sobre um alfabeto A e n ∈ N0, representa-se por un:
a palavra vazia, caso n = 0;
o produto de n c´opias de u, caso n ∈ N.
A palavra un designa-se por potˆencia-n de u e pode ser definida
recursivamente por un=
ǫ se n = 0,
A respeito da opera¸c˜ao de concatena¸c˜ao de duas palavras ´e simples provar as seguintes propriedades.
Proposi¸c˜ao 1.6
Dado um alfabeto A, tem-se, para quaisquer u, v , w ∈ A∗
e m, n ∈ N0: (i) ǫu = u = uǫ (ǫ elemento neutro do produto);
(ii) (uv )w = u(vw ) (propriedade associativa do produto); (iii) uv = uw ⇒ v = w (lei do corte `a esquerda);
(iv) vu = wu ⇒ v = w (lei do corte `a direita); (v) |uv | = |u| + |v |;
(vi) un+m= unum; (vii) (un)m = unm; (viii) |un| = n|u|.
Sejam u, v , w palavras sobre um alfabeto A. Ent˜ao, atendendo a que a opera¸c˜ao de concatena¸c˜ao de palavras ´e associativa, podemos escrever
Note-se que a opera¸c˜ao de concatena¸c˜ao n˜ao ´e, em geral, comutativa. Por exemplo, dadas as palavras u = ab, v = ba ∈ {a, b}∗, tem-se uv = abba 6= baab = vu.
Recorrendo `a opera¸c˜ao de concatena¸c˜ao, podemos definir indutivamente o conjunto A∗
. Este tipo de defini¸c˜ao pode ser ´util na prova de certas propriedades referentes a este conjunto.
Proposi¸c˜ao 1.7
Dado um alfabeto A, o conjunto A∗ ´e o conjunto definido indutivamente pelas regras seguintes:
(i) ǫ∈ A∗;
(ii) Se w ∈ A∗
e a ∈ A, ent˜ao wa ∈ A∗ .
O conjunto A+ tamb´em admite uma defini¸c˜ao indutiva. Uma vez que a palavra ǫ n˜ao pertence a A+ basta modificar a defini¸c˜ao anterior da forma que se apresenta a seguir:
Proposi¸c˜ao 1.8
Dado um alfabeto A, o conjunto A+ ´e o conjunto definido indutivamente pelas regras seguintes:
(i) Se a ∈ A, ent˜ao a ∈ A+; (ii)Se w ∈ A+ e a ∈ A, ent˜ao wa ∈ A+. Defini¸c˜ao 1.9
Sejam A um alfabeto e u, v ∈ A∗
. Diz-se que:
u ´e um factor de v se existem x, y ∈ A∗ tais que v = xuy ; u ´e um prefixo de v se existe y ∈ A∗
tal que v = uy ; u ´e um sufixo de v se existe y ∈ A∗ tal que v = yu;
u ´e um factor pr´oprio (resp., prefixo pr´oprio, sufixo pr´oprio) de v
se u ´e um factor (resp. prefixo, sufixo) de v e u 6= v . Exemplo 1.10
Sejam A = {0, 1} e u = 0101. Ent˜ao
os factores de u s˜ao: ǫ, 0, 1, 01, 10, 010, 101 e u; os prefixos de u s˜ao: ǫ, 0, 01, 010 e u;
Defini¸c˜ao 1.11
Sejam A um alfabeto e u ∈ A∗. Designa-se por palavra inversa de u, e representa-se por uI, a palavra de A∗
definida por uI = ǫ se u = ǫ, avI se u = va com v ∈ A∗ e a ∈ A. Exemplo 1.12 Sejam A = {0, 1} e u = 01101. Ent˜ao uI = 10110. Proposi¸c˜ao 1.13
Seja A um alfabeto. Ent˜ao, para quaisquer n ∈ N, a1,a2. . . ,an∈ A e
u, v ∈ A∗, tem-se
(i) (a1a2. . .an)I = an. . .a2a1;
(ii) (uv )I = vIuI; (iii) (uI)I = u.
Defini¸c˜ao 1.14
Dado um alfabeto A, designa-se por linguagem sobre A, qualquer subconjunto de A∗.
Exemplo 1.15
Seja A = {0, 1}. Ent˜ao s˜ao exemplos de linguagens sobre A os seguintes subconjuntos de A∗
:
∅, {ǫ}, {0}, A, {00, 11, 000, 111}, A∗
, A+, {0n1n: n ∈ N 0}.
O conjunto P(A∗) de todas as linguagens sobre A ´e representado por L(A).
Uma vez que as linguagens s˜ao conjuntos, podemos definir entre linguagens as opera¸c˜oes usuais de uni˜ao, intersec¸c˜ao e complementar.
Defini¸c˜ao 1.16
Sendo L1, L2 s˜ao linguagens sobre um alfabeto A, define-se L1∪ L2= {x ∈ A∗ : x ∈ L1 ou x ∈ L2}; (uni˜ao de L1e L2)
L1∩ L2= {x ∈ A∗: x ∈ L1e x ∈ L2} (intersec¸c˜ao de L1e L2)
L1\ L2= {x ∈ A∗: x ∈ L1e x 6∈ L2} (complementar de L1em L2)
L1= A∗\ L1 (complementar de L1).
Recorrendo `a opera¸c˜ao de concatena¸c˜ao de palavras, define-se tamb´em a seguinte opera¸c˜ao de linguagens.
Defini¸c˜ao 1.17
Dadas linguagens L1 e L2 sobre um alfabeto A, designa-se por
concatena¸c˜ao (ou produto) de L1 e L2, e representa-se por L1· L2 (ou apenas por L1L2), a linguagem
Exemplo 1.18
Sejam L1 = {a, ba} e L2 = {b, ab} linguagens sobre o alfabeto {a, b}. Ent˜ao L1L2 = {ab, aab, bab, baab} e L2L1 = {ba, bba, aba, abba}.
Sendo u uma palavra e L uma linguagem sobre um alfabeto A, ´e usual escrever uL e Lu em vez de {u}L e L{u}, respectivamente.
Sejam A um alfabeto e u palavra sobre A. Ent˜ao
uA∗
= {ux : x ∈ A∗}; A∗u = {xu : x ∈ A∗}; A∗uA∗ = {xuy : x, y ∈ A∗},
representam, respectivamente, o conjunto de palavras de A∗
que tˆem u como prefixo, como sufixo e como factor, respectivamente.
Exemplo 1.19 Para A = {a, b, c}, (abcA∗ ∩ A∗ cbA∗ ) \ A∗ a
representa a linguagem das palavras sobre A que come¸cam por abc, tˆem cb como factor e n˜ao terminam em a.
Da defini¸c˜ao de concatena¸c˜ao de linguagens e de algumas propriedades relativas `a concatena¸c˜ao de palavras, resultam as igualdades seguintes:
Proposi¸c˜ao 1.20
Para quaisquer linguagens L, L1, L2 e L3 sobre um alfabeto A, tem-se: (i) ∅L = ∅ = L∅;
(ii) ǫL = L = Lǫ;
(iii) (L1L2)L3 = L1(L2L3); (iv) L1(L2∪ L3) = L1L2∪ L1L3.
(v) (L2∪ L3)L1 = L2L1∪ L3L1.
Uma vez que a concatena¸c˜ao de linguagens ´e associativa, escrevemos
Defini¸c˜ao 1.21
Sejam L uma linguagem sobre um alfabeto A e n ∈ N0. Define-se
potˆencia-n de L, e representa-se por Ln, a linguagem definida recursivamente por Ln=
{ǫ} se n = 0, Ln−1L se n ∈ N. Defini¸c˜ao 1.22
Seja L uma linguagem sobre um alfabeto A. Designa-se por:
estrela de L ou fecho (de Kleene) de L, e representa-se por L∗ , a uni˜ao de todas as potˆencias de L, i.e.
L∗
= [
n∈N0
Ln.
fecho positivo de L, e representa-se por L+, a uni˜ao de todas as potˆencias positivas de L, i.e.,
L+= [
n∈N Ln.
Note que as nota¸c˜oes A∗ e A+ s˜ao coerentes com as defini¸c˜oes de fecho
de Kleene e de fecho positivo. Por exemplo, {0}∗
= {ǫ, 0, 00, 000, 0000, . . .} = {0n : n ∈ N0}
tanto representa o conjunto de todas as palavras sobre o alfabeto
A = {0} como tamb´em representa o fecho de Kleene da linguagem L = {0}.
A respeito dos operadores fecho de Kleene e fecho positivo, s˜ao v´alidas as propriedades seguintes:
Proposi¸c˜ao 1.23
Sejam A um alfabeto e L uma linguagem sobre A. Tem-se: (i) ∅∗ = {ǫ}, ∅+= ∅, {ǫ}∗= {ǫ} = {ǫ}+;
(ii) L ⊆ L+ ⊆ L∗;
(iii) ǫ∈ L+ se e s´o se ǫ ∈ L;
Defini¸c˜ao 1.24
Sejam A um alfabeto, L uma linguagem sobre A e u uma palavra sobre A. Chama-se:
res´ıduo esquerdo de L relativamente `a palavra u `a linguagem u−1L = {x ∈ A∗
: ux ∈ L};
res´ıduo direito de L relativamente `a palavra u `a linguagem Lu−1 = {x ∈ A∗
: xu ∈ L}.
Exemplo 1.25
Sejam A = {a, b} e L = {a, aba, ba, bbaa, abba}. Ent˜ao
ǫ−1L = L;
a−1L = {ǫ, ba, bba}; b−1L = {a, baa};
(aa)−1L = ∅;
(ab)−1L = {a, ba};
(bba)−1L = {a};
Lǫ−1 = L;
La−1 = {ǫ, ab, b, bba, abb}; Lb−1 = ∅;
L(aa)−1 = {bb}; L(ab)−1 = ∅; L(bba)−1 = {a}.
´
E simples verificar as propriedades seguintes:
Proposi¸c˜ao 1.26
Sejam A um alfabeto, a ∈ A, u uma palavra sobre A e L uma linguagem sobre A. Ent˜ao (i) u−1(L 1∪ L2) = u−1L1∪ u−1L2; (ii) u−1(L 1∩ L2) = u−1L1∩ u−1L2; (iii) u−1(L 1\ L2) = u−1L1\ u−1L2; (iv) a−1(L 1L2) = (a−1L 1)L2 se ǫ 6∈ L1 (a−1L 1)L2∪ a−1L2 se ǫ ∈ L1 ; (v) a−1L∗ = (a−1L)L∗ ; (vi) (uv )−1L = v−1(u−1L).