Sie sind auf Seite 1von 124

Lenguajes Formales y Automatas

Con codigo
multiparadigma en DrRacket
Por

Abdiel E. Caceres
Gonzalez

PUBLICACIONES ABC - MEXICO


2014

Este trabajo esta licenciado bajo la licencia Creative Commons

Atribucion-NoComercial
2.5 Mexico (CC BY-NC 2.5 MX).
Para ver la licencia visite
https://creativecommons.org/licenses/by-nc/2.5/mx/.

Indice general
1. Fundamentos matematicos

1.1. Logica
matematica . . . . . . . . . . . . . . . . . . .
1.1.1. Combinaciones de expresiones . . . . . . .
1.2. Conjuntos . . . . . . . . . . . . . . . . . . . . . . .
1.2.1. La pertenencia . . . . . . . . . . . . . . . . .
1.2.2. La cardinalidad . . . . . . . . . . . . . . . .
1.3. Cuantificadores . . . . . . . . . . . . . . . . . . . .
1.3.1. Cuantificador universal . . . . . . . . . . . .
1.3.2. Cuantificador existencial . . . . . . . . . . .
1.4. Operaciones con conjuntos . . . . . . . . . . . . . .
1.4.1. Subconjuntos . . . . . . . . . . . . . . . . .
1.4.2. Igualdad de conjuntos . . . . . . . . . . . .
de conjuntos . . . . . . . . . . . .
1.4.3. Creacion
1.4.4. Agregar un elemento a un conjunto . . . . .
de conjuntos . . . . . . . . . . . . . .
1.4.5. Union
de conjuntos . . . . . . . . . .
1.4.6. Interseccion
1.4.7. Diferencia de un conjunto respecto de otro
1.5. El conjunto potencia . . . . . . . . . . . . . . . . .
1.6. Producto cartesiano . . . . . . . . . . . . . . . . . .
1.7. Relaciones y Funciones . . . . . . . . . . . . . . . .
de funciones . . . . . . . . . .
1.7.1. Composicion

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

1
2
4
8
10
11
13
13
17
19
19
21
21
22
25
27
28
29
33
35
38

2. Smbolos y Alfabetos
2.1. Smbolos . . . . . . . . . . . . . . . . . . . . . . . .
2.1.1. Smbolos en DrRacket . . . . . . . . . . . .
2.2. Alfabetos . . . . . . . . . . . . . . . . . . . . . . . .
2.2.1. Verificar un alfabeto . . . . . . . . . . . . .
2.2.2. La pertenencia de un smbolo a un alfabeto
2.2.3. Cardinalidad de un alfabeto . . . . . . . . .
2.2.4. Subalfabeto . . . . . . . . . . . . . . . . . .
2.2.5. Igualdad en alfabetos . . . . . . . . . . . . .

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

41
41
41
43
44
46
46
47
48

3. Palabras y Lenguajes
3.1. Palabras . . . . . . . . . . . . . . . . . . . .
3.1.1. La palabra vaca . . . . . . . . . . .
3.1.2. Igualdad en las palabras . . . . . .
3.1.3. Palabras de un alfabeto . . . . . . .
3.1.4. Alfabeto de una palabra . . . . . .
3.1.5. Longitud de una palabra . . . . . .
3.2. Operaciones con palabras . . . . . . . . . .
de palabras . . . . .
3.2.1. Concatenacion
3.2.2. Escribir en una palabra . . . . . . .
3.2.3. Potencia de una palabra . . . . . .
3.2.4. Prefijo y sufijo . . . . . . . . . . . .
3.2.5. Subpalabras . . . . . . . . . . . . .
3.2.6. Palabra inversa . . . . . . . . . . .
3.3. Lenguajes . . . . . . . . . . . . . . . . . . .
3.3.1. Alfabeto inducido por un lenguaje
3.3.2. Lenguaje Nulo . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

49
49
50
51
52
53
53
54
54
56
58
59
61
63
64
66
66

III

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

3.3.3. El lenguaje identidad . . . . . . . . . . . . . .


3.3.4. Lenguaje unitario . . . . . . . . . . . . . . . .
3.3.5. La pertenencia de una palabra a un lenguaje
3.3.6. Sublenguaje . . . . . . . . . . . . . . . . . . .
3.3.7. Lenguajes iguales . . . . . . . . . . . . . . . .
3.4. Operaciones con lenguajes . . . . . . . . . . . . . . .
de lenguajes . . . . . . . . . .
3.4.1. Concatenacion
3.4.2. Potencia de un lenguaje . . . . . . . . . . . .
3.5. Cerradura de Kleene . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

4. Automatas
finitos determinstas

4.1. Generalidades de automatas


. . . . . . . . . . . . . . . . . .
4.1.1. Reconocedor de palabras validas . . . . . . . . . . .

4.1.2. Automatas
en procesamiento de lenguaje natural . .

4.1.3. Estacionamiento autonomo


para vehculos . . . . . .
4.1.4. Otras aplicaciones . . . . . . . . . . . . . . . . . . . .
4.2. Automatas finitos deterministas . . . . . . . . . . . . . . . .
4.2.1. Los afd % como una clase . . . . . . . . . . . . . . . .
de transicion
. . . . . . . . . . . . . . . .
4.2.2. La funcion
4.3. Representaciones de los afd % . . . . . . . . . . . . . . . . .
4.3.1. Tablas de transiciones . . . . . . . . . . . . . . . . . .
4.3.2. Grafos de transiciones . . . . . . . . . . . . . . . . .
4.3.3. Transiciones en formato texto . . . . . . . . . . . . .
extendida del afd % . . . . . . . . . . . . . . . . .
4.4. Transicion
extendida
4.4.1. Clases de congruencia sobre la transicion
4.5. Clase de congruencia de las palabras aceptadas . . . . . . .
4.6. El lenguaje de un afd % . . . . . . . . . . . . . . . . . . . . .
4.6.1. Las palabras propias . . . . . . . . . . . . . . . . . .
4.6.2. Las palabras impropias . . . . . . . . . . . . . . . . .
4.7. Resumen metodos del afd % . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

79
. 79
. 80
. 81
. 81
. 82
. 82
. 84
. 86
. 88
. 88
. 89
. 91
. 93
. 95
. 97
. 99
. 100
. 101
. 102

5. Automatas
no determinstas
de los afn % . . . . . . . . . .
5.1. Presentacion
5.1.1. Ejemplo de un afn % . . . . . . . . .
formal de un afn % . . .
5.1.2. Definicion
5.1.3. Atributos de afn % . . . . . . . . . .
5.1.4. La tabla de transiciones de un afn %
5.1.5. afn % como listas de transiciones .
5.1.6. Los metodos informativos . . . . .
de transicion

5.2. La funcion
. . . . . . . . . .
de transicion
extendida . . . .
5.3. La funcion
5.4. El lenguaje del afn % . . . . . . . . . . . . .
5.4.1. Palabras aceptadas . . . . . . . . .
5.4.2. Palabras propias . . . . . . . . . . .
5.4.3. Palabras impropias . . . . . . . . .
5.5. Equivalencia entre afn % y afd % . . . . . .
afn % afd % . . . . . .
5.5.1. Conversion

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

67
68
68
69
71
72
72
73
74

107
107
108
108
108
110
110
113
113
114
116
117
117
118
118
118

Definiciones DrRacket
. . . . . . . . . . . . . . . . . . . . . .
1.1. La negacion

1.2. La conjuncion
. . . . . . . . . . . . . . . . . . . .

1.3. La disyuncion
. . . . . . . . . . . . . . . . . . . .
1.4. El conjunto vacio . . . . . . . . . . . . . . . . . .
1.5. Predicado para verificar el conjunto vaco . . . .
1.6. La pertenencia de un elemento a un conjunto . .
1.7. La cardinalidad de un conjunto . . . . . . . . . .
1.8. El cuantificador universal . . . . . . . . . . . . .
1.9. El cuantificador existencial . . . . . . . . . . . . .
1.10. Subconjunto de un conjunto . . . . . . . . . . . .
1.11. Subconjunto propio de un conjunto . . . . . . . .
1.12. Conjuntos iguales . . . . . . . . . . . . . . . . . .
1.13. Agregar un elemento a un conjunto . . . . . . . .
de dos conjuntos . . . . . . . . . . . . .
1.14. La union
de dos conjuntos . . . . . . . . . .
1.15. La interseccion
1.16. La diferencia de conjuntos . . . . . . . . . . . . .
1.17. El conjunto potencia de un conjunto . . . . . . .
de pares . . . . . . . . . . . . . . .
1.18. Manipulacion
1.19. El producto cartesiao de dos conjuntos . . . . . .

1.20. Verificar la validez de una relacion


. . . . . . . .

1.21. Imagen de un elemento bajo una relacion


. . . .
es una funcion
. . . . .
1.22. Determina si una relacion
de funciones . . . . . . . . . . . . .
1.23. Composicion
2.1. El alfabeto vaco . . . . . . . . . . . . . . . . . . .
2.2. Determinar si un alfabeto es el alfabeto vaco . .
de un alfabeto . . . . . . . . . . . . .
2.3. Verificacion
2.4. Subalfabeto . . . . . . . . . . . . . . . . . . . . . .
2.5. Verificar igualdad en alfabetos . . . . . . . . . . .
3.1. Predicado para detectar una palabra . . . . . . .
3.2. La palabra vaca . . . . . . . . . . . . . . . . . . .
de palabra vaca . . . . . . . . . . . .
3.3. Verificacion
de palabras iguales . . . . . . . . . .
3.4. Verificacion
3.5. El alfabeto de una palabra . . . . . . . . . . . . .
3.6. Longitud de una palabra . . . . . . . . . . . . . .
3.7. Concatenar palabras . . . . . . . . . . . . . . . . .
3.8. Escribir por izquierda . . . . . . . . . . . . . . . .
3.9. Escribir por derecha . . . . . . . . . . . . . . . . .
3.10. Potencia de una palabra . . . . . . . . . . . . . . .
3.11. Prefijo de una palabra . . . . . . . . . . . . . . . .
3.12. Sufijo de una palabra . . . . . . . . . . . . . . . .
3.13. Subpalabra de una palabra . . . . . . . . . . . . .
3.14. Componentes de una palabra . . . . . . . . . . .
3.15. Palabra inversa . . . . . . . . . . . . . . . . . . . .
3.16. Alfabeto inducido por lenguaje . . . . . . . . . .
3.17. El lenguaje nulo . . . . . . . . . . . . . . . . . . .
del lenguaje nulo . . . . . . . . . . .
3.18. Verificacion
3.19. El lenguaje identidad . . . . . . . . . . . . . . . .
3.20. Predicado para determinar el lenguaje identidad
3.21. El lenguaje unitario de un alfabeto . . . . . . . .
3.22. Pertenencia de una palabra a un lenguaje . . . . .
V

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

4
6
6
8
9
11
12
14
18
19
20
21
23
26
27
29
32
33
35
36
36
37
38
43
44
45
47
48
50
50
51
52
53
54
55
57
58
59
60
61
62
63
63
66
66
67
67
67
68
69

3.23. Determinar que un lenguaje es sublenguaje de otro


3.24. Igualdad entre lenguajes . . . . . . . . . . . . . . .
de lenguajes . . . . . . . . . . . .
3.25. La concatenacion
3.26. La potencia de un lenguaje . . . . . . . . . . . . . .
3.27. Cerradura finita de Kleene . . . . . . . . . . . . . .
3.28. La pertenencia una palabra o lenguaje a la Kleene*
de campos en la clase afd % . . . . . . .
4.1. Definicion
4.2. Metodos informativos en la clase afd % . . . . . . .
4.3. Clase afd % completa . . . . . . . . . . . . . . . . .
de campos en la clase afn % . . . . . . .
5.1. Definicion
5.2. Metodos informativos en la clase afn % . . . . . . .
5.3. Metodos informativos en la clase afn % . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

70
72
73
74
76
77
85
85
102
109
113
114


1. Fundamentos matematicos

Contenido

1.1. Logica
matematica . . . . . . . . . . . . . . . . . . . . . . . . .

1.1.1. Combinaciones de expresiones . . . . . . . . . . . . . .

1.2. Conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.2.1. La pertenencia . . . . . . . . . . . . . . . . . . . . . . . .

10

1.2.2. La cardinalidad . . . . . . . . . . . . . . . . . . . . . . .

11

1.3. Cuantificadores . . . . . . . . . . . . . . . . . . . . . . . . . . .

13

1.3.1. Cuantificador universal . . . . . . . . . . . . . . . . . . .

13

1.3.2. Cuantificador existencial . . . . . . . . . . . . . . . . . .

17

1.4. Operaciones con conjuntos . . . . . . . . . . . . . . . . . . . .

19

1.4.1. Subconjuntos . . . . . . . . . . . . . . . . . . . . . . . .

19

1.4.2. Igualdad de conjuntos . . . . . . . . . . . . . . . . . . .

21

de conjuntos . . . . . . . . . . . . . . . . . . .
1.4.3. Creacion

21

1.4.4. Agregar un elemento a un conjunto . . . . . . . . . . . .

22

de conjuntos . . . . . . . . . . . . . . . . . . . . .
1.4.5. Union

25

de conjuntos . . . . . . . . . . . . . . . . .
1.4.6. Interseccion

27

1.4.7. Diferencia de un conjunto respecto de otro . . . . . . .

28

1.5. El conjunto potencia . . . . . . . . . . . . . . . . . . . . . . . .

29

1.6. Producto cartesiano . . . . . . . . . . . . . . . . . . . . . . . . .

33

1.7. Relaciones y Funciones

. . . . . . . . . . . . . . . . . . . . . .

35

de funciones . . . . . . . . . . . . . . . . .
1.7.1. Composicion

38

Para el estudio de los lenguajes formales y automatas


se requieren algunas
La programacion
la
herramientas de matematicas discretas y de programacion.

necesitamos para desarrollar modelos computacionales de todos los objetos teoricos de matematicas discretas que se requieren.

Vamos a necesitar elementos de logica


matematica, de conjuntos, relaciones
en este libro utilizaremos un enfoque
y funciones. De parte de la programacion,
funcional, basado en DrRacket, porque es un lenguaje computacional que es muy
sencillo de aprender y es sumamente simple, que solamente hce falta un poco
para darse cuenta de que se dedica mas tiempo para plasmar las
de atencion

ideas relacionadas a la teora de lenguajes formales y automatas,


que a aprender
palabras clave del propio lenguaje.
a algunos de los temas de maEn este captulo haremos una introduccion
tematicas discretas suponiendo que no hay conocimientos previos del lenguaje,
as que este captulo introductorio es como un tutorial de DrRacket.
Te aconsejo hacer todas las actividades, hay actividades donde tendras que
hacer programas en DrRacket, en otras actividades tendras que apoyarte en definiciones hechas anteriormente y en general se trata de un curso interactivo,
es lo mas importante.
donde tu participacion
1

CAPITULO
1. FUNDAMENTOS MATEMATICOS

1.1.

Logica
matematica

que se preEn DrRacket as como en cualquier lenguaje de programacion

cie de ser un buen lenguaje de proposito


general, hay expresiones primitivas, o
simplemente primitivas.
Nuestro lenguaje base DrRacket, usa expresiones para determinar el construir el programa; nosotros como personas usamos expresiones para poder comunicarnos con otras personas, estas expresiones deben estar basadas en un lenguaje
para que los demas puedan entendernos. Ahora, cuando tratamos de comunicarnos con la computadora, para que esta realice los procedimiento que deseamos
que haga, necesitamos utilizar expresiones en un lenguaje que sirva para que esta
[la computadora] entienda lo que queremos. DrRacket es el lenguaje y en lo que
sigue aprenderemos a usar expresiones para comunicarnos con la computadora.
A las expresiones que utiliza DrRacket las llamaremos rExpresiones.
Las primeras expresiones primitivas que aprenderemos son los valores de
verdad. Conocemos solamente dos valores de verdad, el falso y el verdadero. El
Falso es #f; Verdadero es #t.
valor falso lo escribimos como #f, y el verdadero lo escribimos como #t.
DrRacket se maneja en un ciclo que se llama REPL, que son siglas en ingles y
significa Ciclo Leer, Evaluar, Imprimir (Read Evaluate Print Loop), esto
en espanol
que analiza la computadora, primero se lee, luego se
significa que cada expresion
y el resultado se imprime, o se utiliza como entrada para un nuevo ciclo.
evalua
De modo que las expresiones #t y #f como son verdaderas expresiones en
DrRacket, deben ser ledas, evaluadas y su valor calculado debe imprimirse, para

luego considerar ese valor para una siguiente evaluacion.


Ejemplo 1-1
de interacciones escribiremos los valores de verdad para descuEn la seccion
brir el valor que producen una vez que son ledos.
#t
> #t
#f
> #f

En el ejemplo anterior descubrimos que el valor de #t es #t, y el valor de #f

es #f, esto significa que son datos primitivos y no hace falta ninguna evaluacion.
El valor de un dato primitivo es e l mismo.

En DrRacket hay datos primitivos que son los numeros


como 0, 5.4; las cadenas de texto encerradas entre comillas como hola mundo; los smbolos pre
cedidos por un apostrofe
como en x, entre otros.
es una expresion
en DrRacket. En adelante tomaremos como
Una rExpresion

sinonimos
los terminos rExpresion y expresion. Usaremos rExpresion para hacer

1.1. LOGICA
MATEMATICA

utilizada en el lenguaje DrRacket, pero por sime nfasis en que es una expresion
plicidad generalmente utilizaremos expresion. En DrRacket hay principalmente
dos tipos de expresiones:

Primitivas: Como #t o #f, pero tambien los numeros


como 10, 24.483, o como
las cadenas de caracteres entre comillas como hola mundo, y tambien

los smbolos con un apostrofe


que le antecede como en nombre-variable.
Compuestas: Las expresiones compuestas se encriben agrupando smblos en no compuesta empieza con
prefija. Como regla general una expresion
tacion

un operador y el resto son sus operandos, siguiendo un patron


(opdr opnd ... opnd)

Ejemplo 1-2
Expresiones primitivas
falso ; Es una cadena de texto
3.14159 ; Es un n
umero
Expresiones compuestas
(+ 8 10); 8 + 10
(> 10 28); 10 > 28

que puede ser evaluada o


proposicional es una rExpresion
Una expresion
bien como #t o #f, pero ni ambas al mismo tiempo, ni ninguna al mismo tiempo.
Las expresiones proposicionales pueden ser primitivas o compuestas. Utilizaremos el smbolo 7 para decir es evaluado como, produce o tambien significa.

Ejemplo 1-3
Los siguientes ejemplos son expresiones proposicionales en DrRacket.
1. #t ; Es primitiva
2. #f ; Es primitiva
3. (= 4 4) 7 #t ; 4 = 4 produce verdadero
4. (= 14 5) 7 #f ; 14 = 5 produce falso
5. (> (+ 2 2) (* 2 2)) 7 #f

CAPITULO
1. FUNDAMENTOS MATEMATICOS

1.1.1.

Combinaciones de expresiones

Las expresiones (primitivas o compuestas) se pueden combinar para formar


otras expresiones. La manera de combinarlas es utilizar un operador y considerar
expresiones primitivas o compuestas como operandos. El resultado siempre es
compuesta.
una expresion

Ejemplo 1-4
Consideremos las siguientes expresiones
3 ; Expresi
on primitiva, es un n
umero
4 ; Expresi
on primitiva, es un n
umero
(= 3 4) ; Expresi
on compuesta.
(= 4 (+ 2 2)); 4 = (2 + 2) es una expresi
on compuesta

Las expresiones proposicionales tambien se pueden combinar utilizando los


solamente veremos los operadores de

operadores logicos.
En esta introduccion
conjuncion,
disyuncion
y la condicional. Las expresiones proposicionanegacion,
les cuyo valor de verdad depende del valor de verdad de uno o mas componentes
que en principio pueden ser desconocidos, se llama predicado.

Negacion
proposicional, (neg p) es otra expresion
proposicioSi p es una r-expresion
nal que tiene un valor de verdad diferente a p. (neg p) es un predicado porque
no podemos determiar el valor de verdad hasta que se sepa el valor de verdad de
p.
DrRacket para determinar el valor de verAs podemos crear una definicion
de una proposicion.

dad de la negacion
Codigo 1.1: La negacion
1
2
3
4
5

; (neg Booleano) 7 Booleano?


; Ej (neg #t) 7 #f : La negaci
on de #t produce #f
(define neg
( (p)
(if p #f #t)))

Las definiciones de procedimientos en DrRacket tienen tres partes:

1. La palabra clave define, esto indica a la computadora que se va a crear un


nuevo concepto.

1.1. LOGICA
MATEMATICA

2. El identificador nombreQueIdentifica, es una secuencia de smbolos que


identifican el procedimiento que se va a definir, con este nombre podemos
que realiza el procedimiento
saber la funcion
, que es un procedimiento con parametros o sin ellos, es
3. una expresion
que incuye mas r-expresiones que se evaluan

una r-expresion
para realizar
especfica.
la funcion

Actividad 1-1
en el segmento de codigo

Identifica los elementos de una definicion


1.1:
Palabra clave:
Nuevo concepto:
Significado:

booleana, es decir una


El formato establece que debe haber una expresion
en DrRacket que al ser evaluada produzca un valor de verdad. Luego
expresion
que se evalua
unicamente

la <rExpresi
on> es una expresion
cuando <expresi
on
de la <rExpresi
booleana> 7 #t, una vez terminada la evaluacion
on>, el resto
se omite; por otro lado, si <expresi
on booleana> 7 #f la parte que se omite es
es la <rExpresi
la rExpresi
on, y la parte que se evaua
on-Alternativa>.

Conjuncion
es un operador logico

con dos expresiones proposiLa conjuncion


que actua
logica

cionales. Podemos definir la conjuncion


del siguiente modo.
de p con q es una nueSi p y q son expresiones proposicionales, la conjuncion
proposicional y se escribe (y p q). El valor de verdad de (y p q)
va expresion
se describe en los siguientes casos.
(y p q)7 #t, si ambas proposiciones p y q son #t.
(y p q)7 #f, si al menos una de las proposiciones es #f.
tiene solo
uno de dos posibles valores
Considerando que cada proposicion
de verdad, tenemos los cuatro casos mostrados en la siguiente tabla de verdad:

caso 1:
caso 2:
caso 3:
caso 4:

p
#t
#t
#f
#f

q
#t
#f
#t
#f

(y p q)
#t
#f
#f
#f

CAPITULO
1. FUNDAMENTOS MATEMATICOS

(y p q) es verdadera porque tanto p como


Solo en el caso 1 la r-expresion
q son expresiones verdaderas, en los demas casos una o ambas expresiones son
falsas.
Codigo 1.2: La conjuncion
1
2
3
4
5

; (y Booleano Booleano) 7 Booleano


; (y #t #f) 7 #f
(define y
( (p q)
(if p q #f)))

Probar el codigo
es una tarea que se realiza en el a rea de interacciones en
el interprete de DrRacket, probaremos cada una de las cuatro combinaciones.
Cuando se dice
> (y
#t
> (y
#f
> (y
#f
> (y
#f

#t #t); caso 1
#t #f); caso 2
#f #t); caso 3
#f #f); caso 4

Disyuncion
es un predicado que considera expresiones proposicionales y
La disyuncion
proposicional que tiene un valor de verdad #t, si al
genera una nueva expresion
menos una de las expresiones proposicionales pasadas como argumento es #t;
con valor #f, si todas las proposiciones pasadas como
y genera una expresion
argumento son #f.
suele llamarse simplemente o, para referirse a que se toma
A la disyuncion
el valor de verdad de uno o el otro valor de verdad que sea #t. El procedimiento
(o p q)
se ejecuta mediante una r-expresion

Para tener una idea clara y completa del comportamiento de la disyuncion


veamos lo que ocurre con las cuatro combinaciones de valores de verdad y que se
muestran en la siguiente tabla de verdad.

caso 1:
caso 2:
caso 3:
caso 4:

p
#t
#t
#f
#f

q
#t
#f
#t
#f

(o p q)
#t
#t
#t
#f

de la disyuncion
que considera solamente dos expreUna implementacion
siones proposicionales es la que sigue:
Codigo 1.3: La disyuncion
1

; (o Booleano Booleano) 7 Booleano

1.1. LOGICA
MATEMATICA
2
3
4
5

; (o #t #f) 7 #t
(define o
( (p q)
(if p #t q)))

Probemos cada uno de los cuatro casos:


(o #t
> #t
(o #t
> #t
(o #f
> #t
(o #f
> #f

#t); caso 1
#f); caso 2
#t); caso 3
#f); caso 4

La condicional

Un tercer operador logico


es la condicional. La condicional tambien recibe
nombres como implicacion, Si ... entonces ..., Una condicion necesaria para ..., etcete siempre que se verifique una
ra. Establece la necesidad de verificar una expresion
base.
condicion
escrita
Si p y q son r-expresiones booleanas, la condicional es una rExpresion
como (-> p q) que adquiere su valor de verdad dependiendo del valor de verdad que tengan las expresiones p y q, las cuales aparecen en la tabla de verdad
siguiente:

caso 1:
caso 2:
caso 3:
caso 4:

p
#t
#t
#f
#f

q
#t
#f
#t
#f

(-> p q)
#t
#f
#t
#t

En la condicional reconocemos tres proposiciones:

1. El primer operando que aqu lo hemos denotado por p, se le conoce como

el antecedente o hipotesis
de la implicacion.
2. El segundo operando que hemos identificado como q, se le conoce como el

consecuente o tesis de la implicacion.


(-> p q) es la condicional que tambien se conoce como
3. Toda la expresion

implicacion.

Notamos que la condicional es #f unicamente en el caso cuando el antecedente es falso y el consecuente es verdadero, que en la tabla de verdad se ha
identificado con el caso 2.

CAPITULO
1. FUNDAMENTOS MATEMATICOS

debemos considerar nuevamente la tabla de


Para hacer la implementacion
verdad, para hacer notar los casos que queremos resaltar vamos a reescribir la
tabla:

caso 1:
caso 2:
caso 3:
caso 4:

p
#t
#t
#f
#f

q
#t
#f
#t
#f

(-> p q)
#t
#f
#t
#t

En los primeros dos casos p 7 #t, y en los siguientes dos casos p 7 #f,
as podemos utilizar este hecho para determinar dos diferentes casos y utilizar
if, y en el caso en que p 7 #t, la expresion
a evaluar debe tener
una expresion
q (hay que ser observadores), y cuando p 7 #f la
el mismo valor que la expresion
a evaluar es la primitiva #t.
expresion
1
2
3
4
5

; (-> Booleano Booleano) 7 Booleano


; (-> (= 4 4) (= 4 3)) 7 #t.
(define ->
( (p q)
(if p q #t)))

1.2.

Conjuntos

de objetos. As simplemente. Cualquier agruUn conjunto es una agrupacion


de cualquier tipo de objetos es un conjunto. Y aquellos objetos que son
pacion
considerados parte del conjunto se dice que pertenecen al conjunto y se dice que
son elementos del conjunto.
si no hay agrupacion
alguna, todava hay un conjunto. Se llama el conAun
junto vaco. El conjunto vaco de personas es exactamente el mismo que el conjunto vaco de naranjas, o el conjunto vaco de letras, etcetera. Todos estos ejemplos
son el conjunto vaco.
En DrRacket consideraremos el conjunto vaco como una lista sin elementos:
Codigo 1.4: El conjunto vacio
1
2
3

;; Se utiliza la lista vacia como el conjunto vacio


;; Se crea un nombre adecuado para llamarlo
(define conjuntoVacio ()); Se define el conjunto vacio

En general, para definir conjuntos, o cualquier otro tipo de dato utilizamos


abstracciones de datos en DrRacket. Esto se hace escribiendo definiciones de
acuerdo con el siguiente formato, que es el mismo formato con el que se definen
las abstracciones de datos, y es que en DrRacket las funciones son ciudadanos de
primera clase, y gozan de los mismos privilegio que los datos.

(define <nombreIdentificadorConcepto> <definici


on>)

1.2. CONJUNTOS

Actividad 1-2
1
2
3
4
5

(define card-v2
( (A c)
(if (empty? A)
c
(card-v2 (cdr A) (+ c 1)))))

anterior e identifica cada parte de la definicion


de
Considera la definicion

datos en la definicion.
Palabra clave:
Nuevo concepto:
Significado:

util
en el
Para verificar que un conjunto no tiene elementos (una condicion
futuro) vamos a crear un predicado conjuntoVacio? que requiere un conjunto
y cuyo valor de verdad depende de los elementos del conjunto. Si A es un conjunto que no tiene elementos, entonces (conjuntoVacio? A) 7 #t; mientras que
(conjuntoVacio? A) 7 #f cuando el conjunto A tiene al menos un elemento.
DrRacket tiene un predicado que verifica que una lista sea la lista vaca, se
que deseamos. Nuevamente haremos un sinoni
llama empty? y realiza la funcion
que nos permita entender mucho mejor el codigo

mo en espanol
generado. Escri
bir sinonimos
no aumenta la complejidad del programa, y s aumenta el poder
expresivo.
Codigo 1.5: Predicado para verificar el conjunto vaco
1
2
3
4
5

;; Se define un sin
onimo para determinar el conjunto vacio
;; (conjuntoVacio Conjunto?) 7 Booleano?
;; (conjuntoVacio ()) 7 #t
;; (conjuntoVacio (a)) 7 #f
(define conjuntoVacio? empty?)

DrRacket utiliza el predicado empty? para verificar que una lista es vaca.
En definiciones posteriores tendremos la necesidad de utilizarla para verificar
as que es bueno hacer la
conceptos similares pero en diferente interpretacion,
diferencia desde ahora, creando este procedimiento especfico para conjuntos.
Ejemplo 1-5
Si suponemos un conjunto con los elementos a, b, c, d, podemos identifi
carlo con un nombre, digamos conjuntoA. Podemos as crear una abstraccion
para este conjunto como
1

(define conjuntoA (a b c d))

As podemos utilizar el nombre conjuntoA para referirnos al conjunto que contiene a los elementos a b c y d. Sera util crear un procedimiento para verificar
la pertenencia.

Usaremos las letras mausculas


para denotar los conjuntos,
como A, B, etc. y utilizaremos

las letras minusculas


para los
elementos de los conjuntos,
como e, x, etc.

CAPITULO
1. FUNDAMENTOS MATEMATICOS

10

1.2.1.

La pertenencia

que hacen
Todos los elementos que pertenecen al conjunto tienen en comun
que el predicado (pertenece? x A) 7 #t. El predicado pertenece? es evaluado
como #t cuando el elemento x se encuentra entre los elementos del conjunto A.
Para crear un procedimiento que verifique la pertenencia de un elemento x a
un conjunto A, debemos recordar que los conjuntos has sido modelados con listas.
Las listas en DrRacket pueden ser de una forma de las dos posibles:

(a) Si no tienen elementos son de la forma (). Es el conjuntoVacio.


(b) Si tiene al menos un elemento, una lista siempre tiene dos partes:
(i) El primer elemento de la lista, que es el car de la lista,
(ii) El resto de los elementos de la lista, que es el cdr de la lista. El cdr
forma una nueva lista que puede ser la lista vaca o tener al menos un
elemento.

Cuando el conjunto tenga al menos un elemento, ocasionalmente vamos a


hacer referencia al primer elemento y al resto de los elementos. en los conjuntos el
orden no es importante, el diferentes procedimientos vamos a realizar actividades
con cada elemento del conjunto y se van a considerar en un orden implcito. Los
El car es el primer elemento.
conjuntos que tienen al menos un elemento los vamos a denotar como
El cdr es una lista que contiene
al resto de los elementos

(a0 |A0 ),
(a0 |A0 )se
donde a0 es el car del conjunto, y A es el cdr del conjunto. La notacion
ha establecido para indicar que el conjunto no es vaco.

Actividad 1-3
En los siguientes conjuntos (modelados con listas), encierra en un crculo el
car y subraya el cdr.
1. (1 2 3 4)
2. (a b c)
3. (seno coseno)
4. (x)
5. ()

1.2. CONJUNTOS

11

> (car (1 2 3 4))


1
> (cdr (1 2 3 4))
(2 3 4)
> (car (x))
x
> (cdr (x))
()
> (car ())
Error!: El conjunto vac
o no tiene car
> (cdr ())
Error!: El conjunto vac
o no tiene cdr

de deterAhora vamos a implementar un procedimiento que tenga la funcion


minar si un elemento pertenece a un conjunto. El conjunto debe estar definido
extensionalmente, esto es, dando una lista explcita de los elementos que pertenecen al conjunto.
necesitamos el elemento que debe ser buscado diPara la implementacion
gamos e (de elemento), y el conjunto en donde debe ser localizado digamos A.
Entonces cuando el elemento e se ha localizado entre los elementos del conjunto
A (pertenece? e A) 7 #t; y contrariamente (pertenece? e A) 7 #f cuando el
elemento e no se ha localizado entre los elementos del conjunto A.
Codigo 1.6: La pertenencia de un elemento a un conjunto
1
2
3
4
5
6
7

; (pertenece? Cualquiera Conjunto) 7 Booleano


; (pertenece? a (e d s a w)) 7 #t
(define pertenece?
( (e A)
(cond ((conjuntoVacio? A) #f)
((equal? e (car A)) #t)
(else (pertenece? e (cdr A))))))

Actividad 1-4
de pertenece? sustituyendo el significado en
Sigue paso a paso la definicion
cada caso, para saber porque (pertenece? w (a r t w f)) 7 #t

1.2.2.

La cardinalidad

La cardinalidad de un conjunto es justamente el numero


de elementos que
contiene. Es claro que si el conjunto es el conjuntoVacio, entonces su cardinali
dad es 0, porque no tiene elementos. La cardinalidad de un conjunto es un numero entero no negativo. Decimos que un conjunto tiene una cardinalidad infinita
(+infty.0) cuando tiene tantos elementos que no se pueden terminar de contar.
Para determinar la cardinalidad de un conjunto podemos contarlos uno a
uno, empezando desde 0 y aumentando la cardinalidad en uno con el car; luego repetir el procedimiento con el cdr, y continuar as hasta que se alcance el
conjuntoVacio.

CAPITULO
1. FUNDAMENTOS MATEMATICOS

12

Codigo 1.7: La cardinalidad de un conjunto


1
2
3
4
5
6
7
8
9

; Este es un procedimiento auxiliar. Para calcular la cardinalidad


; de un conjunto utilizar la funcion cardinalidad (ver adelante)
; (cardinalidad-aux Conjunto Numero)7 Numero?
; (cardinalidad-aux (1 2 3 4) 0)7 4
(define cardinalidad-aux
( (A res)
(if (conjuntoVacio? A)
res
(cardinalidad-aux (cdr A) (+ res 1)))))

10
11
12
13
14
15
16

; Calcula la cardinalidad de un conjunto


; (cardinalidad Conjunto) 7 Numero?
; (cardinalidad (e r t h a))7 5
(define cardinalidad
( (A)
(cardinalidad-aux A 0)))

auxiliar
Es muy aconsejable utilizar funciones auxiliares. El uso de la funcion

cardinalidad-aux tiene dos propositos:


1. Crear un procedimiento recursivo que tenga comportamiento iterativo (mas
eficiente en terminos computacionales).
2. Permite que el procedimiento cardinalidad tenga el papel estelar, mejorando la interfaz con el usuario, porque solamente requiere un conjunto, en

auxiliar.
lugar de un conjunto y un numero
como en el caso de la funcion
auxliar puede utilizar parametros para llevar el control de los calcuUna funcion
cardinalidad-aux se utiliza
los que se realizan durante el proceso, en la funcion
el parametro res para llevar la cuenta de los elementos.
> (cardinalidad (1 2 3 x y z))
6
> (cardinalidad conjuntoVacio)
0

Actividad 1-5

Estudia el codigo
1.7, notaras que en la lnea 9 hay una llamada recursiva del

procedimiento cardinalidad-aux, escribe el numero


de veces que se tiene

que evaluar la expresion


(cardinalidad-aux (cdr A) (+ res 1))
en cada uno de los siguientes casos:
1. (cardinalidad (2 n d f))
2. (cardinalidad (y w o p s))
3. (cardinalidad (2))
4. (cardinalidad ())

1.3. CUANTIFICADORES

13

Cuando (cardinalidad A) 7 1, es decir que el conjunto A tiene solo un


elemento, decimos que el conjunto A es un conjunto unitario.

Ejemplo 1-6
Los siguientes son ejemplos de conjuntos unitarios.
(0); El conjunto unitario que contiene a 0
(s); El conjunto unitario que contiene a s
(()); El conjunto unitario que contiene al conjunto vac
o

Actividad 1-6
Escribe en DrRacket un predicado que se llame conjuntoUnitario? y
que reciba como argumento un conjunto A, para que devuelva #t si
(cardinalidad A) 7 1, y devuelva #f en cualquier otro caso.

1.3.

Cuantificadores

Utilizamos cuantificadores para aplicar un predicado a los elementos de un


conjunto. Cuando se aplica un cuantificador a los elementos de un conjunto se
tiene un nuevo valor de verdad. Este nuevo valor de verdad depende de los valores de verdad calculados con el predicado sobre cada uno de los elementos del
conjunto.
Estudiaremos dos formas de cuantificadores, el cuantificador universal y el
cuantificador existencial. Ambo tipos son predicados que toman su valor de verdad al evaluar un predicado a un conjunto de elementos.

1.3.1.

Cuantificador universal

El cuantificador universal es un predicado que vamos a identificar como paraTodo; para calcular el valor de verdad se requieren dos elementos:

1. Un predicado que llamaremos P (puede ser incluso un cuantificador).


2. Un conjunto, al que llamaremos dominio, que llamaremos A. Este conjunto
debe estar especificado en forma explcita, dando una lista de cada uno de
sus elementos.

CAPITULO
1. FUNDAMENTOS MATEMATICOS

14

El predicado P se debe aplicar a cada elemento a que (pertenece? a A) 7 #t,


elemento de A, es suficiente para declarar que el
cuando (P a) 7 #f para algun
valor de verdad del paraTodo es falso, as que para que (paraTodo P A) 7 #t,
es necesario que todas las evaluaciones de (P a) hallan sido verdaderas.
1
2
3
4
5
6
7

; (paraTodo Predicado Conjunto) 7 Booleano?


; (paraTodo ( (x) (< x 10)) (0 1 2 3 4 5))
(define paraTodo
( (P A)
(cond ((empty? A) #t )
((P (car A)) (paraTodo P (cdr A)))
(else #f ))))

Para aprovechar las ventajas de DrRacket, y hacer el codigo


mas legible en
haremos un sinonimo

andmap.
espanol,
de la funcion
Codigo 1.8: El cuantificador universal
1
2
3
4
5
6

;; Se define un sinonimo de andmap para modelar el


;; comportamiento del cuantificador universal para todo
;; (paraTodo Predicado Dominio ...) 7 Booleano?
;; (paraTodo ( (x) (>x 10)) (12 14 16)) 7 #t
;; (paraTodo ( (x) (>x 10)) (10 12 14 16)) 7 #f
(define paraTodo andmap)

Vamos a utilizar el cuantificador universal siguiendo el siguiente formato:

(paraTodo <Predicado> <conjuntoDominio>)

lambda) o bien puede


Aqu el predicado puede ser anonimo
(una expresion
ser un identificador asociado a un procedimiento que devuelva un valor booleano.
Ejemplo 1-7
en donde uno de los requeriImagina que estas desarrollando una aplicacion
mientos dice:
todos los puertos de lectura estan cerrados, entonces es sistema es seguro.
Este requerimiento se cumple cuando se consideran las circustancias en las
que el sistema es seguro. Una manera descuidada de implementarlo es con
condicional:
una expresion
(if (cerrados? todosPuertosSalida)
Sistema-seguro
Sistema-en-riesgo)

de decision:

Es descuidada porque no es suficientemente clara la expresion


(cerrados? todosPuertosSalida)
de que aun
puede invocarse otro procedimiento
aqu se tiene la impresion
para determinar que efectivamente todos los puertos de salida esten cerrados.

1.3. CUANTIFICADORES

15

Un modo mas cuidadoso de modelar el requerimiento mostrado en el ejemplo 1-7 es utilizando un cuantificador universal. Darnos cuenta de que necesitamos utilizar un cuantificador es sencillo una vez que nos damos cuenta de que se
debe verificar un predicado en cada uno de los elementos de un dominio. En el
caso del ejemplo 1-7, el predicado que se tiene que verificar es esta cerrado?, y se
debe verificar sobre cada uno (no sobre todos1 ) de los elementos del dominio
que esta conformado por los puertos, pero no todos los puertos, sino solamente
aqueellos que son de entrada.
Ejemplo 1-8
en donde uno de los requeriImagina que estas desarrollando una aplicacion
mientos dice:
Si todos los puertos de lectura estan cerrados, entonces es sistema es
seguro.
Un modo mas adecuado es con un cuantificador universal.
(paraTodo
( (puertoDeSalida) (cerrado? puertoDeSalida))
conjuntoPuertosDeSalida)

El resultado sera #t, si se verifica que cada uno de los puertos de salida esten

cerrados, pero basta un unico


caso contrario para que el resultado sea #f.

Pongamos a prueba lo que hemos dicho.


Actividad 1-7
y descubre cada una de las tres partes que
Considera la siguiente expresion
paraTodo.
conforman la expresion
(paraTodo
( (x) (> (* 2 x) (cuadrado x)))
(10 15 20 25 30 35 40))

Palabra clave:
Predicado:
Dominio:

Estudiemos ahora un ejemplo mas especfico. Consideremos la expresion


descrita en el ejemplo 1-7, y veamos con detalle que produce. El segmento de

para una mayor comodidad.


codigo
lo reescribire a continuacion
(paraTodo
( (x) (> (* 2 x) (cuadrado x)))
(20 35 60))
1 Esto ocasiona el descuido de modelarlo con una expresion
condicional, porque en realidad no se
toman todos los elementos juntos, sino cada uno en su turno.

CAPITULO
1. FUNDAMENTOS MATEMATICOS

16

Como el predicado ( (x) (> (* 2 x) (cuadrado x))) se debe aplicar a


cada elemento del dominio, significa que debemos verificar que realmente:
1. (( (x) (>

(*

2 x) (cuadrado

x))) 20) 7 #t, y

2. (( (x) (>

(*

2 x) (cuadrado

x))) 35) 7 #t, y

3. (( (x) (>

(*

2 x) (cuadrado

x))) 60) 7 #t.

Sustitumos el smbolo x por el valor que debe ser evaluado y hacemos las
operaciones que corresponden.
1. (> (* 2 20) (cuadrado 20)) 7 ?, y
2. (> (* 2 35) (cuadrado 35)) 7 ?, y
3. (> (* 2 60) (cuadrado 60)) 7 ?.
El smbolo ? significa que no sabemos hasta el momento el significado de la
por lo que habra que evaluar la expresion,
empecemos por la primera:
expresion
1 : (>
1.a : (>
1.b : (>
1.c : (>

(* 2 20) (cuadrado 20)) 7 ?


40 (cuadrado 20)) 7 ?
40 400) 7 ?
40 400) 7 #f

suficiente para decir que


Como(> 40 400) 7 #f es una razon
(paraTodo
( (x) (> (* 2 x) (cuadrado x)))
(20 35 60))7 #f

Actividad 1-8

Calcula el valor de verdad de la expresion


(paraTodo
( (x) (= (- (* 3 x) (* 24 x)) (- x (* 8 x))))
(3 6 9 22 81 928))

1.3. CUANTIFICADORES

1.3.2.

17

Cuantificador existencial

El cuantificador existencial es un predicado, esto dice que es una expresion


que significara un valor de verdad una vez que se conozcan todos los valores
necesarios. Al igual que el cuantificador universal, requiere dos elementos, un
con cada elemento
predicado y un conjunto de elementos. El predicado se evalua
del conjunto que tambien se conoce como dominio.
A diferencia del cuantificador universal, en el cuantificador existencial se re del predicado resulte ser verdadero para que
quiere que al menos una evaluacion
del cuantificador existencial
la evaluacin existencial sea verdad. Si la evaluacion

valor del dominio hizo que la evaluacion


resulto ser falso, significa que ningun
del predicado fuera #t.

la informacion
cuantificador existencial utilizaPara edntender como
evalua
remos el siguiente concepto:
(existeUn
( (P A)
(cond ((conjuntoVacio? A) #f )
((P (car A)) #t )
(else (existeUn P (cdr A))))))

Notemos en los tres casos, los dos primeros corresponden a casos base y el

ultimo
es un caso recursivo porque se hace una llamada al mismo procedimiento.
1. El primer caso es cuando (conjuntoVacio? A) 7 #t, esto sucede porque no
hay elementos en el conjunto de modo que es claro que no existe elemento
alguno que cumpla cualquier propiedad.
2. El segundo caso es cuando (P (car A)) 7 #t. Al evaluar el predicado P
con el primero de los valores del conjunto A, se produce #t, esto es suficiente
como #t.
para terminar el procedimiento y evaluar toda la expresion
3. El tercer caso es la llamada recursiva, aqu es importante observar que la
llamada se realiza con el mismo predicado P, pero con una instancia diferente del conjunto A, de hecho es el mismo conjunto excepto el primer
garantiza que eventualmente se alcanzara el
elemento; esta modificacion
conjunto vaco, que es uno de los casos base, y terminara el procedimiento.
Ejemplo 1-9
(existeUn (

(x) (> x 100)) (2 20 200 2000))

El predicado es ( (x) (> x 100))


El dominio es (2 20 200 2000)
(existeUn ( (x) (> x 100)) (2 20 200 2000)) 7 #t porque existe
un elemento en el dominio (2 20 200 2000), que es 200 que hace que
(> x 100) 7 #t.

CAPITULO
1. FUNDAMENTOS MATEMATICOS

18
Ejemplo 1-10
> (existeUn (
#t
> (existeUn (
#f
>

(x) (> x 10)) (8 9 10 11))


(x) (> x 12)) (8 9 10 11))

El modelo de este concepto lo haremos basados en la primitiva ormap que ya


al lenguaje solaesta implementada en DrRacket, y escribimos una adecuacion
mente.

Codigo 1.9: El cuantificador existencial


1
2
3
4
5
6

;; Se define un sinonimo de ormap para modelar el


;; comportamiento del cuantificador exisencial
;; (existeUn Predicado Dominio ...) 7 Booleano?
;; (existeUn ( (x) (<x 10)) (12 14 16)) 7 #f
;; (existeUn ( (x) (<x 10)) (10 12 14 16)) 7 #t
(define existeUn ormap)

Para evaluar un cuantificador existencial se debe evaluar el predicado en


del predicado P
cada elemento, y continuar evaluando mientras la evaluacion
con uno de los elementos del dominio, produzca valor #f.

Ejemplo 1-11
(existeUn (

(x) (> x 100)) (2 20 200 2000))

(( (x) (>

x 100)) 2) 7 #f

(( (x) (>

x 100)) 20) 7 #f

(( (x) (>

x 100)) 200) 7 #t

(existeUn (

(x) (> x 100)) (2 20 200 2000))7 #t

porque ya no hay necesidad,


Notemos que el ultimo
valor 2000 no se evalua,
puesto que ya se encontro un valor que hace #t el predicado.

1.4. OPERACIONES CON CONJUNTOS

19

Actividad 1-9
evaluando los eleCalcula detalladamente el valor de verdad de la expresion,
mentos del dominio que sean necesarios.
(existeUn
( (x) (= (- (* 3 x) (* 24 x)) (- x (* 8 x))))
(13 61 9 24 89 920))

1.4.

Operaciones con conjuntos

estudiaremos como

En esta seccion
comparar conjuntos, crear conjuntos, ha
cerlos crecer, y como
combinarlos para formar nuevos conjuntos con caractersticas particulares.

1.4.1.

Subconjuntos

Si A y B son conjuntos, decimos que el conjunto A es subconjunto del conjunto


B, cuando todos los elementos de A pertenecen al conjunto B.
se puede ser implementada en DrRacket considerando la perEsta definicion
tenencia de un elemento a un conjunto (ver la pagina 11), ya que se debe verificar
que todos los elementos del conjunto A pertenezcan al conjunto B.
Entonces tenemos un predicado pertenece? que debe ser verificado en cada
uno de los elementos de un conjunto A, el valor que produce debe ser #t, si todos
los elementos del dominio A, cumplen que pertenecen al conjunto B. Esto nos
para decidir implementar el predicado
debe llamar poderosamente la atencion
subconjunto? mediante un cuantificador universal.
Codigo 1.10: Subconjunto de un conjunto
1
2
3
4
5
6

; (subconjunto? Conjunto Conjunto) 7 Booleano?


; (subconjunto? (1 2 3) (3 8 2 9 1)) 7 #t
; (subconjunto? (1 2 3) (7 8 2 9 1)) 7 #f
(define subconjunto?
( (A B)
(paraTodo ( (a) (pertenece? a B)) A)))

CAPITULO
1. FUNDAMENTOS MATEMATICOS

20
Actividad 1-10

las siguientes expresiones


Evalua
(subconjunto? (2 9 4 0) (4 9 0 2 12 40))
(paraTodo
( (C) (subconjunto? C (1 2 3 4 5 6 7 8 9 10)))
((1 3 5 7)(2 4 6 8 10)(1 5 8 10 12)))
(if (paraTodo
( (C) (subconjunto? C (1 2 3 4 5 6 7 8 9 10)))
((1 3 5 7)(2 4 7 3 6 8 10)(1 5 8 10 2)))
Correcto Error)

Si (subconjunto? A B) 7 #t, entonces B es un superconjunto de A.

Subconjunto propio
Pensemos que A y B son conjuntos y (subconjunto? A B) 7 #t (A es subconjunto de B es cierto), pero tambien sucede que B tiene al menos un elemento que
no pertenece al conjunto A; decimos entonces que A es un subconjunto propio
del conjunto B.
Notemos en primer lugar que (subconjunto? A B) 7 #t, esto dice que al
existe
menos A tiene tantos elementos como B, pero luego hay mas informacion,
al menos un elemento de B que no pertenece a A, esto aclara que B tiene mas
elementos que A.
Vamos a crear un predicado que determine si un conjunto es subconjunto
propio de otro conjunto. Para esto debemos verificar que todos los elementos del
conjunto propuesto pertenecen al otro conjunto.
Nuestro predicado debe:
Recibir como entrada dos conjuntos, el conjunto A que es el supuesto subconjunto propio; y otro conjunto B que es el que debe contener a todos los
elementos de A.
Devolver como salida, #t si A es subconjunto de B, y existe al menos un
elemento de B que no pertenece a A.
Codigo 1.11: Subconjunto propio de un conjunto
1
2
3
4
5
6

;; Determina si un conjunto es subconjunto propio de otro


;; (subconjuntoPropio? Conjunto Conjunto) 7 Booleano?
;; (subconjuntoPropio? (2 5 7) (3 2 4 5 6 7)) 7 #t
(define subconjuntoPropio?
( (A B) ;<-- dos conjuntos en forma de lista
(y (subconjunto? A B)

1.4. OPERACIONES CON CONJUNTOS


7
8

(existeUn (
))

1.4.2.

21

(b) (neg (pertenece? b A))) B))

Igualdad de conjuntos

Sean A y B dos conjuntos. Decimos que los dos conjuntos A y B son conjuntos
iguales si ambos contienen exactamente los mismos elementos. Para determinar
que dos conjuntos (definidos extensionalmente) son contienen los mismos elementos, debemos hacer dos cosas:

1. Verificar que (subconjunto? A B) 7 #t. Esto nos dice que todos los elemen cabe la posibilidad
tos de A pertenecen a B, pero eso no es todo porque aun
que (subconjuntoPropio? A B) 7 #t.
2. Tambien debemos verificar (subconjunto? B A) 7 #t. Esta segunda con sola, dice que todos los elementos de B tamien son elementos de A.
dicion

Si se verifican ambas propiedades, decimos que A y B son conjuntos iguales.


Codigo 1.12: Conjuntos iguales
1
2
3
4
5
6

; (conjuntosIguales? Conjunto Conjunto) 7 Booleano?


; (conjuntosIguales? (2 3 7 8) (8 3 7 2)) 7 #t
(define conjuntosIguales?
( (A B)
(y (subconjunto? A B)
(subconjunto? B A))))
> (conjuntosIguales?
#t
> (conjuntosIguales?
#t
> (conjuntosIguales?
#f
> (conjuntosIguales?
#f

(2 1 3) (2 3 1))
(2 1 3) (1 2 3))
(2 1 3) (2 3 1 4))
(2 1 3 4) (2 3 1))

Estos ejemplos nos muestran que dos conjuntos son iguales in importar el
orden que se tomen los elementos.

1.4.3.

de conjuntos
Creacion

Los conjuntos pueden ser creados de dos maneras, o bien puede detallarse
una regla que determine que elementos contiene el conjunto, o bien puede deta implcita,
llarse a cada elemento. A la primera forma se le conoce como creacion
explcita. DrRacmientras que a la segunda manera se le conoce como creacion
ket puede definir los conjuntos de ambas maneras.
Supongamos que deseamos crear un conjunto:

CAPITULO
1. FUNDAMENTOS MATEMATICOS

22

esPar? es un sinonimo
de la
primitiva even?
funcion

1. Que se llame C1 y que de los primeros 100 numeros


enteros no negativos,
el conjunto debe contener aquellos que sean pares y que sean menores que
20. Esta es una forma implcita. En DrRacket escribimos:
(define C1 (filter ( (n) (y (esPar? n) (< n 20) ) )
(build-list 10 values)))

Notemos aqu que el conjunto de todos los numeros


enteros considerados

es solamente el que incluye a los numeros


0, 1, 2, 3, 4, 5, 6, 7, 8, 9, que es lo
que produce (build-list 10 values).

2. Que se llame C2 y que contenga los numeros


0, 2, 4, 6, 8, 10, 12, 14, 16, 18.
Esta es una forma explcita. En DrRacket escribimos
(define C2 (0 2 4 6 8 10 12 14 16 18))
3. Que se llame C3 y que no tenga elementos. Esto es el conjunto vaco.
(define C3 conjuntoVacio)
Pongamos todos estos en un bloque de interacciones para experimentar con
el entorno de desarrollo.
> (define C1 (filter ( (n) (and (even? n) (< n 20)))
(build-list 100 values)))
;; ( (n) (and (even? n) (<n 20)))
;; Es una expresion lambda que es un predicado
;; verifica que un numero n sea par y menor que 20
;; (build-list 100 values)
;; crea una lista de 100 nuemeros, desde 0 hasta 99
> C1
(0 2 4 6 8 10 12 14 16 18)
> (define C2 (0 2 4 6 8 10 12 14 16 18))
> C2
(0 2 4 6 8 10 12 14 16 18)
> (define emptySet ())
> (define C3 emptySet)
> C3
()
>

1.4.4.

Agregar un elemento a un conjunto

Una vez que se tiene un conjunto, una de las actividades fundamentales es


la de agregar elementos al conjunto, ya que no solamente se trata de estudiar
las caractersticas que un conjunto muestra, sino tambien ser capaces de agregar
elementos (que cumplen con las caractersticas del conjunto).
Supongamos que A 7 conjuntoVacio, visto en forma de un listado de los
elementos que contiene, A 7 (). Si queremos agregar un elementos (digamos

el numero
4) al conjunto, debemos hacer un procedimiento que genere un nuevo
conjunto que contenga a todos los elementos del conjunto A, pero tambien al
nuevo elemento (en este caso el 4).
Recordemos que estamos modelando los conjuntos por medio de listas, las
listas que sirven para modelar conjuntos no deben tener elementos repetidos, de

1.4. OPERACIONES CON CONJUNTOS

23

modo que tambien debemos considerar este caso a la hora de modelar la funcion
de agregar un elemento al conjunto.
As vamos a definir el problema de agregar un elemento e a un conjunto C,
como un procedimiento que se llame agregarAlConjunto y con las siguientes
condiciones de entrada y salida.
Entrada: El procedimiento agregarAlConjunto recibe un elemento e de cons recibe un elemento e y
una lista L; y produce una
cualquier tipo, puede incluso ser un conjunto; y recibe un conjunto A.
nueva lista con el nuevo
elemento e como car y los

Salida: Debe devolver un conjunto (en forma de una lista), que contenga elementos de L como el cdr de
la nueva lista.
como primer elemento al candidato e, y el resto del conjunto a la lista C.

DrRacket ofrece una primitiva que nos permite agregar elementos a una lista, se llama cons (que viene de la palabra construct), y hace precisamente lo que
deseamos. Recibe como entrada un elemento de cualquier tipo y una lista, y devuelve una nueva lista con e como primer elemento y a C como el resto de los
elementos. Sin embargo vamos a renombrar este procedimiento para hacerlo mas
adecuado a nuestro idioma.

Figura 1.1: La accion de agregarAlConjunto genera una nueva lista con el nuevo elemento.

Codigo 1.13: Agregar un elemento a un conjunto


1
2
3
4
5
6
7

; (agregarAlConjunto Cualquiera Conjunto) 7 Conjunto?


; (agregarAlConjunto x (3 6 9)) 7(x 3 6 9)
(define agregarAlConjunto
( (e C)
(if (pertenece? e C)
C
(cons e C))))
> (cons a (b c d))
(a b c d)
> (cons 1 (2 3 4))
(1 2 3 4)
> (cons 7 (2 3 4))
. . application: not a procedure;
expected a procedure that can be applied to arguments

24

CAPITULO
1. FUNDAMENTOS MATEMATICOS

given: 2
arguments...:
3
4

En las interacciones notamos como


se utiliza cons, pero en el ultimo
ejemplo
hubo un error. El error se produjo al hacer la llamada al procedimiento cons con

el segundo operando (2 3 4), en lugar de (2 3 4). La diferencia es el apostrofe


al inicio de los parentesis.

es de la forma (OPDR opnd ...)es decir, priPor regla general una rExpresion
empiece
mero un operador, luego todos los operandos; a menos que la expresion

con el modificador , que le indica al interprete que no debe evaluar la expresion,


sino tratarla como un dato primitivo.

leda fue (2 3 4), el error dice


De modo que el error indica que la expresion
que no es un procedimiento, se esperaba un procedimiento al que se pueda apli un 2 (como si fuera el operador) con los algumentos
car a los argumentos, se dion

3 y 4. Claramente le hizo falta el apostrofe.

1.4. OPERACIONES CON CONJUNTOS

25

Actividad 1-11

En una universidad se convoco a participar en un concurso de programacion.


Se inscribieron 15 personas atendieron a la convocatoria y dieron los siguientes datos:
Nombre
Hobart Mena Almonte
Maya Naranjo Armas
Cenobio Olivo Miranda
Kristen Herrera Tejeda
Nehuen Alvarado Vargas
Claro Carrillo Velasco
Plubio Ponce Monroy
Robertino Urbina Aleman
Serna
Adair Trevino

Fabio Pantoja Avalos


Corn Lozada Sanches
Narcisa Armijo Bueno

Africa
Cano Hurtado

Anarda Hernandes Villagomez

Lenguaje
Java
DrRacket
C++
DrRacket
Java
DrRacket
C++
DrRacket
C++
DrRacket
Java
C++
Java
C++

Semestre
2
6
7
2
6
7
5
5
6
6
5
7
5
5

1. Formaliza la tabla como un conjunto llamado convocados cuyos elementos sean tripletas de la forma (nombre lenguaje semestre).
2. Crea un nuevo conjunto y haz un procedimiento en DrRacket que agrege
solo los nombres de las personas en la lista de convocados, que cumplan
con estar en un semestre avanzado (mayor que 4) y que sepan programar
en Java o DrRacket. Este conjunto se llama seleccionados.

1.4.5.

de conjuntos
Union

de conjuntos es un procedimiento que sirve para hacer un nuevo


La union

conjunto con los elementos de otros dos conjuntos. Si A y B son conjuntos, la union
del conjunto A con el conjunto B significa hacer un nuevo conjunto con todos los
elementos de B, junto con aquellos elementos de A que no pertenezcan a B.
de los conjuntos A con B la vamos a denotar como (union A B),
La union
vamos a considerar de
y esto produce un nuevo conjunto. Para modelar la union
deben estar invariablemente todos los elementos de B, y le
inicio que en la union
vamos a agregar los elementos de A, recordemos que el procedimiento agrega los
elementos si no pertenecen al conjunto.
El procedimiento para hacerlos debe considerar dos posibles casos:
1. Cuando (conjuntoVacio? A) 7 #t, entonces lo que se produce es precisa-

CAPITULO
1. FUNDAMENTOS MATEMATICOS

26

mente el conjunto B ya que al menos tiene esos elementos.


con el resto de los ele2. De otro modo se repite el procedimiento de union
mentos de A y agregando el primer elemento del conjunto A al conjunto B.
Codigo 1.14: La union de dos conjuntos
1
2
3
4
5
6
7

; (union Conjunto Conjunto) 7 Conjunto?


; (union (2 6 7) (3 9 2 7)) 7(6 3 9 2 7)
(define union
( (A B)
(if (conjuntoVacio? A)
B
(union (cdr A) (agregarAlConjunto (car A) B)))))

Actividad 1-12
En un negocio pusieron una maquina que despacha comida chatarra, al principio lo atenda la empresa A, aunque hay otra empresa B que ofrece un servicio similar. La maquina atendida por la empresa A surte cacahuates, gomitas, chiclets y pasitas. Luego de un tiempo, la empresa B compro la
empresa A junto con todas sus maquinas. Antes de la compra la empresa B
atenda maquinas que surten frituras, cacahuates, pandulce, y refrescos;
ahora sigue surtiendo sus mismos productos junto con los productos que antes
surta solamente la empresa A.
1. Del parrafo anterior extrae todo el conocimiento que puedas, y formalizalo mediante definiciones DrRacket.
2. Haz un procedimiento que reciba como entrada los conjuntos de cada
empresa, calcule y devuelva como salida el nuevo conjunto de mercanca
que comercializa la empresa B.

Actividad 1-13
de conjuntos puede extenderse para unir un conjunto de conjuntos,
La union
generalizada, que vamos a conocer con el nombre
a esto lo llamamos union
union*. Considera las siguientes restricciones para que escribas un progama
en DrRacket para modelar el comportamiento de union*. Para las siguientes
restricciones CONJUNTOS representa al conjunto de conjuntos; y res representa
generalizada, inicialmente con conjuntoVacio.
el resultado de la union
generalizada
1. si (conjuntoVacio? CONJUNTOS) 7 #t, entonces la union
(union* CONJUNTOS) 7 conjuntoVacio.
2. en otro caso, debemos hacer union* con el resto de los CONJUNTOS, y la
union de res con el primer elemento de CONJUNTOS.

1.4. OPERACIONES CON CONJUNTOS

1.4.6.

27

de conjuntos
Interseccion

de los conjuntos A y B es un nuevo conSi A y B son conjuntos, la interseccion


junto que contiene exactamente los elementos que pertenecen a ambos conjuntos.
realizaremos un procedimiento que verifique uno
Para modelar esta funcion
a uno los elementos de uno de los conjuntos, digamos el conjunto A, para determinar aquellos elementos que pertenecen a B (es obvio que esos elementos tambien

pertenecen a A). As tendremos la interseccion.


Sin embargo hay que considerar algunos casos. En los siguientes casos se
hace la interseccion del conjunto A con el conjunto B, y el resultado lo vamos
air generando en res, que inicialmente es conjuntoVacio:

es vaca.
1. Si (conjuntoVacio? B) 7 #t, entonces la interseccion
2. Si (conjuntoVacio? A) 7 #t, entonces se debe devilver el resutado que se
debe estar generando en res.
3. Si (pertenece? (car A) B) 7 #t, significa que un elemento de A tambien
cuyo resultado
pertenece a B, de modo que debe agregarse a la interseccion
del resto del
se va generando en res, as que debemos hacer la interseccion
conjunto A, con B, y habiendo agregado el primer elemento de A al resultado
res.
del resto de los elementos de
4. De otro modo, debemos hacer la interseccion
A, junto con los demas argumentos sin modificar.

Codigo 1.15: La interseccion de dos conjuntos


1
2
3
4
5
6
7
8
9
10

;; Funcion auxiliar para la interseccion de conjuntos


;; se usa el parametro res para agregar los elementos en la interseccion
(define interseccion-aux
( (A B res)
(cond ((conjuntoVacio? B) conjuntoVacio)
((conjuntoVacio? A) res)
((pertenece? (car A) B) (interseccion-aux (cdr A)
B
(agregarAlConjunto (car A) res)))
(else (interseccion-aux (cdr A) B res)))))

11
12
13
14
15
16
17

;; La interseccion de conjuntos
;; (interseccion Conjunto Conjunto) 7 Conjunto?
;; (interseccion (1 2 3 4) (3 7 6 2)) 7(2 3)
(define interseccion
( (A B)
(interseccion-aux A B ())))

CAPITULO
1. FUNDAMENTOS MATEMATICOS

28
Actividad 1-14

acerca de los particiEn una universidad se reunio la siguiente informacion


Las listas se levantaron el el grupo
pantes a una olimpiada de programacion.
de 4to grado y 6to grado.
Nombre
Alberto Baldomero Pablo Duarte
Leticia Merche Aritza
Pedro Guillermo Castro
Pepito Adolfo Ximo Hernandez
Eberardo Francisco Alamilla
Gisela Alejandro Alves
Nombre
Jonatan Melchor Eugenio Villa
Valentn Valerio Moreno

Adelaida Adriana Iniguez


Che Urbina
Melchor Jesus
Yessica Natanael Zamorano
Melania Lino Del Bosque
Roque Pa Fuentes
Hilaria Marina Bustos

Carrera
LCC
LCC
LM
LCC
LF
LCC
Carrera
LCC
LCC
LCC
LCC
LF
LF
LM
LM

Lenguaje
Pascal
DrRacket
DrRacket
C++
C++
C++
Lenguaje
Pascal
C
C++
DrRacket
C++
C++
DrRacket
C++

Grado
4
4
4
4
4
4
Grado
6
6
6
6
6
6
6
6

Realiza las siguientes actividades:


(a) Formaliza esta base de datos en una lista de tuplas de la forma
(Nombre Carrera Lenguaje Grado)
de cada registro.
(b) Utiliza definiciones para extraer la informacion
de la interseccion
para realizar las siguientes con(c) Utiliza la definicion
sultas. Aqu debes crear nuevos predicados que tomen como entrada una
tupla, y devuelvan #t de acuerdo a lo que conviene.
(i) Los participantes que programan en C++
(ii) Los participantes que estudian LCC

1.4.7.

Diferencia de un conjunto respecto de otro

Si A y B son conjuntos, la diferencia del conjunto A respecto del conjunto B


es un nuevo conjunto que contiene a todos los elementos de A que no pertenecen
al conjunto B. Elegiremos el nombre diferenciaConjuntos para representar esta

funcion.
se realiza cuando es necesarios separar los elementos que solo

Esta operacion
pertenecen a un conjunto, ya que los elementos que pertenecen a ambos conjun-

1.5. EL CONJUNTO POTENCIA

29

tos y los elementos que solo pertenecen al otro conjunto son omitidos.
se hace verificando cada uno
Un procedimiento para realizar esta funcion
de los elementos del conjunto A, y construir el nuevo conjunto res con los que
no pertenecen al conjunto B (la pertenencia al conjunto A es obvia). Debemos
verificar los siguientes casos:
1. Si (conjuntoVacio? A) 7 #t, el resultado es lo que el nuevo conjunto res
tenga, inicialmente res 7 conjuntoVacio.
2. Si (pertenece? (car A) B) 7 #t, entonces debemos omitir este elemento,
porque pertenece a ambos conjuntos y solamente deseamos los que pertenecen exclusivamente al conjunto A, y debemos seguir el procedimiento con
el resto de los elementos de A y sin alterar el resultado res.
3. En otro caso, debemos hacer nuevamente el procedimiento diferenciaConjuntos pero ahora con el resto de los elementos de A, y agregando el
primer elemento de A al conjunto de respuesta res.
Codigo 1.16: La diferencia de conjuntos
1
2
3

; (diferenciaConjuntos Conjunto Conjunto) 7 Conjunto?


; (diferenciaConjuntos (1 2 3 a b) (2 b 5 a 7)) 7(1 3 b)
; utiliza una funcion auxiliar (diferenciaC Conjunto Conjunto Conjunto) 7 Conjunto?

4
5
6
7
8
9

(define diferenciaC-aux
( (A B res)
(cond ((conjuntoVacio? A) res)
((pertenece? (car A) B) (diferenciaC-aux (cdr A) B res))
(else (diferenciaC-aux (cdr A) B (agregarAlConjunto (car A) res))))))

10
11
12
13

(define diferenciaConjuntos
( (A B)
(diferenciaC-aux A B ())))

1.5.

El conjunto potencia

aparte es el conjunto potencia.


Un conjunto especial que merece una seccion
Si A es un conjunto, el conjunto potencia de A es el conjunto que contiene a todos
los subconjuntos que se pueden lograr con los elementos de A, y lo llamaremos
conjuntoPotencia.
El conjuntoPotencia requiere un conjunto que puede ser o no el conjuntoVacio. Si tratamos de calcular (conjuntoPotencia conjuntoVacio) lo que
vamos a obtener es el conjunto de los subconjuntos de conjuntoVacio.
Actividad 1-15
Cual es el conjunto potencia del conjuntoVacio?

CAPITULO
1. FUNDAMENTOS MATEMATICOS

30

Como respondiste en la actividad 1-15, el conjuntoPotencia tiene solamente un subconjunto, que es precisamente conjuntoVacio, de modo que
(conjuntoPotencia conjuntoVacio) 7 (())
Ahora supongamos que A 7 (a), es decir el conjunto A es un conjunto
unitario. Deseamos ahora calcular (conjuntoPotencia A).
Un conjunto que tiene un solo
elemento se llama conjunto
unitario (pagina 13).

Ejemplo 1-12
Enlista los subconjuntos de A1 7 (a).
Los subconjuntos de (a) son conjuntoVacio y A, esto es (),(a). As
(conjuntoPotencia A1 ) 7 (() (a))

Observando ambos ejemplos, el ejemplo 1-12 y el ejemplo 1-15 notamos que


el conjunto potencia del conjunto que tiene dos elementos, tiene una cardinalidad
que es el doble de los elementos que tiene el conjunto potencia del conjunto que
solo tiene un elemento; pero ahora mismo eso no parece tan notable, hagamos
otro ejemplo.
Ejemplo 1-13
Enlista los subconjuntos de A1 7 (b a).
Los subconjuntos de (b a) son conjuntoVacio,(a), (b), (b a) As
(conjuntoPotencia A1 ) 7 (() (a) (b) (b a))

Ahora que ya hemos notado dos cosas:


1. Cuando A 7 conjuntoVacio, (conjuntoPotencia A) 7 (()) y su cardinalidad es 1 claro.
2. Cuando A 7 (a0 |A0 ), es decir A no es vaco porque tiene un (car A) 7 a0 ,
y un (cdr A) 7 A (ver pagina 10), entonces la (cardinalidad A) es el
doble que (cardinalidad A)
(cardinalidad (conjuntoPotencia A)) 7
(* 2 (cardinalidad (conjuntoPotencia (cdr A))))
hay una tercera cosa que notar. La mitad de los subconjuntos del
Pero aun
conjunto potencia de A (suponiendo que A no es vaco) contienen el elemento a0 ,
y la otra mitad no lo tienen.

1.5. EL CONJUNTO POTENCIA

31

Ejemplo 1-14
(conjuntoPotencia (c b a)) 7 (() (a) (b) (b a) (c) (c a) (c b) (c
b a))
Nota que la primera mitad de elementos es precisamente
(conjuntoPotencia (cdr A)), y todos los subconjuntos de la segunda
mitad tienen como primer elemento a (car A).

Actividad 1-16
Calcula el conjunto potencia de A 7 (d c b a), y observa todas las anotaciones que hemos hecho hasta ahora.

Para hacer un procedimiento que calcule el conjunto potencia de un con que


junto, vamos a apoyarnos de funciones auxiliares. Necesitamos una funcion
permita ir construyendo el resultado a medida que se agregan nuevos elementos.
El resultado se debe empezar a construir suponiendo que el conjunto dado es el
conjunto vaco, as el resultado inicial es (()), lo que significa un conjunto cuyo

unico
elemento es el conjunto vaco.
Cuando el conjunto no es vaco, tomaremos uno a uno sus elementos y vamos
a construir el conjunto potencia del conjunto unitario, del conjunto que tiene dos
elementos y as en adelante.
El modelo computacional se hace en tres partes:
de agre1. La parte mas profunda se llama agregaEnCada, y tiene la funcion
gar un elemento cualquiera a una lista de subconjuntos. Esto es porque nos
hemos dado cuenta de que la mitad de los elementos del conjunto potencia
del conjunto A tiene el (car A), y el resto de los subconjuntos no lo tie utiliza una funcion
primitiva llamada map, esta primitiva
ne. Esta funcion
opera en su forma mas simple con dos ingredientes, un procedimiento P y
una lista C. Al hacer map, se aplica el procedimiento P en cada uno de los
elementos de C, y lo que produce es una nueva lista con las evaluaciones
encontradas para cada elemento de C:
(map P C) 7 (list (P c1 ) (P c2 ) . . . )

Con map siempre


obtienes una lista.

CAPITULO
1. FUNDAMENTOS MATEMATICOS

32

Ejemplo 1-15
(map ( (x) (+ x 1)) (0 1 2 3)) 7 (1 2 3 4)

lambda.
Aqu el predicado es anonimo,
es una expresion

append se utiliza para anexar


los elementos de una lista a los
elementos de otra.

2. La parte intermedia se llama cp-aux, su nombre viene de conjunto potencia


auxiliar. Este procedimiento es el que resuelve el conjunto potencia, pero
lo hace requiriendo un conjunto C del cual vamos a ir tomando uno a uno
los elementos, y res que es el conjunto potencia de los elementos que se

han tomado de C, al principio res 7 (()), es decir, el conjunto cuyo unico


elemento es el conjunto vaco. Hacer (cp-aux C res), se decide en uno de
dos casos. El caso base es cuando C no tiene elementos, entonces se devuelve
hay elementos en C, entonces
el contenido de res; el otro caso es cuando aun
se toma el (car C), y se le agrega a cada uno de los subconjuntos que se
tengan en C. Pero eso es solamente la mitad de los elementos del conjunto
potencia, la otra mitad es justamente res, que ya tiene los subconjuntos
que no contienen al nuevo elemento. As que solamente hay que anexar las
listas de conjuntos con una primitiva llamada append.
3. La parte que se encuentra en la superficie se llama conjuntoPotencia,y es
la que se debe utilizar para hacer el calculo; el procedimiento simplemente
invoca al procedimiento intermedio cp-aux para hacer el trabajo duro. Este
procedimiento simplemente requiere al conjunto del cual se quiere saber el
conjunto potencia.
Codigo 1.17: El conjunto potencia de un conjunto

;; conjunto potencia. Requiere 2 funciones auxiliares

2
3
4
5
6
7
8
9

;; funcion auxiliar de conjunto potencia


;; agrega el elemento e en cada uno de los conjuntos de la lista
;; (agregaEnCada Cualquiera ListaConjuntos) ->ListaConjuntos?
;; (agregaEnCada x ((0) (1) (2))) ->((x 0) (x 1) (x 2))
(define agregaEnCada
( (e LC)
(map ( (C) (agregarAlConjunto e C)) LC)))

10
11
12
13
14
15
16
17
18
19
20

;; funcion auxiliar del conjunto potencia


;; calcula el conjunto potencia, pero lleva una variable res
;; para construir el resultado. inicialmente res ->(())
;; (cp-aux (b a) (())) ->(() (b) (a) (a b))
(define cp-aux
( (C res)
(if (conjuntoVacio? C)
res
(cp-aux (cdr C) (append res (agregaEnCada (car C) res))))))

21
22
23
24
25
26

;; calcula el conjunto potencia de un conjunto


;; (conjuntoPotencia Conjunto) ->ListaDeConjuntos?
(define conjuntoPotencia
( (C)
(cp-aux C (()))))
> (conjuntoPotencia ())
(())
> (conjuntoPotencia (a))
(() (a))

1.6. PRODUCTO CARTESIANO


> (conjuntoPotencia (b a))
(() (b) (a) (a b))
> (conjuntoPotencia (c b a))
(() (c) (b) (b c) (a) (a c) (a b)
> (conjuntoPotencia (d c b a))
(() (d) (c) (c d) (b) (b d) (b c)
(a b) (a b d) (a b c) (a b c d))
> (conjuntoPotencia (e d c b a))
(() (e) (d) (d e) (c) (c e) (c d)
(b d e) (b c) (b c e) (b c d) (b
(a d e) (a c) (a c e) (a c d) (a
(a b d e) (a b c) (a b c e) (a b
>

1.6.

33

(a b c))
(b c d) (a) (a d) (a c) (a c d)

(c d e) (b) (b e) (b d)
c d e) (a) (a e) (a d)
c d e) (a b) (a b e) (a b d)
c d) (a b c d e))

Producto cartesiano

especial entre ellos se llama producSi A y B son conjuntos, una operacion


especial por varias razones:
toCartesiano, y es una operacion
1. Introduce el concepto de par.
2. Contiene los elementos con los que se forman todas las posibles relaciones
(tema siguiente).

3. El estudio de lenguajes formales y automatas


esta lleno de relaciones y funciones.
El productoCartesiano de los conjuntos A y B, produce el nuevo conjunto
que contiene todos los pares de elementos, donde el primer elemento del par
pertenece al conjunto A, y el segundo elemento del par pertenece al conjunto B.
de dos
Un par, o mas especficamente un par ordenado, es una agrupacion
elementos donde el orden en que aparecen es importante. Denotamos (a b) a
un par ordenado con los elementos a como primero del par, y el elemento b
como segundo del par.
Vamos a crear algunas funciones para crear y manipular pares:
Codigo 1.18: Manipulacion de pares
1
2
3
4
5

;; (creaPar Cualquier Cualquier) 7 Par?


;; (creaPar a b) 7(a b)
(define creaPar
( (a b)
(list a b)))

6
7
8
9
10
11
12

;; obtiene el primer elemento de un par


;; (1de Par) 7 Cualquer?
;; (1de (a b)) 7a
(define 1de
( (par)
(car par)))

13
14
15

;; obtiene el setundo elemento de un par


;; (2de Par) 7 Cualquer?

CAPITULO
1. FUNDAMENTOS MATEMATICOS

34
16
17
18
19

;; (2de (a b)) 7b
(define 2de
( (par)
(cadr par)))

Hagamos unas pruebas.


> (define p1 (creaPar a b))
> p1
(a b)
> (1de p1)
a
> (2de p1)
b
>

Ejemplo 1-16
El poducto cartesiano de los conjuntos A 7 (1 2 3 4) y B 7 (7 8 9) se construye con todos los pares que se forman con los elementos de ambos conjuntos
((1 7) (1 8) (1 9) ; los pares de 1 con cada uno de (7 8 9)
(2 7) (2 8) (2 9); los pares de 2 con cada uno de (7 8 9)
(3 7) (3 8) (3 9); los pares de 3 con cada uno de (7 8 9)
(4 7) (4 8) (4 9)); los pares de 4 con cada uno de (7 8 9)

es la aplicacion
del procedimiento creaPar
En el ejemplo 1-16, cada renglon
de uno de los elementos del conjunto A con todos los elementos de B. Esto lo
podemos modelar con map:
(map ( (b)(creaPar
(map ( (b)(creaPar
(map ( (b)(creaPar
(map ( (b)(creaPar

1
2
3
4

b)
b)
b)
b)

0 (7

8
8
0 (7 8
0 (7 8
0 (7

9)))
9)))
9)))
9)))

de map produce una lista2 :


Cada aplicacion

((1
((2
((3
((4

7) (1
7) (2
7) (3
7) (4

8) (1
8) (2
8) (3
8) (4

9))
9))
9))
9))

Aqu hay dos anotaciones. Primero estas cuatro aplicaciones de map se pueden automatizar con el uso de otro map; y segunda, de utilizar un segundo map
resulta una lista con las cuatro aplicaciones, pero no queremos una lista2 de cuatro listas2 , sino una sola lista que contenga a todos los pares. Para resolver esto
utilizamos append*, que sirve para anexar los elementos de varias listas al final
de la primera lista.
2 Aqu equivale a conjunto.

1.7. RELACIONES Y FUNCIONES

35

(append* ((1 7) (1 8) (1 9)) ((2 7) (2 8) (2 9))


((3 7) (3 8) (3 9)) ((4 7) (4 8) (4 9)))
7 ((1 7) (1 8) (1 9) (2 7) (2 8) (2 9) (3 7) (3 8) (3 9) (4 7) (4 8) (4
9))
Codigo 1.19: El producto cartesiao de dos conjuntos
1
2
3
4
5

;; (productoCartesiano Conjunto Conjunto) 7 Conjunto?


;; (productoCartesiano (a b c) (1 2)) 7((a 1) (a 2) (b 1) (b 2) (c 1) (c 2))
(define productoCartesiano
( (A B)
(append* (map ( (a) (map ( (b) (creaPar a b)) B)) A))))

La cardinalidad del producto cartesiano de dos conjuntos es el producto de


la cardinalidad de los conjuntos participantes, esto es:
(cardinalidad (productoCartesiano A B)) 7
(* (cardinalidad A) (cardinalidad B))

1.7.

Relaciones y Funciones

es una regla que asocia elementos de un conjunto con elemenUna relacion


tos de otro conjunto. Ya que los elementos relacionados forman un par ordenado,
los elementos relacionados ya emparejados forman un subconjunto del produc que asocia los
to cartesiano, de modo que si A y B son conjuntos, una relacion
miembros del conjunto A con los elementos del conjunto B es un subconjunto del
producto cartesiano de A con B.
del conjunto A con los elementos del conjunto B, entonces
Si R es una relacion
R es un conjunto de pares, donde cada par tiene como primer elemento a un
elemento del conjunto A, y como segundo elemento del par a un elemento del
conjunto B.
Supongamos que A 7 (a1 ... an ) son los n elementos del conjunto A, y por su
parte B 7 (b1 ... bm ) son los m elementos del conjunto B, si algunos elementos
R es
de A estan relacionados con algunos elementos de B, la relacion
R 7 ((a b) ...); lo que significa que en R hay pares ordenados cuyo primer
elemento es un elemento de A y el segundo es un elemento de B. Aunque puede
par.
haber ningun
Ejemplo 1-17
Sean A 7 (a b c d e f), y B 7 (3 8 9) dos conjuntos.
R1 7 (); Es la relaci
on vac
a.
R2 7 ((a 3) (a 9) (d 8) (d 3) (f 3)); Es una relaci
on de 5 asociaciones.

En el ejemplo 1-17 hay varias cosas que podemos comentar.

36

CAPITULO
1. FUNDAMENTOS MATEMATICOS
que no tiene asociaciones, se llama la relacion
vaca.
1. Hay una relacion
2. El conjunto que proporciona los primeros elementos de los pares de la re se llama dominio.
lacion
3. El conjunto que proporciona los segundos elementos de los pares de la re se llama codominio.
lacion
puede estar relacionado
4. Si un elemento del dominio aparece en la relacion,
con uno o mas elementos del codominio.

con dominio en A y codominio en B, y (pertenece? a


Si R es una relacion
A) 7 #t y (pertenece? (a b) R) 7 #t, podemos decir que b es la imagen de a
R. Vamos a implementar los procedimientos de las relaciones.
bajo la relacion
el conPara verificar que un conjunto de pares ordenados es una relacion,
junto de pares ordenados debe ser un subconjunto del producto cartesiano del
dominio y codominio.
Codigo 1.20: Verificar la validez de una relacion
1
2
3
4
5
6

La imagen de un elemento bajo


siempre es un
una relacion
subconjunto del codominio.

;; Verifica que R sea una relacion con dominio en A y codominio en B


;; (esRelacion? ListaPares Conjunto Conjunto) 7 Booleano?
;; (esRelacion? ((1 2) (1 4) (2 3) (3 4)) (1 2 3 4) (1 2 3 4)) 7 #t
(define esRelacion?
( (R A B) ; A es el dominio y B el codominio
(subconjunto? R (productoCartesiano A B))))

Un problema muy frecuente es determinar todos los elementos del codomi elemento del dominio. Para modelar esto se
nio que estan relacionados con algun
Llamaremos a al elemento del
require de un elemento del dominio y la relacion.
que esta dada en forma de una lista de pares ordenadominio y R a la relacion
dos. Notemos que un supuesto fuerte es que (pertenece? a A) 7 #t, pero esta
queda bajo la responsabilidad del que utilice la funcion.

verificacion
Codigo 1.21: Imagen de un elemento bajo una relacion

1
2
3
4
5
6

;; Calcula la imagen de un elemento <a>bajo una relacion <R>


;; (imagen Cualquiera ListaPares) 7 Conjunto?
;; (imagen 1 ((1 3) (1 2) (2 4) (2 1) (3 3))) 7(3 2)
(define imagen
( (a R)
(map ( (P) (2de P)) (filter ( (p) (equal? a (1de p))) R))))

Podemos extender este resultado para calcular la imagen de un subconjunto


R. Para calcular la imagen (extendide elementos del dominio C bajo una relacion
debemos calcular la union

da) de un subconjunto de elementos bajo una relacion,

de la imagen de cada elemento del subconjunto bajo la misma relacion.

1.7. RELACIONES Y FUNCIONES

37

Actividad 1-17
Escribe un procedimiento llamado imagen* con entrada un subconjunto C del
R, y la relacion
R en forma de una lista de pares
dominio de una relacion
considerando
ordenados; y salida la imagen del subconjunto bajo esa relacion,
que:
Si C 7 conjuntoVacio, entonces (imagen* C) 7 conjuntoVacio
de la imagen de cada elemento del
en otro caso, se debe hacer la union
conjunto C.

es el subconjunto del dominio que contiene los


El rango de una relacion
elementos relacionados con al menos un elemento del codominio.

Actividad 1-18
R y salida
Escribe un procedimiento llamado rango, con entrada una relacion
donde cada uno de los elementos
un subconjunto del dominio de la relacion,
del subconjunto cumpla que su imagen no es vaca.
1
2
3
4
5
6
7

;; Calcula el rango de una relacion. Es un subconjunto del dominio


;; (rango ListaPares) 7 Conjunto?
;; (rango ((1 3) (1 4) (2 4) (3 1) (5 2))) 7 (5 3 2 1)
(define rango
( (R)
... ; aqu
va el c
odigo
))

En una funcion
se cumple que
es un tipo especial de relacion.
Una funcion
son conjuntos unitodas las imagenes de los elementos del rango de la relacion,
esta relacionado
tarios. Esto significa que cada elemento del rango de la relacion,
con exactamente un elemento del codominio.
Codigo 1.22: Determina si una relacion es una funcion
1
2
3
4
5
6
7
8

;; Determina si una relacion es una funcion


;; (esFuncion? ListaPares) 7 Booleano?
;; (esFuncion? ((1 2) (2 4) (3 4) (4 5))) 7 #t
;; (esFuncion? ((1 2) (2 3) (2 4) (3 4) (4 5))) 7 #f
(define esFuncion?
( (R)
(let ((imagenes (map ( (e) (imagen e R)) (rango R))))
(paraTodo ( (C) (conjuntoUnitario? C)) imagenes))))

Ya que las funciones son un caso especial de las relaciones, para calcular la
imagen de un elemento y la imagen extendida de un conjunto de elementos del

dominio, podemos utilizar las funciones hechas para las relaciones, ver el codigo
en la pagina 36.

CAPITULO
1. FUNDAMENTOS MATEMATICOS

38

Actividad 1-19
Considera que F 7 ((1 5) (2 4) (4 1) (6 3) (3 7) (5 2) (7 6)) y realiza
las siguientes actividades:
1. Escribe un procedimiento que se llame listaImagenes que recibe un
F y que obtensubconjunto de elementos del dominio C y una funcion
ga una lista con las imagenes de los elementos (1 3 5), por ejemplo
(listaImagenes (1 3 5)) 7 (5 7 2), porque (imagen 1 F) 7 5,
(imagen 3 F) 7 7 y (imagen 5 F) 7 2.
2. Escribe un predicado (devuelve #t o #f) que se llame soloPares? que

determine si en las imagenes unicamente


hay elementos pares. Por ejemplo (soloPares? (1 3 5) F) 7 #f; pero (soloPares? (2 5 7)
F) 7 #t.

1.7.1.

de funciones
Composicion

que utilizaremos frecuentemente en este curso es la compoUna operacion


cuyo rango es el conjuto A y la imagen
de funciones. Si F es una funcion
sicion
G cuyo dominio es un
del rango es el conjunto B; y tambien tenemos otra funcion
subconjunto de B y su codominio un conjunto C.
de la funcion
F con la funcion
G, produce otra funcion,
con
La composicion
dominio en A y codominio en C, que incluye a los pares (a c) tales que existe
un elemento b en el subconjunto de B (dominio de G) que (imagen a F) 7 b y
(imagen b G) 7 c.

Figura 1.2: La composicion de funciones


Codigo 1.23: Composicion de funciones
1

;; Funcion auxiliar para la composicion de funciones

1.7. RELACIONES Y FUNCIONES


2
3
4
5
6
7
8
9
10
11
12
13
14

39

;; recibe: un conjunto de elementos del dominio de F; la funcion <F>; la funcion <G>


;; Una lista para construir el resultado <res>
(define compos
( (A F G res)
(if (conjuntoVacio? A) ; condicion para terminar
res
(let* ((a (car A)) ; el 1er elemento a evaluar
(b (car (imagen a F))) ; la imagen es un conjunto unitario
(C (imagen b G)))
(if (conjuntoVacio? C) ; imagen vacia?
(compos (cdr A) F G res) ; sigue con el siguiente
; si hay imagen se agrega al resultado
(compos (cdr A) F G (cons (creaPar a (car C)) res)))))))

15
16
17
18
19
20
21
22
23
24

;; calcula la composicion de dos funciones


;; (composicion ListaPares ListaPares) -->ListaPares?
;; >(composicion ((1 2) (2 3) (3 1)) ((3 a) (2 b))) -->((1 b) (2 a))
(define composicion
( (F G)
(if (subconjunto? (rango G) (imagen* (rango F) F))
(compos (rango F) F G ())
#f)))

> (define DomF (1 2 3


> (define DomG (a b c
> (define F ((1 c) (1
> (define G ((a 2) (b
> (composicion F G)
((1 3) (2 1) (3 2) (4
>

4 5))
d e))
a) (2 b) (2 e) (3 a) (3 d) (4 c) (4 b) (5 c) (5 e)))
1) (c 3) (d 5) (e 4)))
3) (5 3))

Actividad 1-20
Considera las siguientes funciones F 7 ((1 3) (2 1) (3 2) (4 4)) y
G 7 ((4 3) (3 4) (2 2) (1 1)). Realiza ahora lo siguiente:
de las funcion
F con G.
1. Calcula la composicion

de las funcion
G con F.
2. Calcula la composicion

En la actividad 1-20 nos dimos cuenta de una propiedad importante de la


de funciones. En general la composicion
de funciones no es conmucomposicion
tativa, esto es
(conjuntosIguales? (composicion F G) (composicion G F)) 7 #f

CAPITULO
1. FUNDAMENTOS MATEMATICOS

40
Actividad 1-21

Considera las siguientes funciones:


F 7 ((1 3) (2 1) (3 2) (4 4))
G 7 ((4 3) (3 4) (2 2) (1 1))
H 7 ((1 a) (2 c) (3 b) (4 a))
Calcula las siguientes composiciones
1. (composicion (composicion F G) H)

2. (composicion F (composicion G H))

Anota tus conclusiones

2. Smbolos y Alfabetos

Contenido

2.1.

2.1. Smbolos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

41

2.1.1. Smbolos en DrRacket . . . . . . . . . . . . . . . . . . .

41

2.2. Alfabetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

43

2.2.1. Verificar un alfabeto . . . . . . . . . . . . . . . . . . . .

44

2.2.2. La pertenencia de un smbolo a un alfabeto . . . . . . .

46

2.2.3. Cardinalidad de un alfabeto . . . . . . . . . . . . . . . .

46

2.2.4. Subalfabeto . . . . . . . . . . . . . . . . . . . . . . . . .

47

2.2.5. Igualdad en alfabetos . . . . . . . . . . . . . . . . . . . .

48

Smbolos

Los smbolos son representaciones perceptibles que nos permiten transmitir


y comunicar ideas o pensamientos. Hay smbolos que se hacen con las manos,
como el smbolo de amor y paz, o el smbolo de alto; tambien se pueden hacer
smbolos con figuras humanas en ciertas posiciones, por ejemplo cuando se coloca
un letrero con una imagen de una persona andando, es un smbolo que significa
Es permitido andar por aqu. Y as podemos citar muchos ejemplos mas.
Los smbolos en los que estamos interesados en este curso, son smbolos
graficos, que pueden ser reproducidos por medio de los dispositivos de entrada
del teclado de una computadora. Son los caracteres imprimibles del teclado, co
mo los smbolos del codigo
ASCII como las letras a,b,c,...,A,B,C,...$, %,..,
o los smbolos que convencionalmente se escriben en textos de matematicas, como , , , En ocasiones podemos crear nuestros propios smbolos como 7, que
en este texto se ha especificado que se debe leer como produce o significa (pagina
3).

Frecuentemente podemos llamar a los smbolos, letras o senales.


Este curso
se trata de construir maquinas computacionales que reaccionen en presencia de

alguno de los smbolos. Estas maquinas y sus propositos


seran detallados con
en los siguientes captulos.
presicion

2.1.1.

Smbolos en DrRacket

En DrRacket los smbolos se escriben de dos formas. Son un apostrofe


que
lo antecede, como a, A, estoEsUnSimbolo, o incluso 12*+=. Se escriben con

un apostrofe
porque son primitivas del lenguaje, esto es que el significado es e l
mismo.
41

CAPITULO
2. SIMBOLOS
Y ALFABETOS

42

Figura 2.1: Smbolos utilizados en la escritura del libro de Isaas. The Digital Dead Sea Scrolls

> estoEsUnSimbolo
estoEsUnSimbolo
> a
a
> 12*+=
12*+=
>

La otra forma de escribir smbolos en DrRacket es omitiendo el apostrofe.


como a, A, raizCuadrada, etcetera. Sin embrago, en DrRacket se exige que esta
clase de smbolos esten asociados con un significado previamente establecido, ya
sea en forma de primitiva del lenguaje, o definido por el programador, de otro
modo observaremos un mensaje de error.
> a
../../usr/racket/share/pkgs/drracket/drracket/private/rep.rkt:1088:24: a: undefined;
cannot reference an identifier before its definition
> (define a a)
> a
a
>

Escencialmente dice que el smbolo a no ha sido definido, y que no se puede

hacer referencia a un identificador (se refiere a la a) antes de su definicion.


Esto sucede por alguna de las siguientes razones:

1. En realidad se quera escribir a, en lugar de a.


del concepto a. Esto se resuelve al definir el
2. No se ha hecho una definicion
significado para el smbolo desconocido (define a ...) antes de utilizar el
smbolo a, que ahora tendra un significado especfico.
3. En realidad no se quera escribir a, sino otro, posiblemente A. Aqu se supone que el usuario cometio un error al escribir un smbolo que no esta
definido por otro que si lo esta.

2.2. ALFABETOS

43

En DrRacket hay que tomar en cuenta que los smbolos de las letras minuscu
las son diferentes a los smbolos de las letras mayusculas,
y pueden significar
cosas diferentes:
> (define a 10)
> (define A 20)
> (+ a A)
30

Un smbolo especial que debemos introducir se llama , y representa la no


existencia de smbolos. Este smbolo  se requiere como una marca, como un
 representa el smbolo nulo,
punto de referencia inicial de las palabras.
dice que no hay smbolo
alguno.

2.2.

Alfabetos

finita de smbolos. Los alfabetos generalmente


Un alfabeto es una coleccion
se definen de manera extensional, enlistando cada uno de los smbolos que se
permiten.
En teora de lenguajes formales generalmente se designa el smbolo para representar a un alfabeto. En este curso sin embargo, podemos utilizar los
smbolos imprimibles mediante un teclado convencional (de los conocidos como
teclado QWERTY) para elegir los smbolos que representen a los alfabetos, y a los
smbolos que contienen.
Frecuentemente preferiremos la letra S para representar un conjunto de smbolos que conoceremos como alfabeto.
Ejemplo 2-1
Vamos a definir un alfabeto que contenga los smbolos 1 y 0, y lo llamaremos
S1:
1

(define S1 (1 0))

Notemos que escencialmente un alfabeto tiene la misma forma que un conjunto, tal y como se ha utilizado hasta ahora (vease el ejemplo 1-5 de la pagina 9).
de los objetos que se han creado.
La diferencia se observa en la interpretacion

que existe es el alfabeto que no tiene smbolos. Este


El alfabeto mas pequeno
alfabeto se llama es alfabeto vaco.
Codigo 2.1: El alfabeto vaco
1
2

;; El alfabeto vacio es el conjunto que no contiene simbolo alguno.


(define alfabetoVacio ())

Quizas en este momento el concepto de alfabeto vaco parezca que no tiene


uso, sin embargo es importante como punto de referencia. Cuando se desea ha por alfabetoVacio? puede ser una
cer procedimientos recursivos, la verificacion
manera de detener un proceso.

CAPITULO
2. SIMBOLOS
Y ALFABETOS

44

Codigo 2.2: Determinar si un alfabeto es el alfabeto vaco


1
2
3
4
5

;; un predicado para verificar que un alfabeto es el alfabeto vacio


;; (alfabetoVacio? Conjunto) 7 Booleano?
;; (alfabetoVacio? (0 1)) 7 #f
;; (alfabetoVacio? ()) 7 #t
(define alfabetoVacio? empty?)

> (alfabetoVacio? alfabetoVacio)


#t
> (alfabetoVacio? ())
#t
> (alfabetoVacio? (0 1 2))
#f

2.2.1.

Verificar un alfabeto

Como se ha definido, un alfabeto es un conjunto finito de smbolos. Como


los smbolos son objetos indivisibles, un alfabeto contiene una cantidad discreta

de smbolos, esto es un numero


que pertenece a los numeros
naturales, ademas
del 0. As hay tres restricciones importantes (pero faciles de cumplir) para que
un conjunto sea un alfabeto:

1. El conjunto () es un alfabeto. El conjunto vaco no tiene letras, pero aun


as es un alfabeto, se llama alfabetoVacio.

2. El conjunto debe ser definido explcitamente. Para verificar este punto


del alfabeto debe ser una lista con cada uno de los smbolos
la definicion
permitidos. (ver el predicado list? en la ayuda de DrRacket).

3. El conjunto debe ser finito. Ya que generalmente los alfabetos tienen pocos
smbolos (en los lenguajes naturales, uno de los alfabetos mas largos es el
jemer, que se habla y escribe en Camboya y el alfabeto tiene 72 letras). En

DrRacket se puede verificar si un numero


es finito verificando que el numero es estrictamente menor que +inf.0 que es un smbolo que representa al
infinito ( en matematicas).

4. El conjunto debe contener exclusivamente smbolos. En DrRacket se puede verificar que una entrada es un smbolo mediante el predicado symbol?
(ver la ayuda de DrRacket).

2.2. ALFABETOS

45

Figura 2.2: Algunas frases en camboyano, el idioma es el jemer. Fuente: Gua de conversacion
en jemer, en http://wikitravel.org/es/Gua de conversacion Jemer

Actividad 2-1
Escribe un predicado en DrRacket que permita determinar si un conjunto es
un alfabeto.
Codigo 2.3: Verificacion de un alfabeto
1
2
3
4
5
6
7
8
9

;; (esAlfabeto? Conjunto) 7 Booleano?


;; (esAlfabeto? (0 1) 7 #t
;; (esAlfabeto? ((0 1) 0 1) 7 #f
;; (esAlfabeto? (a b 0 1) 7 #t
;; (esAlfabeto? ()) 7 #t
(define esAlfabeto?
( (S)
;... escribe aqu
las rExpresiones
))

del codigo

Nota importante: Es necesario observar que la definicion


2.3 es

una herramienta, y como tal sirve para un proposito


particular, as que tambien
hay que aprender a utilizar la herramienta. En este caso particular, la herramienta sirve para determinar si un conjunto es un alfabeto, y funciona dandole un
conjunto, la respuesta debe ser #t o #f.
Ejemplo 2-2
Verificaremos si cada uno de los siguientes conjuntos es un alfabeto.
de la herramienta
Prueba
Aplicacion
Produce
()
(esAlfabeto? ())
#t
(a b c)
(esAlfabeto? (a b c))
#t
(a (b) c)
(esAlfabeto? (a (b) c))
#f
(ab cd ef) (esAlfabeto? (ab cd ef)) #t

CAPITULO
2. SIMBOLOS
Y ALFABETOS

46

2.2.2.

La pertenencia de un smbolo a un alfabeto

Si s es un smbolo y S es un alfabeto, decimos que s pertenece al alfabeto S,


si ocurre una de las tres siguientes condiciones:

1. Si el alfabeto es alfabetoVacio, entonces seguro que no pertenece.


2. Si s es el primer smbolo que se puede verificar en el alfabeto, seguro que
s pertenece al alfabeto S.
3. Si no ocurre lo anterior, entonces se debe verificar la pertenencia del smbolo S pero ahora en el resto de los smbolos de S.

Claro que podemos utilizar el predicado hecho anteriormente para determinar la pertenencia de un elemento a un conjunto (pagina 11), ya que los alfabetos
son conjuntos.
> (pertenece? x (a w i g x))
#t
> (define S (0 1)) ;; Sea S el alfabeto con los s
mbolos (0 1)
> (pertenece? 0 S)
#t
> (pertenece? 2 S)
#f

2.2.3.

Cardinalidad de un alfabeto

La cardinalidad de un alfabeto es la cantidad de smbolos que contiene. La


cardinalidad desde el punto de vista de los alfabetos es exactamente el mismo que
la cardinalidad en los conjuntos (pagina 12). En este sentido podemos utilizar la
misma herramienta que con los conjuntos.
Para utilizar la herramienta de cardinalidad, se requiere un alfabeto y la car
dinalidad produce un numero
natural que corresponde con la cantidad de ele
mentos que contiene el alfabeto, los siguientes son ejemplos de como
se utiliza
esta herramienta.
de cardinalidad, y al referirnos a un alfabeto S, ahora
Con la definicion
somos capaces de responder a la pregunta cuantos smbolos tiene el alfabeto
S? la respuesta se obtiene interactuando con DrRacket como en los siguientes
ejemplos.
>
2
>
5
>
0
>
>
8
>

(cardinalidad (0 1))
(cardinalidad (a b c d e))
(cardinalidad alfabetoVacio)
(define S (q k s u e l a p))
(cardinalidad S)

2.2. ALFABETOS

47

Actividad 2-2
Calcula la cardinalidad de los siguientes alfabetos. Utiliza la herramienta cardinalidad que has programado en DrRacket.
1. (3 90 2 8 1)7
2. (2 903 1 0 3)7
3. (casa perro azul crisantemo)7
4. (a b)7
5. (23bv 2q01 sw)7

2.2.4.

Subalfabeto

Una vez mas recordamos que los alfabetos son conjuntos, unos conjuntos que
solamente agrupan smbolos. Pero como conjuntos, es posible definir el concepto
de subalfabeto analogo al concepto de subconjunto (ver pagina 19).
Si S1 y S2 son alfabetos, decimos que S1 es un subalfabeto de S2 cuando
todos los smbolos de S1 pertenecen al alfabeto S2.
efectiva de subconjunto? es un predicado que se estudio en
La definicion
la pagina 19, podemos emplear este predicado para crear otro predicado con un
nombre mas adecuado:
Codigo 2.4: Subalfabeto
1
2

;; se define el concepto subalfabeto? como un sinonimo de subconjunto?1


(define subalfabeto? subconjunto?)
> (subalfabeto? (-1 0 1 2) (0 1 2 3 4))
#f ;; porque -1 no pertenece a (0 1 2 3 4)
> (subalfabeto? () (0 1 2 3 4))
#t ;; porque alfabetoVacio es subalfabeto de cualquier alfabeto
>

Actividad 2-3
Escribe un procedimiento en DrRacket que se llame subalfabetos y que reciba dos argumentos: un alfabeto S y una lista de alfabetos LS y devuelva como
salida una lista de valores booleanos. Ambas listas, la lista de alfabetos de entrada LS y la de salida son de la misma longitud, y para cada alfabeto Si en la
lista de alfabetos de entrada LS, corresponde un valor booleano en la lista de
salida. La i-esima salida debe ser #t si (subalfabeto? Si S) 7 #t.
(subalfabetos (0 1 2 3 4) ((2 3 4) (0 2 4) (3 4 5))) 7
(#t #t #f )

CAPITULO
2. SIMBOLOS
Y ALFABETOS

48

2.2.5.

Igualdad en alfabetos

Dos alfabetos S1 y S2 son iguales si contienen exactamente los mismos smbolos. Para determinar la igualdad se requiere:
1. Determinar que todos los smbolos de S1 pertenecen tambien al alfabeto S2 .
Hacer solo esta parte no es suficiente, porque pueden haber smbolos en S2
que no pertenecen a S1 .
2. Determinar que todos los smbolos de S2 pertenecen tambien al alfabeto S1 .
Codigo 2.5: Verificar igualdad en alfabetos
1
2
3
4

;; Se crea un sinonimo de conjuntosIguales?


;; (alfabetosIguales? Alfabeto Alfabeto) 7 Booleano?
;; (alfabetosIguales? (0 1 2) (2 0 1)) 7 #t
(define alfabetosIguales? conjuntosIguales?)

con algunos ejemplos:


Podemos probar la definicion
> (alfabetosIguales? (2 8 3 4) (3 8 4 2))
#t
> (alfabetosIguales? () alfabetoVacio) ;; requiere la def de alfabetoVacio
#t

Actividad 2-4
Separa la siguiente lista de alfabetos en dos sublistas. Cada una de las listas
debe tener alfabetos iguales. Prepara un procedimiento en DrRacket que se
llame separaAlfabetos que haga esta tarea automaticamente.
Entrada: una lista de alfabetos.
Salida: una lista con dos listas, en cada lista debe haber alfabetos iguales.
((3 2 0 1) (0 2 1 3) (4 2 1 3) (4 3 1 2) (2 4 3 1) (1 2 3 0) (0 3 2
1) (3 1 4 2) (0 2 3 1) (3 2 1 4) (1 3 2 4) (2 1 0 3) (1 3 0 2) (0 1
2 3) (3 0 1 2) (2 1 4 3) (1 0 3 2) (3 1 2 0) (1 2 3 4) (4 1 3 2) (2
3 4 1) (3 2 4 1) (2 3 0 1) (2 4 1 3))
1
2

;; aqui defines la lista de alfabetos


(define LAlfabetos ((3 2 0 1) (0 2 1 3) ... ))

3
4
5
6
7
8

;; creas tu procedimeinto
(define separaAlfabetos
( (LA)
;; ... Aqui va tu codigo
))

9
10
11

;; Pruebas tu codigo
(separaAlfabetos LAlfabetos)

3. Palabras y Lenguajes

Contenido
3.1. Palabras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

49

3.1.1. La palabra vaca . . . . . . . . . . . . . . . . . . . . . . .

50

3.1.2. Igualdad en las palabras . . . . . . . . . . . . . . . . . .

51

3.1.3. Palabras de un alfabeto . . . . . . . . . . . . . . . . . . .

52

3.1.4. Alfabeto de una palabra . . . . . . . . . . . . . . . . . .

53

3.1.5. Longitud de una palabra . . . . . . . . . . . . . . . . . .

53

3.2. Operaciones con palabras . . . . . . . . . . . . . . . . . . . . .

54

de palabras . . . . . . . . . . . . . . . . .
3.2.1. Concatenacion

54

3.2.2. Escribir en una palabra . . . . . . . . . . . . . . . . . . .

56

3.2.3. Potencia de una palabra . . . . . . . . . . . . . . . . . .

58

3.2.4. Prefijo y sufijo . . . . . . . . . . . . . . . . . . . . . . . .

59

3.2.5. Subpalabras . . . . . . . . . . . . . . . . . . . . . . . . .

61

3.2.6. Palabra inversa . . . . . . . . . . . . . . . . . . . . . . .

63

3.3. Lenguajes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

64

3.3.1. Alfabeto inducido por un lenguaje . . . . . . . . . . . .

66

3.3.2. Lenguaje Nulo . . . . . . . . . . . . . . . . . . . . . . . .

66

3.3.3. El lenguaje identidad . . . . . . . . . . . . . . . . . . . .

67

3.3.4. Lenguaje unitario . . . . . . . . . . . . . . . . . . . . . .

68

3.3.5. La pertenencia de una palabra a un lenguaje . . . . . .

68

3.3.6. Sublenguaje . . . . . . . . . . . . . . . . . . . . . . . . .

69

3.3.7. Lenguajes iguales . . . . . . . . . . . . . . . . . . . . . .

71

3.4. Operaciones con lenguajes . . . . . . . . . . . . . . . . . . . .

72

de lenguajes . . . . . . . . . . . . . . . .
3.4.1. Concatenacion

72

3.4.2. Potencia de un lenguaje . . . . . . . . . . . . . . . . . .

73

3.5. Cerradura de Kleene . . . . . . . . . . . . . . . . . . . . . . . .

74

Con solo los smbolos no se puede hacer mucho, para que su utilidad sea
notable tenemos que formar con ellos otros elementos que sirvan para comunicar un mensaje. Lo primero que haremos con los smbolos es construir palabras,
luego con esas palabras podemos determinar lenguajes.

3.1.

Palabras

Una palabra es una secuencia finita de smbolos. Una secuencia es lo mismo que una cadena, lista o como en ciencias computacionales se conoce como un
string.
49


CAPITULO
3. PALABRAS Y LENGUAJES

50
Ejemplo 3-1

Los siguientes ejemplos son palabras


(); La palabra vac
a
(1 0 1 1 0 0) ; Palabra con s
mbolos 1 y 0
(25 45 85 20 19) ; Se consideran como 5 letras
(a b b c c c a) ; Palabra con s
mbolos a, b y c
(fgh oiu qwk asm qwu) ; 5 s
mbolos

En su forma una palabra se parece mucho a un conjunto o a un alfabeto, pero


a diferencia de estos, en las palabras hay dos caractersticas importantes que no
se ven ni en los conjuntos ni en los alfabetos claro.

1. Las palabras permiten repeticiones de los smbolos.


2. El orden en que estan los smbolos es importante.

Como vamos a modelar una palabra mediante una lista de smbolos, necesitamos un predicado que determine si un objeto es una palabra o no lo es. El
predicado debe devolver #t cuando se le presente una palabra en forma de una
lista de smbolos que puede o no ser la lista vaca; y por otro lado debe responder
con #f cuando lo que se presente no sea una palabra.
Codigo 3.1: Predicado para detectar una palabra
1
2
3
4
5
6
7
8

;; Determina si el argumento es una lista de simbolos de un alfabeto dado


;; (esPalabra? Cualquiera) 7 Booleano?
;; (esPalabra? (a k f)) 7 #t
;; (esPalabra? ((a) (k) (f)) 7 #f
;; (esPalabra? a) 7 #f
(define esPalabra?
( (w S)
(and (list? w) (paraTodo ( (s) (pertenece? s S)) w)) #t ))

3.1.1.

La palabra vaca

se menciona que las palabras son secuencias finitas de smboEn la definicion


los, estas secuencias van desde 0 elementos, lo que conocemos como palabra
infinivaca, hasta palabras muy grandes, pero nunca son palabras de tamano
to.
Codigo 3.2: La palabra vaca
1
2

;; Definimos el concepto de palabra vacia.


(define palabraVacia ())

3.1. PALABRAS

51

Claro que tambien podemos verificar que una palabra sea la palabra vaca.
Codigo 3.3: Verificacion de palabra vaca
1
2
3
4
5

;; Definimos el predicado palabraVacia?.


;; (palabraVacia? Palabra) 7 Booleano?
;; (palabraVacia? ()) 7 #t
;; (palabraVacia? (a b c)) 7 #f
(define palabraVacia? empty?)
> (palabraVacia? ())
#t
> (palabraVacia? palabraVacia)
#t
> (palabraVacia? (0 1 0 0 1))
#f

3.1.2.

Igualdad en las palabras

A diferencia de los conjuntos, en los que no importa el orden y no se permiten


las repeticiones de elementos, en las palabras s importa el orden y se permiten
las repeticiones de los smbolos.
Ejemplo 3-2
Los siguientes ejemplos son palabras que son diferentes porque el orden es
distinto
(1 3 4 2) es diferente que (4 3 1 2).
(1 1 1 1) es una palabra valida, aunque se repitan los smbolos cuantas veces sea necesario.

Para determinar si dos palabras son iguales ahora hay que verificar uno a uno
los elementos de ambas palabras, verificando la igualdad de los smbolos. Pode
mos establecer un enunciado mas formal para describir la idea de la verificacion.
Para verificar la igualdad de las palabras w y s:
1. Si (palabraVacia? w) 7 #t y (palabraVacia? s) 7 #t, es claro que son
iguales, de modo que la igualdad de las palabras se verifica y se devuelve
(w0 |w0 ) se
La notacion
#t.
establecio en la pagina 10, pero
w0 se refiere al car de una

2. Si w 7 (w0 |w0 ) y s 7 (s0 |s0 ), y se tiene que (iguales? w0 s0 ) 7 #t, lista, y w0 se refiere al cdr de la
entonces significa que al menos en el primer smbolo ambas palabras son misma lista.
iguales, as que ahora hay que verificar la igualdad de la palabra w0 con la
palabra s0 .
3. En otro caso, devolver #f, ya que difieren en un smbolo.


CAPITULO
3. PALABRAS Y LENGUAJES

52
Actividad 3-1

Escribe un predicado en DrRacket llamado palabrasIguales? que determine


si dos palabras son iguales. Recibe como entrada dos palabras, y ofrece como
salida #t si las palabras son iguales y #f si no son iguales.
Codigo 3.4: Verificacion de palabras iguales
1
2
3
4
5
6
7
8

;; (palabrasIguales? Palabra Palabra) 7 Booleano?


;; (palabrasIguales? (1 0 0 1 1) (1 0 0 1 1)) 7 #t
;; (palabrasIguales? (1 0 0 1 1) (1 0 1 1 1)) 7 #f
;; (palabrasIguales? () palabraVacia) 7 #t
(define palabrasIguales?
( (w s) ;<-- son palabras
;; .... aqui debes escribir tu codigo
))

3.1.3.

Palabras de un alfabeto

Considerando los smbolos que estan en una palabra es posible determinar


con que alfabeto pudo haberse creado, aunque pueden existir mas de un alfabeto
que pueda dar origen a la palabra. Consideremos por ejemplo la palabra NO,
y deseamos saber de que alfabeto es. Si sabemos que hay muchos alfabetos que
incluyen las letras N y O, entonces puede ser que cualquiera de esos alfabetos sea
el originario de la palabra.
Decimos que una palabra w surgio de un alfabeto S, si es la palabra vaca o
bien si es verdad que para todos los smbolos de la palabra se cumple que pertenecen al mismo alfabeto S.
Escribiremos entonces (esPalabra? w S) 7 #t cuando sea cierto que todos
los smbolos de w hayan sido tomado del alfabeto S; de otro modo escribiremos
(esPalabra? w S) 7 #f.

Actividad 3-2
Escribe un predicado en DrRacket que se llame esPalabra? que reciba una
palabra w y un alfabeto S, y que devuelva como salida un #t si todos los smbolos de w fueron tomados de S, y devuelve #f en caso contrario. Consejo: puedes
utilizar el cuantificador universal (pagina 14).
1
2
3
4
5
6
7
8

;; (esPalabra? Palabra Alfabeto) 7 Booleano?


;; (esPalabra? (s s a d d d) (s w a d)) 7 #t
;; (esPalabra? (0 0 0 1 1 3 2 2 2) (0 1 2)) 7 #t
;; (esPalabra? () (0 1 2)) 7 #t
(define esPalabra?
( (w S) ;; <-- una palabra w y un alfabeto S
;; .... aqui debes escribir tu codigo
))

3.1. PALABRAS
> (esPalabra?
#t
> (esPalabra?
#t
> (esPalabra?
#f
> (esPalabra?
#t
>

3.1.4.

53

(2 3 4) (1 2 3 4 5))
(2 3 4 2 2 2 4 4 5) (1 2 3 4 5))
(2 3 4 2 2 8 2 4 4 5) (1 2 3 4 5))
() (1 2 3 4 5))

Alfabeto de una palabra

En sentido opuesto, el alfabeto de una palabra es el conjunto de smbolos


que se utilizan para crear una palabra. En general el alfabeto de una palabra es
un subconjunto de otro alfabeto. Para obtener el alfabeto de una palabra simplemente hay que coleccionar las letras de la palabra que no se repitan.
Ejemplo 3-3
El alfabeto de la palabra (c a m a r e r a) es (c a m r e).

Actividad 3-3
Escribe un procedimiento DrRacket que permita obtener el alfabeto de una
palabra.
Codigo 3.5: El alfabeto de una palabra
1
2
3
4
5
6
7

;; Calcula los simbolos no repetidos en la palabra


;; (alfabetoDe Palabra) 7 Alfabeto?
;; (alfabetoDe (c a m a r a)) 7(c a m r)
(define alfabetoDe
( (w)
;; ..... aqui debes escribir tu codigo
))

3.1.5.

Longitud de una palabra

La longitud de una palabra es la cantidad de smbolos que contiene. Los


smbolos se cuentan sin importar si se repiten o no.
Ejemplo 3-4
La palabra (3 9 2 2 6 2) tiene longitud 6, porque tiene precisamente 6
smbolos.
La palabraVacia tiene longitud 0.


CAPITULO
3. PALABRAS Y LENGUAJES

54

Para decir que una palabra w tiene longitud k, lo vamos a expresar como
(longitud w) 7 k
establece que un procedimiento de nombre longitud tiene la
Esta notacion
de contar los smbolos de la palabra.
funcion

Por comodidad utilizaremos un sinonimo


del procedimiento cardinalidad,
visto en la pagina 12.
Codigo 3.6: Longitud de una palabra
1
2
3
4
5

;; Se define la longitud de una palabra como el numero de simbolos que contiene


;; se establece como sinonimo de la cardinalidad
;; (longitud Palabra) 7 NumeroEnteroNoNegativo?
;; (longitud (1 1 1 0 1)) 7 5
(define longitud cardinalidad)
> (longitud (1 2 7 3 1 1 1 4))
. . longitu: undefined;
cannot reference an identifier before its definition
> (longitud (1 2 7 3 1 1 1 4))
8
> (longitud ())
0

de longitud ocurre cuando se


El error encontrado en la primera interaccion
no
encuentra un smbolo que no es un smbolo primitivo del lenguaje y que aun
En este caso se escribio incorrectamente el identificador de
tiene una definicion.
longitud (hizo falta una d).

3.2.

Operaciones con palabras

En las siguientes secciones estudiaremos algunas operaciones que nos permiten manipular palabras, para obtener nuevas palabras o bien para determinar
condiciones particulares de las palabras.

3.2.1.

de palabras
Concatenacion

Si w 7 (w0 w1 ... wm1 ) es una palabra de longitud m, y s 7 (s0 s1


de la palabra w
... sn1 ) es otra palabra que es de longitud n, la concatencacion
con la palabra s es una nueva palabra
(concatenar w s) 7 (w0 w1 ... wm1 s0 s1 ... sn1 )
se logra una palabra de longitud m + n, que empieza
Con la concatenacion
con todos los smbolos de la palabra w y termina con todos los smbolos de la
palabra s. Entonces podemos escribir en terminos del lenguaje

3.2. OPERACIONES CON PALABRAS

55

(longitud (concatenar w s)) 7 (+ (longitud w) (longitud s))


de concatenacion
renombramos la primitiva append,
Para modelar la funcion
que nos permita entender mejor el funciopara crear una barrera de abstraccion
ya que estamos creando herramientas para trabajar con
namiento de la operacion,
palabras, lo adecuado entonces es renombrarla.
Codigo 3.7: Concatenar palabras
1
2
3
4
5

;; Concatenar palabras es agregar las letras de la segunda palabra


;; al final de la primera de derecha a izquierda
;; (concaternar Palabra Palabra) 7 Palabra?
;; (concatenar (1 2 3) (x y z)) 7(1 2 3 x y z)
(define concatenar append)
> (concatenar (a b c d) (1 0 1 1))
(a b c d 1 0 1 1)
> (concatenar (a b c d) x) ;; <----------- 1
(a b c d . x)
> (concatenar x (1 0 1 1)) ;; <------------- 2
... /rep.rkt:1088:24: append: contract violation
expected: list?
given: x
>

En las interacciones se ha tratado de concatenar una palabra y un smbolo.


es
1. (concatenar (a b c d) x) 7 (a b c d . x) Esta es una expresion
un par, cuyo primer elemento es una lista y el segundo es un smbolo.
2. (concatenar x (1 0 1 1)) 7 ... contract violation..- etc Este
append (remensaje de error resulta porque se ha utilizado mal la funcion

cuerda que concatenar solamente es un sinonimo


de append). El contrato

de append exige que todos sus operandos sean listas, excepto por el ultimo

que puede o no ser una lista. Si el ultimo


operando no es una lista, entonces
se tiene un par (ver el caso anterior).
Actividad 3-4
de intercalar dos
Escribe un procedimiento en DrRacket que tenga la funcion
palabras de la misma longitud. El procedimiento debe recibir como entrada
dos palabras, digamos que para dos palabras
w 7 (w0 w1 ... wm1 ) y s 7 (s0 s1 ... sm1 )
(intercalar w s) 7 (w0 s0 w1 s1 ... wm1 sm1 ), esto es producir una
nueva palabra con los smbolos de ambas palabras intercalados.
1
2
3
4
5
6
7
8

;; intercala los simbolos de dos palabras de la misma longitud


;; (intercalar Palabra Palabra) 7 Palabra?
;; (intercalar (a b c d) (1 2 3 4)) 7(a 1 b 2 c 3 d 4)
;; (intercalar (a b c d) (1 2 3)) 7 #f
(define intercalar
( (w s) ;; <---- son dos palabras de la misma longitud
;; <---- Aqui debes escribir tu codigo
))


CAPITULO
3. PALABRAS Y LENGUAJES

56
La identidad en las palabras

de concatenar tiene como operandos a dos palabras y el proLa operacion


ducto es una nueva palabra que tiene todos los smbolos de la primera palabra y
termina con todos los smbolos de la segunda palabra. Si el segundo operando es
palabraVacia el producto de concatenar se comporta del siguiente modo:
(concatenar w palabraVacia) 7 w

Es decir que al concatener por la derecha la palabraVacia a cualquier palabra w se obtiene esa misma palabra w. Por otro lado, si se concatena la palabraVacia con cualquier otra palabra w se obtiene el mismo resultado.
(concatenar palabraVacia w) 7 w
> (concatenar (a b c d) palabraVacia)
(a b c d)
> (concatenar palabraVacia (a b c d))
(a b c d)

As la palabraVacia funciona como el elemento identidad en la operacion


de palabras. Entonces, si se desea concatenar la palabraVade concatencacion
cia con ella misma, el producto sera nuevamente la palabraVacia, sin importar
cuantas veces se realice el procedimiento.

3.2.2.

Escribir en una palabra

Podemos agregar smbolos a una palabra, escribiendole sus letras por cualquiera de sus extremos. Para hacer estas operaciones se requiere de un smbolo y
una palabra, el resultado siempre sera una nueva palabra. El smbolo que se da
como argumento no debe ser el smbolo  (ver la pagina 43), pero la palabra dada
s puede ser la palabraVacia.

Escribir por izquierda


Si w 7 (w0 |w0 ) es una palabra, y es cualquier smbolo, le podemos escribir el smbolo a la palabra w por su extremo izquierdo, de modo que se
produzca una nueva palabra de la forma
(escribeIzq w) 7 ( |w)
Esto es, el producto de escribir por la izquierda el smbolo a la palabra w,
es una nueva palabra cuyo car es el nuevo smbolo y el cdr es la palabra w. Es
claro que si w 7 palabraVacia, entonces (escribeIzq w) 7 ( ).

3.2. OPERACIONES CON PALABRAS

57

En general, al agregar un smbolo por la izquierda de la palabra w se obtiene otra palabra de la forma:

(escribeIzq w) 7 ( w0 w1 ... wn1 )

Actividad 3-5
de
Escribe un procedimiento que se llame escribeIzq que tenga la funcion
agregar por la izquierda un smbolo e a una palabra w. El producto debe ser
una nueva palabra donde el car es el smbolo e y el cdr es la palabra w.
Codigo 3.8: Escribir por izquierda
1
2
3
4
5
6
7
8
9

;; Escribir un elemento e por la izquierda de la palabra w


;; (escribeIzq Simbolo Palabra) 7 Palabra?
;; (escribeIzq 0 (1 2 3)) 7(0 1 2 3)
;; (escribeIzq z (a b c)) 7(z a b c)
;; (escribeIzq w ()) 7(w)
(define escribeIzq
( (e w)
;;.... <------- Aqui debes escribir tu codigo
))

Escribir por dereha


Tambien es posible agregar un smbolo por la derecha de la palabra w,
donde w pudiera o no ser la palabraVacia. Escribiremos esribirDer para identificar un procedimiento que nos permita obtener una palabra con el smbolo
agregado por la derecha de la palabra w.
cuando w 7 (w0 |w0 ) escribimos
Para especificar esta accion

(escribeDer w) 7 (w0 w1 .... wn1 )

Pero cuando (palabraVacia? w) 7 #t

(escribeDer w) 7 ( )

Para poder escribir por derecha necesitamos concatenar la palabra no vaca


w con la palabra formada por escribeIzq el nuevo elemento a la palabraVacia:
(concatenar w (escribeIzq palabraVacia)) 7 (w0 w1 ... wn1 )


CAPITULO
3. PALABRAS Y LENGUAJES

58
Actividad 3-6

Codigo 3.9: Escribir por derecha


1
2
3
4
5
6
7
8
9

;; Escribir un elemento e por la derecha de la palabra w


;; (escribeDer Simbolo Palabra) 7 Palabra?
;; (escribeDer 0 (1 2 3)) 7(1 2 3 0)
;; (escribeDer z (a b c)) 7(a b c z)
;; (escribeDer w ()) 7(w)
(define escribeDer
( (e w)
;;.... <------- Aqui debes escribir tu codigo
))

3.2.3.

Potencia de una palabra

Definiremos ahora el concepto de la n-esima potencia de una palabra como


de una palabra n veces. Esto se realiza con el siguiente
la auto concatenacion
procedimiento
Para encontrar la potencia n de una palabra w:

1. Si (= n 0) 7 #t, entonces se produce palabraVacia.


2. Si (= n 1) 7 #t, entonces se produce w.
3. Si (> n 1) 7 #t, entonces se produce
(concatenar w (potenciaPalabra (- n 1) w))

El problema con este procedimiento es que se generan procesos recursivos


Es posible hacer
que son costosos en terminos de memoria y tiempo de ejecucion.

un procedimiento que sea mas eficiente utilizando funciones auxiliares, disenan que en uno de sus parametros se lleve la construccion
de la nueva
do una funcion
del resultado acpalabra, y de manera incremental se aplique la concatenacion
tual con la palabra.
que simplemente invoque la funcion
auxiFinalmente utilizar una funcion
liar con los argumentos debidamente inicializados.
Ejemplo 3-5
La potencia 4 de la palabra w 7 (a b b).
(a b b a b b a b b a b b)

3.2. OPERACIONES CON PALABRAS

59

Actividad 3-7
Escribe un procedimiento en DrRacket que calcule la n e sima potencia de una

palabra w. Los datos de entrada son una palabra w y un numero


entero no
negativo n. El resultado es una nueva palabra donde se han concatenado n
veces la misma palabra w. Si (= n 0) 7 #t, entonces el resultado debe ser
que construya el resultado a
palabraVacia. Puedes auxiliarte de una funcion
medida que aumenta un contador desde 1 hasta n.
Codigo 3.10: Potencia de una palabra
1
2
3
4
5
6

;; Concatena n veces la misma palabra


;; potenciaPalabra-aux es una funcion auxiliar de potenciaPalabra
(define potenciaPalabra-aux
( (w n res)
;; .... Aqui debes escribir el codigo
))

7
8
9
10
11
12
13
14
15
16
17

;; Concatena n veces la misma palabra


;; (potenciaPalabra Palabra NumeroEnteroNoNegativo) 7 Palabra?
;; (potenciaPalabra (1 1 0) 0) 7()
;; (potenciaPalabra (1 1 0) 1) 7(1 1 0)
;; (potenciaPalabra (1 1 0) 2) 7(1 1 0 1 1 0)
;; (potenciaPalabra (1 1 0) 3) 7(1 1 0 1 1 0 1 1 0)
(define potenciaPalabra
( (w n)
;; ... aqui debes escribir el codigo
))

3.2.4.

Prefijo y sufijo

alfabeto S, puede descomCualquier palabra w hecha con smbolos de algun


ponerse en partes, el prefijo y el sufijo.

Prefijo

Digamos que w 7 (w0 w1 ... wn1 ) es una palabra con (longitud w) 7 n,


con (>= n 0) 7 #t. Decimos que una palabra 7 (0 1 ... k1 ) con una
longitud (longitud ) 7 k, donde (>= k 0) 7 #t es un prefijo de w, si existe
una palabra 7 (0 1 ... m1 ) con la que puede verificarse que

(palabrasIguales? w (concatenar )) 7 #t

Esto significa que los primeros k smbolos (la longitud de ) de la palabra


w son precisamente los que forman la palabra , y el resto forman la palabra .
Dicho de otro modo, la palabra w puede descomponerse en dos partes, la primera
es y la segunda es .


CAPITULO
3. PALABRAS Y LENGUAJES

60
Ejemplo 3-6

Supongamos que w 7 (l i b r e r o). La palabra 7 (l i b r e) es


un prefijo para w, porque podemos dar la palabra 7 (e r o), para que al
hacer
(concatenar ) 7 (concatenar (l i b r) (e r o))7 (l i b r e
r o)
(palabrasIguales? w (concatenar )) 7 #t

Si es precisamente la palabraVacia, entonces es un prefijo para la palabra w porque si hacemos 7 w, podemos asegurar que
(palabrasIguales? w (concatenar )) 7 #t
porque
(conacatenar ) 7 (conacatenar palabraVacia w) 7 w

Actividad 3-8
Escribe un predicado en DrRacket que se llame prefijo? y que reciba como
entrada dos palabras s y w. El predicado debe devolver #t si la palabra s es un
prefijo para la palabra w; y debe devolver falso en caso contrario.
Codigo 3.11: Prefijo de una palabra
1
2
3
4
5
6
7
8

;; Determina si una palabra s es prefijo de una palabra w


;; (prefijo? Palabra Palabra) 7 Booleano?
;; (prefijo? (l i b r) (l i b r e r i a)) 7 #t
;; (prefijo? (l i b r o) (l i b r e r i a)) 7 #f
(define prefijo?
( (s w) ;; <-- dos palabras
;; .... Aqui debes escribir tu codigo
))

Sufijo
De manera similar, si w, y son palabras en el mismo alfabeto S, decimos
que es un sufijo de la palabra w si podemos verificar que
(palabrasIguales? w (concatenar )) 7 #t
Podemos observar que si 7 palabraVacia entonces es un sufijo de w, porque podemos hacer que 7 w para lograr que (palabrasIguales? w (concatenar
)) 7 #t.

3.2. OPERACIONES CON PALABRAS

61

Actividad 3-9
Escribe un predicado en DrRacket que se llame sufijo? y que reciba como
entrada dos palabras s y w. El predicado debe devolver #t si la palabra s es un
sufijo para la palabra w; y debe devolver falso en caso contrario.
Codigo 3.12: Sufijo de una palabra
1
2
3
4
5
6
7
8

;; Determina si una palabra s es sufijo de una palabra w


;; (sufijo? Palabra Palabra) 7 Booleano?
;; (sufijo? (e r i a) (l i b r e r i a)) 7 #t
;; (sufijo? (f e r i a) (l i b r e r i a)) 7 #f
(define sufijo?
( (s w) ;; <-- dos palabras
;; .... Aqui debes escribir tu codigo
))

3.2.5.

Subpalabras

Sigamos suponiendo que w 7 (w0 w1 ... wn1 ) es una palabra; y supongamos tambien que 7 (0 1 ... m1 ) es otra palabra. Ambas palabras de
longitud mayor o igual que 0. Decimos que es una subpalabra de la palabra w
si podemos proporcionar dos palabras y con las que podamos verificar
(palabrasIguales? w (concatenar )) 7 #t
Si w 7 palabraVacia, solo podemos encontrar una subpalabra para w que
es precisamente 7 palabraVacia; porque podemos hacer que 7 7 palabraVacia, y hacer
(palabrasIguales? w (concatenar )) 7 #t
porque
(palabrasIguales? () (concatenar () () ())) 7 #t

Ejemplo 3-7
Digamos que w 7 (c o m p a r t o); entonces la palabra 7 (p a r)
es una subpalabra de w, porque podemos dar otras dos palabras 7 (c o
m) y 7 (t o) con las que podemos verificar que
(palabrasIguales? w (concatenar )) 7 #t
porque
(concatenar )7
(concatenar (c o m) (p a r) (t o)) 7 (c o m p a r t o)


CAPITULO
3. PALABRAS Y LENGUAJES

62
Ejemplo 3-8

Ahora digamos que w 7 (s u p e r i o r). La palabra 7 (i o r) es


una subpalabra de w porque podemos dar la palabra 7 (s u p e r) y la
palabra 7 palabraVacia de modo que podemos verificar que
(palabrasIguales? w (concatenar )) 7 #t
porque
(palabrasIguales? w (concatenar (s u p e r) (i o r) ())) 7 #t

Una palabra w 7 (w0 w1 ... wn1 ) es subpalabra de ella misma. Esto es


cierto porque si hacemos 7 (w0 w1 ... wn1 ) y proponemos 7 palabraVacia y 7 palabraVacia, podemos concatenar , y para hacer una palabra
que es exactamente igual que w.
Ejemplo 3-9
Ahora digamos que w 7 (s u p e r i o r). La palabra 7 (s u p e r
i o r) es una subpalabra de w porque podemos dar la palabra 7 () y la
palabra 7 () de modo que podemos verificar que
(palabrasIguales? w (concatenar )) 7 #t
porque
(palabrasIguales? w (concatenar () (s u p e r i o r) ())) 7 #t

Actividad 3-10
Escribe un predicado en DrRacket que se llame subpalabra? y que reciba
como entrada la palabra s y la palabra w, de modo que la computadora determine #t si la palabra s es una subpalabra de w, y de otro modo devuelva
#f.
Codigo 3.13: Subpalabra de una palabra
1
2
3
4
5
6
7
8
9

;; Determina si una palabra s es subpalabra de una palabra w


;; (subpalabra? Palabra Palabra) 7 Booleano?
;; (subpalabra? (e r i a) (l i b r e r i a)) 7 #t
;; ya que 7(l i b r); 7(e r i a); 7()
;; (subpalabra? (f e r i a) (l i b r e r i a)) 7 #f
(define subpalabra?
( (s w) ;; <-- dos palabras
;; .... Aqui debes escribir tu codigo
))

3.2. OPERACIONES CON PALABRAS

63

Actividad 3-11
Escribe un procedimiento en DrRacket que se llame componentesDe y que
reciba como entrada la palabra s y la palabra w, para que calcule la lista con
los tres componentes de la palabra: el prefijo , la subpalabra s y el sufijo
siempre que (subpalabra? s w) 7 #t, y en otro caso que la respuesta sea #f.
Codigo 3.14: Componentes de una palabra
1
2
3
4
5
6
7
8
9

;; Determina las tres componentes de una palabra w cuando s es subpalabra de w


;; (componentesDe Palabra Palabra) 7 ListaDe/Palabra?
;; (componentesDe (t i m e) (m u l t i m e t r o)) 7((m u l) (t i m e)
;; (t r o))
;; (componentesDe (t i m e s) (m u l t i m e t r o)) 7 #f
(define componentesDe
( (s w) ;; <-- dos palabras
;; .... Aqui debes escribir tu codigo
))

3.2.6.

Palabra inversa

Si w 7 (w0 w1 ... wn1 ) es una palabra, la palabra inversa de w es otra


palabra
(palabraInversa w) 7 (wn1 ... w1 w0 )
de la
Podemos definir un procedimiento efectivo para modelar la funcion
palabraInversa con los siguientes casos:

w 7 palabraVacia entonces palabraVacia;


w 7 (w0 |w0 ) entonces hacer (escribeDer w0 (palabraInversa w0 ))
primitiva reverse, que permite obtener una
Pero DrRacket ofrece la funcion
Al operar una
lista inversa de una lista que se da como argumento de la funcion.
lista lst con reverse se obtiene una nueva lista con los mismos elementos de lst
pero en orden inverso.
> (reverse (1 2 3 4))
(4 3 2 1)
> (reverse ())
()

As definiremos nuestro procedimiento palabraInversa como un sinonimo


de reverse.
Codigo 3.15: Palabra inversa
1
2

;; Se crea un sinonimo de reverse, para modelar la funcion de palabra inversa


(define palabraInversa reverse)


CAPITULO
3. PALABRAS Y LENGUAJES

64
Actividad 3-12

Un palndromo es una palabra que se puede leer de igual manera tanto de


izquierda a derecha como de derecha a izquierda. Como (r e c o n o c e

r) que si es un palndromo (asegurate


de leerla de izquierda a derecha y luego
de derecha a izquiera). Escribe un predicado en DrRacket que verifique si una
palabra es un palindromo. El predicado se debe llamar palindromo?, debe
recibir como entrada una palabra w y como salida ofrecer un valor de verdad
#t si efectivamente w es un palndromo, de otro modo devolver #f.
1
2
3
4
5
6
7
8
9

;; determina si una palabra se puede leer igualmente en ambos sentidos


;; (palindromo? Palabra) 7 Booleano
;; (palindromo? (r e c o n o c e r)) 7 #t
;; (palindromo? ()) 7 #t
;; (palindromo? (a n i t a l a v a)) 7 #f
(define palindromo?
( (w)
;; <---- escribe aqui tu codigo
))

3.3.

Lenguajes

Al seleccionar los smbolos que forman las palabras, una pregunta inmediata
es cuantas palabras se pueden formar con un conjunto de letras (smbolos)?, voy

a mostrar la respuesta mediante la siguiente construccion.


Supongamos que nuestro alfabeto es S 7 (a). Un alfabeto bastante pe solo tiene una letra. Disponemos tambien de la operacion
escribeDer
queno,
para construir palabras. Empecemos con palabraVacia, creando palabras con la

unica
letra a, y continuemos escribiendo por la derecha smbolos a la palabra que
resulte:

(escribeDer a palabraVacia) 7 (a)


(escribeDer a (a)) 7 (a a)
(escribeDer a (a a)) 7 (a a a)
(escribeDer a (a a a)) 7 (a a a a)
(escribeDer a (a a a a)) 7 (a a a a a)
y as hasta el infinito.

Es facil observar que con esta manera de crear nuevas palabras que con
tengan smbolos del mismo alfabeto, se pueden generar un numero
infinito de
palabras. As la cantidad de palabras que se pueden crear con un alfabeto de
cardinalidad finita, es infinito!

3.3. LENGUAJES

65

Pensemos ahora en el alfabeto del idioma espanol.


Este alfabeto tiene 27
letras: (a b c d e f g h i j k l m n
n o p q r s t u v w x y z), tambien es posible dar un metodo para generar todas las palabras, aunque este metodo nunca termine pues es imposible tenerlas todas. Primero tendramos que generar todas las palabras que tengas solamente una letra, y eso como hemos notado
es una tarea infinita.
Sin embargo, las personas que conocen de las reglas que rigen el idioma es han ingresado aproximadamente unos 100,000 vocablos, pero este numero

panol

no es el numero
total de palabras, faltan muchas de las palabras creadas en cada
(regionalismos) o las que son usadas de diferente forma (modismos); hay
region
as, 800,000
personas que se atreven a decir que son unas 800,000 palabras. Aun

es un numero
mucho menor que infinito.
Que tienen de especial las palabras que pertenecen al idioma espa nol? y
las que pertenecen a otro idioma en particular?

Lo unico
que tienen de especial estas palabras son que ellas tienen un significado. Seleccionando las palabras que se utilizan es posible transmitir un mensaje, porque cada palabra tiene un significado en s, y juntas aportan un mensaje.
Decimos entonces que un lenguaje es simplemente un conjunto de palabras. Es
te conjunto puede ser finito (como el caso del espanol,
aunque no se sepa bien
cuantas son) o puede ser infinito. Un lenguaje puede ser un listado de palabras,
o pueden seleccionarse las palabras que obedezcan a una regla de escritura.

Ejemplo 3-10
Los siguientes son ejemplos de alfabetos:
((b e g i n) (e n d) (i f) (e l s e)). Este alfabeto solo acepta
estas cuatro palabras
((1 0) (1 0 0) (1 0 0 0) (1 0 0 0 0) (1 0 0 0 0 0)). Este alfabeto acepta cinco palabras.

El lenguaje de las palabras de cinco letras vocales (del espanol)


que empiezan con a y terminan con a, por ejemplo (a i u u a). Este alfabeto
acepta 125 palabras.

El lenguaje de las palabras para hacer placas de automoviles,


que cons
tan de 3 numeros
y 3 letras, por ejemplo (9 3 5 v g w). Este alfabeto

acepta 19,683,000 palabras (igual numero


de autos con placas diferentes).
El lenguaje de las palabras clave que se forman con 8 letras en el alfa haciendo diferencia entre mayusculas

beto en espanol
y minusculas
e

incluyendo los numeros


y smbolos especiales; las palabras deben estar

compuestas con 3 numeros,


un smbolo especial, una letra mayuscula
y

tres letras minusculas.


CAPITULO
3. PALABRAS Y LENGUAJES

66

3.3.1.

Alfabeto inducido por un lenguaje

Si no sabemos el alfabeto con el que se ha determinado un lenguaje, aun


es posible calcular un conjunto de smbolos que sea un acercamiento al alfabeto
original. La idea es muy simple, solamente hay que juntar todas las letras que
componen todas las palabras conocidas.
Ejemplo 3-11
El alfabeto con el que se crearon las palabras del lenguaje ((h o l a) (a m
i g o s) (g o m a) (m a g o s)) es el conjunto de letras (h o l a m i
g s).

En ocasiones es necesario saber cual es el alfabeto que dio origen a las palabras de un lenguaje. Para responder preguntas de ese estilo debemos crear un
procedimiento que nos permita recuperar las letras con las que se escribieron las
palabras de un lenguaje.
Actividad 3-13
Escribe un procedimiento en DrRacket que permita obtener el conjunto de
letras con las que se puede escribir cualquier palabra de un alfabeto dado. El
procedimiento se debe llamar alfabetoDe*, y recibe como entrada un lenguaje L en la forma de una lista de palabras; la salida del procedimiento debe ser
un alfabeto, es decir un conjunto de smbolos.
Codigo 3.16: Alfabeto inducido por lenguaje
1
2
3
4
5
6
7
8
9
10

;; procedimiento par recuperar el conjunto de letras para formar


;; cada una de las palabras del lenguaje dado
;; (alfabetoDe* Lenguaje) 7 Alfabeto?
;; (alfabetoDe* ((h o l a) (l a n a) (h o j a))) 7(h o l a n j)
;; (alfabetoDe* ()) 7()
;; (alfabetoDe* (())) 7()
(define alfabetoDe*
( (L) ;<--- un lenguaje
;; ... Aqui debes escribir tu codigo
))

3.3.2.

Lenguaje Nulo

Empecemos nuestro estudio de los lenguajes definiendo el lenguaje vaco. El


lenguaje nulo es el lenguaje que incluye a ninguna palabra. La utilidad de este
lenguaje es importante porque sirve como punto de referencia, sirve de llave para
poder cerrar un ciclo iterativo.
Codigo 3.17: El lenguaje nulo
1

;; Se define el concepto de lenguaje nulo

3.3. LENGUAJES
2
3
4
5

67

;; como el lenguaje que contiene ninguna palabra


;; La necesidad de este lenguaje es como punto de referencia,
;; o clave para terminar iteraciones
(define lenguajeNulo ())

Es necesario tambien tener un predicado que nos permita decidir si un len


guaje es precisamente el lenguajeNulo, y vamos a definirlo como un sinonimo
de la primitiva empty?
Codigo 3.18: Verificacion del lenguaje nulo
1
2
3
4
5
6

;; Se define el predicado lenguajeNulo? para determinar


;; si un lenguaje no tiene palabras.
;; (lenguajeNulo? Lenguaje) 7 Booleano?
;; (lenguajeNulo? lenguajeNulo) 7 #t
;; (lenguajeNulo? ((1 0 0) (1))) 7 #f
(define lenguajeNulo? empty?)

3.3.3.

El lenguaje identidad

Un lenguaje que se confunde a veces con el lenguajeNulo es el lenguaje


identidad que contiene unicamente a la palabraVacia. Se confunde porque ambos lenguajes tienen funciones similares, pero conceptualmente son diferentes.
El lenguajeNulo no tiene palabras, mientras que el lenguajeId contiene

unicamente
a la palabraVacia, es decir su cardinalidad no es cero.
lenguajeNulo 7 (); Este es el lenguaje vac
o.
lenguajeId 7 (()); Este es el lenguaje identidad que contiene la
palabra vac
a.
Codigo 3.19: El lenguaje identidad
1
2

;; Se define un lenguaje identidad, el lenguaje que contiene solo a la palabra vacia


(define lenguajeId (()))

y claro, un predicado que nos permita determinar si un lenguaje es precisamente el lenguaje identidad.
Codigo 3.20: Predicado para determinar el lenguaje identidad
1
2
3
4
5
6
7
8
9

;; Determina si un lenguaje tiene unicamente la palabra vacia


;; (lenguajeId? Lenguaje) 7 Boolenao?
;; (lenguajeId? (()) ) 7 #t
;; (lenguajeId? lenguajeId) 7 #t
;; (lenguajeId? ()) 7 #f
;; (lenguajeId? ((a b))) 7 #f
(define lenguajeId?
( (L)
(lenguajesIguales? L (()))))


CAPITULO
3. PALABRAS Y LENGUAJES

68

3.3.4.

Lenguaje unitario

Llamaremos el lenguaje unitario del alfabeto S al lenguaje compuesto por


palabras unitarias sobre el alfabeto S.
Este lenguaje tiene una cardinalidad igual a la cardinalidad del alfabeto que
se utiliza para crear las palabras unitarias.
Ejemplo 3-12
El lenguaje unitario del alfabeto A 7 (9 4 6 8) es
LA 7 ((9) (4) (6) (8))

Para formar las palabras hay que escribeDer o escribeIzq cada una de las
letras del alfabeto con la palabraVacia.
Actividad 3-14
Escribe un procedimiento en DrRacket llamado lenguajeUn que dado un alfabeto S, genere su lenguaje unitario.
Codigo 3.21: El lenguaje unitario de un alfabeto
1
2
3
4
5
6
7

;; Genera lista de conjuntos de cardinalidad 1 de un alfabeto


;; (lenguajeUn Alfabeto) 7 Lenguaje?
;; (lenguajeUn (1 0)) 7((1) (0))
(define lenguajeUn
( (S) ;<--- un alfabeto en forma de lista de letras
; .... aqui debes escribir tu codigo
))

El lenguaje unitario es importante porque sirve como generador de palabras.


Para crear este lenguaje unitario es necesario hacer (escribeDer s palabraVacia) para cada uno de los smbolos del alfabeto S, representados por s, esto es
escribir una letra del alfabeto S representada por s a la derecha [o izquierda] de
la palabra vaca.
El producto de aplicar escribeDer a cada smbolo con la palabra vaca es un
lenguaje con (cardinalidad S) palabras unitarias.
> (lenguajeUn
((a) (b) (c)
> (lenguajeUn
((0) (1) (2)
>

3.3.5.

(a b c d e f))
(d) (e) (f))
(0 1 2 3))
(3))

La pertenencia de una palabra a un lenguaje

Podemos determinar la pertenencia de una palabra a un lenguaje si cumple


una de las dos siguientes condiciones:

3.3. LENGUAJES

69

1. La palabra es identica a alguna de las palabras en la lista de palabras que


define el lenguaje.

2. La palabra se escribe obedeciendo la regla que determina como


deben escribirse las palabras de un lenguaje.
Cuando se intenta verificar la pertenencia de una palabra a un lenguaje se
utiliza la primera regla cuando el lenguaje esta definido de manera explcita,
es decir, enlistando cada una de las palabras que conforman el lenguaje; pero
cuando el lenguaje dicta una regla para escribir las palabras, entonces se debe
verificar con la segunda regla. En este captulo trataremos el tema de determinar
si una palabra pertenece a un lenguaje definido de manera explcita.
Una de las ventajas de crear los conceptos anteriores acerca de los smbolos,
las palabras, y lenguajes, es que podemos incorporar el nuevo conocimiento para
construir conceptos mas complejos. Este es uno de esos casos porque para determinar si una palabra pertenece a un lenguaje debemos comparar una a una las
palabras del lenguaje con la palabra buscada.
En el mejor caso, la palabra buscada es la primera en ser comparada. En este
caso el resultado debe ser #t. Si no ocurre este caso, entonces se debe buscar en
el resto de las palabras del lenguaje, una vez que se ha omitido la primera que ya
ha sido comparada.
El peor caso ocurre cuando despues de haber comparado con todas las palabras del lenguaje, la palabra buscada no fue encontrada. En ese caso la respuesta
es #f.
Lo interesante es que para determinar si dos palabras son iguales ya tenemos
un predicado que se llama precisamente palabrasIguales? (ver la pagina 52), es
necesario utilizar este predicado porque estamos tratando con palabras, aunque
claro siempre es posible bajar de nivel para utilizar procedimientos primitivos.
Codigo 3.22: Pertenencia de una palabra a un lenguaje
1
2
3
4
5
6
7
8
9

;; Determina si una palabra pertenece a un lenguaje


;; (enLenguaje? Palabra Lenguaje) 7 Booleano?
;; (enLenguaje? (h o) ((k o) (m o) (h o) (s o))) 7 #t
;; (enLenguaje? (h o) ((k e) (m e) (h e) (s e))) 7 #f
(define enLenguaje?
( (w L) ; <-- una palabra <w> y un lenguaje <L>
(cond ((lenguajeNulo? L) #f ) ;<-- el lenguaje ()
((palabrasIguales? w (car L)) #t )
(else (enLenguaje? w (cdr L))))))

3.3.6.

Sublenguaje

Sean L1 y L2 dos lenguajes. Decimos que L1 es un sublenguaje de L2 cuando


todas las palabras en el lenguaje L1 tambien pertenecen al lenguaje L2 .
de sublenguaje es en terminos de un
Otro modo de enunciar la definicion
cuantificador universal. Si consideramos que el predicado ( (w) (enLenguaje? w


CAPITULO
3. PALABRAS Y LENGUAJES

70

L2 )) debe ser #t para todos las palabras en el dominio L1 , tenemos todo lo necesario para determinar si un lenguaje es sublenguaje de otro utilizando solamente
un cuantificador universal.

Actividad 3-15
Escribe un predicado en DrRacket que determine mediante el uso de un cuantificador universal, que un lenguaje L1 es un sublenguaje de otro lenguaje L2.
Este predicado se debe llamar sublenguaje? y debe recibir como entrada los
dos lenguajes L1 y L2, ambos en forma de lista de palabras; como salida el
predicado debe devolver #t si el lenguaje L1 es efectivamente un sublenguaje
del lenguaje L2, y #f en otro caso.
Codigo 3.23: Determinar que un lenguaje es sublenguaje de otro
1
2
3
4
5
6
7
8
9
10

;; Determina si un lenguaje L1 es sublenguaje de otro lenguaje L2


;; (sublenguaje? Lenguaje Lenguaje) 7 Booleano?
;; (sublenguaje? ((1 0) (1 1 0)) (() (1) (0) (1 0) (0 1) (1 1 0) (0 1 1)))
;; 7 #t
;; (sublenguaje? ((1 0) (1 1 0)) (() (1) (0) (1 0) (0 1) (1 1 1) (0 1 1)))
;; 7 #f
(define sublenguaje?
( (L1 L2) ; <--- dos lenguajes
;; ..... Aqui debes escribir tu codigo
))

Ejemplo 3-13
Si L1 7 (() (1) (0) (1 0) (0 1) (1 1 1) (0 1 1)),
L2 7 ((1 0) (1 1 0)),
L3 7 (1 0) (1 1 1) son lenguajes:
1. (sublenguaje? L2 L1 ) 7 #f; porque la palabra (1 1 0) en L2 no es
una palabra en el lenguaje L1 .
2. (sublenguaje? L3 L1 ) 7 #t; porque todas las palabras de L3 pertenecen al lenguaje L1 .
3. Si (sublenguaje?
La Lb ) 7 #t, no siempre es cierto que
(sublenguaje? Lb La ) 7 #t.

3.3. LENGUAJES

71

Actividad 3-16
Sea L 7 (() (0) (1) (1 0) (0 1 1 0) (0 0) (1 1) (0 0 0) (0 0 1) (0 1
0) (0 0 0 1) (1 1 0 0) (0 0 1 1) (0 1 0 1) (1 0 1 0)) un lenguaje.
1. Haz un procedimiento para que de manera automatica la computadora
determine cuales de los siguientes lenguajes son sublenguajes de L
2. Escribe en la lnea delante de cada lenguaje #t si es un sublenguaje de
L, o un #f si no lo es.
1. ((0 1 1) (0 1 0) (0 1) (1 1) ())
2. ((0 0 0 1) (0 0 0) (0 0) (1) (0))
3. ((1 0 1 0) (0 0 1) (1 1 1 0) (0 0 0 1))
4. ((1 0) (1) (0) ())

3.3.7.

Lenguajes iguales

Si L1 y L2 son lenguajes, decimos que L1 y L2 son lenguajes iguales si ambos


lenguajes contienen exactamente las mismas palabras.
Un resultado que podemos utilizar dice que L1 y L2 son lenguajes iguales
si se cumple que
si y solo
El concepto del predicado y se
encuentra definido en la
pagina 6.

(y (sublenguaje? L1 L2 ) (sublenguaje? L2 L1 )) 7 #t

Este resultado es completamente confiable. Para demostrarlo supongamos


en primer lugar que (lenguajesIguales? L1 L2 ) 7 #t. Tenemos que demostrar
que se cumple (sublenguaje? L1 L2 ) 7 #t, y tambien que (sublenguaje? L2
L1 ) 7 #t. Supongamos ahora que w es una palabra, y que (enLenguaje? w
entonces claL1 ) 7 #t. Como L1 y L2 son iguales (nuestra primera suposicion)
ramente tambien (enLenguaje? w L2 ) 7 #t. Como todas las palabras de L1
estan en el lenguaje L2 , (sublenguaje? L1 L2 ) 7 #t; y como todas las palabras
de L2 estan en L1 , podemos asegurar (sublenguaje? L2 L1 ) 7 #t.
En segundo lugar supongamos ahora que (sublenguaje? L1 L2 ) 7 #t, y
que (sublenguaje? L2 L1 ) 7 #t. Esto significa que cada una de las palabras
del lenguaje L1 esta tambien en el lenguaje L2 , porque L1 es sublenguaje de L2 ;
por otro lado cada palabra de L2 esta tambien en el lenguaje L1 porque L2 es
sublenguaje de L1 , entonces (lenguajesIguales? L1 ) 7 #t.


CAPITULO
3. PALABRAS Y LENGUAJES

72
Ejemplo 3-14

(lenguajesIguales? ((0 0) (1 0) (0 1)) ((1 0) (0 1) (0 0))) 7 #t


Para verificar la igualdad en los lenguajes no importa el orden en que se encuentren las palabras.

Actividad 3-17
Escribe un predicado que se llame lenguajesIguales? que tome como entradas los dos lenguajes L1 y L2, cada uno de ellos escrito en forma de una lista
de palabras. El predicado debe devolver #t si es cierto que los lenguajes son
iguales y #f en otro caso.
Codigo 3.24: Igualdad entre lenguajes
1
2
3
4
5
6
7
8

;; Dos lenguajes son iguales si uno es subconjunto del otro y viceversa


;; (lenguajesIguales? Lenguaje Lenguaje) 7 Booleano?
;; (lenguajesIguales? ((0 0) (1 0) (0 1)) ((1 0) (0 1) (0 0))) 7 #t
;; (lenguajesIguales? ((0 0) (1 0) (0 1)) ((1 0) (0 1) (1 1))) 7 #f
(define lenguajesIguales?
( (L1 L2)
;.... aqui debes escribir tu codigo
))

3.4.

Operaciones con lenguajes

vamos a extender las definiciones de concatenacion,


potencia
En esta seccion
e inverso que se crearon para las palabras, de modo que podamos utilizarlas para
manipular lenguajes.

3.4.1.

de lenguajes
Concatenacion

que nos permite extender todas las


Concatenar lenguajes es una operacion

palabras de un lenguaje con todas las palabras de otro lenguaje. La concatenacion


del lenguaje L1 con el lenguaje L2 , es el conjunto de todas las palabras
w 7 (concatenar ), donde
(y (enLenguaje? L1 ) (enLenguaje? L2 )) 7 #t
de los lenguajes L1 con L2 se conforma de la conEntonces la concatenacion
de cada palabra en L1 con cada palabra en L2 . Nombrearemos concacatenacion
de concatenar dos lenguajes. Es facil ver que la cardinatenarLeng a la operacion
de los dos lenguajes es el producto de la cardinalidad
lidad de la concatenacion
de ambos lenguajes.

3.4. OPERACIONES CON LENGUAJES

73

Ejemplo 3-15
(concatenarLeng ((l i b r) (f l o r)) ((e r o) (e r i a))) 7
((l i b r e r o) (l i b r e r i a) (f l o r e r o) (f l o r e r i
a))

Actividad 3-18
Escribe un procedimiento en DrRacket que se llame conacatenarLeng y que
reciba como entrada los dos alfabetos L1 y L2; y devuelva como salida un nue de cada palabra de L1 con cada
vo alfabeto que contenga la concatencacion
palabra en L2.
Codigo 3.25: La concatenacion de lenguajes
1
2
3
4
5
6
7
8
9

;; Concatena cada palabra de L1 con cada palabra en L2


;; y devuelve un conjunto con los resultados
;; (concatenarLeng Lenguaje Lenguaje) 7 Lenguaje
;; (concatenarLeng ((o s) (z a p a t)) ((i t o) (o t e))) 7
;; ((o s i t o) (o s o t e) (z a p a t i t o) (z a p a t o t e))
(define concatenarLeng
( (L1 L2) ; <---- dos lenguajes
;; .... aqui escribe tu codigo
))

Ahora, si el lenguaje L1 esta basado en el alfabeto S1 , y el lenguaje L2 esta basado en el alfabeto S2 , donde los alfabetos S1 y S2 no necesariamente son dife de los lenguajes
rentes, entonces las palabras que pertenecen a la concatenacion
esta basado en un nuevo alfabeto, el alfabeto que es inducido por las nuevas palabras, sin embargo este nuevo alfabeto puede calcularse a partir de los alfabetos
originales haciendo
(alfabetoDe (concatenarLeng L1 L2 )) 7 (union S1 S2 )

3.4.2.

Potencia de un lenguaje

que afecta a las palabras conLa potencia de un lenguaje es una operacion


como operacion
fundamental.
tenidas en el lenguaje, y tiene a la concatenacion
Definimos la n-esima potencia de un lenguaje L como el lenguajeId (ver la
del lenguaje n
pagina 67) si la potencia n es 0, de otro modo es la concatenacion
veces. Un modo de definir efectivamente la potencia de un lenguaje es siguiendo
los siguientes casos:
(potenciaLeng L n)7
1. Si (= n 0) 7 #t, entonces la potencia del lenguaje es lenguajeId;
2. De otro modo, la potencia del lenguaje se resuelve con
(conatatenarLeng L (potenciaLeng L (- n 1)))


CAPITULO
3. PALABRAS Y LENGUAJES

74

Pero este metodo claramente genera procesos recursivos (malos para la compu porque para resolver la operacion
de concatenarLeng se necesita antes
tacion)
resolver la potenciaLeng con una instancia menor de n; y antes de resolver esta
nueva instancia, se debe resolver una instancia menor, y as recursivamente hasta
que se encuentre que n 7 0, y entonces ya que se alcanza ese caso base, se pueden
empezar a hacer las n concatenaciones.
Otro metodo involucra un procedimiento auxiliar que agrega una nueva va del resultado de manera iterativa, siguiendo
riable res que lleva la construccion
los siguientes casos

(potenciaLeng-aux L n res)7
1. Si n 7 0, entonces la potenciaLeng-aux del lenguaje L es lenguajeId;
2. De otro modo, la potencia del lenguaje se resuelve recursivamente haciendo
(potenciaLeng-aux L (- n 1) (concatenarLeng L res))

Actividad 3-19
Escribe en DrRacket un procedimiento que sirva para calcular la n-esima po de utilizar una funcion

tencia de un lenguaje L, siguiendo la recomendacion


auxiliar.
Codigo 3.26: La potencia de un lenguaje
1
2
3
4
5
6
7

;; calcula la n-esima potencia de un lenguaje L


;; (potenciaLeng Lenguaje Numero) 7 Lenguaje?
;; (potenciaLeng ((a) (b)) 2) 7((a a) (a b) (b a) (b b))
(define potenciaLeng
( (L n)
;; ... Aqui debes escribir tu codigo
))

3.5.

Cerradura de Kleene

unaria1
La cerradura de Kleene es un lenguaje generado por una operacion
sobre un alfabeto S, y produce un lenguaque llamaremos Kleene* y que actua
[y el lenguaje que genera] lleva en su nombre el apellido del
je. Esta operacion
celebre matematico estadounidense Stephen Kleene, quien entre otras cosas estaFig. 3.1. Sthephen Cole Kleene
blecio las bases de la teora de las funciones recursivas, que junto con el calculo-
(1909 1994)
1 El termino unaria se refiere a aridad de la operacion.
La aridad es la cantidad de operandos que

unaria requiere solamente un operando, una operacion

requiere un operador. As que una operacion


binaria requiere dos, y as en adelante. En DrRacket es posible saber la aridad de un procedimiento
mediante procedure-arity, por ejemplo (procedure-arity potenciaLeng) 7 2

3.5. CERRADURA DE KLEENE

75

DrRacket (y otros lenguajes funcionafundamentan el lenguaje de programacion


les).

Podemos describir la cerradura de Kleene como el lenguaje que contiene a


todas las palabras de longitud finita que se pueden crear con los smbolos de un
es palabras de longitud finita, esto
alfabeto. Una parte clave de esta desccripcion
significa que todas las palabras desde la palabra de longitud 0 hasta la de una
longitud tan grande como se quiera, estan todas ellas en este lenguaje.

mas precisa. La cerradura de Kleene es


Podemos tambien dar una definicion
de las potencias mayores o iguales que 0 de un lenguaje basado en un
la union
alfabeto.

Supongamos que L 7 (lenguajeUn S); El lenguaje unitario de un alfabeto S.

(Kleene* S) 7 (union* (potenciaLeng L 0) (potenciaLeng L 1)


(potenciaLeng L 2) ... )

Ejemplo 3-16
Si S 7 (b) es un alfabeto, (Kleene* S) 7 (() (b) (b b) (b b b) (b b
b b) (b b b b b) ... )

es que computacionalmente no es posible


El problema con esta definicion
crear un procedimiento efectivo que calcule todas las palabras de este lenguaje,
simplemento porque en principio se requiere calcular las potencias de un lenguaje hasta el infinito. Sin embargo s podemos definir un lenguaje que se acerque a
Kleene*, al cual llamaremos nKleene* (cerradura finita de Kleene), ya que no es
de las primeras n potencias
precisamente la cerradura de Kleene, sino la union
del lenguaje unitario de un alfabeto S, incluyendo la potencia 0.

Entonces la cerradura finita de Kleene desde la potencia 0 hasta una poten generalizada de los lenguajes que resultan
cia n, con 0 n<< +infty.0 es la union
de calcular la n e sima potencia del lenguaje unitario del alfabeto S.


CAPITULO
3. PALABRAS Y LENGUAJES

76
Actividad 3-20

Escribe un procedimiento en DrRacket que calcule la cerradura finita de Klee


ne nKleene*, dando como entrada un alfabeto S y un numero
entero no ne de la j e sima potencia del
gativo n, y que devuelva como resultado la union
lenguaje unitario generado a partir del alfabeto S, considerano que j toma

valores de numeros
enteros desde 0 hasta n inclusive.
Codigo 3.27: Cerradura finita de Kleene
1
2
3
4
5
6
7
8
9
10

;; Genera un lenguaje que corrensponde a


;; la cerradura finita de Kleene porque genera las palabras de
;; longitud 0 hasta longitud n, para un n fijo.
;; (nKleene* Alfabeto Numero) -->Lenguaje
;; (nKleene* (0 1) 3) -->((1 1) (1 0) (0 1) (0 0) () (0) (1)
;; (0 0 0) (0 0 1) (0 1 0) (0 1 1) (1 0 0) (1 0 1) (1 1 0) (1 1 1))
(define nKleene*
( (S n)
; ... Aqui debes escribir tu codigo
))

> (nKleene* (0 1) 4)
((1 1 1) (1 1 0) (1 0 1) (1
(0 0 1) (0 0 0) (1) (0) ()
(0 0 0 0) (0 0 0 1) (0 0 1
(0 1 0 1) (0 1 1 0) (0 1 1
(1 0 1 1) (1 1 0 0) (1 1 0
>

0 0) (0 1 1) (0 1
(0 0) (0 1) (1 0)
0) (0 0 1 1) (0 1
1) (1 0 0 0) (1 0
1) (1 1 1 0) (1 1

0)
(1 1)
0 0)
0 1) (1 0 1 0)
1 1))

Cuando L 7 (lenguajeUn S) la cardinalidad de la cerradura finita de Kleene de un alfabeto S esta dada por
(+ (longitud (potenciaLeng L 0))
(longitud (potenciaLeng L 1))
...
(longitud (potenciaLeng L n)))

expt es una primitiva que se

utiliza para elevar un numero


x al exponente y, haciendo
(expt x y).

Ahora, si suponemos que el alfabeto S tiene (cardinalidad S) 7 k smbolos, entonces


(cardinalidad (nKleene* S n)) 7 (+ (expt k 0) (expt k 1) (expt k 2)
... (expt k n)).
Ejemplo 3-17
;; Calculamos la cardinalidad de la cerradura finita de Kleene
;; de tama
no 5
> (cardinalidad (nKleene* (0 1 2 3 4) 5))
3906
;; Comparamos con la expansi
on exponencial
> (+ (expt 5 0) (expt 5 1) (expt 5 2) (expt 5 3) (expt 5 4) (expt 5 5))
3906
>

3.5. CERRADURA DE KLEENE

77

Otra cosa que podemos hacer al trabajar con la cerradura de Kleene, es crear
un predicado que determine si una palabra o un lenguaje pertenecen a la cerradura de Kleene para un alfabeto determinado sin tener que verificar una a una
cada palabra del lenguaje.
Este predicado funciona con un argumento que puede ser una palabra o un
lenguaje; devuelve #t si el argumento es una palabra compuesta con smbolos
del alfabeto; tambien devuelve #t si el objeto es un lenguaje y todas las palabras
estan compuestas con smbolos del alfabeto. El predicado debe devolver #f en
cualquier otro caso.
Primero, para reconocer que un argumento que llamaremos X es una palabra
de un alfabeto S (ver pagina 50) se deben cumplir dos condiciones:
1. Que X sea una lista.
2. Ya que sabemos que X es una lista, para todos los elementos de la lista X
debe ser cierto que pertenecen al alfabeto S.
Segundo, para reconocer que el argumento X es un lenguaje generado con
palabras de un alfabeto S se deben cumplir tambien dos condiciones:
1. Que X sea una lista.
2. Ahora que ya sabemos que X es una lista, para todos los elementos de la
lista X debe ser cierto que son palabras del alfabeto S.

Actividad 3-21
Escribe un procedimiento en DrRacket que se llame Kleene*? con entrada un
objeto X de cualquier clase y un alfabeto S con los siguientes casos:
1. Si X es una palabra del alfabeto S, entonces #t.
2. Si X es un lenguaje cuyas palabras son hechas con smbolos de S, entonces #t.
3. en cualquier otro caso, entonces #f.
Codigo 3.28: La pertenencia una palabra o lenguaje a la Kleene*
1
2
3
4
5
6
7
8
9
10

;; verifica que una palabra o lenguaje pertenezcan a Kleene* de S


;; (Kleene*? (o Palabra Lenguaje) Alfabeto) -->Boolean?
;; (Kleene*? (1 0 0) (0 1)) -->#t
;; (Kleene*? (1 0 2) (0 1)) -->#f
;; (Kleene*? ((1 0 0) () (1) (1 0 0)) (0 1)) -->#t
;; (Kleene*? ((1 0 0) () (1) (1 2 0)) (0 1)) -->#f
(define Kleene*?
( (X S)
;; Aqui debes escribir el codigo
))


CAPITULO
3. PALABRAS Y LENGUAJES

78
Ejemplo 3-18

>(Kleene*? (1 0 0) (0 1))
#t
;; porque es una palabra en el alfabeto (0 1)
;;
>(Kleene*? (1 0 2) (0 1))
#f
;; Porque no es una palabra en el alfabeto (0 1)
;;
>(Kleene*? ((1 0 0) () (1) (1 0 0)) (0 1))
#t
;; Porque todas las palabras son en el alfabeto (0 1)
;;
>(Kleene*? ((1 0 0) () (1) (1 2 0)) (0 1))
#f
;; Porque al menos una palabra no es en el alfabeto (0 1)
;;
>(Kleene*? 1 (0 1))
#f
;; Porque 1 no es una palabra ni un lenguaje


4. Automatas
finitos determinstas

Contenido

4.1. Generalidades de automatas


. . . . . . . . . . . . . . . . .
4.1.1. Reconocedor de palabras validas . . . . . . . . . . .

4.1.2. Automatas
en procesamiento de lenguaje natural . .

4.1.3. Estacionamiento autonomo


para vehculos . . . . . .
4.1.4. Otras aplicaciones . . . . . . . . . . . . . . . . . . . .
4.2. Automatas finitos deterministas . . . . . . . . . . . . . . .
4.2.1. Los afd % como una clase . . . . . . . . . . . . . . . .
de transicion
. . . . . . . . . . . . . . . .
4.2.2. La funcion
4.3. Representaciones de los afd % . . . . . . . . . . . . . . . . .
4.3.1. Tablas de transiciones . . . . . . . . . . . . . . . . . .
4.3.2. Grafos de transiciones . . . . . . . . . . . . . . . . .
4.3.3. Transiciones en formato texto . . . . . . . . . . . . .
extendida del afd % . . . . . . . . . . . . . . . .
4.4. Transicion
extendida
4.4.1. Clases de congruencia sobre la transicion
4.5. Clase de congruencia de las palabras aceptadas . . . . . .
4.6. El lenguaje de un afd % . . . . . . . . . . . . . . . . . . . . .
4.6.1. Las palabras propias . . . . . . . . . . . . . . . . . .
4.6.2. Las palabras impropias . . . . . . . . . . . . . . . . .
4.7. Resumen metodos del afd % . . . . . . . . . . . . . . . . . .

4.1.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

. 79
. 80
. 81
. 81
. 82
. 82
. 84
. 86
. 88
. 88
. 89
. 91
. 93
. 95
. 97
. 99
. 100
. 101
. 102

Generalidades de automatas

Uno de los problemas basicos en la teora de lenguajes formales es determinar si una palabra pertenece a un lenguaje. Hasta ahora hemos tratado con
lenguajes en los que se ha dado una lista de palabras, de modo que el problema
de determinar la pertenencia de una palabra al un lenguaje es facilmente resuelto al buscar la palabra comparando una a una las palabras del lenguaje con la
palabra buscada, y dando como respuesta un #t si la palabra es encontrada y un
#f en el otro caso.
Sin embargo, hay situaciones en las que no hay una lista de palabras en

donde
buscar, y tampoco hay un predicado que determine la pertenencia de una
palabra al lenguaje, porque el lenguaje no ha sido determinado. Estas situaciones
ocurren cuando se desea modelar sistemas con las siguientes dos caractersticas:

1. El sistema se describe en un numero


finito de situaciones bien determinadas
llamadas estados.
2. El sistema reacciona cambiando de estado ante la presencia de uno de un
conjunto finito de eventos.
79

CAPITULO
4. AUTOMATAS
FINITOS DETERMINISTAS

80

3. Se desea que el sistema se encuentre en algunas situaciones especficas, y


o estado no es deseable.
cualquier otra situacion
En estos casos, la pregunta que surge es que secuencias de eventos son las
que llevan al sistema a un estado aceptable? y claro la pregunta complementaria
es que secuencias de eventos llevaran al sistema a un estado no aceptable?
En las siguientes subsecciones veremos algunos ejemplos de esta clase de
sistemas.

4.1.1.

Reconocedor de palabras validas

en particular aquellos que son compilaEn los lenguajes de programacion


dos, antes de ejecutar un programa se requiere verificar que todas las palabras

y smbolos que se han escrito en el codigo


fuente de un programa, sean parte
y de su alfabeto. El sistema que se encarga de esta
del lenguaje de programacion
se llama analizador lexico.
primera verificacion

En la etapa de analisis lexico, el sistema recibe como entrada el codigo


fuente
del programa y si el analisis paso sin problemas, devuelve como salida una lista
de las palabras que se encontraron, estas palabras reciben el nombre de tokens;
token desconocido, entonces se
en caso de que el sistema haya encontrado algun
detiene el analisis y marca el error.
Los estados de este sistema analizador lexico se identifican para cada una
reconoce. El sistema cambia de
de las palabras que el lenguaje de programacion

estados a medida que una palabra del codigo


fuente es recibida, leyendo una a
una cada letra de cada palabra. Una vez que se ha terminado de leer y analizar

la ultima
letra de una palabra, en dependencia del estado que se encuentre, se
o no pertenece.
determina si esa palabra pertenece al lenguaje de programacion
Si la palabra pertenece, se agrega esa palabra en la lista de tokens validos y se
continua con la siguiente parabra, de otro modo se determina el error encontrado.
Los eventos que hacen reccionar a este sistema es el conjunto de smbolos que
Genralmente los lenguajes de programacion

acepta el lenguaje de programacion.

aceptan el conjunto de smbolos definido por el codigo


ASCII estandard, pero
hay lenguajes con un conjunto muy reducido de smbolos que se permiten, por
ejemplo el lenguaje Brainfuck1 , que contiene un alfabeto de apenas 8 smbolos los
cuales son (> + - . , [ ] <), cualquier otro smbolo que no este en este alfabeto
genera una palabra no reconocida por el lenguaje.
Por otro lado, los lenguajes que tiene un alfabeto muy amplio son general que han elevamente los que se conocen como lenguajes de cuarta generacion,
claro permitiendo mas
do el poder expresivo de los lenguajes de programacion,
smbolos.
Para una referencia mas amplia en este tema, puedes revisar algunos libros
de compiladores como este par de sugerencias:
acerca de la construccion
1 Para una mejor referencia del lenguaje de programaciob
brainfuck visita http://www.hevanet.
com/cristofd/brainfuck/


4.1. GENERALIDADES DE AUTOMATAS

81

Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman. Compilers:


Principles, Techniques, and Tools. 2nd Ed. Addison Wesley; (September 10,
2006)
Andrew W. Appel. Modern Compiler Implementation in c/Java/ML. Cambridge University Press, New York, NY, USA. (1997)

4.1.2.

Automatas
en procesamiento de lenguaje natural

Los automatas
finitos tambies se han utilizado como parte medular en sistemas de procesamiento de lenguaje natural (PLN). El PLN es un a rea de las
ciencias computacionales en la que se producen, estudian y aplican procedimientos para generar y reconocer texto en lenguaje natural; tambien se hacen proce a partir de textos obtenidos de
dimientos para extraer y recuperar informacion

reportes. Los automatas


finitos se han utilizado como reconocedores de palabras
ya que hay ventajas en el uso de estas aquinarias, debido a su tipo de procesamiento, y la ventaja es que se pueden formalizar reglas para describir los textos
que se deben reconocer, eso hace mas rapido el reconocimiento.
Para una mayor referencia de este tema puedes revisar algunos de estos
artculos:

Karin Haenelt. Modelling Natural Language with finite automata. Obtenido


como recurso web en http://kontext.fraunhofer.de/haenelt/papers/
Theorietag14/HaeneltTheorietag14-Abstract.pdf, que fue visitado por

ultima
vez el 19 de marzo de 2014. (2004)
Mehryar Mohri. On some applications of finite-state automata theory to natural language processing. Natural Language Engineering, 2, Cambridge University Press, pp 61-80. (1996)
Maurice Gross. The Use of Finite Automata in the Lexical Representaion of
Natural Language. In Proceedings of the LITP Spring School on Theoretical
Computer Science: Electronic Dictionaries and Automata in Computational
Linguistics, Maurice Gross and Dominique Perrin (Eds.). Springer-Verlag,
London, UK, 34-50. (1987).

4.1.3.

Estacionamiento autonomo
para vehculos

de los automatas

La aplicacion
finitos en la robotica
es muy variada. En este

caso se utilizo un modelo de automata


finito para realizar las tareas de levantar,
2.

acomodar, ingresar datos y emitir ticket de un estacionamiento autonomo


La idea es que un usuario deje su automovil en la entrada del estacionamien
to, y el sistema que esta basado en automatas
finitos reciba el auto, lo levante hasta el nivel adecuado y lo acomode en el lugar preciso; que se ingresen los datos
2 Una descripcion
mas precisa se encuentra en el sitio http://www.academia.edu/2582712/
SEVA3D_Autonomous_Vehicles_Parking_Simulator_in_a_three-dimensional_environment

CAPITULO
4. AUTOMATAS
FINITOS DETERMINISTAS

82

del vehculo y emita el ticket de recibido. A la hora de retirar el auto haga un

procedimiento similar para entregar el auto a su dueno.

En este trabajo el alfabeto de senales


de entrada son smbolos que representan acciones como tomar-carro, primer-piso, ir-hacia, regresar, suelo,
elevar, segundo-piso, tercer-piso.

4.1.4.

Otras aplicaciones

Entre otras aplicaciones de los automatas


finitos podemos encontrar que se

han utilizado en proteomica


donde se han utilizado automatas
finitos para la
de reglas de clasificacion
de protenas3
induccion
Tambien en criptografa4 donde se ha propuesto esta tecnica para crear sis de clave
temas de ciframiento de secuencias que seas rapidos, con un tamano
relativamente corto.

Se han creado tantas variedades de automatas


finitos que ha sido necesario
estudiar las propiedades y capacidades de cada una de esas variedades, de mo de ella misma, ver por

do que la teora de automatas


finitos es una aplicacion
ejemplo:
Daniel Cazalis. Algebraic Theory of Minimal Nondeterministic Finite Automata with Applications. Ph.D. Dissertation. Florida International Univ., Miami,
FL, USA. Advisor(s) Geoffrey Smith. AAI3299197. (2007).
Mark Mercer. Applications of Algebraic Automata Theory to Quantum Finite Automata. Ph.D. Dissertation. McGill University, Montreal, Que., Canada, Canada. AAINR50960. (2008).

Hay muchas otras aplicaciones en donde se han empleado los automatas


finitos, estos han sido solamente algunos ejemplos. En este captulo vamos a revisar

los fundamentos que soportan la teora de automatas


finitos, empezando por los

denominados automatas
finitos determinstas, y lo haremos desde un punto de
orientada a objetos.
vista funcional utilizando programacion

4.2.

Automatas finitos deterministas

Un automata
finito determinista (afd %) es una clase de maquinaria teorica que genera objetos que sirven para analizar palabras de longitud finita. Las
3 F. Psomopoulos, S. Diplaris and P. A. Mitkas. A Finite State Automata Based Technique for
Protein Classification Rules Induction. In Proceedings of the Second European Conference on Data
Mining and Text Mining in Bioinformatics, held in conjunction with ECML/PKDD in Pisa, Italy. 24.
September, 2004.
4 Renji Tao. Finite Automata and Application to Cryptography. Springer Publishing Company, Incorporated. (2009)

4.2. AUTOMATAS FINITOS DETERMINISTAS

83

palabras que se analizan estan compuestas por smbolos de un alfabeto finito,


donde cada smbolo pudiera representar alguna clase de evento, o en general por

su naturaleza simbolica,
pudiera tener cualquier significado.
Un afd % se define por una tupla hE S T q0 Ai, donde:
E: Es el conjunto de estados. Es un conjunto de smbolos que se asocian con los

estados del automata.


En este texto generalmente denotamos los estados

por las letras minusculas


del alfabeto en espanol,
pero las mas frecuentemente utilizadas son q o e. Si EST 7 (q1 q2 ... qm ), es posible valorar
(asignar un valor) al conjunto de estados como
E 7 (q1 q2 ... qm ); Los m estados elegidos.
o bien como E 7 EST.
S: Es el conjunto de smbolos (diferentes a los de los estados) conocido tambien
como el alfabeto de entrada, que se asocian con los eventos o caracteres que

el automata
puede percibir y analizar; en este documento los denotaremos

por numeros,
o la letra griega .
S 7 (1 2 ... n ); Los n s
mbolos elegidos. o bien S 7 SIM, cuando
SIM 7 (1 2 ... n ).
T : Es un conjunto de reglas que socian un estado y un smbolo del alfabeto, con
un nuevo estado (posiblemente el mismo); se llama el conjunto de transiciones.
q0 : Es el estado inicial, elegido entre los estados de E, esto es que
(pertenece? q0 E) 7 #t.
A: Es el conjunto de estados aceptores, es un subconjunto no vaco de estados.
(subconjunto? A E) 7 #t

Los automatas
finitos determinstas sirven para analizar palabras de smbolos, que pueden representar secuencias de eventos. Estas palabras al ser analiza
das causan que los automatas
finitos determin
istas o afd % (para abreviar), cambien de estado (posiblemente queden en el mismo estado).

Los automatas
tienen tres diferentes tipos de estados:

1. Un unico
estado que se conoce como estado inicial. Este estado se identifica
del automata

en la definicion
como E.
2. Un conjunto de estados que se reconocen como estados aceptores. En la
se identifica este conjunto con A
definicion
3. Un subconjunto de estados, que son los estados que no son los aceptores ni
es el estado inicial.

Lo que determina el comportamiento del automata


es el conjunto de reglas
de transiciones, identificada por T . Este conjunto de reglas de transiciones es entre estados del automata.

se
tablece una asociacion
Cada regla de transicion

Las letras q se han elegido


para representar los estados
por el latn statu quo, que se
traduce generalmente como el
estado del momento actual.

CAPITULO
4. AUTOMATAS
FINITOS DETERMINISTAS

84

Las transiciones se coleccionan en


puede llamar simplemente como transicion.
del automata

un conjunto para que durante la operacion


se seleccione la regla
especfica que se preadecuada que se debe aplicar de acuerdo a cada situacion
sente.
por cada smbolo del
Cada estado debe tener exactamente una asociacion

alfabeto, esta es la caracterstica que hace que el automata


sea determinista,
(cardinalidad T ) 7 (* (cardinalidad E) (cardinalidad S)).

4.2.1.

Los afd % como una clase

Un automata
finito determinstico (y todas las demas clases de automatas,
como se vera en captulos posteriores) puede verse como un objeto que tiene cier es conveniente para tratar a los afd %
tos atributos y ciertos metodos. Esta vision

fundamental en la teora de sistemas


como entidades autonomas,
que es la vision
multiagentes.

propia, con sus propios estados,


Cada automata
(agente) tiene una definicion
reacciona ante un conjunto particular de eventos haciendo un conjunto particular
de acciones. En las siguientes secciones detallaremos una clase que llamaremos
afd %, el smbolo % colocado al final de un identificador, hace recordar que se
trata de una clase o de un objeto de una clase.

Atributos de los afd %

La clase de automatas
finitos deterministas son definidos mediante cinco caractersticas o atributos principales, en ocasiones tambien se llaman campos,
que coinciden directamente con la tupla que define al afd %, hE S T q0 Ai

1. Un conjunto finito y no vaco de estados E.


2. Un conjunto finito y no vaco de smbolos de entrada S, que se conoce como

el alfabeto del automata.


T , dada como una lista de tripletas
3. Un conjunto de reglas de transicion
(...(qact ent qsig ) ...), cada tripleta declara un estado actual qact , un smbolo del alfabeto de entrada ent y un estado siguiente qsig .
4. Un estado inicial q0 , que es elemento del conjunto de estados.
5. Un subconjunto de estados A, que se conocen como estados aceptores.

La clase inicializa los valores de sus campos con la quntupla de la definicion

del automata.

4.2. AUTOMATAS FINITOS DETERMINISTAS

85

Codigo 4.1: Definicion de campos en la clase afd %


1
2
3
4
5
6
7
8
9
10
11

(define afd %
(class object %
(init EST SIM EIN FIN TRA) ; los argumentos de inicializacion
(define E EST); Los estados
(define S SIM); Los simbolos del alfabeto
(define q0 EIN); El estado inicial
(define A ACE); Los estados aceptores
(define T TRA); Las reglas de transicion en lista de tripletas
(super-new)
; .... Metodos publicos y privados
))

Con el codigo
4.1 ya es posible crear automatas
de la clase afd %. Aunque no

se han definido metodos ni privados ni publicos


ya es posible crear los objetos de
esta clase.
; Sea D1 un automata finito determinista ....
> (define D1 (new afd % [EST (a b)]
[SIM (0 1)]
[EIN a]
[ACE (b)]
[TRA ((a 0 a) (a 1 b) (b 0 b) (b 1 a))]))
> D1
(object:afd % ...)
>

Metodos informativos de los afd %


Los primeros metodos que incorporaremos a la clase pueden ser clasificados
con la que se ha
como metodos informativos, porque recuperan la informacion
definido la clase afd %.

estados. Es un metodo publico.


No requiere argumentos. Devuelve en una
lista el conjunjto de los estados del afd %.

simbolos. Es un metodo publico.


No requiere argumentos. Devuelve una
lista con los smbolos del alfabeto definido para el afd %.

transiciones. Es un metodo publico.


No requiere argumentos. Devuelve
una lista con las transiciones definidas para el afd %.

edoIni. Es un metodo publico.


No requiere argumentos. Devuelve el estado
inicial definido para el afd %.

aceptores. Es un metodo publico.


No requiere argumentos. Devuelve una
lista con los estados aceptores definidos para el afd %.
Codigo 4.2: Metodos informativos en la clase afd %
1
2
3
4
5
6

(define afd %
(class object %
(init EST SIM EIN ACE TRA) ; los argumentos de inicializacion
(define E EST); Los estados
(define S SIM); Los simbolos del alfabeto
(define T TRA); Las reglas de transicion en lista de tripletas

CAPITULO
4. AUTOMATAS
FINITOS DETERMINISTAS

86
7
8
9
10
11
12
13
14
15
16

(define q0 EIN); El estado inicial


(define A ACE); Los estados aceptores
(super-new)
(define/public (estados) E)
(define/public (simbolos) S)
(define/public (transiciones) T )
(define/public (edoIni) q0 )
(define/public (aceptores) A)
; .... Otros metodos publicos y privados
))

Una vez que se tiene la clase afd % y que contiene los metodos informativos,

es posible crear diferentes automatas


de la misma clase, enseguida se crean un

par de automatas
muy parecidos entre ellos porque utilizan el mismo alfabeto, el
mismo conjunto de estados, el mismo conjunto de estados aceptores, pero difieren en el conjunto de estados aceptores.
> (define D2 (new afd % [EST (a b)]
[SIM (0 1)]
[EIN a]
[ACE (b)]
[TRA ((a 0 a) (a 1 b) (b 0 b) (b 1 a))]))
> (define D3 (new afd % [EST (a b)]
[SIM (0 1)]
[EIN a]
[ACE (a)]
[TRA ((a 0 a) (a 1 b) (b 0 b) (b 1 a))]))
>

Ejemplo 4-1

Los automatas
D1, D2 y D3 creados anteriormente pueden utilizarse como operandos, por ejemplo con map con el fin de enviar un mismo mensaje a la lista
de objetos (list D1 D2 D3).
> D1
(object:afd % ...)
> D2
(object:afd % ...)
> D3
(object:afd % ...)
> (map ( (af) (send af aceptores)) (list D1 D2 D3))
((b) (b) (a)) ; La lista de estados aceptores de cada aut
omata
>

4.2.2.

de transicion

La funcion

De los atributos de la clase afd %, T es el conjunto de transiciones (ver la


pagina 85), que esta dado en forma de una lista de triadas relacionando estados

y smbolos con nuevos estados; los automatas


D2 y D3 de la pagina 86 se han
definido con el mismo conjunto de transiciones:

((a 0 a) (a 1 b) (b 0 b) (b 0 a))

4.2. AUTOMATAS FINITOS DETERMINISTAS

87

Para poder utilizar adecuadamente el conjunto de transiciones se necesita un


que tiene la mision
de determinar el estado que el automa
metodo de transicion
ta debe tener a causa de haber analizado un smbolo. En el ejemplo anterior, el

automata
D1 cambia de su estado actual a al nuevo estado b a causa de haber
detectado el smbolo 1.

Un metodo privado que se requiere lo llamaremos 3de, tiene el propoosito


de obtener el tercer elemento de una triada, ya que las transiciones estaran codificadas de la forma (qact qsig ), donde qact y qsig son estados, el estado actual y el
siguiente respectivamente. Este metodo consume un estado y un smbolo, y ofrece como salida el tercer elemento de la triada que empiece con el par (qact ).
Este metodo debe devolver el estado qsig cuando se le presentan los argumentos
en S.
qact y ; para algun
1
2
3
4
5
6
7
8
9

(define afd %
(class object %
(init EST SIM EIN ACE TRA) ; los argumentos de inicializacion
; .... definicion de los campos
(super-new)
; metodos informativos (actividad anterior)
; .... Otros metodos publicos y privados
(define/private (3de tupla) (caddr tupla)); hay varias maneras de hacerlo
))

de transicion
con el nombre Tr. Tr tiene la
Definiremos ahora la funcion
de seleccionar del conjunto T la regla de transicion
T cuando el automata

funcion
estado actual qact y se analiza algun
smbolo . As Tr tiene
se encuentra en algun
el contrato
(Tr E S) 7 E?, y se define como
(Tr q ) 7 (3de (qact i qsig )), cuando (iguales? (q ) (qact i )) 7 #t,
(qact i qsig ) en T .
para alguna transicion
Ejemplo 4-2

Considerando nuevamente el automata


D1 (pagina 86), si el estado actual es
a y se analiza un smbolo 1, entonces el siguiente estado sera b, porque la
tripleta (a 1 b) que es parte de la lista de transiciones. Al enviar el mensaje
(send A1 Tr a 1), D1 responde con b.

En resumen, este metodo privado llamado Tr, recibe un estado q y un smbolo y devuelve un nuevo estado qsig siempre y cuando la tripleta (q qsig )
pertenezca al conjunto de transiciones T .
Actividad 4-1
Escribe el metodo privado Tr que recibe un estado q en E, y un smbolo de
S; y devuelve un estado qsig , solo cuando exista una triada (eact i esig ) en
las transiciones T donde
(iguales? (q ) (eact i )) 7 #t

CAPITULO
4. AUTOMATAS
FINITOS DETERMINISTAS

88

> (define D4 (new afd % [EST (q1 q2)]


[SIM (0 1)]
[EIN q1]
[ACE (q2)]
[TRA ((q1 0 q1) (q1 1 q2) (q2 0 q2) (q2 1 q1))]))
> (send D4 Tr q1 0)
q1
> (send D4 Tr q1 1)
q2
> (send D4 Tr q2 0)
q2
> (send D4 Tr q2 1)
q1
>

4.3.

Representaciones de los afd %

de los afd % puede representarse en al menos tres maneras,


La informacion
textual, donde se enlistan los
una de ellas ya ha sido descrita es la representacion
hay otras dos representaciones que son comunmencampos del afd %; pero aun
en tablas de transiciones y la representacion
en
te utilizadas. La representacion
grafos de transiciones.

4.3.1.

Tablas de transiciones

La tabla de transiciones es una manera de representar toda la informacion


de un afd % en un formato tabular donde:

...

..
.
.
..

...

...

qsig

q1
..
.
qact
..
.
qm

...

f(qact qsig )

1. Cada smbolo del alfabeto encabeza una columna.


2. Cada estado encabeza una fila.
3. Cada estado aceptor se marca con un punto [].
4. El estado inicial se marca con un smbolo de mayor-que [>].

5. Si existe una triada (qact qsig ) en la lista de transiciones T del automata,


entonces en la tabla de transiciones la entrada hqact , i tiene un valor qsig .

de cardinalidad
La definicion
se encuentra en la pagina 12.

Debido a que esta tabla representa un automata


finito determinista, la caracterstica determinista obliga a que cada estado y cada smbolo tengan una tran

hacia un unico
sicion
estado, que pudiera ser el mismo. De modo que el numero

de transiciones en la tabla de transiciones coincide con el producto del numero

de estados con el numero


de smbolos.
(cardinalidad T ) 7 (* (cardinalidad E)) (cardinalidad S)

4.3. REPRESENTACIONES DE LOS AFD %

89

Ejemplo 4-3
> (define D5 (new afd %
[EST
[SIM
[EIN
[ACE
[TRA

(q1 q2 q3 q4 q5 q6)]
(0 1)]
q1]
(q4 q5)]
((q1 0 q2) (q1 1 q3) (q2 0 q5) (q2 1 q4)
(q3 0 q2) (q3 1 q3) (q4 0 q6) (q4 1 q4)
(q5 0 q5) (q5 1 q6) (q6 0 q6) (q6 1 q6))]))

en forma de tabla de transiciones del automata

La representacion
D5:
0
1
>q1 q2 q3
q2 q5 q4
q3 q2 q3
q4 q6 q4
q5 q5 q6
q6 q6 q6

Actividad 4-2

1. Suponiendo el automata
D5 del ejemplo 4-3, utiliza la tabla de transiciones o el metodo Tr de la clase afd % para calcular las transiciones:

El automata
en estado q2 y analiza el smbolo 0.

El automata
en estado q1 y analiza el smbolo 0.

El automata
en estado q3 y analiza el smbolo 1.

El automata
en estado q5 y analiza el smbolo 1.
en DrRacket como

2. Escribe en una expresion


utilizar el operador map
para hacer las cuatro consultas anteriores de una sola vez.

4.3.2.

Grafos de transiciones

de los afd % se llama grafo de transiciones, esta reOtra representacion


es grafica y permite un panorama general del comportamiento del
presentacion

automata.
Sin embargo, cuando el automata
es muy grande, utilizar grafos de
mas confuso.
transiciones puede resultar aun
Los grafos de transiciones tienen los siguientes elementos:
1. Los estados se representan por medio de los nodos del grafo y se dibujan
generalmente con crculos etiquetados, las etiquetas suelen estar dentro de
los crculos y coinciden con el nombre del estado.
2. Cada par de estados se conectan mediante una arista dirigida (flecha) etiquetada con alguno de los smbolos de entrada. Si en las transiciones hay

CAPITULO
4. AUTOMATAS
FINITOS DETERMINISTAS

90

una triada (qact qsig ), entonces hay un nodo etiquetado con qact desde
el cual sale una arista etiquetada con el smbolo y que llega a un nodo
etiquetado con el nombre del estado qsig .
(q1 q2 )
Fig. 4.1. Transicion

3. Si un estado q es un estado aceptor, el nodo se dibuja con un doble crculo.


4. El nodo inicial se dibuja con una flecha que incide en el nodo, con una
etiqueta Inicio.
5. El grafo de transiciones tiene tantas aristas como tripletas en su conjunto
de transiciones.

Ejemplo 4-4

El automata
D5 del ejemplo 4-3 se puede representar por el grafo:

en forma de grafo de transiciones y si el automata no es


Con la representacion

muy grande, es posible revisar las transiciones de un solo vistazo; si el automata


actualmente se encuentra en un estado marcado con qact , el calculo del siguiente

estado del automata


a causa de la lectura de , se logra al ubicar el estado qact y
seguir la arista etiquetada con , de modo que el siguiente estado es precisamente
la etiqueta del nodo al final de la arista.
Actividad 4-3

Utilizando el grafo de transiciones para el automata


D5, calcula el estado siguiente.
(send D5 Tr q5 0)7
(send D5 Tr q1 1)7

Si el automata
se encuentra en el estado inicial, escribe las transiciones necesarias para alcanzar cada uno de los siguientes estados
q2
q4

4.3. REPRESENTACIONES DE LOS AFD %

91

Actividad 4-4
Dibuja el grafo de transiciones y la tabla de transiciones del siguiente grafo
> (define D6 (new afd %
[EST
[SIM
[EIN
[ACE
[TRA

4.3.3.

(q1 q2 q3 q4 q5 q6)]
(0 1 2)]
q1]
(q4 q5 q6)]
((q1 0 q2) (q1 1 q3)
(q2 0 q3) (q2 1 q2)
(q3 0 q3) (q3 1 q2)
(q4 0 q5) (q4 1 q6)
(q5 0 q4) (q5 1 q6)
(q6 0 q5) (q6 1 q4)

(q1
(q2
(q3
(q4
(q5
(q6

2
2
2
2
2
2

q1)
q4)
q4)
q4)
q5)
q6))]))

Transiciones en formato texto

mas es en formato de texto plano. Este formato es util

Una representacion

para leer y escribir automatas


desde archivos de texto, sin tener que considerar

el formato propio del objeto y poder interactuar de manera mas comoda


con la
computadora. Ahora es necesario establecer un criterio para codificar los archivos
de grafos ponderados
de entrada. El criterio propuesto se parece a una definicion

en forma de listas de adyacencias. Supondremos un automata


definido con la
tupla hE S e0 A T i:

1. El formato consta de (cardinalidad E) 7 m renglones, es decir cada es


tado se coloca en un renglon.
inicia con uno de los siguientes smbolos (>> > )
2. Cada renglon
donde:
>> Indica el estado inicial.
> Indica el estado inicial que tambien pertenece a los estados aceptores.
Indica un estado aceptor, pero que no es el estado inicial.
Indica un estado no es inicial, ni aceptor.
dedicado al estado inicial del automata,

3. El renglon
debe iniciar con la marca
>> o con > .
que corresponde a un estado aceptor debe iniciar con
4. Cada renglon
que no inicia ni con > , ni con , ni con >>, entonces debe
5. Un renglon
iniciar con el smbolo .
se encuentra un smbolo de un
6. Despues de la marca de inicio de renglon
estado que representa al estado actual. Enseguida se encuentra una lista
cuyos elementos ocurren en pares - q, para cada uno de los smbolos del
alfabeto y sus correspondientes estados siguientes. Esto es, si suponemos
que los estados son E 7 (q1 ... qa ... qb ... qc ... qm ) y el alfabeto es S 7 (1
estara codificado del siguiente modo
... i ... j ...n ), entonces un renglon

(sin considerar los smbolos de inicio de renglon):

CAPITULO
4. AUTOMATAS
FINITOS DETERMINISTAS

92

Si (subconjunto? ((qa i qb ) (qa j qc )) T ) 7 #t, entonces en el

formato texto habra un renglon


qa i qb j qc

se encuentran todas las letras del alfabeto del automata,

7. En cada renglon
ya
que se trata de un afd % y hay transiciones para cada smbolo de entrada.

Ejemplo 4-5

El automata
D6, definido para la actividad 4-4 en la pagina 91, se representa
en formato de texto como:
>>
--**
**
**

q1
q2
q3
q4
q5
q6

a
a
a
a
a
a

q2
q3
q3
q5
q4
q5

b
b
b
b
b
b

q3
q2
q2
q6
q6
q4

c
c
c
c
c
c

q1
q4
q4
q4
q5
q6

Actividad 4-5
1. Dibuja el grafo de transiciones de un afd % dado mediante la siguiente
textual de un archivo de texto llamado D7.dat.
descripcion
>>
---**
**

q0
q1
q2
q3
q4
q5

0
0
0
0
0
0

q1
q0
q1
q3
q4
q5

1
1
1
1
1
1

q2
q2
q0
q4
q4
q5

2
2
2
2
2
2

q0
q3
q3
q5
q5
q4

2. Codifica el siguiente automata


en un archivo de texto.

EXTENDIDA DEL AFD %


4.4. TRANSICION

93

Actividad 4-6
Escribe un procedimiento en DrRacket que se llame txt->afd que reciba el
nombre de un archivo filename y que devuelva un objeto afd %, si el archivo

es correctamente interpretado como un automata


finito determinista; o bien
que devuelva un #f, si el archivo no puede ser interpretado como un afd %.
1
2
3
4
5
6
7
8

;; Lee un archivo de texto y genera un objeto afd %


;; (txt->afd String) -->Object:afd %?
;; (txt->afd "A6.dat") -->(object:afd % ...)
;; (send (txt->afd "A6.dat") estados) -->(q0 q1 q2 q3 q4 q5)
(define txt->afd
( (filename) ; el nombre del archivo como un string
;; .... Aqui debes escribir el codigo
))

Hasta ahora los afd % solamente tienen unos cuantos metodos informativos,
incluyendo el metodo Tr que recibe un estado eent y un smbolo de entrada

y devuelve el nuevo estado esal que alcanza un automata


llamado Aid a causa de
, para lo cual utilizamos un mensaje que es enviado al automata

percibir la senal
que es codificado como
(send Aid Tr eent ) 7 esal
hay otros metodos que hacen de los afd % realmente uti
Sin embargo, aun
les. Este tipo de afd % se utilizan principalmente para reconocer palabras de un
alfabeto.
Supongamos que A es un afd %, definido por la quntupla hEST SIM EIN ACE
TRAi. El alfabeto S sirve como conjunto generador para el espacio de palabras S ,
que contiene todas las palabras de longitud finita creadas con letras de S.

del espacio S , generando un lenguaje


El automata
A hace una biparticion

con las palabras que acepta, y las palabras que el automata


no acepta. En este
captulo estudiaremos los metodos que se utilizan para determinar el estado final

del automata
a causa de analizar una secuencia de smbolos de entrada; para

determinar cuando un automata


acepta una palabra, y cuando no la acepta; y

finalmente determinaremos el lenguaje del automata.

4.4.

extendida del afd %


Transicion

Consideremos el automata
A 7 hEST SIM EIN ACE TRAi , que es un afd % con
uno de sus metodos la transicion de estados Tr, que toma un estado y un smbolo
y resuelve un nuevo estado.
de transicion
exDefiniremos un nuevo metodo que llamaremos funcion

tendida, y denotaremos por TR. Este metodo publico


(en principio para hacer

de la
Ver la definicion
cerradura de Kleene en la
pagina 88.

CAPITULO
4. AUTOMATAS
FINITOS DETERMINISTAS

94

pruebas, pero al final puede ser privado) sirve para determinar el ultimo
esta
do que alcanza el automata
despues de analizar una secuencia de smbolos del
alfabeto.
de transicion
extendida tiene como dominio el producto carteLa funcion
siano de S con E, y el codominio es nuevamente el conjunto de estados E:
(TR Palabra Estado) 7 Estado?
(TR w e) Definida en dos casos:
Cuando una palabra w no es
vaca, se puede denotar como
(w0 |w0 ) ver la pagina 57.

1. Si (palabraVacia? w) 7 #t, entonces (TR w e) 7 e;


2. En otro caso, (TR w e) 7 (TR w0 (Tr e w0 ))

Si w es una palabra en S , y el automata


A analiza la palabra a partir de
extendida enviando un
un estado, digamos el estado e, se solicita la transicion

mensaje al automata
(send A TR w e) 7 e0 ,
el estado e0 que resulta del analisis de la palabra w a partir del estado e, se denota
estado final.
Actividad 4-7

Escribe un metodo publico


llamado TR para la clase afd % que reciba como entrada: una palabra w en S , y un estado e en el conjunto de estados E definido

para el automata;
y como salida un estado e0 , el estado final que corresponde.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

(define afd %
(class object %
(init EST SIM EIN ACE TRA) ; los argumentos de inicializacion
(define E EST); Los estados
(define S SIM); Los simbolos del alfabeto
(define e0 EIN); El estado inicial
(define A ACE); Los estados aceptores
(define T TRA); Las reglas de transicion en lista de tripletas
(super-new)
;; ....................
;; Metodos del capitulo 4
;; ....................
;; METODOS CAPITULO 5
;; (TR Palabra Estado) -->Estado?
;; (TR (1 0 1 1) e0) -->e3
(define/public (TR w e)
;... Aqui debes escribir el codigo
)
)
)

EXTENDIDA DEL AFD %


4.4. TRANSICION

95

Ejemplo 4-6

Supongamos que el automata


A5 (definido en 92) se encuentra actualmente en

el estado f, y se analiza la palabra (2 1 0). El estado final del automata


A5
es e, porque:
1. (send A Tr f 2) 7 f.
2. (send A Tr f 1) 7 a.
3. (send A Tr a 0) 7 e.
De modo que (send A TR (2 1 0) f) 7 e

4.4.1.

extendida
Clases de congruencia sobre la transicion

Consideremos nuevamente un automata


afd % definido A 7 hEST SIM EIN
ACE TRAi. Cualquier palabra w 7 (i1 i2 ... ik ) en S , donde (<= 1 i) y
(<= i (cardinalidad S)) tiene una correspondencia de un estado a otro. As si

el automata
A se encuentra actualmente en un estado ei y se le presenta la palabra

w, el automata
A recibe un mensaje como:
(send A TR w ei ),
y responde con un nuevo estado ef , quiza sea el mismo.
Tomando en cuenta que (send A TR w ei ) 7 ei funciona como la identidad,
TR a partir
cuando w 7 palabraVacia. Al considerar el conjunto S y la operacion
de equivalencia E en la que
de un mismo estado e, podemos crear una relacion
dos palabras x y y en S son congruentes si:
(<-> (pertenece? (creaPar x y) E)
(iguales? (send A TR y ei )) (send A TR y ei )) 7 #t

Actividad 4-8
E tal y como ha sido definida, es una relacion
de
Demuestra que la relacion
equivalencia.

CAPITULO
4. AUTOMATAS
FINITOS DETERMINISTAS

96
Ejemplo 4-7

Consideremos nuevamente el automata


A5 definido en la pagina 92 como
>>
**
--**
**

e
a
f
b
c
d

0
0
0
0
0
0

d
e
c
a
f
d

1
1
1
1
1
1

c
d
a
c
d
e

2
2
2
2
2
2

b
b
f
b
c
a

> (send A5 congruentes? (2 1 2 2 0 0 1 1) (1 0 1 0) b)


#t
> (send A5 TR (2 1 2 2 0 0 1 1) b)
e
> (send A5 TR (1 0 1 0) b)
e
>

El espacio S es particionado en subconjuntos que llamaremos clases de congruencia, donde cada clase de congruencia contiene todas las palabras en S que

han sido analizadas por el automata


a partir de un estado ei y alcanzan un mismo

estado (uno por cada clase de congruencia). El numero


de clases de congruencia

de un afd % es finito porque el numero


de estados es finito, y tambien hay un

numero
finito de transiciones entre estados.
Actividad 4-9

1. Escribe un metodo publico


para el afd % que se llame congruentes? y
que reciba tres parametros: dos palabras x y y, y un estado e; y que devuelva como salida un valor booleano #t si las palabras x y y son congruentes, y #f en otro caso.
1
2
3
4
5
6
7
8
9
10
11
12
13

(define afd %
(class object %
(init EST SIM EIN ACE TRA) ; los argumentos de inicializacion
;; ... todos los metodos y definiciones anteriores
;; ...
;; (congruentes? Palabra Palabra Estado) -->Booleano?
;; (congruentes? (2 1 2 2 0 0 1 1) (1 0 1 0) b) -->#t
;; de acuerdo al ejemplo 4-7
(define/public (congruentes? x y e)
;; ... Aqui debes escribir el codigo
)
)
)

puedes dar al hecho de que dos


2. Escribe que significado o interpretacion
palabras x 7 (x1 . . . xn ) y y 7 (y1 . . . ym ) sean congruentes.

concatenar ha sido
La funcion
definida en la pagina 55.

Ahora, supongamos por hecho que las palabras x y y en S son congruentes,


y es cualquier otra palabra en S . Notamos que para cualquier palabra w en S
(y (congruentes? (concatenar x w) (concatenar y w) e)
(congruentes? (concatenar w x) (concatenar w y)) e) 7 #t.

4.5. CLASE DE CONGRUENCIA DE LAS PALABRAS ACEPTADAS

97

Actividad 4-10

Considera un automata
A 7 hEST SIM EIN ACE TRAi. Demuestra que para
cualesquiera palabras x, y, w en S ; si se cumple (congruentes? x y e) 7 #t
entonces
(y (congruentes? (concatenar x w) (concatenar y w) e)
(congruentes? (concatenar w x) (concatenar w y)) e) 7 #t

4.5.

Clase de congruencia de las palabras aceptadas

Sigamos considerando un afd % llamado A definido con hEST SIM EIN ACE
TRAi. En este apartado estudiaremos acerca del subconjunto A de estados, llamado los estados aceptores. Los estados aceptores se identifican en el grafo de
transiciones por tener un doble crculo. El estado inicial tambien puede ser un
estado aceptor.
extendida, el afd %
Cuando una palabra es analizada utilizando la transicion
cambia de estado con cada smbolo analizado de acuerdo a T. Cuando el analisis
inicia en e0, el estado final puede ser o no un estado aceptor, entonces la clase
de congruencia de las palabras aceptadas se compone de las palabras que al ser

analizadas a partir de e0, el automata


alcanza un estado aceptor. Determinar si
un estado es aceptor requiere la pertenencia del estado final al conjunto de los
estados aceptores A del afd %.

Ejemplo 4-8
> (map ( (edo) (send C aceptor? edo)) (a b c d e f))
(#t #f #t #t #f #f)
>

1
2
3
4
5
6
7
8
9
10
11
12
13

(define afd %
(class object %
(init EST SIM EIN ACE TRA) ; los argumentos de inicializacion
(define E EST); Los estados
(define S SIM); Los simbolos del alfabeto
(define e0 EIN); El estado inicial
(define A ACE); Los estados aceptores
(define T TRA); Las reglas de transicion en lista de tripletas
(super-new)
; Los m
etodos ya definidos
(define/public (aceptor? edo) (pertenece? edo A))
)
))

Las palabras que al ser analizadas a partir del estado inicial, hacen que el

automata
concluya en alguno de los estados finales, estas palabras las llamaremos palabras congruentes aceptadas; y las palabras que no lo hacen, a las que
llamaremos palabras no aceptadas. Esto significa:

CAPITULO
4. AUTOMATAS
FINITOS DETERMINISTAS

98

(pertenece? (TR w e0) F) 7 #t


As que una palabra pertenece a la clase de congruencia de las palabras aceptadas si
(<-> (acepta? w) (aceptor? (TR w e0))) 7 #t
1
2
3
4
5
6
7
8
9
10
11
12
13
14

(define afd %
(class object %
(init EST SIM EIN ACE TRA) ; los argumentos de inicializacion
(define E EST); Los estados
(define S SIM); Los simbolos del alfabeto
(define e0 EIN); El estado inicial
(define A ACE); Los estados aceptores
(define T TRA); Las reglas de transicion en lista de tripletas
(super-new)
; Los m
etodos ya definidos
(define/public (aceptor? edo) (pertenece? edo A))
(define/public (acepta? w) (aceptor? (TR w e0)))
)
))

Actividad 4-11
Considera el afd % al que llamaremos C definido por los elementos:
Estados E: (e a f b c d)
Smbolos S: (0 1 2)
Estado inicial e0: e
Estados aceptores A: (a c e)
Transiciones T: (
(e 0 f) (e 1 d) (e 2 e) (a 0 e) (a 1 d) (a 2 b)
(f 0 c) (f 1 a) (f 2 f) (b 0 a) (b 1 c) (b 2 b)
(c 0 f) (c 1 d) (c 2 c) (d 0 d) (d 1 e) (d 2 a))
Clasifica las siguientes palabras en aceptadas o no aceptadas, mencionando

cada estado que pasa el automata


y el estado final que alcanza el automata
al
analizar cada palabra desde el estado inicial e0:
1. (0 2 0)
2. (2 1 0 2)
3. (2 1 1 0)
4. (0 2 1 1)
5. (2 1 2 1)
6. (0 2 1 2)
7. (2 2 0)
8. (1 1 0)

4.6. EL LENGUAJE DE UN AFD %

99

Con las palabras en S se genera la clase de las palabras aceptadas. Este conjunto puede modificarse al cambiar el estado inicial. Para poder cambiar el esta
do inicial de un afd % ya definido, debemos crear un metodo publico
que permita
reasignar un nuevo valor al atributo e0 que identifica al estado inicial.
Actividad 4-12

de afd %, para cambiar el estado


Agrega el metodo publico
e0! a la definicion
inicial por otro que es pasado como el argumento edo. Si edo no es un estados
en E, se debe devolver #f.
1
2
3
4
5
6
7
8
9
10
11
12
13
14

(define afd %
(class object %
(init EST SIM EIN ACE TRA) ; los argumentos de inicializacion
(define E EST); Los estados
(define S SIM); Los simbolos del alfabeto
(define e0 EIN); El estado inicial
(define A ACE); Los estados aceptores
(define T TRA); Las reglas de transicion en lista de tripletas
(super-new)
; Los m
etodos ya definidos
(define/public (e0! edo)
; Aqu
debes escribir el c
odigo
)
))

Actividad 4-13
Toma el afd % C definido en la pagina 98 y cambia el estado inicial al estado
a. Considera las mismas palabras del ejercicio 4-11 y determina si ahora las
palabras son aceptadas.
1. (0 2 0)
2. (2 1 0 2)
3. (2 1 1 0)
4. (0 2 1 1)
5. (2 1 2 1)
6. (0 2 1 2)
7. (2 2 0)
8. (1 1 0)

4.6.

El lenguaje de un afd %

Un lenguaje es simplemente un conjunto de palabras con una caracterstica

especial (pagina 64). Para un automata


A 7 hEST SIM EIN ACE TRAi la clase de
congruencias de las palabras aceptadas define el lenguaje del afd %.

CAPITULO
4. AUTOMATAS
FINITOS DETERMINISTAS

100

Ahora estudiaremos dos conjuntos que se derivan del lenguaje del automata.
Estos conjuntos los llamaremos el lenguaje de palabras propias e impropias.

4.6.1.

Las palabras propias

Supongamos que EST 7 (e1 e2 ... em ) es la lista de los estados definidos

para un automata
A 7 hEST SIM EIN ACE TRAi, cada uno de los m estados del

automata
define un lenguaje. Ahora supongamos que S[e ] representa al conjunto
1
de las palabras aceptadas considerando e0 7 e1 ; S[e ] el conjunto de las palabras
2
aceptadas que fueron analizadas considerando que e0 7 e2 , y as para cada estado hasta S[e ] el conjunto de las palabras aceptadas considerando ahora que
m
e0 7 em .
Defiremos entonces el conjunto de las palabras propias como el conjunto de

las palabras que son aceptadas por el automata


sin importar el estado inicial a
partir del cual se inicie el analisis. El conjunto de las palabras propias se logra
generalizada
con la interseccion
(interseccion-generalizada (list S[e

1]

S[e ] ... S[e ] ))


2

El conjunto de las palabras propias, tambien es un subconjunto de S . Debido


a la naturaleza finita de los conjuntos calculados por la computadora, crearemos
un metodo que calcule este conjunto con un lmite para la longitud de las palabras, este metodo se llamara kPropias al conjunto (de cardinalidad finita) que
calcula todas las palabras de longitud menor o igual que un entero k y que son

propias del automata


A.

Actividad 4-14
Escribe un metodo para el afd % llamado kPropias que calcule el conjunto de

palabras propias. Recibe un numero


k que limita la longitud de la palabra. La
salida es un lenguaje en S .
1
2
3
4
5
6
7
8
9
10
11
12
13
14

(define afd %
(class object %
(init EST SIM EIN ACE TRA) ; los argumentos de inicializacion
(define E EST); Los estados
(define S SIM); Los simbolos del alfabeto
(define e0 EIN); El estado inicial
(define A ACE); Los estados aceptores
(define T TRA); Las reglas de transicion en lista de tripletas
(super-new)
; Los m
etodos ya definidos
(define/public (kPropias k)
; Aqu
debes escribir el c
odigo
)
))

4.6. EL LENGUAJE DE UN AFD %

101

Figura 4.2: Familia de automatas con los diferentes estados iniciales

4.6.2.

Las palabras impropias

De manera similar que las palabras propias, podemos crear una definicion
para las palabras impropias, supongamos que E 7 (e1 e2 ... em ) son los esta
dos de un automata
A 7 hEST SIM EIN ACE TRAi, cada uno de los m estados del

automata
define un conjunto de palabras no aceptadas. Ahora supongamos que
[e ] representa al conjunto de las palabras no aceptadas considerando e0 7 e1 ;
S
1

S[e2 ] el conjunto de las palabras no aceptadas considerando que e0 7 e2 , y as pa [e ] el conjunto de las palabras no aceptadas considerando
ra cada estado, hasta S
m
ahora que e0 7 em .
Defiremos entonces el conjunto de las palabras impropias como el conjunto

de las palabras que no son aceptadas por el automata


sin importar el estado inicial
a partir del cual se inicie el analisis. El conjunto de las palabras impropias se logra
generalizada
con la interseccion
[e ] S
[e ] ... S
[e ] ))
(interseccion-generalizada (list S
1
2
m
El conjunto de las palabras impropias, otro subconjunto de S . Debido a la
naturaleza finita de los conjuntos calculados por la computadora, crearemos un
metodo que calcule este conjunto con un lmite para la longitud de las palabras,
este metodo se llamara kImpropias al conjunto (de cardinalidad finita) que calcula todas las palabras de longitud menor o igual que un entero k y que son

impropias del automata


A.

El conjunto de las palabras impropias no comparte palabras con el conjunto


de las palabras propias. Esto es que para cualquier valor entero positivo de k:

(interseccion (kPropias k) (kImpropias k)) 7 conjunto-vacio

CAPITULO
4. AUTOMATAS
FINITOS DETERMINISTAS

102
Actividad 4-15

Escribe otro metodo para el afd %, que calcule el conjunto de palabras impropias de longitud menor o igual que un entero positivo k, el metodo se debe

identificar con kImpropias. El argumento de entrada es el numero


k que limita la longitud de la palabra. La salida es un subconjunto de palabras en
S .
1
2
3
4
5
6
7
8
9
10
11
12
13
14

(define afd %
(class object %
(init EST SIM EIN ACE TRA) ; los argumentos de inicializacion
(define E EST); Los estados
(define S SIM); Los simbolos del alfabeto
(define e0 EIN); El estado inicial
(define A ACE); Los estados aceptores
(define T TRA); Las reglas de transicion en lista de tripletas
(super-new)
; Los m
etodos ya definidos
(define/public (kImpropias k)
; Aqu
debes escribir el c
odigo
)
))

4.7.

Resumen metodos del afd %

En el siguiente listado se muestran los metodos de la clase afd % que se han


propuesto hasta ahora.
Codigo 4.3: Clase afd % completa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

;; ----- clase Automata finito determinista


(define afd %
(class object %
(init EST SIM EIN ACE TRA) ; los argumentos de inicializacion
(define E EST); Los estados
(define S SIM); Los simbolos del alfabeto
(define e0 EIN); El estado inicial
(define A ACE); Los estados aceptores
(define T TRA); Las reglas de transicion en lista de tripletas
(super-new)
(define/public (estados) E)
(define/public (simbolos) S)
(define/public (edoIni) e0)
(define/public (aceptores) A)
(define/public (transiciones) T)
(define/private (3de tupla) ...)
(define/private (Tr e s)...)
;-------- METODOS CAP 5
(define/private (TR w e)...)
(define/public (congruentes? x y e)...)
(define/public (aceptor? e)...)
(define/public (acepta? w)...)
(define/public (e0! e)...)
(define/public (lenguaje k)...)
(define/public (nPropias* k)...)
(define/public (nImpropias* k)...)
;------------------------))


4.7. RESUMEN METODOS
DEL AFD %

103

Actividad 4-16

Crea tres afd %, cada automata


debe cumplir con una de las siguientes condiciones. El alfabeto en los tres casos es (a b c):
1. Empiecen con la letra b y terminen con cualquiera de las otras dos letras, pero no b.

2. Empiecen con el prefijo (a b a), y que luego tengan un numero


par de
cualquiera de las letras.

3. Tenga un numero
multiplo
de 8 de letras a, un numero
multiplo
de 4

de b y un numero
multiplo
de 2 de letras c.

Adendum: POO en DrRacket


multiparadigma, lo que significa
DrRacket es un lenguaje de programacion

que dentro del mismo codigo


es posible mezclar segmentos de programa escritos bajo paradigmas diferentes, por ejemplo objetos con estructuras de datos o
funciones aisladas.

orientada a objetos
Programacion
orientada a objetos POO es un paradigma de programacion

La Programacion
de entidades llamadas objetos que se crean para
que se basa en la definicion
modelar elementos que tienen sus propias caractersticas, aqu los conoceremos
como campos y los objetos son capaces de llevar a cabo funciones especficas que

en este a mbito conoceremos como metodos. En la POO los objetos interactuan

entre s enviandose mensajes para solicitar informacion.


La idea principal es que si un programa de computadora se realiza para prestar un servicio, es posible conceptualizar al programa de computadora como un

objeto al que se le solicite ese servicio. El objeto al que se le hace la peticion,


que necesite a otros objetos, con el fin de
puede a su vez solicitar la informacion

llevar a cabo el computo


que requiera.
entre objetos se puede llevar tan profundo
Este modelo de comunicacion
es
como se requiera. La ventaja del uso de objetos es que el nivel de abstraccion

mas alto, lo que significa que el programador se desentiende de como


se realizan
recibida.
los calculos en los objetos, y solamente se preocupa de la informacion
tpica es la de un reloj. Cuando se solicita la hora al reloj, lo que
Una ilustracion
importa es que el reloj proporcione la hora correctamente, y el usuario no se

preocupa de como
se obtuvo o cual fue el procedimiento para obtener la hora.
Para utilizar objetos en DrRacket se debe incorporar la biblioteca de fun
ciones (require racket/class) en el codigo
fuente de nuestro diccionario de

CAPITULO
4. AUTOMATAS
FINITOS DETERMINISTAS

104

definiciones, esto se escribe al inicio del codigo


fuente, justo despues de la directiva #lang racket que se encuentra en la primera lnea:
1
2
3
4

#lang racket
(require racket/class)
;
;

Clases
Las clases son los moldes o prototipos con los que se fabrican los objetos. Es
como un molde para hacer gelatinas; una vez que se tiene un molde para hacer
gelatinas de una cierta forma, es posible hacer una o mas gelatinas de la misma
forma. El procedimiento para crear objetos es primero crear una clase para cada
tipo de objeto que se ocupe.
de clase se llama class, y es una expresion
muy
En DrRacket una expresion
. Son similares en que ambas expresiones definen ensimilar a una expresion

tidades anonimas,
describe procedimientos anonimos,
mientras que class ds
cribe clases anonimas. La manera de describir una clase en DrRacket requiere
de subclase y despues todas las declaracioescribir class, luego una expresion
nes y expresiones.
(class expr-superclase decl-o-expr ...)
Todas las clases que se definan deben derivarse de una superclase. Hay una
clase que se llama object % que es la clase de mayor jerarqua en DrRacket, todas
las demas clases son derivadas directa o indirectamente de object %. Por conven en DrRacket todas los nombres para las clases terminan en %, esto ayuda al
cion
programador para determinar el uso de los identificadores.
que se relaciona con los metodos, camCada decl-o-expr es una declaracion
o bien es una expresion
que se evalua

pos y con los argumentos de inicializacion;


cada vez que la clase es instanciada (para crear un objeto).

Clase relacion %

Se define una clase llamada relacion % con tres argumentos de inicializacion

rel,dom y cod, la superclase object % con declaraciones de metodos publicos


Rel,
Dom, Cod e Im; y un metodo privado en? que recibe dos argumentos elem y Conj.
1
2
3
4
5
6
7
8
9

;; Definici
on de una clase para modelar una relaci
on matem
atica
;; Se debe dar la lista de pares relacionados, el dominio y codominio
(define relacion %
(class object %
(init rel dom cod) ; <-- argumentos de inicializacion
(define RE rel) ; <-- campo los pares de la relacion
(define DO dom) ; <-- campo el dominio
(define CO cod) ; <-- campo el codominio
(super-new) ; <-- inicializacion de la superclase


4.7. RESUMEN METODOS
DEL AFD %
10
11
12
13
14
15
16
17

105

(define/public (Rel) RE); Metodo publico. La relacion


(define/public (Dom) DO); Metodo publico el dominio
(define/public (Cod) CO); Metodo publico. El codominio
(define/public (Im x) ; Metodo publico. Imagen de un elemento
(filter ( (y) (en? (list x y) RE)) DO))
(define/private (en? elem Conj) ; <-- Metodo privado
(ormap ( (e) (equal? e elem)) Conj))
))

de una clase.
Veamos las partes importantes en la definicion
no tiene
1. El identificador class indica que se va a definir una clase, que aun
nombre, pero se le puede asignar uno mediante define. La clase es una
subclase de object %.
rel, dom y cod. Un argu2. La clase tiene tres argumentos de inicializacion
recibe valores para asegnarlos como valores iniciamento de inicializacion
les a alguno de los campos de la clase.
este campo se iniciali3. Se definen tres campos RE para establecer la relacion,

za con el valor rel, que es pasado mediante un argumento de inicializacion;


y el valor inicial se estableel campo DO establece el dominio de la relacion,
dom; y de manera similar para
ce mediante el argumento de inicializacion

el campo CO que sirve para el codominio de la relacion.


4. El procedimiento (super-new ), que permite inicializar la super clase.
Aqu en este ejemplo la superclase es object %. Esta superclase no tiene ar y no hace nada; pero super-new se debe utilizar
gumentos de inicializacion

de cualquier modo, porque una clase siempre debe invocar la inicializacion


de su superclase.

5. Los metodos publicos


se declaran con define/public, que utiliza una for sin utilizar , en realidad s se hace pero defima alternativa de definicion

ne/public es una manera mas corta. Los metodos publicos


son accesibles

unicamente
por medio de un envo de mensajes mediante send.
6. Los metodos privador se declaran con define/private, y son accesibles

unicamente
dentro de la misma clase. Un objeto de otra clase no puede
acceder a estos metodos.

Objetos
Los objetos son instancias de clases definidas. Es decir, primero se debe definir una clase y luego crear objetos de esa clase.Suponiendo que ya se cuenta con
de una clase, digamos la clase relacion %, para crear objetos de la
la definicion
new.
clase relacion % se utiliza una expresion
(new nombre-clase [arg-init val]...); Es un objeto an
onimo.
de objetos implica uso de memoria. Con cada objeto que se crea,
La creacion
se dedica un poco de memoria para alojar el valor de los campos, y tambien se
con los metodos.
gestiona memoria para la interaccion

CAPITULO
4. AUTOMATAS
FINITOS DETERMINISTAS

106
Ejemplo 4-9

con dominio y codominio en (1 2 3 4), definida por los


Sea R una relacion
pares ((1 4) (1 3) (2 2) (2 3) (2 4) (3 1) (3 4) (4 2) (4 4)).
1
2
3
4

(define R (new relacion % [rel ((1 4) (1 3) (2 2) (2 3) (2 4) (3 1) (3 4)


(4 2) (4 4))]
[dom (1 2 3 4)]
[cod (1 2 3 4)]))

Paso de mensajes
El uso de objetos, y de los metodos definidos dentro de ellos se utilizan por
medio del paso de mensajes, que pueden ser empleados en objetos o en procedimientos.

(send nomb-objeto nomb-metodo [arg ...])

Ejemplo 4-10
R en el ejemplo 4-9, se puede acceder a cualquiera
Al haber definido la relacion

de los metodos publicos.


> (send R Im 2)
(2 3 4)
>

Los metodos privados no se pueden utilizar desde un a mbito fuera de la

clase. Al tratar de utilizar un metodo publico


en un a mbito no permitido ocurre
un error.
Ejemplo 4-11
Error al tratar de utilizar un metodo privado desde un a mbito que esta fuera
de la clase.
de la definicion
> (send R en? (2 2) RE)
.. send: no such method
method name: en?
class name: relacion %
>

El metodo en? que es privado, no es visible desde un a mbito fuera de la clase.


5. Automatas
no determinstas

Contenido
de los afn % . . . . . . . . . .
5.1. Presentacion
5.1.1. Ejemplo de un afn % . . . . . . . . .
formal de un afn % . . .
5.1.2. Definicion
5.1.3. Atributos de afn % . . . . . . . . . .
5.1.4. La tabla de transiciones de un afn %
5.1.5. afn % como listas de transiciones .
5.1.6. Los metodos informativos . . . . .
de transicion
. . . . . . . . . .
5.2. La funcion
de transicion
extendida . . .
5.3. La funcion
5.4. El lenguaje del afn % . . . . . . . . . . . .
5.4.1. Palabras aceptadas . . . . . . . . .
5.4.2. Palabras propias . . . . . . . . . . .
5.4.3. Palabras impropias . . . . . . . . .
5.5. Equivalencia entre afn % y afd % . . . . . .
afn % afd % . . . . . .
5.5.1. Conversion

5.1.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

107
108
108
108
110
110
113
113
114
116
117
117
118
118
118

de los afn %
Presentacion

de un automata

En ocasiones el diseno
finito puede resultar un poco mas
complicado al tener que pensar para cada estado y para cada smbolo de entra
da, cual debe ser el siguiente estado del automata
finito. Eso puede ocurrir en
tre otras razones porque si el automata
se encuentra en un estado en particular,
smbolo de entrada en particular, pero
podra ser imposible que recibiera algun
determinstica lo exige, se debe definir cada uno de los pares
como la condicion
del producto cartesiano de estados con simbolos como posible entrada de la fun de transicion.
El caso que se ilustra es un buen motivo para introducir una
cion

primera variante de automatas


finitos, los automatas
finitos no determinstas
que abreviaremos afn %.

Un afn % es otro ejemplo de una maquina teorica


que genera objetos que tambien sirven para analizar palabras de smbolos de un alfabeto determinado, dicho

de otro modo, un afn % tambien nos sirve para analizar secuencias de senales
que

percibe el automata,
determinando si esa secuencia de entrada es aceptada o no
lo es.
Hay una diferencia importante con respecto a los afd %, los afn % pueden
dejar un estado (a causa de haber recibido un smbolo de entrada) y alzanzar
ninguno, uno o mas estados al mismo tiempo.
En este captulo estudiaremos una manera de definir los afn % que es orien
tada a objetos, creando una clase para definir este tipo de automatas.
Tambien
estudiaremos la manera en que cambia de estados y veremos que a pesar de la
107

108

CAPITULO
5. AUTOMATAS
NO DETERMINISTAS

diferencia importante, para cada afn % que se defina, existe un afd % que acepta
el mismo alfabeto.

5.1.1.

Ejemplo de un afn %

Tomemos como ejemplo la necesidad de construir un automata


finito que
acepte las palabras construidas con un smbolo inicial 0, seguida de cualquier

numero
(entero mayor o igual que 0) de veces los smbolos 1, 0 en ese orden, y
terminando con el smbolo 1. Tomando en cuenta que el alfabeto es (0 1). Para
definir un afd % que acepte las palabras descritas, debemos considerar cada uno
de los posibles casos, porque as lo exige el determinismo de los afd %.
La alternativa que ofrecen los afn %, es permitir no definir estado siguiente
si no es necesario, o bien poder definir mas de un estado siguiente, observa y
analiza el diagrama de estados de la figura 5.1.

Figura 5.1: afn % que acepta palabras que empiezan con 0, terminan con 1, y entre el inicio y el
final pueden ocurrie cualquier numero de veces los smbolos 1 y 0 en ese orden.

5.1.2.

formal de un afn %
Definicion

La clase de automatas
finitos no determinstas afd % se define por medio de
una tupla hEST SIM EIN ACE TRAi, donde todos los elementos son como en el
del conjunto de reglas de transicion.
Los elementos
caso determinsta a excepcion
dan valor a los atributos de la clase, que se describen a
de la tupla de definicion

continuacion.

5.1.3.

Atributos de afn %

Los atributos basicos1 de una clase afn % se pueden conocer por los elementos

de la tupla de definicion
hEST SIM EIN ACE TRAi,
1 La clase puede tener mas de estos atributos, pero estos son los que sin duda debe tener.

DE LOS AFN %
5.1. PRESENTACION

109

donde todos los elementos son como en los afd %, excepto el conjunto de reglas
TRA que ahora es un conjunto de reglas que asocian pares de estadode transicion
simbolo con conjuntos de estados.
Codigo 5.1: Definicion de campos en la clase afn %
1
2
3
4
5
6
7
8
9

(define afn %
(class object %
(init EST SIM EIN ACE TRA) ; los argumentos de inicializacion
(define E EST); Los estados
(define S SIM); Los simbolos del alfabeto
(define e0 EIN); El estado inicial
(define A ACE); Los estados aceptores
(define T TRA); Las reglas de transicion en lista de tripletas
(super-new)

10
11

; .... Metodos publicos y privados

12
13

))

EST: Es un conjunto finito y no vaco de estados, en este libro usualmente los

denotamos con una letra q inicial y luego un numero,


como en (q0 q1 q2
q3), pero esto no es una regla.
SIM: Es un conjunto finito y no vaco de smbolos de entrada, es el alfabeto con

el que se define el afn %. Todas las palabras que este automata


es capaz de
analizar son construidas con smbolos de este alfabeto; usualmente se usan

las letras o los numeros,


como (0 1) o (a b c).
EIN: Es uno de los estados, esto es que (pertenece? EIN EST) 7 #t.
ACE: Es un subconjunto no vaco de estados, que son considerados como los estados aceptores. Tambien (subconjunto? ACE EST) 7 #t.
llamada la funcion
de transicion
de estados, es una regla que
TRA: Es una funcion
relaciona pares compuestos por un estado y un smbolo de entrada, con un
subconjunto de estados. Por esto (TRA EST SIM) 7 POTEST?, y
POTEST 7 (conjuntoPotencia EST).
Ejemplo 5-1
Definamos un afn % llamado n01, que contenga los elementos que ya fueron
expuestos en el grafo de transiciones de la pagina 108:
> (define n01 (new afn %
[EST (q0 q1 q2 q3 q4
[SIM (0 1)]
[EIN q0]
[ACE (q2 q5)]
[TRA ((q0 0 (q1 q3))
(q1 0 ())
(q2 0 ())
(q3 0 ())
(q4 0 (q3))
(q5 0 ())
))
> n01
(object:afn % ...)

q5)]

(q0
(q1
(q2
(q3
(q4
(q5

1
1
1
1
1
1

())
(q2))
())
(q4 q5))
())
()))]

CAPITULO
5. AUTOMATAS
NO DETERMINISTAS

110

5.1.4.

La tabla de transiciones de un afn %

La unica
diferencia con la tabla de transiciones en un afd %, es la manera en
que se muestran los estados siguientes en las transiciones. El afn % de la figura
5.1 tiene la siguiente tabla de transiciones.

>q0
q1
q2
q3
q4
q5

0
hq1 q3i
hi
hi
hi
hq3i
hi

1
hi
hq2i
hi
hq4 q5i
hi
hi

Notamos que los estados siguientes, han sido agrupados para especificar que

a todos los
a partir de un estado y un smbolo el automata
hace una transicion
estados que se indican en el conjunto de estados.
El estado inicial se identifica con un smbolo [>], y los estados aceptores con
un punto [], si un estado es al mismo tiempo el estado inicial y uno de los estados
aceptores, entonces se marca con ambos smbolos.
Ya que los estados pertenecen a un conjunto, y los elementos de un conjunto pueden aparecer en cualquier orden, entonces el orden en que aparezcan los
estados en la tabla de transiciones es arbitrariamente elegido; de manera similar
ocurre con las columnas que representan las transiciones para cada uno de los
smbolos de entrada. Sin embargo, se debe seleccionar un orden y respetar el orden en cada una de las entradas de la tabla. Las siguientes tablas son equivalentes
a la anterior.

q3
q1
q2
>q0
q4
q5

0
hi
hi
hi
hq1 q3i
hq3i
hi

1
hq4 q5i
hq2i
hi
hi
hi
hi

q5
q3
q1
q2
>q0
q4

1
hi
hq4 q5i
hq2i
hi
hi
hi

0
hi
hi
hi
hi
hq1 q3i
hq3i

5.1.5. afn % como listas de transiciones


El formato de un archivo de texto es muy similar al que se utiliza para leer

automatas
afd %, la diferencia es que en los afn % es posible que a partir de un
subconjunto de estados,
estado e y un smbolo de entrada sj1 , se alcance algun
incluso puede ser el conjuntoVacio. Digamos que se alcanzan los estados (ei1
ei2 ... ein ) que de hecho representa un subconjunto de estados, para representar
en la definicion
de la funcion
de transicion
hemos agrupado en una
esta situacion
lista los tres elementos:

DE LOS AFN %
5.1. PRESENTACION

111

(e sj1 (ei1 ei2 ... ein )),


pero supongamos que ademas el afn % estando en el estado e pero ahora con el
smbolo sj2 puede alcanzar los estados (ej1 ej2 ... ejm ), lo que puede observar en
de las transiciones como
la definicion

(e sj2 (ek1 ek2 ... ekm )).


Ambas transiciones parten del mismo estado e, pero se ilustran las transiciones para dos diferentes smbolos de entrada, sj1 y sj2 , cada uno de ellos ocasiona
que el afn % alcance los estados que se declaran en sus conjuntos respectivos. En
el formato de texto esto se puede codificar como:
## e sj1 ei1 ei2 ... ein sj2 ek1 ek2 ... ekm

Los primeros dos smbolos ## representan alguno de los smbolos que identifican
el tipo de estado que se describen enseguida. Para hacer diferencia entre las clases
de nodos, incluiremos (como en el caso de los afd %) las marcas al inicio de cada
>>, **, --, y >*.
rengon
Ejemplo 5-2

El automata
afn % de la figura 5.1 en formato de texto.
>>
-**
--**

q0
q1
q2
q3
q4
q5

0
0
0
0
0
0

q1 q3 1
1 q2
1
1 q4 q5
q3 1
1

a la hora de obtener la confiEl formato en solo texto es especialmente util


de un afn % desde un archivo de texto. Pueden hacerse algunas observaguracion

ciones en el procedimiento para reconocer cada elemento del automata


desde un
archivo de texto:

del formato de texto corresponde a una lista de smbolos. Por


1. Cada renglon

ejemplo el renglon
-- q3 0 q3 1 q4 q5

corresponde a la lista (-- q3 0 q3 1 q4 q5); as el formato de texto se


codifica como una lista de listas.
2. El conjunto de estados se obtiene al coleccionar cada primer elemento del
resto de cada lista.
3. En cada lista aparecen todos los smbolos del alfabeto, de modo que para
obtener los smbolos del alfabeto se debe considerar una sola lista, digamos
la primera de la lista de listas.

CAPITULO
5. AUTOMATAS
NO DETERMINISTAS

112

4. Los smbolos del alfabeto se pueden conocer al filtrar todos aquellos smbo del conjunto de estados con el conjunto
los que no pertenezcan a la union
de smbolos de tipo de estado.
Actividad 5-1

para crear un nuevo objeto de la clase afn % y


1. Escribe una definicion
asignarlo al identificador n02.

2. Escribe una tabla de transiciones para este automata.


en forma de listas de transiciones para este mis3. Escribe una codificacion

mo automata.

Actividad 5-2
Escribe un procedimiento llamado text->afn (no es un metodo de la clase)
que reciba como entrada el nombre de un archivo de texto como una cadena
de caracteres (string), y genere un nuevo objeto de la clase afn % cuando el
error
archivo de texto contiene las especificaciones de un afn %. Si hubo algun
del archivo, el procedimiento debe responder
en la lectura o interpretacion
con #f.
> (define n02 (txt->afn "n02.dat"))
>

es:
En caso de error la interaccion
> (define n02 (txt->afn "n02.dat"))
#f
>
1
2
3
4
5
6
7
8

; Recibe el nombre de un archivo de texto con la codificacion


; de un afn; (txt->afn String) -->(or/c void #f)
;>(define n02 (txt->afn "n02.dat"))
;>
(define txt->afn
( (nomarch)
;; aqui escribes tu codigo
))

DE TRANSICION

5.2. LA FUNCION

5.1.6.

113

Los metodos informativos

basica que proporcioEstos metodos simplemente recuperan la informacion


na cada uno de los atributos. Los metodos que ya habamos definido para un afd %
(definidos a partir de la pagina 85) sirven perfectamente.
Codigo 5.2: Metodos informativos en la clase afn %
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

(define afn %
(class object %
(init EST SIM EIN FIN TRA) ; los argumentos de inicializacion
(define E EST); Los estados
(define S SIM); Los simbolos del alfabeto
(define e0 EIN); El estado inicial
(define A ACE); Los estados aceptores
(define T TRA); Las reglas de transicion en lista de tripletas
(super-new)
(define/public (estados) E)
(define/public (simbolos) S)
(define/public (edoIni) e0)
(define/public (aceptores) A)
(define/public (transiciones) T)
; .... Otros metodos publicos y privados
))

de los atribuLos metodos informativos son utiles


para obtener informacion
tos, esto es para saber que valor tienen actualmente las variables definidas como
puede accesarse unicamente

campos en la clase, ya que esa informacion


por me
acerca de
dio de los metodos publicos
de la clase. Para una mayor informacion
orientada a objetos, puedes consultar libros como el
la teora de la programacion
que aparece al pie de la pagina2 .

5.2.

de transicion

La funcion

de transicion
para los afn % permite que el automata

La funcion
pueda estar
en mas de un estado al mismo tiempo una vez que se ha analizado un smbolo de
el automata

entrada. Consideremos como ilustracion


etiquetado como n03, del
que muestro enseguida su grafo de transiciones:
Ejemplo 5-3

Si el automata
n03 se encuentra en el estado q2 y lee un smbolo 1, el automata reacciona y cambia de estado, lo caracterstico es que ahora puede cambiar
a mas de un estado; ahora se encontrara en los estados q3 y q5 al mismo
(q3 1 (q3 q5)) definida en la funcion
de trantiempo, ya que la transicion
as lo indica.
sicion
de los metodos 3de y Tr definido anteriormente para el caso
La defininicion
requerida.
determinstico cumplen con la funcion
2 Introduction to Object Oriented Programming Concepts (OOP) and More, de Code Project for
those who code, en http://www.codeproject.com/Articles/22769/Introduction-to-ObjectOriented-Programming-Concep

114

CAPITULO
5. AUTOMATAS
NO DETERMINISTAS

Figura 5.2: Automata finito no determinsta n03.

Codigo 5.3: Metodos informativos en la clase afn %


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

(define afn %
(class object %
(init EST SIM EIN FIN TRA) ; los argumentos de inicializacion
;...
;...
(define/private (3de tupla) ; recibe (a b c) devuelve c
(car (cdr (cdr tupla))))
(define/public (Tr e s)
(if (and (pertenece? e E) (pertenece? s S))
(3de (car (filter ( (t) (equal? (creaPar e s)
(take t 2)))
T)))
#f))
; .... Otros metodos publicos y privados
))

5.3.

de transicion
extendida
La funcion

Un afn % tiene el proposito


de clasificar palabras en dos clases, la clase de las
palabras aceptadas y las que no son aceptadas. Las palabras aceptadas definen el

del lenguaje de un
lenguaje del automata
afd % (ver pagina 99 para la definicion
afd %).

Para determinar si una palabra es aceptada el automata


analiza la palabra
letra por letra a partir de su estado inicial, y a medida que recibe cada letra puede
de aceptada se
cambiar desde un subconjunto de estados a otro. La condicion
logra cuando al terminar de analizar la palabra se alcanza un estado aceptor.
que extiende el uso de la funcion
de transicion

Vamos a definir una funcion

para determinar el estado final del automata


cuando analiza una palabra. Para
esto supongamos que S 7 hEST SIM EIN ACE TRAi es un afn %.
de transicion
extendida tiene el identificador Tr*, que debe reciLa funcion
bir como argumentos, un estado e y remarcamos que (pertenece? e E) 7 #t,

y una palabra w en S , con la siguiente definicion:

DE TRANSICION
EXTENDIDA
5.3. LA FUNCION

115

(TR Palabra Estados) 7 Conjunto/Estados?


(TR w e) 7 ; Con los siguientes casos
i. Si (palabraVacia? w) 7 #t, entonces (e)
ii. Si w 7 (w0 |w0 ), digamos que (Tr e w0 ) 7 (e01 e02 ... e0k ) es el conjunto

de estados que alcanza el automata


al analizar el primer smbolo de la
palabra. Entonces hacer (union-generalizada (TR w e01 )
(TR w e02 )
...
(TR w e0k ))

Actividad 5-3

Escribe un metodo publico


para la clase afn % que se llame TR y que reciba
como entrada una palabra w y un estado e, y que calcule el conjunto de estados
finales en los que se encontrara un afn % despues de haber analizado la palabra
w iniciando desde el estado e. Puedes utilizar las respuestas de la actividad 5-4
como ejemplos para verificar que tu programa de la respuesta correcta.

Figura 5.3: Automata afn % n04

Con el automata
de la figura 5.3 calculemos (TR (0 1) q1).

1. Tomamos el primer smbolo de la palabra y a partir del estado actual que


es q1 hacemos (Tr q1 0), esto produce el conjunto de estados (q2 q6).

Significa que el automata


se encuentra en dos estados al mismo tiempo el
q2 y q6, mientras que la palabra que resta por analizar es el sufijo (1).

CAPITULO
5. AUTOMATAS
NO DETERMINISTAS

116

2. Para determinar el siguiente conjunto de estados, se debe calcular la transi extendida para cada estado actual considerando el resto de la palabra,
cion
esto es:
a. Para el estado actual q2: (TR (1) q2) 7 (q2 q5) y la palabra

que resta por analizar es palabraVacia. Debemos hacer la transicion


extendida para cada conjunto resultante.
1) (TR () q2) 7 (q2)
2) (TR () q5) 7 (q5)
b. Para el estado actual q6: (TR (1) q6) 7 (q4) y la palabra que resta
extendida
por analizar es palabraVacia. Debemos hacer la transicion
para cada conjunto resultante.
1) (TR () q4) 7 (q4)
c. Se deben unir los subconjuntos resultantes
(union-generalizada (q2) (q5) (q4)) 7 (q2 q4 q5), que es
el nuevo conjunto de estados siguientes.

As (TR (0 1) q1) 7 (q2 q4 q5).

Actividad 5-4

Calcula el conjunto de estados finales cuando el automata


de la figura 5.3
presenta las siguientes situaciones:
1. Estado actual q4, con la palabra (0 0 1 1).
2. Estado actual q0, con la palabra (1 1 0 0).
3. Estado actual q1, con la palabra (0 0 1 1 1).
4. Estado actual q4, con la palabra (1 0 1 0).
5. Estado actual q3, con la palabra (1 0 1).
6. Estado actual q6, con la palabra (0 1).
7. Estado actual q2, con la palabra (0 1 1 1 0).

5.4.

El lenguaje del afn %

Al considerar como estado actual el estado inicial, y analizar las palabras


del conjunto S . Un subconjunto de la
en S , un afd % induce una biparticion
contiene las palabras que son aceptadas y en el otro las palabras no
biparticion
aceptadas. El conjunto de las palabras aceptadas forman el lenguaje del afn %.

5.4. EL LENGUAJE DEL AFN %

5.4.1.

117

Palabras aceptadas

Debido a la infinitud del conjunto S , consideraremos unicamente


el conjunto (nKleene* S k), que contiene todas las palabras en S de hasta longitud k.
finita del lenguaje del afn % es el lenguaje de hasta longitud k, que
As una version
contiene las palabras en (nKleene* S k) tales que (acepta? w) 7 #t, para cada
palabra w en S .
De manera informal, una palabra es aceptada si al ser analizada por el afn % a
partir del estado inicial, al menos uno de sus estados finales es un estado aceptor.
Formalmente, si N 7 hEST SIM EIN ACE TRAi es un afn % donde EST 7 (e1
e2 ... em ), podemos decir que N
(acepta? w) 7 ; Con los siguientes casos:

#t : Si (existeUn ( (efi ) (aceptor? efi )) (TR w EIN)) 7 #t


#f : En otro caso,

Aqu (TR w EIN) 7 (ef1 ef2 ... efk ) es el conjunto de estados finales, es decir
el subconjunto de estados que son alcanzados por N al finalizar el analisis de la
palabra w a partir del estado inicial EIN; y (aceptor? efi ) es un predicado que es

verdadero cuando el estado efi es uno de los estados aceptores del automata.
Actividad 5-5

Escribe un metodo publico


que se llame aceptor?. Debe recibir un estado e
en EST; y debe devolver #t si el estado e pertenece al conjunto de estados
aceptores ACE de N; y devuelve #f en caso contrario.

Actividad 5-6

Escribe un metodo publico


que se llame acepta?. Debe recibir una palabra w

en S ; y debe devolver #t si el automata


N acepta la palabra w; y devuelve #f si
la palabra w no es aceptada por N

5.4.2.

Palabras propias

Del mismo modo que ocurre en los afd %, el lenguaje de un afn % depende en
gran medida del estado a partir del cual se empiece a analizar una palabra.
Supongamos ahora que para un afn % donde EIN 7 e1 ,

CAPITULO
5. AUTOMATAS
NO DETERMINISTAS

118

S[e ] 7 (filter ( (w) (acepta? w)) S ); Las palabras en S que son


1
aceptadas a partir del estado e1 .
De manera similar, haremos que EIN 7 e2 y consecuentemente
S[e ] 7 (filter ( (w) (acepta? w)) S ); Las palabras en S que son
2
aceptadas a partir del estado e2 .
Haremos el mismo proceso cambiando de estado inicial a cada uno de los

estados del automata,


y al final tendremos el conjunto que contiene a cada uno

de los lenguajes del automata


cuando se inicia el analisis de las palabras en cada
uno de los estados.
(list S[e ] S[e ] ... S[e ] )
1

As el conjunto de las palabras propias de hasta longitud k del automata


N, lo consituyen las palabras que son aceptadas cuando el analisis de inicio en el
estado e1 y las labras que son aceptadas cuando el analisis se inicio en el estado
e1 y as en adelante hasta las palabras que fueron aceptadas cuando el estado
inicial fue em , esto es:
(k)

(k)

(k)

(kPropias N) 7 (interseccion-generalizada (list S[e ] S[e ] ... S[e ] ) )


El conjunto de las palabras kPropias agrupa a las palabras (de hasta longi
tud k) que son aceptadas por el automata
sin importar el estado inicial a partir
del cual se inicie el analisis de las palabras.

5.4.3.

Palabras impropias

De manera complementaria, el conjunto de las palabras impropias de hasta


longitud k, lo denotaremos por kImpropias, y agrupa a todas las palabras de

hasta longitud k que no son aceptadas por el automata,


sim importar el estado
inicial.
Hagamos ahora que R*[e1 ] 7 (diferencia-conjuntos S S[e ] ); El con1
junto de palabras no aceptadas a partir del estado e1

5.5.

Equivalencia entre afn % y afd %

alksdj

5.5.1.
asdo

afn % afd %
Conversion

Das könnte Ihnen auch gefallen