-
Universidad San Sebastián
Facultad de Ingeniería y Tecnología
Ingeniería Civil Informática
APUNTES DE LA ASIGNATURA
FUND...
2
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
TABLA DE CONTENIDOS
1 INTRODUCCIÓN ...................
3
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
2.5.2 CONCATENACIÓN...................................
4
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
3.4 EJERCICIOS........................................
5
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
1 INTRODUCCIÓN
Un lenguaje es una abstracción que p...
6
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
En ciencias de la computación, el estudio de los le...
7
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
elementos, conjunto de símbolos eléctricos y electr...
8
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
1. Longitud: para una palabra 𝑤, devuelve la cantid...
9
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
𝑃𝑟𝑒𝑓𝑖𝑗𝑜(𝑤, 2) = ℎ𝑜
𝑃𝑟𝑒𝑓𝑖𝑗𝑜(𝑤, 3) = ℎ𝑜𝑙
𝑃𝑟𝑒𝑓𝑖𝑗𝑜(𝑤, 4...
10
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
 𝑤1 y 𝑤2 tienen un prefijo común y el símbolo sig...
11
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
Por hipótesis de inducción:
𝑎(𝑢𝑣′) 𝑅
= 𝑎(𝑣′ 𝑅
𝑢 𝑅)...
12
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
1.3.2 OPERACIONES SOBRE LENGUAJES
Al igual que ocu...
13
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
Ejemplo 1.10:
Sean 𝐿1 = {01, 10} y 𝐿2 = {0, 1, 00,...
14
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
5. Subsecuencia: 𝑆𝑢𝑏𝑠𝑒𝑐𝑢𝑒𝑛𝑐𝑖𝑎(𝐿) = {𝑤 ∈ Σ∗
: 𝑣𝑤𝑥 ∈...
15
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
FIGURA 1.1: Jerarquía de Chomsky para los tipos de...
16
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
9. Dado el lenguaje 𝐿 = {𝑎, 𝑎𝑏, 𝑏𝑎}, muestre las p...
17
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
2 LENGUAJES REGULARES
En la unidad anterior se def...
18
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
𝐺 = (Σ, N, P, S):
 Σ = {0, 1}
 N = {〈secuencia〉}...
19
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
También es posible representar las derivaciones en...
20
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
FIGURA 2.2: Árboles de derivación para las palabra...
21
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
2.2 GRAMÁTICAS REGULARES
Anteriormente habíamos es...
22
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
este alfabeto extendido es una expresión regular. ...
23
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
Este mismo lenguaje puede ser representado de mane...
24
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
Ejemplo 2.7:
Pruebe, usando propiedades básicas, q...
25
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
b. Concatenación (secuencia incondicional):
X seq ...
26
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
c. Clausura o estrella de Kleene (iteración o repe...
27
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
registro de sus estados anteriores. No obstante, e...
28
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
cambios de estado. Una vez alcanzado este punto, e...
29
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
Otra manera de representar la función de transició...
30
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
La siguiente noción importante es la de paso de co...
31
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
Una vez conocido 𝐿(𝑀), es posible definir la equiv...
32
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
𝐶 − 𝜀(𝑞) = 𝑠 ∈ 𝑄: (𝑞, 𝜀) ⊢∗ (𝑠, 𝜀)
Se puede extend...
33
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
FIGURA 2.5: Representación gráfica de M.
Además, l...
34
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
El segundo paso, entonces, consiste en eliminar la...
35
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
Consideremos el AFND 𝑀′ de la figura 2.6 y determi...
36
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
Note que 𝑞2 es el conjunto vacío, por lo que al ha...
37
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
Tras el análisis de comportamiento de los grupos, ...
38
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
 𝑄 = 𝑄1 ∪ 𝑄2.
 𝛿 = 𝛿1 ∪ 𝛿2 ∪ 𝐹1 × {𝜀} × {𝑞02}.
...
39
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
Ejemplo 2.16:
2.5.4 COMPLEMENTACIÓN (SOLO PARA AFD...
40
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
A continuación realizamos la unión de los compleme...
41
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
𝛿(𝑞4, 0) = {𝐴, 𝐺} 𝐶 − 𝜀({𝐴, 𝐺}) = {𝐴, 𝐺} = 𝑞8
𝛿(𝑞4...
42
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
Finalmente, complementamos el resultado anterior:
...
43
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
En esta sección se muestra en primer lugar el méto...
44
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
𝑟 = 𝑟𝐴 𝑟𝐵
Para la concatenación, basta con hacer q...
45
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
𝑟2 = 0
𝑟3 = 1
𝑟4 = 𝑟2 𝑟3
𝑟5 = 𝑟4 𝑟3
𝑟6 = 𝑟2 𝑟2
𝑟7 ...
46
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
𝑟9 = 𝑟8
∗
𝑟10 = 𝑟5 𝑟9
𝑟11 = 𝑟1 + 𝑟2
𝑟12 = 𝑟4 𝑟11
47
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
𝑟 = 𝑟13 = 𝑟10 + 𝑟12
Problema propuesto:
Determine ...
48
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
Además, se debe tener en consideración la regla de...
49
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
𝑋3 = [11∗(0 + 1)0]∗
11∗(0 + 1)
La ER buscada corre...
50
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
𝑅12
1
= 𝑅12
0
+ 𝑅11
0 (𝑅11
1 )∗
𝑅12
0
𝑅22
1
= 𝑅22
...
51
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
Dado un autómata finito 𝑀 = (𝑄, ΣM, 𝛿, 𝑞0, 𝐹), exi...
52
Fundamentos de Ciencias de la Computación
Jacqueline Köhler C. - USS
Al igual que en el método inverso, la comprobación...
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Apuntes fundamento
Próxima SlideShare
Cargando en…5
×

Apuntes fundamento

757 visualizaciones

Publicado el

APUNTES DE FUNDAMENTO DE LA COMPUTACION

Publicado en: Educación
0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
757
En SlideShare
0
De insertados
0
Número de insertados
3
Acciones
Compartido
0
Descargas
20
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

Apuntes fundamento

  1. 1. - Universidad San Sebastián Facultad de Ingeniería y Tecnología Ingeniería Civil Informática APUNTES DE LA ASIGNATURA FUNDAMENTOS DE CIENCIAS DE LA COMPUTACIÓN Mag. Jacqueline Köhler C.
  2. 2. 2 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS TABLA DE CONTENIDOS 1 INTRODUCCIÓN ................................................................................................................................. 5 1.1 SÍMBOLOS Y ALFABETOS......................................................................................................... 6 1.2 PALABRAS.................................................................................................................................... 7 1.2.1 DEFINICIÓN ........................................................................................................................... 7 1.2.2 OPERACIONES SOBRE PALABRAS................................................................................... 7 1.2.3 PROPIEDADES DE LAS OPERACIONES SOBRE PALABRAS...................................... 10 1.3 LENGUAJES ................................................................................................................................ 11 1.3.1 DEFINICIÓN ......................................................................................................................... 11 1.3.2 OPERACIONES SOBRE LENGUAJES ............................................................................... 12 1.3.2.1 Operaciones de conjuntos ................................................................................................ 12 1.3.2.2 Operaciones basadas en la concatenación de palabras..................................................... 12 1.3.2.3 Otras operaciones sobre lenguajes................................................................................... 13 1.3.3 JERARQUÍA DE LOS LENGUAJES ................................................................................... 14 1.4 EJERCICIOS................................................................................................................................. 15 2 LENGUAJES REGULARES .............................................................................................................. 17 2.1 GRAMÁTICAS............................................................................................................................. 17 2.2 GRAMÁTICAS REGULARES.................................................................................................... 21 2.3 EXPRESIONES REGULARES.................................................................................................... 21 2.3.1 PROPIEDADES BÁSICAS DE LAS EXPRESIONES REGULARES ................................ 23 2.3.2 NOTACIONES PARA EXPRESIONES REGULARES....................................................... 24 2.4 AUTÓMATAS FINITOS.............................................................................................................. 26 2.4.1 DEFINICIÓN ......................................................................................................................... 26 2.4.2 TIPOS DE AUTÓMATAS FINITOS .................................................................................... 28 2.4.2.1 Autómata finito determinístico (AFD)............................................................................. 28 2.4.2.2 Autómata finito no determinístico (AFND)..................................................................... 31 2.4.3 EQUIVALENCIA ENTRE AFD Y AFND............................................................................ 33 2.4.4 MINIMIZACIÓN DE AFD.................................................................................................... 36 2.5 OPERACIONES CON AF............................................................................................................ 37 2.5.1 UNIÓN ................................................................................................................................... 37
  3. 3. 3 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS 2.5.2 CONCATENACIÓN.............................................................................................................. 37 2.5.3 ESTRELLA DE KLEENE ..................................................................................................... 38 2.5.4 COMPLEMENTACIÓN (SOLO PARA AFD) ..................................................................... 39 2.5.5 INTERSECCIÓN (SOLO PARA AFD)................................................................................. 39 2.6 EQUIVALENCIAS....................................................................................................................... 42 2.6.1 EQUIVALENCIA ENTRE ER Y AF .................................................................................... 42 2.6.1.1 Método de Thompson ...................................................................................................... 43 2.6.1.2 Método de ecuaciones lineales (método de Arden) ......................................................... 47 2.6.1.3 Método recursivo ............................................................................................................. 49 2.6.2 EQUIVALENCIA ENTRE AF Y GR.................................................................................... 50 2.6.2.1 Obtención de una GR a partir de un AF........................................................................... 50 2.6.2.2 Obtención de un AF a partir de una GR........................................................................... 51 2.7 LEMA DEL BOMBEO................................................................................................................. 52 2.8 TRANSDUCTORES FINITOS .................................................................................................... 53 2.8.1 Máquina de Mealy.................................................................................................................. 53 2.8.2 Máquina de Moore.................................................................................................................. 54 2.9 EJERCICIOS................................................................................................................................. 55 3 LENGUAJES LIBRES DE CONTEXTO ........................................................................................... 60 3.1 GRAMÁTICAS LIBRES DE CONTEXTO................................................................................. 60 3.1.1 AMBIGÜEDAD..................................................................................................................... 60 3.1.2 SIMPLIFICACIÓN DE GLC Y FORMAS NORMALES..................................................... 62 3.1.2.1 Eliminación de símbolos inútiles..................................................................................... 62 3.1.2.2 Eliminación de producciones  ........................................................................................ 64 3.1.2.3 Eliminación de producciones unitarias ............................................................................ 65 3.1.2.4 Forma normal de Chomsky.............................................................................................. 66 3.1.2.5 Forma normal de Greibach .............................................................................................. 68 3.1.2.6 Factorización por la izquierda.......................................................................................... 69 3.2 AUTÓMATAS APILADORES.................................................................................................... 71 3.3 EQUIVALENCIA ENTRE CLG Y AA ....................................................................................... 74 3.3.1 PASO DE AA A GLC............................................................................................................ 74 3.3.2 PASO DE GLC A AA............................................................................................................ 76
  4. 4. 4 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS 3.4 EJERCICIOS................................................................................................................................. 77 4 MÁQUINAS DE TURING.................................................................................................................. 79 4.1 DEFINICIÓN Y OPERACIÓN .................................................................................................... 79 4.2 ¿SON LAS MT MÁS POTENTES QUE LOS AF Y LOS AA?.................................................. 82 4.3 OTROS EJEMPLOS Y APLICACIONES DE MT...................................................................... 85 4.4 EXTENSIONES AL MODELO DE MT...................................................................................... 86 4.4.1 MT CON MOVIMIENTO DE ESPERAR............................................................................. 86 4.4.2 MT CON CINTA MULTIPISTA........................................................................................... 86 4.4.3 MT MULTI CINTA ............................................................................................................... 86 4.4.3 MT MULTI DIMENSIONAL................................................................................................ 87 4.5 HIPÓTESIS DE CHURCH........................................................................................................... 87 4.6 EJERCICIOS................................................................................................................................. 88 5 COMPLEJIDAD COMPUTACIONAL .............................................................................................. 89 5.1 COMPLEJIDAD DE ALGORITMOS.......................................................................................... 89 5.1.1 LA BÚSQUEDA DE LA EFICIENCIA ................................................................................ 90 5.1.2 CÁLCULO DE LA COMPLEJIDAD.................................................................................... 91 5.2 MODELO DE MÁQUINA ........................................................................................................... 93 5.3 NOTACIÓN O .......................................................................................................................... 94 5.4 COMPLEJIDAD DE ALGORITMOS RECURSIVOS.......................................................... 100 5.5 CLASES DE PROBLEMAS....................................................................................................... 103 5.5.1 CLASE P .............................................................................................................................. 104 5.5.2 CLASE NP ........................................................................................................................... 105 5.5.3 TRANSFORMACIÓN POLINOMIAL ............................................................................... 106 5.6 EJERCICIOS............................................................................................................................... 106 BIBLIOGRAFÍA .................................................................................................................................. 107
  5. 5. 5 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS 1 INTRODUCCIÓN Un lenguaje es una abstracción que permite la comunicación y coordinación mediante la creación de conceptos que pueden ser entendidos de la misma forma por los distintos participantes. Así, un lenguaje puede entenderse como una forma de hablar o de describir algo. Para poder hablar de lenguaje es importante conocer algunos elementos. Por ejemplo, ¿cómo se crean los conceptos? ¿Cómo hacer que todos entiendan lo mismo? El primer paso para responder esta pregunta está en el concepto de símbolo. En el caso del castellano, se puede pensar en las letras como símbolos elementales, que se emplean para construir conceptos sencillos denominados palabras. El conjunto de todos los símbolos se conoce como alfabeto. Ahora bien, las palabras también pueden formar parte de estructuras más complejas: frases y oraciones. A su vez, éstas pueden conformar párrafos, etc. A partir de los conceptos anteriores podría pensarse que cualquier secuencia de letras es una palabra o que una oración podría ser una secuencia aleatoria de palabras. Pero de nuestra experiencia previa sabemos que no es así. Existe una serie de reglas que limitan la forma de las palabras o la estructura de un texto:  Reglas léxicas: corresponden a las reglas de ortografía de un lenguaje, e indican la forma que deben tener las palabras. Por ejemplo, en castellano no puede haber palabras que contengan una n seguida de una b.  Reglas sintácticas: definen la forma en que se debe estructurar un texto. Por ejemplo, una oración debe tener sujeto y predicado. El predicado debe tener un núcleo que puede ir acompañado de diversos complementos.  Reglas semánticas: determinan el significado de lo que se dice en el texto sintácticamente correcto y guardan relación con el contexto. Por ejemplo, la frase “ése árbol” puede referirse a un árbol de un parque, o bien a una estructura de datos empleada en la resolución de un problema computacional. Con todo lo anterior, ya tenemos una primera noción de qué es un lenguaje. Ahora bien, sabemos que existen muchos lenguajes y que en ocasiones es necesario pasar un mensaje o texto de un lenguaje a otro. De aquí surgen los conceptos de traducción (generar una copia escrita del mensaje original en un idioma distinto) e interpretación (repetir verbalmente un mensaje en un lenguaje diferente al empleado por el emisor). Ahora bien, existen diferentes tipos de lenguajes. Por ahora, nos basta distinguir entre:  Lenguajes naturales: son aquellos que las personas utilizan para comunicarse entre ellas, como el castellano, el inglés o el chino. Son muy complejos, tienen una gran cantidad de reglas y sin embargo presentan situaciones de ambigüedad que los hablantes resuelven recurriendo al contexto tanto de espacio como de tiempo.  Lenguajes formales: son lenguajes artificiales, diseñados para lograr una comunicación (unidireccional) entre personas y máquinas. Estas últimas deben comprender los mensajes y ejecutarlos, por lo que las reglas de los lenguajes formales deben estar muy bien definidas y no pueden dar lugar a ambigüedades.
  6. 6. 6 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS En ciencias de la computación, el estudio de los lenguajes formales se limita a sus características intrínsecas e internas, sin tener en cuenta su significado ni su uso como herramienta de comunicación, puesto que esto último corresponde a una atribución asignada por un observador externo al lenguaje. No obstante, también resulta fundamental abordar algunos aspectos prácticos que se desprenden de la teoría anterior: ¿cómo aplicar la teoría de lenguajes formales para poder comunicarnos con las máquinas? El resto de esta unidad se ocupa de responder a esta pregunta en forma general, mientras las unidades siguientes detallan los conceptos teóricos necesarios para llevar a cabo las principales etapas del proceso de compilación. 1.1 SÍMBOLOS Y ALFABETOS El fundamento para cualquier lenguaje es el símbolo: una unidad u objeto representacional primitivo (indivisible), estable y distinguible en un espacio determinado. En otras palabras, un símbolo es un objeto concreto, discreto y bien definido. Algunos ejemplos de símbolos son: 1, 3, a, r, *, (, +, , , etc. Para denotar un símbolo genérico se usa el símbolo 𝜎. El primer uso que podemos dar a los símbolos es la conformación de alfabetos. Estos últimos son conjuntos finitos no vacíos de símbolos. En general, un alfabeto con 𝑛 símbolos se denota por Σ, es decir, Σ = {𝜎1, 𝜎2, … , 𝜎 𝑛}, donde 𝜎𝑖 es un símbolo y 𝑛 > 0. Algunos ejemplos de alfabetos son:  {𝐼} Un alfabeto unario.  {0, 1} Un alfabeto binario.  {0, 1, 2, 3, 4, 5, 6, 7} Un alfabeto octal.  {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} Un alfabeto decimal.  {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 𝐴, 𝐵, 𝐶, 𝐷, 𝐸, 𝐹} Un alfabeto hexadecimal.  {A, B, … , Y, Z, 𝑎, 𝑏, … , 𝑦, 𝑧} El alfabeto castellano.  {Α, Β, … , Ψ, Θ, 𝛼, 𝛽, … , 𝜓, 𝜃} El alfabeto griego.  {𝑎, 𝑒, 𝑖, 𝑜, 𝑢} Las vocales del castellano.  {. , −} El alfabeto Morse (otro alfabeto binario).  ASCII, un alfabeto usado en computadores, conformado por 128 símbolos que incluyen caracteres imprimibles o que pueden ser vistos por humanos: alfabéticos (mayúsculas y minúsculas de alfabetos latinos), dígitos, símbolos de uso frecuente (puntuación, por ejemplo) y caracteres especiales para la comunicación y control de dispositivos.  UNICODE, otro alfabeto de computadores que cuenta con 216 caracteres. Además del alfabeto ASCII, integra también símbolos pertenecientes a la mayoría de los idiomas del mundo. A partir de los ejemplos anteriores, resulta natural afirmar que, en general, un alfabeto puede ser cualquier conjunto arbitrario finito no vacío de símbolos. Esto nos lleva al dominio de la teoría de conjuntos: un conjunto es una colección no ordenada de objetos conformada por elementos únicos. Los alfabetos sirven para representar cosas. Por ejemplo, el alfabeto castellano representa sonidos y el alfabeto de los dígitos representa cantidades. También podemos usar alfabetos para representar conjuntos finitos de objetos primitivos de otros dominios, por ejemplo: la tabla periódica de los
  7. 7. 7 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS elementos, conjunto de símbolos eléctricos y electrónicos, bases del ADN, operaciones de la lógica proposicional, etc. La principal utilidad de los alfabetos es ser una fuente inagotable de símbolos para crear estructuras más complejas: secuencias o cadenas, llamadas palabras, que se consrtruyen mediante el uso de operaciones bien definidas. 1.2 PALABRAS 1.2.1 DEFINICIÓN Podemos definir la idea de palabra como un objeto compuesto, un contenedor en que los componentes tienen un orden definido por la posición que ocupan y pueden repetirse en las diferentes posiciones de la secuencia. Dicho de otro modo, una palabra es un objeto compuesto lineal. Una forma más elegante es que una palabra 𝑤 corresponde a una secuencia finita no vacía de símbolos pertenecientes a un alfabeto Σ, es decir, 𝑤 = 𝜎1 𝜎2 … 𝜎 𝑛, 𝜎𝑖 ∈ Σ. En esta definición, el subíndce i señala la posición relativa del símbolo 𝜎𝑖 en la secuencia. Así, 𝜎𝑖 = 𝑤(𝑖) denota al i-ésimo caracter de la secuencia. Esta definición corresponde a la definición de un string en programación: una estructura lineal de caracteres donde se puede acceder a cada elemento en forma directa. Ahora bien: Consideremos la siguiente línea de código: String s=""; ¿Qué ocurre con la definición anterior? Una palabra es una secuencia no vacía de símbolos. Sin embargo, el string s no contiene símbolos. Esto crea la necesidad de definir una palabra especial: la palabra vacía, denotada por 𝜀. Así, la palabra vacía es aquella que no tiene símbolos. Denotaremos por Σ∗ al conjunto (infinito) de todas las palabras que es posible formar sobre un alfabeto Σ. Σ∗ es libre sobre Σ, lo que significa que cada elemento de tiene una única representación con elementos de Σ. Más formalmente: Si 𝑥, 𝑦 ∈ Σ∗ , con 𝑥 = 𝑎1 𝑎2 … 𝑎 𝑚 e 𝑦 = 𝑏1 𝑏2 … 𝑏 𝑛; 𝑚, 𝑛 ≥ 0 entonces 𝑥 = 𝑦 ⇔ 𝑛 = 𝑚 ∧ 𝑎𝑖 = 𝑏𝑖; 0 ≤ 𝑖 ≤ 𝑚 = 𝑛. Es importante destacar que la palabra vacía tiene una característica especial: forma parte de los universos de palabras generados por todos los distintos alfabetos. 1.2.2 OPERACIONES SOBRE PALABRAS Existe una gran variedad de operaciones que podemos definir sobre palabras. Las hay abiertas, cerradas y de diferentes aridades (cantidades de argumentos). Las principales son:
  8. 8. 8 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS 1. Longitud: para una palabra 𝑤, devuelve la cantidad de caracteres que la conforman. Es una operación unaria abierta, que toma como argumento una palabra y retorna un valor natural, es decir, su signatura es 𝑓: Σ∗ → ℕ. Esta operación se denota por |𝑤|. Adicionalmente, se puede extender esta operación para determinar la cantidad de veces que aparece un símbolo dado en una palabra. Esto se denota por |𝑤| 𝜎. Ejemplo 1.1: Sea 𝑤 = 001010. |𝑤| = 6 y |𝑤|0 = 4. 2. Concatenación: es una operación binaria cerrada, que toma dos palabras como argumento y retorna una tercera. En otras palabras, su signatura es 𝑓: Σ∗ × Σ∗ → Σ∗ . Se define de la siguiente manera: dadas 𝑢, 𝑣 ∈ Σ∗ tales que 𝑢 = 𝑎1 𝑎2 … 𝑎 𝑚 y 𝑣 = 𝑏1 𝑏2 … 𝑏 𝑛, 𝑢𝑣 = 𝑎1 𝑎2 … 𝑎 𝑚 𝑏1 𝑏2 … 𝑏 𝑛. Habitualmente no se utiliza ningún símbolo para esta operación, aunque en ocasiones se denota con un punto. Ejemplo 1.2: Sean Σ = {0,1,2}, 𝑢 = 0110 y 𝑣 = 202. 𝑢𝑣 = 0110202. 𝑣𝑢 = 2020110. 3. Potencia de la concatenación: sea 𝑤 una palabra, entonces 𝑤 𝑖 (𝑖 ≥ 0), denota 𝑖 concatenaciones de 𝑤, de modo que 𝑤 𝑖 = 𝑤𝑤 … 𝑤 (𝑖 veces). Es importante recordar que 𝑤0 = 𝜀 y 𝑤1 = 𝑤. Ejemplo 1.3: Sea w = aba. 𝑤0 = 𝜀, 𝑤1 = 𝑎𝑏𝑎, 𝑤2 = 𝑎𝑏𝑎𝑎𝑏𝑎, 𝑤3 = 𝑎𝑏𝑎𝑎𝑏𝑎𝑎𝑏𝑎, etc. La operación de concatenación permite definir inductivamente la noción de palabra: a. 𝜀 y cada 𝜎 ∈ Σ son palabras. b. Si 𝑤1 y 𝑤2 son palabras, entonces 𝑤3 = 𝑤1 𝑤2 y 𝑤4 = 𝑤2 𝑤1 también son palabras. 4. Segmentos de una palabra: estas operaciones unarias también son cerradas, es decir, también retornan una palabra. La signatura para todas ellas es su signatura es 𝑓: Σ∗ → Σ∗ . Sean 𝑤, 𝑥, 𝑦, 𝑧 ∈ Σ∗ tales que 𝑤 = 𝑥𝑦𝑧. Entonces: a. 𝑥 es prefijo de 𝑤. Corresponde a los primeros símbolos de 𝑤, y normalmente se especifica con una longitud determinada 𝑙 menor o igual que la longitud de la palabra original, es decir, 0 ≤ 𝑙 ≤ |𝑤|. b. 𝑧 es sufijo de 𝑤. Corresponde a los últimos símbolos de 𝑤, y también se especifica con una longitud 𝑙 menor o igual que la longitud de la palabra original, es decir, 0 ≤ 𝑙 ≤ |𝑤|. c. 𝑦 es subcadena o segmento intermedio de 𝑤. Puede especificarse de dos maneras: con la posición inicial en la palabra original y la longitud del segmento o bien con las posiciones inicial y final en la palabra original. Ejemplo 1.4: Sea w = hola: 𝑃𝑟𝑒𝑓𝑖𝑗𝑜(𝑤, 0) = 𝜀 𝑃𝑟𝑒𝑓𝑖𝑗𝑜(𝑤, 1) = ℎ
  9. 9. 9 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS 𝑃𝑟𝑒𝑓𝑖𝑗𝑜(𝑤, 2) = ℎ𝑜 𝑃𝑟𝑒𝑓𝑖𝑗𝑜(𝑤, 3) = ℎ𝑜𝑙 𝑃𝑟𝑒𝑓𝑖𝑗𝑜(𝑤, 4) = ℎ𝑜𝑙𝑎 𝑆𝑢𝑓𝑖𝑗𝑜(𝑤, 0) = 𝜀 𝑆𝑢𝑓𝑖𝑗𝑜(𝑤, 1) = 𝑎 𝑆𝑢𝑓𝑖𝑗𝑜(𝑤, 2) = 𝑙𝑎 𝑆𝑢𝑓𝑖𝑗𝑜(𝑤, 3) = 𝑜𝑙𝑎 𝑆𝑢𝑓𝑖𝑗𝑜(𝑤, 4) = ℎ𝑜𝑙𝑎 𝑆𝑢𝑏𝑐𝑎𝑑𝑒𝑛𝑎(𝑤, 0, 0) = 𝜀 𝑆𝑢𝑏𝑐𝑎𝑑𝑒𝑛𝑎(𝑤, 2, 3) = 𝑜𝑙 𝑆𝑢𝑏𝑐𝑎𝑑𝑒𝑛𝑎(𝑤, 1, 4) = ℎ𝑜𝑙𝑎 𝑆𝑢𝑏𝑐𝑎𝑑𝑒𝑛𝑎(𝑤, 3, 3) = 𝑙 Es habitual que a los prefijos, sufijos y subcadenas que no son iguales a la palabra vacía o a la palabra completa se les apellide como “propios”. Es importante señalar que prefijos y sufijos son también subcadenas. 5. Reverso: es una operación unaria cerrada, es decir, de signatura 𝑓: Σ∗ → Σ∗ . Se denota por 𝑤 𝑅 y retorna una palabra de igual longitud que 𝑤 pero con los caracteres en orden invertido. Ejemplo 1.5: Sea w = hola. 𝑤 𝑅 = 𝑎𝑙𝑜ℎ. Se denomina palíndromos a aquellas palabras tales que 𝑤 = 𝑤 𝑅 , como por ejemplo 𝜀, 𝑏, 𝑎𝑙𝑎 y 𝑠𝑜𝑙𝑜𝑠. 6. Subsecuencia de una palabra: es una nueva palabra que se obtiene eliminando una o más subpalabras no vacías de la palabra original. Ejemplo 1.6: Sea w = hola. ℎ𝑎 es una subsecuencia. 7. Comparaciones: son operaciones relacionales entre dos palabras. a. Igualdad: dos palabras son iguales si y solo si tienen igual longitud y contienen el mismo símbolo en cada posición. Más formalmente, dadas 𝑤1 = 𝑎1 𝑎2 … 𝑎 𝑚, 𝑤2 = 𝑏1 𝑎2 … 𝑏 𝑛 ∈ Σ∗ , 𝑤1 = 𝑤2 ⇔ 𝑚 = 𝑛 ∧ 𝑎𝑖 = 𝑏𝑖∀𝑖: 1 ≤ 𝑖 ≤ 𝑛. Así, esta operación binaria tendrá como resultado un valor de verdad, por lo que su signatura es 𝑓: Σ∗ × Σ∗ → {verdadero, falso}. Cabe señalar que la desigualdad o distinción equivale a la negación de la igualdad. b. Menoridad y mayoridad: si los símbolos del alfabeto Σ tienen asociada una relación de orden (es decir, Σ es un conjunto ordenado), es posible establecer una relación de orden lexicográfico entre palabras. Así, una palabra 𝑤1 es menor que otra palabra 𝑤2 si y solo si:  𝑤1 es prefijo propio de 𝑤2.
  10. 10. 10 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS  𝑤1 y 𝑤2 tienen un prefijo común y el símbolo siguiente al prefijo en 𝑤1 es lexicográficamente menor que el símbolo correspondiente en 𝑤2. La mayoridad se define de manera similar. Ejemplo 1.7: hola = hola hola ≠ chao hola < ℎ𝑜𝑙𝑎𝑝 holap < ℎ𝑜𝑙𝑎𝑠 Existen muchas otras operaciones que se pueden definir sobre palabras, pero no serán consideradas en este curso. 1.2.3 PROPIEDADES DE LAS OPERACIONES SOBRE PALABRAS Es posible establecer relaciones entre algunas de las operaciones descritas en la sección anterior:  |𝜀| = 0 La longitud de la palabra vacía es 0.  |𝑢𝑣| = |𝑢| + |𝑣| La longitud de la concatenación es la suma de las parciales.  |𝑤 𝑅| = |𝑤| El reverso no afecta a la longitud.  (𝑢𝑣)𝑤 = 𝑢(𝑣𝑤) Asociatividad de la concatenación.  𝑢𝑣 ≠ 𝑣𝑢 En general, la concatenación no es conmutativa.  𝜀𝑤 = 𝑤 = 𝑤𝜀 𝜀 es elemento neutro para la concatenación.  (𝑤 𝑅) 𝑅 = 𝑤 En general, una potencia par del reverso no altera la palabra.  ((𝑤 𝑅) 𝑅) 𝑅 = 𝑤 En general, una potencia impar del reverso entrega la palabra reversa.  (𝑢𝑣) 𝑅 = 𝑣 𝑅 𝑢 𝑅 Reverso de la concatenación de dos palabras.  (𝑢𝑣𝑤) 𝑅 = 𝑤 𝑅 𝑣 𝑅 𝑢 𝑅 Reverso de la concatenación de tres palabras (similar para más palabras).  𝜀 𝑅 = 𝜀 Reverso de la palabra vacía.  𝜎 𝑅 = 𝜎 Reverso de palabras de longitud 1. Las demostraciones de estas propiedades pueden hacerse, principalmente, por inducción sobre la longitud de las palabras. Ejemplo 1.8: Demostrar que (𝑢𝑣) 𝑅 = 𝑣 𝑅 𝑢 𝑅 , con 𝑢𝑣 ∈ Σ∗ . a) Caso base: Si |𝑣| = 0 ⇒ 𝑣 = 𝜀 y (𝑢𝜀) 𝑅 = 𝑢 𝑅 = 𝜀 𝑅 𝑢 𝑅 . b) Definición de hipótesis de inducción: Si |𝑣| = 𝑛, se asume que la proposición es verdadera. c) Paso inductivo: demostrar que si |𝑣| = 𝑛 + 1, la proposición es verdadera. Sea |𝑣| = 𝑛 + 1. Entonces 𝑣 = 𝑣′ 𝑎; 𝑎 ∈ Σ; 𝑣, 𝑣′ ∈ Σ∗ ; |𝑣′| = 𝑛. (𝑢𝑣) 𝑅 = (𝑢𝑣′𝑎) 𝑅 = 𝑎(𝑢𝑣′) 𝑅
  11. 11. 11 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS Por hipótesis de inducción: 𝑎(𝑢𝑣′) 𝑅 = 𝑎(𝑣′ 𝑅 𝑢 𝑅) = (𝑣′𝑎) 𝑅 𝑢 𝑅 Problema propuesto: demuestre las demás propiedades. 1.3 LENGUAJES 1.3.1 DEFINICIÓN Definición: Un lenguaje es un conjunto de palabras sobre un alfabeto. Se puede apreciar que la definición formal de lenguaje es muy simple. Solo señala que tenemos una colección de palabras construidas sobre un conjunto dado de símbolos, pero no incorpora ningún tipo de condición o restricción adicional. Así pues, los siguientes conjuntos de palabras son, en efecto, lenguajes:  { } El lenguaje vacío.  {𝜀} El lenguaje que contiene únicamente a la palabra vacía.  Σ∗ El lenguaje universo sobre un alfabeto Σ.  Conjuntos finitos de palabras {𝑤1, 𝑤2, … , 𝑤 𝑛}; 𝑤𝑖 ∈ Σ∗ . Por ejemplo, {0, 000, 010, 001, 1110} es un lenguaje finito definido sobre el alfabeto {0, 1}.  Conjuntos infinitos de palabras {𝑤1, 𝑤2, 𝑤3, … }; 𝑤𝑖 ∈ Σ∗ . Por ejemplo, el conjunto de todas las secuencias binarias que comienzan y terminan con un 1 es un lenguaje infinito definido sobre el alfabeto {0, 1}. Otro aspecto importante es que, de acuerdo la definición anterior, no importa el significado de las palabras o lo que ellas representen, pues esto corresponde a una asociación arbitraria que un observador externo realiza entre el conjunto de palabras y un conjunto de “cosas” (objetos, acciones, etc.). Así, el significado no es un atributo propio de las palabras en sí mismas. Los lenguajes pueden usarse para representar muy variados objetos, concretos o abstractos, del mundo real, incluyendo a los propios lenguajes. En este último caso, las palabras representan a los objetos que conforman el conjunto. También es posible representar un objeto o un conjunto de objetos mediante diferentes lenguajes, como ocurre por ejemplo con los números naturales (objetos abstractos). Estos últimos pueden ser representados por diferentes lenguajes construidos sobre alfabetos distintos, cada cual con sus propias reglas para asociar valores a las palabras. Algunos ejemplos son:  Palabras construidas sobre el alfabeto decimal {0, 1, 2, 3, 4 ,5 ,6 ,7, 8, 9}, donde los valores se asocian mediante la notación posicional.  Los números romanos, construidos sobre el alfabeto {𝐼, 𝑉, 𝑋, 𝐿, 𝐶, 𝐷, 𝑀}. En este caso existen palabras de Σ∗ que no representan ningún valor.  Números binarios, octales y hexadecimales, donde las palabras se construyen sobre los alfabetos {0, 1, }, {0, 1, 2, 3, 4 ,5 ,6 ,7} y {0, 1, 2, 3, 4 ,5 ,6 ,7, 8, 9, 𝐴, 𝐵, 𝐶, 𝐷, 𝐸, 𝐹} respectivamente y los valores se asocian mediante la notación posicional.
  12. 12. 12 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS 1.3.2 OPERACIONES SOBRE LENGUAJES Al igual que ocurre con las palabras, hay diversas operaciones, tanto abiertas como cerradas, que se pueden realizar sobre los lenguajes. Las principales pueden ser agrupadas en dos categorías que se muestran a continuación. 1.3.2.1 Operaciones de conjuntos Son las operaciones típicas de la teoría de conjuntos, aplicadas teniendo en consideración que un lenguaje no es más que un conjunto de palabras. El resultado es un nuevo lenguaje (conjunto). 1. Unión: retorna un lenguaje que contiene todas las palabras de los lenguajes implicados. Se define como 𝐿1 ∪ 𝐿2 = {𝑤 ∈ Σ∗ : 𝑤 ∈ 𝐿1 ∨ 𝑤 ∈ 𝐿2}. 2. Intersección: retorna el lenguaje conformado únicamente por las palabras comunes a ambos lenguajes, es decir, 𝐿1 ∩ 𝐿2 = {𝑤 ∈ Σ∗ : 𝑤 ∈ 𝐿1 ∧ 𝑤 ∈ 𝐿2}. 3. Diferencia: retorna el lenguaje conformado únicamente por las palabras del primer lenguaje que no están contenidas en el segundo, es decir, 𝐿1 − 𝐿2 = {𝑤 ∈ Σ∗ : 𝑤 ∈ 𝐿1 ∧ 𝑤 ∉ 𝐿2}. 4. Diferencia simétrica: retorna el lenguaje conformado únicamente por las palabras de ambos lenguajes que no están contenidas en el otro, es decir, 𝐿1 △ 𝐿2 = (𝐿1 ∪ 𝐿2) − (𝐿1 ∩ 𝐿2). 5. Complemento: retorna el lenguaje conformado por todas las palabras que no están contenidas en el lenguaje, es decir, 𝐿𝑐 = {𝑤 ∈ Σ∗ : 𝑤 ∉ 𝐿}. Ejemplo 1.9: Sean 𝐿1 = {00, 01, 10, 11} y 𝐿2 = {0, 1, 00, 11}. 𝐿1 ∪ 𝐿2 = {0, 1, 00, 01, 10, 11} 𝐿1 ∩ 𝐿2 = {00, 11} 𝐿1 − 𝐿2 = {01, 10} 𝐿2 − 𝐿1 = {0, 1} 𝐿1 △ 𝐿2 = {0, 1, 01, 10} 𝐿1 𝑐 = {𝑤 ∈ {0, 1}∗ : |𝑤| ≠ 2} 1.3.2.2 Operaciones basadas en la concatenación de palabras 1. Concatenación de lenguajes: esta operación es similar al producto cartesiano. Entrega el lenguaje resultante de concatenar todas las palabras del primer lenguaje como prefijo con todas las palabras del segundo lenguaje como sufijo, es decir, 𝐿1 𝐿2 = {𝑣𝑤 ∈ Σ∗ : 𝑣 ∈ 𝐿1 ∧ 𝑤 ∈ 𝐿2}. En general, 𝐿1 𝐿2 ≠ 𝐿2 𝐿1.
  13. 13. 13 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS Ejemplo 1.10: Sean 𝐿1 = {01, 10} y 𝐿2 = {0, 1, 00, 11}. 𝐿1 𝐿2 = {010, 100, 011, 101, 0100, 1000, 0111, 1011} 𝐿2 𝐿1 = {001, 101, 0001, 1101, 010, 110, 0010, 1110} Existen dos casos especiales a tener en consideración para esta operación: la concatenación con el lenguaje vacío y la concatenación con el lenguaje que solo contiene a la palabra vacía:  𝐿𝜙 = 𝜙𝐿 = 𝜙.  {𝜀}𝐿 = 𝐿{𝜀} = 𝐿. Nada impide la concatenación de un lenguaje consigo mismo, por lo que 𝐿𝐿 = 𝐿2 . Esto lleva a la noción de potencia de la concatenación de un lenguaje:  𝐿0 = {𝜀}  𝐿1 = 𝐿  𝐿2 = 𝐿𝐿  𝐿3 = 𝐿𝐿𝐿  … Ejemplo 1.11: Sea 𝐿 = {00, 11}. 𝐿0 = {𝜀} 𝐿1 = {00, 11} 𝐿2 = {0000, 0011, 1100, 1111} 𝐿3 = {000000, 001100, 110000, 111100, 000011, 001111, 110011, 111111} 2. Clausura reflexiva y transitiva de la concatenación (estrella de Kleene): se define como el conjunto de todas las palabras que son concatenaciones múltiples de palabras del lenguaje. En notación formal, 𝐿∗ = {𝑤 ∈ Σ∗ : 𝑤 = 𝑤1 𝑤2 … 𝑤 𝑘; 𝑘 ≥ 0; 𝑤𝑖 ∈ 𝐿 ∀𝑖}. Dicho de otro modo, La clausura de un lenguaje 𝐿 es la unión infinita de todas sus potencias de concatenación, es decir, 𝐿∗ = ⋃ 𝐿𝑖∞ 𝑖=0 . Adicionalmente, se define la clausura positiva 𝐿+ como 𝐿+ = 𝐿∗ − {𝜀} = ⋃ 𝐿𝑖∞ 𝑖=1 . 1.3.2.3 Otras operaciones sobre lenguajes Es posible definir diversas operaciones que generan otros lenguajes a partir de las operaciones sobre palabras, entre las cuales se encuentran: 1. Reverso: 𝐿 𝑅 = {𝑤: 𝑤 𝑅 ∈ 𝐿}. 2. Prefijo: 𝑃𝑟𝑒𝑓𝑖𝑗𝑜(𝐿) = {𝑣 ∈ Σ∗ : 𝑣𝑤 ∈ 𝐿}. 3. Sufijo: 𝑆𝑢𝑓𝑖𝑗𝑜(𝐿) = {𝑤 ∈ Σ∗ : 𝑣𝑤 ∈ 𝐿}. 4. Prefijo: 𝑃𝑟𝑒𝑓𝑖𝑗𝑜(𝐿) = {𝑣 ∈ Σ∗ : 𝑣𝑤 ∈ 𝐿}.
  14. 14. 14 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS 5. Subsecuencia: 𝑆𝑢𝑏𝑠𝑒𝑐𝑢𝑒𝑛𝑐𝑖𝑎(𝐿) = {𝑤 ∈ Σ∗ : 𝑣𝑤𝑥 ∈ 𝐿}. 6. Cuociente derecho de un lenguaje por una palabra: 𝑣𝐿 = {𝑤 ∈ Σ∗ : 𝑣𝑤 ∈ 𝐿}. 7. Cuociente izquierdo de un lenguaje por una palabra: 𝐿/𝑤 = {𝑣 ∈ Σ∗ : 𝑣𝑤 ∈ 𝐿}. 8. Cuociente derecho entre lenguajes: 𝐿1𝐿2 = {𝑤 ∈ Σ∗ : 𝑣𝑤 ∈ 𝐿2 ∧ 𝑣 ∈ 𝐿1}. 9. Cuociente izquierdo entre lenguajes: 𝐿1/𝐿2 = {𝑣 ∈ Σ∗ : 𝑣𝑤 ∈ 𝐿1 ∧ 𝑤 ∈ 𝐿2}. 1.3.3 JERARQUÍA DE LOS LENGUAJES Hasta ahora hemos visto que un lenguaje es un conjunto, normalmente infinito, de palabras. En consecuencia, no es posible procesarlo directamente mediante un algoritmo, sino que hay que hacerlo indirectamente mediante una representación o descripción finita (por comprensión en vez de por extensión). De este modo, podemos tener un algoritmo para el cual podemos afirmar que termina. No obstante, el problema de la representación de un lenguaje es, a su vez, el problema de su generación. Así, el algoritmo representativo debe generar todas las palabras del lenguaje y ninguna que no pertenezca a éste. Para este fin existen dos modelos finitos:  Expresiones regulares: corresponden a combinaciones de operandos y operadores para generar las palabras de un lenguaje.  Gramáticas: son un conjunto de reglas de reescritura o reemplazo que permiten la generación de palabras pertenecientes a un lenguaje. Un problema importante a este respecto es el de la capacidad de estos mecanismos de representación para abarcar el universo de lenguajes. Para comprender este problema, es necesario tener en consideración lo siguiente:  El universo de palabras Σ∗ que se puede construir sobre un alfabeto Σ es infinito contable (Σ∗ ∼ N).  El conjunto de todos los lenguajes que se pueden crear sobre un alfabeto Σ, es decir, el conjunto potencia de Σ∗ , es infinito incontable (2Σ∗ ∼ 2 𝑁 ).  Como tenemos una cantidad finita de representaciones y un número infinito de lenguajes, quedan infinitos lenguajes sin representación. En Ciencias de la Computación solo nos interesan aquellos lenguajes que podemos representar. Este universo puede además ser dividido en clases o familias que comparten alguna propiedad. La principal clasificación es la jerarquía de Chomsky, que establece 4 tipos de lenguajes representables de acuerdo a los tipos de gramáticas que las generan:  Generales o tipo 0.  Sensibles al contexto (recursivamente enumerables) o tipo 1.  Libres de contexto o tipo 2.  Regulares o tipo 3. Entre los tipos de lenguajes de esta clasificación existe además una jerarquía de inclusión, como se puede apreciar en la figura 1.1, donde 𝑇𝑖𝑝𝑜 3 ⊂ 𝑇𝑖𝑝𝑜 2 ⊂ 𝑇𝑖𝑝𝑜 1 ⊂ 𝑇𝑖𝑝𝑜 0.
  15. 15. 15 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS FIGURA 1.1: Jerarquía de Chomsky para los tipos de lenguajes representables. 1.4 EJERCICIOS 1. Defina alfabetos para representar: a. Las caras de un dado. b. Las tiradas simultáneas de 2 monedas. 2. Defina un alfabeto de 3 símbolos y muestre Σ, Σ2 , Σ3 y Σ∗ . 3. Sean Σ = {0, 1, 2}, 𝑥 = 00, 𝑦 = 1, 𝑧 = 210. Defina e indique las longitudes de las siguientes palabras: 𝑥𝑦, 𝑥𝑧, 𝑦𝑧, 𝑥𝑦𝑧, (𝑥𝑦) 𝑅 , 𝑥3 , 𝑥2 𝑦2 , (𝑥𝑦)2 , (𝑧𝑥𝑥)3 . 4. Describir en lenguaje natural las palabras pertenecientes al lenguaje 𝐿 = {0 𝑛 1 𝑛 : 𝑛 ≥ 1}. 5. Describir en lenguaje natural las palabras pertenecientes al lenguaje 𝐿 = {0𝑖 1 𝑗 : 0 ≤ 𝑖 ≤ 𝑗}. 6. Describir formalmente (en notación de conjuntos) el lenguaje de las palabras formadas por ceros y unos, en las que hay el doble de ceros que de unos y todos los ceros van delante de los unos. 7. Describir formalmente el lenguaje formado por palabras que comienzan y terminan en a teniendo entre medios tres o más bes. 8. Describa formalmente el lenguaje de todas las palabras en {#, &}∗ que comienzan y terminan con #, y tienen todos los & juntos.
  16. 16. 16 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS 9. Dado el lenguaje 𝐿 = {𝑎, 𝑎𝑏, 𝑏𝑎}, muestre las palabras pertenecientes a los lenguajes 𝐿0 , 𝐿1 y 𝐿2 . 10. Para el alfabeto Σ = {1, 2, 3, 𝑎, 𝑏, 𝑐}, y los lenguajes 𝐿1 = {1, 2, 3} y 𝐿2 = {𝑎, 𝑏, 𝑐}, defina los lenguajes 𝐿1 ∪ 𝐿2, 𝐿1 𝐿2 y (𝐿1 𝐿2)2 . 11. Sea el lenguaje 𝐿 = {𝑎𝑏, 𝑎𝑎, 𝑏𝑎𝑎} ⊆ {𝑎, 𝑏}∗ . Indique cuáles de las siguientes palabras pertenecen a 𝐿+ : 𝑎𝑏𝑎𝑎, 𝑎𝑏𝑎𝑏, 𝑎𝑏𝑎𝑎𝑏𝑎𝑎𝑎𝑏𝑎𝑎, 𝑎𝑎𝑎𝑎𝑏𝑎𝑎𝑎𝑎, 𝑏𝑎𝑎𝑎𝑎𝑎𝑏𝑎𝑎𝑎𝑎𝑏, 𝑏𝑎𝑎𝑎𝑎𝑎𝑏𝑎𝑎, ε. 12. Sean 𝐿1 = {𝑎 𝑛 𝑏 𝑛+1 : 𝑛 ≥ 1} y 𝐿2 = {𝑤 ∈ {𝑎, 𝑏}∗ : |𝑤| 𝑎 = |𝑤| 𝑏}. ¿Es 𝐿1 = 𝐿1 ∗ ? ¿Es 𝐿2 = 𝐿2 ∗ ? 13. Demostrar que para todo lenguaje 𝐿 se verifica que 𝐿∗ = 𝐿∗ 𝐿∗ . 14. Dado el lenguaje 𝐿 = {𝑎, 𝑎𝑏𝑏, 𝑏𝑎, 𝑏𝑏𝑏𝑎, 𝑏}, especifique el conjunto de todas las palabras en 𝐿∗ con una longitud menor que 3. 15. Dados 𝐿1 = {𝑟𝑟, 𝑠𝑠, 𝑡𝑡, 𝑟𝑠, 𝑠𝑡}, 𝐿2 = {𝑟𝑠, 𝑠𝑟, 𝑠𝑡, 𝑡𝑠} y 𝑤 = 𝑟𝑟𝑠𝑡𝑠𝑡𝑟𝑟𝑡𝑠𝑠𝑡𝑟, muestre: a. 𝐿3 = 𝐿1 ∪ 𝐿1. b. 𝐿4 = 𝐿1 ∩ 𝐿1 𝑅 . c. 𝐿5 = 𝐿4 𝐿2. d. |𝑤|, |𝑤| 𝑟, |𝑤| 𝑠, |𝑤| 𝑡.
  17. 17. 17 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS 2 LENGUAJES REGULARES En la unidad anterior se definieron diversas operaciones sobre lenguajes y se dio a conocer la jerarquía de los lenguajes que pueden ser representados de manera finita. La clase más simple corresponde a los lenguajes regulares, que pueden ser definidos como aquellos que son originados por las operaciones de unión, concatenación y estrella de Kleene. Definición: Un lenguaje es regular si y solo si puede ser generado constructivamente por composición de operaciones regulares y operandos de lenguajes regulares a partir de los lenguajes básicos 𝜙, {𝜀} y {𝜎}∀𝜎 ∈ Σ. 2.1 GRAMÁTICAS Se había mencionado anteriormente que uno de los mecanismos para representar lenguajes de manera finita son las gramáticas. Éstas pueden definirse como un sistema o algoritmo para la generación de palabras basado en el reemplazo de subsecuencias de acuerdo a determinadas reglas o producciones. Una producción está conformada por un lado izquierdo o antecedente y un lado derecho o consecuente. El mecanismo de funcionamiento es simple: cada vez que se encuentre el antecedente en alguna palabra parcialmente generada, éste debe ser reemplazado por el consecuente formando, en consecuencia, una nueva palabra total o parcialmente generada. Definición: Una gramática 𝐺 es una tupla de 4 elementos, 𝐺 = (Σ, N, P, S), donde:  Σ es un conjunto finito no vacío que contiene los símbolos que conforman el alfabeto del lenguaje generado. También se conoce como conjunto de terminales.  N es un conjunto finito no vacío que contiene símbolos auxiliares variables o de reemplazo denominados no terminales, que facilitan la escritura de las producciones. Σ ∪ N conforman el vocabulario de la gramática.  P es un conjunto finito no vacío de producciones.  S ∈ N es el símbolo inicial a partir del cual, mediante la aplicación sucesiva de producciones, se puede generar cualquier palabra válida del lenguaje. Ejemplo 2.1: La siguiente gramática genera palíndromos sobre el alfabeto binario. Es importante destacar que la palabra vacía no pertenece al vocabulario de 𝐺. 𝐺 = (Σ, N, P, S):  Σ = {0, 1}  N = {A}  P = {A → 0A0 | 1A1 | 0 | 1 | ε}  S = A A continuación se muestra una notación alternativa para el mismo ejemplo.
  18. 18. 18 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS 𝐺 = (Σ, N, P, S):  Σ = {0, 1}  N = {〈secuencia〉}  P = {〈secuencia〉 ∷= 0〈secuencia〉0 | 1〈secuencia〉1 | 0 | 1 | ε}  S = 〈secuencia〉 Es importante destacar algunos aspectos de notación, pues es fundamental en la escritura de gramáticas poder distinguir claramente entre símbolos terminales y no terminales. Las convenciones que se emplean son las siguientes: 1. Los terminales o elementos de Σ se denotan por:  Letras latinas minúsculas (𝑎, 𝑏, 𝑐, …).  Palabras en negrita o subrayado (𝒊𝒇, 𝑤ℎ𝑖𝑙𝑒 , … ).  Palabras encerradas entre comillas simples o dobles (‘ab’, “0110”, …). 2. Los no terminales o elementos de N se denotan por:  Letras latinas mayúsculas (𝐴, 𝐵, 𝐶, …).  Palabras encerradas entre paréntesis triangulares (〈secuencia〉, 〈entero〉, …). 3. Se usan letras griegas minúsculas (𝛼, 𝛽, 𝛾, …) para designar indistintamente símbolos terminales o no terminales, o incluso secuencias de ellos. 4. Una producción de 𝑃 se denota por 𝛼 → 𝛽 ó bien por 𝛼 ∷= 𝛽. Tanto el antecedente como el consecuente pueden estar conformados por cualquier secuencia no vacía de terminales y no terminales. En el caso del consecuente, puede aparecer también la palabra vacía. 5. Las reglas 𝛼 → 𝛽, 𝛼 → 𝛾, 𝛼 → 𝛿 se denotan también por 𝛼 → 𝛽 | 𝛾 | 𝛿. Ahora que está bien definida la idea de gramática, es importante estudiar cómo se generan las palabras. Para una gramática 𝐺, se dice que una secuencia 𝛼′ = 𝛼1 𝛼𝛼2 ∈ (Σ ∪ N)∗ genera o deriva otra secuencia 𝛽′ = 𝛼1 𝛽𝛼2 ∈ (Σ ∪ N)∗ , operación denotada por 𝛼′ ⇒ 𝛽′, si y solo si ∃𝛼 → 𝛽 ∈ 𝑃 para 𝛼1, 𝛼2, 𝛼, 𝛽 ∈ (Σ ∪ N)∗ . Observación: 1. ⇒n es una derivación de n pasos y ⇒∗ corresponde a la clausura reflexiva y transitiva de ⇒. 2. El conjunto de las palabras generadas sobre (Σ ∪ N)∗ a partir del símbolo inicial 𝑆 se denota por 𝑆(𝐺). Ejemplo 2.2: Retomemos la gramática del ejemplo anterior, 𝐺 = ({0, 1}, {A}, {A → 0A0 | 1A1 | 0 | 1 | ε}, A). Para generar la secuencia 001101100, se tienen los siguientes pasos: A ⇒ 0A0 ⇒ 00A00 ⇒ 001A100 ⇒ 0011A1100 ⇒ 001101100. Las derivaciones para la palabra 11, en cambio, son las siguientes: A ⇒ 1A1 ⇒ 11. En este caso, para la segunda derivación se hace uso de la producción A → ε.
  19. 19. 19 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS También es posible representar las derivaciones en forma gráfica mediante un árbol. Si bien en ocasiones este mecanismo resulta más cómodo y claro, puede ser inadecuado en ocasiones porque no muestra el orden en que se realizan las sustituciones. La figura 2.1 muestra esta representación para las secuencias generadas en el ejemplo anterior. FIGURA 2.1: Árboles de derivación para las palabras (a) 001101100 y (b) 11 con 𝐺 = ({0, 1}, {A}, {A → 0A0 | 1A1 | 0 | 1 | ε}, A). El ejemplo anterior es bastante sencillo, puesto que se trata de una gramática con un único no terminal. Pero podemos tener una gran cantidad de ellos, como ocurre al crear la gramática de un lenguaje de programación. Así pues, el siguiente ejemplo muestra una gramática que genera el lenguaje de los números naturales. Ejemplo 2.3: 𝐺 = (Σ, N, P, S):  Σ = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}  N = {〈significativo〉, 〈digito〉, 〈secuencia〉, 〈natural〉}  P = {〈significativo〉 → 1 | 2 | 3 | 4 | 5 |6 | 7 |8 | 9, 〈digito〉 → 0 |1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9, 〈secuencia〉 → 〈digito〉〈secuencia〉 | ε, 〈natural〉 → 0 | 〈significativo〉〈secuencia〉}  S = 〈natural〉 Note que 𝐺 respeta las convenciones de notación habituales al no permitir ceros a la izquierda. La figura 2.2 muestra los árboles de derivación para generar varios números.
  20. 20. 20 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS FIGURA 2.2: Árboles de derivación para las palabras (a) 0, (b) 5 y (c) 3907. La noción de derivación de palabras conduce a la definición de lenguaje generado por una gramática 𝐺, denotado por 𝐿(𝐺). Corresponde al conjunto de palabras generadas a partir del símbolo inicial 𝑆 y que solo contienen símbolos terminales. Matemáticamente: 𝐿(𝐺) = 𝑆(𝐺) ∩ Σ∗ = {𝑤 ∈ Σ∗ : 𝑆 ⇒∗ w}. En general, pueden existir varias gramáticas que generen un mismo lenguaje, lo que las hace equivalentes. Así, 𝐺 ≡ 𝐺′ 𝑠𝑠𝑖 𝐿(𝐺) = 𝐿(𝐺′).
  21. 21. 21 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS 2.2 GRAMÁTICAS REGULARES Anteriormente habíamos estudiado la jerarquía de lenguajes de Chomsky, y definimos además lo que es un lenguaje regular. Una manera de representar este tipo de lenguajes es mediante gramáticas regulares. Se dice que una gramática 𝐺 = (Σ, N, P, S) es lineal si y solo si en cada regla de producción existe a lo más un no terminal en el lado derecho. En otras palabras, todas las producciones son de la forma A → uBv o bien A → w, con A, B ∈ 𝑁 y 𝑢, 𝑣, 𝑤 ∈ Σ∗ . Hay dos casos interesantes a considerar en esta definición:  𝑢 = ε: las producciones son de la forma A → B𝑣 o bien A → w. En este caso, se dice que 𝐺 es lineal izquierda.  𝑣 = ε: las producciones son de la forma A → uB o bien A → w. En este caso, se dice que 𝐺 es lineal derecha. Las gramáticas lineales derechas se denominan también gramáticas regulares, y son las que generan los lenguajes regulares. Ejemplo 2.4: 𝐺 = ({a, b}, {S, A, B, C}, {S → aC, A → aA|b, B → bB|b, C → A|B}, s) Esta gramática genera el lenguaje sobre el alfabeto {a, b} cuyas palabras comienzan con a y terminan con b, y entre medio pueden contener solo as o solo bes: 𝐿 = {𝑎𝑏, 𝑎𝑎𝑏, 𝑎𝑏𝑏, 𝑎𝑎𝑎𝑏, 𝑎𝑏𝑏𝑏, 𝑎𝑎𝑎𝑎𝑏, 𝑎𝑏𝑏𝑏𝑏, … } 2.3 EXPRESIONES REGULARES Las expresiones regulares (ER) son otro mecanismo finito de representación para los lenguajes regulares. Trabajan mediante operandos y operadores que pueden estar agrupados mediante paréntesis, en forma similar a las expresiones algebraicas. No obstante, en lugar de representar números, las expresiones regulares representan conjuntos de palabras. Las expresiones regulares cuentan con las tres operaciones regulares básicas de los lenguajes:  Unión, denotada por +.  Concatenación: no se denota con operador o bien se utiliza un punto.  Clausura o estrella de Kleene, denotada por *. Los operadores anteriores pueden ser aplicados a diversos operandos:  Palabra nula o conjunto vacío (𝜙).  Palabra vacía (𝜀).  Subexpresiones regulares delimitadas por paréntesis. Una definición más formal es que una ER 𝑟 que representa un lenguaje 𝐿 sobre un alfabeto Σ es una palabra construida sobre el alfabeto Σ ∪ {(, ), ∅, ε, +,∗}. No obstante, no toda palabra construida sobre
  22. 22. 22 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS este alfabeto extendido es una expresión regular. Solo lo son aquellas palabras construidas siguiendo las siguientes reglas de construcción inductiva: 1. 𝜙, 𝜀 y cada 𝜎 ∈ Σ son expresiones regulares (caso base). 2. Si 𝑟1 y 𝑟2 son ER, entonces: a. 𝑟1 + 𝑟2 es una ER. b. 𝑟1 𝑟2 es una ER. 3. Si 𝑟 es una ER, entonces: a. 𝑟∗ es una ER. b. (𝑟) es una ER. { } {𝜎} 𝐿1 ∪ 𝐿2 𝐿1 𝐿2 𝐿∗ 4. Solo aquellas palabras que cumplan las reglas anteriores son ER. Podemos representar el lenguaje de las expresiones regulares sobre un alfabeto Σ mediante el modelo de gramática estudiado en la sección anterior: 𝐺 = (ΣG, N, P, S):  ΣG = {(, ), ∅, ε, +,∗, 𝐬í𝐦𝐛𝐨𝐥𝐨}  N = {R}  P = {R → RR | R + R | R∗ | (R) | ε | ∅ | 𝐬í𝐦𝐛𝐨𝐥𝐨}  S = R Note que, en este caso, el terminal símbolo representa cualquier 𝜎 ∈ Σ. Se puede utilizar la definición vista anteriormente para visualizar cómo las ER representan (o generan) lenguajes, según se muestra en la tabla 2.1. TABLA 2.1: ER y lenguaje generado. ER Lenguaje generado ∅ { } El lenguaje vacío. ε {ε} El lenguaje que solo contiene la palabra vacía. 𝜎 ∈ Σ {𝜎} El lenguaje que solo contiene la palabra conformada por el símbolo σ. 𝑟1 + 𝑟2 𝐿1 ∪ 𝐿2 La unión de los lenguajes generados por cada subexpresión. 𝑟1 𝑟2 𝐿1 𝐿2 La concatenación de los lenguajes generados por cada subexpresión. 𝑟∗ 𝐿∗ El lenguaje estrella de Kleene del lenguaje representado por r. (𝑟) 𝐿 No se altera el lenguje representado. Ejemplo 2.5: Habíamos mostrado anteriormente una gramática regular que genera el lenguaje sobre el alfabeto {a, b} cuyas palabras comienzan con a y terminan con b, y entre medio pueden contener solo as o solo bes: 𝐺 = ({a, b}, {S, A, B, C}, {S → aC, A → aA|b, B → bB|b, C → A|B}, s)
  23. 23. 23 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS Este mismo lenguaje puede ser representado de manera mucho más sencilla mediante una expresión regular: 𝑟 = 𝑎(𝑎∗ + 𝑏∗)𝑏 Una restricción importante de las expresiones regulares es que no podemos trabajar con cantidades fijas de símbolos, a menos que los incluyamos explícitamente. Ejemplo 2.6: No podemos representar mediante una ER el lenguaje sobre el alfabeto {a, b} cuyas palabras tienen igual cantidad de as que de bes, y tienen todas las as al principio. La primera aproximación que podríamos considerar es la ER 𝑟1 = 𝑎∗ 𝑏∗ . En ella podemos tener 0 ó más as y 0 ó más bes, y además aparecen todas las as al comienzo. No obstante, nada garantiza que necesariamente tenemos que tener igual cantidad de ambos símbolos. La palabra 𝑢 = 𝑎𝑎𝑎𝑏𝑏𝑏 pertenece al lenguaje descrito y al lenguaje representado por 𝑟1. No obstante, las palabras 𝑣 = 𝑏𝑏𝑏𝑏 y 𝑤 = 𝑎𝑎𝑏𝑏𝑏𝑏𝑏 no pertenecen al lenguaje descrito pero sí al lenguaje representado por 𝑟1. La segunda opción sería explicitar cada subexpresión y hacer la unión de ellas, lo que resulta equivalente a escribir el lenguaje por extensión, es decir, 𝑟2 = 𝜀 + 𝑎𝑏 + 𝑎𝑎𝑏𝑏 + 𝑎𝑎𝑎𝑏𝑏𝑏 + ⋯. 2.3.1 PROPIEDADES BÁSICAS DE LAS EXPRESIONES REGULARES Sean r, s, t expresiones regulares. Entonces, se cumplen las siguientes propiedades:  𝑟 + 𝑠 = 𝑠 + 𝑟 + es conmutativa.  𝑟 + (𝑠 + 𝑡) = (𝑟 + 𝑠) + 𝑡 + es asociativa.  ∅ + 𝑟 = 𝑟 ∅ es neutro para +.  𝑟(𝑠𝑡) = (𝑟𝑠)𝑡 La concatenación es asociativa.  𝑟𝑠 ≠ 𝑠𝑟 En general, la concatenación no es conmutativa.  𝜀𝑟 = 𝑟 = 𝑟𝜀 𝜀 es elemento neutro para la concatenación.  ∅𝑟 = ∅ = 𝑟∅ ∅ es elemento nulo para la concatenación.  𝑟(𝑠 + 𝑡) = 𝑟𝑠 + 𝑟𝑡 Distributividad entre + y concatenación.  (𝑟 + 𝑠)𝑡 = 𝑟𝑡 + 𝑠𝑡 Distributividad entre + y concatenación.  ∅∗ = 𝜀∗ = 𝜀  (𝑟 + 𝑠)∗ = (𝑟∗ + 𝑠∗)∗ = (𝑟∗ 𝑠∗)∗ = (𝑠∗ 𝑟∗)∗ = 𝑟∗(𝑠𝑟∗)∗ = 𝑠∗(𝑟𝑠∗)∗ = (𝑟∗ 𝑠)∗ 𝑟∗ = (𝑠∗ 𝑟)∗ 𝑠∗  (𝑟 + 𝜀)∗ = 𝑟∗ Relación entre * y 𝜀.  𝑟∗ 𝑟∗ = 𝑟∗∗ = 𝑟∗ * es idempotente.  𝑟+ = 𝑟𝑟∗  𝑟+ + 𝜀 = 𝑟∗  (𝑟∗)+ = (𝑟+)∗ = 𝑟∗ Las propiedades anteriores conducen a pensar que pueden existir diversas expresiones regulares que representen el mismo lenguaje, es decir, que sean equivalentes: 𝑟1 ≡ 𝑟2 ⇔ 𝐿(𝑟1) = 𝐿(𝑟2).
  24. 24. 24 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS Ejemplo 2.7: Pruebe, usando propiedades básicas, que 𝑟1 = (01 + 10)∗ y 𝑟2 = (01 + 10 + 𝜀)∗(01)∗(10)∗∗ (01(10)∗)∗ + 0∅1 son equivalentes. 𝑟2 = (01 + 10 + 𝜀)∗(01)∗(10)∗∗ (01(10)∗)∗ + 0∅1 = = (01 + 10 + 𝜀)∗(01)∗(10)∗∗ (01(10)∗)∗ + ∅ = = (01 + 10 + 𝜀)∗(01)∗(10)∗∗ (01(10)∗)∗ = = (01 + 10)∗(01)∗(10)∗∗ (01(10)∗)∗ = = (01 + 10)∗(01)∗(10)∗∗ (01(10)∗)∗ = = (01 + 10)∗(01)∗(10)∗(01(10)∗)∗ = = (01 + 10)∗(01)∗(10)∗(01(10)∗)∗ = = (01 + 10)∗(01)∗(01 + 10)∗ = = (01 + 10)∗(01)∗(01 + 10)∗ = = (01 + 10)∗(01)∗(01)∗(10(01)∗)∗ = = (01 + 10)∗(01)∗(10(01)∗)∗ = = (01 + 10)∗(01 + 10)∗ = = (01 + 10)∗ = = 𝑟1 2.3.2 NOTACIONES PARA EXPRESIONES REGULARES Existen diversas notaciones, tanto textuales como gráficas, para representar expresiones regulares, además de la que hemos empleado hasta ahora. 1. Texto: a. Unión o selección (condicional): If C then A else B; b. Concatenación (secuencia incondicional): A;B; c. Clausura o estrella de Kleene (iteración o repetición): while C do A; (0 ó más veces) do A while C; (clausura positiva: 1 ó más veces) 2. Jackson: a. Unión o selección (condicional): X sel alt A; alt B; endsel;
  25. 25. 25 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS b. Concatenación (secuencia incondicional): X seq A; B endseq; c. Clausura o estrella de Kleene (iteración o repetición): X iter A enditer; 3. Diagramas de sintaxis o de ferrocarril (Conway): a. Unión o selección (condicional): b. Concatenación (secuencia incondicional):
  26. 26. 26 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS c. Clausura o estrella de Kleene (iteración o repetición): (0 ó más veces) (1 ó más veces) 4. Yourdon: a. Unión o selección (condicional): A | B b. Concatenación (secuencia incondicional): A + B c. Clausura o estrella de Kleene (iteración o repetición): {A} (0 ó más veces) 1{A} (clausura positiva: 1 ó más veces) 2.4 AUTÓMATAS FINITOS Hasta ahora, hemos estudiado mecanismos para generar y representar lenguajes regulares. Sin embargo, no hemos abordado mecanismos de reconocimiento de lenguajes regulares que nos permitan automatizar esta tarea. Para este fin estudiaremos los autómatas finitos, correspondientes a un tipo particular de máquinas de estados y transiciones. 2.4.1 DEFINICIÓN Un autómata finito (AF) es una máquina discreta de estados que tiene las siguientes características:  Es sensible al medio, es decir, puede leer (recibir entradas).  Cuenta con un número finito de estados internos.  Puede reaccionar frente a las entradas cambiando su estado.  En general, no tiene mecanismos explícitos para emitir una salida, es decir, No tiene salidas; es decir, no es capaz de modificar su medio. El esquema general de funcionamiento es que, en todo momento, el autómata se encuentra en algún estado o (conjunto de estados) activo o actual, a la espera de recibir una nueva entrada. Cuando esto ocurre, reacciona cambiando su estado actual de acuerdo a transiciones bien definidas y espera una nueva entrada, y así sucesivamente. A cada instante, el AF solo conoce su estado actual, y no lleva un
  27. 27. 27 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS registro de sus estados anteriores. No obstante, el estado actual actúa como síntesis de esa trayectoria, pues el alcanzar un estado depende de los estados anteriores. Un ejemplo adecuado para comprender esta idea es el funcionamiento de un ascensor: Cada piso corresponde a un estado, y en todo momento el ascensor sabe dónde se encuentra. Al apretarse un botón, el ascensor debe dirigirse a un nuevo piso de acuerdo a la entrada recibida. Además de los AF descritos, existen máquinas semejantes que incorporan la capacidad de proporcionar una salida. Éstas últimas reciben el nombre de transductores finitos. Desde una perspectiva de implementación física, un AF puede verse como un dispositivo conformado por los siguientes elementos, algunos de los cuales se ilustran en la figura 2.3:  Una cinta infinita que contiene símbolos pertenecientes a un alfabeto, formando una secuencia de entrada.  Un cabezal Un cabezal capaz de leer un símbolo de la cinta y desplazarse automáticamente hacia la derecha.  Un control finito, compuesto de una cantidad, también finita, de estados y una especificación (transición) que permite determinar el estado siguiente de acuerdo a la lectura realizada en la cinta.  Algunos estados distinguibles dentro del conjunto de estados:  Un estado inicial.  Uno o más estados finales o de aceptación (que indican que la secuencia pertenece a un lenguaje dado). FIGURA 2.3: modelo de un autómata finito. Una vez conocidos los elementos de un AF, estamos en condiciones de describir el proceso de aceptación o reconocimiento de una palabra como parte de un lenguaje regular dado, aunque no se tocará aún el tema de la construcción de estas máquinas. Inicialmente, el cabezal lector debe estar situado en el primer símbolo de la cadena de entrada y el AF debe encontrarse en su estado inicial. A continuación, el cabezal lee el símbolo y se desplaza hacia la derecha en una posición, y el AF modifica su estado de acuerdo a la entrada recibida y a una especificación de transición. La lectura de símbolos y el cambio de estado se repiten sucesivamente hasta que no queden símbolos por leer en la entrada y, en consecuencia, el AF no realice nuevos
  28. 28. 28 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS cambios de estado. Una vez alcanzado este punto, es el observador quien debe determinar si la palabra leída pertenece o no al lenguaje regular dado. Para este fin, basta observar el estado en que se encuentra el autómata. Si es uno de los distinguidos como final o de aceptación, entonces la palabra de la entrada pertenece al lenguaje. En caso contrario, la palabra no se acepta. Definición: Un AF M es una tupla de 5 elementos, 𝑀 = (𝑄, Σ, 𝛿, 𝑞0, 𝐹), donde:  𝑄 ≠ ∅ es un conjunto finito no vacío de estados.  Σ es el alfabeto del lenguaje reconocido y contiene los símbolos que conforman las palabras de la entrada.  𝛿 corresponde a la especificación de transición entre estados en base al estado actual y al símbolo leído desde la entrada.  𝑞0 ∈ 𝑄 es el estado inicial.  F ⊆ Q es el conjunto de estados finales. 2.4.2 TIPOS DE AUTÓMATAS FINITOS Podemos distinguir dos grandes clases de AF, dependiendo de la forma que tenga la definición de transición 𝛿: determinísticos y no determinísticos. 2.4.2.1 Autómata finito determinístico (AFD) Su función de transición 𝛿 es de la forma 𝛿: 𝑄 × Σ → Q. En otras palabras, dado un estado actual y un símbolo de entrada, retorna el nuevo estado al que debe pasar el AFD. Así, la transición 𝛿(𝑞, 𝜎) = 𝑞′ indica que, al estar en el estado 𝑞 y leer el símbolo 𝜎, el AFD pasa al siguiente estado 𝑞′. El cabezal pasa automáticamente al símbolo siguiente. Cabe destacar que de esta definición de 𝛿 se desprenden las siguientes conclusiones:  Al encontrarse el AFD en un estado y leer un símbolo de entrada, hay uno y solo un estado al que puede avanzar.  No puede haber un cambio de estado si no se ha leído un símbolo desde la entrada.  Para todo estado y todo símbolo del alfabeto debe existir una transición definida, por lo que la cantidad de transiciones de un AFD es de |𝑄| × |Σ|. Ejemplo 2.8: Considere el AFD 𝑀 = (𝑄, Σ, 𝛿, 𝑞0, 𝐹), donde:  𝑄 = {𝑞0, 𝑞1, 𝑞2, 𝑞3}  Σ = {𝑎, 𝑏}  𝛿 = {𝛿(𝑞0, 𝑎) = 𝑞1, 𝛿(𝑞0, 𝑏) = 𝑞3, 𝛿(𝑞1, 𝑎) = 𝑞1, 𝛿(𝑞1, 𝑏) = 𝑞2, 𝛿(𝑞2, 𝑎) = 𝑞1, 𝛿(𝑞2, 𝑏) = 𝑞2, 𝛿(𝑞3, 𝑎) = 𝑞3, 𝛿(𝑞3, 𝑏) = 𝑞3}  𝑞0 = 𝑞0  𝐹 = {𝑞2}
  29. 29. 29 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS Otra manera de representar la función de transición es mediante una tabla, como se muestra en la tabla 2.2. TABLA 2.2: Función de transición para el AFD M. 𝑞 𝜎 𝑎 𝑏 𝑞0 𝑞1 𝑞3 𝑞1 𝑞1 𝑞2 𝑞2 𝑞1 𝑞2 𝑞3 𝑞3 𝑞3 Gráficamente, se puede mostrar M como en la figura 2.4. FIGURA 2.4: Representación gráfica de M. Resulta interesante destacar que la figura 2.4 ilustra todos los elementos presentes en la definición formal de M:  El conjunto de estados 𝑄 está denotado por el conjunto de círculos rotulados.  El alfabeto Σ aparece tácitamente reflejado en las transiciones.  Cada transición de 𝛿 tiene un estado de origen, señalado por la base de la flecha; un estado de destino, señalado por la cabeza de la flecha, y un símbolo asociado.  El estado inicial 𝑞0 está señalado con una flecha no rotulada que incide en él.  Cada estado final de 𝐹, en este caso solo 𝑞2, se denota por un doble círculo. Como punto de partida para algunas definiciones debemos considerar que el concepto básico necesario para describir la operación de un AFD es la configuración o descripción instantánea, es decir, el estado en que se encuentra el sistema completo en un instante de tiempo. Así, la configuración del AFD en un instante dado está determinada por dos variables: el estado del AFD en que se encuentra el control finito y la posición del cabezal de lectura, dada por el sufijo aún no leído de la palabra de entrada (incluido el símbolo en que se encuentra el cabezal). Así, una configuración es un par ordenado (𝑞, 𝑤) ∈ 𝑄 × Σ∗ , donde 𝑞 es el estado actual y 𝑤 es el sufijo de la entrada que aún no ha sido leído, incluyendo el símbolo señalado por el cabezal. La configuración inicial siempre está dada por el estado inicial del autómata y el primer símbolo de la entrada.
  30. 30. 30 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS La siguiente noción importante es la de paso de computación, correspondiente a un cambio elemental de configuración. En otras palabras, es una relación binaria entre dos configuraciones sucesivas de un AFD M, denotada por el símbolo ⊢. Estas dos configuraciones están relacionadas mediante una transición, es decir: (𝑞, 𝑤) ⊢ (𝑞′, 𝑤′) ⇔ ∃𝜎 ∈ Σ ∶ 𝑤 = 𝜎𝑤′ ∧ 𝛿(𝑞, 𝜎) = 𝑞′ Cabe destacar que ⊢ 𝑛 denota 𝑛 pasos de computación y que ⊢∗ corresponde a la clausura reflexiva y transitiva de ⊢. En tercer lugar, es necesario definir el concepto de aceptación de una palabra 𝑤 ∈ Σ∗ . Se dice que es aceptada por un AFD M si y solo si, comenzando desde la configuración inicial, al terminar de leer 𝑤 el AFD se encuentra en un estado final, es decir: 𝑤 ∈ Σ∗ es aceptada por M ⇔ (𝑞0, 𝑤) ⊢∗ (𝑞, 𝜀) ∧ 𝑞 ∈ 𝐹 Ejemplo 2.9: Consideremos el AFD del ejemplo 2.8 y la entrada 𝑤 = abbaab. La configuración inicial de M está dada por (𝑞0, abbaab). Tras el primer paso de computación, se tiene: (𝑞0, abbaab) ⊢ (𝑞1, bbaab) La secuencia de pasos de computación siguientes corresponde a: (𝑞1, bbaab) ⊢ (𝑞2, baab) ⊢ (𝑞2, aab) ⊢ (𝑞1, ab) ⊢ (𝑞1, b) ⊢ (𝑞2, 𝜀) Así, (𝑞0, abbaab) ⊢∗ (𝑞2, 𝜀) y además 𝑞2 ∈ 𝐹, por lo que M acepta la palabra 𝑤. Ejemplo 2.10: Consideremos ahora el AFD del ejemplo 2.8 y la entrada 𝑤 = bab. La configuración inicial de M está dada por (𝑞0, bab). La secuencia de pasos de computación para determinar la aceptación de 𝑤 es: (𝑞0, bab) ⊢ (𝑞3, ab) ⊢ (𝑞3, b) ⊢ (𝑞3, 𝜀) Así, (𝑞0, bab) ⊢∗ (𝑞3, 𝜀) y además 𝑞3 ∉ 𝐹, por lo que M no acepta la palabra 𝑤. La noción de aceptación de una palabra conduce a la noción de lenguaje aceptado por un AFD M, denotado por 𝐿(𝑀), que corresponde al conjunto de todas las palabras aceptadas por M, es decir 𝐿(𝑀) = {𝑤 ∈ Σ∗ : 𝑤 es aceptada por M}. Ejemplo 2.11: Si estudiamos el AFD del ejemplo 2.8, podemos notar que 𝐿(𝑀) corresponde al lenguaje representado por la ER del ejemplo 2.5: 𝑟 = 𝑎(𝑎∗ + 𝑏∗)𝑏.
  31. 31. 31 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS Una vez conocido 𝐿(𝑀), es posible definir la equivalencia entre dos AF: se dice que dos AF 𝑀1 y 𝑀2 son equivalentes si aceptan el mismo lenguaje, es decir: 𝑀1 ≡ 𝑀2 ⇔ 𝐿(𝑀1) = 𝐿(𝑀2) Otra definición importante es la de alcanzabilidad de un estado, para la cual se requiere previamente la noción de transición extendida. Una función de transición extendida 𝛿′ entre dos estados distantes (no vecinos) 𝑞 y 𝑞′ y que involucra la lectura de una secuencia de símbolos puede ser definida como una función 𝛿′ : 𝑄 × Σ∗ → Q tal que: 𝛿′(𝑞, 𝑤) = 𝑞′ ⇔ ∃𝑤 ∈ Σ∗ ∶ (𝑞, 𝑤) ⊢∗ (𝑞′, 𝜀) Así, se tiene que un estado 𝑞′ es alcanzable desde otro estado 𝑞 si existe una palabra 𝑤 ∈ Σ∗ tal que la secuencia de pasos de computación comenzando desde 𝑞 y el primer símbolo de 𝑤 culmina en 𝑞′ cuando no quedan símbolos por leer. Cabe destacar que 𝛿′ tiene las siguientes propiedades:  𝛿′(𝑞, 𝜀) = 𝑞  𝛿′(𝑞, 𝜎) = 𝛿(𝑞, 𝜎)  𝛿′(𝑞, 𝜎𝑤) = 𝛿′(𝛿(𝑞, 𝜎), 𝑤)  𝛿′(𝑞, 𝑣𝑤) = 𝛿′(𝛿′(𝑞, 𝑣), 𝑤) 2.4.2.2 Autómata finito no determinístico (AFND) Habíamos estudiado que el estado al que va un AFD al leer un símbolo de la entrada está completamente determinado, puesto que cada estado cuenta con una y solo una transición por cada símbolo del alfabeto. En el caso del AFND, en cambio, el cambio de estado solo está parcialmente especificado, puesto que puede ocurrir lo siguiente:  Las transiciones entre estados están dadas por palabras más que por símbolos individuales, pudiendo incluso haber transiciones con 𝜀, denominadas transiciones vacías, en que el AF puede cambiar de estado sin necesidad de haber leído algo desde la entrada.  Puede haber más de una transición definida desde un estado determinado con alguna lectura dada (transiciones múltiples). En consecuencia, el AFND debe ir a alguno cualquiera de los estados de destino, de manera no determinada. De lo anterior podemos concluir que, en realidad, el AFD estudiado no es más que un caso particular del AFND. En estos últimos, la especificación de transición 𝛿 es una relación 𝛿 ⊆ 𝑄 × Σ∗ × 𝑄, conformada por un conjunto de tríos (𝑞, 𝑤, 𝑞′) donde cada trío indica que, estando en el estado 𝑞, al leer en la entrada una secuencia de símbolos 𝑤, el AFND puede quedar en el estado 𝑞′. No obstante, como pueden existir dos o más transiciones que compartan los dos primeros componentes, por ejemplo (𝑞, 𝑤, 𝑞′), (𝑞, 𝑤, 𝑞′′), esto puede reformularse de modo tal que el tercer elemento del trío sea un conjunto de estados: (𝑞, 𝑤, {𝑞′ , 𝑞′′}). En el caso de los AFND, las nociones de configuración, paso de computación, aceptación de palabra, aceptación de lenguaje y equivalencia son semejantes al caso de los AFD. No obstante, la existencia de transiciones vacías da origen a una nueva definición: la clausura- 𝜀. Corresponde al conjunto de estados alcanzables desde el estado 𝑞 mediante transiciones vacías, es decir:
  32. 32. 32 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS 𝐶 − 𝜀(𝑞) = 𝑠 ∈ 𝑄: (𝑞, 𝜀) ⊢∗ (𝑠, 𝜀) Se puede extender la noción de clausura- 𝜀 para un conjunto de estados 𝑇, que corresponde simplemente a la unión de las clausuras- 𝜀 de cada estado en 𝑇: 𝐶 − 𝜀(𝑇) = ⋃ 𝐶 − 𝜀(𝑞) ∀𝑞 ∈ 𝑇 Ejemplo 2.12: Considere el AFND 𝑀 = (𝑄, Σ, 𝛿, 𝑞0, 𝐹), donde:  𝑄 = {𝑞0, 𝑞1, 𝑞2, 𝑞3, 𝑞4}  Σ = {𝑎, 𝑏}  𝛿 = {(𝑞0, 𝑎𝑏, 𝑞1), (𝑞0, 𝑎𝑏, 𝑞2), (𝑞0, 𝑏𝑎, 𝑞3), (𝑞1, 𝑏𝑎, 𝑞3), (𝑞1, 𝜀, 𝑞3), (𝑞1, 𝜀, 𝑞3), (𝑞2, 𝜀, 𝑞0), (𝑞2, 𝑎, 𝑞3), (𝑞3, 𝑎𝑏, 𝑞2), (𝑞3, 𝑏𝑎, 𝑞3), (𝑞3, 𝑏𝑎, 𝑞4), (𝑞4, 𝑎, 𝑞1), (𝑞4, 𝜀, 𝑞3)}  𝑞0 = 𝑞0  𝐹 = {𝑞0, 𝑞3} Otra manera de representar la función de transición es mediante una tabla, como se muestra en la tabla 2.3. TABLA 2.3: Función de transición para el AFND M. 𝑞 𝑤 𝑎𝑏 𝑏𝑎 𝑎 𝜀 𝑞0 {𝑞1, 𝑞2} {𝑞3} 𝜙 𝜙 𝑞1 𝜙 {𝑞3} 𝜙 {𝑞4} 𝑞2 𝜙 𝜙 {𝑞3} {𝑞0} 𝑞3 {𝑞2} {𝑞3, 𝑞4} 𝜙 𝜙 𝑞4 𝜙 𝜙 {𝑞1} {𝑞3} Gráficamente, se puede mostrar M como en la figura 2.5.
  33. 33. 33 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS FIGURA 2.5: Representación gráfica de M. Además, las clausuras- 𝜀 para los diferentes estados son:  𝐶 − 𝜀(𝑞0) = {𝑞0}  𝐶 − 𝜀(𝑞1) = {𝑞1, 𝑞3, 𝑞4}  𝐶 − 𝜀(𝑞2) = {𝑞0, 𝑞2}  𝐶 − 𝜀(𝑞3) = {𝑞3}  𝐶 − 𝜀(𝑞4) = {𝑞3, 𝑞4} 2.4.3 EQUIVALENCIA ENTRE AFD Y AFND La incorporación del no determinismo, a pesar de facilitar la capacidad de abstracción al diseñar un AF, no aumenta el poder de aceptación de estos reconocedores, es decir, no incrementa el conjunto de lenguajes que pueden ser reconocidos usando máquinas de estados finitos. Así pues, es posible demostrar que para cada AFND existe un AFD equivalente. Para construir un AFD equivalente a un AFND dado, se deben seguir dos grandes pasos: 1. Eliminar aquellas transiciones que avanzan con secuencias cuya longitud es mayor que 1. 2. Eliminar transiciones vacías y transiciones múltiples. Para eliminar las transiciones con secuencias de longitud mayor a 1, se incorporan nuevos estados al AFND a fin de descomponer las transiciones para que solo tengan un símbolo. Sea 𝑀 = (𝑄, Σ, 𝛿, 𝑞0, 𝐹) un AFND tal que sus transiciones son de la forma (𝑞, 𝑢, 𝑞′), donde 𝑞, 𝑞′ ∈ 𝑄 y u ∈ Σ∗ . Entonces, existe un AFND 𝑀′ = (𝑄′, Σ, 𝛿′, 𝑞0, 𝐹) tal que:  𝛿′ ⊆ 𝑄′ × ({𝜀} ∪ Σ) × 𝑄′.  𝑄′ = 𝑄 ∪ 𝑃𝑖, con 𝑃𝑖 = {𝑝1, 𝑝2, … , 𝑝 𝑘−1}∀(𝑞, 𝑢, 𝑞′) ∈ 𝛿 tal que |𝑢| = 𝑘 > 1.  Note que 𝑀 y 𝑀′ comparten Σ, 𝑞0 y 𝐹. La nueva relación de transición 𝛿′ se obtiene como 𝛿′ = {(𝑞, 𝑢, 𝑞′) ∈ 𝛿: |𝑢| ≤ 1} ∪ {(𝑞, 𝜎1, 𝑝1), (𝑝1, 𝜎2, 𝑝2), … , (𝑝 𝑘−1, 𝜎𝑘, 𝑞′)} para cada (𝑞, 𝑢, 𝑞′) ∈ 𝛿 tal que 𝑢 = 𝜎1 𝜎2 … 𝜎𝑘 y |𝑢| = 𝑘 > 1, como se ilustra en la figura 2.6.
  34. 34. 34 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS El segundo paso, entonces, consiste en eliminar las transiciones vacías y las transiciones múltiples. Para este fin, creamos un conjunto de estados para el AFD 𝑀′′ = (𝑄′, Σ, 𝛿′′, 𝑞0′′, 𝐹′′) tal que cada uno de sus estados corresponde a un conjunto de estados del AFND 𝑀′ = (𝑄′, Σ, 𝛿′, 𝑞0, 𝐹), que sintetiza todos los caminos posibles para reconocer una determinada secuencia. Se puede garantizar que es posible realizar esta tarea, ya que para un conjunto de estados de tamaño 𝑛 se tienen 2 𝑛 subconjuntos. El primer estado del AFD 𝑀′′ que debemos determinar es el inicial, 𝑞0′′ dado por la clausura-𝜀 de 𝑞0, el estado inicial de 𝑀′. Los nuevos estados de 𝑀′′ se determinan junto con las transiciones. Para cada símbolo de Σ se determina el conjunto de estados de 𝑀′ que es posible alcanzar desde 𝑞0′′ y se les incorporan sus respectivas clausuras-𝜀. Cada nuevo conjunto forma un nuevo estado del AFD. Se repite este proceso hasta que no queden estados sin transiciones definidas. Los estados finales de 𝑀′′ serán todos aquellos conjuntos de estados que contengan algún estado final de 𝑀′. FIGURA 2.6: Eliminación de transiciones con secuencias de longitud mayor a 1 para un AFND M. Ejemplo 2.13:
  35. 35. 35 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS Consideremos el AFND 𝑀′ de la figura 2.6 y determinemos su AFD equivalente 𝑀′′. El estado inicial de 𝑀′′ está dado por la clausura-𝜀 del estado inicial de 𝑀′: 𝐶 − 𝜀(𝐴) = {𝐴} = 𝑞0 Ahora debemos determinar las transiciones de 𝑞0 y sus respectivas clausuras: 𝛿(𝑞0, 0) = {𝐵, 𝐺} 𝐶 − 𝜀({𝐵, 𝐺}) = {𝐴, 𝐵, 𝐷, 𝐸, 𝐺} = 𝑞1 𝛿(𝑞0, 1) = 𝜙 𝐶 − 𝜀(𝜙) = 𝜙 = 𝑞2 Repetimos el proceso anterior para los nuevos estados: 𝛿(𝑞1, 0) = {𝐵, 𝐶, 𝐺} 𝐶 − 𝜀({𝐵, 𝐶, 𝐺}) = {𝐴, 𝐵, 𝐶, 𝐷, 𝐸, 𝐺} = 𝑞3 𝛿(𝑞1, 1) = {𝐶, 𝐻} 𝐶 − 𝜀({𝐶, 𝐻}) = {𝐶, 𝐻} = 𝑞4 𝛿(𝑞2, 0) = 𝜙 𝐶 − 𝜀(𝜙) = 𝑞2 𝛿(𝑞2, 1) = 𝜙 𝐶 − 𝜀(𝜙) = 𝑞2 𝛿(𝑞3, 0) = {𝐵, 𝐶, 𝐺} 𝐶 − 𝜀({𝐵, 𝐶, 𝐺}) = {𝐴, 𝐵, 𝐶, 𝐷, 𝐸, 𝐺} = 𝑞3 𝛿(𝑞3, 1) = {𝐶, 𝐹, 𝐻} 𝐶 − 𝜀({𝐶, 𝐹, 𝐻}) = {𝐶, 𝐹, 𝐻} = 𝑞5 𝛿(𝑞4, 0) = {𝐷} 𝐶 − 𝜀({𝐷}) = {𝐷, 𝐸} = 𝑞6 𝛿(𝑞4, 1) = {𝐹} 𝐶 − 𝜀({𝐹}) = {𝐹} = 𝑞7 𝛿(𝑞5, 0) = {𝐷} 𝐶 − 𝜀({𝐷}) = 𝑞6 𝛿(𝑞5, 1) = {𝐸, 𝐹} 𝐶 − 𝜀({𝐸, 𝐹}) = {𝐸, 𝐹} = 𝑞8 𝛿(𝑞6, 0) = 𝜙 𝐶 − 𝜀(𝜙) = 𝑞2 𝛿(𝑞6, 1) = {𝐶} 𝐶 − 𝜀({𝐶}) = {𝐶} = 𝑞9 𝛿(𝑞7, 0) = 𝜙 𝐶 − 𝜀(𝜙) = 𝑞2 𝛿(𝑞7, 1) = {𝐸} 𝐶 − 𝜀({𝐸}) = {𝐸} = 𝑞10 𝛿(𝑞8, 0) = {𝐶, 𝐸} 𝐶 − 𝜀({𝐶, 𝐸}) = {𝐶, 𝐸} = 𝑞11 𝛿(𝑞8, 1) = 𝜙 𝐶 − 𝜀(𝜙) = 𝑞2 𝛿(𝑞9, 0) = 𝜙 𝐶 − 𝜀(𝜙) = 𝑞2 𝛿(𝑞9, 1) = {𝐹} 𝐶 − 𝜀({𝐹}) = 𝑞7 𝛿(𝑞10, 0) = 𝜙 𝐶 − 𝜀(𝜙) = 𝑞2 𝛿(𝑞10, 1) = {𝐶} 𝐶 − 𝜀({𝐶}) = 𝑞9 𝛿(𝑞11, 0) = 𝜙 𝐶 − 𝜀(𝜙) = 𝑞2 𝛿(𝑞11, 1) = {𝐶, 𝐹} 𝐶 − 𝜀({𝐶, 𝐹}) = {𝐶, 𝐹} = 𝑞12 𝛿(𝑞12, 0) = 𝜙 𝐶 − 𝜀(𝜙) = 𝑞2 𝛿(𝑞12, 1) = {𝐸, 𝐹} 𝐶 − 𝜀({𝐸, 𝐹}) = 𝑞8
  36. 36. 36 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS Note que 𝑞2 es el conjunto vacío, por lo que al haber leído una secuencia no válida se convierte en un estado trampa. El conjunto de estados finales del AFD es 𝐹′′ = {𝑞1, 𝑞3, 𝑞4, 𝑞5, 𝑞6, 𝑞8, 𝑞9, 𝑞10, 𝑞11, 𝑞12} 2.4.4 MINIMIZACIÓN DE AFD En muchas ocasiones, al construir un AFD obtenemos una cantidad de estados superior a la necesaria, por lo que resulta útil determinar el AFD equivalente más pequeño. Para este fin, debemos determinar si hay estados que tengan igual significado. Uno de los métodos existentes para minimizar un AFD es el de las particiones, en que se van creando grupos cada vez más pequeños de estados potencialmente equivalentes. Para explicar este método, tomaremos como ejemplo el AFD obtenido en el ejemplo 2.13. Para la partición, sabemos que un estado final no puede ser equivalente a otro no final, por lo que creamos un grupo para los estados finales y otro para los no finales: 𝑃0 = (𝑞0, 𝑞2, 𝑞7)(𝑞1, 𝑞3, 𝑞4, 𝑞5, 𝑞6, 𝑞8, 𝑞9, 𝑞10, 𝑞11, 𝑞12) Ahora asignamos un nombre a cada grupo y estudiamos el comportamiento de cada estado para cada uno de los símbolos del alfabeto. Llamemos 1 al grupo que contiene a los estados no finales y 2 al grupo de estados finales. 𝑞0 va a 𝑞1 al leer un 0, y 𝑞1 está en el grupo b. Además, 𝑞0 va a 𝑞2 al leer un 0, y 𝑞2 está en el grupo a. 𝑃0 = ( 𝑏𝑎 𝑞0 , 𝑎𝑎 𝑞2 , 𝑎𝑏 𝑞7 ) 𝑎 ( 𝑏𝑏 𝑞1 , 𝑏𝑏 𝑞3 , 𝑏𝑎 𝑞4 , 𝑏𝑏 𝑞5 , 𝑎𝑏 𝑞6 , 𝑏𝑎 𝑞8 , 𝑎𝑎 𝑞9 , 𝑎𝑏 𝑞10 , 𝑎𝑏 𝑞11 , 𝑎𝑏 𝑞12 ) 𝑏 Para la siguiente partición, podemos descomponer los grupos de acuerdo a su comportamiento. Son potencialmente equivalentes aquellos estados de un mismo grupo que vayan a las mismas particiones con los mismos símbolos. Es importante destacar que lo que ya estaba separado no puede juntarse nuevamente. Así, tenemos que todos los estados se comportan de manera diferente en el grupo a, mientras que hay algunos del grupo b que siguen siendo potencialmente equivalentes. Ahora, tras la nueva partición, repetimos el proceso para ver si hay más grupos que se puedan separar: 𝑃1 = (𝑞0) 𝑎 (𝑞2) 𝑏 (𝑞7) 𝑐 ( 𝑑𝑒 𝑞1 , 𝑑𝑑 𝑞3 , 𝑓𝑒 𝑞5 ) 𝑑 ( 𝑓𝑐 𝑞4 , 𝑓𝑏 𝑞8 ) 𝑒 ( 𝑏𝑔 𝑞6 , 𝑏𝑔 𝑞10 , 𝑏𝑓 𝑞11 , 𝑏𝑒 𝑞12 ) 𝑓 (𝑞9) 𝑔 De acuerdo al resultado anterior, la nueva partición queda: 𝑃2 = (𝑞0) 𝑎 (𝑞2) 𝑏 (𝑞7) 𝑐 (𝑞1) 𝑑 (𝑞3) 𝑒 (𝑞5) 𝑓 (𝑞4) 𝑔 (𝑞8) ℎ ( 𝑏𝑙 𝑞6 , 𝑏𝑙 𝑞10 ) 𝑖 (𝑞11) 𝑗 (𝑞12) 𝑘 (𝑞9) 𝑙
  37. 37. 37 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS Tras el análisis de comportamiento de los grupos, se tiene que 𝑃3 = 𝑃2, por lo que 𝑞6 ≡ 𝑞10. En consecuencia, podemos tener el AFD mínimo quitando 𝑞10 y redirigiendo sus transiciones entrantes a 𝑞6. 2.5 OPERACIONES CON AF Una vez estudiada la equivalencia entre AFD y AFND, es posible señalar que la clase de los lenguajes regulares (aceptados por AF) es cerrada con respecto a diversas operaciones. En otras palabras, dados los AF 𝑀1 = (𝑄1, Σ, 𝛿1, 𝑞01, 𝐹1) y 𝑀2 = (𝑄2, Σ, 𝛿2, 𝑞02, 𝐹2 ), reconocedores de los lenguajes 𝐿1 y 𝐿2 respectivamente, basta con encontrar, mediante algún algoritmo, un AF que reconozca el lenguaje resultante de una operación. 2.5.1 UNIÓN Para encontrar un AF reconocedor de 𝐿 = 𝐿1 ∪ 𝐿2 basta con crear un nuevo AF 𝑀 = (𝑄, Σ, 𝛿, 𝑞0, 𝐹) con:  𝑄 = 𝑄1 ∪ 𝑄2 ∪ {𝑞0}, donde 𝑞0 es un nuevo estado.  𝛿 = 𝛿1 ∪ 𝛿2 ∪ {(𝑞0, 𝜀, 𝑞01), (𝑞0, 𝜀, 𝑞02)}.  𝑞0 = 𝑞0.  𝐹 = 𝐹1 ∪ 𝐹2. Ejemplo 2.14: 2.5.2 CONCATENACIÓN Para encontrar un AF reconocedor de 𝐿 = 𝐿1 𝐿2 basta con crear un nuevo AF 𝑀 = (𝑄, Σ, 𝛿, 𝑞0, 𝐹) con:
  38. 38. 38 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS  𝑄 = 𝑄1 ∪ 𝑄2.  𝛿 = 𝛿1 ∪ 𝛿2 ∪ 𝐹1 × {𝜀} × {𝑞02}.  𝑞0 = 𝑞01.  𝐹 = 𝐹2. Ejemplo 2.15: 2.5.3 ESTRELLA DE KLEENE Para encontrar un AF reconocedor de 𝐿 = 𝐿1 ∗ basta con crear un nuevo AF 𝑀 = (𝑄, Σ, 𝛿, 𝑞0, 𝐹) con:  𝑄 = 𝑄1 ∪ {𝑞0}, donde 𝑞0 es un nuevo estado.  𝛿 = 𝛿1 ∪ {(𝑞0, 𝜀 , 𝑞01)} ∪ 𝐹1 × {𝜀} × {𝑞01}.  𝑞0 = 𝑞0.  𝐹 = 𝐹1 ∪ {𝑞0}.
  39. 39. 39 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS Ejemplo 2.16: 2.5.4 COMPLEMENTACIÓN (SOLO PARA AFD) Para encontrar un AF reconocedor de 𝐿 = 𝐿1 𝐶 , donde se cuenta con un AFD reconocedor de 𝐿1, basta con crear un nuevo AF 𝑀 = (𝑄1, Σ, 𝛿1, 𝑞01, 𝐹) con 𝐹 = 𝑄1 − 𝐹1. Ejemplo 2.17: 2.5.5 INTERSECCIÓN (SOLO PARA AFD) Para encontrar un AF reconocedor de 𝐿 = 𝐿1 ∩ 𝐿2, donde se cuenta con AFD reconocedores de 𝐿1 y 𝐿2, basta con crear un nuevo AF 𝑀 = (𝑄, Σ, 𝛿, 𝑞0, 𝐹) dado por 𝑀 = (𝑀1 𝐶 ∪ 𝑀2 𝐶 ) 𝐶 . Ejemplo 2.18: Consideremos los AFD 𝑀1 y 𝑀2 que se muestran a continuación. En primer lugar, debemos determinar sus complementos:
  40. 40. 40 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS A continuación realizamos la unión de los complementos, y luego determinamos el AFD mínimo equivalente: Paso a AFD: 𝐶 − 𝜀(𝐻) = {𝐻, 𝐴, 𝐷} = 𝑞0 𝛿(𝑞0, 0) = {𝐵, 𝐸} 𝐶 − 𝜀({𝐵, 𝐸}) = {𝐵, 𝐸} = 𝑞1 𝛿(𝑞0, 1) = {𝐶, 𝐹} 𝐶 − 𝜀({𝐶, 𝐹}) = {𝐶, 𝐹} = 𝑞2 𝛿(𝑞1, 0) = {𝐴, 𝐸} 𝐶 − 𝜀({𝐴, 𝐸}) = {𝐴, 𝐸} = 𝑞3 𝛿(𝑞1, 1) = {𝐵, 𝐺} 𝐶 − 𝜀({𝐵, 𝐺}) = {𝐵, 𝐺} = 𝑞4 𝛿(𝑞2, 0) = {𝐶, 𝐸} 𝐶 − 𝜀({𝐶, 𝐸}) = {𝐶, 𝐸} = 𝑞5 𝛿(𝑞2, 1) = {𝐵, 𝐹} 𝐶 − 𝜀({𝐵, 𝐹}) = {𝐵, 𝐹} = 𝑞6 𝛿(𝑞3, 0) = {𝐵, 𝐸} 𝐶 − 𝜀({𝐵, 𝐸}) = 𝑞1 𝛿(𝑞3, 1) = {𝐶, 𝐺} 𝐶 − 𝜀({𝐶, 𝐺}) = {𝐶, 𝐺} = 𝑞7
  41. 41. 41 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS 𝛿(𝑞4, 0) = {𝐴, 𝐺} 𝐶 − 𝜀({𝐴, 𝐺}) = {𝐴, 𝐺} = 𝑞8 𝛿(𝑞4, 1) = {𝐵, 𝐺} 𝐶 − 𝜀({𝐵, 𝐺}) = 𝑞4 𝛿(𝑞5, 0) = {𝐶, 𝐸} 𝐶 − 𝜀({𝐶, 𝐸}) = 𝑞5 𝛿(𝑞5, 1) = {𝐵, 𝐺} 𝐶 − 𝜀({𝐵, 𝐺}) = 𝑞4 𝛿(𝑞6, 0) = {𝐴, 𝐸} 𝐶 − 𝜀({𝐴, 𝐸}) = 𝑞3 𝛿(𝑞6, 1) = {𝐵, 𝐹} 𝐶 − 𝜀({𝐵, 𝐹}) = 𝑞6 𝛿(𝑞7, 0) = {𝐶, 𝐺} 𝐶 − 𝜀({𝐶, 𝐺}) = 𝑞7 𝛿(𝑞7, 1) = {𝐵, 𝐺} 𝐶 − 𝜀({𝐵, 𝐺}) = 𝑞4 𝛿(𝑞8, 0) = {𝐵, 𝐺} 𝐶 − 𝜀({𝐵, 𝐺}) = 𝑞4 𝛿(𝑞8, 1) = {𝐶, 𝐺} 𝐶 − 𝜀({𝐶, 𝐺}) = 𝑞7 𝐹 = {𝑞0, 𝑞2, 𝑞3, 𝑞4, 𝑞5, 𝑞6, 𝑞7, 𝑞8} Minimizamos el AFD: 𝑃0 = ( 𝑏𝑎 𝑞0 , 𝑎𝑎 𝑞2 , 𝑏𝑎 𝑞3 , 𝑎𝑎 𝑞4 , 𝑎𝑎 𝑞5 , 𝑎𝑎 𝑞6 , 𝑎𝑎 𝑞7 , 𝑎𝑎 𝑞8 ) 𝑎 (𝑞1) 𝑏 𝑃1 = ( 𝑏𝑐 𝑞0 , 𝑏𝑐 𝑞3 ) 𝑎 (𝑞1) 𝑏 ( 𝑐𝑐 𝑞2 , 𝑐𝑐 𝑞4 , 𝑐𝑐 𝑞5 , 𝑎𝑐 𝑞6 , 𝑐𝑐 𝑞7 , 𝑐𝑐 𝑞8 ) 𝑐 𝑃2 = ( 𝑏𝑐 𝑞0 , 𝑏𝑐 𝑞3 ) 𝑎 (𝑞1) 𝑏 ( 𝑐𝑑 𝑞2 , 𝑐𝑐 𝑞4 , 𝑐𝑐 𝑞5 , 𝑐𝑐 𝑞7 , 𝑐𝑐 𝑞8 ) 𝑐 (𝑞6) 𝑑 𝑃3 = ( 𝑏𝑐 𝑞0 , 𝑏𝑑 𝑞3 ) 𝑎 (𝑞1) 𝑏 (𝑞2) 𝑐 ( 𝑑𝑑 𝑞4 , 𝑑𝑑 𝑞5 , 𝑑𝑑 𝑞7 , 𝑑𝑑 𝑞8 ) 𝑑 (𝑞6) 𝑒 𝑃4 = (𝑞0) 𝑎 (𝑞1) 𝑏 (𝑞2) 𝑐 (𝑞3) 𝑑 ( 𝑒𝑒 𝑞4 , 𝑒𝑒 𝑞5 , 𝑒𝑒 𝑞7 , 𝑒𝑒 𝑞8 ) 𝑒 (𝑞6) 𝑓 𝑃5 = 𝑃4 ∴ 𝑞4 ≡ 𝑞5 ≡ 𝑞7 ≡ 𝑞8 Así, el AFD mínimo para 𝑀1 𝐶 ∪ 𝑀2 𝐶 es:
  42. 42. 42 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS Finalmente, complementamos el resultado anterior: Problema propuesto: Busque algoritmos para encontrar el AF correspondiente a las siguientes operaciones:  𝐿1 − 𝐿2  𝐿1 △ 𝐿2  𝐿 𝑅  𝐿 ∪ {𝜀}  𝐿 − {𝜀} 2.6 EQUIVALENCIAS Hasta ahora hemos visto que las gramáticas regulares permiten generar lenguajes regulares, las expresiones regulares los representan y los autómatas finitos los reconocen. Resulta sencillo, en consecuencia, pensar que existen métodos para pasar de alguno de estos elementos a otro. 2.6.1 EQUIVALENCIA ENTRE ER Y AF
  43. 43. 43 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS En esta sección se muestra en primer lugar el método de Thompson para construir un AFND a partir de una ER dada. A continuación se describen los métodos de ecuaciones lineales (Arden) y recursivo para determinar la ER del lenguaje reconocido por un AF. 2.6.1.1 Método de Thompson Sirve para construir un AFND reconocedor para alguna expresión regular dada. Opera de manera constructiva, creando AFNDs para subexpresiones sencillas y combinándolos luego de acuerdo a ciertas reglas. Una ventaja de este método es que resulta sencillo de implementar computacionalmente, y facilita las operaciones de unión, concatenación y clausura al garantizar que cada AFND tiene un único estado final. De más está decir que este método se complementa con otros ya estudiados a fin de obtener el AFD mínimo reconocedor. Sea 𝜎 ∈ Σ y sean 𝑀𝐴 y 𝑀 𝐵 AFNDs reconocedores de los lenguajes representados por las expresiones regulares 𝑟𝐴 y 𝑟𝐵, respectivamente. Ambos AF han sido construidos mediante el método de Thompson, por lo que solo tienen un estado final. Los esquemas básicos que usa este método: 𝑟 = 𝜀 El AFND reconocedor para la palabra vacía se construye creando dos estados, uno de ellos inicial que no es de aceptación y el otro final. Para llegar desde el estado inicial al final, se crea una transición vacía. 𝑟 = 𝜎 Análogo al anterior, cuando la expresión regular consiste en un solo símbolo, basta con que la transición del estado inicial al estado final tenga asociado el mismo símbolo. 𝑟 = 𝑟𝐴 + 𝑟𝐵 El mecanismo para construir un autómata reconocedor correspondiente a la unión de dos subexpresiones regulares es bastante sencillo. Basta con tomar los dos autómatas reconocedores, crear un nuevo estado inicial que vaya con transiciones vacías a los que fueran los estados iniciales y crear un nuevo estado final alcanzable con transiciones vacías desde el que fuera el estado final.
  44. 44. 44 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS 𝑟 = 𝑟𝐴 𝑟𝐵 Para la concatenación, basta con hacer que el estado final del primer autómata se fusione con el estado inicial del segundo en un estado no final. 𝑟 = 𝑟𝐴 ∗ Para la clausura reflexiva y transitiva, el mecanismo consiste en incorporar un nuevo estado inicial y un nuevo estado final, a fin de poder reconocer la secuencia vacía. Para dar la opción de reconocer el lenguaje representado por la subexpresión una única vez, basta con pasar desde el nuevo estado inicial al estado inicial previo con una transición vacía, y del estado final previo al nuevo con otra. Por último, para establecer la repetición de la clausura, basta con pasar con una transición vacía desde el estado final previo al estado inicial previo. Ejemplo 2.19: Construir un AF reconocedor para el lenguaje representado por la siguiente expresión regular: 𝑟 = 011(00 + 11)∗ + 01(𝜀 + 0). 𝑟1 = 𝜀
  45. 45. 45 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS 𝑟2 = 0 𝑟3 = 1 𝑟4 = 𝑟2 𝑟3 𝑟5 = 𝑟4 𝑟3 𝑟6 = 𝑟2 𝑟2 𝑟7 = 𝑟3 𝑟3 𝑟8 = 𝑟6 + 𝑟7
  46. 46. 46 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS 𝑟9 = 𝑟8 ∗ 𝑟10 = 𝑟5 𝑟9 𝑟11 = 𝑟1 + 𝑟2 𝑟12 = 𝑟4 𝑟11
  47. 47. 47 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS 𝑟 = 𝑟13 = 𝑟10 + 𝑟12 Problema propuesto: Determine el AFD mínimo equivalente para el AFND obtenido en el ejemplo 2.14. 2.6.1.2 Método de ecuaciones lineales (método de Arden) En este método se plantea una ecuación para cada estado del AF, de la forma: 𝑋𝑖 = ∑ 𝑋𝑗 𝜎𝑗 + 𝑒𝑖 𝑛 𝑗=1 Donde:  𝑋𝑗 corresponde al estado 𝑗.  𝜎𝑗 es tal que 𝛿(𝑞𝑗, 𝜎𝑗) = 𝑞𝑖.  𝑒𝑖 = { 𝜀 𝑞𝑖 𝑒𝑠𝑡𝑎𝑑𝑜 𝑖𝑛𝑖𝑐𝑖𝑎𝑙 𝜙 𝑒𝑛 𝑜𝑡𝑟𝑜 𝑐𝑎𝑠𝑜 La ER está dada por la unión de las soluciones obtenidas para todos los estados finales.
  48. 48. 48 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS Además, se debe tener en consideración la regla de Arden: 𝑋 = 𝑋𝛼 + 𝛽 ⇒ 𝑋 = 𝛽𝛼∗ Ejemplo 2.20: Plantear y resolver el sistema de ecuaciones lineales asociado al AF de la figura 2.7. Determinar la ER que representa el lenguaje aceptado. FIGURA 2.7: Un AF para determinar su ER correspondiente. 𝑋1 = 𝑋1 𝜙 + 𝑋2 𝜙 + 𝑋30 + 𝜀 (1) 𝑋2 = 𝑋11 + 𝑋21 + 𝑋3 + 𝜙 (2) 𝑋3 = 𝑋1 𝜙 + 𝑋2(0 + 1) + 𝑋3 𝜙 + 𝜙 (3) ⌋ 𝑋1 = 𝑋30 + 𝜀 (1) 𝑋2 = 𝑋11 + 𝑋21 (2) 𝑋3 = 𝑋2(0 + 1) (3) ⌋ Arden en (2): 𝑋2 = 𝑋111∗ (4) (4) en (3): 𝑋3 = 𝑋111∗(0 + 1) (5) (5) en (1): 𝑋1 = 𝑋111∗(0 + 1)0 + 𝜀 (6) Arden en (6): 𝑋1 = [11∗(0 + 1)0]∗ (7) (7) en (4): 𝑋2 = [11∗(0 + 1)0]∗ 11∗ (8) (7) en (5): 𝑋3 = [11∗(0 + 1)0]∗ 11∗(0 + 1) (9) Así, la solución del sistema de ecuaciones lineales es: 𝑋1 = [11∗(0 + 1)0]∗ 𝑋2 = [11∗(0 + 1)0]∗ 11∗
  49. 49. 49 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS 𝑋3 = [11∗(0 + 1)0]∗ 11∗(0 + 1) La ER buscada corresponde a la unión de lo que aceptan los estados 𝑞2 y 𝑞3: 𝐸𝑅 = 𝑋2 + 𝑋3 = [11∗(0 + 1)0]∗ 11∗ + [11∗(0 + 1)0]∗ 11∗(0 + 1) = = [11∗(0 + 1)0]∗ 11∗(𝜀 + 0 + 1) 2.6.1.3 Método recursivo Este método toma un AF y determina la expresión regular del lenguaje reconocido mediante una descomposición sucesiva en subautómatas. El planteamiento general para determinar la ER asociada a un estado del AF es: 𝑅𝑖𝑗 𝑘 = 𝑅𝑖𝑗 𝑘−1 + 𝑅𝑖𝑘 𝑘−1 (𝑅 𝑘𝑘 𝑘−1 ) ∗ 𝑅 𝑘𝑗 𝑘−1 Además, la condición de término está dada por: 𝑅𝑖𝑗 0 = { 𝜎 ∶ 𝛿(𝑞𝑖, 𝜎) = 𝑞𝑗 𝑖 ≠ 𝑗 𝜀 + 𝜎 ∶ 𝛿(𝑞𝑖, 𝜎) = 𝑞𝑗 𝑖 = 𝑗 Para plantear el problema, se debe considerar inicialmente la unión de todos elementos 𝑅𝑖𝑗 𝑘 tales que:  𝑖 es el estado inicial.  𝑗 es un estado final.  𝑘 es la cantidad de estados que tiene el autómata. Luego, se aplica la fórmula recursivamente hasta llegar a la condición de término y luego se reemplazan los resultados parciales obtenidos. Ejemplo 2.21: Determinar la ER que representa el lenguaje reconocido por el AF de la figura 2.7. Al plantear el problema, se tiene que el lenguaje reconocido corresponde a lo que aceptan los estados 𝑞2 y 𝑞3. Así, la ER está dada por: 𝐸𝑅 = 𝑅12 3 + 𝑅13 3 Desarrollando los términos recursivos se tiene: 𝑅12 3 = 𝑅12 2 + 𝑅13 2 (𝑅33 2 )∗ 𝑅32 2 𝑅13 3 = 𝑅13 2 + 𝑅13 2 (𝑅33 2 )∗ 𝑅33 2 𝑅12 2 = 𝑅12 1 + 𝑅12 1 (𝑅22 1 )∗ 𝑅22 1 𝑅13 2 = 𝑅13 1 + 𝑅12 1 (𝑅22 1 )∗ 𝑅23 1 𝑅33 2 = 𝑅33 1 + 𝑅32 1 (𝑅22 1 )∗ 𝑅23 1 𝑅32 2 = 𝑅32 1 + 𝑅32 1 (𝑅22 1 )∗ 𝑅22 1
  50. 50. 50 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS 𝑅12 1 = 𝑅12 0 + 𝑅11 0 (𝑅11 1 )∗ 𝑅12 0 𝑅22 1 = 𝑅22 0 + 𝑅21 0 (𝑅11 1 )∗ 𝑅12 0 𝑅13 1 = 𝑅13 0 + 𝑅11 0 (𝑅11 1 )∗ 𝑅13 0 𝑅23 1 = 𝑅23 0 + 𝑅21 0 (𝑅11 1 )∗ 𝑅13 0 𝑅33 1 = 𝑅33 0 + 𝑅31 0 (𝑅11 1 )∗ 𝑅13 0 𝑅32 1 = 𝑅32 0 + 𝑅31 0 (𝑅11 1 )∗ 𝑅12 0 𝑅11 0 = 𝜀 𝑅12 0 = 1 𝑅13 0 = 𝜙 𝑅21 0 = 𝜙 𝑅22 0 = 𝜀 + 1 𝑅23 0 = 0 + 1 𝑅31 0 = 0 𝑅32 0 = 𝜙 𝑅33 0 = 𝜀 Ahora, reemplazamos los resultados parciales en las expresiones recursivas: 𝑅12 1 = 𝑅12 0 + 𝑅11 0 (𝑅11 1 )∗ 𝑅12 0 = 1 + 𝜀(𝜀)∗ 1 = 1 𝑅22 1 = 𝑅22 0 + 𝑅21 0 (𝑅11 1 )∗ 𝑅12 0 = 𝜀 + 1 + 𝜙(𝜀)∗ 1 = 𝜀 + 1 𝑅13 1 = 𝑅13 0 + 𝑅11 0 (𝑅11 1 )∗ 𝑅13 0 = 𝜙 + 𝜀(𝜀)∗ 𝜙 = 𝜙 𝑅23 1 = 𝑅23 0 + 𝑅21 0 (𝑅11 1 )∗ 𝑅13 0 = 0 + 1 + 𝜙(𝜀)∗ 𝜙 = 0 + 1 𝑅33 1 = 𝑅33 0 + 𝑅31 0 (𝑅11 1 )∗ 𝑅13 0 = 𝜀 + 0(𝜀)∗ 𝜙 = 𝜀 𝑅32 1 = 𝑅32 0 + 𝑅31 0 (𝑅11 1 )∗ 𝑅12 0 = 𝜙 + 0(𝜀)∗ 1 = 01 𝑅12 2 = 𝑅12 1 + 𝑅12 1 (𝑅22 1 )∗ 𝑅22 1 = 1 + 1(𝜀 + 1)∗(𝜀 + 1) = 11∗ 𝑅13 2 = 𝑅13 1 + 𝑅12 1 (𝑅22 1 )∗ 𝑅23 1 = 𝜙 + 1(𝜀 + 1)∗(0 + 1) = 11∗(0 + 1) 𝑅33 2 = 𝑅33 1 + 𝑅32 1 (𝑅22 1 )∗ 𝑅23 1 = 𝜀 + 01(𝜀 + 1)∗(0 + 1) = 𝜀 + 011∗(0 + 1) 𝑅32 2 = 𝑅32 1 + 𝑅32 1 (𝑅22 1 )∗ 𝑅22 1 = 01 + 01(𝜀 + 1)∗(𝜀 + 1) = 011∗ 𝑅12 3 = 𝑅12 2 + 𝑅13 2 (𝑅33 2 )∗ 𝑅32 2 = 11∗ + 11∗(0 + 1)[𝜀 + 011∗(0 + 1)]∗ 011∗ = = 11∗ + 11∗(0 + 1)[011∗(0 + 1)]∗ 011∗ 𝑅13 3 = 𝑅13 2 + 𝑅13 2 (𝑅33 2 )∗ 𝑅33 2 = = 11∗(0 + 1) + 11∗(0 + 1)[𝜀 + 011∗(0 + 1)]∗[𝜀 + 011∗(0 + 1)] = = 11∗(0 + 1)[011∗(0 + 1)]∗ 𝐸𝑅 = 𝑅12 3 + 𝑅13 3 = 11∗ + 11∗(0 + 1)[011∗(0 + 1)]∗ 011∗ + 11∗(0 + 1)[011∗(0 + 1)]∗ = = 11∗ + 11∗(0 + 1)[011∗(0 + 1)]∗(𝜀 + 011∗) = = 11∗{𝜀 + (0 + 1)[011∗(0 + 1)]∗(𝜀 + 011∗)} Problema propuesto: Pruebe que las ER obtenidas en los ejemplos ejemplo 2.15 y 2.16 son equivalentes. 2.6.2 EQUIVALENCIA ENTRE AF Y GR En esta sección se muestran dos métodos sencillos, que permiten obtener un AF a partir de una GR y a la inversa. 2.6.2.1 Obtención de una GR a partir de un AF
  51. 51. 51 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS Dado un autómata finito 𝑀 = (𝑄, ΣM, 𝛿, 𝑞0, 𝐹), existe un algoritmo muy sencillo para determinar una gramática regular 𝐺 = (ΣG, 𝑁, 𝑃, 𝑆) que genere el lenguaje aceptado. Los pasos son los siguientes: 1. Hacer ΣG = ΣM. Es decir, el conjunto de símbolos terminales de 𝐺 corresponde al alfabeto de 𝑀. 2. Hacer N = Q. En otras palabras, los estados de 𝑀 conforman el conjunto de no terminales de 𝐺. 3. Hacer 𝑃 = {𝑞 → 𝜎𝛿(𝑞, 𝜎): 𝑞 ∈ 𝑄, 𝜎 ∈ ΣM} ∪ {𝑞 → 𝜀: 𝑞 ∈ 𝐹}. Las producciones corresponden a las transiciones entre dos estados de M, y además se agregan producciones vacías para los estados finales. 4. Hacer 𝑆 = 𝑞0. El símbolo inicial corresponde al estado inicial. Resulta sencillo comprobar que este algoritmo es correcto, puesto que las derivaciones realizadas para generar una palabra imitan las transiciones efectuadas por el AF para reconocerla. Ejemplo 2.22: Obtenga una gramática regular que reconozca el lenguaje aceptado por el AFND de la figura 2.8. 𝐺 = (Σ, 𝑁, 𝑃, 𝑆):  Σ = {0, 1}  N = {A, B, C, D, E}  P = {A → 0B | 010D, B → A | 0C | D, C → 11E | 𝜀, D → E, E → 1B | 𝜀}  𝑆 = 𝐴 FIGURA 2.8: Un AF para determinar su ER correspondiente. 2.6.2.2 Obtención de un AF a partir de una GR Dada una gramática regular 𝐺 = (ΣG, 𝑁, 𝑃, 𝑆), existe un algoritmo sencillo semejante al descrito en el punto anterior para determinar un autómata finito 𝑀 = (𝑄, ΣM, 𝛿, 𝑞0, 𝐹) que acepte el lenguaje generado. Los pasos son los siguientes: 1. Hacer ΣM = ΣG. 2. Hacer 𝑄 = N ∪ {𝑓}. Es decir, los no terminales de 𝐺 conforman el conjunto de estados de 𝑀, aunque es necesario agregar un estado adicional 𝑓. 3. Hacer 𝑞0 = 𝑆. 4. Hacer 𝐹 = {𝑓}. En otras palabras, el AF tiene un único estado final que corresponde al estado adicional agregado en el paso 2. 5. Hacer 𝛿 = {(𝐴, 𝑤, 𝐵): 𝐴 → 𝑤𝐵 ∈ 𝑃} ∪ {(𝐴, 𝑤, 𝑓): 𝐴 → 𝑤 ∈ 𝑃}, donde 𝑤 ∈ ΣG ∗ y 𝐴, 𝐵 ∈ 𝑁.
  52. 52. 52 Fundamentos de Ciencias de la Computación Jacqueline Köhler C. - USS Al igual que en el método inverso, la comprobación del correcto funcionamiento de este algoritmo resulta muy simple. Las transiciones efectuadas por el AF para reconocer una palabra imitan las derivaciones realizadas por la GR para generarla. Ejemplo 2.23: Construya un AF reconocedor del lenguaje generado por la siguiente gramática regular: 𝐺 = (Σ, 𝑁, 𝑃, 𝑆):  Σ = {0, 1}  N = {A, B, C, D, E}  P = {A → 01A | 1B | 01, B → C | 0A | 0D, C → 10C | 1D, D → 1 | 1E, E → 0E | 1D | 𝜀}  𝑆 = 𝐴 El AF reconocedor para la gramática dada se muestra en la figura 2.9. Problema propuesto: Obtenga el AFD mínimo equivalente para el AFND de la figura 2.9. FIGURA 2.9: AF reconocedor para el lenguaje generado por la gramática regular del ejemplo 2.18. 2.7 LEMA DEL BOMBEO Una propiedad esencial de los lenguajes regulares es que se puede descomponer cualquier palabra lo suficientemente larga en tres secciones diferentes y repetir (bombear) la sección central una cantidad arbitraria de de veces para formar una nueva palabra perteneciente al lenguaje. El lema del bombeo se sirve de esta propiedad para demostrar que algún lenguaje dado no es regular (no sirve a la inversa). Formalmente, el lema del bombeo plantea que, si 𝐿 es un lenguaje regular, entonces existe un entero 𝑛 ≥ 1 (denominado longitud de bombeo y dependiente exclusivamente de 𝐿) tal que cualquier palabra 𝑧 ∈ 𝐿, con |𝑧| ≥ 𝑛, puede ser escrita como 𝑧 = 𝑢𝑣𝑤 de forma tal que se cumplan las siguientes condiciones: 1. |𝑣| ≥ 1. 2. |𝑢𝑣| ≤ 𝑛. 3. 𝑢𝑣 𝑖 𝑤 ∈ 𝐿∀𝑖 ≥ 0.

×