De palabras y lenguajes
No one shall expel us from the paradise which Cantor has created for us — David Hilbert
Ivan Meza
De la clase pasada:
¿Qué es una computadora?
¿Qué hace una computadora?
¿Qué no hace una computadora?
¿Qué es constante en una computadora?
Necesitamos una forma de hablar de todas las computadoras
Una buena aproximación...
Esta simplificación, sigue muy compleja
- Muchas entradas
- Muchas cajas negras
- Muchas salidas
Entradas
¿Cuántas y cuáles?
- Una, dos, tres....
- Booleanos, Números, cadenas, estructuras, clicks, funciones, ...
Salidas
¿Cuántas y cuáles?
- Muchas
- Booleanos, números, cadenas, estructuras, pantalla, funciones, ...
¿Cómo hablamos de todas las cajas negras?
- Una entrada: cadena
- Una salida: booleana
Propuesta
Una entrada y una salida
Una entrada: muchos casos
Todas las entradas pueden ser reducidas a una, por concatenación de cadenas
Ejemplo
La máquina que calcula $a+b$
La máquina recibe: $a$ seguida de $b$
Opciones:
Una salida: dos casos
Mucho más sencillo
Ejemplo
La máquina que calcula $a+b$
La máquina regresa: Falso o Verdadero
Significa que la máquina llegó a un estado donde produjo un resultado
- $V/[F]$: Esos números (no) los puedo sumar
- $V/[F]$: Esos números (no) los sumé
El resultado, un efecto secundario
Esta sí es una simplificación
- De muchas entradas a muchas de un solo tipo
- No cambia el número de cajas negras
- De muchas salidas a dos salidas
¿Cómo generamos todas las entradas?
Combinaciones de elementos básicos
concepto Alfabeto
- Un conjunto de elementos "básicos" finito
- Notación $\Sigma$
Ejemplos de alfabetos
- $\{a,b\}$
- $\{0,1\}$
- $\{import\ , print\ , for\ , in\ , v1\ , 1, 2, 3, [, ],','\}$
concepto Cadena
- Secuencia finita de elementos de un alfabeto $\Sigma$
- Notación $w$
Ejemplos de cadenas
- $baaaaa, bab, abbbbabbbb, ...$
- $0,1,0101,10001,10001, ...$
- $import\ m, for\ v1\ in [1,2,3], in\ while\ if , ...$
Longitud de una cadena
- $|baaaaa|=6$
- $|bab|=3$
- $|abbbbabbbb|=11$
- $|0|=1$
- $|1|=1$
- $|0101|=4$
Longitud de una cadena
- $|10001|=5$
- $|11001|=?$
- $|import\ m|=?$
- $|for\ v1\ in [1,2,3]|=?$
- $|in\ while\ if|=?$
concepto LA CADENA VACIA
- Longitud cero
- Notación $\epsilon$
$|\epsilon|=$0
concepto Concatenación
Para dos palabras $w_1$ y $w_2$
- $w_1 = w_{1_1} w_{1_2}...w_{1_m}$
- $|w_1| = m$
- $w_2 = w_{2_1}w_{2_2}...w_{2_n}$
- $|w_2| = n$
La concatenación de $w_1$ y $w_2$ es
- $w_1 w_2 = w_{1_1} w_{1_2}...w_{1_m} w_{2_1}w_{2_2}...w_{2_n}$
- $aab\ bba = aabbba$
Propiedades de la concatenación
- $w_1w_2 \ne w_2w_1$
- $w_1w_2w_3 = (w_1w_2)w_3 = w_1(w_2w_3)$
- $w_1\epsilon = \epsilon w_1 = w_1$
- $|w_1w_2|=|w_1|+|w_2| $
concepto Lenguajes
- Conjunto de cadenas de un alfabeto $\Sigma$
- Notación $L$
Ejemplos de lenguajes
- $\{a,b\}$
- $\{aa,bb,aaa,bbb,aaaa,bbbb\}$
- $\{a,aa,aaa,aaaa,aaaaa, ... \}$
Lenguajes notables
- $\{\epsilon\}$
- $\{\}=\emptyset$
Potencia de un alfabeto
De alfabeto $\Sigma$ a lenguaje $L$, supongamos $\Sigma=\{a,b\}$
- $\Sigma^0=\{\epsilon\}$
- $\Sigma^1=\{a,b\}$
- $\Sigma^2=\{aa,ab,ba,bb\}$
- $\Sigma^3=\{aaa,aab,aba,abb,baa,bab,bba,bbb\}$
- ...
Un lenguaje notable
- $\Sigma^*=\Sigma^0 \cup \Sigma^1 \cup \Sigma^2 \cup \Sigma^3 \cup ...$
- El conjunto de todas las palabras posibles con $\Sigma$, incluyendo la cadena vacía
Para $\Sigma=\{a,b\}$
- $\Sigma^*=\{\epsilon,a,b,aa,ab,ba,bb,aaa,aab,aba,abb,baa,bab,bba,bbb,... \}$
Todo $L$ sobre $\Sigma$ es un subconjunto de $\Sigma^*$
concepto Concatenación de lenguajes
Para dos lenguajes $L_1$ y $L_2$
- $L_1 L_2 = \{w_{1} w_{2} | w_1 \in L_1 y\ w_2 \in L_2 \}$
Ejemplos concatenación de lenguajes
$L_1=\{aa\}$, $L_2=\{a,b\}$, $L_3=\{\epsilon\}$ y $L_4=\{a,aa,aaa,aaaa,...\}$
- $L_1 L_2 =$ $\{aaa,aab\}$
- $L_2 L_1 =$ $\{aaa,baa\}$
- $L_2 L_2 =$ $\{aa,ab,ba,bb\}$
- $L_2 L_3 =$ $\{a,b \}$
- $L_1 L_4 =$ $\{aaa,aaaa,aaaaa,... \}$
Si podemos concatenar lenguajes ¿exite $L^*$?
Cerradura de un Lenguaje
- $L^*\ = \bigcup_{i=0}^\infty L^i$ (Kleene estrella)
- $L^+ = \bigcup_{i=1}^\infty L^i$ (Kleene más)
Stephen C. Kleene
Ejemplos de cerraduras
Para $L=\{aa\}$
- $L^*\ =\{\epsilon,aa,aaaa,aaaaaa,aaaaaaaa,... \}$
- $L^+=\{\ \ \ aa,aaaa,aaaaaa,aaaaaaaa,... \}$
¿alguien puede describir este lenguaje?
Cerraduras notables
- $\{\epsilon\}^*=$$\{\epsilon\}$
- $\{\epsilon\}^+=$$\{\epsilon\}$
- $\emptyset^*=$$\{\epsilon\}$
- $\emptyset^+=$$\{\ \}$
El poder de la cadena vacía
- $\{\epsilon\}L=L$
- $L\{\epsilon\}=L$
Si presente, $\epsilon$ copia un lenguaje
- $\{\epsilon,...\}L=(\{\epsilon\}\cup L_r)L=(\{\epsilon\}L)\cup(L_rL)=L\cup L_rL$
Las operaciones normales de los conjuntos
- Union: $L_1 \cup L_2$
- Intersección: $L_2 \cap L_2$
- Diferencia: $L_1 - L_2$
Complemento
- $\overline{L} = \Sigma^* - L$
conceptoLenguajes que generan lenguajes
En el curso nos concentraremos en 4 operaciones
- Union
- Concatenación
- Cerradura
- Complemento
Las operaciones aceptan lenguajes y crean "nuevos" lenguajes
Unión
Concatenación
¿Cómo el resultado podría contener a uno?
Concatenación
¿A los dos?
Cerradura
¿Cómo el resultado podría contener al original?
Complemento
Describiendo lenguajes
- $\{w | w\in\Sigma^*$ con propiedad$\}$
Ejemplos de lenguajes
Si $\Sigma=\{a,b\}$
- $\{w | w\in\Sigma^*$ y con número par de aes $\}$
- $\{w | w\in\Sigma^*$ y con sólo bes y número impar de bes $\}$
Resumen
- Cajas negras que representan a todos lo que se computa
- Una entrada de un tipo, muchos valores; una salida, dos valores
- ¿Cómo generamos todas las entradas?
- Alfabeto
- Cadenas
- Lenguajes
- De alfabeto a lenguaje: potencia
- Concatenación de lenguajes
- Operaciones que toman lenguajes y hacen otros lenguajes