Está en la página 1de 9

1.- Introducción a la Teoría de Lenguajes Formales.

Introducción

La ciencia de la computación es el cuerpo sistematizado del conocimiento acerca del cálculo.

Principios:

Euclides Diseño de algoritmos


Los Babilonios Complejidad asintótica y reducibilidad

INICIOS

La teoría de la computación tiene sus inicios en varios campos distintos:

Biología Modelos de redes Neuronales


Ing. Eléctrica Teoría de la interrupción para diseño de Hw
Matemáticas Fundamentos de la lógica
Lingüística Gramáticas de los lenguajes naturales
A partir de esto nacen los modelos centrales de la ciencia de la computación teórica

Autómatas finitos y expresiones regulares

Se desarrollan pensando en las redes neuronales y los circuitos de interrupción, pero son
herramientas útiles en el diseño de Analizadores de léxico, editores de texto, concordancia de
patrones, procesadores de texto, buscadores de archivos, etc. Las ER las desarrollo Kleene en 1956
para estudiar las redes neuronales.

Gramáticas libres de contexto

Ayudan a especificar lenguajes de programación y apoyan el diseño de “parser’s”

Máquinas de Turing

Las maquinas de Turing son quizá el elemento más poderoso de la teoría de la computación y son
en cierta forma el limite teórico de lo que es posible hacer con “maquinas” procesadoras de
información

MAQUINAS

¿Qué maquinas?

Usualmente él termino maquina evoca algo físico, hecho de metal, ruidoso, que efectúa
tareas repetidas que requieren fuerza, precisión, rapidez

Existen otras, las maquinas computacionales, las cuales son abstracciones o modelos
matemáticos

Este es el enfoque del curso, el de las secuencias o ciclos de acciones.

Las maquinas a estudiar son abstracciones matemáticas que ven solamente el aspecto referente a
las secuencias de eventos que ocurren sin tener en cuenta la forma de la maquina ni sus
dimensiones, ni el tipo de movimientos que efectúa.

PRELIMINARES MATEMATICOS

Teoría de conjuntos

Un conjunto es una colección de elementos

L= {a, b, c, d} elementos del alfabeto

b Є L especifica que b es un elemento del conjunto L

r ∉ L especifica que r no es un elemento del conjunto L

En un conjunto no se distinguen repeticiones de los elementos


{a, b, c, d}={a, b, c, b, a, c, d}

El orden no tiene ningún significado

{a, b, c, d}={b, a, d, c}

Dos conjunto son iguales si y solo si tienen los mismos elementos

Un conjunto puede tener un solo elemento y se llama simple.

{1} tiene un solo elemento {1} y 1 son distintos

El conjunto que no tiene elementos se denomina conjunto vacío y se denota con Ø, {}

Se pueden especificar conjuntos listando sus elementos separados por comas y entre llaves

{a, b, c, d, e, f, g, h, i, j}

Algunos no pueden ser descritos de esta forma porque son infinitos

|N = {0, 1, 2, 3, 4,5,...}

Un conjunto que no es infinito se denomina finito

Otra manera de especificar un conjunto es por referencia a otros conjuntos y a propiedades que
pueda o no tener

G={x | x Є I “and” x > 32 }

En general se especifica

B= {x | x Є A and x tiene la propiedad P}

Un conjunto es subconjunto de otro sí cada elemento de A es también elemento de B; se especifica


A⊆B

Un conjunto es subconjunto de sí mismo. Si A ⊆ B pero A no es el mismo B, A es subconjunto propio


de B. El conjunto vacío es subconjunto de todo conjunto

Los conjuntos pueden combinarse para formar un tercero por varias operaciones de conjuntos.

La unión de dos conjuntos es el conjunto que tiene como elementos aquellos que son elementos de
al menos uno de los conjuntos y tal vez de ambos.

A U B = {x | x Є A or x Є B}

La intersección de dos conjuntos es la colección de elementos que los dos conjuntos tienen en
común

A ∩ B = {x | x Є A and x Є B}
La diferencia de dos conjuntos A y B, denotada A - B es el conjunto de elementos de A que no son
elementos de B.

A - B = {x | x Є A and x ∉ B}

Dos conjuntos son disjuntos si no tienen elementos en común, es decir si su intersección es el


conjunto vacío.

El conjunto potencia de un conjunto A es el conjunto de todos sus subconjuntos y se denota por 2 A.

Una partición de un conjunto no vacío A es un subconjunto ∏ de 2A tal que f no es elemento de ∏ y


cada elemento de A esta en uno y solo un conjunto de ∏

∏ es una partición de A si ∏ es un conjunto de subconjuntos de A tales que

1. Cada elemento de ∏ es no vacío

2. Distintos miembros de ∏ son disjuntos

3. U∏ = A

RELACIONES Y FUNCIONES

Producto cartesiano

Operación de conjuntos que construye un conjunto que consiste de pares ordenados de


elementos a partir de dos conjuntos existentes

Se define como:

X x Y = {(x, y) | x Є X and y Є Y}

Una relación binaria entre dos conjuntos X y Y es un subconjunto del producto cartesiano.

El producto se puede generalizar a varios conjuntos X1, X2, X3,..., Xn.

Funciones

En forma intuitiva, una función es un mapeo o asociación de elementos de un conjunto con elementos
de otro conjunto; se denota

f : x -> y.
De manera formal una función de un conjunto X a un conjunto y es una relación binaria R sobre X y
Y con la siguiente propiedad: para cada elemento a Є X, hay exactamente un para ordenado en R
con a como primer elemento.

f(x) denota el elemento de y asignado a un elemento x Є X.

X es el dominio, el rango de f es el subconjunto de Y consistente de los miembros de Y que son


asignados a elementos de X

Rango = {y Є Y | y = f(x) para alguna x Є X}

Alfabetos, cadenas y lenguajes

Símbolos: elementos indivisibles

a 1 perro

algo nada

entren para for

Un alfabeto es un conjunto de símbolos (Formalmente, un conjunto no vacío y finito de


símbolos).

Se denota con Σ.

letras = {a, b, c, d, e, f, g, .... , z}

dígitos = {0,1,2,3,4,5,6,7,8,9}

palabras = {a, en, nada, león, Pedro, si, entrada}

keywords = {main, void, do, while, if, for, .... }

Una cadena sobre un alfabeto es una secuencia finita de símbolos del alfabeto.

dado Σ = {a, b, c, d, e, f, ...}

hola, todo, papa, dfgg, sdgsadg, gsdg, casi, si,no son cadenas sobre el alfabeto

Una cadena sobre el alfabeto de un lenguaje de programación es un programa

Una cadena sobre el alfabeto del idioma “español” es una oración


Los elementos de un alfabeto se denotan con las primeras letra del alfabeto (el nuestro) a, b, c, d, e,
f, etc. Las cadenas se denotan con u, v, w, x, y, z.

En un lenguaje de programación o el lenguaje natural se cambia la notación ya que su alfabeto son


los elementos del lenguaje.

Las cadenas son los elementos fundamentales usados en la definición de lenguajes

Cada símbolo de un alfabeto es una cadena sobre dicho alfabeto.

La cadena vacía es una palabra sobre cualquier alfabeto, no contiene elementos y se denota con el
símbolo ε.

Si Σ es un alfabeto, Σ* denota el conjunto de todas las cadenas sobre el alfabeto y se conoce como
cerradura de Σ o lenguaje universal sobre å

Σ* es infinito para cualquier Σ

Definición:

Si Σ es un alfabeto, Σ*, el conjunto de cadenas sobre Σ se define como sigue:

1. Є Σ*

2. Si w Є Σ* y a Є Σ, entonces wa Є Σ*

w Є Σ* si y solo si se puede obtener desde ε, aplicando la operación en 2 un numero finito de veces.

OPERACIONES CON CADENAS

Longitud

Si w es una cadena, |w| = long(w) es la longitud de la cadena, es decir, él número de elementos


que contiene.

Si Σ contiene n elementos, existen nk cadenas de longitud k en Σ*.

dado = {a, b}

Σ2 = {aa, ab, ba, bb}

Σ3 = {aaa, aab, aba, abb, baa, bab, bba, bbb}

Concatenación

La concatenación es la operación binaria de tomar dos cadenas y añadir una a la otra para construir
una nueva cadena. Es la operación fundamental para construir cadenas.

Definición:

Sean u, v cadenas que pertenecen a Σ*. La concatenación de u y v, escrita uv se define como:


1. Si long(v) = 0 entonces v = ε y uv = uε= u.

2. Sea v una cadena con longitud long(v) = n > 0. Entonces v = wa, para alguna cadena w con
longitud n-1 y

a Є Σ, uv = (uw)a

Ejemplo : Sea u=ab, v=ca, w=bb

uv=abca vw=cabb

(uv)w= abcabb u(vw)=abcabb

Potencia

Los exponentes se usan para indicar concatenación consigo misma.

Si u = ab y v= ba

uv=abba vu=baab

u2=abab y no aabb=a2b2

|
ε n=0

Wn= {

| wwn-1 n>0

Igualdad, prefijo y sufijo, subcadena

Si w y z son cadenas w=z si tienen los mismos elementos en la misma posición

Si w y x son cadenas, x es prefijo de w si para alguna cadena y se obtiene w= xy

Las subcadenas pueden ser definidas usando la concatenación. u es una subcadena de v si u “ocurre
dentro de” v.

Formalmente : u es una subcadena de v si existen cadenas x,y tales que v=xuy


Inverso

El inverso de una cadena es la cadena escrita al contrario

abc cba

Definición:

1. - Si long(w) = 0 w=ε y εI = ε wI = w

2.- Si long(w) = n >=1, entonces w=ua para alguna cadena u de longitud n-1, a Є Σ y wI = auI

Especificación finita de lenguajes

Introducción

Muchos lenguajes son infinitos, por tanto no se pueden representar en extensión, por lo que se deben
representar en intensión

La especificación de un lenguaje requiere descripción sin ambigüedades. Un lenguaje finito se


describe explícitamente definiendo sus elementos en forma enumerada.

Las operaciones con cadenas se pueden extender a operaciones sobre conjuntos y a su vez sobre
cadenas.

Las descripciones de lenguajes infinitos se construyen a partir de conjuntos finitos usando


operaciones de conjuntos

Un lenguaje consiste de cadenas sobre un alfabeto. Generalmente se colocan algunas restricciones


sobre las cadenas que componen el lenguaje. El español consiste de aquellas cadenas de palabras
que llamamos oraciones. No todas las cadenas de palabras forman oraciones en un lenguaje, solo
aquellas que cumplen ciertas condiciones en el orden y tipo de las palabras. Lo mismo pasa en un
lenguaje de programación.

Por tanto, un lenguaje consiste en un subconjunto de todas las cadenas del alfabeto.

Definición:

Un lenguaje sobre un alfabeto Σ es un subconjunto de Σ*.

Operaciones con lenguajes

Definición:

La concatenación de los lenguajes X y Y, denotada XY es el lenguaje

XY={uv | u Є X y v Є Y}

No se requiere que X y Y sean lenguajes sobre el mismo alfabeto


La concatenación de un lenguaje consigo mismo se denomina potencia y se denota Xn

Como un lenguaje es un conjunto de cadenas, se pueden definir unión, intersección y sublenguaje


como en los conjuntos en general.

Si A y B son lenguajes sobre un alfabeto

A U B = {x | x Є A or x Є B}

A∩B = {x | xЄA and x Є B}

Un lenguaje A es subconjunto de un lenguaje B si todas las cadenas de A son también cadenas de


B. Se denota A ⊆ B.

Cualquier lenguaje L sobre el alfabeto Σ es un sublenguaje de Σ*

También podría gustarte