Notas de clase para el curso Introducci´ on a la Teor´ eor´ıa de la Computaci´ Computa ci´ on
II Semestre 2017 Profesor: Rodrigo De Castro K.
Cap´ıtulo 1 Alfabetos, lenguajes y cadenas De manera mane ra muy amplia am plia podr po dr´´ıa decirse deci rse que la computaci´ comp utaci´on on es la manipulaci´ manipulaci´ on on de entradas (inputs ) para producir salidas (outputs ). ). Pero cualquier mecanismo de c´omputo omputo solamente puede manipular un n´ umero umero finito de s´ımbolos ımbolos en un tiempo finito. Desde el pun punto to de vista te´orico orico esto impone dos restricciones b´asicas: asicas: el conjunto con junto de s´ımbolos ımbolo s (alfabeto (alf abeto)) debe deb e ser finito y se deben considerar ´unicamente unicamente cadenas (secuencias de s´ımbolos) de longitud finita. Surgen as´ as´ı los ingredientes ingredientes esenciales de una teor´ teor´ıa abstracta de la computaci´on: on: alfabetos y cadenas . Los conjuntos de cadenas (ya sean finitos o infinitos) se denominar´an an lenguajes .
1.1. 1.1.
Alfa Alfabet betos os y cade cadena nass
Alfabetos. Un alfabeto es un conjunto conjunto finito no vac´ ac´ıo cuyos cuyos elemento elementoss se llaman s´ımbol bolos . Es costumbre usar las letras griegas may´usculas usculas Σ, Σ, Γ, ∆ para denotar alfabetos.
De ser necesario necesari o se utilizan utiliza n tambi´en en sub´ sub´ındices: ındices : Σ , Σ , Σ . . . 1
Ejemplos
2
3
Los siguiente siguientess son algunos de los alfabetos alfabetos m´ as as conocidos: conocidos:
El alfabeto de los idiomas occidentales (min´usculas uscu las,, 26 2 6 s´ımbolo ımb olos). s). Σ = { a , b , c , d , . . . , w , x , y , z } . El alfabeto de los idiomas occidentales (may´uscula usc ulas, s, 26 2 6 s´ımbolo ımb olos). s). Σ = { A , B , C , D , . . . , W , X , Y , Z} . El alfabeto de los idiomas occidentales (min´usculas usculas y may´usculas uscu las,, 52 5 2 s´ımbolos ımbo los). ). Σ = { a , A , b , B , c , C , d , D , . . . , w , W , x , X , y , Y , z , Z} .
1
Introducci´ on a la Teor´ eor´ıa de la Computaci´ on
Cap´ıtulo 1
2
El alfabeto de las letras griegas (min´usculas uscu las,, 24 2 4 s´ımbolo ımb olos). s). Σ = { α,β,γ,δ,,η,ι,κ,λ,µ,ν,o,ψ,φ,π,ρ,σ,τ,θ,υ,χ,ξ,ζ,ω}. El alfabeto alfab eto de los d´ıgitos (10 s´ımbolos). ımbolo s). Σ = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0}. El alfabeto Σ = { 0, 1} se conoce como alfabeto binario.
Cadenas. Una cadena o palabra sobre un alfabeto Σ dado es cualquier sucesi´on (o secuencia) finita de elementos de Σ. Admitimos la existencia de una ´unica cadena que no tiene s´ımbolos, la cual se denomina cadena cade na vac va c´ıa y se denota con λ. La cadena cad ena vac´ vac´ıa desempe˜na, na, en la teor´ teor´ıa de la computaci´on, on, un papel similar al del conjunto vac´ vac´ıo ∅ en la teor´ıa ıa de conjuntos conj untos..
son
Sea Σ = { a, b} el alfabeto alfa beto que consta co nsta de d e los dos s´ımbolos ımbolo s a y a y b b.. Las siguientes cadenas sobre Σ: aba ababaaa aaaab. aaaab. Obs´ Ob s´erves ervesee que q ue aba = aab y que aaab que aaab = baaa. baaa. El orden de los s´ımbolos en una cadena es significativo ya que las cadenas se definen como sucesiones , es decir, conjuntos secuencialmente ordenados . cadenas sobre sobre el alfabet alfabetoo binario binario Σ = {0, 1} son secuencias finitas de Ejemplo Las cadenas ceros y unos, llamadas secuencias binarias , tales como Ejemplo
001 1011 001000001. Para denotar cadenas concretas se utilizan letras como u, sub´ındices si u, v,w,x,y,z , con sub´ es necesario. Si tales letras hacen parte del alfabeto de referencia Σ, entonces se utilizan letras griegas.
cadenas
Ejemplo
Sea Σ = {a,b,c,d}. Utilizamos u Utilizamos u,, v,w para v,w para denotar (dar un nombre) a ciertas concretas: = ddaba. u = ddaba. = cababadda. v = cababadda. = bbbcc.. w = bbbcc
Longitud de una cadena. La longitud de una cadena u cadena u ∈ Σ ∗ se denota | u| y se puede definir descriptivamente como el n´umero umer o de s´ımbolo ımb oloss de u (contando (conta ndo los s´ımbolo ımb oloss repetidos). repetidos). Es decir, decir,
|u| =
0, si u si u = = λ, λ, si u = = a Σ. n, si u a a · · · an , donde a , a , . . . , an ∈ Σ. 1
2
1
2
Introducci´ on a la Teor´ıa de la Computaci´ on
Ejemplo
Cap´ıtulo 1
3
Sea Σ = {a,b,c,d}. Si u = bbcada =⇒ |u| = 6, Si v = ccddd =⇒ | v | = 5.
Definici´ on descriptiva de Σ . El conjunto de todas las cadenas sobre un alfa∗
beto Σ, incluyendo la cadena vac´ıa, se denota por Σ∗ .
Ejemplo
Sea Σ = {a,b,c}, entonces
Σ∗ = {λ,a,b,c,aa,ab,ac,ba,bb,bc,ca,cb,cc,aaa,aab,abc,baa,...}. En este caso, Σ ∗ est´a formado por la cadena vac´ıa λ, las 3 cadenas con un solo s´ımbolo (a,b,c), las 9 cadenas con dos s´ımbolos (aa,ab,ac,ba,bb,bc,ca,cb,cc ), las 27 cadenas con tres s´ımbolos (aaa,aab,abc,baa,...,ccc), etc. Obs´ervese que los s´ımbolos de un alfabeto Σ juegan un doble papel: como s´ımbolos del alfabeto de referencia y como cadenas conformadas por un solo s´ımbolo.
1.2.
Algunos autores denotan la cadena vac´ıa con la letra griega ε. Preferimos denotarla con λ porque ε tiende a confundirse con el s´ımbolo ∈ usado para la relaci´ on de pertenencia. Tambi´en es frecuente usar Λ para denotar la cadena vac´ıa.
Si bien un alfabeto Σ es un conjunto finito, Σ∗ es siempre un conjunto infinito (enumerable). En el caso m´as simple, Σ contiene solo un s´ımbolo, Σ = {a}, y Σ∗ = {λ,a,aa,aaa,aaaa,aaaaa,... }.
Hay que distinguir entre los siguientes cuatro objetos, que son todos diferentes entre s´ı: ∅, λ, { ∅} y {λ}.
La mayor parte de la teor´ıa de la computaci´on se hace con referencia a un alfabeto Σ fijo (pero arbitrario).
Definiciones y demostraciones recursivas
En la Teor´ıa de la Computaci´on muchos conjuntos se definen recursivamente. A continuaci´on presentamos este tipo de definiciones en un contexto muy amplio.
Definici´ on recursiva de un conjunto. Un conjunto S se define recursivamente por medio de tres cl´ausulas: (1) Cl´ausula b´asica. Se especifican los elementos m´as sencillos (o b´asicos) de S . (2) Cl´ausula recursiva. Se especifican la regla o reglas para la formaci´on de nuevos elementos de S a partir de elementos ya conocidos de S .
Introducci´ on a la Teor´ıa de la Computaci´ on
Cap´ıtulo 1
4
(3) Cl´ausula de exclusi´on. Establece que los elementos de S se pueden obtener ´unicamente utilizando las cl´ausulas (1) y (2). La cl´ausula de exclusi´on se suele admitir de manera impl´ıcita y es corriente omitirla en las definiciones recursivas concretas, algo que haremos en lo sucesivo.
Dado un alfabeto Σ, el conjunto Σ∗ de todas las cadenas, definido descripti vamente en la secci´ on 1.1, se puede definir recursivamente. La idea es que a ∗ partir de una cadena u ∈ Σ se puede obtener una nueva cadena a˜nadiendo a la derecha un s´ımbolo a perteneciente al alfabeto Σ; dicha cadena ser´a denotada por ua. Todas las cadenas de Σ∗ se pueden obtener de esta manera a partir de la cadena vac´ıa λ; se entiende que λa = a, para cualquier s´ımbolo a ∈ Σ. La definici´on recursiva de Σ ∗ consta entonces de las siguientes dos cl´ausulas: Ejemplo
(1) λ ∈ Σ∗ . (2) Si u ∈ Σ ∗ entonces ua ∈ Σ ∗ para cada s´ımbolo a ∈ Σ, donde ua es la secuencia de s´ımbolos obtenida a partir de u a˜ nadiendo el s´ımbolo a a la derecha.
Definici´ on recursiva de conceptos. La definici´on recursiva de Σ∗ permite definir recursivamente nociones o conceptos aplicables a todas las cadenas. Sea Σ un alfabeto dado; para definir un concepto C sobre todas las cadenas en Σ ∗ se utilizan dos cl´ausulas: (1) Se define C (λ), es decir, se define el concepto C para la cadena λ. (2) Se define C (ua) en t´erminos de C (u) para toda cadena u ∈ Σ∗ y todo s´ımbolo a ∈ Σ.
descripci´ on
Aunque la noci´ on de longitud de una cadena es muy simple y bastar´ıa la presentada en la secci´on 1.1, tambi´en podemos dar una definici´ on ∗ recursiva de | u|, con u ∈ Σ : Ejemplo
(1) |λ| = 0. (2) |ua| = | u| + 1 para toda u ∈ Σ∗ y todo s´ımbolo a ∈ Σ.
Recursi´ on sobre cadenas. Dado un alfabeto Σ, es posible demostrar recursivamente que todas las cadenas en Σ∗ satisfacen una cierta propiedad P . A tal tipo de razonamiento recursivo se le conoce como recursi´ on sobre cadenas , y consta de dos pasos: (1) Se demuestra P (λ), es decir, se demuestra que la cadena vac´ıa λ satisface la propiedad P . (2) Se demuestra la implicaci´on P (u) =⇒ P (ua), para toda u ∈ Σ ∗ y todo a ∈ Σ. Es decir, se demuestra que si u satisface la propiedad P , entonces la cadena ua tambi´en satisface la propiedad P , para todo a ∈ Σ.
Introducci´ on a la Teor´ıa de la Computaci´ on
Cap´ıtulo 1
5
La recursi´on sobre cadenas es necesaria cuando se quiere demostrar propiedades con toda rigurosidad.
1.3.
Concatenaci´ on de cadenas
Dado un alfabeto Σ y dos cadenas u, v ∈ Σ∗ , la concatenaci´ on de u y v se denota como u · v o simplemente uv y se define descriptivamente as´ı: (1) Si v = λ, entonces u · λ = λ · u = u. Es decir, la concatenaci´on de cualquier cadena u con la cadena vac´ıa, a izquierda o a derecha, es igual a u. (2) Si u = a a · · · an , v = b b · · · bm, donde a , . . . , an , b , . . . , bm ∈ Σ, n, m ≥ 1, entonces 1
2
1
2
1
1
u · v = a a · · · an b b · · · bm . 1
2
1
2
Es decir, u · v es la cadena formada escribiendo los s´ımbolos de u y a continuaci´on los s´ımbolos de v.
Definici´ on recursiva de la concatenaci´ on. Para definir recursivamente la concatenaci´ on u · v para todas las cadenas u, v ∈ Σ∗ se toma una cadena fija u (pero arbitraria) y se hace recursi´on sobre v, de la siguiente manera: (1) u · λ = λ · u = u. (2) u · (va) = (u · v)a, para toda v ∈ Σ ∗ , a ∈ Σ.
Propiedad asociativa de la concatenaci´ on.
La concatenaci´ on de cadenas es una operaci´ on asociativa. Es decir, si u, v,w ∈ Σ , entonces ∗
(uv)w = u(vw). Demostraci´ on . Primero hay que considerar los casos en los que alguna (o algunas) de las
cadenas u, v o w sea la cadena vac´ıa λ. Por ejemplo, si v = λ tenemos (uv)w = (uλ)w = uw mientras que u(vw) = u(λw) = uw. Luego consideramos el caso en que u, v y w sean diferentes de λ. Entonces podemos escribir u = a · · · an , con ai ∈ Σ, n ≥ 1. v = b · · · bm , con b i ∈ Σ, m ≥ 1. w = c · · · cq , con ci ∈ Σ, q ≥ 1. 1
1
1
Entonces (uv)w = (a · · · an b · · · bm )w = a · · · an b · · · bm c · · · cq . u(vw) = u(b · · · bm c · · · cq ) = a · · · an b · · · bm c · · · cq . 1
1
1
1
1
1
1
1
1
1
Esto demuestra la propiedad asociativa. Tambi´en es posible razonar por recursi´ on sobre cadenas: se mantienen u y v fijas (pero arbitrarias) y se hace recursi´on sobre w. Los detalles se dejan como ejercicio (opcional).
Introducci´ on a la Teor´ıa de la Computaci´ on
1.4.
Cap´ıtulo 1
6
Potencias de una cadena
Dada u ∈ Σ∗ y n ∈
N,
se define (descriptivamente) u n en la siguiente forma u0 = λ, un = uu · · · u, si n ≥ 1.
n veces
Lo anterior se puede escribir como: n
u =
si n = 0, λ, uu · · · u, si n ≥ 1. n veces
Es decir, un es la concatenaci´on de u consigo misma n veces, si n ≥ 1. Puesto que n es un n´ umero natural, un se puede definir inductivamente sobre n: u0 = λ, un+1 = u u · u, para todo n ≥ 0. Un caso particular importante se presenta cuando la cadena u consta de un solo s´ımbolo, por ejemplo, u = a, donde a ∈ Σ. Se tiene entonces a0 = λ, an = aa · · · a, si n ≥ 1.
n veces
cadenas
o n de Ejemplo Sea Σ = {a,b,c,d}. Usando la propiedad asociativa y la potenciaci´ de longitud 1, podemos escribir, por ejemplo: baaaddb = ba3 d2 b. dddbbcccccaa = d 3 b2 c5 a2 .
1.5.
Reflexi´ on de una cadena
on (o inversa o reverso ) de una cadena u ∈ Σ ∗ se denota u R y se define descripLa reflexi´ tivamente as´ı: si u = λ, λ, uR = an · · · a a , si u = a a · · · an .
2
1
1
2
De la definici´on se observa claramente que la reflexi´ on de la reflexi´on de una cadena es la misma cadena, es decir, (uR )R = u, para u ∈ Σ∗ .
Algunos autores escriben u−1 en lugar de uR para denotar la reflexi´on de una cadena u.
Introducci´ on a la Teor´ıa de la Computaci´ on
Cap´ıtulo 1
7
Ejercicios de la secci´ on 1.5 Dar
una definici´on recursiva de u R .
Si u, v ∈ Σ ∗ , demostrar que (uv)R = vR uR . Generalizar esta propiedad a la concatenaci´ on de n cadenas.
1.6.
Subcadenas, prefijos y sufijos
Una cadena v es una subcadena o una subpalabra de u si existen cadenas x, y tales que u = xvy. N´otese que x o y pueden ser λ y, por lo tanto, la cadena vac´ıa es una subcadena de cualquier cadena y toda cadena es subcadena de s´ı misma. Un prefijo de u es una cadena v tal que u = vw para alguna cadena w ∈ Σ∗ . Se dice que v es un prefijo propio de u si v = u. Similarmente, un sufijo de u es una cadena v tal que u = wv para alguna cadena = u. w ∈ Σ ∗. Se dice que v es un sufijo propio de u si v Obs´ervese que λ es un prefijo y un sufijo de toda cadena u ya que uλ = λu = u. Por la misma raz´on, toda cadena u es prefijo y sufijo de s´ı misma.
Ejemplo
Sean Σ = {a,b,c,d} y u = bcbaadb.
Prefijos de u :
Sufijos de u :
λ b bc bcb bcba bcbaa bcbaad bcbaadb
λ b db adb aadb baadb cbaadb bcbaadb
Algunas subcadenas de u: baad, aa, cba, db.
1.7.
Lenguajes
Un lenguaje L sobre un alfabeto Σ es un subconjunto de Σ ∗ , es decir L ⊆ Σ ∗ . Casos extremos: L = ∅, L = Σ∗ ,
lenguaje vac´ıo. lenguaje de todas las cadenas sobre Σ.
Todo lenguaje L satisface ∅ ⊆ L ⊆ Σ∗ , y puede ser finito o infinito. Los lenguajes se denotan con letras may´usculas A , B , C , . . . , L , M , N , . . ..
Ejemplos
Los siguientes son ejemplos de lenguajes sobre los alfabetos especificados.
Introducci´ on a la Teor´ıa de la Computaci´ on
Cap´ıtulo 1
8
Σ = { a,b,c}. L = { a,aba,aca}. Σ = { a,b,c}. L = { a,aa,aaa,... } = { an : n ≥ 1 }. Σ = { a,b,c}. L = { λ,aa,aba,ab2 a,ab3 a , . . .} = {abn a : n ≥ 0 } ∪ {λ}. Σ = { a , b , c , . . . , x , y , z , A , B , C , . . . , X , Y , Z} . L = { u ∈ Σ ∗ : u es una palabra listada en el diccionario espa˜nol DRA}. L es un lenguaje finito. Σ = {a,b,c}. L = {u ∈ Σ∗ : u no contiene el s´ımbolo c}. Por ejemplo, abbaab ∈ L pero abbcaa ∈ / L. Σ = { 0, 1}. L = conjunto de todas las secuencias binarias que contienen un n´umero impar de unos. Σ = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9}. El conjunto N de los n´ umeros naturales se puede definir como un lenguaje sobre Σ, en la siguiente forma: N
= {u ∈ Σ∗ : u = λ y (u = 0 o´ 0 no es un prefijo de u)}.
Como ejercicio, el estudiante puede definir el conjunto de los enteros Z
= {. . . , −2, −1, 0, 1, 2, . . .}
como un lenguaje sobre un alfabeto adecuado.
1.8.
Operaciones entre lenguajes
Puesto que los lenguajes sobre Σ son subconjuntos de Σ ∗ , las operaciones usuales entre conjuntos son tambi´en operaciones v´alidas entre lenguajes. As´ı, si A y B son lenguajes sobre Σ (es decir A, B ⊆ Σ ∗ ), entonces los siguientes tambi´en son lenguajes sobre Σ: A ∪ B = { u : u ∈ A o u ∈ B } A ∩ B = { u : u ∈ A y u ∈ B } A − B = {u : u ∈ A y u ∈ / B } ∗ ∗ A = Σ − A = {u : u ∈ Σ y u ∈ / A }
Uni´on. Intersecci´on. Diferencia. Complemento.
Estas operaciones entre lenguajes se llaman operaciones conjuntistas o booleanas para distinguirlas de las operaciones ling¨ u´ısticas (concatenaci´ on, potencias, reflexi´on, clausura) que son extensiones a los lenguajes de las correspondientes operaciones entre cadenas.
Introducci´ on a la Teor´ıa de la Computaci´ on
1.9.
Cap´ıtulo 1
9
Concatenaci´ on de lenguajes
La concatenaci´ on de dos lenguajes A y B sobre Σ, notada A · B o simplemente AB se define como AB = { uv : u ∈ A, v ∈ B }. En general, AB = BA.
Ejemplo
Si Σ = {a,b,c}, A = {a,ab,ac}, B = { b, b2 }, entonces AB = {ab, ab2 , ab2 , ab3 ,acb,acb2 } = {ab,ab2 , ab3 ,acb,acb2 }. BA = {ba,bab,bac,b2 a, b2 ab,b2 ac}.
N´otese que AB tiene cinco cadenas en total ya que la cadena ab2 se obtiene de dos maneras distintas.
Ejemplo
Si Σ = {a,b,c}, A = {ba,bc}, B = {bn : n ≥ 0 }, entonces AB = {babn : n ≥ 0 } ∪ {bcbn : n ≥ 0 }. BA = {bn ba : n ≥ 0 } ∪ {bn bc : n ≥ 0 } = {bn+1 a : n ≥ 0 } ∪ {bn+1 c : n ≥ 0 } = {bn a : n ≥ 1 } ∪ {bn c : n ≥ 1 }.
Propiedades de la concatenaci´ on de lenguajes. Sean A, B,C lenguajes sobre Σ , es decir A, B,C ⊆ Σ ∗ . Entonces
1. A · ∅ = ∅ · A =
∅.
2. A · {λ} = {λ} · A = A. 3. Propiedad Asociativa, A · (B · C ) = (A · B) · C. 4. Distributividad de la concatenaci´on con respecto a la uni´on, A · (B ∪ C ) = A · B ∪ A · C. (B ∪ C ) · A = B · A ∪ C · A. 5. Propiedad distributiva generalizada. Si { Bi }i∈I es una familia cualquiera de lengua jes sobre Σ, entonces A · Bi = (A · Bi ),
i∈I
i∈I
Bi · A =
i∈I
Demostraci´ on .
1. A · ∅ = {uv : u ∈ A, v ∈
∅} = ∅.
(Bi · A).
i∈I
Introducci´ on a la Teor´ıa de la Computaci´ on
Cap´ıtulo 1
10
2. A · {λ} = {uv : u ∈ A, v ∈ {λ}} = {u : u ∈ A} = A. 3. Se sigue de la asociatividad de la concatenaci´ on de cadenas. 4. Caso particular de la propiedad general, demostrada a continuaci´on. 5. Demostraci´on de la igualdad A ·
i∈I
x ∈ A ·
La igualdad
Bi · A =
i∈I
(A · Bi ):
i∈I
Bi ⇐⇒ ⇐⇒ ⇐⇒ ⇐⇒
x = u · v, con u ∈ A & v ∈ i∈I Bi un j ∈ I x = u · v, con u ∈ A & v ∈ B j , para alg´ un j ∈ I x ∈ A · B j , para alg´ x ∈ i∈I (A · Bi ).
i∈I
Bi =
(Bi · A) se demuestra de forma similar.
i∈I
La propiedad asociativa permite escribir concatenaciones de tres o m´as lengua jes sin necesidad de usar par´entesis.
En general, no se cumple que A · (B ∩ C ) = A · B ∩ A · C . Es decir, la concatenaci´on no es distributiva con respecto a la intersecci´on. Contraejemplo: Sea Σ = {a}, A = {a, λ}, B = {λ}, C = {a}. Se tiene: A · (B ∩ C ) = {a, λ} · ∅ = ∅. Por otro lado, A · B ∩ A · C = { a, λ} · {λ} ∩ {a, λ} · {a} = {a, λ} ∩ {a2 , a} = { a}.
Ejercicios de la secci´ on 1.9 Dar
un ejemplo de un alfabeto Σ y dos lenguajes diferentes A, B sobre Σ tales que AB = BA.
Una
de las dos contenencias siguientes es siempre verdadera y la otra es falsa. Demostrar o refutar, seg´un sea el caso: (i) A · (B ∩ C ) ⊆ A · B ∩ A · C . (ii) A · B ∩ A · C ⊆ A · (B ∩ C ).
Introducci´ on a la Teor´ıa de la Computaci´ on
1.10.
Cap´ıtulo 1
11
Potencias de un lenguaje
Dado un lenguaje A sobre Σ, (A ⊆ Σ ∗), y un n´umero natural n ∈ siguiente forma
N,
se define An en la
A0 = { λ}, An = AA · · · A = {u · · · un : u i ∈ A, para todo i, 1 ≤ i ≤ n}, para n ≥ 1. 1
n veces
Se tiene entonces que A1 = A y A2 es el conjunto de las concatenaciones dobles de cadenas de A: A2 = { uv : u, v ∈ A}. A3 est´a formado por las concatenaciones triples: A3 = {uvw : u, v,w ∈ A } En general, An es el conjunto de todas las concatenaciones de n cadenas de A, de todas las formas posibles.
1.11.
La clausura de Kleene de un lenguaje
La clausura de Kleene o estrella de Kleene o simplemente la estrella de un lenguaje A, A ⊆ Σ∗ , es la uni´on de todas las potencias de A y se denota por A ∗ . ∗
(Descripci´on 1)
A =
Ai = A0 ∪ A1 ∪ A2 ∪ · · · ∪ An · · ·
i≥0
Seg´un la definici´on de las potencias de una lenguaje, A∗ consta de todas las concatenaciones de cadenas de A consigo mismas, de todas las formas posibles. Tenemos as´ı una descripci´on expl´ıcita de A∗ : A∗ = conjunto de todas las concatenaciones de cadenas de A, incluyendo λ = {u · · · un : ui ∈ A, n ≥ 0 }.
(Descripci´on 2)
1
De manera similar se define la clausura positiva de un lenguaje A, A ⊆ Σ∗ , denotada por A+ . A+ = Ai = A1 ∪ A2 ∪ · · · ∪ An · · ·
i≥1
A+ se puede describir expl´ıcitamente de la siguiente manera A+
= conjunto de todas las concatenaciones de cadenas de A = {u · · · un : ui ∈ A, n ≥ 1 }. 1
Introducci´ on a la Teor´ıa de la Computaci´ on
Cap´ıtulo 1
12
Tambi´en es posible dar una definici´on recursiva de A ∗ : λ ∈ A ∗ . Si u ∈ A∗ y v ∈ A entonces u · v ∈ A ∗ . En definitiva, A ∗ es todo lo que se puede obtener comenzando con λ y concatenando con cadenas de A. La definici´on recursiva de A + es similar, excepto que sus elementos b´asicos son las cadenas de A: Si u ∈ A entonces u ∈ A + . Si u ∈ A + y v ∈ A entonces u · v ∈ A + .
Seg´ un las definiciones dadas, Σ ∗ tiene dos significados: Σ∗ = conjunto de las cadenas sobre el alfabeto Σ. Σ∗ = conjunto de todas las concatenaciones de cadenas de Σ, considerando a Σ como el lenguaje de las cadenas de longitud 1. No hay conflicto de notaciones porque las dos definiciones anteriores de Σ∗ dan lugar al mismo conjunto.
Propiedades de
∗
y +. Sea A un lenguaje sobre Σ, es decir, A ⊆ Σ ∗.
1. A∗ = A+ ∪ {λ}. 2. A∗ = A+ si y solamente si λ ∈ A. 3. A+ = A ∗ · A = A · A∗ . 4. A∗ · A∗ = A ∗.
= A ∗ , para todo n ≥ 1.
= A ∗ .
n
5. A∗
6. A+ · A+ ⊆ A + . En general, A + · A+ = A + 7. A∗ 8. A∗
9. A+ 10. A+
∗
+
= A∗ .
∗
= A∗ .
+
= A + .
Demostraci´ on .
Las propiedades 1 y 2 se siguen inmediatamente de las definiciones de A ∗ y A + .
Introducci´ on a la Teor´ıa de la Computaci´ on
Cap´ıtulo 1
13
A · A∗ = A · (A0 ∪ A1 ∪ A2 ∪ · · · ) = A 1 ∪ A2 ∪ A3 ∪ · · · = A + .
3.
Similarmente se demuestra que A ∗ · A = A + . 4. Si x ∈ A ∗ · A∗ , entonces x = u · v, con u ∈ A ∗ , v ∈ A ∗ . De modo que, x = u · v, con u = u u · · · un , ui ∈ A, n ≥ 0 y v = v v · · · vm , vi ∈ A, m ≥ 0. De donde x = u · v = u · u · · · un · v · v · · · vm . 1
2
1
1
2
2
1
2
con u i ∈ A, v i ∈ A, n ≥ 0. Por lo tanto, x es una concatenaci´on de n + m cadenas de A. As´ı que x ∈ A ∗ . Rec´ıprocamente, si x ∈ A ∗ , entonces x = x · λ ∈ A ∗ · A∗ . Hemos probado que x ∈ A ∗ · A∗ ⇐⇒ x ∈ A ∗ , lo cual establece la igualdad. 5. Se sigue de la propiedad 4. 6. La demostraci´o n de A+ · A + ⊆ A+ es similar a la demostraci´o n de A∗ · A ∗ ⊆ A∗ presentada en la propiedad 4, pero tomando m, n ≥ 1. Para exhibir un contraejemplo de A + · A+ = A + , consideramos Σ = { a, b} y A = { a}. Se tiene que A+ = A1 ∪ A2 ∪ · · · = { a} ∪ {aa} ∪ {aaa} ∪ · · · = {an : n ≥ 1 }. A+ · A+ = {a, a2 , a3 , . . . } · {a, a2 , a3 , . . . } = { a2 , a3 , a4 , . . . } = {an : n ≥ 2 }. Se observa que A+ · A+ = A + 7.
2
8.
3
9.
A∗
A∗
∗
+
0
1
= A∗ ∪ A∗ ∪ A∗ ∪ · · · = {λ} ∪ A∗ ∪ A∗ ∪ A∗ ∪ · · · = A ∗ .
1
2
= A∗ ∪ (A∗ ∪ (A∗ = A∗ ∪ A∗ ∪ A∗ ∪ · · · = A∗ .
A+
∗
0
1
2
∪···
= A+ ∪ A+ ∪ A+ ∪ · · · = {λ} ∪ A+ ∪ A+ A+ ∪ · · · = A∗ ∪ (conjuntos contenidos en A + ) = A∗ .
Introducci´ on a la Teor´ıa de la Computaci´ on
Cap´ıtulo 1
14
A+
10.
+
1
2
3
= A+ ∪ A+ ∪ A+ ∪ · · · , = A+ ∪ (conjuntos contenidos en A + ) = A+ .
Otras propiedades de
. Sean A, B lenguajes sobre Σ, es decir, A, B ⊆ Σ∗ .
∗
1. Si A ⊆ B entonces A∗ ⊆ B ∗. 2. (A ∪ B)∗ = (A∗ B ∗ )∗ = (B ∗ A∗ )∗ . Demostraci´ on .
1. Se sigue inmediatamente de las definiciones de A ∗ y B ∗ . 2. Demostraremos la igualdad (A ∪ B)∗ = (A∗ B ∗ )∗ . La contenencia ⊆ se sigue de A ⊆ A∗ ,
B ⊆ B ∗ =⇒ A ⊆ A ∗ B ∗, B ⊆ A∗ B ∗ =⇒ A ∪ B ⊆ A ∗B ∗ =⇒ (A ∪ B)∗ ⊆ (A∗ B ∗ )∗ por la propiedad 1.
Ahora deduciremos la contenencia ⊇. Puesto que A ⊆ A ∪ B y B ⊆ A ∪ B , de la propiedad 1 se obtiene que A∗ ⊆ (A ∪ B)∗ y B ∗ ⊆ (A ∪ B)∗ ; se concluye que A∗ B ∗ ⊆ (A ∪ B)∗ (A ∪ B)∗ = (A ∪ B)∗ . Por la propiedad 1 se tiene entonces que
(A∗ B ∗ )∗ ⊆ (A ∪ B)∗
1.12.
∗
= (A ∪ B)∗ .
Reflexi´ on o inverso de un lenguaje
Dado A un lenguaje sobre Σ, se define A R de la siguiente forma: AR = {uR : u ∈ A }. on , o el inverso de A, o el reverso de A. AR se denomina la reflexi´
Propiedades. Sean A y B lenguajes sobre Σ, es decir, A, B ⊆ Σ ∗. 1. (A · B)R = B R · AR . 2. (A ∪ B)R = A R ∪ B R . 3. (A ∩ B)R = A R ∩ B R .
4. AR
R
= A.
Introducci´ on a la Teor´ıa de la Computaci´ on
Cap´ıtulo 1
15
∗
5. (A∗ )R = AR . 6. (A+ )R = AR Demostraci´ on .
+
.
Demostraremos las propiedades 1 y 5; las dem´ as se dejan como ejercicio (opcional) para el estudiante. x ∈ (A · B)R ⇐⇒ x = u R , donde u ∈ A · B
1.
⇐⇒ x = u R , donde u = vw, v ∈ A, w ∈ B ⇐⇒ x = (vw)R , donde v ∈ A, w ∈ B ⇐⇒ x = w R v R , donde v ∈ A, w ∈ B ⇐⇒ x ∈ B R · AR .
x ∈ (A∗ )R ⇐⇒ x = u R , donde u ∈ A ∗
5.
⇐⇒ x = (u · u · · · un )R , donde los u i ∈ A, n ≥ 0 1
2
R R ⇐⇒ x = u R n · u · · · u , donde los ui ∈ A, n ≥ 0 2
1
R ∗
⇐⇒ x ∈ (A ) .
Ejercicios de la secci´ on 1.12 Demostrar
las propiedades 2, 3, 4 y 6 de la reflexi´on de cadenas.
¿Se
pueden generalizar las propiedades 2 y 3 anteriores para uniones e intersecciones arbitrarias, respectivamente?
1.13.
Lenguajes regulares
Los lenguajes regulares sobre un alfabeto dado Σ son todos los lenguajes que se pueden formar a partir de los lenguajes b´asicos ∅, { λ}, { a}, a ∈ Σ, por medio de las operaciones de uni´on, concatenaci´on y estrella de Kleene. A continuaci´on presentamos la definici´on recursiva de la colecci´on de todos los lenguajes regulares sobre un alfabeto dado Σ. (1)
{λ} y {a}, para cada a ∈ Σ, son lenguajes regulares sobre Σ. Estos son los denominados lenguajes regulares b´asicos.
∅,
(2) Si A y B son lenguajes regulares sobre Σ, tambi´ en lo son A ∪ B (uni´on), A · B (concatenaci´on), (estrella de Kleene). A∗
Introducci´ on a la Teor´ıa de la Computaci´ on
Cap´ıtulo 1
16
La uni´on, la concatenaci´on y la estrella de Kleene se denominan operaciones regulares .
podemos
Sea Σ = {a, b}. Los siguientes son lenguajes regulares sobre Σ porque los obtener a partir de los lenguajes b´asicos { λ}, { a} y {b} por medio de un n´ umero finito de uniones, concatenaciones o estrellas de Kleene: Ejemplos
1. {a}∗ = { λ,a,a2 , a3 , a4 , . . .}. 2. {a}+ = {a}∗ · {a} = {a, a2 , a3 , a4 , . . .}. 3. {a, b}∗ = ({a} ∪ {b})∗ . Es decir, el lenguaje de todas las cadenas sobre Σ es regular. 4. El lenguaje A de todas las cadenas que tienen exactamente una a: A = {b}∗ · {a} · {b}∗ . 5. El lenguaje B de todas las cadenas que comienzan con b: B = {b} · {a, b}∗ = {b} · ({a} ∪ {b})∗ . 6. El lenguaje C de todas las cadenas que contienen la subcadena ba:
C = {a} ∪ {b}
∗
· {b} · {a} · ({a} ∪ {b})∗ .
7. ({a} ∪ {b}∗ ) · {a}.
∗
8. {λ} ∪ {a} · {b} ∪ {b} · {a} .
Es importante observar que todo lenguaje finito L = {w , w , . . . , wn } es regular ya que L se puede obtener como una uni´ on finita: 1
2
L = {w } ∪ {w } ∪ · · · ∪ {wn }, 1
2
y cada cadena wi de L es la concatenaci´o n de un n´ umero finito de s´ımbolos; si w i = a a · · · ak , entonces {wi } = {a } · {a } · · · {ak }. 1
2
1
2
Seg´ un la definici´on recursiva de los lenguajes regulares, si A , A , . . . , Ak son k lenguajes regulares, entonces ki=1 Ai es regular. Pero si {Ai }i∈I es una familia infinita de lenguajes regulares, la uni´on Ai no necesa-
riamente es regular, como se ver´a en el Cap´ıtulo 2.
1
i∈I
2
Introducci´ on a la Teor´ıa de la Computaci´ on
1.14.
Cap´ıtulo 1
17
Expresiones regulares
Los ejemplos de la secci´on 1.13 muestran que en la presentaci´on de los lenguajes regulares abundan las llaves o corchetes { } y los par´entesis. Con el prop´osito de hacer m´as legible la representaci´on de los lenguajes regulares, se introducen las denominadas expresiones regulares. La siguiente es la definici´on recursiva de las expresiones regulares sobre un alfabeto Σ dado. (1) Expresiones regulares b´asicas: es una expresi´on regular que representa al lenguaje ∅. es una expresi´on regular que representa al lenguaje { λ}. es una expresi´on regular que representa al lenguaje { a}, para cada a ∈ Σ.
∅
λ a
(2) Si R y S son expresiones regulares sobre Σ que representan los lenguajes regulares A y B , respectivamente, entonces (R) ∪ (S ) es una expresi´on regular que representa al lenguaje A ∪ B. (R)(S ) es una expresi´on regular que representa al lenguaje A · B. ∗ (R) es una expresi´on regular que representa al lenguaje A∗ . Los par´entesis ( y ) son s´ımbolos de agrupaci´on y se pueden omitir si no hay peligro de ambig¨ uedad. Es decir, podemos escribir simplemente R ∪ S , RS y R∗ para la uni´on, la concatenaci´on y la estrella de Kleene, respectivamente, siempre y cuando no haya confusiones ni ambig¨ uedades. Los par´entesis son inevitables cuando haya necesidad de delimitar el alcance de la operaciones involucradas. Para una expresi´on regular R cualquiera se utiliza en ocasiones la siguiente notaci´on: L[R] := lenguaje representado por R. Utilizando esta notaci´on y la definici´on recursiva de las expresiones regulares podemos escribir las siguientes igualdades en las que R y S son expresiones regulares arbitrarias sobre el alfabeto Σ: L[∅] = ∅. L[λ] = { λ}. L[a] = { a}, para cada a ∈ Σ. L[R ∪ S ] = L[R] ∪ L[S ]. L[RS ] = L[R] · L[S ]. ∗ L[R∗ ] = L[R] .
Ejemplo
Dado el alfabeto Σ = {a,b,c}, (a ∪ b∗ )a∗ (bc)∗
Introducci´ on a la Teor´ıa de la Computaci´ on
Cap´ıtulo 1
18
es una expresi´on regular que representa al lenguaje
Ejemplo
∗
{a} ∪ {b}∗ · {a}∗ · {b} · {c} .
Dado el alfabeto Σ = {a, b}, (λ ∪ a)∗ (a ∪ b)∗ (ba)∗
es una expresi´on regular que representa al lenguaje
{λ} ∪ {a}
de
Ejemplos
∗
· {a} ∪ {b}
∗
∗
· {b} · {a} .
Podemos representar algunos de los lenguajes de la secci´on 1.13 por medio expresiones regulares:
1. El lenguaje A de todas las cadenas que tienen exactamente una a: b∗ ab∗ . 2. El lenguaje B de todas las cadenas que comienzan con b: b(a ∪ b)∗ . 3. El lenguaje C de todas las cadenas que contienen la subcadena ba: (a ∪ b)∗ ba(a ∪ b)∗ . Por la propiedad A+ = A∗ · A = A · A ∗ , la clausura positiva + se puede expresar en t´erminos de ∗ y concatenaci´on. Por tal raz´on, se permite el uso de + en expresiones regulares.
Las expresiones (a+ ∪ b)ab+ y (aa∗ ∪ b)abb∗ representan el mismo lenguaje. An´ alogamente, las dos siguientes expresiones
Ejemplo
(a ∪ b)+ ∪ a+ b+ . (a ∪ b)(a ∪ b)∗ ∪ aa∗ b∗ b. representan el mismo lenguaje.
Introducci´ on a la Teor´ıa de la Computaci´ on
Cap´ıtulo 1
En las expresiones regulares se usan reglas de precedencia para la uni´on, la concatenaci´on y la estrella de Kleene similares a las que se utilizan en las expresiones aritm´eticas para la suma, la multiplicaci´ on y la exponenciaci´ on. El orden de precedencia es ∗ , ·, ∪; es decir, la estrella act´ua antes que la concatenaci´on y ´esta antes que la uni´on. Por ejemplo, la expresi´on ba ∗ ∪ c se interpreta como [b(a)∗] ∪ c.
La representaci´on de lenguajes regulares por medio de expresiones regulares no es u ´ nica. Es posible que haya varias expresiones regulares diferentes para el mismo lenguaje. Por ejemplo, b(a ∪ b)∗ y b(b ∪ a)∗ representan el mismo lenguaje. Otro ejemplo: las dos expresiones regulares (a ∪ b)∗ y (a∗ b∗ )∗ representan el mismo lenguaje por la propiedad (A ∪ B)∗ = (A∗ B ∗)∗ mencionada en la p´agina 14.
La propiedad distributiva
19
A · (B ∪ C ) = A · B ∪ A · C, le´ıda de izquierda a derecha sirve para distribuir A con respecto a una uni´on, y le´ıda de derecha a izquierda sirve para “factorizar” A. Esto permite obtener nuevas expresiones regulares.
Sea Σ = {0, 1}. Encontrar una expresi´on regular para el lenguaje de todas las cadenas cuyo pen´ ultimo s´ımbolo, de izquierda a derecha, es un 0.
Ejemplo
Soluci´ on.
El pen´ ultimo s´ımbolo debe ser un cero pero para el u ´ ltimo hay dos posibilidades: 0 o 1. Estos casos se representan como una uni´on: (0 ∪ 1)∗00 ∪ (0 ∪ 1)∗ 01. Factorizando podemos obtener otras expresiones regulares: (0 ∪ 1)∗ (00 ∪ 01). (0 ∪ 1)∗ 0(0 ∪ 1).
definidos
Ejemplos
Encontrar expresiones regulares que representen los siguientes lenguajes, sobre el alfabeto Σ = {a, b}:
1. Lenguaje de todas las cadenas que tienen un n´umero par de s´ımbolos (cadenas de longitud par ≥ 0). Aparte de la cadena vac´ıa λ, todas las cadenas de longitud par ≥ 2 se obtienen concatenando de todas las formas posibles los cuatro bloques aa, ab, ba y bb. As´ı llegamos a la expresi´on Soluci´ on.
(aa ∪ ab ∪ ba ∪ bb)∗ .
Introducci´ on a la Teor´ıa de la Computaci´ on
Cap´ıtulo 1
20
Otra expresi´on correcta es (a2 ∪ b2 ∪ ab ∪ ba)∗ . Utilizando la propiedad distributiva de la concatenaci´on con respecto a la uni´on, encontramos otra expresi´on regular para este lenguaje: [(a ∪ b)(a ∪ b)]∗ . 2. Lenguaje de todas las cadenas que tienen un n´umero par ≥ 0 de aes. Soluciones: Si la cadena tiene cero aes, significa que solamente posee bes. Todas las
dem´as cadenas tienen un n´umero par de aes (2, 4, 6, . . . ) que aparecen rodeadas a izquierda o a derecha por cualquier cantidad de bes (incluyendo 0 bes). Encontramos as´ı a varias posibles soluciones: b∗ (b∗ ab∗ ab∗)∗ . (b∗ ab∗ ab∗ )∗ b∗ . b∗ (b∗ ab∗ ab∗ )∗ b∗ . (b∗ ab∗ ab∗ )∗ ∪ b∗ . (ab∗ a ∪ b)∗ . (ab∗ a ∪ b∗ )∗ . La expresi´on regular R = b ∗ (ab∗ a)∗ b∗ no es una soluci´on correcta porque en medio de dos bloques de la forma ab ∗ a no se podr´ıan insertar bes. De modo que cadenas como abab2 aba y ab 3 ab4 ab5 a no har´ıan parte de L[R], a pesar de que poseen un n´umero par de aes.
de
Sea Σ = {0, 1}. Encontrar una expresi´on regular que represente el lenguaje todas las cadenas que no contienen dos ceros consecutivos. on de que no haya dos ceros consecutivos implica que todo cero debe Soluci´ on. La condici´ estar seguido necesariamente de un uno, excepto un cero al final de la cadena. Por lo tanto, las cadenas de este lenguaje se obtienen concatenado unos con bloques 01, de todas las formas posibles. Hay que tener en cuenta, adem´as, que la cadena puede terminar ya sea en 1 o en 0. A partir de este an´alisis, llegamos a la expresi´on regular Ejemplo
(1 ∪ 01)∗ ∪ (1 ∪ 01)∗ 0. Factorizando (1 ∪ 01) ∗ , obtenemos otra expresi´on para este lenguaje: (1 ∪ 01) ∗ (λ ∪ 0). Otras dos soluciones an´alogas son: (1 ∪ 10)∗ ∪ 0(1 ∪ 10)∗. (λ ∪ 0)(1 ∪ 10)∗ .
de
Sea Σ = {a,b,c}. Encontrar una expresi´on regular que represente el lenguaje todas las cadenas que no contienen la subcadena bc. on. PenSoluci´ on. Tanto aes como ces pueden concatenarse entre s´ı sin ninguna restricci´ samos entonces en una expresi´on de la forma Ejemplo
(a ∪ c ∪ ?)∗ .
Introducci´ on a la Teor´ıa de la Computaci´ on
Cap´ıtulo 1
21
Una b puede estar seguida solamente de otra b o de una a; por lo tanto, conjeturamos con la expresi´on (a ∪ c ∪ b∗ a)∗ . Pero debemos permitir cadenas que terminen en bes; haciendo el ajuste correspondiente llegamos a la primera soluci´on: (a ∪ c ∪ b∗ a)∗b∗ . Esta expresi´on puede simplificarse omitiendo la a inicial: (c ∪ b∗ a)∗ b∗. ya que el bloque b ∗ a permite obtener cualquier cadena de aes. Tambi´ en podemos atacar el problema en la forma (a ∪ b ∪ ?)∗ . Teniendo en cuenta que se debe impedir la subcadena bc, llegamos a la soluci´on c∗ (a ∪ b ∪ ac∗ )∗ , la cual se puede simplificar como c ∗(b ∪ ac∗ )∗ . Otras soluciones v´ alidas para este problema son: (a ∪ c ∪ b+ a)∗ b∗ . c∗ (a ∪ b ∪ ac+ )∗ .
Ejercicios de la secci´ on 1.14 Encontrar
expresiones regulares para los siguientes lenguajes definidos sobre el alfabeto Σ = {a, b}: (i) Lenguaje de todas las cadenas que comienzan con el s´ımbolo b y terminan con el s´ımbolo a. (ii) Lenguaje de todas las cadenas de longitud impar. (iii) Lenguaje de todas las cadenas que tienen un n´umero impar de aes. (iv) Lenguaje de todas las cadenas en las que el n´umero de bes es un m´ultiplo ≥ 0 de 3. (v) Lenguaje de todas las cadenas que no comienzan con la subcadena ba ni terminan en b. (vi) Σ = {a, b}. Lenguaje de todas las cadenas que no contienen la subcadena bba.
Encontrar
expresiones regulares para los siguientes lenguajes definidos sobre el alfabeto Σ = {0, 1, 2}: (i) Lenguaje de todas las cadenas que comienzan con 2 y terminan con 1. (ii) Lenguaje de todas las cadenas que no comienzan con 1 ni terminan en 2.
Introducci´ on a la Teor´ıa de la Computaci´ on
Cap´ıtulo 1
22
(iii) Lenguaje de todas las cadenas que tienen exactamente dos ceros. (iv) Lenguaje de todas las cadenas que tienen un n´umero par de s´ımbolos. (v) Lenguaje de todas las cadenas que tienen un n´umero impar de s´ımbolos. (vi) Lenguaje de todas las cadenas que no contienen dos unos consecutivos. Encontrar
expresiones regulares para los siguientes lenguajes definidos sobre el alfabeto Σ = {0, 1}: (i) Lenguaje de todas las cadenas que tienen por lo menos un 0 y por lo menos un 1. (ii) Lenguaje de todas las cadenas que no contienen tres ceros consecutivos. (iii) Lenguaje de todas las cadenas cuya longitud es ≥ 4. (iv) Lenguaje de todas las cadenas cuya longitud es ≥ 5 y cuyo quinto s´ımbolo, de izquierda a derecha, es un 1. (v) Lenguaje de todas las cadenas que no terminan en 01. (vi) Lenguaje de todas las cadenas de longitud par ≥ 2 formadas por ceros y unos alternados. (vii) Lenguaje de todas las cadenas de longitud ≥ 2 formadas por ceros y unos alternados.
(viii) Lenguaje de todas las cadenas que no contienen dos ceros consecutivos ni dos unos consecutivos. (ix) Lenguaje de todas las cadenas de longitud impar que tienen unos en todas las posiciones impares. (x) Lenguaje de todas las cadenas cuya longitud es un m´ultiplo de tres. (xi) Lenguaje de todas las cadenas que no contienen cuatro ceros consecutivos. (xii) Lenguaje de todas las cadenas que no comienzan con 00 ni terminan en 11. (xiii) Lenguaje de todas las cadenas que no contienen la subcadena 101.