Resumen Primer Parcial
Resumen Primer Parcial
Resumen Primer Parcial
Teoría de la Computación: Propiedades generales del cómputo respecto a la teoría de la autómatas y lenguajes
formales. Se utiliza para resolver problemas de software, y para crear compiladores.
Jerarquía de Chomsky: Clasificación de los tipos de gramáticas y lenguajes formales. Consta de 4 niveles que se definen
por las restricciones impuestas sobre las reglas de producción y los símbolos terminales y no terminales que se pueden
usar en la gramática. En orden de complejidad creciente.
• Lenguajes Recursivamente Enumerables (Tipo 0): Estos lenguajes pueden ser generados por gramáticas que no
tienen restricciones en las reglas de producción y son capaces de generar cualquier cadena de símbolos que sea
posible generar por una máquina de Turing.
• Lenguajes Dependientes del Contexto (Tipo 1): Estos lenguajes pueden ser generados por gramáticas que tienen
reglas de producción en las que los símbolos no terminales se reemplazan por cadenas de símbolos que incluyen
tanto símbolos no terminales como símbolos terminales.
• Lenguajes Libres de Contexto (Tipo 2): Estos lenguajes pueden ser generados por gramáticas que tienen reglas
de producción en las que los símbolos no terminales se reemplazan por cadenas de símbolos que solo incluyen
símbolos no terminales.
• Lenguajes Regulares (Tipo 3): Estos lenguajes pueden ser generados por gramáticas que tienen reglas de
producción en las que los símbolos no terminales se reemplazan por cadenas de símbolos que incluyen un
símbolo no terminal seguido de un símbolo terminal o un símbolo terminal seguido de un símbolo no terminal.
Autómatas: Modelo matemático de una máquina de estados que acepta cadenas de un lenguaje definido. Puede ser:
• Determinístico DFA: Cada estado tiene transiciones bien definidas para cada posible entrada del alfabeto. Esto
significa que, para cualquier entrada dada, el DFA siempre seguirá un camino único y predecible a través de sus
estados.
• No Determinístico NFA: Cada estado tiene transiciones bien definidas para cada posible entrada del alfabeto.
Esto significa que, para cualquier entrada dada, el DFA siempre seguirá un camino único y predecible a través de
sus estados.
La principal diferencia entre DFA y NFA radica en cómo manejan las transiciones de estado en respuesta a una entrada
dada. Los DFA son más simples y deterministas, lo que los hace más fáciles de entender y analizar, mientras que los NFA
pueden ser más expresivos y flexibles en algunos casos. Sin embargo, es posible convertir un NFA en un DFA equivalente,
lo que significa que los dos tipos de autómatas son equivalentes en términos de su poder expresivo.
Gramática: Colección de reglas que especifican cómo se pueden combinar los símbolos del lenguaje para formar cadenas
válidas. Las gramáticas se utilizan en la teoría de la computación para estudiar las propiedades de los lenguajes formales
y para diseñar algoritmos que procesen y generen cadenas en un lenguaje dado.
Consta de un conjunto de símbolos no terminales y terminales, y un conjunto de reglas de producción que describen
cómo se pueden combinar estos símbolos para formar cadenas del lenguaje. Los símbolos no terminales representan
elementos de la estructura del lenguaje, mientras que los símbolos terminales representan las unidades básicas del
lenguaje, como las letras y los números.
Las reglas de producción especifican cómo se pueden combinar los símbolos no terminales y terminales para formar
cadenas válidas en el lenguaje. Por ejemplo, una regla de producción podría decir que un símbolo no terminal puede ser
reemplazado por una secuencia de símbolos no terminales y/o terminales. Estas reglas se pueden aplicar de forma
recursiva para construir cadenas cada vez más complejas en el lenguaje.
Clausura de Kleene o Lenguaje Universal: Conjunto de todas las posibles cadenas sobre un alfabeto 𝐴. Se denota como
𝐴∗
Operaciones sobre Cadenas:
Operaciones:
Unión: 𝐿1 ∪ 𝐿2 = {𝜔 ∈ 𝐴∗ |𝜔 ∈ 𝐿1 ∨ 𝜔 ∈ 𝐿2 }
Intersección: 𝐿1 ∩ 𝐿2 = {𝜔 ∈ 𝐴∗ |𝜔 ∈ 𝐿1 ∧ 𝜔 ∈ 𝐿2 }
Diferencia: 𝐿1 − 𝐿2 = {𝜔 ∈ 𝐴∗ |𝜔 ∈ 𝐿1 ∧ 𝜔 ∉ 𝐿2 }
Complemento: 𝐿1 = {𝜔 ∈ 𝐴∗ |𝜔 ∉ 𝐿1 } = 𝐴∗ − 𝐿1
Propiedades:
• Lenguaje Vacío: 𝐿1 ⋅ ∅ = ∅ ⋅ 𝐿1 = ∅
• Asociatividad de Concatenación: (𝐿1 ⋅ 𝐿2 ) ⋅ 𝐿3 = 𝐿1 ⋅ (𝐿2 ⋅ 𝐿3 )
• No Conmutatividad de Concatenación: 𝐿1 ⋅ 𝐿2 ≠ 𝐿2 ⋅ 𝐿1
• Distributividad de la Unión: 𝐿1 ⋅ (𝐿2 ∪ 𝐿3 ) = 𝐿1 ⋅ 𝐿2 ∪ 𝐿1 ⋅ 𝐿3
• No Distrubitividad de la Intersección: 𝐿1 ⋅ (𝐿2 ∪ 𝐿3 ) ≠ 𝐿1 ⋅ 𝐿2 ∩ 𝐿1 ⋅ 𝐿3
Lenguajes Regulares: Lenguajes reconocidos por autómatas finitos y generados por gramáticas regulares.
Autómata o Máquina de Estados Finito: Modelo matemático que describe sistemas con un número limitado de estados
posibles, y que cambian de estado según la entrada. Es capaz de reconocer cadenas que pertenecen a un lenguaje
regular.
a. Autómata Finito Determinista AFD: Para cada estado del autómata, existe exactamente una transición definida
para cada símbolo de entrada. Esto significa que el siguiente estado del autómata siempre es predecible y único para
cada entrada dada.
b. Autómata Finito No Determinista AFN: Para cada estado del autómata, puede haber varias transiciones posibles
para un símbolo de entrada determinado. En este caso, el autómata puede seguir cualquier camino posible a través
del conjunto de transiciones para procesar una cadena de entrada dada.
c. Autómata Finito No Determinista con Transiciones Epsilon AFNDe: Autómata finito no determinista que permite
transiciones epsilon, que son transiciones que se pueden realizar sin consumir ningún símbolo de entrada. Esto
permite al autómata "saltar" de un estado a otro sin necesidad de procesar ninguna entrada.
d. Autómata Finito Completos AFC: Tienen transiciones definidas para todos los símbolos de entrada en cada
estado.
e. Autómata Finito Incompletos AFI: No tienen transiciones definidas para todos los símbolos de entrada en cada
estado.
f. Autómata Finitos Deterministas Mínimos AFDmin: Autómata finito determinista que tiene la menor cantidad de
estados posibles para reconocer el mismo lenguaje.
g. Autómata Finitos No Mínimos AFDnmin: Autómata que tiene más estados de los necesarios para reconocer el
mismo lenguaje que un AFD dado.
h. Autómatas Finitos Deterministas Sincronizados AFDS: Autómatas donde todas las transiciones están
sincronizadas con el reloj global del autómata. Es decir, todas las transiciones se realizan en el mismo instante de
tiempo.
i. Autómatas Finitos Deterministas Asincrónicos AFDA: Autómata donde las transiciones no están sincronizadas con
el reloj global del autómata. Es decir, algunas transiciones pueden tardar más tiempo que otras en realizarse.
j. Autómatas Finitos No Deterministas Ponderados AFNDP: Autómata que tiene asignado un peso a cada transición,
lo que permite calcular el costo o la probabilidad de un camino en el autómata.
• Por Cantidad de Cintas:
a. Autómata Finito de Una Cinta: Procesa una sola cadena de entrada en una única cinta.
b. Autómata Finito de Varias Cintas: Procesa varias cadenas de entrada en diferentes cintas. Cada cinta se lee
simultáneamente para determinar el siguiente estado del autómata.
a. Autómata Finito de Pila AFDP o AP: Utiliza una pila para almacenar y recuperar información. La pila permite al
autómata mantener información sobre el procesamiento anterior de la cadena de entrada.
b. Autómata Finito de Cola AFC: Procesa los elementos de entrada en el orden en que se reciben, como una cola de
elementos.
c. Autómata Finito de Cola y Pila AFCP: Autómata finito que utiliza tanto una cola como una pila para procesar la
entrada.
a. Autómata Finito de Moore: Autómata finito cuya salida está determinada por el estado actual del autómata.
b. Autómata Finito de Mealy: Autómata finito cuya salida está determinada tanto por el estado actual como por el
símbolo de entrada actual.
• Por Complejidad:
a. Autómata Finito Regular AFR: Puede reconocer un lenguaje regular, es decir, un lenguaje que puede ser generado
por una gramática regular o una expresión regular.
b. Autómata Finito No Regular AFNR: No puede reconocer un lenguaje regular. Estos autómatas pueden ser más
complejos
Función de Transición de Estados: Especifica como el autómata cambiará de un estado a otro cuando
se lee una entrada. Se representa mediante un diagrama de transiciones de estados, donde cada nodo
representa un estado y el estado inicial se representa por un nodo con flechas sin origen, y los nodos
finales con doble círculo. También se puede representar mediante una tabla de transición de estados.
Ejemplos:
Expresiones Regulares ER: Secuencia de caracteres que define un patrón de búsqueda. Reglas:
• Lenguaje Vacío: ∅
• Lenguaje que Contiene la Cadena Vacía: 𝜀
• ∀ 𝑎 ∈ 𝐴, 𝑎 es una expresión regular que describe el lenguaje que contiene únicamente a ese símbolo {𝑎}
𝑟+∅=∅+𝑟=𝑟 (𝑟 ⋅ 𝑠) ⋅ 𝑡 = 𝑟 ⋅ (𝑠 ⋅ 𝑡) 𝑟 ⋅ 𝑟∗ = 𝑟∗ ⋅ 𝑟
𝑟⋅𝜀 =𝜀⋅𝑟 =𝑟 𝑟 ⋅ (𝑠 + 𝑡) = 𝑟 ⋅ 𝑠 + 𝑟 ⋅ 𝑡 𝑟 ⋅ 𝑟∗ + 𝜀 = 𝑟∗
𝑟⋅∅=∅⋅𝑟 =∅ (𝑠 + 𝑡) ⋅ 𝑟 = 𝑠 ⋅ 𝑟 + 𝑡 ⋅ 𝑟 (𝑟 ⋅ 𝑠 ∗ )∗ = (𝑟 + 𝑠)∗
∗
Ejemplos:
• 𝑎∗ ⋅ 𝑏 describe el lenguaje 𝐿1 = {𝑎 𝑛 𝑏 |𝑛 ≥ 0}
• (𝑎 + 𝑏)∗ describe el lenguaje 𝐿2 = {𝑥|𝑥 ∈ {𝑎, 𝑏}∗}
• (𝑎𝑎)∗ (𝑏𝑏)∗ 𝑏 describe el lenguaje 𝐿3 = {𝑎2𝑛 𝑏2𝑚+1 |𝑛, 𝑚 ≥ 0}
Obtener Autómata Finito No Determinístico desde Expresión Regular:
Ejemplos:
Obtener Expresión Regular desde Autómata Finito No Determinístico:
Ejemplos:
Obtener AFND desde AFNDe:
1. Eliminar las transiciones epsilon: Las transiciones epsilon permiten al AFNDe cambiar de estado sin consumir ningún
símbolo de entrada. Para eliminar estas transiciones, se deben seguir los siguientes pasos:
a. Para cada estado que tenga una transición epsilon, se deben agregar transiciones adicionales que representen
todas las posibles combinaciones de transiciones epsilon que se pueden seguir. Por ejemplo, si el estado q1 tiene
una transición epsilon a q2 y q2 tiene una transición epsilon a q3, entonces se deben agregar transiciones desde
q1 a q3 y desde q2 a q3.
b. Para cada estado que tenga una transición epsilon a sí mismo, se deben agregar transiciones adicionales que
representen todas las posibles combinaciones de transiciones epsilon que se pueden seguir antes de llegar al
estado. Por ejemplo, si el estado q1 tiene una transición epsilon a sí mismo y también tiene una transición
epsilon a q2, entonces se deben agregar transiciones desde q1 a q2 y desde q2 a q1.
2. Convertir el AFNDe resultante en un AFND: Un AFND se define como un Autómata Finito No Determinista en el que
cada transición tiene un solo símbolo de entrada. Para convertir el AFNDe resultante en un AFND, se deben seguir los
siguientes pasos:
a. Para cada transición que tenga más de un símbolo de entrada, se deben crear estados adicionales que
representen cada uno de los posibles símbolos de entrada. Por ejemplo, si existe una transición desde el estado
q1 al estado q2 con los símbolos a y b, se deben crear dos estados adicionales q3 y q4, donde la transición desde
q1 a q3 es a y la transición desde q1 a q4 es b, y la transición desde q3 a q2 y la transición desde q4 a q2 son
ambos epsilon.
b. Si después de este paso todavía hay transiciones con más de un símbolo de entrada, se deben repetir los
pasos anteriores hasta que se obtenga un AFND con una sola entrada por transición.
Ejemplos:
Obtener AFD desde AFND:
1. Identificar los estados alcanzables del AFND para cada entrada: Para cada estado del AFND y para cada símbolo
de entrada, se deben identificar todos los estados a los que se puede llegar siguiendo las transiciones
correspondientes.
2. Construir la tabla de transiciones del AFD: La tabla de transiciones del AFD tendrá un conjunto de estados que
corresponden a los estados alcanzables del AFND, y las transiciones entre ellos se determinarán a partir de la
tabla de transiciones del AFND. Para cada estado del AFD, y para cada símbolo de entrada, se debe determinar el
estado alcanzable correspondiente siguiendo las transiciones del AFND. Los estados del AFD se pueden
representar como conjuntos de estados del AFND que son alcanzables desde el estado inicial del AFD.
3. Identificar los estados finales del AFD: Los estados finales del AFD serán aquellos que contengan al menos un
estado final del AFND.
4. Diseñar el AFD resultante: Una vez que se han construido la tabla de transiciones del AFD y se han identificado
los estados finales, se puede diseñar el AFD resultante con los mismos símbolos de entrada y la misma estructura
que el AFND original.
Ejemplo:
1. Identifica todas las reglas de producción del lenguaje. Estas reglas son la forma en que se construyen las palabras
y las frases del lenguaje.
2. Revisa las reglas de producción y verifica si cada una de ellas se puede escribir en la forma de una regla de
producción de una gramática regular. Las reglas de producción de una gramática regular toman la forma A → aB
o A → a, donde A y B son símbolos no terminales y a es un símbolo terminal.
3. Si una regla de producción no se puede escribir en la forma de una regla de producción de una gramática regular,
entonces el lenguaje no es regular. En este caso, tendrías que buscar otra forma de describir el lenguaje.
4. Si todas las reglas de producción se pueden escribir en la forma de una regla de producción de una gramática
regular, entonces puedes escribir la gramática regular completa.
Ejemplos:
Obtener Gramática Regular desde AF:
Ejemplos:
Lema Pumping: Se utiliza para demostrar si un lenguaje infinito es regular. Establece que para cualquier lenguaje regular,
existe una constante de bombeo 𝑝 tal que cualquier cadena en el lenguaje de longitud mayor o igual a 𝑝 puede ser
dividida en tres partes (𝑥, 𝑦, 𝑧) de manera que se cumpla:
Contrarrecíproco del Lema Pumping: Si un lenguaje no cumple con la propiedad del lema del bombeo, entonces el
lenguaje no es regular. Si es posible encontrar una cadena en el lenguaje que no se puede dividir en tres partes como lo
requiere el lema del bombeo, entonces podemos concluir que el lenguaje no es regular.
Ejemplo:
La configuración de una transición en un autómata de pila es una tupla < 𝑒, 𝜎, 𝜋 > donde 𝜎 es la cadena de entrada, y 𝜋
es el contenido de la pila.
Ejemplo: